forked from Minki/linux
ieee802154: fix netns settings
6LoWPAN currently doesn't supports x-netns and works only in init_net. With this patch, we ensure that: - the wpan interface cannot be moved to another netns; - the 6lowpan interface cannot be moved to another netns; - the wpan interface is in the same netns than the 6lowpan interface; - the 6lowpan interface is in init_net. Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com> Acked-by: Alexander Aring <alex.aring@gmail.com> Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
This commit is contained in:
parent
a715d11e45
commit
f9d1ce8f81
@ -126,6 +126,7 @@ static void lowpan_setup(struct net_device *dev)
|
|||||||
dev->header_ops = &lowpan_header_ops;
|
dev->header_ops = &lowpan_header_ops;
|
||||||
dev->ml_priv = &lowpan_mlme;
|
dev->ml_priv = &lowpan_mlme;
|
||||||
dev->destructor = free_netdev;
|
dev->destructor = free_netdev;
|
||||||
|
dev->features |= NETIF_F_NETNS_LOCAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int lowpan_validate(struct nlattr *tb[], struct nlattr *data[])
|
static int lowpan_validate(struct nlattr *tb[], struct nlattr *data[])
|
||||||
@ -148,10 +149,11 @@ static int lowpan_newlink(struct net *src_net, struct net_device *dev,
|
|||||||
|
|
||||||
pr_debug("adding new link\n");
|
pr_debug("adding new link\n");
|
||||||
|
|
||||||
if (!tb[IFLA_LINK])
|
if (!tb[IFLA_LINK] ||
|
||||||
|
!net_eq(dev_net(dev), &init_net))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
/* find and hold real wpan device */
|
/* find and hold real wpan device */
|
||||||
real_dev = dev_get_by_index(src_net, nla_get_u32(tb[IFLA_LINK]));
|
real_dev = dev_get_by_index(dev_net(dev), nla_get_u32(tb[IFLA_LINK]));
|
||||||
if (!real_dev)
|
if (!real_dev)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
if (real_dev->type != ARPHRD_IEEE802154) {
|
if (real_dev->type != ARPHRD_IEEE802154) {
|
||||||
|
@ -225,6 +225,7 @@ static int cfg802154_netdev_notifier_call(struct notifier_block *nb,
|
|||||||
switch (state) {
|
switch (state) {
|
||||||
/* TODO NETDEV_DEVTYPE */
|
/* TODO NETDEV_DEVTYPE */
|
||||||
case NETDEV_REGISTER:
|
case NETDEV_REGISTER:
|
||||||
|
dev->features |= NETIF_F_NETNS_LOCAL;
|
||||||
wpan_dev->identifier = ++rdev->wpan_dev_id;
|
wpan_dev->identifier = ++rdev->wpan_dev_id;
|
||||||
list_add_rcu(&wpan_dev->list, &rdev->wpan_dev_list);
|
list_add_rcu(&wpan_dev->list, &rdev->wpan_dev_list);
|
||||||
rdev->devlist_generation++;
|
rdev->devlist_generation++;
|
||||||
|
Loading…
Reference in New Issue
Block a user