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

Commit abfbf8a0 authored by Arkadi Sharshevsky's avatar Arkadi Sharshevsky Committed by David S. Miller
Browse files

rocker: Remove support bridge bypass FDB



The FDB add/delete are now done through the notification chain. The FDBs
are synced with the bridge and there is no need for extra dumping.

Signed-off-by: default avatarArkadi Sharshevsky <arkadis@mellanox.com>
Signed-off-by: default avatarJiri Pirko <jiri@mellanox.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 403caa7a
Loading
Loading
Loading
Loading
+0 −3
Original line number Diff line number Diff line
@@ -126,9 +126,6 @@ struct rocker_world_ops {
				u16 vid, const unsigned char *addr);
	int (*port_obj_fdb_del)(struct rocker_port *rocker_port,
				u16 vid, const unsigned char *addr);
	int (*port_obj_fdb_dump)(const struct rocker_port *rocker_port,
				 struct switchdev_obj_port_fdb *fdb,
				 switchdev_obj_dump_cb_t *cb);
	int (*port_master_linked)(struct rocker_port *rocker_port,
				  struct net_device *master);
	int (*port_master_unlinked)(struct rocker_port *rocker_port,
+0 −73
Original line number Diff line number Diff line
@@ -1651,33 +1651,6 @@ rocker_world_port_obj_vlan_del(struct rocker_port *rocker_port,
	return wops->port_obj_vlan_del(rocker_port, vlan);
}

static int
rocker_world_port_obj_fdb_add(struct rocker_port *rocker_port,
			      const struct switchdev_obj_port_fdb *fdb,
			      struct switchdev_trans *trans)
{
	struct rocker_world_ops *wops = rocker_port->rocker->wops;

	if (!wops->port_obj_fdb_add)
		return -EOPNOTSUPP;

	if (switchdev_trans_ph_prepare(trans))
		return 0;

	return wops->port_obj_fdb_add(rocker_port, fdb->vid, fdb->addr);
}

static int
rocker_world_port_obj_fdb_del(struct rocker_port *rocker_port,
			      const struct switchdev_obj_port_fdb *fdb)
{
	struct rocker_world_ops *wops = rocker_port->rocker->wops;

	if (!wops->port_obj_fdb_del)
		return -EOPNOTSUPP;
	return wops->port_obj_fdb_del(rocker_port, fdb->vid, fdb->addr);
}

static int
rocker_world_port_fdb_add(struct rocker_port *rocker_port,
			  struct switchdev_notifier_fdb_info *info)
@@ -1701,18 +1674,6 @@ rocker_world_port_fdb_del(struct rocker_port *rocker_port,
	return wops->port_obj_fdb_del(rocker_port, info->vid, info->addr);
}

static int
rocker_world_port_obj_fdb_dump(const struct rocker_port *rocker_port,
			       struct switchdev_obj_port_fdb *fdb,
			       switchdev_obj_dump_cb_t *cb)
{
	struct rocker_world_ops *wops = rocker_port->rocker->wops;

	if (!wops->port_obj_fdb_dump)
		return -EOPNOTSUPP;
	return wops->port_obj_fdb_dump(rocker_port, fdb, cb);
}

static int rocker_world_port_master_linked(struct rocker_port *rocker_port,
					   struct net_device *master)
{
@@ -2067,9 +2028,6 @@ static const struct net_device_ops rocker_port_netdev_ops = {
	.ndo_start_xmit			= rocker_port_xmit,
	.ndo_set_mac_address		= rocker_port_set_mac_address,
	.ndo_change_mtu			= rocker_port_change_mtu,
	.ndo_fdb_add			= switchdev_port_fdb_add,
	.ndo_fdb_del			= switchdev_port_fdb_del,
	.ndo_fdb_dump			= switchdev_port_fdb_dump,
	.ndo_get_phys_port_name		= rocker_port_get_phys_port_name,
	.ndo_change_proto_down		= rocker_port_change_proto_down,
	.ndo_neigh_destroy		= rocker_port_neigh_destroy,
@@ -2150,11 +2108,6 @@ static int rocker_port_obj_add(struct net_device *dev,
						     SWITCHDEV_OBJ_PORT_VLAN(obj),
						     trans);
		break;
	case SWITCHDEV_OBJ_ID_PORT_FDB:
		err = rocker_world_port_obj_fdb_add(rocker_port,
						    SWITCHDEV_OBJ_PORT_FDB(obj),
						    trans);
		break;
	default:
		err = -EOPNOTSUPP;
		break;
@@ -2174,31 +2127,6 @@ static int rocker_port_obj_del(struct net_device *dev,
		err = rocker_world_port_obj_vlan_del(rocker_port,
						     SWITCHDEV_OBJ_PORT_VLAN(obj));
		break;
	case SWITCHDEV_OBJ_ID_PORT_FDB:
		err = rocker_world_port_obj_fdb_del(rocker_port,
						    SWITCHDEV_OBJ_PORT_FDB(obj));
		break;
	default:
		err = -EOPNOTSUPP;
		break;
	}

	return err;
}

static int rocker_port_obj_dump(struct net_device *dev,
				struct switchdev_obj *obj,
				switchdev_obj_dump_cb_t *cb)
{
	const struct rocker_port *rocker_port = netdev_priv(dev);
	int err = 0;

	switch (obj->id) {
	case SWITCHDEV_OBJ_ID_PORT_FDB:
		err = rocker_world_port_obj_fdb_dump(rocker_port,
						     SWITCHDEV_OBJ_PORT_FDB(obj),
						     cb);
		break;
	default:
		err = -EOPNOTSUPP;
		break;
@@ -2212,7 +2140,6 @@ static const struct switchdev_ops rocker_port_switchdev_ops = {
	.switchdev_port_attr_set	= rocker_port_attr_set,
	.switchdev_port_obj_add		= rocker_port_obj_add,
	.switchdev_port_obj_del		= rocker_port_obj_del,
	.switchdev_port_obj_dump	= rocker_port_obj_dump,
};

struct rocker_fib_event_work {
+0 −30
Original line number Diff line number Diff line
@@ -2608,35 +2608,6 @@ static int ofdpa_port_obj_fdb_del(struct rocker_port *rocker_port,
	return ofdpa_port_fdb(ofdpa_port, addr, vlan_id, flags);
}

static int ofdpa_port_obj_fdb_dump(const struct rocker_port *rocker_port,
				   struct switchdev_obj_port_fdb *fdb,
				   switchdev_obj_dump_cb_t *cb)
{
	const struct ofdpa_port *ofdpa_port = rocker_port->wpriv;
	struct ofdpa *ofdpa = ofdpa_port->ofdpa;
	struct ofdpa_fdb_tbl_entry *found;
	struct hlist_node *tmp;
	unsigned long lock_flags;
	int bkt;
	int err = 0;

	spin_lock_irqsave(&ofdpa->fdb_tbl_lock, lock_flags);
	hash_for_each_safe(ofdpa->fdb_tbl, bkt, tmp, found, entry) {
		if (found->key.ofdpa_port != ofdpa_port)
			continue;
		ether_addr_copy(fdb->addr, found->key.addr);
		fdb->ndm_state = NUD_REACHABLE;
		fdb->vid = ofdpa_port_vlan_to_vid(ofdpa_port,
						  found->key.vlan_id);
		err = cb(&fdb->obj);
		if (err)
			break;
	}
	spin_unlock_irqrestore(&ofdpa->fdb_tbl_lock, lock_flags);

	return err;
}

static int ofdpa_port_bridge_join(struct ofdpa_port *ofdpa_port,
				  struct net_device *bridge)
{
@@ -2861,7 +2832,6 @@ struct rocker_world_ops rocker_ofdpa_ops = {
	.port_obj_vlan_del = ofdpa_port_obj_vlan_del,
	.port_obj_fdb_add = ofdpa_port_obj_fdb_add,
	.port_obj_fdb_del = ofdpa_port_obj_fdb_del,
	.port_obj_fdb_dump = ofdpa_port_obj_fdb_dump,
	.port_master_linked = ofdpa_port_master_linked,
	.port_master_unlinked = ofdpa_port_master_unlinked,
	.port_neigh_update = ofdpa_port_neigh_update,