diff options
Diffstat (limited to 'net/switchdev/switchdev.c')
| -rw-r--r-- | net/switchdev/switchdev.c | 12 | 
1 files changed, 12 insertions, 0 deletions
| diff --git a/net/switchdev/switchdev.c b/net/switchdev/switchdev.c index f34e535e93bd..df790d3385a2 100644 --- a/net/switchdev/switchdev.c +++ b/net/switchdev/switchdev.c @@ -723,6 +723,7 @@ static int switchdev_port_vlan_fill(struct sk_buff *skb, struct net_device *dev,  				    u32 filter_mask)  {  	struct switchdev_vlan_dump dump = { +		.vlan.obj.orig_dev = dev,  		.vlan.obj.id = SWITCHDEV_OBJ_ID_PORT_VLAN,  		.skb = skb,  		.filter_mask = filter_mask, @@ -757,6 +758,7 @@ int switchdev_port_bridge_getlink(struct sk_buff *skb, u32 pid, u32 seq,  				  int nlflags)  {  	struct switchdev_attr attr = { +		.orig_dev = dev,  		.id = SWITCHDEV_ATTR_ID_PORT_BRIDGE_FLAGS,  	};  	u16 mode = BRIDGE_MODE_UNDEF; @@ -778,6 +780,7 @@ static int switchdev_port_br_setflag(struct net_device *dev,  				     unsigned long brport_flag)  {  	struct switchdev_attr attr = { +		.orig_dev = dev,  		.id = SWITCHDEV_ATTR_ID_PORT_BRIDGE_FLAGS,  	};  	u8 flag = nla_get_u8(nlattr); @@ -853,6 +856,7 @@ static int switchdev_port_br_afspec(struct net_device *dev,  	struct nlattr *attr;  	struct bridge_vlan_info *vinfo;  	struct switchdev_obj_port_vlan vlan = { +		.obj.orig_dev = dev,  		.obj.id = SWITCHDEV_OBJ_ID_PORT_VLAN,  	};  	int rem; @@ -975,6 +979,7 @@ int switchdev_port_fdb_add(struct ndmsg *ndm, struct nlattr *tb[],  			   u16 vid, u16 nlm_flags)  {  	struct switchdev_obj_port_fdb fdb = { +		.obj.orig_dev = dev,  		.obj.id = SWITCHDEV_OBJ_ID_PORT_FDB,  		.vid = vid,  	}; @@ -1000,6 +1005,7 @@ int switchdev_port_fdb_del(struct ndmsg *ndm, struct nlattr *tb[],  			   u16 vid)  {  	struct switchdev_obj_port_fdb fdb = { +		.obj.orig_dev = dev,  		.obj.id = SWITCHDEV_OBJ_ID_PORT_FDB,  		.vid = vid,  	}; @@ -1077,6 +1083,7 @@ int switchdev_port_fdb_dump(struct sk_buff *skb, struct netlink_callback *cb,  			    struct net_device *filter_dev, int idx)  {  	struct switchdev_fdb_dump dump = { +		.fdb.obj.orig_dev = dev,  		.fdb.obj.id = SWITCHDEV_OBJ_ID_PORT_FDB,  		.dev = dev,  		.skb = skb, @@ -1135,6 +1142,7 @@ static struct net_device *switchdev_get_dev_by_nhs(struct fib_info *fi)  		if (!dev)  			return NULL; +		attr.orig_dev = dev;  		if (switchdev_port_attr_get(dev, &attr))  			return NULL; @@ -1194,6 +1202,7 @@ int switchdev_fib_ipv4_add(u32 dst, int dst_len, struct fib_info *fi,  	if (!dev)  		return 0; +	ipv4_fib.obj.orig_dev = dev;  	err = switchdev_port_obj_add(dev, &ipv4_fib.obj);  	if (!err)  		fi->fib_flags |= RTNH_F_OFFLOAD; @@ -1238,6 +1247,7 @@ int switchdev_fib_ipv4_del(u32 dst, int dst_len, struct fib_info *fi,  	if (!dev)  		return 0; +	ipv4_fib.obj.orig_dev = dev;  	err = switchdev_port_obj_del(dev, &ipv4_fib.obj);  	if (!err)  		fi->fib_flags &= ~RTNH_F_OFFLOAD; @@ -1270,10 +1280,12 @@ static bool switchdev_port_same_parent_id(struct net_device *a,  					  struct net_device *b)  {  	struct switchdev_attr a_attr = { +		.orig_dev = a,  		.id = SWITCHDEV_ATTR_ID_PORT_PARENT_ID,  		.flags = SWITCHDEV_F_NO_RECURSE,  	};  	struct switchdev_attr b_attr = { +		.orig_dev = b,  		.id = SWITCHDEV_ATTR_ID_PORT_PARENT_ID,  		.flags = SWITCHDEV_F_NO_RECURSE,  	}; | 
