From 4e1a1991c64375feb9116f2963cb672aa14ce899 Mon Sep 17 00:00:00 2001 From: Susant Sahani Date: Tue, 17 Mar 2020 10:56:57 +0100 Subject: [PATCH 1/4] networkctl: Add support to display geneve tunnel info --- src/network/networkctl.c | 67 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/src/network/networkctl.c b/src/network/networkctl.c index 94adc0e67a..2548db5875 100644 --- a/src/network/networkctl.c +++ b/src/network/networkctl.c @@ -154,6 +154,10 @@ typedef struct LinkInfo { uint16_t vlan_id; /* tunnel info */ + uint8_t ttl; + uint8_t tos; + uint16_t tunnel_port; + uint32_t vni; union in_addr_union local; union in_addr_union remote; @@ -177,6 +181,7 @@ typedef struct LinkInfo { bool has_bitrates:1; bool has_ethtool_link_info:1; bool has_wlan_link_info:1; + bool has_tunnel_ipv4:1; bool needs_freeing:1; } LinkInfo; @@ -253,8 +258,21 @@ static int decode_netdev(sd_netlink_message *m, LinkInfo *info) { else if (STR_IN_SET(received_kind, "ipip", "sit")) { (void) sd_netlink_message_read_in_addr(m, IFLA_IPTUN_LOCAL, &info->local.in); (void) sd_netlink_message_read_in_addr(m, IFLA_IPTUN_REMOTE, &info->remote.in); + } else if (streq(received_kind, "geneve")) { + (void) sd_netlink_message_read_u32(m, IFLA_GENEVE_ID, &info->vni); + + r = sd_netlink_message_read_in_addr(m, IFLA_GENEVE_REMOTE, &info->remote.in); + if (r >= 0) + info->has_tunnel_ipv4 = true; + else + (void) sd_netlink_message_read_in6_addr(m, IFLA_GENEVE_REMOTE6, &info->remote.in6); + + (void) sd_netlink_message_read_u8(m, IFLA_GENEVE_TTL, &info->ttl); + (void) sd_netlink_message_read_u8(m, IFLA_GENEVE_TOS, &info->tos); + (void) sd_netlink_message_read_u16(m, IFLA_GENEVE_PORT, &info->tunnel_port); } + strncpy(info->netdev_kind, received_kind, IFNAMSIZ); (void) sd_netlink_message_exit_container(m); @@ -1477,6 +1495,55 @@ static int link_status_one( if (r < 0) return table_log_add_error(r); } + } else if (streq_ptr(info->netdev_kind, "geneve")) { + r = table_add_many(table, + TABLE_EMPTY, + TABLE_STRING, "VNI:", + TABLE_UINT32, info->vni); + if (r < 0) + return table_log_add_error(r); + + if (info->has_tunnel_ipv4 && !in_addr_is_null(AF_INET, &info->remote)) { + r = table_add_many(table, + TABLE_EMPTY, + TABLE_STRING, "Remote:", + TABLE_IN_ADDR, &info->remote); + if (r < 0) + return table_log_add_error(r); + } else if (!in_addr_is_null(AF_INET6, &info->remote)) { + r = table_add_many(table, + TABLE_EMPTY, + TABLE_STRING, "Remote:", + TABLE_IN6_ADDR, &info->remote); + if (r < 0) + return table_log_add_error(r); + } + + if (info->ttl > 0) { + r = table_add_many(table, + TABLE_EMPTY, + TABLE_STRING, "TTL:", + TABLE_UINT8, info->ttl); + if (r < 0) + return table_log_add_error(r); + } + + if (info->tos > 0) { + r = table_add_many(table, + TABLE_EMPTY, + TABLE_STRING, "TOS:", + TABLE_UINT8, info->tos); + if (r < 0) + return table_log_add_error(r); + } + + r = table_add_many(table, + TABLE_EMPTY, + TABLE_STRING, "Port:", + TABLE_UINT16, info->tunnel_port); + if (r < 0) + return table_log_add_error(r); + } if (info->has_wlan_link_info) { From 4d75ea1ea33271321153ddaf9d6d54785c0f8fec Mon Sep 17 00:00:00 2001 From: Susant Sahani Date: Tue, 17 Mar 2020 14:31:54 +0100 Subject: [PATCH 2/4] networkctl: Add support to display gre gretap and erspan --- src/network/networkctl.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/network/networkctl.c b/src/network/networkctl.c index 2548db5875..ff280e9c16 100644 --- a/src/network/networkctl.c +++ b/src/network/networkctl.c @@ -270,6 +270,9 @@ static int decode_netdev(sd_netlink_message *m, LinkInfo *info) { (void) sd_netlink_message_read_u8(m, IFLA_GENEVE_TTL, &info->ttl); (void) sd_netlink_message_read_u8(m, IFLA_GENEVE_TOS, &info->tos); (void) sd_netlink_message_read_u16(m, IFLA_GENEVE_PORT, &info->tunnel_port); + } else if (STR_IN_SET(received_kind, "gre", "gretap", "erspan")) { + (void) sd_netlink_message_read_in_addr(m, IFLA_GRE_LOCAL, &info->local.in); + (void) sd_netlink_message_read_in_addr(m, IFLA_GRE_REMOTE, &info->remote.in); } @@ -1477,7 +1480,7 @@ static int link_status_one( TABLE_UINT16, info->vlan_id); if (r < 0) return table_log_add_error(r); - } else if (STRPTR_IN_SET(info->netdev_kind, "ipip", "sit")) { + } else if (STRPTR_IN_SET(info->netdev_kind, "ipip", "sit", "gre", "gretap", "erspan")) { if (!in_addr_is_null(AF_INET, &info->local)) { r = table_add_many(table, TABLE_EMPTY, @@ -1543,7 +1546,6 @@ static int link_status_one( TABLE_UINT16, info->tunnel_port); if (r < 0) return table_log_add_error(r); - } if (info->has_wlan_link_info) { From ad760bc1e71c469c475667034a158acb88d30aa1 Mon Sep 17 00:00:00 2001 From: Susant Sahani Date: Wed, 18 Mar 2020 04:27:09 +0100 Subject: [PATCH 3/4] networkctl: add support to display ip6gre, ip6gretap, ip6erspan --- src/network/networkctl.c | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/network/networkctl.c b/src/network/networkctl.c index ff280e9c16..c4aecc51b9 100644 --- a/src/network/networkctl.c +++ b/src/network/networkctl.c @@ -273,9 +273,11 @@ static int decode_netdev(sd_netlink_message *m, LinkInfo *info) { } else if (STR_IN_SET(received_kind, "gre", "gretap", "erspan")) { (void) sd_netlink_message_read_in_addr(m, IFLA_GRE_LOCAL, &info->local.in); (void) sd_netlink_message_read_in_addr(m, IFLA_GRE_REMOTE, &info->remote.in); + } else if (STR_IN_SET(received_kind, "ip6gre", "ip6gretap", "ip6erspan")) { + (void) sd_netlink_message_read_in6_addr(m, IFLA_GRE_LOCAL, &info->local.in6); + (void) sd_netlink_message_read_in6_addr(m, IFLA_GRE_REMOTE, &info->remote.in6); } - strncpy(info->netdev_kind, received_kind, IFNAMSIZ); (void) sd_netlink_message_exit_container(m); @@ -1498,6 +1500,24 @@ static int link_status_one( if (r < 0) return table_log_add_error(r); } + } else if (STRPTR_IN_SET(info->netdev_kind, "ip6gre", "ip6gretap", "ip6erspan")) { + if (!in_addr_is_null(AF_INET6, &info->local)) { + r = table_add_many(table, + TABLE_EMPTY, + TABLE_STRING, "Local:", + TABLE_IN6_ADDR, &info->local); + if (r < 0) + return table_log_add_error(r); + } + + if (!in_addr_is_null(AF_INET6, &info->remote)) { + r = table_add_many(table, + TABLE_EMPTY, + TABLE_STRING, "Remote:", + TABLE_IN6_ADDR, &info->remote); + if (r < 0) + return table_log_add_error(r); + } } else if (streq_ptr(info->netdev_kind, "geneve")) { r = table_add_many(table, TABLE_EMPTY, From 5712d689b91c06e4892adc29b50f16989d161901 Mon Sep 17 00:00:00 2001 From: Susant Sahani Date: Wed, 18 Mar 2020 05:21:41 +0100 Subject: [PATCH 4/4] networkctl: Add support to display vti and vti6 tunnels --- src/network/networkctl.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/network/networkctl.c b/src/network/networkctl.c index c4aecc51b9..bc67af3c25 100644 --- a/src/network/networkctl.c +++ b/src/network/networkctl.c @@ -276,6 +276,12 @@ static int decode_netdev(sd_netlink_message *m, LinkInfo *info) { } else if (STR_IN_SET(received_kind, "ip6gre", "ip6gretap", "ip6erspan")) { (void) sd_netlink_message_read_in6_addr(m, IFLA_GRE_LOCAL, &info->local.in6); (void) sd_netlink_message_read_in6_addr(m, IFLA_GRE_REMOTE, &info->remote.in6); + } else if (streq(received_kind, "vti")) { + (void) sd_netlink_message_read_in_addr(m, IFLA_VTI_LOCAL, &info->local.in); + (void) sd_netlink_message_read_in_addr(m, IFLA_VTI_REMOTE, &info->remote.in); + } else if (streq(received_kind, "vti6")) { + (void) sd_netlink_message_read_in6_addr(m, IFLA_VTI_LOCAL, &info->local.in6); + (void) sd_netlink_message_read_in6_addr(m, IFLA_VTI_REMOTE, &info->remote.in6); } strncpy(info->netdev_kind, received_kind, IFNAMSIZ); @@ -1482,7 +1488,7 @@ static int link_status_one( TABLE_UINT16, info->vlan_id); if (r < 0) return table_log_add_error(r); - } else if (STRPTR_IN_SET(info->netdev_kind, "ipip", "sit", "gre", "gretap", "erspan")) { + } else if (STRPTR_IN_SET(info->netdev_kind, "ipip", "sit", "gre", "gretap", "erspan", "vti")) { if (!in_addr_is_null(AF_INET, &info->local)) { r = table_add_many(table, TABLE_EMPTY, @@ -1500,7 +1506,7 @@ static int link_status_one( if (r < 0) return table_log_add_error(r); } - } else if (STRPTR_IN_SET(info->netdev_kind, "ip6gre", "ip6gretap", "ip6erspan")) { + } else if (STRPTR_IN_SET(info->netdev_kind, "ip6gre", "ip6gretap", "ip6erspan", "vti6")) { if (!in_addr_is_null(AF_INET6, &info->local)) { r = table_add_many(table, TABLE_EMPTY,