|
@@ -4295,46 +4295,6 @@ skip:
|
|
return idx;
|
|
return idx;
|
|
}
|
|
}
|
|
|
|
|
|
-static int rocker_port_bridge_setlink(struct net_device *dev,
|
|
|
|
- struct nlmsghdr *nlh, u16 flags)
|
|
|
|
-{
|
|
|
|
- struct rocker_port *rocker_port = netdev_priv(dev);
|
|
|
|
- struct nlattr *protinfo;
|
|
|
|
- struct nlattr *attr;
|
|
|
|
- int err;
|
|
|
|
-
|
|
|
|
- protinfo = nlmsg_find_attr(nlh, sizeof(struct ifinfomsg),
|
|
|
|
- IFLA_PROTINFO);
|
|
|
|
- if (protinfo) {
|
|
|
|
- attr = nla_find_nested(protinfo, IFLA_BRPORT_LEARNING);
|
|
|
|
- if (attr) {
|
|
|
|
- if (nla_len(attr) < sizeof(u8))
|
|
|
|
- return -EINVAL;
|
|
|
|
-
|
|
|
|
- if (nla_get_u8(attr))
|
|
|
|
- rocker_port->brport_flags |= BR_LEARNING;
|
|
|
|
- else
|
|
|
|
- rocker_port->brport_flags &= ~BR_LEARNING;
|
|
|
|
- err = rocker_port_set_learning(rocker_port,
|
|
|
|
- SWITCHDEV_TRANS_NONE);
|
|
|
|
- if (err)
|
|
|
|
- return err;
|
|
|
|
- }
|
|
|
|
- attr = nla_find_nested(protinfo, IFLA_BRPORT_LEARNING_SYNC);
|
|
|
|
- if (attr) {
|
|
|
|
- if (nla_len(attr) < sizeof(u8))
|
|
|
|
- return -EINVAL;
|
|
|
|
-
|
|
|
|
- if (nla_get_u8(attr))
|
|
|
|
- rocker_port->brport_flags |= BR_LEARNING_SYNC;
|
|
|
|
- else
|
|
|
|
- rocker_port->brport_flags &= ~BR_LEARNING_SYNC;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return 0;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
static int rocker_port_bridge_getlink(struct sk_buff *skb, u32 pid, u32 seq,
|
|
static int rocker_port_bridge_getlink(struct sk_buff *skb, u32 pid, u32 seq,
|
|
struct net_device *dev,
|
|
struct net_device *dev,
|
|
u32 filter_mask, int nlflags)
|
|
u32 filter_mask, int nlflags)
|
|
@@ -4374,7 +4334,7 @@ static const struct net_device_ops rocker_port_netdev_ops = {
|
|
.ndo_fdb_add = rocker_port_fdb_add,
|
|
.ndo_fdb_add = rocker_port_fdb_add,
|
|
.ndo_fdb_del = rocker_port_fdb_del,
|
|
.ndo_fdb_del = rocker_port_fdb_del,
|
|
.ndo_fdb_dump = rocker_port_fdb_dump,
|
|
.ndo_fdb_dump = rocker_port_fdb_dump,
|
|
- .ndo_bridge_setlink = rocker_port_bridge_setlink,
|
|
|
|
|
|
+ .ndo_bridge_setlink = switchdev_port_bridge_setlink,
|
|
.ndo_bridge_getlink = rocker_port_bridge_getlink,
|
|
.ndo_bridge_getlink = rocker_port_bridge_getlink,
|
|
.ndo_get_phys_port_name = rocker_port_get_phys_port_name,
|
|
.ndo_get_phys_port_name = rocker_port_get_phys_port_name,
|
|
};
|
|
};
|