diff options
| author | Herbert Xu <herbert@gondor.apana.org.au> | 2007-06-05 02:34:44 -0400 |
|---|---|---|
| committer | David S. Miller <davem@sunset.davemloft.net> | 2007-06-07 16:39:13 -0400 |
| commit | 42f811b8bcdf6695bf74de580b1daf53445e8949 (patch) | |
| tree | c7c9dd321c63eb24c5d41488b47b7178c6c9b572 /include/linux | |
| parent | 8d76527e728d00d1cf9d5dd663caffb2dcf05ae6 (diff) | |
[IPV4]: Convert IPv4 devconf to an array
This patch converts the ipv4_devconf config members (everything except
sysctl) to an array. This allows easier manipulation which will be
needed later on to provide better management of default config values.
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/inetdevice.h | 94 |
1 files changed, 54 insertions, 40 deletions
diff --git a/include/linux/inetdevice.h b/include/linux/inetdevice.h index c0f7aec331c2..1ef174d83e09 100644 --- a/include/linux/inetdevice.h +++ b/include/linux/inetdevice.h | |||
| @@ -10,28 +10,8 @@ | |||
| 10 | 10 | ||
| 11 | struct ipv4_devconf | 11 | struct ipv4_devconf |
| 12 | { | 12 | { |
| 13 | int accept_redirects; | ||
| 14 | int send_redirects; | ||
| 15 | int secure_redirects; | ||
| 16 | int shared_media; | ||
| 17 | int accept_source_route; | ||
| 18 | int rp_filter; | ||
| 19 | int proxy_arp; | ||
| 20 | int bootp_relay; | ||
| 21 | int log_martians; | ||
| 22 | int forwarding; | ||
| 23 | int mc_forwarding; | ||
| 24 | int tag; | ||
| 25 | int arp_filter; | ||
| 26 | int arp_announce; | ||
| 27 | int arp_ignore; | ||
| 28 | int arp_accept; | ||
| 29 | int medium_id; | ||
| 30 | int no_xfrm; | ||
| 31 | int no_policy; | ||
| 32 | int force_igmp_version; | ||
| 33 | int promote_secondaries; | ||
| 34 | void *sysctl; | 13 | void *sysctl; |
| 14 | int data[__NET_IPV4_CONF_MAX - 1]; | ||
| 35 | }; | 15 | }; |
| 36 | 16 | ||
| 37 | extern struct ipv4_devconf ipv4_devconf; | 17 | extern struct ipv4_devconf ipv4_devconf; |
| @@ -60,30 +40,64 @@ struct in_device | |||
| 60 | struct rcu_head rcu_head; | 40 | struct rcu_head rcu_head; |
| 61 | }; | 41 | }; |
| 62 | 42 | ||
| 63 | #define IN_DEV_FORWARD(in_dev) ((in_dev)->cnf.forwarding) | 43 | #define IPV4_DEVCONF(cnf, attr) ((cnf).data[NET_IPV4_CONF_ ## attr - 1]) |
| 64 | #define IN_DEV_MFORWARD(in_dev) (ipv4_devconf.mc_forwarding && (in_dev)->cnf.mc_forwarding) | 44 | #define IPV4_DEVCONF_ALL(attr) IPV4_DEVCONF(ipv4_devconf, attr) |
| 65 | #define IN_DEV_RPFILTER(in_dev) (ipv4_devconf.rp_filter && (in_dev)->cnf.rp_filter) | 45 | |
| 66 | #define IN_DEV_SOURCE_ROUTE(in_dev) (ipv4_devconf.accept_source_route && (in_dev)->cnf.accept_source_route) | 46 | static inline int ipv4_devconf_get(struct in_device *in_dev, int index) |
| 67 | #define IN_DEV_BOOTP_RELAY(in_dev) (ipv4_devconf.bootp_relay && (in_dev)->cnf.bootp_relay) | 47 | { |
| 68 | 48 | index--; | |
| 69 | #define IN_DEV_LOG_MARTIANS(in_dev) (ipv4_devconf.log_martians || (in_dev)->cnf.log_martians) | 49 | return in_dev->cnf.data[index]; |
| 70 | #define IN_DEV_PROXY_ARP(in_dev) (ipv4_devconf.proxy_arp || (in_dev)->cnf.proxy_arp) | 50 | } |
| 71 | #define IN_DEV_SHARED_MEDIA(in_dev) (ipv4_devconf.shared_media || (in_dev)->cnf.shared_media) | 51 | |
| 72 | #define IN_DEV_TX_REDIRECTS(in_dev) (ipv4_devconf.send_redirects || (in_dev)->cnf.send_redirects) | 52 | static inline void ipv4_devconf_set(struct in_device *in_dev, int index, |
| 73 | #define IN_DEV_SEC_REDIRECTS(in_dev) (ipv4_devconf.secure_redirects || (in_dev)->cnf.secure_redirects) | 53 | int val) |
| 74 | #define IN_DEV_IDTAG(in_dev) ((in_dev)->cnf.tag) | 54 | { |
| 75 | #define IN_DEV_MEDIUM_ID(in_dev) ((in_dev)->cnf.medium_id) | 55 | index--; |
| 76 | #define IN_DEV_PROMOTE_SECONDARIES(in_dev) (ipv4_devconf.promote_secondaries || (in_dev)->cnf.promote_secondaries) | 56 | in_dev->cnf.data[index] = val; |
| 57 | } | ||
| 58 | |||
| 59 | #define IN_DEV_CONF_GET(in_dev, attr) \ | ||
| 60 | ipv4_devconf_get((in_dev), NET_IPV4_CONF_ ## attr) | ||
| 61 | #define IN_DEV_CONF_SET(in_dev, attr, val) \ | ||
| 62 | ipv4_devconf_set((in_dev), NET_IPV4_CONF_ ## attr, (val)) | ||
| 63 | |||
| 64 | #define IN_DEV_ANDCONF(in_dev, attr) \ | ||
| 65 | (IPV4_DEVCONF_ALL(attr) && IN_DEV_CONF_GET((in_dev), attr)) | ||
| 66 | #define IN_DEV_ORCONF(in_dev, attr) \ | ||
| 67 | (IPV4_DEVCONF_ALL(attr) || IN_DEV_CONF_GET((in_dev), attr)) | ||
| 68 | #define IN_DEV_MAXCONF(in_dev, attr) \ | ||
| 69 | (max(IPV4_DEVCONF_ALL(attr), IN_DEV_CONF_GET((in_dev), attr))) | ||
| 70 | |||
| 71 | #define IN_DEV_FORWARD(in_dev) IN_DEV_CONF_GET((in_dev), FORWARDING) | ||
| 72 | #define IN_DEV_MFORWARD(in_dev) (IPV4_DEVCONF_ALL(MC_FORWARDING) && \ | ||
| 73 | IPV4_DEVCONF((in_dev)->cnf, \ | ||
| 74 | MC_FORWARDING)) | ||
| 75 | #define IN_DEV_RPFILTER(in_dev) IN_DEV_ANDCONF((in_dev), RP_FILTER) | ||
| 76 | #define IN_DEV_SOURCE_ROUTE(in_dev) IN_DEV_ANDCONF((in_dev), \ | ||
| 77 | ACCEPT_SOURCE_ROUTE) | ||
| 78 | #define IN_DEV_BOOTP_RELAY(in_dev) IN_DEV_ANDCONF((in_dev), BOOTP_RELAY) | ||
| 79 | |||
| 80 | #define IN_DEV_LOG_MARTIANS(in_dev) IN_DEV_ORCONF((in_dev), LOG_MARTIANS) | ||
| 81 | #define IN_DEV_PROXY_ARP(in_dev) IN_DEV_ORCONF((in_dev), PROXY_ARP) | ||
| 82 | #define IN_DEV_SHARED_MEDIA(in_dev) IN_DEV_ORCONF((in_dev), SHARED_MEDIA) | ||
| 83 | #define IN_DEV_TX_REDIRECTS(in_dev) IN_DEV_ORCONF((in_dev), SEND_REDIRECTS) | ||
| 84 | #define IN_DEV_SEC_REDIRECTS(in_dev) IN_DEV_ORCONF((in_dev), \ | ||
| 85 | SECURE_REDIRECTS) | ||
| 86 | #define IN_DEV_IDTAG(in_dev) IN_DEV_CONF_GET(in_dev, TAG) | ||
| 87 | #define IN_DEV_MEDIUM_ID(in_dev) IN_DEV_CONF_GET(in_dev, MEDIUM_ID) | ||
| 88 | #define IN_DEV_PROMOTE_SECONDARIES(in_dev) \ | ||
| 89 | IN_DEV_ORCONF((in_dev), \ | ||
| 90 | PROMOTE_SECONDARIES) | ||
| 77 | 91 | ||
| 78 | #define IN_DEV_RX_REDIRECTS(in_dev) \ | 92 | #define IN_DEV_RX_REDIRECTS(in_dev) \ |
| 79 | ((IN_DEV_FORWARD(in_dev) && \ | 93 | ((IN_DEV_FORWARD(in_dev) && \ |
| 80 | (ipv4_devconf.accept_redirects && (in_dev)->cnf.accept_redirects)) \ | 94 | IN_DEV_ANDCONF((in_dev), ACCEPT_REDIRECTS)) \ |
| 81 | || (!IN_DEV_FORWARD(in_dev) && \ | 95 | || (!IN_DEV_FORWARD(in_dev) && \ |
| 82 | (ipv4_devconf.accept_redirects || (in_dev)->cnf.accept_redirects))) | 96 | IN_DEV_ORCONF((in_dev), ACCEPT_REDIRECTS))) |
| 83 | 97 | ||
| 84 | #define IN_DEV_ARPFILTER(in_dev) (ipv4_devconf.arp_filter || (in_dev)->cnf.arp_filter) | 98 | #define IN_DEV_ARPFILTER(in_dev) IN_DEV_ORCONF((in_dev), ARPFILTER) |
| 85 | #define IN_DEV_ARP_ANNOUNCE(in_dev) (max(ipv4_devconf.arp_announce, (in_dev)->cnf.arp_announce)) | 99 | #define IN_DEV_ARP_ANNOUNCE(in_dev) IN_DEV_MAXCONF((in_dev), ARP_ANNOUNCE) |
| 86 | #define IN_DEV_ARP_IGNORE(in_dev) (max(ipv4_devconf.arp_ignore, (in_dev)->cnf.arp_ignore)) | 100 | #define IN_DEV_ARP_IGNORE(in_dev) IN_DEV_MAXCONF((in_dev), ARP_IGNORE) |
| 87 | 101 | ||
| 88 | struct in_ifaddr | 102 | struct in_ifaddr |
| 89 | { | 103 | { |
