aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHangbin Liu <liuhangbin@gmail.com>2017-11-14 20:43:09 -0500
committerDavid S. Miller <davem@davemloft.net>2017-11-15 05:47:11 -0500
commitfd7eafd02121d6ef501ef1a4a891e6061366c952 (patch)
treeac2067caaf6b41aaee8005c6bd04e3f8e56b37f2
parent89ad2fa3f043a1e8daae193bcb5fe34d5f8caf28 (diff)
geneve: fix fill_info when link down
geneve->sock4/6 were added with geneve_open and released with geneve_stop. So when geneve link down, we will not able to show remote address and checksum info after commit 11387fe4a98 ("geneve: fix fill_info when using collect_metadata"). Fix this by avoid passing *_REMOTE{,6} for COLLECT_METADATA since they are mutually exclusive, and always show UDP_ZERO_CSUM6_RX info. Fixes: 11387fe4a98 ("geneve: fix fill_info when using collect_metadata") Signed-off-by: Hangbin Liu <liuhangbin@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/geneve.c24
1 files changed, 10 insertions, 14 deletions
diff --git a/drivers/net/geneve.c b/drivers/net/geneve.c
index 688906aad19c..4e16d839c311 100644
--- a/drivers/net/geneve.c
+++ b/drivers/net/geneve.c
@@ -1490,6 +1490,7 @@ static int geneve_fill_info(struct sk_buff *skb, const struct net_device *dev)
1490{ 1490{
1491 struct geneve_dev *geneve = netdev_priv(dev); 1491 struct geneve_dev *geneve = netdev_priv(dev);
1492 struct ip_tunnel_info *info = &geneve->info; 1492 struct ip_tunnel_info *info = &geneve->info;
1493 bool metadata = geneve->collect_md;
1493 __u8 tmp_vni[3]; 1494 __u8 tmp_vni[3];
1494 __u32 vni; 1495 __u32 vni;
1495 1496
@@ -1498,32 +1499,24 @@ static int geneve_fill_info(struct sk_buff *skb, const struct net_device *dev)
1498 if (nla_put_u32(skb, IFLA_GENEVE_ID, vni)) 1499 if (nla_put_u32(skb, IFLA_GENEVE_ID, vni))
1499 goto nla_put_failure; 1500 goto nla_put_failure;
1500 1501
1501 if (rtnl_dereference(geneve->sock4)) { 1502 if (!metadata && ip_tunnel_info_af(info) == AF_INET) {
1502 if (nla_put_in_addr(skb, IFLA_GENEVE_REMOTE, 1503 if (nla_put_in_addr(skb, IFLA_GENEVE_REMOTE,
1503 info->key.u.ipv4.dst)) 1504 info->key.u.ipv4.dst))
1504 goto nla_put_failure; 1505 goto nla_put_failure;
1505
1506 if (nla_put_u8(skb, IFLA_GENEVE_UDP_CSUM, 1506 if (nla_put_u8(skb, IFLA_GENEVE_UDP_CSUM,
1507 !!(info->key.tun_flags & TUNNEL_CSUM))) 1507 !!(info->key.tun_flags & TUNNEL_CSUM)))
1508 goto nla_put_failure; 1508 goto nla_put_failure;
1509 1509
1510 }
1511
1512#if IS_ENABLED(CONFIG_IPV6) 1510#if IS_ENABLED(CONFIG_IPV6)
1513 if (rtnl_dereference(geneve->sock6)) { 1511 } else if (!metadata) {
1514 if (nla_put_in6_addr(skb, IFLA_GENEVE_REMOTE6, 1512 if (nla_put_in6_addr(skb, IFLA_GENEVE_REMOTE6,
1515 &info->key.u.ipv6.dst)) 1513 &info->key.u.ipv6.dst))
1516 goto nla_put_failure; 1514 goto nla_put_failure;
1517
1518 if (nla_put_u8(skb, IFLA_GENEVE_UDP_ZERO_CSUM6_TX, 1515 if (nla_put_u8(skb, IFLA_GENEVE_UDP_ZERO_CSUM6_TX,
1519 !(info->key.tun_flags & TUNNEL_CSUM))) 1516 !(info->key.tun_flags & TUNNEL_CSUM)))
1520 goto nla_put_failure; 1517 goto nla_put_failure;
1521
1522 if (nla_put_u8(skb, IFLA_GENEVE_UDP_ZERO_CSUM6_RX,
1523 !geneve->use_udp6_rx_checksums))
1524 goto nla_put_failure;
1525 }
1526#endif 1518#endif
1519 }
1527 1520
1528 if (nla_put_u8(skb, IFLA_GENEVE_TTL, info->key.ttl) || 1521 if (nla_put_u8(skb, IFLA_GENEVE_TTL, info->key.ttl) ||
1529 nla_put_u8(skb, IFLA_GENEVE_TOS, info->key.tos) || 1522 nla_put_u8(skb, IFLA_GENEVE_TOS, info->key.tos) ||
@@ -1533,10 +1526,13 @@ static int geneve_fill_info(struct sk_buff *skb, const struct net_device *dev)
1533 if (nla_put_be16(skb, IFLA_GENEVE_PORT, info->key.tp_dst)) 1526 if (nla_put_be16(skb, IFLA_GENEVE_PORT, info->key.tp_dst))
1534 goto nla_put_failure; 1527 goto nla_put_failure;
1535 1528
1536 if (geneve->collect_md) { 1529 if (metadata && nla_put_flag(skb, IFLA_GENEVE_COLLECT_METADATA))
1537 if (nla_put_flag(skb, IFLA_GENEVE_COLLECT_METADATA))
1538 goto nla_put_failure; 1530 goto nla_put_failure;
1539 } 1531
1532 if (nla_put_u8(skb, IFLA_GENEVE_UDP_ZERO_CSUM6_RX,
1533 !geneve->use_udp6_rx_checksums))
1534 goto nla_put_failure;
1535
1540 return 0; 1536 return 0;
1541 1537
1542nla_put_failure: 1538nla_put_failure: