Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fc8f40d8 authored by Scott Feldman's avatar Scott Feldman Committed by David S. Miller
Browse files

switchdev: cut over to new switchdev_port_bridge_setlink



Rocker, bonding, and team can now use the switchdev bridge setlink to parse
raw netlink; no need to duplicate this code in each driver.

Signed-off-by: default avatarScott Feldman <sfeldma@gmail.com>
Acked-by: default avatarJiri Pirko <jiri@resnulli.us>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 47f8328b
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -4039,7 +4039,7 @@ static const struct net_device_ops bond_netdev_ops = {
	.ndo_add_slave		= bond_enslave,
	.ndo_del_slave		= bond_release,
	.ndo_fix_features	= bond_fix_features,
	.ndo_bridge_setlink	= ndo_dflt_switchdev_port_bridge_setlink,
	.ndo_bridge_setlink	= switchdev_port_bridge_setlink,
	.ndo_bridge_dellink	= ndo_dflt_switchdev_port_bridge_dellink,
	.ndo_features_check	= passthru_features_check,
};
+1 −41
Original line number Diff line number Diff line
@@ -4295,46 +4295,6 @@ static int rocker_port_fdb_dump(struct sk_buff *skb,
	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,
				      struct net_device *dev,
				      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_del			= rocker_port_fdb_del,
	.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_get_phys_port_name		= rocker_port_get_phys_port_name,
};
+1 −1
Original line number Diff line number Diff line
@@ -1977,7 +1977,7 @@ static const struct net_device_ops team_netdev_ops = {
	.ndo_del_slave		= team_del_slave,
	.ndo_fix_features	= team_fix_features,
	.ndo_change_carrier     = team_change_carrier,
	.ndo_bridge_setlink     = ndo_dflt_switchdev_port_bridge_setlink,
	.ndo_bridge_setlink	= switchdev_port_bridge_setlink,
	.ndo_bridge_dellink     = ndo_dflt_switchdev_port_bridge_dellink,
	.ndo_features_check	= passthru_features_check,
};