On 14/12/2018 19:43, Roopa Prabhu wrote: > From: Roopa Prabhu <ro...@cumulusnetworks.com> > > This patch implements ndo_fdb_get for the bridge > fdb. > > Signed-off-by: Roopa Prabhu <ro...@cumulusnetworks.com> > --- > net/bridge/br_device.c | 1 + > net/bridge/br_fdb.c | 26 ++++++++++++++++++++++++++ > net/bridge/br_private.h | 3 +++ > 3 files changed, 30 insertions(+) > > diff --git a/net/bridge/br_device.c b/net/bridge/br_device.c > index 9f41a5d..013323b 100644 > --- a/net/bridge/br_device.c > +++ b/net/bridge/br_device.c > @@ -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, > diff --git a/net/bridge/br_fdb.c b/net/bridge/br_fdb.c > index 38b1d0d..fafff6c 100644 > --- a/net/bridge/br_fdb.c > +++ b/net/bridge/br_fdb.c > @@ -773,6 +773,32 @@ int br_fdb_dump(struct sk_buff *skb, > 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, > diff --git a/net/bridge/br_private.h b/net/bridge/br_private.h > index ff3dfb2..d240b3e 100644 > --- a/net/bridge/br_private.h > +++ b/net/bridge/br_private.h > @@ -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, >
Acked-by: Nikolay Aleksandrov <niko...@cumulusnetworks.com>