diff --git a/drivers/net/vxlan/vxlan_core.c b/drivers/net/vxlan/vxlan_core.c index 278d41f58d89..223539099778 100644 --- a/drivers/net/vxlan/vxlan_core.c +++ b/drivers/net/vxlan/vxlan_core.c @@ -4488,7 +4488,7 @@ static int vxlan_nl2conf(struct nlattr *tb[], struct nlattr *data[], } conf->reserved_bits = reserved_bits; - } else { + } else if (!changelink) { /* For backwards compatibility, only allow reserved fields to be * used by VXLAN extensions if explicitly requested. */ diff --git a/tools/testing/selftests/net/forwarding/vxlan_reserved.sh b/tools/testing/selftests/net/forwarding/vxlan_reserved.sh index 709845123727..0ce264cc57f8 100755 --- a/tools/testing/selftests/net/forwarding/vxlan_reserved.sh +++ b/tools/testing/selftests/net/forwarding/vxlan_reserved.sh @@ -40,6 +40,7 @@ reserved_31_test reserved_56_test reserved_63_test + gbp_changelink_test "} NUM_NETIFS=4 @@ -338,6 +339,20 @@ reserved_63_test() reserved_test 63 } +gbp_changelink_test_do() +{ + vxlan_device_add gbp + __default_test_do 25 "gbp" + ip link set dev vx1 type vxlan ageing 300 + __default_test_do 25 "gbp after changelink" +} + +gbp_changelink_test() +{ + in_defer_scope \ + gbp_changelink_test_do +} + trap cleanup EXIT setup_prepare