netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [RFC PATCH 0/3] Provide default fdb operation to allow mac filter
@ 2013-02-27 17:46 Vlad Yasevich
  2013-02-27 17:46 ` [RFC PATCH 1/3] net: generic fdb support for drivers without ndo_fdb_<op> Vlad Yasevich
                   ` (2 more replies)
  0 siblings, 3 replies; 8+ messages in thread
From: Vlad Yasevich @ 2013-02-27 17:46 UTC (permalink / raw)
  To: netdev; +Cc: john.r.fastabend, davem, Vlad Yasevich

This is a short series that now allows mac filter programming on any
card that support IFF_UNICAST_FLT by using the existing FDB interface.

Some existing drivers that had FDB functionality usually supported
it only in SR-IOV mode.  Since that's not always enabled, and
we want to take advantage of IFF_UNICAST_FLT support, these drivers
have been converted to call the default handler when not in SRIOV mode.

John Fastabend (1):
  net: generic fdb support for drivers without ndo_fdb_<op>

Vlad Yasevich (2):
  ixgbe: Use default fdb handlers when not in VF mode.
  mlx4: Use default fdb handlers when not multifunction.

 drivers/net/ethernet/intel/ixgbe/ixgbe_main.c  |   26 +++-----
 drivers/net/ethernet/mellanox/mlx4/en_netdev.c |   12 +---
 include/linux/rtnetlink.h                      |    9 +++
 net/core/rtnetlink.c                           |   81 ++++++++++++++++++++++--
 4 files changed, 98 insertions(+), 30 deletions(-)

-- 
1.7.7.6

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [RFC PATCH 1/3] net: generic fdb support for drivers without ndo_fdb_<op>
  2013-02-27 17:46 [RFC PATCH 0/3] Provide default fdb operation to allow mac filter Vlad Yasevich
@ 2013-02-27 17:46 ` Vlad Yasevich
  2013-02-27 17:46 ` [RFC PATCH 2/3] ixgbe: Use default fdb handlers when not in VF mode Vlad Yasevich
  2013-02-27 17:46 ` [RFC PATCH 3/3] mlx4: Use default fdb handlers when not multifunction Vlad Yasevich
  2 siblings, 0 replies; 8+ messages in thread
From: Vlad Yasevich @ 2013-02-27 17:46 UTC (permalink / raw)
  To: netdev; +Cc: john.r.fastabend, davem, Vlad Yasevich

If the driver does not support the ndo_op use the generic
handler for it. This should work in the majority of cases.
Eventually the fdb_dflt_add call gets translated into a
__dev_set_rx_mode() call which should handle hardware
support for filtering via the IFF_UNICAST_FLT flag.

Namely IFF_UNICAST_FLT indicates if the hardware can do
unicast address filtering. If no support is available
the device is put into promisc mode.

CC: John Fastabend <john.r.fastabend@intel.com>
Signed-off-by: Vlad Yasevich <vyasevic@redhat.com>
---
 include/linux/rtnetlink.h |    9 +++++
 net/core/rtnetlink.c      |   81 +++++++++++++++++++++++++++++++++++++++++---
 2 files changed, 84 insertions(+), 6 deletions(-)

diff --git a/include/linux/rtnetlink.h b/include/linux/rtnetlink.h
index 489dd7bb..55d33a3 100644
--- a/include/linux/rtnetlink.h
+++ b/include/linux/rtnetlink.h
@@ -69,6 +69,15 @@ extern int ndo_dflt_fdb_dump(struct sk_buff *skb,
 			     struct netlink_callback *cb,
 			     struct net_device *dev,
 			     int idx);
+extern int ndo_dflt_fdb_add(struct sk_buff *skb,
+			    struct nlattr *tb[],
+			    struct net_device *dev,
+			    const unsigned char *addr,
+			    u16 flags);
+extern int ndo_dflt_fdb_del(struct sk_buff *skb,
+			    struct nlattr *tb[],
+			    struct net_device *dev,
+			    const unsigned char *addr);
 
 extern int ndo_dflt_bridge_getlink(struct sk_buff *skb, u32 pid, u32 seq,
 				   struct net_device *dev, u16 mode);
diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
index d8aa20f..56b0038 100644
--- a/net/core/rtnetlink.c
+++ b/net/core/rtnetlink.c
@@ -2049,6 +2049,38 @@ errout:
 	rtnl_set_sk_err(net, RTNLGRP_NEIGH, err);
 }
 
+/**
+ * ndo_dflt_fdb_add - default netdevice operation to add an FDB entry
+ */
+int ndo_dflt_fdb_add(struct ndmsg *ndm,
+		     struct nlattr *tb[],
+		     struct net_device *dev,
+		     const unsigned char *addr,
+		     u16 flags)
+{
+	int err = -EINVAL;
+
+	/* If aging addresses are supported device will need to
+	 * implement its own handler for this.
+	 */
+	if (ndm->ndm_state && !(ndm->ndm_state & NUD_PERMANENT)) {
+		pr_info("%s: FDB only supports static addresses\n", dev->name);
+		return err;
+	}
+
+	if (is_unicast_ether_addr(addr) || is_link_local_ether_addr(addr))
+		err = dev_uc_add_excl(dev, addr);
+	else if (is_multicast_ether_addr(addr))
+		err = dev_mc_add_excl(dev, addr);
+
+	/* Only return duplicate errors if NLM_F_EXCL is set */
+	if (err == -EEXIST && !(flags & NLM_F_EXCL))
+		err = 0;
+
+	return err;
+}
+EXPORT_SYMBOL(ndo_dflt_fdb_add);
+
 static int rtnl_fdb_add(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg)
 {
 	struct net *net = sock_net(skb->sk);
@@ -2101,10 +2133,13 @@ static int rtnl_fdb_add(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg)
 	}
 
 	/* Embedded bridge, macvlan, and any other device support */
-	if ((ndm->ndm_flags & NTF_SELF) && dev->netdev_ops->ndo_fdb_add) {
-		err = dev->netdev_ops->ndo_fdb_add(ndm, tb,
-						   dev, addr,
-						   nlh->nlmsg_flags);
+	if ((ndm->ndm_flags & NTF_SELF)) {
+		if (dev->netdev_ops->ndo_fdb_add)
+			err = dev->netdev_ops->ndo_fdb_add(ndm, tb, dev, addr,
+							   nlh->nlmsg_flags);
+		else
+			err = ndo_dflt_fdb_add(ndm, tb, dev, addr,
+					       nlh->nlmsg_flags);
 
 		if (!err) {
 			rtnl_fdb_notify(dev, addr, RTM_NEWNEIGH);
@@ -2115,6 +2150,35 @@ out:
 	return err;
 }
 
+/**
+ * ndo_dflt_fdb_del - default netdevice operation to delete an FDB entry
+ */
+int ndo_dflt_fdb_del(struct ndmsg *ndm,
+		     struct nlattr *tb[],
+		     struct net_device *dev,
+		     const unsigned char *addr)
+{
+	int err = -EOPNOTSUPP;
+
+	/* If aging addresses are supported device will need to
+	 * implement its own handler for this.
+	 */
+	if (ndm->ndm_state & NUD_PERMANENT) {
+		pr_info("%s: FDB only supports static addresses\n", dev->name);
+		return -EINVAL;
+	}
+
+	if (is_unicast_ether_addr(addr) || is_link_local_ether_addr(addr))
+		err = dev_uc_del(dev, addr);
+	else if (is_multicast_ether_addr(addr))
+		err = dev_mc_del(dev, addr);
+	else
+		err = -EINVAL;
+
+	return err;
+}
+EXPORT_SYMBOL(ndo_dflt_fdb_del);
+
 static int rtnl_fdb_del(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg)
 {
 	struct net *net = sock_net(skb->sk);
@@ -2172,8 +2236,11 @@ static int rtnl_fdb_del(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg)
 	}
 
 	/* Embedded bridge, macvlan, and any other device support */
-	if ((ndm->ndm_flags & NTF_SELF) && dev->netdev_ops->ndo_fdb_del) {
-		err = dev->netdev_ops->ndo_fdb_del(ndm, tb, dev, addr);
+	if (ndm->ndm_flags & NTF_SELF) {
+		if (dev->netdev_ops->ndo_fdb_del)
+			err = dev->netdev_ops->ndo_fdb_del(ndm, tb, dev, addr);
+		else
+			err = ndo_dflt_fdb_del(ndm, tb, dev, addr);
 
 		if (!err) {
 			rtnl_fdb_notify(dev, addr, RTM_DELNEIGH);
@@ -2258,6 +2325,8 @@ static int rtnl_fdb_dump(struct sk_buff *skb, struct netlink_callback *cb)
 
 		if (dev->netdev_ops->ndo_fdb_dump)
 			idx = dev->netdev_ops->ndo_fdb_dump(skb, cb, dev, idx);
+		else
+			ndo_dflt_fdb_dump(skb, cb, dev, idx);
 	}
 	rcu_read_unlock();
 
-- 
1.7.7.6

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [RFC PATCH 2/3] ixgbe: Use default fdb handlers when not in VF mode.
  2013-02-27 17:46 [RFC PATCH 0/3] Provide default fdb operation to allow mac filter Vlad Yasevich
  2013-02-27 17:46 ` [RFC PATCH 1/3] net: generic fdb support for drivers without ndo_fdb_<op> Vlad Yasevich
@ 2013-02-27 17:46 ` Vlad Yasevich
  2013-02-28  4:26   ` John Fastabend
  2013-02-27 17:46 ` [RFC PATCH 3/3] mlx4: Use default fdb handlers when not multifunction Vlad Yasevich
  2 siblings, 1 reply; 8+ messages in thread
From: Vlad Yasevich @ 2013-02-27 17:46 UTC (permalink / raw)
  To: netdev; +Cc: john.r.fastabend, davem, Vlad Yasevich

Allow the use of ndo_dflt_fdb_<add|del|dump> when the
adapter does not have VF configured.  This allows for
IFF_UNICAST_FLT support and allows VF handling to potentially
do something different.

CC: John Fastabend <john.r.fastabend@intel.com>
Signed-off-by: Vlad Yasevich <vyasevic@redhat.com>
---
 drivers/net/ethernet/intel/ixgbe/ixgbe_main.c |   26 ++++++++++--------------
 1 files changed, 11 insertions(+), 15 deletions(-)

diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
index 68478d6..0ae2525 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
@@ -7007,7 +7007,7 @@ static int ixgbe_ndo_fdb_add(struct ndmsg *ndm, struct nlattr *tb[],
 	int err;
 
 	if (!(adapter->flags & IXGBE_FLAG_SRIOV_ENABLED))
-		return -EOPNOTSUPP;
+		return ndo_dflt_fdb_add(ndm, tb, dev, addr, flags);
 
 	/* Hardware does not support aging addresses so if a
 	 * ndm_state is given only allow permanent addresses
@@ -7045,20 +7045,21 @@ static int ixgbe_ndo_fdb_del(struct ndmsg *ndm, struct nlattr *tb[],
 	struct ixgbe_adapter *adapter = netdev_priv(dev);
 	int err = -EOPNOTSUPP;
 
+	if (!(adapter->flags & IXGBE_FLAG_SRIOV_ENABLED))
+		return ndo_dflt_fdb_del(ndm, tb, dev, addr);
+
 	if (ndm->ndm_state & NUD_PERMANENT) {
 		pr_info("%s: FDB only supports static addresses\n",
 			ixgbe_driver_name);
 		return -EINVAL;
 	}
 
-	if (adapter->flags & IXGBE_FLAG_SRIOV_ENABLED) {
-		if (is_unicast_ether_addr(addr))
-			err = dev_uc_del(dev, addr);
-		else if (is_multicast_ether_addr(addr))
-			err = dev_mc_del(dev, addr);
-		else
-			err = -EINVAL;
-	}
+	if (is_unicast_ether_addr(addr))
+		err = dev_uc_del(dev, addr);
+	else if (is_multicast_ether_addr(addr))
+		err = dev_mc_del(dev, addr);
+	else
+		err = -EINVAL;
 
 	return err;
 }
@@ -7068,12 +7069,7 @@ static int ixgbe_ndo_fdb_dump(struct sk_buff *skb,
 			      struct net_device *dev,
 			      int idx)
 {
-	struct ixgbe_adapter *adapter = netdev_priv(dev);
-
-	if (adapter->flags & IXGBE_FLAG_SRIOV_ENABLED)
-		idx = ndo_dflt_fdb_dump(skb, cb, dev, idx);
-
-	return idx;
+	return ndo_dflt_fdb_dump(skb, cb, dev, idx);
 }
 
 static int ixgbe_ndo_bridge_setlink(struct net_device *dev,
-- 
1.7.7.6

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [RFC PATCH 3/3] mlx4: Use default fdb handlers when not multifunction.
  2013-02-27 17:46 [RFC PATCH 0/3] Provide default fdb operation to allow mac filter Vlad Yasevich
  2013-02-27 17:46 ` [RFC PATCH 1/3] net: generic fdb support for drivers without ndo_fdb_<op> Vlad Yasevich
  2013-02-27 17:46 ` [RFC PATCH 2/3] ixgbe: Use default fdb handlers when not in VF mode Vlad Yasevich
@ 2013-02-27 17:46 ` Vlad Yasevich
  2013-02-28  4:27   ` John Fastabend
  2 siblings, 1 reply; 8+ messages in thread
From: Vlad Yasevich @ 2013-02-27 17:46 UTC (permalink / raw)
  To: netdev; +Cc: john.r.fastabend, davem, Vlad Yasevich, Amir Vadai

Allow the use of ndo_dflt_fdb_<add|del|dump> when the
adapter is not configured with virtual functins (!mlx4_is_mfunc())
This allows proper IFF_UNICAST_FLT support and allows for
additional handling by the driver if needed.

CC: Amir Vadai <amirv@mellanox.com>
Signed-off-by: Vlad Yasevich <vyasevic@redhat.com>
---
 drivers/net/ethernet/mellanox/mlx4/en_netdev.c |   12 +++---------
 1 files changed, 3 insertions(+), 9 deletions(-)

diff --git a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
index 5385474..5732025 100644
--- a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
+++ b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
@@ -1934,7 +1934,7 @@ static int mlx4_en_fdb_add(struct ndmsg *ndm, struct nlattr *tb[],
 	int err;
 
 	if (!mlx4_is_mfunc(mdev))
-		return -EOPNOTSUPP;
+		return ndo_dflt_fdb_add(ndm, tb, dev, addr, flags);
 
 	/* Hardware does not support aging addresses, allow only
 	 * permanent addresses if ndm_state is given
@@ -1968,7 +1968,7 @@ static int mlx4_en_fdb_del(struct ndmsg *ndm,
 	int err;
 
 	if (!mlx4_is_mfunc(mdev))
-		return -EOPNOTSUPP;
+		return ndo_dflt_fdb_del(ndm, tb, dev, addr);
 
 	if (ndm->ndm_state && !(ndm->ndm_state & NUD_PERMANENT)) {
 		en_info(priv, "Del FDB only supports static addresses\n");
@@ -1989,13 +1989,7 @@ static int mlx4_en_fdb_dump(struct sk_buff *skb,
 			    struct netlink_callback *cb,
 			    struct net_device *dev, int idx)
 {
-	struct mlx4_en_priv *priv = netdev_priv(dev);
-	struct mlx4_dev *mdev = priv->mdev->dev;
-
-	if (mlx4_is_mfunc(mdev))
-		idx = ndo_dflt_fdb_dump(skb, cb, dev, idx);
-
-	return idx;
+	return ndo_dflt_fdb_dump(skb, cb, dev, idx);
 }
 
 static const struct net_device_ops mlx4_netdev_ops = {
-- 
1.7.7.6

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [RFC PATCH 2/3] ixgbe: Use default fdb handlers when not in VF mode.
  2013-02-27 17:46 ` [RFC PATCH 2/3] ixgbe: Use default fdb handlers when not in VF mode Vlad Yasevich
@ 2013-02-28  4:26   ` John Fastabend
  2013-02-28 14:46     ` Vlad Yasevich
  0 siblings, 1 reply; 8+ messages in thread
From: John Fastabend @ 2013-02-28  4:26 UTC (permalink / raw)
  To: Vlad Yasevich; +Cc: netdev, davem, Rose, Gregory V

On 2/27/2013 9:46 AM, Vlad Yasevich wrote:
> Allow the use of ndo_dflt_fdb_<add|del|dump> when the
> adapter does not have VF configured.  This allows for
> IFF_UNICAST_FLT support and allows VF handling to potentially
> do something different.
>
> CC: John Fastabend <john.r.fastabend@intel.com>
> Signed-off-by: Vlad Yasevich <vyasevic@redhat.com>
> ---
>   drivers/net/ethernet/intel/ixgbe/ixgbe_main.c |   26 ++++++++++--------------
>   1 files changed, 11 insertions(+), 15 deletions(-)
>
> diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
> index 68478d6..0ae2525 100644
> --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
> +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
> @@ -7007,7 +7007,7 @@ static int ixgbe_ndo_fdb_add(struct ndmsg *ndm, struct nlattr *tb[],

With the first patch we can just remove this routine altogether and
let the dflt handler do its work.

CC'd Greg in case I miss something.

>   	int err;
>
>   	if (!(adapter->flags & IXGBE_FLAG_SRIOV_ENABLED))
> -		return -EOPNOTSUPP;
> +		return ndo_dflt_fdb_add(ndm, tb, dev, addr, flags);
>
>   	/* Hardware does not support aging addresses so if a
>   	 * ndm_state is given only allow permanent addresses
> @@ -7045,20 +7045,21 @@ static int ixgbe_ndo_fdb_del(struct ndmsg *ndm, struct nlattr *tb[],

same here just remove it and use the dflt handler.

>   	struct ixgbe_adapter *adapter = netdev_priv(dev);
>   	int err = -EOPNOTSUPP;
>
> +	if (!(adapter->flags & IXGBE_FLAG_SRIOV_ENABLED))
> +		return ndo_dflt_fdb_del(ndm, tb, dev, addr);
> +
>   	if (ndm->ndm_state & NUD_PERMANENT) {
>   		pr_info("%s: FDB only supports static addresses\n",
>   			ixgbe_driver_name);
>   		return -EINVAL;
>   	}
>
> -	if (adapter->flags & IXGBE_FLAG_SRIOV_ENABLED) {
> -		if (is_unicast_ether_addr(addr))
> -			err = dev_uc_del(dev, addr);
> -		else if (is_multicast_ether_addr(addr))
> -			err = dev_mc_del(dev, addr);
> -		else
> -			err = -EINVAL;
> -	}
> +	if (is_unicast_ether_addr(addr))
> +		err = dev_uc_del(dev, addr);
> +	else if (is_multicast_ether_addr(addr))
> +		err = dev_mc_del(dev, addr);
> +	else
> +		err = -EINVAL;
>
>   	return err;
>   }
> @@ -7068,12 +7069,7 @@ static int ixgbe_ndo_fdb_dump(struct sk_buff *skb,
>   			      struct net_device *dev,
>   			      int idx)
>   {

This is the same as not defining the op at all right? Just
remove it.

> -	struct ixgbe_adapter *adapter = netdev_priv(dev);
> -
> -	if (adapter->flags & IXGBE_FLAG_SRIOV_ENABLED)
> -		idx = ndo_dflt_fdb_dump(skb, cb, dev, idx);
> -
> -	return idx;
> +	return ndo_dflt_fdb_dump(skb, cb, dev, idx);
>   }
>
>   static int ixgbe_ndo_bridge_setlink(struct net_device *dev,
>

Then we get a patch with all '-' which is sort of nice.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [RFC PATCH 3/3] mlx4: Use default fdb handlers when not multifunction.
  2013-02-27 17:46 ` [RFC PATCH 3/3] mlx4: Use default fdb handlers when not multifunction Vlad Yasevich
@ 2013-02-28  4:27   ` John Fastabend
       [not found]     ` <CAJZOPZLcphuZEXR+jhT35=qtOq9bfxWzWEokN6UrMorciCvvsA@mail.gmail.com>
  0 siblings, 1 reply; 8+ messages in thread
From: John Fastabend @ 2013-02-28  4:27 UTC (permalink / raw)
  To: Vlad Yasevich, Amir Vadai; +Cc: netdev, davem

On 2/27/2013 9:46 AM, Vlad Yasevich wrote:
> Allow the use of ndo_dflt_fdb_<add|del|dump> when the
> adapter is not configured with virtual functins (!mlx4_is_mfunc())
> This allows proper IFF_UNICAST_FLT support and allows for
> additional handling by the driver if needed.
>
> CC: Amir Vadai <amirv@mellanox.com>
> Signed-off-by: Vlad Yasevich <vyasevic@redhat.com>
> ---
>   drivers/net/ethernet/mellanox/mlx4/en_netdev.c |   12 +++---------
>   1 files changed, 3 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
> index 5385474..5732025 100644
> --- a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
> +++ b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
> @@ -1934,7 +1934,7 @@ static int mlx4_en_fdb_add(struct ndmsg *ndm, struct nlattr *tb[],

Amir are the default ops good enough here?

>   	int err;
>
>   	if (!mlx4_is_mfunc(mdev))
> -		return -EOPNOTSUPP;
> +		return ndo_dflt_fdb_add(ndm, tb, dev, addr, flags);
>
>   	/* Hardware does not support aging addresses, allow only
>   	 * permanent addresses if ndm_state is given
> @@ -1968,7 +1968,7 @@ static int mlx4_en_fdb_del(struct ndmsg *ndm,
>   	int err;
>
>   	if (!mlx4_is_mfunc(mdev))
> -		return -EOPNOTSUPP;
> +		return ndo_dflt_fdb_del(ndm, tb, dev, addr);
>
>   	if (ndm->ndm_state && !(ndm->ndm_state & NUD_PERMANENT)) {
>   		en_info(priv, "Del FDB only supports static addresses\n");
> @@ -1989,13 +1989,7 @@ static int mlx4_en_fdb_dump(struct sk_buff *skb,
>   			    struct netlink_callback *cb,
>   			    struct net_device *dev, int idx)
>   {

same comment here. Don't define this op and we get the same behavior?



.John

^ permalink raw reply	[flat|nested] 8+ messages in thread

* RE: [RFC PATCH 3/3] mlx4: Use default fdb handlers when not multifunction.
       [not found]     ` <CAJZOPZLcphuZEXR+jhT35=qtOq9bfxWzWEokN6UrMorciCvvsA@mail.gmail.com>
@ 2013-02-28 12:32       ` Yan Burman
  0 siblings, 0 replies; 8+ messages in thread
From: Yan Burman @ 2013-02-28 12:32 UTC (permalink / raw)
  To: john.r.fastabend@intel.com, vyasevic@redhat.com
  Cc: Or Gerlitz, Amir Vadai, netdev@vger.kernel.org,
	davem@davemloft.net



> From: John Fastabend <john.r.fastabend@intel.com>
> Date: Thu, Feb 28, 2013 at 6:27 AM
> Subject: Re: [RFC PATCH 3/3] mlx4: Use default fdb handlers when not
> multifunction.
> To: Vlad Yasevich <vyasevic@redhat.com>, Amir Vadai <amirv@mellanox.com>
> Cc: netdev@vger.kernel.org, davem@davemloft.net
> 
> 
> On 2/27/2013 9:46 AM, Vlad Yasevich wrote:
> >
> > Allow the use of ndo_dflt_fdb_<add|del|dump> when the adapter is not
> > configured with virtual functins (!mlx4_is_mfunc()) This allows proper
> > IFF_UNICAST_FLT support and allows for additional handling by the
> > driver if needed.
> >
> > CC: Amir Vadai <amirv@mellanox.com>
> > Signed-off-by: Vlad Yasevich <vyasevic@redhat.com>
> > ---
> >   drivers/net/ethernet/mellanox/mlx4/en_netdev.c |   12 +++---------
> >   1 files changed, 3 insertions(+), 9 deletions(-)
> >
> > diff --git a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
> > b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
> > index 5385474..5732025 100644
> > --- a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
> > +++ b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
> > @@ -1934,7 +1934,7 @@ static int mlx4_en_fdb_add(struct ndmsg *ndm,
> > struct nlattr *tb[],
> 
> 
> Amir are the default ops good enough here?
> 

The default ops can be used instead of mlx4 fdb_add, fdb_delete, and fdb_dump.

Yan

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [RFC PATCH 2/3] ixgbe: Use default fdb handlers when not in VF mode.
  2013-02-28  4:26   ` John Fastabend
@ 2013-02-28 14:46     ` Vlad Yasevich
  0 siblings, 0 replies; 8+ messages in thread
From: Vlad Yasevich @ 2013-02-28 14:46 UTC (permalink / raw)
  To: John Fastabend; +Cc: netdev, davem, Rose, Gregory V

On 02/27/2013 11:26 PM, John Fastabend wrote:
> On 2/27/2013 9:46 AM, Vlad Yasevich wrote:
>> Allow the use of ndo_dflt_fdb_<add|del|dump> when the
>> adapter does not have VF configured.  This allows for
>> IFF_UNICAST_FLT support and allows VF handling to potentially
>> do something different.
>>
>> CC: John Fastabend <john.r.fastabend@intel.com>
>> Signed-off-by: Vlad Yasevich <vyasevic@redhat.com>
>> ---
>>   drivers/net/ethernet/intel/ixgbe/ixgbe_main.c |   26
>> ++++++++++--------------
>>   1 files changed, 11 insertions(+), 15 deletions(-)
>>
>> diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
>> b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
>> index 68478d6..0ae2525 100644
>> --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
>> +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
>> @@ -7007,7 +7007,7 @@ static int ixgbe_ndo_fdb_add(struct ndmsg *ndm,
>> struct nlattr *tb[],
>
> With the first patch we can just remove this routine altogether and
> let the dflt handler do its work.
>
> CC'd Greg in case I miss something.

OK.  I took the safe approach and kept the functions.  The only 
difference right now is that right now with VF configured, fdb_add
refuses to add more then IXGBE_MAX_PF_MACVLANS and thus never would
enter into promisc mode.   I am not sure if that how its supposed to
be have or not.  That's one of the reasons I kept this around.

-vlad

>
>>       int err;
>>
>>       if (!(adapter->flags & IXGBE_FLAG_SRIOV_ENABLED))
>> -        return -EOPNOTSUPP;
>> +        return ndo_dflt_fdb_add(ndm, tb, dev, addr, flags);
>>
>>       /* Hardware does not support aging addresses so if a
>>        * ndm_state is given only allow permanent addresses
>> @@ -7045,20 +7045,21 @@ static int ixgbe_ndo_fdb_del(struct ndmsg
>> *ndm, struct nlattr *tb[],
>
> same here just remove it and use the dflt handler.
>
>>       struct ixgbe_adapter *adapter = netdev_priv(dev);
>>       int err = -EOPNOTSUPP;
>>
>> +    if (!(adapter->flags & IXGBE_FLAG_SRIOV_ENABLED))
>> +        return ndo_dflt_fdb_del(ndm, tb, dev, addr);
>> +
>>       if (ndm->ndm_state & NUD_PERMANENT) {
>>           pr_info("%s: FDB only supports static addresses\n",
>>               ixgbe_driver_name);
>>           return -EINVAL;
>>       }
>>
>> -    if (adapter->flags & IXGBE_FLAG_SRIOV_ENABLED) {
>> -        if (is_unicast_ether_addr(addr))
>> -            err = dev_uc_del(dev, addr);
>> -        else if (is_multicast_ether_addr(addr))
>> -            err = dev_mc_del(dev, addr);
>> -        else
>> -            err = -EINVAL;
>> -    }
>> +    if (is_unicast_ether_addr(addr))
>> +        err = dev_uc_del(dev, addr);
>> +    else if (is_multicast_ether_addr(addr))
>> +        err = dev_mc_del(dev, addr);
>> +    else
>> +        err = -EINVAL;
>>
>>       return err;
>>   }
>> @@ -7068,12 +7069,7 @@ static int ixgbe_ndo_fdb_dump(struct sk_buff *skb,
>>                     struct net_device *dev,
>>                     int idx)
>>   {
>
> This is the same as not defining the op at all right? Just
> remove it.
>
>> -    struct ixgbe_adapter *adapter = netdev_priv(dev);
>> -
>> -    if (adapter->flags & IXGBE_FLAG_SRIOV_ENABLED)
>> -        idx = ndo_dflt_fdb_dump(skb, cb, dev, idx);
>> -
>> -    return idx;
>> +    return ndo_dflt_fdb_dump(skb, cb, dev, idx);
>>   }
>>
>>   static int ixgbe_ndo_bridge_setlink(struct net_device *dev,
>>
>
> Then we get a patch with all '-' which is sort of nice.
>

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2013-02-28 14:46 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-02-27 17:46 [RFC PATCH 0/3] Provide default fdb operation to allow mac filter Vlad Yasevich
2013-02-27 17:46 ` [RFC PATCH 1/3] net: generic fdb support for drivers without ndo_fdb_<op> Vlad Yasevich
2013-02-27 17:46 ` [RFC PATCH 2/3] ixgbe: Use default fdb handlers when not in VF mode Vlad Yasevich
2013-02-28  4:26   ` John Fastabend
2013-02-28 14:46     ` Vlad Yasevich
2013-02-27 17:46 ` [RFC PATCH 3/3] mlx4: Use default fdb handlers when not multifunction Vlad Yasevich
2013-02-28  4:27   ` John Fastabend
     [not found]     ` <CAJZOPZLcphuZEXR+jhT35=qtOq9bfxWzWEokN6UrMorciCvvsA@mail.gmail.com>
2013-02-28 12:32       ` Yan Burman

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).