aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2019-01-08 16:53:54 -0500
committerDavid S. Miller <davem@davemloft.net>2019-01-08 16:53:54 -0500
commit4314b1f68a3f655f75010ab04bb57419eab34ec3 (patch)
treefe5a8b3696d70ad745720c40bcd999500c235a68
parent11287b693d03830010356339e4ceddf47dee34fa (diff)
parent4fabf3bf93a194c7fa5288da3e0af37e4b943cf3 (diff)
Merge branch 'mlxsw-fixes'
Daniel Borkmann says: ==================== pull-request: bpf 2019-01-08 The following pull-request contains BPF updates for your *net* tree. The main changes are: 1) Fix BSD'ism in sendmsg(2) to rewrite unspecified IPv6 dst for unconnected UDP sockets with [::1] _after_ cgroup BPF invocation, from Andrey. 2) Follow-up fix to the speculation fix where we need to reject a corner case for sanitation when ptr and scalars are mixed in the same alu op. Also, some unrelated minor doc fixes, from Daniel. 3) Fix BPF kselftest's incorrect uses of create_and_get_cgroup() by not assuming fd of zero value to be the result of an error case, from Stanislav. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/ethernet/mellanox/mlxsw/Kconfig1
-rw-r--r--drivers/net/ethernet/mellanox/mlxsw/spectrum.c7
-rw-r--r--drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_ctcam.c10
-rw-r--r--drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_erp.c2
-rw-r--r--drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c4
-rw-r--r--drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c23
-rw-r--r--net/bridge/br_private.h1
-rw-r--r--net/bridge/br_vlan.c26
-rwxr-xr-xtools/testing/selftests/drivers/net/mlxsw/vxlan.sh18
-rwxr-xr-xtools/testing/selftests/net/forwarding/bridge_vlan_aware.sh15
-rwxr-xr-xtools/testing/selftests/net/forwarding/vxlan_bridge_1d.sh2
11 files changed, 74 insertions, 35 deletions
diff --git a/drivers/net/ethernet/mellanox/mlxsw/Kconfig b/drivers/net/ethernet/mellanox/mlxsw/Kconfig
index 080ddd1942ec..b9a25aed5d11 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/Kconfig
+++ b/drivers/net/ethernet/mellanox/mlxsw/Kconfig
@@ -78,6 +78,7 @@ config MLXSW_SPECTRUM
78 depends on IPV6 || IPV6=n 78 depends on IPV6 || IPV6=n
79 depends on NET_IPGRE || NET_IPGRE=n 79 depends on NET_IPGRE || NET_IPGRE=n
80 depends on IPV6_GRE || IPV6_GRE=n 80 depends on IPV6_GRE || IPV6_GRE=n
81 depends on VXLAN || VXLAN=n
81 select GENERIC_ALLOCATOR 82 select GENERIC_ALLOCATOR
82 select PARMAN 83 select PARMAN
83 select OBJAGG 84 select OBJAGG
diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c
index eed1045e4d96..32519c93df17 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c
@@ -5005,12 +5005,15 @@ static int mlxsw_sp_netdevice_port_upper_event(struct net_device *lower_dev,
5005 lower_dev, 5005 lower_dev,
5006 upper_dev); 5006 upper_dev);
5007 } else if (netif_is_lag_master(upper_dev)) { 5007 } else if (netif_is_lag_master(upper_dev)) {
5008 if (info->linking) 5008 if (info->linking) {
5009 err = mlxsw_sp_port_lag_join(mlxsw_sp_port, 5009 err = mlxsw_sp_port_lag_join(mlxsw_sp_port,
5010 upper_dev); 5010 upper_dev);
5011 else 5011 } else {
5012 mlxsw_sp_port_lag_tx_en_set(mlxsw_sp_port,
5013 false);
5012 mlxsw_sp_port_lag_leave(mlxsw_sp_port, 5014 mlxsw_sp_port_lag_leave(mlxsw_sp_port,
5013 upper_dev); 5015 upper_dev);
5016 }
5014 } else if (netif_is_ovs_master(upper_dev)) { 5017 } else if (netif_is_ovs_master(upper_dev)) {
5015 if (info->linking) 5018 if (info->linking)
5016 err = mlxsw_sp_port_ovs_join(mlxsw_sp_port); 5019 err = mlxsw_sp_port_ovs_join(mlxsw_sp_port);
diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_ctcam.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_ctcam.c
index b0f2d8e8ded0..ac222833a5cf 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_ctcam.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_ctcam.c
@@ -72,7 +72,15 @@ mlxsw_sp_acl_ctcam_region_entry_insert(struct mlxsw_sp *mlxsw_sp,
72 act_set = mlxsw_afa_block_first_set(rulei->act_block); 72 act_set = mlxsw_afa_block_first_set(rulei->act_block);
73 mlxsw_reg_ptce2_flex_action_set_memcpy_to(ptce2_pl, act_set); 73 mlxsw_reg_ptce2_flex_action_set_memcpy_to(ptce2_pl, act_set);
74 74
75 return mlxsw_reg_write(mlxsw_sp->core, MLXSW_REG(ptce2), ptce2_pl); 75 err = mlxsw_reg_write(mlxsw_sp->core, MLXSW_REG(ptce2), ptce2_pl);
76 if (err)
77 goto err_ptce2_write;
78
79 return 0;
80
81err_ptce2_write:
82 cregion->ops->entry_remove(cregion, centry);
83 return err;
76} 84}
77 85
78static void 86static void
diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_erp.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_erp.c
index 1c19feefa5f2..2941967e1cc5 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_erp.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_erp.c
@@ -1022,7 +1022,6 @@ void mlxsw_sp_acl_erp_mask_put(struct mlxsw_sp_acl_atcam_region *aregion,
1022{ 1022{
1023 struct objagg_obj *objagg_obj = (struct objagg_obj *) erp_mask; 1023 struct objagg_obj *objagg_obj = (struct objagg_obj *) erp_mask;
1024 1024
1025 ASSERT_RTNL();
1026 objagg_obj_put(aregion->erp_table->objagg, objagg_obj); 1025 objagg_obj_put(aregion->erp_table->objagg, objagg_obj);
1027} 1026}
1028 1027
@@ -1054,7 +1053,6 @@ void mlxsw_sp_acl_erp_bf_remove(struct mlxsw_sp *mlxsw_sp,
1054 const struct mlxsw_sp_acl_erp *erp = objagg_obj_root_priv(objagg_obj); 1053 const struct mlxsw_sp_acl_erp *erp = objagg_obj_root_priv(objagg_obj);
1055 unsigned int erp_bank; 1054 unsigned int erp_bank;
1056 1055
1057 ASSERT_RTNL();
1058 if (!mlxsw_sp_acl_erp_table_is_used(erp->erp_table)) 1056 if (!mlxsw_sp_acl_erp_table_is_used(erp->erp_table))
1059 return; 1057 return;
1060 1058
diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c
index 0a31fff2516e..fb1c48c698f2 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c
@@ -816,14 +816,14 @@ int mlxsw_sp_nve_fid_enable(struct mlxsw_sp *mlxsw_sp, struct mlxsw_sp_fid *fid,
816 ops = nve->nve_ops_arr[params->type]; 816 ops = nve->nve_ops_arr[params->type];
817 817
818 if (!ops->can_offload(nve, params->dev, extack)) 818 if (!ops->can_offload(nve, params->dev, extack))
819 return -EOPNOTSUPP; 819 return -EINVAL;
820 820
821 memset(&config, 0, sizeof(config)); 821 memset(&config, 0, sizeof(config));
822 ops->nve_config(nve, params->dev, &config); 822 ops->nve_config(nve, params->dev, &config);
823 if (nve->num_nve_tunnels && 823 if (nve->num_nve_tunnels &&
824 memcmp(&config, &nve->config, sizeof(config))) { 824 memcmp(&config, &nve->config, sizeof(config))) {
825 NL_SET_ERR_MSG_MOD(extack, "Conflicting NVE tunnels configuration"); 825 NL_SET_ERR_MSG_MOD(extack, "Conflicting NVE tunnels configuration");
826 return -EOPNOTSUPP; 826 return -EINVAL;
827 } 827 }
828 828
829 err = mlxsw_sp_nve_tunnel_init(mlxsw_sp, &config); 829 err = mlxsw_sp_nve_tunnel_init(mlxsw_sp, &config);
diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c
index 1bd2c6e15f8d..0abbaa0fbf14 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c
@@ -1078,8 +1078,7 @@ static int
1078mlxsw_sp_bridge_port_vlan_add(struct mlxsw_sp_port *mlxsw_sp_port, 1078mlxsw_sp_bridge_port_vlan_add(struct mlxsw_sp_port *mlxsw_sp_port,
1079 struct mlxsw_sp_bridge_port *bridge_port, 1079 struct mlxsw_sp_bridge_port *bridge_port,
1080 u16 vid, bool is_untagged, bool is_pvid, 1080 u16 vid, bool is_untagged, bool is_pvid,
1081 struct netlink_ext_ack *extack, 1081 struct netlink_ext_ack *extack)
1082 struct switchdev_trans *trans)
1083{ 1082{
1084 u16 pvid = mlxsw_sp_port_pvid_determine(mlxsw_sp_port, vid, is_pvid); 1083 u16 pvid = mlxsw_sp_port_pvid_determine(mlxsw_sp_port, vid, is_pvid);
1085 struct mlxsw_sp_port_vlan *mlxsw_sp_port_vlan; 1084 struct mlxsw_sp_port_vlan *mlxsw_sp_port_vlan;
@@ -1095,9 +1094,6 @@ mlxsw_sp_bridge_port_vlan_add(struct mlxsw_sp_port *mlxsw_sp_port,
1095 mlxsw_sp_port_vlan->bridge_port != bridge_port) 1094 mlxsw_sp_port_vlan->bridge_port != bridge_port)
1096 return -EEXIST; 1095 return -EEXIST;
1097 1096
1098 if (switchdev_trans_ph_prepare(trans))
1099 return 0;
1100
1101 if (!mlxsw_sp_port_vlan) { 1097 if (!mlxsw_sp_port_vlan) {
1102 mlxsw_sp_port_vlan = mlxsw_sp_port_vlan_create(mlxsw_sp_port, 1098 mlxsw_sp_port_vlan = mlxsw_sp_port_vlan_create(mlxsw_sp_port,
1103 vid); 1099 vid);
@@ -1188,6 +1184,9 @@ static int mlxsw_sp_port_vlans_add(struct mlxsw_sp_port *mlxsw_sp_port,
1188 return err; 1184 return err;
1189 } 1185 }
1190 1186
1187 if (switchdev_trans_ph_commit(trans))
1188 return 0;
1189
1191 bridge_port = mlxsw_sp_bridge_port_find(mlxsw_sp->bridge, orig_dev); 1190 bridge_port = mlxsw_sp_bridge_port_find(mlxsw_sp->bridge, orig_dev);
1192 if (WARN_ON(!bridge_port)) 1191 if (WARN_ON(!bridge_port))
1193 return -EINVAL; 1192 return -EINVAL;
@@ -1200,7 +1199,7 @@ static int mlxsw_sp_port_vlans_add(struct mlxsw_sp_port *mlxsw_sp_port,
1200 1199
1201 err = mlxsw_sp_bridge_port_vlan_add(mlxsw_sp_port, bridge_port, 1200 err = mlxsw_sp_bridge_port_vlan_add(mlxsw_sp_port, bridge_port,
1202 vid, flag_untagged, 1201 vid, flag_untagged,
1203 flag_pvid, extack, trans); 1202 flag_pvid, extack);
1204 if (err) 1203 if (err)
1205 return err; 1204 return err;
1206 } 1205 }
@@ -1808,7 +1807,7 @@ static void
1808mlxsw_sp_bridge_port_vlan_del(struct mlxsw_sp_port *mlxsw_sp_port, 1807mlxsw_sp_bridge_port_vlan_del(struct mlxsw_sp_port *mlxsw_sp_port,
1809 struct mlxsw_sp_bridge_port *bridge_port, u16 vid) 1808 struct mlxsw_sp_bridge_port *bridge_port, u16 vid)
1810{ 1809{
1811 u16 pvid = mlxsw_sp_port->pvid == vid ? 0 : vid; 1810 u16 pvid = mlxsw_sp_port->pvid == vid ? 0 : mlxsw_sp_port->pvid;
1812 struct mlxsw_sp_port_vlan *mlxsw_sp_port_vlan; 1811 struct mlxsw_sp_port_vlan *mlxsw_sp_port_vlan;
1813 1812
1814 mlxsw_sp_port_vlan = mlxsw_sp_port_vlan_find_by_vid(mlxsw_sp_port, vid); 1813 mlxsw_sp_port_vlan = mlxsw_sp_port_vlan_find_by_vid(mlxsw_sp_port, vid);
@@ -3207,7 +3206,6 @@ mlxsw_sp_switchdev_vxlan_vlan_add(struct mlxsw_sp *mlxsw_sp,
3207 struct mlxsw_sp_bridge_device *bridge_device, 3206 struct mlxsw_sp_bridge_device *bridge_device,
3208 const struct net_device *vxlan_dev, u16 vid, 3207 const struct net_device *vxlan_dev, u16 vid,
3209 bool flag_untagged, bool flag_pvid, 3208 bool flag_untagged, bool flag_pvid,
3210 struct switchdev_trans *trans,
3211 struct netlink_ext_ack *extack) 3209 struct netlink_ext_ack *extack)
3212{ 3210{
3213 struct vxlan_dev *vxlan = netdev_priv(vxlan_dev); 3211 struct vxlan_dev *vxlan = netdev_priv(vxlan_dev);
@@ -3225,9 +3223,6 @@ mlxsw_sp_switchdev_vxlan_vlan_add(struct mlxsw_sp *mlxsw_sp,
3225 mlxsw_sp_bridge_8021q_vxlan_dev_find(bridge_device->dev, vid)) 3223 mlxsw_sp_bridge_8021q_vxlan_dev_find(bridge_device->dev, vid))
3226 return -EINVAL; 3224 return -EINVAL;
3227 3225
3228 if (switchdev_trans_ph_prepare(trans))
3229 return 0;
3230
3231 if (!netif_running(vxlan_dev)) 3226 if (!netif_running(vxlan_dev))
3232 return 0; 3227 return 0;
3233 3228
@@ -3345,6 +3340,9 @@ mlxsw_sp_switchdev_vxlan_vlans_add(struct net_device *vxlan_dev,
3345 3340
3346 port_obj_info->handled = true; 3341 port_obj_info->handled = true;
3347 3342
3343 if (switchdev_trans_ph_commit(trans))
3344 return 0;
3345
3348 bridge_device = mlxsw_sp_bridge_device_find(mlxsw_sp->bridge, br_dev); 3346 bridge_device = mlxsw_sp_bridge_device_find(mlxsw_sp->bridge, br_dev);
3349 if (!bridge_device) 3347 if (!bridge_device)
3350 return -EINVAL; 3348 return -EINVAL;
@@ -3358,8 +3356,7 @@ mlxsw_sp_switchdev_vxlan_vlans_add(struct net_device *vxlan_dev,
3358 err = mlxsw_sp_switchdev_vxlan_vlan_add(mlxsw_sp, bridge_device, 3356 err = mlxsw_sp_switchdev_vxlan_vlan_add(mlxsw_sp, bridge_device,
3359 vxlan_dev, vid, 3357 vxlan_dev, vid,
3360 flag_untagged, 3358 flag_untagged,
3361 flag_pvid, trans, 3359 flag_pvid, extack);
3362 extack);
3363 if (err) 3360 if (err)
3364 return err; 3361 return err;
3365 } 3362 }
diff --git a/net/bridge/br_private.h b/net/bridge/br_private.h
index d240b3e7919f..eabf8bf28a3f 100644
--- a/net/bridge/br_private.h
+++ b/net/bridge/br_private.h
@@ -107,6 +107,7 @@ struct br_tunnel_info {
107/* private vlan flags */ 107/* private vlan flags */
108enum { 108enum {
109 BR_VLFLAG_PER_PORT_STATS = BIT(0), 109 BR_VLFLAG_PER_PORT_STATS = BIT(0),
110 BR_VLFLAG_ADDED_BY_SWITCHDEV = BIT(1),
110}; 111};
111 112
112/** 113/**
diff --git a/net/bridge/br_vlan.c b/net/bridge/br_vlan.c
index 4a2f31157ef5..96abf8feb9dc 100644
--- a/net/bridge/br_vlan.c
+++ b/net/bridge/br_vlan.c
@@ -80,16 +80,18 @@ static bool __vlan_add_flags(struct net_bridge_vlan *v, u16 flags)
80} 80}
81 81
82static int __vlan_vid_add(struct net_device *dev, struct net_bridge *br, 82static int __vlan_vid_add(struct net_device *dev, struct net_bridge *br,
83 u16 vid, u16 flags, struct netlink_ext_ack *extack) 83 struct net_bridge_vlan *v, u16 flags,
84 struct netlink_ext_ack *extack)
84{ 85{
85 int err; 86 int err;
86 87
87 /* Try switchdev op first. In case it is not supported, fallback to 88 /* Try switchdev op first. In case it is not supported, fallback to
88 * 8021q add. 89 * 8021q add.
89 */ 90 */
90 err = br_switchdev_port_vlan_add(dev, vid, flags, extack); 91 err = br_switchdev_port_vlan_add(dev, v->vid, flags, extack);
91 if (err == -EOPNOTSUPP) 92 if (err == -EOPNOTSUPP)
92 return vlan_vid_add(dev, br->vlan_proto, vid); 93 return vlan_vid_add(dev, br->vlan_proto, v->vid);
94 v->priv_flags |= BR_VLFLAG_ADDED_BY_SWITCHDEV;
93 return err; 95 return err;
94} 96}
95 97
@@ -121,19 +123,17 @@ static void __vlan_del_list(struct net_bridge_vlan *v)
121} 123}
122 124
123static int __vlan_vid_del(struct net_device *dev, struct net_bridge *br, 125static int __vlan_vid_del(struct net_device *dev, struct net_bridge *br,
124 u16 vid) 126 const struct net_bridge_vlan *v)
125{ 127{
126 int err; 128 int err;
127 129
128 /* Try switchdev op first. In case it is not supported, fallback to 130 /* Try switchdev op first. In case it is not supported, fallback to
129 * 8021q del. 131 * 8021q del.
130 */ 132 */
131 err = br_switchdev_port_vlan_del(dev, vid); 133 err = br_switchdev_port_vlan_del(dev, v->vid);
132 if (err == -EOPNOTSUPP) { 134 if (!(v->priv_flags & BR_VLFLAG_ADDED_BY_SWITCHDEV))
133 vlan_vid_del(dev, br->vlan_proto, vid); 135 vlan_vid_del(dev, br->vlan_proto, v->vid);
134 return 0; 136 return err == -EOPNOTSUPP ? 0 : err;
135 }
136 return err;
137} 137}
138 138
139/* Returns a master vlan, if it didn't exist it gets created. In all cases a 139/* Returns a master vlan, if it didn't exist it gets created. In all cases a
@@ -242,7 +242,7 @@ static int __vlan_add(struct net_bridge_vlan *v, u16 flags,
242 * This ensures tagged traffic enters the bridge when 242 * This ensures tagged traffic enters the bridge when
243 * promiscuous mode is disabled by br_manage_promisc(). 243 * promiscuous mode is disabled by br_manage_promisc().
244 */ 244 */
245 err = __vlan_vid_add(dev, br, v->vid, flags, extack); 245 err = __vlan_vid_add(dev, br, v, flags, extack);
246 if (err) 246 if (err)
247 goto out; 247 goto out;
248 248
@@ -305,7 +305,7 @@ out_fdb_insert:
305 305
306out_filt: 306out_filt:
307 if (p) { 307 if (p) {
308 __vlan_vid_del(dev, br, v->vid); 308 __vlan_vid_del(dev, br, v);
309 if (masterv) { 309 if (masterv) {
310 if (v->stats && masterv->stats != v->stats) 310 if (v->stats && masterv->stats != v->stats)
311 free_percpu(v->stats); 311 free_percpu(v->stats);
@@ -338,7 +338,7 @@ static int __vlan_del(struct net_bridge_vlan *v)
338 338
339 __vlan_delete_pvid(vg, v->vid); 339 __vlan_delete_pvid(vg, v->vid);
340 if (p) { 340 if (p) {
341 err = __vlan_vid_del(p->dev, p->br, v->vid); 341 err = __vlan_vid_del(p->dev, p->br, v);
342 if (err) 342 if (err)
343 goto out; 343 goto out;
344 } else { 344 } else {
diff --git a/tools/testing/selftests/drivers/net/mlxsw/vxlan.sh b/tools/testing/selftests/drivers/net/mlxsw/vxlan.sh
index dcf9f4e913e0..ae6146ec5afd 100755
--- a/tools/testing/selftests/drivers/net/mlxsw/vxlan.sh
+++ b/tools/testing/selftests/drivers/net/mlxsw/vxlan.sh
@@ -847,6 +847,24 @@ sanitization_vlan_aware_test()
847 847
848 log_test "vlan-aware - failed enslavement to vlan-aware bridge" 848 log_test "vlan-aware - failed enslavement to vlan-aware bridge"
849 849
850 bridge vlan del vid 10 dev vxlan20
851 bridge vlan add vid 20 dev vxlan20 pvid untagged
852
853 # Test that offloading of an unsupported tunnel fails when it is
854 # triggered by addition of VLAN to a local port
855 RET=0
856
857 # TOS must be set to inherit
858 ip link set dev vxlan10 type vxlan tos 42
859
860 ip link set dev $swp1 master br0
861 bridge vlan add vid 10 dev $swp1 &> /dev/null
862 check_fail $?
863
864 log_test "vlan-aware - failed vlan addition to a local port"
865
866 ip link set dev vxlan10 type vxlan tos inherit
867
850 ip link del dev vxlan20 868 ip link del dev vxlan20
851 ip link del dev vxlan10 869 ip link del dev vxlan10
852 ip link del dev br0 870 ip link del dev br0
diff --git a/tools/testing/selftests/net/forwarding/bridge_vlan_aware.sh b/tools/testing/selftests/net/forwarding/bridge_vlan_aware.sh
index d8313d0438b7..04c6431b2bd8 100755
--- a/tools/testing/selftests/net/forwarding/bridge_vlan_aware.sh
+++ b/tools/testing/selftests/net/forwarding/bridge_vlan_aware.sh
@@ -1,7 +1,7 @@
1#!/bin/bash 1#!/bin/bash
2# SPDX-License-Identifier: GPL-2.0 2# SPDX-License-Identifier: GPL-2.0
3 3
4ALL_TESTS="ping_ipv4 ping_ipv6 learning flooding" 4ALL_TESTS="ping_ipv4 ping_ipv6 learning flooding vlan_deletion"
5NUM_NETIFS=4 5NUM_NETIFS=4
6CHECK_TC="yes" 6CHECK_TC="yes"
7source lib.sh 7source lib.sh
@@ -96,6 +96,19 @@ flooding()
96 flood_test $swp2 $h1 $h2 96 flood_test $swp2 $h1 $h2
97} 97}
98 98
99vlan_deletion()
100{
101 # Test that the deletion of a VLAN on a bridge port does not affect
102 # the PVID VLAN
103 log_info "Add and delete a VLAN on bridge port $swp1"
104
105 bridge vlan add vid 10 dev $swp1
106 bridge vlan del vid 10 dev $swp1
107
108 ping_ipv4
109 ping_ipv6
110}
111
99trap cleanup EXIT 112trap cleanup EXIT
100 113
101setup_prepare 114setup_prepare
diff --git a/tools/testing/selftests/net/forwarding/vxlan_bridge_1d.sh b/tools/testing/selftests/net/forwarding/vxlan_bridge_1d.sh
index 56cef3b1c194..bb10e33690b2 100755
--- a/tools/testing/selftests/net/forwarding/vxlan_bridge_1d.sh
+++ b/tools/testing/selftests/net/forwarding/vxlan_bridge_1d.sh
@@ -629,7 +629,7 @@ __test_ecn_decap()
629 RET=0 629 RET=0
630 630
631 tc filter add dev $h1 ingress pref 77 prot ip \ 631 tc filter add dev $h1 ingress pref 77 prot ip \
632 flower ip_tos $decapped_tos action pass 632 flower ip_tos $decapped_tos action drop
633 sleep 1 633 sleep 1
634 vxlan_encapped_ping_test v2 v1 192.0.2.17 \ 634 vxlan_encapped_ping_test v2 v1 192.0.2.17 \
635 $orig_inner_tos $orig_outer_tos \ 635 $orig_inner_tos $orig_outer_tos \