bridge: support for ndo_fdb_get
This patch implements ndo_fdb_get for the bridge fdb. Signed-off-by: Roopa Prabhu <roopa@cumulusnetworks.com> Acked-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com> Reviewed-by: David Ahern <dsa@cumulusnetworks.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
5b2f94b276
Коммит
4767456212
|
@ -403,6 +403,7 @@ static const struct net_device_ops br_netdev_ops = {
|
|||
.ndo_fdb_add = br_fdb_add,
|
||||
.ndo_fdb_del = br_fdb_delete,
|
||||
.ndo_fdb_dump = br_fdb_dump,
|
||||
.ndo_fdb_get = br_fdb_get,
|
||||
.ndo_bridge_getlink = br_getlink,
|
||||
.ndo_bridge_setlink = br_setlink,
|
||||
.ndo_bridge_dellink = br_dellink,
|
||||
|
|
|
@ -773,6 +773,32 @@ skip:
|
|||
return err;
|
||||
}
|
||||
|
||||
int br_fdb_get(struct sk_buff *skb,
|
||||
struct nlattr *tb[],
|
||||
struct net_device *dev,
|
||||
const unsigned char *addr,
|
||||
u16 vid, u32 portid, u32 seq,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct net_bridge *br = netdev_priv(dev);
|
||||
struct net_bridge_fdb_entry *f;
|
||||
int err = 0;
|
||||
|
||||
rcu_read_lock();
|
||||
f = br_fdb_find_rcu(br, addr, vid);
|
||||
if (!f) {
|
||||
NL_SET_ERR_MSG(extack, "Fdb entry not found");
|
||||
err = -ENOENT;
|
||||
goto errout;
|
||||
}
|
||||
|
||||
err = fdb_fill_info(skb, br, f, portid, seq,
|
||||
RTM_NEWNEIGH, 0);
|
||||
errout:
|
||||
rcu_read_unlock();
|
||||
return err;
|
||||
}
|
||||
|
||||
/* Update (create or replace) forwarding database entry */
|
||||
static int fdb_add_entry(struct net_bridge *br, struct net_bridge_port *source,
|
||||
const u8 *addr, u16 state, u16 flags, u16 vid,
|
||||
|
|
|
@ -575,6 +575,9 @@ int br_fdb_add(struct ndmsg *nlh, struct nlattr *tb[], struct net_device *dev,
|
|||
const unsigned char *addr, u16 vid, u16 nlh_flags);
|
||||
int br_fdb_dump(struct sk_buff *skb, struct netlink_callback *cb,
|
||||
struct net_device *dev, struct net_device *fdev, int *idx);
|
||||
int br_fdb_get(struct sk_buff *skb, struct nlattr *tb[], struct net_device *dev,
|
||||
const unsigned char *addr, u16 vid, u32 portid, u32 seq,
|
||||
struct netlink_ext_ack *extack);
|
||||
int br_fdb_sync_static(struct net_bridge *br, struct net_bridge_port *p);
|
||||
void br_fdb_unsync_static(struct net_bridge *br, struct net_bridge_port *p);
|
||||
int br_fdb_external_learn_add(struct net_bridge *br, struct net_bridge_port *p,
|
||||
|
|
Загрузка…
Ссылка в новой задаче