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
ipx.h
Go to the documentation of this file.
1
#ifndef _NET_INET_IPX_H_
2
#define _NET_INET_IPX_H_
3
/*
4
* The following information is in its entirety obtained from:
5
*
6
* Novell 'IPX Router Specification' Version 1.10
7
* Part No. 107-000029-001
8
*
9
* Which is available from ftp.novell.com
10
*/
11
12
#include <linux/netdevice.h>
13
#include <
net/datalink.h
>
14
#include <
linux/ipx.h
>
15
#include <linux/list.h>
16
#include <linux/slab.h>
17
18
struct
ipx_address
{
19
__be32
net
;
20
__u8
node
[
IPX_NODE_LEN
];
21
__be16
sock
;
22
};
23
24
#define ipx_broadcast_node "\377\377\377\377\377\377"
25
#define ipx_this_node "\0\0\0\0\0\0"
26
27
#define IPX_MAX_PPROP_HOPS 8
28
29
struct
ipxhdr
{
30
__be16
ipx_checksum
__packed
;
31
#define IPX_NO_CHECKSUM cpu_to_be16(0xFFFF)
32
__be16
ipx_pktsize
__packed
;
33
__u8
ipx_tctrl
;
34
__u8
ipx_type
;
35
#define IPX_TYPE_UNKNOWN 0x00
36
#define IPX_TYPE_RIP 0x01
/* may also be 0 */
37
#define IPX_TYPE_SAP 0x04
/* may also be 0 */
38
#define IPX_TYPE_SPX 0x05
/* SPX protocol */
39
#define IPX_TYPE_NCP 0x11
/* $lots for docs on this (SPIT) */
40
#define IPX_TYPE_PPROP 0x14
/* complicated flood fill brdcast */
41
struct
ipx_address
ipx_dest
__packed
;
42
struct
ipx_address
ipx_source
__packed
;
43
};
44
45
static
__inline__
struct
ipxhdr
*ipx_hdr(
struct
sk_buff
*
skb
)
46
{
47
return
(
struct
ipxhdr
*)skb_transport_header(skb);
48
}
49
50
struct
ipx_interface
{
51
/* IPX address */
52
__be32
if_netnum
;
53
unsigned
char
if_node
[
IPX_NODE_LEN
];
54
atomic_t
refcnt
;
55
56
/* physical device info */
57
struct
net_device
*
if_dev
;
58
struct
datalink_proto
*
if_dlink
;
59
__be16
if_dlink_type
;
60
61
/* socket support */
62
unsigned
short
if_sknum
;
63
struct
hlist_head
if_sklist
;
64
spinlock_t
if_sklist_lock
;
65
66
/* administrative overhead */
67
int
if_ipx_offset
;
68
unsigned
char
if_internal
;
69
unsigned
char
if_primary
;
70
71
struct
list_head
node
;
/* node in ipx_interfaces list */
72
};
73
74
struct
ipx_route
{
75
__be32
ir_net
;
76
struct
ipx_interface
*
ir_intrfc
;
77
unsigned
char
ir_routed
;
78
unsigned
char
ir_router_node
[
IPX_NODE_LEN
];
79
struct
list_head
node
;
/* node in ipx_routes list */
80
atomic_t
refcnt
;
81
};
82
83
struct
ipx_cb
{
84
u8
ipx_tctrl
;
85
__be32
ipx_dest_net
;
86
__be32
ipx_source_net
;
87
struct
{
88
__be32
netnum
;
89
int
index
;
90
}
last_hop
;
91
};
92
93
#include <
net/sock.h
>
94
95
struct
ipx_sock
{
96
/* struct sock has to be the first member of ipx_sock */
97
struct
sock
sk
;
98
struct
ipx_address
dest_addr
;
99
struct
ipx_interface
*
intrfc
;
100
__be16
port
;
101
#ifdef CONFIG_IPX_INTERN
102
unsigned
char
node
[
IPX_NODE_LEN
];
103
#endif
104
unsigned
short
type
;
105
/*
106
* To handle special ncp connection-handling sockets for mars_nwe,
107
* the connection number must be stored in the socket.
108
*/
109
unsigned
short
ipx_ncp_conn
;
110
};
111
112
static
inline
struct
ipx_sock
*ipx_sk(
struct
sock
*
sk
)
113
{
114
return
(
struct
ipx_sock
*)
sk
;
115
}
116
117
#define IPX_SKB_CB(__skb) ((struct ipx_cb *)&((__skb)->cb[0]))
118
119
#define IPX_MIN_EPHEMERAL_SOCKET 0x4000
120
#define IPX_MAX_EPHEMERAL_SOCKET 0x7fff
121
122
extern
struct
list_head
ipx_routes
;
123
extern
rwlock_t
ipx_routes_lock
;
124
125
extern
struct
list_head
ipx_interfaces
;
126
extern
struct
ipx_interface
*
ipx_interfaces_head
(
void
);
127
extern
spinlock_t
ipx_interfaces_lock
;
128
129
extern
struct
ipx_interface
*
ipx_primary_net
;
130
131
extern
int
ipx_proc_init
(
void
);
132
extern
void
ipx_proc_exit
(
void
);
133
134
extern
const
char
*
ipx_frame_name
(
__be16
);
135
extern
const
char
*
ipx_device_name
(
struct
ipx_interface
*intrfc);
136
137
static
__inline__
void
ipxitf_hold(
struct
ipx_interface
*intrfc)
138
{
139
atomic_inc
(&intrfc->
refcnt
);
140
}
141
142
extern
void
ipxitf_down
(
struct
ipx_interface
*intrfc);
143
144
static
__inline__
void
ipxitf_put(
struct
ipx_interface
*intrfc)
145
{
146
if
(
atomic_dec_and_test
(&intrfc->
refcnt
))
147
ipxitf_down
(intrfc);
148
}
149
150
static
__inline__
void
ipxrtr_hold(
struct
ipx_route
*rt)
151
{
152
atomic_inc
(&rt->
refcnt
);
153
}
154
155
static
__inline__
void
ipxrtr_put(
struct
ipx_route
*rt)
156
{
157
if
(
atomic_dec_and_test
(&rt->
refcnt
))
158
kfree
(rt);
159
}
160
#endif
/* _NET_INET_IPX_H_ */
Generated on Thu Jan 10 2013 14:53:07 for Linux Kernel by
1.8.2