Merge tag 'hsi-for-4.4' of git://git.kernel.org/pub/scm/linux/kernel/git/sre/linux-hsi
[firefly-linux-kernel-4.4.55.git] / net / bridge / br_mdb.c
index d747275fad18826f96c604505f0583049c456f91..cd8deea2d074e6af6172968c60cdd4128d40b16c 100644 (file)
@@ -464,11 +464,11 @@ static int __br_mdb_add(struct net *net, struct net_bridge *br,
 static int br_mdb_add(struct sk_buff *skb, struct nlmsghdr *nlh)
 {
        struct net *net = sock_net(skb->sk);
-       unsigned short vid = VLAN_N_VID;
+       struct net_bridge_vlan_group *vg;
        struct net_device *dev, *pdev;
        struct br_mdb_entry *entry;
        struct net_bridge_port *p;
-       struct net_port_vlans *pv;
+       struct net_bridge_vlan *v;
        struct net_bridge *br;
        int err;
 
@@ -489,10 +489,10 @@ static int br_mdb_add(struct sk_buff *skb, struct nlmsghdr *nlh)
        if (!p || p->br != br || p->state == BR_STATE_DISABLED)
                return -EINVAL;
 
-       pv = nbp_get_vlan_info(p);
-       if (br_vlan_enabled(br) && pv && entry->vid == 0) {
-               for_each_set_bit(vid, pv->vlan_bitmap, VLAN_N_VID) {
-                       entry->vid = vid;
+       vg = nbp_vlan_group(p);
+       if (br_vlan_enabled(br) && vg && entry->vid == 0) {
+               list_for_each_entry(v, &vg->vlan_list, vlist) {
+                       entry->vid = v->vid;
                        err = __br_mdb_add(net, br, entry);
                        if (err)
                                break;
@@ -566,11 +566,11 @@ unlock:
 static int br_mdb_del(struct sk_buff *skb, struct nlmsghdr *nlh)
 {
        struct net *net = sock_net(skb->sk);
-       unsigned short vid = VLAN_N_VID;
+       struct net_bridge_vlan_group *vg;
        struct net_device *dev, *pdev;
        struct br_mdb_entry *entry;
        struct net_bridge_port *p;
-       struct net_port_vlans *pv;
+       struct net_bridge_vlan *v;
        struct net_bridge *br;
        int err;
 
@@ -591,10 +591,10 @@ static int br_mdb_del(struct sk_buff *skb, struct nlmsghdr *nlh)
        if (!p || p->br != br || p->state == BR_STATE_DISABLED)
                return -EINVAL;
 
-       pv = nbp_get_vlan_info(p);
-       if (br_vlan_enabled(br) && pv && entry->vid == 0) {
-               for_each_set_bit(vid, pv->vlan_bitmap, VLAN_N_VID) {
-                       entry->vid = vid;
+       vg = nbp_vlan_group(p);
+       if (br_vlan_enabled(br) && vg && entry->vid == 0) {
+               list_for_each_entry(v, &vg->vlan_list, vlist) {
+                       entry->vid = v->vid;
                        err = __br_mdb_del(br, entry);
                        if (!err)
                                __br_mdb_notify(dev, entry, RTM_DELMDB);