[NET]: Make rtnetlink infrastructure network namespace aware (v3)
After this patch none of the netlink callback support anything except the initial network namespace but the rtnetlink infrastructure now handles multiple network namespaces. Changes from v2: - IPv6 addrlabel processing Changes from v1: - no need for special rtnl_unlock handling - fixed IPv6 ndisc Signed-off-by: Denis V. Lunev <den@openvz.org> Signed-off-by: Eric W. Biederman <ebiederm@xmission.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
b854272b3c
commit
97c53cacf0
@@ -3397,7 +3397,7 @@ static int inet6_rtm_getaddr(struct sk_buff *in_skb, struct nlmsghdr* nlh,
|
||||
kfree_skb(skb);
|
||||
goto errout_ifa;
|
||||
}
|
||||
err = rtnl_unicast(skb, NETLINK_CB(in_skb).pid);
|
||||
err = rtnl_unicast(skb, &init_net, NETLINK_CB(in_skb).pid);
|
||||
errout_ifa:
|
||||
in6_ifa_put(ifa);
|
||||
errout:
|
||||
@@ -3420,10 +3420,10 @@ static void inet6_ifa_notify(int event, struct inet6_ifaddr *ifa)
|
||||
kfree_skb(skb);
|
||||
goto errout;
|
||||
}
|
||||
err = rtnl_notify(skb, 0, RTNLGRP_IPV6_IFADDR, NULL, GFP_ATOMIC);
|
||||
err = rtnl_notify(skb, &init_net, 0, RTNLGRP_IPV6_IFADDR, NULL, GFP_ATOMIC);
|
||||
errout:
|
||||
if (err < 0)
|
||||
rtnl_set_sk_err(RTNLGRP_IPV6_IFADDR, err);
|
||||
rtnl_set_sk_err(&init_net, RTNLGRP_IPV6_IFADDR, err);
|
||||
}
|
||||
|
||||
static inline void ipv6_store_devconf(struct ipv6_devconf *cnf,
|
||||
@@ -3628,10 +3628,10 @@ void inet6_ifinfo_notify(int event, struct inet6_dev *idev)
|
||||
kfree_skb(skb);
|
||||
goto errout;
|
||||
}
|
||||
err = rtnl_notify(skb, 0, RTNLGRP_IPV6_IFADDR, NULL, GFP_ATOMIC);
|
||||
err = rtnl_notify(skb, &init_net, 0, RTNLGRP_IPV6_IFADDR, NULL, GFP_ATOMIC);
|
||||
errout:
|
||||
if (err < 0)
|
||||
rtnl_set_sk_err(RTNLGRP_IPV6_IFADDR, err);
|
||||
rtnl_set_sk_err(&init_net, RTNLGRP_IPV6_IFADDR, err);
|
||||
}
|
||||
|
||||
static inline size_t inet6_prefix_nlmsg_size(void)
|
||||
@@ -3697,10 +3697,10 @@ static void inet6_prefix_notify(int event, struct inet6_dev *idev,
|
||||
kfree_skb(skb);
|
||||
goto errout;
|
||||
}
|
||||
err = rtnl_notify(skb, 0, RTNLGRP_IPV6_PREFIX, NULL, GFP_ATOMIC);
|
||||
err = rtnl_notify(skb, &init_net, 0, RTNLGRP_IPV6_PREFIX, NULL, GFP_ATOMIC);
|
||||
errout:
|
||||
if (err < 0)
|
||||
rtnl_set_sk_err(RTNLGRP_IPV6_PREFIX, err);
|
||||
rtnl_set_sk_err(&init_net, RTNLGRP_IPV6_PREFIX, err);
|
||||
}
|
||||
|
||||
static void __ipv6_ifa_notify(int event, struct inet6_ifaddr *ifp)
|
||||
|
Reference in New Issue
Block a user