On 8/12/19 7:47 AM, Jiri Pirko wrote: > From: Jiri Pirko <j...@mellanox.com> > > Devlink from the beginning counts with network namespaces, but the > instances has been fixed to init_net. The first patch allows user > to move existing devlink instances into namespaces: > > $ devlink dev > netdevsim/netdevsim1 > $ ip netns add ns1 > $ devlink dev set netdevsim/netdevsim1 netns ns1 > $ devlink -N ns1 dev > netdevsim/netdevsim1 > > The last patch allows user to create new netdevsim instance directly > inside network namespace of a caller.
The namespace behavior seems odd to me. If devlink instance is created in a namespace and never moved, it should die with the namespace. With this patch set, devlink instance and its ports are moved to init_net on namespace delete. The fib controller needs an update to return the namespace of the devlink instance (on top of the patch applied to net): diff --git a/drivers/net/netdevsim/dev.c b/drivers/net/netdevsim/dev.c index 89795071f085..fa7e876f2d3b 100644 --- a/drivers/net/netdevsim/dev.c +++ b/drivers/net/netdevsim/dev.c @@ -114,11 +114,6 @@ static void nsim_dev_port_debugfs_exit(struct nsim_dev_port *nsim_dev_port) debugfs_remove_recursive(nsim_dev_port->ddir); } -static struct net *nsim_devlink_net(struct devlink *devlink) -{ - return &init_net; -} - static u64 nsim_dev_ipv4_fib_resource_occ_get(void *priv) { struct net *net = priv; @@ -154,7 +149,7 @@ static int nsim_dev_resources_register(struct devlink *devlink) .size_granularity = 1, .unit = DEVLINK_RESOURCE_UNIT_ENTRY }; - struct net *net = nsim_devlink_net(devlink); + struct net *net = devlink_net(devlink); int err; u64 n; @@ -309,7 +304,7 @@ static int nsim_dev_reload(struct devlink *devlink, NSIM_RESOURCE_IPV4_FIB, NSIM_RESOURCE_IPV4_FIB_RULES, NSIM_RESOURCE_IPV6_FIB, NSIM_RESOURCE_IPV6_FIB_RULES }; - struct net *net = nsim_devlink_net(devlink); + struct net *net = devlink_net(devlink); int i; for (i = 0; i < ARRAY_SIZE(res_ids); ++i) {