[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <cdaeb1cd-a8f5-3bf4-6384-03d934212b29@cumulusnetworks.com>
Date: Fri, 14 Dec 2018 20:24:40 +0200
From: Nikolay Aleksandrov <nikolay@...ulusnetworks.com>
To: Roopa Prabhu <roopa@...ulusnetworks.com>, davem@...emloft.net
Cc: netdev@...r.kernel.org, stephen@...workplumber.org,
dsa@...ulusnetworks.com
Subject: Re: [PATCH net-next 2/4] bridge: support for ndo_fdb_get
On 14/12/2018 19:43, Roopa Prabhu wrote:
> From: Roopa Prabhu <roopa@...ulusnetworks.com>
>
> This patch implements ndo_fdb_get for the bridge
> fdb.
>
> Signed-off-by: Roopa Prabhu <roopa@...ulusnetworks.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 <nikolay@...ulusnetworks.com>
Powered by blists - more mailing lists