Blame view

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