Skip to contentSkip to conversation

kni: Add set_rx_mode callback to handle multicast groups

RFC PATCH In review Simon Kagstrom 4 participants 7 messages May 7, 2015 – Jun 2, 2015

lore
Share & tools
lore
#0 lore raw

RFC PATCH 1/1 kni: Add set_rx_mode callback to handle multicast groups

This is needed to add / remove interfaces in multicast groups via the ip tool.

The callback does nothing - the same as the kernel tun.c.

---
Marked RFC since I'm by no means an expert on this. We noticed this when playing with KNI and IGMP handling.

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

b/lib/librte_eal/linuxapp/kni/kni_net.c index dd95db5..cf93c4b 100644

lib/librte_eal/linuxapp/kni/kni_net.c +0 -0
@@ -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,

Signature · 1 line
1.9.1
#1 lore raw

Ping?

// Simon

Quoted 38 lines · Simon Kagstrom

This is needed to add / remove interfaces in multicast groups via the ip tool.

The callback does nothing - the same as the kernel tun.c.

---
Marked RFC since I'm by no means an expert on this. We noticed this when playing with KNI and IGMP handling.

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

b/lib/librte_eal/linuxapp/kni/kni_net.c index dd95db5..cf93c4b 100644

lib/librte_eal/linuxapp/kni/kni_net.c +6 -0
@@ -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,
#2 lore raw
In reply to Simon Kagstrom

Stephen, Helin, perhaps you have some comment about this patch?

// Simon

Quoted 38 lines · Simon Kagstrom

This is needed to add / remove interfaces in multicast groups via the ip tool.

The callback does nothing - the same as the kernel tun.c.

---
Marked RFC since I'm by no means an expert on this. We noticed this when playing with KNI and IGMP handling.

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

b/lib/librte_eal/linuxapp/kni/kni_net.c index dd95db5..cf93c4b 100644

lib/librte_eal/linuxapp/kni/kni_net.c +6 -0
@@ -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,
#4 lore raw
In reply to Simon Kagstrom
Quoted 8 lines

-----Original Message-----
From: dev [mailto:[email protected]] On Behalf Of Simon Kagstrom
Sent: Thursday, May 7, 2015 9:18 PM
To: [email protected]
Subject: [dpdk-dev] [PATCH / RFC] kni: Add set_rx_mode callback to handle multicast groups

This is needed to add / remove interfaces in multicast groups via the ip tool.

Could you help to explain with more details of why it is needed?

Thanks,
Helin

Quoted 33 lines

The callback does nothing - the same as the kernel tun.c.

---
Marked RFC since I'm by no means an expert on this. We noticed this when playing with KNI and IGMP handling.

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

b/lib/librte_eal/linuxapp/kni/kni_net.c index dd95db5..cf93c4b 100644

lib/librte_eal/linuxapp/kni/kni_net.c +5 -1
@@ -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

#5 lore raw
Quoted 9 lines · Helin
Quoted 8 lines

-----Original Message-----
From: dev [mailto:[email protected]] On Behalf Of Simon Kagstrom
Sent: Thursday, May 7, 2015 9:18 PM
To: [email protected]
Subject: [dpdk-dev] [PATCH / RFC] kni: Add set_rx_mode callback to handle multicast groups

This is needed to add / remove interfaces in multicast groups via the ip tool.

Could you help to explain with more details of why it is needed?

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 with the current code because of an unimplemented ioctl (as Stephen Hemminger said earlier). The patch simply adds an empty callback so that the ioctl succeeds, and this is the same thing as the Linux tap interface does (so I think it should be enough for KNI as well).

If you want, I can update the patch with a bit more description (something like the above).

// Simon

#6 lore raw
Quoted 25 lines

-----Original Message-----
From: Simon Kågström [mailto:[email protected]]
Sent: Tuesday, June 2, 2015 1:44 PM
To: Zhang, Helin; [email protected]
Subject: Re: [dpdk-dev] [PATCH / RFC] kni: Add set_rx_mode callback to handle multicast groups

Quoted 9 lines · Helin
Quoted 8 lines

-----Original Message-----
From: dev [mailto:[email protected]] On Behalf Of Simon Kagstrom
Sent: Thursday, May 7, 2015 9:18 PM
To: [email protected]
Subject: [dpdk-dev] [PATCH / RFC] kni: Add set_rx_mode callback to handle multicast groups

This is needed to add / remove interfaces in multicast groups via the ip tool.

Could you help to explain with more details of why it is needed?

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.,

Quoted 7 lines

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

and this will fail on KNI interfaces with the current code because of an unimplemented ioctl (as Stephen Hemminger said earlier). The patch simply adds an empty callback so that the ioctl succeeds, and this is the same thing as the Linux tap interface does (so I think it should be enough for KNI as well).

Yes, the root cause "null ioctl causes the failure" should be added in the commit log for future reference by others.
I am OK for the reason, please add the details to the commit logs.

Thanks,
Helin

Quoted 8 lines

If you want, I can update the patch with a bit more description (something like the above).

// Simon