Commit 02291680 authored by Eric W. Biederman's avatar Eric W. Biederman Committed by David S. Miller

net ipv4: Decouple ipv4 interface parameters from binary sysctl numbers

Stop using the binary sysctl enumeartion in sysctl.h as an index into
a per interface array.  This leads to unnecessary binary sysctl number
allocation, and a fragility in data structure and implementation
because of unnecessary coupling.
Signed-off-by: default avatarEric W. Biederman <ebiederm@xmission.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 9e3f8063
...@@ -10,10 +10,40 @@ ...@@ -10,10 +10,40 @@
#include <linux/timer.h> #include <linux/timer.h>
#include <linux/sysctl.h> #include <linux/sysctl.h>
enum
{
IPV4_DEVCONF_FORWARDING=1,
IPV4_DEVCONF_MC_FORWARDING,
IPV4_DEVCONF_PROXY_ARP,
IPV4_DEVCONF_ACCEPT_REDIRECTS,
IPV4_DEVCONF_SECURE_REDIRECTS,
IPV4_DEVCONF_SEND_REDIRECTS,
IPV4_DEVCONF_SHARED_MEDIA,
IPV4_DEVCONF_RP_FILTER,
IPV4_DEVCONF_ACCEPT_SOURCE_ROUTE,
IPV4_DEVCONF_BOOTP_RELAY,
IPV4_DEVCONF_LOG_MARTIANS,
IPV4_DEVCONF_TAG,
IPV4_DEVCONF_ARPFILTER,
IPV4_DEVCONF_MEDIUM_ID,
IPV4_DEVCONF_NOXFRM,
IPV4_DEVCONF_NOPOLICY,
IPV4_DEVCONF_FORCE_IGMP_VERSION,
IPV4_DEVCONF_ARP_ANNOUNCE,
IPV4_DEVCONF_ARP_IGNORE,
IPV4_DEVCONF_PROMOTE_SECONDARIES,
IPV4_DEVCONF_ARP_ACCEPT,
IPV4_DEVCONF_ARP_NOTIFY,
IPV4_DEVCONF_ACCEPT_LOCAL,
IPV4_DEVCONF_SRC_VMARK,
IPV4_DEVCONF_PROXY_ARP_PVLAN,
__IPV4_DEVCONF_MAX
};
struct ipv4_devconf { struct ipv4_devconf {
void *sysctl; void *sysctl;
int data[__NET_IPV4_CONF_MAX - 1]; int data[__IPV4_DEVCONF_MAX - 1];
DECLARE_BITMAP(state, __NET_IPV4_CONF_MAX - 1); DECLARE_BITMAP(state, __IPV4_DEVCONF_MAX - 1);
}; };
struct in_device { struct in_device {
...@@ -40,7 +70,7 @@ struct in_device { ...@@ -40,7 +70,7 @@ struct in_device {
struct rcu_head rcu_head; struct rcu_head rcu_head;
}; };
#define IPV4_DEVCONF(cnf, attr) ((cnf).data[NET_IPV4_CONF_ ## attr - 1]) #define IPV4_DEVCONF(cnf, attr) ((cnf).data[IPV4_DEVCONF_ ## attr - 1])
#define IPV4_DEVCONF_ALL(net, attr) \ #define IPV4_DEVCONF_ALL(net, attr) \
IPV4_DEVCONF((*(net)->ipv4.devconf_all), attr) IPV4_DEVCONF((*(net)->ipv4.devconf_all), attr)
...@@ -60,13 +90,13 @@ static inline void ipv4_devconf_set(struct in_device *in_dev, int index, ...@@ -60,13 +90,13 @@ static inline void ipv4_devconf_set(struct in_device *in_dev, int index,
static inline void ipv4_devconf_setall(struct in_device *in_dev) static inline void ipv4_devconf_setall(struct in_device *in_dev)
{ {
bitmap_fill(in_dev->cnf.state, __NET_IPV4_CONF_MAX - 1); bitmap_fill(in_dev->cnf.state, __IPV4_DEVCONF_MAX - 1);
} }
#define IN_DEV_CONF_GET(in_dev, attr) \ #define IN_DEV_CONF_GET(in_dev, attr) \
ipv4_devconf_get((in_dev), NET_IPV4_CONF_ ## attr) ipv4_devconf_get((in_dev), IPV4_DEVCONF_ ## attr)
#define IN_DEV_CONF_SET(in_dev, attr, val) \ #define IN_DEV_CONF_SET(in_dev, attr, val) \
ipv4_devconf_set((in_dev), NET_IPV4_CONF_ ## attr, (val)) ipv4_devconf_set((in_dev), IPV4_DEVCONF_ ## attr, (val))
#define IN_DEV_ANDCONF(in_dev, attr) \ #define IN_DEV_ANDCONF(in_dev, attr) \
(IPV4_DEVCONF_ALL(dev_net(in_dev->dev), attr) && \ (IPV4_DEVCONF_ALL(dev_net(in_dev->dev), attr) && \
......
...@@ -481,10 +481,6 @@ enum ...@@ -481,10 +481,6 @@ enum
NET_IPV4_CONF_PROMOTE_SECONDARIES=20, NET_IPV4_CONF_PROMOTE_SECONDARIES=20,
NET_IPV4_CONF_ARP_ACCEPT=21, NET_IPV4_CONF_ARP_ACCEPT=21,
NET_IPV4_CONF_ARP_NOTIFY=22, NET_IPV4_CONF_ARP_NOTIFY=22,
NET_IPV4_CONF_ACCEPT_LOCAL=23,
NET_IPV4_CONF_SRC_VMARK=24,
NET_IPV4_CONF_PROXY_ARP_PVLAN=25,
__NET_IPV4_CONF_MAX
}; };
/* /proc/sys/net/ipv4/netfilter */ /* /proc/sys/net/ipv4/netfilter */
......
...@@ -64,20 +64,20 @@ ...@@ -64,20 +64,20 @@
static struct ipv4_devconf ipv4_devconf = { static struct ipv4_devconf ipv4_devconf = {
.data = { .data = {
[NET_IPV4_CONF_ACCEPT_REDIRECTS - 1] = 1, [IPV4_DEVCONF_ACCEPT_REDIRECTS - 1] = 1,
[NET_IPV4_CONF_SEND_REDIRECTS - 1] = 1, [IPV4_DEVCONF_SEND_REDIRECTS - 1] = 1,
[NET_IPV4_CONF_SECURE_REDIRECTS - 1] = 1, [IPV4_DEVCONF_SECURE_REDIRECTS - 1] = 1,
[NET_IPV4_CONF_SHARED_MEDIA - 1] = 1, [IPV4_DEVCONF_SHARED_MEDIA - 1] = 1,
}, },
}; };
static struct ipv4_devconf ipv4_devconf_dflt = { static struct ipv4_devconf ipv4_devconf_dflt = {
.data = { .data = {
[NET_IPV4_CONF_ACCEPT_REDIRECTS - 1] = 1, [IPV4_DEVCONF_ACCEPT_REDIRECTS - 1] = 1,
[NET_IPV4_CONF_SEND_REDIRECTS - 1] = 1, [IPV4_DEVCONF_SEND_REDIRECTS - 1] = 1,
[NET_IPV4_CONF_SECURE_REDIRECTS - 1] = 1, [IPV4_DEVCONF_SECURE_REDIRECTS - 1] = 1,
[NET_IPV4_CONF_SHARED_MEDIA - 1] = 1, [IPV4_DEVCONF_SHARED_MEDIA - 1] = 1,
[NET_IPV4_CONF_ACCEPT_SOURCE_ROUTE - 1] = 1, [IPV4_DEVCONF_ACCEPT_SOURCE_ROUTE - 1] = 1,
}, },
}; };
...@@ -1360,7 +1360,7 @@ int ipv4_doint_and_flush(ctl_table *ctl, int write, ...@@ -1360,7 +1360,7 @@ int ipv4_doint_and_flush(ctl_table *ctl, int write,
{ \ { \
.procname = name, \ .procname = name, \
.data = ipv4_devconf.data + \ .data = ipv4_devconf.data + \
NET_IPV4_CONF_ ## attr - 1, \ IPV4_DEVCONF_ ## attr - 1, \
.maxlen = sizeof(int), \ .maxlen = sizeof(int), \
.mode = mval, \ .mode = mval, \
.proc_handler = proc, \ .proc_handler = proc, \
...@@ -1381,7 +1381,7 @@ int ipv4_doint_and_flush(ctl_table *ctl, int write, ...@@ -1381,7 +1381,7 @@ int ipv4_doint_and_flush(ctl_table *ctl, int write,
static struct devinet_sysctl_table { static struct devinet_sysctl_table {
struct ctl_table_header *sysctl_header; struct ctl_table_header *sysctl_header;
struct ctl_table devinet_vars[__NET_IPV4_CONF_MAX]; struct ctl_table devinet_vars[__IPV4_DEVCONF_MAX];
char *dev_name; char *dev_name;
} devinet_sysctl = { } devinet_sysctl = {
.devinet_vars = { .devinet_vars = {
...@@ -1503,7 +1503,7 @@ static struct ctl_table ctl_forward_entry[] = { ...@@ -1503,7 +1503,7 @@ static struct ctl_table ctl_forward_entry[] = {
{ {
.procname = "ip_forward", .procname = "ip_forward",
.data = &ipv4_devconf.data[ .data = &ipv4_devconf.data[
NET_IPV4_CONF_FORWARDING - 1], IPV4_DEVCONF_FORWARDING - 1],
.maxlen = sizeof(int), .maxlen = sizeof(int),
.mode = 0644, .mode = 0644,
.proc_handler = devinet_sysctl_forward, .proc_handler = devinet_sysctl_forward,
...@@ -1547,7 +1547,7 @@ static __net_init int devinet_init_net(struct net *net) ...@@ -1547,7 +1547,7 @@ static __net_init int devinet_init_net(struct net *net)
if (tbl == NULL) if (tbl == NULL)
goto err_alloc_ctl; goto err_alloc_ctl;
tbl[0].data = &all->data[NET_IPV4_CONF_FORWARDING - 1]; tbl[0].data = &all->data[IPV4_DEVCONF_FORWARDING - 1];
tbl[0].extra1 = all; tbl[0].extra1 = all;
tbl[0].extra2 = net; tbl[0].extra2 = net;
#endif #endif
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment