Skip to content

Commit

Permalink
[IPV4]: Switch users of ipv4_devconf(_all) to use the pernet one
Browse files Browse the repository at this point in the history
These are scattered over the code, but almost all the
"critical" places already have the proper struct net
at hand except for snmp proc showing function and routing
rtnl handler.

Signed-off-by: Pavel Emelyanov <xemul@openvz.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Pavel Emelyanov authored and David S. Miller committed Jan 28, 2008
1 parent 9355bbd commit 586f121
Show file tree
Hide file tree
Showing 7 changed files with 20 additions and 15 deletions.
12 changes: 8 additions & 4 deletions include/linux/inetdevice.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,8 @@ struct in_device
};

#define IPV4_DEVCONF(cnf, attr) ((cnf).data[NET_IPV4_CONF_ ## attr - 1])
#define IPV4_DEVCONF_ALL(attr) IPV4_DEVCONF(ipv4_devconf, attr)
#define IPV4_DEVCONF_ALL(net, attr) \
IPV4_DEVCONF((*(net)->ipv4.devconf_all), attr)

static inline int ipv4_devconf_get(struct in_device *in_dev, int index)
{
Expand All @@ -71,11 +72,14 @@ static inline void ipv4_devconf_setall(struct in_device *in_dev)
ipv4_devconf_set((in_dev), NET_IPV4_CONF_ ## attr, (val))

#define IN_DEV_ANDCONF(in_dev, attr) \
(IPV4_DEVCONF_ALL(attr) && IN_DEV_CONF_GET((in_dev), attr))
(IPV4_DEVCONF_ALL(in_dev->dev->nd_net, attr) && \
IN_DEV_CONF_GET((in_dev), attr))
#define IN_DEV_ORCONF(in_dev, attr) \
(IPV4_DEVCONF_ALL(attr) || IN_DEV_CONF_GET((in_dev), attr))
(IPV4_DEVCONF_ALL(in_dev->dev->nd_net, attr) || \
IN_DEV_CONF_GET((in_dev), attr))
#define IN_DEV_MAXCONF(in_dev, attr) \
(max(IPV4_DEVCONF_ALL(attr), IN_DEV_CONF_GET((in_dev), attr)))
(max(IPV4_DEVCONF_ALL(in_dev->dev->nd_net, attr), \
IN_DEV_CONF_GET((in_dev), attr)))

#define IN_DEV_FORWARD(in_dev) IN_DEV_CONF_GET((in_dev), FORWARDING)
#define IN_DEV_MFORWARD(in_dev) IN_DEV_ANDCONF((in_dev), MC_FORWARDING)
Expand Down
4 changes: 2 additions & 2 deletions net/ipv4/arp.c
Original file line number Diff line number Diff line change
Expand Up @@ -860,7 +860,7 @@ static int arp_process(struct sk_buff *skb)

n = __neigh_lookup(&arp_tbl, &sip, dev, 0);

if (IPV4_DEVCONF_ALL(ARP_ACCEPT)) {
if (IPV4_DEVCONF_ALL(dev->nd_net, ARP_ACCEPT)) {
/* Unsolicited ARP is not accepted by default.
It is possible, that this option should be enabled for some
devices (strip is candidate)
Expand Down Expand Up @@ -955,7 +955,7 @@ static int arp_rcv(struct sk_buff *skb, struct net_device *dev,
static int arp_req_set_proxy(struct net *net, struct net_device *dev, int on)
{
if (dev == NULL) {
IPV4_DEVCONF_ALL(PROXY_ARP) = on;
IPV4_DEVCONF_ALL(net, PROXY_ARP) = on;
return 0;
}
if (__in_dev_get_rtnl(dev)) {
Expand Down
6 changes: 3 additions & 3 deletions net/ipv4/devinet.c
Original file line number Diff line number Diff line change
Expand Up @@ -1258,9 +1258,9 @@ static void devinet_copy_dflt_conf(struct net *net, int i)
static void inet_forward_change(struct net *net)
{
struct net_device *dev;
int on = IPV4_DEVCONF_ALL(FORWARDING);
int on = IPV4_DEVCONF_ALL(net, FORWARDING);

IPV4_DEVCONF_ALL(ACCEPT_REDIRECTS) = !on;
IPV4_DEVCONF_ALL(net, ACCEPT_REDIRECTS) = !on;
IPV4_DEVCONF_DFLT(net, FORWARDING) = on;

read_lock(&dev_base_lock);
Expand Down Expand Up @@ -1360,7 +1360,7 @@ static int devinet_sysctl_forward(ctl_table *ctl, int write,
if (write && *valp != val) {
struct net *net = ctl->extra2;

if (valp == &IPV4_DEVCONF_ALL(FORWARDING))
if (valp == &IPV4_DEVCONF_ALL(net, FORWARDING))
inet_forward_change(net);
else if (valp != &IPV4_DEVCONF_DFLT(net, FORWARDING))
rt_cache_flush(0);
Expand Down
4 changes: 2 additions & 2 deletions net/ipv4/igmp.c
Original file line number Diff line number Diff line change
Expand Up @@ -130,12 +130,12 @@
*/

#define IGMP_V1_SEEN(in_dev) \
(IPV4_DEVCONF_ALL(FORCE_IGMP_VERSION) == 1 || \
(IPV4_DEVCONF_ALL(in_dev->dev->nd_net, FORCE_IGMP_VERSION) == 1 || \
IN_DEV_CONF_GET((in_dev), FORCE_IGMP_VERSION) == 1 || \
((in_dev)->mr_v1_seen && \
time_before(jiffies, (in_dev)->mr_v1_seen)))
#define IGMP_V2_SEEN(in_dev) \
(IPV4_DEVCONF_ALL(FORCE_IGMP_VERSION) == 2 || \
(IPV4_DEVCONF_ALL(in_dev->dev->nd_net, FORCE_IGMP_VERSION) == 2 || \
IN_DEV_CONF_GET((in_dev), FORCE_IGMP_VERSION) == 2 || \
((in_dev)->mr_v2_seen && \
time_before(jiffies, (in_dev)->mr_v2_seen)))
Expand Down
4 changes: 2 additions & 2 deletions net/ipv4/ipmr.c
Original file line number Diff line number Diff line change
Expand Up @@ -849,7 +849,7 @@ static void mrtsock_destruct(struct sock *sk)
{
rtnl_lock();
if (sk == mroute_socket) {
IPV4_DEVCONF_ALL(MC_FORWARDING)--;
IPV4_DEVCONF_ALL(sk->sk_net, MC_FORWARDING)--;

write_lock_bh(&mrt_lock);
mroute_socket=NULL;
Expand Down Expand Up @@ -898,7 +898,7 @@ int ip_mroute_setsockopt(struct sock *sk,int optname,char __user *optval,int opt
mroute_socket=sk;
write_unlock_bh(&mrt_lock);

IPV4_DEVCONF_ALL(MC_FORWARDING)++;
IPV4_DEVCONF_ALL(sk->sk_net, MC_FORWARDING)++;
}
rtnl_unlock();
return ret;
Expand Down
3 changes: 2 additions & 1 deletion net/ipv4/proc.c
Original file line number Diff line number Diff line change
Expand Up @@ -309,7 +309,8 @@ static int snmp_seq_show(struct seq_file *seq, void *v)
seq_printf(seq, " %s", snmp4_ipstats_list[i].name);

seq_printf(seq, "\nIp: %d %d",
IPV4_DEVCONF_ALL(FORWARDING) ? 1 : 2, sysctl_ip_default_ttl);
IPV4_DEVCONF_ALL(&init_net, FORWARDING) ? 1 : 2,
sysctl_ip_default_ttl);

for (i = 0; snmp4_ipstats_list[i].name != NULL; i++)
seq_printf(seq, " %lu",
Expand Down
2 changes: 1 addition & 1 deletion net/ipv4/route.c
Original file line number Diff line number Diff line change
Expand Up @@ -2619,7 +2619,7 @@ static int rt_fill_info(struct sk_buff *skb, u32 pid, u32 seq, int event,
__be32 dst = rt->rt_dst;

if (MULTICAST(dst) && !LOCAL_MCAST(dst) &&
IPV4_DEVCONF_ALL(MC_FORWARDING)) {
IPV4_DEVCONF_ALL(&init_net, MC_FORWARDING)) {
int err = ipmr_get_route(skb, r, nowait);
if (err <= 0) {
if (!nowait) {
Expand Down

0 comments on commit 586f121

Please sign in to comment.