Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
include
net
dn_route.h
Go to the documentation of this file.
1
#ifndef _NET_DN_ROUTE_H
2
#define _NET_DN_ROUTE_H
3
4
/******************************************************************************
5
(c) 1995-1998 E.M. Serrat
[email protected]
6
7
This program is free software; you can redistribute it and/or modify
8
it under the terms of the GNU General Public License as published by
9
the Free Software Foundation; either version 2 of the License, or
10
any later version.
11
12
This program is distributed in the hope that it will be useful,
13
but WITHOUT ANY WARRANTY; without even the implied warranty of
14
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
GNU General Public License for more details.
16
*******************************************************************************/
17
18
extern
struct
sk_buff
*
dn_alloc_skb
(
struct
sock
*
sk
,
int
size
,
gfp_t
pri
);
19
extern
int
dn_route_output_sock
(
struct
dst_entry
**pprt,
struct
flowidn
*,
struct
sock
*
sk
,
int
flags
);
20
extern
int
dn_cache_dump
(
struct
sk_buff
*
skb
,
struct
netlink_callback
*
cb
);
21
extern
void
dn_rt_cache_flush
(
int
delay
);
22
23
/* Masks for flags field */
24
#define DN_RT_F_PID 0x07
/* Mask for packet type */
25
#define DN_RT_F_PF 0x80
/* Padding Follows */
26
#define DN_RT_F_VER 0x40
/* Version =0 discard packet if ==1 */
27
#define DN_RT_F_IE 0x20
/* Intra Ethernet, Reserved in short pkt */
28
#define DN_RT_F_RTS 0x10
/* Packet is being returned to sender */
29
#define DN_RT_F_RQR 0x08
/* Return packet to sender upon non-delivery */
30
31
/* Mask for types of routing packets */
32
#define DN_RT_PKT_MSK 0x06
33
/* Types of routing packets */
34
#define DN_RT_PKT_SHORT 0x02
/* Short routing packet */
35
#define DN_RT_PKT_LONG 0x06
/* Long routing packet */
36
37
/* Mask for control/routing selection */
38
#define DN_RT_PKT_CNTL 0x01
/* Set to 1 if a control packet */
39
/* Types of control packets */
40
#define DN_RT_CNTL_MSK 0x0f
/* Mask for control packets */
41
#define DN_RT_PKT_INIT 0x01
/* Initialisation packet */
42
#define DN_RT_PKT_VERI 0x03
/* Verification Message */
43
#define DN_RT_PKT_HELO 0x05
/* Hello and Test Message */
44
#define DN_RT_PKT_L1RT 0x07
/* Level 1 Routing Message */
45
#define DN_RT_PKT_L2RT 0x09
/* Level 2 Routing Message */
46
#define DN_RT_PKT_ERTH 0x0b
/* Ethernet Router Hello */
47
#define DN_RT_PKT_EEDH 0x0d
/* Ethernet EndNode Hello */
48
49
/* Values for info field in hello message */
50
#define DN_RT_INFO_TYPE 0x03
/* Type mask */
51
#define DN_RT_INFO_L1RT 0x02
/* L1 Router */
52
#define DN_RT_INFO_L2RT 0x01
/* L2 Router */
53
#define DN_RT_INFO_ENDN 0x03
/* EndNode */
54
#define DN_RT_INFO_VERI 0x04
/* Verification Reqd. */
55
#define DN_RT_INFO_RJCT 0x08
/* Reject Flag, Reserved */
56
#define DN_RT_INFO_VFLD 0x10
/* Verification Failed, Reserved */
57
#define DN_RT_INFO_NOML 0x20
/* No Multicast traffic accepted */
58
#define DN_RT_INFO_BLKR 0x40
/* Blocking Requested */
59
60
/*
61
* The fl structure is what we used to look up the route.
62
* The rt_saddr & rt_daddr entries are the same as key.saddr & key.daddr
63
* except for local input routes, where the rt_saddr = fl.fld_dst and
64
* rt_daddr = fl.fld_src to allow the route to be used for returning
65
* packets to the originating host.
66
*/
67
struct
dn_route
{
68
struct
dst_entry
dst
;
69
70
struct
neighbour
*
n
;
71
72
struct
flowidn
fld
;
73
74
__le16
rt_saddr
;
75
__le16
rt_daddr
;
76
__le16
rt_gateway
;
77
__le16
rt_local_src
;
/* Source used for forwarding packets */
78
__le16
rt_src_map
;
79
__le16
rt_dst_map
;
80
81
unsigned
int
rt_flags
;
82
unsigned
int
rt_type
;
83
};
84
85
static
inline
bool
dn_is_input_route(
struct
dn_route
*rt)
86
{
87
return
rt->
fld
.flowidn_iif != 0;
88
}
89
90
static
inline
bool
dn_is_output_route(
struct
dn_route
*rt)
91
{
92
return
rt->
fld
.flowidn_iif == 0;
93
}
94
95
extern
void
dn_route_init
(
void
);
96
extern
void
dn_route_cleanup
(
void
);
97
98
#include <
net/sock.h
>
99
#include <linux/if_arp.h>
100
101
static
inline
void
dn_rt_send(
struct
sk_buff
*
skb
)
102
{
103
dev_queue_xmit
(skb);
104
}
105
106
static
inline
void
dn_rt_finish_output(
struct
sk_buff
*
skb
,
char
*
dst
,
char
*
src
)
107
{
108
struct
net_device
*
dev
= skb->
dev
;
109
110
if
((dev->
type
!=
ARPHRD_ETHER
) && (dev->
type
!=
ARPHRD_LOOPBACK
))
111
dst =
NULL
;
112
113
if
(dev_hard_header(skb, dev,
ETH_P_DNA_RT
, dst, src, skb->
len
) >= 0)
114
dn_rt_send(skb);
115
else
116
kfree_skb
(skb);
117
}
118
119
#endif
/* _NET_DN_ROUTE_H */
Generated on Thu Jan 10 2013 14:53:03 for Linux Kernel by
1.8.2