Merge tag 'for-5.12/libata-2021-02-17' of git://git.kernel.dk/linux-block
[linux-2.6-microblaze.git] / net / bridge / br_vlan.c
index 701cad6..8829f62 100644 (file)
@@ -806,7 +806,8 @@ void br_recalculate_fwd_mask(struct net_bridge *br)
                                              ~(1u << br->group_addr[5]);
 }
 
-int __br_vlan_filter_toggle(struct net_bridge *br, unsigned long val)
+int br_vlan_filter_toggle(struct net_bridge *br, unsigned long val,
+                         struct netlink_ext_ack *extack)
 {
        struct switchdev_attr attr = {
                .orig_dev = br->dev,
@@ -819,7 +820,7 @@ int __br_vlan_filter_toggle(struct net_bridge *br, unsigned long val)
        if (br_opt_get(br, BROPT_VLAN_ENABLED) == !!val)
                return 0;
 
-       err = switchdev_port_attr_set(br->dev, &attr);
+       err = switchdev_port_attr_set(br->dev, &attr, extack);
        if (err && err != -EOPNOTSUPP)
                return err;
 
@@ -831,11 +832,6 @@ int __br_vlan_filter_toggle(struct net_bridge *br, unsigned long val)
        return 0;
 }
 
-int br_vlan_filter_toggle(struct net_bridge *br, unsigned long val)
-{
-       return __br_vlan_filter_toggle(br, val);
-}
-
 bool br_vlan_enabled(const struct net_device *dev)
 {
        struct net_bridge *br = netdev_priv(dev);
@@ -854,7 +850,8 @@ int br_vlan_get_proto(const struct net_device *dev, u16 *p_proto)
 }
 EXPORT_SYMBOL_GPL(br_vlan_get_proto);
 
-int __br_vlan_set_proto(struct net_bridge *br, __be16 proto)
+int __br_vlan_set_proto(struct net_bridge *br, __be16 proto,
+                       struct netlink_ext_ack *extack)
 {
        struct switchdev_attr attr = {
                .orig_dev = br->dev,
@@ -871,7 +868,7 @@ int __br_vlan_set_proto(struct net_bridge *br, __be16 proto)
        if (br->vlan_proto == proto)
                return 0;
 
-       err = switchdev_port_attr_set(br->dev, &attr);
+       err = switchdev_port_attr_set(br->dev, &attr, extack);
        if (err && err != -EOPNOTSUPP)
                return err;
 
@@ -901,7 +898,7 @@ int __br_vlan_set_proto(struct net_bridge *br, __be16 proto)
 
 err_filt:
        attr.u.vlan_protocol = ntohs(oldproto);
-       switchdev_port_attr_set(br->dev, &attr);
+       switchdev_port_attr_set(br->dev, &attr, NULL);
 
        list_for_each_entry_continue_reverse(vlan, &vg->vlan_list, vlist)
                vlan_vid_del(p->dev, proto, vlan->vid);
@@ -915,12 +912,13 @@ err_filt:
        return err;
 }
 
-int br_vlan_set_proto(struct net_bridge *br, unsigned long val)
+int br_vlan_set_proto(struct net_bridge *br, unsigned long val,
+                     struct netlink_ext_ack *extack)
 {
-       if (val != ETH_P_8021Q && val != ETH_P_8021AD)
+       if (!eth_type_vlan(htons(val)))
                return -EPROTONOSUPPORT;
 
-       return __br_vlan_set_proto(br, htons(val));
+       return __br_vlan_set_proto(br, htons(val), extack);
 }
 
 int br_vlan_set_stats(struct net_bridge *br, unsigned long val)
@@ -1100,7 +1098,8 @@ err_port:
        goto out;
 }
 
-int br_vlan_set_default_pvid(struct net_bridge *br, unsigned long val)
+int br_vlan_set_default_pvid(struct net_bridge *br, unsigned long val,
+                            struct netlink_ext_ack *extack)
 {
        u16 pvid = val;
        int err = 0;
@@ -1117,7 +1116,7 @@ int br_vlan_set_default_pvid(struct net_bridge *br, unsigned long val)
                err = -EPERM;
                goto out;
        }
-       err = __br_vlan_set_default_pvid(br, pvid, NULL);
+       err = __br_vlan_set_default_pvid(br, pvid, extack);
 out:
        return err;
 }
@@ -1167,7 +1166,7 @@ int nbp_vlan_init(struct net_bridge_port *p, struct netlink_ext_ack *extack)
        if (!vg)
                goto out;
 
-       ret = switchdev_port_attr_set(p->dev, &attr);
+       ret = switchdev_port_attr_set(p->dev, &attr, extack);
        if (ret && ret != -EOPNOTSUPP)
                goto err_vlan_enabled;