geneve: always fill CSUM6_RX configuration
Subsystems (2)
PATCH 1/1 geneve: always fill CSUM6_RX configuration
CSMU6_RX is relevant for collect_metadata as well. As such leave it outside of the dev's IPv4/IPv6 checks.
--- drivers/net/geneve.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
drivers/net/geneve.c +4 -4
@@ -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))
Signature · 1 line
2.12.0
Quoted 3 lines · Eric Garver
CSMU6_RXis relevant forcollect_metadataas 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 31 lines
Fixes 9b4437a5b870 ("geneve: Unify LWT and netdev handling.")Signed-off-by Eric Garver <[email protected]>--- drivers/net/geneve.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)drivers/net/geneve.c +4
-5@@ -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
Quoted 5 lines · Pravin Shelar
Quoted 3 lines · Eric Garver
CSMU6_RXis relevant forcollect_metadataas 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 31 lines
Quoted 31 lines
Fixes 9b4437a5b870 ("geneve: Unify LWT and netdev handling.")Signed-off-by Eric Garver <[email protected]>--- drivers/net/geneve.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)drivers/net/geneve.c +4
-5@@ -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
Quoted 15 lines · Eric Garver
Quoted 5 lines · Pravin Shelar
Quoted 3 lines · Eric Garver
CSMU6_RXis relevant forcollect_metadataas 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_metadataas both ipv4 and ipv6 sockets will be created.openvswitch recently gained support for creating tunnels with rtnetlink. It sets
COLLECT_METADATAandCSUM6_RX. After create, it does a get to verify the device got created with all the requested configuration. The verify was failing due toCSUM6_RXnot being returned.
Quoted 5 lines
Since
ip_tunnel_info_af()defaults to returningAF_INET, we fall into the IPv4 case andCSUM6_RXis never returned. Other relevant areas that callip_tunnel_info_af()do so using the info from the skb, not thegeneve_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.
Quoted 21 lines · Pravin Shelar
Quoted 15 lines · Eric Garver
Quoted 5 lines · Pravin Shelar
Quoted 3 lines · Eric Garver
CSMU6_RXis relevant forcollect_metadataas 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_metadataas both ipv4 and ipv6 sockets will be created.openvswitch recently gained support for creating tunnels with rtnetlink. It sets
COLLECT_METADATAandCSUM6_RX. After create, it does a get to verify the device got created with all the requested configuration. The verify was failing due toCSUM6_RXnot being returned.Quoted 5 lines
Since
ip_tunnel_info_af()defaults to returningAF_INET, we fall into the IPv4 case andCSUM6_RXis never returned. Other relevant areas that callip_tunnel_info_af()do so using the info from the skb, not thegeneve_dev.
Quoted 5 lines
ok.
I thinkip_tunnel_info_af()check is not right. it does not work in case ofcollect_metadata.
Better fix would be check forgenene->sock4andgenene->sock6and 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.