summaryrefslogtreecommitdiff
path: root/include/linux
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2019-10-04 11:10:57 -0700
committerDavid S. Miller <davem@davemloft.net>2019-10-04 11:10:57 -0700
commit97bfe0e05ceb8ff91a331765bff384876ebd5f5e (patch)
tree11b86c4b4089b0fe46de77348727678d5eb9be8c /include/linux
parent9077f052abd5391a866dd99e27212213648becef (diff)
parentb74c37fd35a28ddcfcdfbf559e16e380e7ba25aa (diff)
Merge branch 'devlink-allow-devlink-instances-to-change-network-namespace'
Jiri Pirko says: ==================== devlink: allow devlink instances to change network namespace Devlink from the beginning counts with network namespaces, but the instances has been fixed to init_net. Implement change of network namespace as part of "devlink reload" procedure like this: $ ip netns add testns1 $ devlink/devlink dev reload netdevsim/netdevsim10 netns testns1 This command reloads device "netdevsim10" into network namespace "testns1". Note that "devlink reload" reinstantiates driver objects, effectively it reloads the driver instance, including possible hw reset etc. Newly created netdevices respect the network namespace of the parent devlink instance and according to that, they are created in target network namespace. Driver is able to refuse to be reloaded into different namespace. That is the case of mlx4 right now. FIB entries and rules are replayed during FIB notifier registration which is triggered during reload (driver instance init). FIB notifier is also registered to the target network namespace, that allows user to use netdevsim devlink resources to setup per-namespace limits of FIB entries and FIB rules. In fact, with multiple netdevsim instances in each network namespace, user might setup different limits. This maintains and extends current netdevsim resources behaviour. Patch 1 prepares netdevsim code for the follow-up changes in the patchset. It does not change the behaviour, only moves pet-init_netns accounting to netdevsim instance, which is also in init_netns. Patches 2-5 prepare the FIB notifier making it per-netns and to behave correctly upon error conditions. Patch 6 just exports a devlink_net helper so it can be used in drivers. Patches 7-9 do preparations in mlxsw driver. Patches 10-13 do preparations in netdevsim driver, namely patch 12 implements proper devlink reload where the driver instance objects are actually re-created as they should be. Patch 14 actually implements the possibility to reload into a different network namespace. Patch 15 adds needed selftests for devlink reload into namespace for netdevsim driver. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/mroute_base.h28
1 files changed, 14 insertions, 14 deletions
diff --git a/include/linux/mroute_base.h b/include/linux/mroute_base.h
index 34de06b426ef..8071148f29a6 100644
--- a/include/linux/mroute_base.h
+++ b/include/linux/mroute_base.h
@@ -47,16 +47,16 @@ struct vif_entry_notifier_info {
};
static inline int mr_call_vif_notifier(struct notifier_block *nb,
- struct net *net,
unsigned short family,
enum fib_event_type event_type,
struct vif_device *vif,
- unsigned short vif_index, u32 tb_id)
+ unsigned short vif_index, u32 tb_id,
+ struct netlink_ext_ack *extack)
{
struct vif_entry_notifier_info info = {
.info = {
.family = family,
- .net = net,
+ .extack = extack,
},
.dev = vif->dev,
.vif_index = vif_index,
@@ -64,7 +64,7 @@ static inline int mr_call_vif_notifier(struct notifier_block *nb,
.tb_id = tb_id,
};
- return call_fib_notifier(nb, net, event_type, &info.info);
+ return call_fib_notifier(nb, event_type, &info.info);
}
static inline int mr_call_vif_notifiers(struct net *net,
@@ -77,7 +77,6 @@ static inline int mr_call_vif_notifiers(struct net *net,
struct vif_entry_notifier_info info = {
.info = {
.family = family,
- .net = net,
},
.dev = vif->dev,
.vif_index = vif_index,
@@ -173,21 +172,21 @@ struct mfc_entry_notifier_info {
};
static inline int mr_call_mfc_notifier(struct notifier_block *nb,
- struct net *net,
unsigned short family,
enum fib_event_type event_type,
- struct mr_mfc *mfc, u32 tb_id)
+ struct mr_mfc *mfc, u32 tb_id,
+ struct netlink_ext_ack *extack)
{
struct mfc_entry_notifier_info info = {
.info = {
.family = family,
- .net = net,
+ .extack = extack,
},
.mfc = mfc,
.tb_id = tb_id
};
- return call_fib_notifier(nb, net, event_type, &info.info);
+ return call_fib_notifier(nb, event_type, &info.info);
}
static inline int mr_call_mfc_notifiers(struct net *net,
@@ -199,7 +198,6 @@ static inline int mr_call_mfc_notifiers(struct net *net,
struct mfc_entry_notifier_info info = {
.info = {
.family = family,
- .net = net,
},
.mfc = mfc,
.tb_id = tb_id
@@ -301,10 +299,11 @@ int mr_rtm_dumproute(struct sk_buff *skb, struct netlink_callback *cb,
int mr_dump(struct net *net, struct notifier_block *nb, unsigned short family,
int (*rules_dump)(struct net *net,
- struct notifier_block *nb),
+ struct notifier_block *nb,
+ struct netlink_ext_ack *extack),
struct mr_table *(*mr_iter)(struct net *net,
struct mr_table *mrt),
- rwlock_t *mrt_lock);
+ rwlock_t *mrt_lock, struct netlink_ext_ack *extack);
#else
static inline void vif_device_init(struct vif_device *v,
struct net_device *dev,
@@ -355,10 +354,11 @@ mr_rtm_dumproute(struct sk_buff *skb, struct netlink_callback *cb,
static inline int mr_dump(struct net *net, struct notifier_block *nb,
unsigned short family,
int (*rules_dump)(struct net *net,
- struct notifier_block *nb),
+ struct notifier_block *nb,
+ struct netlink_ext_ack *extack),
struct mr_table *(*mr_iter)(struct net *net,
struct mr_table *mrt),
- rwlock_t *mrt_lock)
+ rwlock_t *mrt_lock, struct netlink_ext_ack *extack)
{
return -EINVAL;
}