[dpdk-dev,v2] kni: Add set_rx_mode callback to handle multicast groups

Message ID 20150602092155.588bbb2e@miho (mailing list archive)
State Accepted, archived
Headers

Commit Message

Simon Kagstrom June 2, 2015, 7:21 a.m. UTC
  We did some (very basic) tests with IGMP, which involves adding
multicast addresses to ETH interfaces. This is done via the ip tool,
an example can be found on e.g.,

  http://superuser.com/questions/324824/linux-built-in-or-open-source-program-to-join-multicast-group

and this will fail on KNI interfaces because of an unimplemented ioctl
SIOCADDMULTI. The patch simply adds an empty callback for set_rx_mode
(typically used for setting up hardware) so that the ioctl succeeds.
This is the same thing as the Linux tap interface does.

Signed-off-by: Simon Kagstrom <simon.kagstrom@netinsight.net>
Signed-off-by: Johan Faltstrom <johan.faltstrom@netinsight.net>
---
ChangeLog:

v2: Improve motivation for the patch

 lib/librte_eal/linuxapp/kni/kni_net.c | 6 ++++++
 1 file changed, 6 insertions(+)
  

Comments

Zhang, Helin June 2, 2015, 7:31 a.m. UTC | #1
> -----Original Message-----
> From: Simon Kagstrom [mailto:simon.kagstrom@netinsight.net]
> Sent: Tuesday, June 2, 2015 3:22 PM
> To: dev@dpdk.org; Zhang, Helin; stephen@networkplumber.org
> Subject: [PATCH v2] kni: Add set_rx_mode callback to handle multicast groups
> 
> We did some (very basic) tests with IGMP, which involves adding multicast
> addresses to ETH interfaces. This is done via the ip tool, an example can be found
> on e.g.,
> 
> 
> http://superuser.com/questions/324824/linux-built-in-or-open-source-program-
> to-join-multicast-group
> 
> and this will fail on KNI interfaces because of an unimplemented ioctl
> SIOCADDMULTI. The patch simply adds an empty callback for set_rx_mode
> (typically used for setting up hardware) so that the ioctl succeeds.
> This is the same thing as the Linux tap interface does.
> 
> Signed-off-by: Simon Kagstrom <simon.kagstrom@netinsight.net>
> Signed-off-by: Johan Faltstrom <johan.faltstrom@netinsight.net>
Acked-by: Helin Zhang <helin.zhang@intel.com>

> ---
> ChangeLog:
> 
> v2: Improve motivation for the patch
> 
>  lib/librte_eal/linuxapp/kni/kni_net.c | 6 ++++++
>  1 file changed, 6 insertions(+)
> 
> diff --git a/lib/librte_eal/linuxapp/kni/kni_net.c
> b/lib/librte_eal/linuxapp/kni/kni_net.c index dd95db5..cf93c4b 100644
> --- a/lib/librte_eal/linuxapp/kni/kni_net.c
> +++ b/lib/librte_eal/linuxapp/kni/kni_net.c
> @@ -495,6 +495,11 @@ kni_net_ioctl(struct net_device *dev, struct ifreq *rq, int
> cmd) return 0;  }
> 
> +static void
> +kni_net_set_rx_mode(struct net_device *dev) { }
> +
>  static int
>  kni_net_change_mtu(struct net_device *dev, int new_mtu)  { @@ -645,6
> +650,7 @@ static const struct net_device_ops kni_net_netdev_ops =
> { .ndo_start_xmit = kni_net_tx,
>  	.ndo_change_mtu = kni_net_change_mtu,
>  	.ndo_do_ioctl = kni_net_ioctl,
> +	.ndo_set_rx_mode = kni_net_set_rx_mode,
>  	.ndo_get_stats = kni_net_stats,
>  	.ndo_tx_timeout = kni_net_tx_timeout,
>  	.ndo_set_mac_address = kni_net_set_mac,
> --
> 1.9.1
  
Thomas Monjalon June 16, 2015, 3:31 p.m. UTC | #2
> > We did some (very basic) tests with IGMP, which involves adding multicast
> > addresses to ETH interfaces. This is done via the ip tool, an example can be found
> > on e.g.,
> > 
> > http://superuser.com/questions/324824/linux-built-in-or-open-source-program-
> > to-join-multicast-group
> > 
> > and this will fail on KNI interfaces because of an unimplemented ioctl
> > SIOCADDMULTI. The patch simply adds an empty callback for set_rx_mode
> > (typically used for setting up hardware) so that the ioctl succeeds.
> > This is the same thing as the Linux tap interface does.
> > 
> > Signed-off-by: Simon Kagstrom <simon.kagstrom@netinsight.net>
> > Signed-off-by: Johan Faltstrom <johan.faltstrom@netinsight.net>
> Acked-by: Helin Zhang <helin.zhang@intel.com>

Applied, thanks
  

Patch

diff --git a/lib/librte_eal/linuxapp/kni/kni_net.c
b/lib/librte_eal/linuxapp/kni/kni_net.c index dd95db5..cf93c4b 100644
--- a/lib/librte_eal/linuxapp/kni/kni_net.c
+++ b/lib/librte_eal/linuxapp/kni/kni_net.c
@@ -495,6 +495,11 @@  kni_net_ioctl(struct net_device *dev, struct ifreq
*rq, int cmd) return 0;
 }
 
+static void
+kni_net_set_rx_mode(struct net_device *dev)
+{
+}
+
 static int
 kni_net_change_mtu(struct net_device *dev, int new_mtu)
 {
@@ -645,6 +650,7 @@  static const struct net_device_ops
kni_net_netdev_ops = { .ndo_start_xmit = kni_net_tx,
 	.ndo_change_mtu = kni_net_change_mtu,
 	.ndo_do_ioctl = kni_net_ioctl,
+	.ndo_set_rx_mode = kni_net_set_rx_mode,
 	.ndo_get_stats = kni_net_stats,
 	.ndo_tx_timeout = kni_net_tx_timeout,
 	.ndo_set_mac_address = kni_net_set_mac,