Blame view
include/linux/inetdevice.h
6.33 KB
1da177e4c Linux-2.6.12-rc2 |
1 2 3 4 |
#ifndef _LINUX_INETDEVICE_H #define _LINUX_INETDEVICE_H #ifdef __KERNEL__ |
31be30854 [IPV4]: Add defau... |
5 |
#include <linux/bitmap.h> |
1da177e4c Linux-2.6.12-rc2 |
6 7 8 9 |
#include <linux/if.h> #include <linux/netdevice.h> #include <linux/rcupdate.h> #include <linux/timer.h> |
8bfe6d683 [IPV4]: include s... |
10 |
#include <linux/sysctl.h> |
1da177e4c Linux-2.6.12-rc2 |
11 12 13 |
struct ipv4_devconf { |
1da177e4c Linux-2.6.12-rc2 |
14 |
void *sysctl; |
42f811b8b [IPV4]: Convert I... |
15 |
int data[__NET_IPV4_CONF_MAX - 1]; |
31be30854 [IPV4]: Add defau... |
16 |
DECLARE_BITMAP(state, __NET_IPV4_CONF_MAX - 1); |
1da177e4c Linux-2.6.12-rc2 |
17 |
}; |
1da177e4c Linux-2.6.12-rc2 |
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
struct in_device { struct net_device *dev; atomic_t refcnt; int dead; struct in_ifaddr *ifa_list; /* IP ifaddr chain */ rwlock_t mc_list_lock; struct ip_mc_list *mc_list; /* IP multicast filter chain */ spinlock_t mc_tomb_lock; struct ip_mc_list *mc_tomb; unsigned long mr_v1_seen; unsigned long mr_v2_seen; unsigned long mr_maxdelay; unsigned char mr_qrv; unsigned char mr_gq_running; unsigned char mr_ifc_count; struct timer_list mr_gq_timer; /* general query timer */ struct timer_list mr_ifc_timer; /* interface change timer */ struct neigh_parms *arp_parms; struct ipv4_devconf cnf; struct rcu_head rcu_head; }; |
42f811b8b [IPV4]: Convert I... |
41 |
#define IPV4_DEVCONF(cnf, attr) ((cnf).data[NET_IPV4_CONF_ ## attr - 1]) |
586f12115 [IPV4]: Switch us... |
42 43 |
#define IPV4_DEVCONF_ALL(net, attr) \ IPV4_DEVCONF((*(net)->ipv4.devconf_all), attr) |
42f811b8b [IPV4]: Convert I... |
44 45 46 47 48 49 50 51 52 53 54 |
static inline int ipv4_devconf_get(struct in_device *in_dev, int index) { index--; return in_dev->cnf.data[index]; } static inline void ipv4_devconf_set(struct in_device *in_dev, int index, int val) { index--; |
31be30854 [IPV4]: Add defau... |
55 |
set_bit(index, in_dev->cnf.state); |
42f811b8b [IPV4]: Convert I... |
56 57 |
in_dev->cnf.data[index] = val; } |
71e27da96 [IPV4]: Restore o... |
58 59 60 61 |
static inline void ipv4_devconf_setall(struct in_device *in_dev) { bitmap_fill(in_dev->cnf.state, __NET_IPV4_CONF_MAX - 1); } |
42f811b8b [IPV4]: Convert I... |
62 63 64 65 66 67 |
#define IN_DEV_CONF_GET(in_dev, attr) \ ipv4_devconf_get((in_dev), NET_IPV4_CONF_ ## attr) #define IN_DEV_CONF_SET(in_dev, attr, val) \ ipv4_devconf_set((in_dev), NET_IPV4_CONF_ ## attr, (val)) #define IN_DEV_ANDCONF(in_dev, attr) \ |
c346dca10 [NET] NETNS: Omit... |
68 |
(IPV4_DEVCONF_ALL(dev_net(in_dev->dev), attr) && \ |
586f12115 [IPV4]: Switch us... |
69 |
IN_DEV_CONF_GET((in_dev), attr)) |
42f811b8b [IPV4]: Convert I... |
70 |
#define IN_DEV_ORCONF(in_dev, attr) \ |
c346dca10 [NET] NETNS: Omit... |
71 |
(IPV4_DEVCONF_ALL(dev_net(in_dev->dev), attr) || \ |
586f12115 [IPV4]: Switch us... |
72 |
IN_DEV_CONF_GET((in_dev), attr)) |
42f811b8b [IPV4]: Convert I... |
73 |
#define IN_DEV_MAXCONF(in_dev, attr) \ |
c346dca10 [NET] NETNS: Omit... |
74 |
(max(IPV4_DEVCONF_ALL(dev_net(in_dev->dev), attr), \ |
586f12115 [IPV4]: Switch us... |
75 |
IN_DEV_CONF_GET((in_dev), attr))) |
42f811b8b [IPV4]: Convert I... |
76 77 |
#define IN_DEV_FORWARD(in_dev) IN_DEV_CONF_GET((in_dev), FORWARDING) |
01ecfe9ba [IPV4]: Cleanup I... |
78 |
#define IN_DEV_MFORWARD(in_dev) IN_DEV_ANDCONF((in_dev), MC_FORWARDING) |
42f811b8b [IPV4]: Convert I... |
79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
#define IN_DEV_RPFILTER(in_dev) IN_DEV_ANDCONF((in_dev), RP_FILTER) #define IN_DEV_SOURCE_ROUTE(in_dev) IN_DEV_ANDCONF((in_dev), \ ACCEPT_SOURCE_ROUTE) #define IN_DEV_BOOTP_RELAY(in_dev) IN_DEV_ANDCONF((in_dev), BOOTP_RELAY) #define IN_DEV_LOG_MARTIANS(in_dev) IN_DEV_ORCONF((in_dev), LOG_MARTIANS) #define IN_DEV_PROXY_ARP(in_dev) IN_DEV_ORCONF((in_dev), PROXY_ARP) #define IN_DEV_SHARED_MEDIA(in_dev) IN_DEV_ORCONF((in_dev), SHARED_MEDIA) #define IN_DEV_TX_REDIRECTS(in_dev) IN_DEV_ORCONF((in_dev), SEND_REDIRECTS) #define IN_DEV_SEC_REDIRECTS(in_dev) IN_DEV_ORCONF((in_dev), \ SECURE_REDIRECTS) #define IN_DEV_IDTAG(in_dev) IN_DEV_CONF_GET(in_dev, TAG) #define IN_DEV_MEDIUM_ID(in_dev) IN_DEV_CONF_GET(in_dev, MEDIUM_ID) #define IN_DEV_PROMOTE_SECONDARIES(in_dev) \ IN_DEV_ORCONF((in_dev), \ PROMOTE_SECONDARIES) |
1da177e4c Linux-2.6.12-rc2 |
95 96 97 |
#define IN_DEV_RX_REDIRECTS(in_dev) \ ((IN_DEV_FORWARD(in_dev) && \ |
42f811b8b [IPV4]: Convert I... |
98 |
IN_DEV_ANDCONF((in_dev), ACCEPT_REDIRECTS)) \ |
1da177e4c Linux-2.6.12-rc2 |
99 |
|| (!IN_DEV_FORWARD(in_dev) && \ |
42f811b8b [IPV4]: Convert I... |
100 |
IN_DEV_ORCONF((in_dev), ACCEPT_REDIRECTS))) |
1da177e4c Linux-2.6.12-rc2 |
101 |
|
42f811b8b [IPV4]: Convert I... |
102 103 104 |
#define IN_DEV_ARPFILTER(in_dev) IN_DEV_ORCONF((in_dev), ARPFILTER) #define IN_DEV_ARP_ANNOUNCE(in_dev) IN_DEV_MAXCONF((in_dev), ARP_ANNOUNCE) #define IN_DEV_ARP_IGNORE(in_dev) IN_DEV_MAXCONF((in_dev), ARP_IGNORE) |
1da177e4c Linux-2.6.12-rc2 |
105 106 107 108 109 110 |
struct in_ifaddr { struct in_ifaddr *ifa_next; struct in_device *ifa_dev; struct rcu_head rcu_head; |
a144ea4b7 [IPV4]: annotate ... |
111 112 113 114 |
__be32 ifa_local; __be32 ifa_address; __be32 ifa_mask; __be32 ifa_broadcast; |
1da177e4c Linux-2.6.12-rc2 |
115 116 117 118 119 120 121 122 |
unsigned char ifa_scope; unsigned char ifa_flags; unsigned char ifa_prefixlen; char ifa_label[IFNAMSIZ]; }; extern int register_inetaddr_notifier(struct notifier_block *nb); extern int unregister_inetaddr_notifier(struct notifier_block *nb); |
1ab352768 [NETNS]: Add name... |
123 |
extern struct net_device *ip_dev_find(struct net *net, __be32 addr); |
ff428d72c [IPV4]: inet_addr... |
124 |
extern int inet_addr_onlink(struct in_device *in_dev, __be32 a, __be32 b); |
e5b13cb10 [NETNS]: Process ... |
125 |
extern int devinet_ioctl(struct net *net, unsigned int cmd, void __user *); |
1da177e4c Linux-2.6.12-rc2 |
126 |
extern void devinet_init(void); |
7fee0ca23 [NETNS]: Add netn... |
127 |
extern struct in_device *inetdev_by_index(struct net *, int); |
a61ced5d1 [IPV4]: inet_sele... |
128 |
extern __be32 inet_select_addr(const struct net_device *dev, __be32 dst, int scope); |
9bd85e326 [IPV4]: Remove ex... |
129 |
extern __be32 inet_confirm_addr(struct in_device *in_dev, __be32 dst, __be32 local, int scope); |
60cad5da5 [IPV4]: annotate ... |
130 |
extern struct in_ifaddr *inet_ifa_byprefix(struct in_device *in_dev, __be32 prefix, __be32 mask); |
1da177e4c Linux-2.6.12-rc2 |
131 |
|
60cad5da5 [IPV4]: annotate ... |
132 |
static __inline__ int inet_ifa_match(__be32 addr, struct in_ifaddr *ifa) |
1da177e4c Linux-2.6.12-rc2 |
133 134 135 136 137 138 139 140 |
{ return !((addr^ifa->ifa_address)&ifa->ifa_mask); } /* * Check if a mask is acceptable. */ |
714e85be3 [IPV6]: Assorted ... |
141 |
static __inline__ int bad_mask(__be32 mask, __be32 addr) |
1da177e4c Linux-2.6.12-rc2 |
142 |
{ |
714e85be3 [IPV6]: Assorted ... |
143 |
__u32 hmask; |
1da177e4c Linux-2.6.12-rc2 |
144 145 |
if (addr & (mask = ~mask)) return 1; |
714e85be3 [IPV6]: Assorted ... |
146 147 |
hmask = ntohl(mask); if (hmask & (hmask+1)) |
1da177e4c Linux-2.6.12-rc2 |
148 149 150 151 152 153 154 155 156 157 158 159 |
return 1; return 0; } #define for_primary_ifa(in_dev) { struct in_ifaddr *ifa; \ for (ifa = (in_dev)->ifa_list; ifa && !(ifa->ifa_flags&IFA_F_SECONDARY); ifa = ifa->ifa_next) #define for_ifa(in_dev) { struct in_ifaddr *ifa; \ for (ifa = (in_dev)->ifa_list; ifa; ifa = ifa->ifa_next) #define endfor_ifa(in_dev) } |
e5ed63991 [IPV4]: Replace _... |
160 161 162 163 164 165 166 |
static inline struct in_device *__in_dev_get_rcu(const struct net_device *dev) { struct in_device *in_dev = dev->ip_ptr; if (in_dev) in_dev = rcu_dereference(in_dev); return in_dev; } |
1da177e4c Linux-2.6.12-rc2 |
167 168 169 170 171 172 |
static __inline__ struct in_device * in_dev_get(const struct net_device *dev) { struct in_device *in_dev; rcu_read_lock(); |
e5ed63991 [IPV4]: Replace _... |
173 |
in_dev = __in_dev_get_rcu(dev); |
1da177e4c Linux-2.6.12-rc2 |
174 175 176 177 178 179 180 |
if (in_dev) atomic_inc(&in_dev->refcnt); rcu_read_unlock(); return in_dev; } static __inline__ struct in_device * |
e5ed63991 [IPV4]: Replace _... |
181 |
__in_dev_get_rtnl(const struct net_device *dev) |
1da177e4c Linux-2.6.12-rc2 |
182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 |
{ return (struct in_device*)dev->ip_ptr; } extern void in_dev_finish_destroy(struct in_device *idev); static inline void in_dev_put(struct in_device *idev) { if (atomic_dec_and_test(&idev->refcnt)) in_dev_finish_destroy(idev); } #define __in_dev_put(idev) atomic_dec(&(idev)->refcnt) #define in_dev_hold(idev) atomic_inc(&(idev)->refcnt) #endif /* __KERNEL__ */ |
60cad5da5 [IPV4]: annotate ... |
198 |
static __inline__ __be32 inet_make_mask(int logmask) |
1da177e4c Linux-2.6.12-rc2 |
199 200 201 202 203 |
{ if (logmask) return htonl(~((1<<(32-logmask))-1)); return 0; } |
714e85be3 [IPV6]: Assorted ... |
204 |
static __inline__ int inet_mask_len(__be32 mask) |
1da177e4c Linux-2.6.12-rc2 |
205 |
{ |
714e85be3 [IPV6]: Assorted ... |
206 207 |
__u32 hmask = ntohl(mask); if (!hmask) |
1da177e4c Linux-2.6.12-rc2 |
208 |
return 0; |
714e85be3 [IPV6]: Assorted ... |
209 |
return 32 - ffz(~hmask); |
1da177e4c Linux-2.6.12-rc2 |
210 211 212 213 |
} #endif /* _LINUX_INETDEVICE_H */ |