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>

Reply via email to