[PATCH net-next] geneve: always fill CSUM6_RX configuration

Subsystems: networking drivers, the rest

STALE3372d

5 messages, 2 authors, 2017-05-22 · open the first message on its own page

[PATCH net-next] geneve: always fill CSUM6_RX configuration

From: Eric Garver <hidden>
Date: 2017-05-18 19:59:58

CSMU6_RX is relevant for collect_metadata as well. As such leave it
outside of the dev's IPv4/IPv6 checks.

Fixes: 9b4437a5b870 ("geneve: Unify LWT and netdev handling.")
Signed-off-by: Eric Garver <redacted>
---
 drivers/net/geneve.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/drivers/net/geneve.c b/drivers/net/geneve.c
index dec5d563ab19..f557d1dc3f9b 100644
--- a/drivers/net/geneve.c
+++ b/drivers/net/geneve.c
@@ -1311,13 +1311,13 @@ static int geneve_fill_info(struct sk_buff *skb, const struct net_device *dev)
 		if (nla_put_u8(skb, IFLA_GENEVE_UDP_ZERO_CSUM6_TX,
 			       !(info->key.tun_flags & TUNNEL_CSUM)))
 			goto nla_put_failure;
-
-		if (nla_put_u8(skb, IFLA_GENEVE_UDP_ZERO_CSUM6_RX,
-			       !geneve->use_udp6_rx_checksums))
-			goto nla_put_failure;
 #endif
 	}
 
+	if (nla_put_u8(skb, IFLA_GENEVE_UDP_ZERO_CSUM6_RX,
+		       !geneve->use_udp6_rx_checksums))
+		goto nla_put_failure;
+
 	if (nla_put_u8(skb, IFLA_GENEVE_TTL, info->key.ttl) ||
 	    nla_put_u8(skb, IFLA_GENEVE_TOS, info->key.tos) ||
 	    nla_put_be32(skb, IFLA_GENEVE_LABEL, info->key.label))
-- 
2.12.0

Re: [PATCH net-next] geneve: always fill CSUM6_RX configuration

From: Pravin Shelar <hidden>
Date: 2017-05-20 01:57:50

On Thu, May 18, 2017 at 12:59 PM, Eric Garver [off-list ref] wrote:
CSMU6_RX is relevant for collect_metadata as well. As such leave it
outside of the dev's IPv4/IPv6 checks.
Can you explain it bit? is this flag used with ipv4 tunnels?
quoted hunk
Fixes: 9b4437a5b870 ("geneve: Unify LWT and netdev handling.")
Signed-off-by: Eric Garver <redacted>
---
 drivers/net/geneve.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/drivers/net/geneve.c b/drivers/net/geneve.c
index dec5d563ab19..f557d1dc3f9b 100644
--- a/drivers/net/geneve.c
+++ b/drivers/net/geneve.c
@@ -1311,13 +1311,13 @@ static int geneve_fill_info(struct sk_buff *skb, const struct net_device *dev)
                if (nla_put_u8(skb, IFLA_GENEVE_UDP_ZERO_CSUM6_TX,
                               !(info->key.tun_flags & TUNNEL_CSUM)))
                        goto nla_put_failure;
-
-               if (nla_put_u8(skb, IFLA_GENEVE_UDP_ZERO_CSUM6_RX,
-                              !geneve->use_udp6_rx_checksums))
-                       goto nla_put_failure;
 #endif
        }

+       if (nla_put_u8(skb, IFLA_GENEVE_UDP_ZERO_CSUM6_RX,
+                      !geneve->use_udp6_rx_checksums))
+               goto nla_put_failure;
+
        if (nla_put_u8(skb, IFLA_GENEVE_TTL, info->key.ttl) ||
            nla_put_u8(skb, IFLA_GENEVE_TOS, info->key.tos) ||
            nla_put_be32(skb, IFLA_GENEVE_LABEL, info->key.label))
--
2.12.0

Re: [PATCH net-next] geneve: always fill CSUM6_RX configuration

From: Eric Garver <hidden>
Date: 2017-05-20 13:35:06

On Fri, May 19, 2017 at 06:57:46PM -0700, Pravin Shelar wrote:
On Thu, May 18, 2017 at 12:59 PM, Eric Garver [off-list ref] wrote:
quoted
CSMU6_RX is relevant for collect_metadata as well. As such leave it
outside of the dev's IPv4/IPv6 checks.
Can you explain it bit? is this flag used with ipv4 tunnels?
It's used with collect_metadata as both ipv4 and ipv6 sockets will be
created.

openvswitch recently gained support for creating tunnels with rtnetlink.
It sets COLLECT_METADATA and CSUM6_RX. After create, it does a get to
verify the device got created with all the requested configuration. The
verify was failing due to CSUM6_RX not being returned.

Since ip_tunnel_info_af() defaults to returning AF_INET, we fall into
the IPv4 case and CSUM6_RX is never returned. Other relevant areas that
call ip_tunnel_info_af() do so using the info from the skb, not the
geneve_dev.

I hope that made it clear. Thanks for taking a look.

Eric.
quoted
Fixes: 9b4437a5b870 ("geneve: Unify LWT and netdev handling.")
Signed-off-by: Eric Garver <redacted>
---
 drivers/net/geneve.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/drivers/net/geneve.c b/drivers/net/geneve.c
index dec5d563ab19..f557d1dc3f9b 100644
--- a/drivers/net/geneve.c
+++ b/drivers/net/geneve.c
@@ -1311,13 +1311,13 @@ static int geneve_fill_info(struct sk_buff *skb, const struct net_device *dev)
                if (nla_put_u8(skb, IFLA_GENEVE_UDP_ZERO_CSUM6_TX,
                               !(info->key.tun_flags & TUNNEL_CSUM)))
                        goto nla_put_failure;
-
-               if (nla_put_u8(skb, IFLA_GENEVE_UDP_ZERO_CSUM6_RX,
-                              !geneve->use_udp6_rx_checksums))
-                       goto nla_put_failure;
 #endif
        }

+       if (nla_put_u8(skb, IFLA_GENEVE_UDP_ZERO_CSUM6_RX,
+                      !geneve->use_udp6_rx_checksums))
+               goto nla_put_failure;
+
        if (nla_put_u8(skb, IFLA_GENEVE_TTL, info->key.ttl) ||
            nla_put_u8(skb, IFLA_GENEVE_TOS, info->key.tos) ||
            nla_put_be32(skb, IFLA_GENEVE_LABEL, info->key.label))
--
2.12.0

Re: [PATCH net-next] geneve: always fill CSUM6_RX configuration

From: Pravin Shelar <hidden>
Date: 2017-05-21 04:56:48

On Sat, May 20, 2017 at 6:35 AM, Eric Garver [off-list ref] wrote:
On Fri, May 19, 2017 at 06:57:46PM -0700, Pravin Shelar wrote:
quoted
On Thu, May 18, 2017 at 12:59 PM, Eric Garver [off-list ref] wrote:
quoted
CSMU6_RX is relevant for collect_metadata as well. As such leave it
outside of the dev's IPv4/IPv6 checks.
Can you explain it bit? is this flag used with ipv4 tunnels?
It's used with collect_metadata as both ipv4 and ipv6 sockets will be
created.

openvswitch recently gained support for creating tunnels with rtnetlink.
It sets COLLECT_METADATA and CSUM6_RX. After create, it does a get to
verify the device got created with all the requested configuration. The
verify was failing due to CSUM6_RX not being returned.

Since ip_tunnel_info_af() defaults to returning AF_INET, we fall into
the IPv4 case and CSUM6_RX is never returned. Other relevant areas that
call ip_tunnel_info_af() do so using the info from the skb, not the
geneve_dev.
ok.
I think ip_tunnel_info_af() check is not right. it does not work in
case of collect_metadata.
Better fix would be check for genene->sock4 and genene->sock6 and
build the netlink skb accordingly.

Re: [PATCH net-next] geneve: always fill CSUM6_RX configuration

From: Eric Garver <hidden>
Date: 2017-05-22 16:50:54

On Sat, May 20, 2017 at 09:56:44PM -0700, Pravin Shelar wrote:
On Sat, May 20, 2017 at 6:35 AM, Eric Garver [off-list ref] wrote:
quoted
On Fri, May 19, 2017 at 06:57:46PM -0700, Pravin Shelar wrote:
quoted
On Thu, May 18, 2017 at 12:59 PM, Eric Garver [off-list ref] wrote:
quoted
CSMU6_RX is relevant for collect_metadata as well. As such leave it
outside of the dev's IPv4/IPv6 checks.
Can you explain it bit? is this flag used with ipv4 tunnels?
It's used with collect_metadata as both ipv4 and ipv6 sockets will be
created.

openvswitch recently gained support for creating tunnels with rtnetlink.
It sets COLLECT_METADATA and CSUM6_RX. After create, it does a get to
verify the device got created with all the requested configuration. The
verify was failing due to CSUM6_RX not being returned.

Since ip_tunnel_info_af() defaults to returning AF_INET, we fall into
the IPv4 case and CSUM6_RX is never returned. Other relevant areas that
call ip_tunnel_info_af() do so using the info from the skb, not the
geneve_dev.
ok.
I think ip_tunnel_info_af() check is not right. it does not work in
case of collect_metadata.
Better fix would be check for genene->sock4 and genene->sock6 and
build the netlink skb accordingly.
Agreed. That's a better idea.

Lets drop this patch. I'll work on one to look at the actual sockets
instead.

Thanks Pravin.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help