~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

Linux Cross Reference
Linux/include/linux/inetdevice.h

Version: ~ [ 2.4.0 ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 #ifndef _LINUX_INETDEVICE_H
  2 #define _LINUX_INETDEVICE_H
  3 
  4 #ifdef __KERNEL__
  5 
  6 struct ipv4_devconf
  7 {
  8         int     accept_redirects;
  9         int     send_redirects;
 10         int     secure_redirects;
 11         int     shared_media;
 12         int     accept_source_route;
 13         int     rp_filter;
 14         int     proxy_arp;
 15         int     bootp_relay;
 16         int     log_martians;
 17         int     forwarding;
 18         int     mc_forwarding;
 19         int     tag;
 20         void    *sysctl;
 21 };
 22 
 23 extern struct ipv4_devconf ipv4_devconf;
 24 
 25 struct in_device
 26 {
 27         struct net_device               *dev;
 28         atomic_t                refcnt;
 29         rwlock_t                lock;
 30         int                     dead;
 31         struct in_ifaddr        *ifa_list;      /* IP ifaddr chain              */
 32         struct ip_mc_list       *mc_list;       /* IP multicast filter chain    */
 33         unsigned long           mr_v1_seen;
 34         struct neigh_parms      *arp_parms;
 35         struct ipv4_devconf     cnf;
 36 };
 37 
 38 #define IN_DEV_FORWARD(in_dev)          ((in_dev)->cnf.forwarding)
 39 #define IN_DEV_MFORWARD(in_dev)         (ipv4_devconf.mc_forwarding && (in_dev)->cnf.mc_forwarding)
 40 #define IN_DEV_RPFILTER(in_dev)         (ipv4_devconf.rp_filter && (in_dev)->cnf.rp_filter)
 41 #define IN_DEV_SOURCE_ROUTE(in_dev)     (ipv4_devconf.accept_source_route && (in_dev)->cnf.accept_source_route)
 42 #define IN_DEV_BOOTP_RELAY(in_dev)      (ipv4_devconf.bootp_relay && (in_dev)->cnf.bootp_relay)
 43 
 44 #define IN_DEV_LOG_MARTIANS(in_dev)     (ipv4_devconf.log_martians || (in_dev)->cnf.log_martians)
 45 #define IN_DEV_PROXY_ARP(in_dev)        (ipv4_devconf.proxy_arp || (in_dev)->cnf.proxy_arp)
 46 #define IN_DEV_SHARED_MEDIA(in_dev)     (ipv4_devconf.shared_media || (in_dev)->cnf.shared_media)
 47 #define IN_DEV_TX_REDIRECTS(in_dev)     (ipv4_devconf.send_redirects || (in_dev)->cnf.send_redirects)
 48 #define IN_DEV_SEC_REDIRECTS(in_dev)    (ipv4_devconf.secure_redirects || (in_dev)->cnf.secure_redirects)
 49 #define IN_DEV_IDTAG(in_dev)            ((in_dev)->cnf.tag)
 50 
 51 #define IN_DEV_RX_REDIRECTS(in_dev) \
 52         ((IN_DEV_FORWARD(in_dev) && \
 53           (ipv4_devconf.accept_redirects && (in_dev)->cnf.accept_redirects)) \
 54          || (!IN_DEV_FORWARD(in_dev) && \
 55           (ipv4_devconf.accept_redirects || (in_dev)->cnf.accept_redirects)))
 56 
 57 struct in_ifaddr
 58 {
 59         struct in_ifaddr        *ifa_next;
 60         struct in_device        *ifa_dev;
 61         u32                     ifa_local;
 62         u32                     ifa_address;
 63         u32                     ifa_mask;
 64         u32                     ifa_broadcast;
 65         u32                     ifa_anycast;
 66         unsigned char           ifa_scope;
 67         unsigned char           ifa_flags;
 68         unsigned char           ifa_prefixlen;
 69         char                    ifa_label[IFNAMSIZ];
 70 };
 71 
 72 extern int register_inetaddr_notifier(struct notifier_block *nb);
 73 extern int unregister_inetaddr_notifier(struct notifier_block *nb);
 74 
 75 extern struct net_device        *ip_dev_find(u32 addr);
 76 extern int              inet_addr_onlink(struct in_device *in_dev, u32 a, u32 b);
 77 extern int              devinet_ioctl(unsigned int cmd, void *);
 78 extern void             devinet_init(void);
 79 extern struct in_device *inetdev_init(struct net_device *dev);
 80 extern struct in_device *inetdev_by_index(int);
 81 extern u32              inet_select_addr(const struct net_device *dev, u32 dst, int scope);
 82 extern struct in_ifaddr *inet_ifa_byprefix(struct in_device *in_dev, u32 prefix, u32 mask);
 83 extern void             inet_forward_change(void);
 84 
 85 extern __inline__ int inet_ifa_match(u32 addr, struct in_ifaddr *ifa)
 86 {
 87         return !((addr^ifa->ifa_address)&ifa->ifa_mask);
 88 }
 89 
 90 /*
 91  *      Check if a mask is acceptable.
 92  */
 93  
 94 extern __inline__ int bad_mask(u32 mask, u32 addr)
 95 {
 96         if (addr & (mask = ~mask))
 97                 return 1;
 98         mask = ntohl(mask);
 99         if (mask & (mask+1))
100                 return 1;
101         return 0;
102 }
103 
104 #define for_primary_ifa(in_dev) { struct in_ifaddr *ifa; \
105   for (ifa = (in_dev)->ifa_list; ifa && !(ifa->ifa_flags&IFA_F_SECONDARY); ifa = ifa->ifa_next)
106 
107 #define for_ifa(in_dev) { struct in_ifaddr *ifa; \
108   for (ifa = (in_dev)->ifa_list; ifa; ifa = ifa->ifa_next)
109 
110 
111 #define endfor_ifa(in_dev) }
112 
113 extern rwlock_t inetdev_lock;
114 
115 
116 extern __inline__ struct in_device *
117 in_dev_get(const struct net_device *dev)
118 {
119         struct in_device *in_dev;
120 
121         read_lock(&inetdev_lock);
122         in_dev = dev->ip_ptr;
123         if (in_dev)
124                 atomic_inc(&in_dev->refcnt);
125         read_unlock(&inetdev_lock);
126         return in_dev;
127 }
128 
129 extern __inline__ struct in_device *
130 __in_dev_get(const struct net_device *dev)
131 {
132         return (struct in_device*)dev->ip_ptr;
133 }
134 
135 extern void in_dev_finish_destroy(struct in_device *idev);
136 
137 extern __inline__ void
138 in_dev_put(struct in_device *idev)
139 {
140         if (atomic_dec_and_test(&idev->refcnt))
141                 in_dev_finish_destroy(idev);
142 }
143 
144 #define __in_dev_put(idev)  atomic_dec(&(idev)->refcnt)
145 #define in_dev_hold(idev)   atomic_inc(&(idev)->refcnt)
146 
147 #endif /* __KERNEL__ */
148 
149 extern __inline__ __u32 inet_make_mask(int logmask)
150 {
151         if (logmask)
152                 return htonl(~((1<<(32-logmask))-1));
153         return 0;
154 }
155 
156 extern __inline__ int inet_mask_len(__u32 mask)
157 {
158         if (!(mask = ntohl(mask)))
159                 return 0;
160         return 32 - ffz(~mask);
161 }
162 
163 
164 #endif /* _LINUX_INETDEVICE_H */
165 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

This page was automatically generated by the LXR engine.
Visit the LXR main site for more information.