Skip to content

Commit 4767456

Browse files
roopa-prabhudavem330
authored andcommitted
bridge: support for ndo_fdb_get
This patch implements ndo_fdb_get for the bridge fdb. Signed-off-by: Roopa Prabhu <[email protected]> Acked-by: Nikolay Aleksandrov <[email protected]> Reviewed-by: David Ahern <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 5b2f94b commit 4767456

File tree

3 files changed

+30
-0
lines changed

3 files changed

+30
-0
lines changed

net/bridge/br_device.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -403,6 +403,7 @@ static const struct net_device_ops br_netdev_ops = {
403403
.ndo_fdb_add = br_fdb_add,
404404
.ndo_fdb_del = br_fdb_delete,
405405
.ndo_fdb_dump = br_fdb_dump,
406+
.ndo_fdb_get = br_fdb_get,
406407
.ndo_bridge_getlink = br_getlink,
407408
.ndo_bridge_setlink = br_setlink,
408409
.ndo_bridge_dellink = br_dellink,

net/bridge/br_fdb.c

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -773,6 +773,32 @@ int br_fdb_dump(struct sk_buff *skb,
773773
return err;
774774
}
775775

776+
int br_fdb_get(struct sk_buff *skb,
777+
struct nlattr *tb[],
778+
struct net_device *dev,
779+
const unsigned char *addr,
780+
u16 vid, u32 portid, u32 seq,
781+
struct netlink_ext_ack *extack)
782+
{
783+
struct net_bridge *br = netdev_priv(dev);
784+
struct net_bridge_fdb_entry *f;
785+
int err = 0;
786+
787+
rcu_read_lock();
788+
f = br_fdb_find_rcu(br, addr, vid);
789+
if (!f) {
790+
NL_SET_ERR_MSG(extack, "Fdb entry not found");
791+
err = -ENOENT;
792+
goto errout;
793+
}
794+
795+
err = fdb_fill_info(skb, br, f, portid, seq,
796+
RTM_NEWNEIGH, 0);
797+
errout:
798+
rcu_read_unlock();
799+
return err;
800+
}
801+
776802
/* Update (create or replace) forwarding database entry */
777803
static int fdb_add_entry(struct net_bridge *br, struct net_bridge_port *source,
778804
const u8 *addr, u16 state, u16 flags, u16 vid,

net/bridge/br_private.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -575,6 +575,9 @@ int br_fdb_add(struct ndmsg *nlh, struct nlattr *tb[], struct net_device *dev,
575575
const unsigned char *addr, u16 vid, u16 nlh_flags);
576576
int br_fdb_dump(struct sk_buff *skb, struct netlink_callback *cb,
577577
struct net_device *dev, struct net_device *fdev, int *idx);
578+
int br_fdb_get(struct sk_buff *skb, struct nlattr *tb[], struct net_device *dev,
579+
const unsigned char *addr, u16 vid, u32 portid, u32 seq,
580+
struct netlink_ext_ack *extack);
578581
int br_fdb_sync_static(struct net_bridge *br, struct net_bridge_port *p);
579582
void br_fdb_unsync_static(struct net_bridge *br, struct net_bridge_port *p);
580583
int br_fdb_external_learn_add(struct net_bridge *br, struct net_bridge_port *p,

0 commit comments

Comments
 (0)