On 07/21/2015 12:28 AM, Stephen Hemminger wrote: > On Fri, 10 Jul 2015 08:02:08 -0700 > Nikolay Aleksandrov <nikolay@xxxxxxxxxxxxxxxxxxx> wrote: > >> diff --git a/include/uapi/linux/if_bridge.h b/include/uapi/linux/if_bridge.h >> index eaaea6208b42..3635b7797508 100644 >> --- a/include/uapi/linux/if_bridge.h >> +++ b/include/uapi/linux/if_bridge.h >> @@ -182,6 +182,7 @@ struct br_mdb_entry { >> #define MDB_TEMPORARY 0 >> #define MDB_PERMANENT 1 >> __u8 state; >> + __u16 vid; >> struct { >> union { >> __be32 ip4; > > You added a new field into an unused hole in a data > structure shared as part of API with user space. > > This seems like it might break when newer iproute > is run on older kernels. The vid would always be 0 > on show and ignored when adding entries. > I thought it'd be fine because the vid was 0 anyway and when it's 0 it's not shown i.e. no vid so the show command will have the same output. And when set - it'll be ignored which is again as the behaviour before when it couldn't be specified. Here's the new iproute2 on an older kernel: # ./bridge/bridge mdb add dev virbr0 port vnet1 grp 239.0.0.1 permanent vid 200 # ./bridge/bridge mdb dev virbr0 port vnet1 grp 239.0.0.1 permanent