net: bridge: split out the switchdev portion of br_mdb_notify
Similar to fdb_notify() and br_switchdev_fdb_notify(), split the switchdev specific logic from br_mdb_notify() into a different function. This will be moved later in br_switchdev.c. Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com> Acked-by: Nikolay Aleksandrov <nikolay@nvidia.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
4a6849e461
commit
9ae9ff994b
@ -759,10 +759,10 @@ static void br_mdb_switchdev_host(struct net_device *dev,
|
||||
br_mdb_switchdev_host_port(dev, lower_dev, mp, type);
|
||||
}
|
||||
|
||||
void br_mdb_notify(struct net_device *dev,
|
||||
struct net_bridge_mdb_entry *mp,
|
||||
struct net_bridge_port_group *pg,
|
||||
int type)
|
||||
static void br_switchdev_mdb_notify(struct net_device *dev,
|
||||
struct net_bridge_mdb_entry *mp,
|
||||
struct net_bridge_port_group *pg,
|
||||
int type)
|
||||
{
|
||||
struct br_mdb_complete_info *complete_info;
|
||||
struct switchdev_obj_port_mdb mdb = {
|
||||
@ -771,33 +771,41 @@ void br_mdb_notify(struct net_device *dev,
|
||||
.flags = SWITCHDEV_F_DEFER,
|
||||
},
|
||||
};
|
||||
|
||||
if (!pg)
|
||||
return br_mdb_switchdev_host(dev, mp, type);
|
||||
|
||||
br_switchdev_mdb_populate(&mdb, mp);
|
||||
|
||||
mdb.obj.orig_dev = pg->key.port->dev;
|
||||
switch (type) {
|
||||
case RTM_NEWMDB:
|
||||
complete_info = kmalloc(sizeof(*complete_info), GFP_ATOMIC);
|
||||
if (!complete_info)
|
||||
break;
|
||||
complete_info->port = pg->key.port;
|
||||
complete_info->ip = mp->addr;
|
||||
mdb.obj.complete_priv = complete_info;
|
||||
mdb.obj.complete = br_mdb_complete;
|
||||
if (switchdev_port_obj_add(pg->key.port->dev, &mdb.obj, NULL))
|
||||
kfree(complete_info);
|
||||
break;
|
||||
case RTM_DELMDB:
|
||||
switchdev_port_obj_del(pg->key.port->dev, &mdb.obj);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void br_mdb_notify(struct net_device *dev,
|
||||
struct net_bridge_mdb_entry *mp,
|
||||
struct net_bridge_port_group *pg,
|
||||
int type)
|
||||
{
|
||||
struct net *net = dev_net(dev);
|
||||
struct sk_buff *skb;
|
||||
int err = -ENOBUFS;
|
||||
|
||||
if (pg) {
|
||||
br_switchdev_mdb_populate(&mdb, mp);
|
||||
|
||||
mdb.obj.orig_dev = pg->key.port->dev;
|
||||
switch (type) {
|
||||
case RTM_NEWMDB:
|
||||
complete_info = kmalloc(sizeof(*complete_info), GFP_ATOMIC);
|
||||
if (!complete_info)
|
||||
break;
|
||||
complete_info->port = pg->key.port;
|
||||
complete_info->ip = mp->addr;
|
||||
mdb.obj.complete_priv = complete_info;
|
||||
mdb.obj.complete = br_mdb_complete;
|
||||
if (switchdev_port_obj_add(pg->key.port->dev, &mdb.obj, NULL))
|
||||
kfree(complete_info);
|
||||
break;
|
||||
case RTM_DELMDB:
|
||||
switchdev_port_obj_del(pg->key.port->dev, &mdb.obj);
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
br_mdb_switchdev_host(dev, mp, type);
|
||||
}
|
||||
br_switchdev_mdb_notify(dev, mp, pg, type);
|
||||
|
||||
skb = nlmsg_new(rtnl_mdb_nlmsg_size(pg), GFP_ATOMIC);
|
||||
if (!skb)
|
||||
|
Loading…
x
Reference in New Issue
Block a user