aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBenjamin Poirier <bpoirier@cumulusnetworks.com>2019-12-16 15:43:44 +0900
committerStephen Hemminger <stephen@networkplumber.org>2019-12-16 20:49:28 -0800
commit1a500c78aef0d4fd33c1700dbfcf435ea2c53847 (patch)
tree3b07793e41d17199c77b6289b587c0d8c08e253a
parent955a20be027d2ff47b0c6fab3353c85cee614b90 (diff)
downloadiproute2-1a500c78aef0d4fd33c1700dbfcf435ea2c53847.tar.gz
bridge: Fix tunnelshow json output
repeats for "vlan tunnelshow" what commit 0f36267485e3 ("bridge: fix vlan show formatting") did for "vlan show". This fixes problems in json output. Note that the resulting json output format of "vlan tunnelshow" is not the same as the original, introduced in commit 8652eeb3ab12 ("bridge: vlan: support for per vlan tunnel info"). Changes similar to the ones done for "vlan show" in commit 0f36267485e3 ("bridge: fix vlan show formatting") are carried over to "vlan tunnelshow". Fixes: c7c1a1ef51ae ("bridge: colorize output and use JSON print library") Fixes: 0f36267485e3 ("bridge: fix vlan show formatting") Signed-off-by: Benjamin Poirier <bpoirier@cumulusnetworks.com> Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
-rw-r--r--bridge/vlan.c27
-rwxr-xr-xtestsuite/tests/bridge/vlan/tunnelshow.t2
2 files changed, 10 insertions, 19 deletions
diff --git a/bridge/vlan.c b/bridge/vlan.c
index 19283bca7..205851e4f 100644
--- a/bridge/vlan.c
+++ b/bridge/vlan.c
@@ -256,12 +256,14 @@ static int filter_vlan_check(__u16 vid, __u16 flags)
return 1;
}
-static void open_vlan_port(int ifi_index, const char *fmt)
+static void open_vlan_port(int ifi_index, const char *fmt,
+ enum vlan_show_subject subject)
{
open_json_object(NULL);
print_color_string(PRINT_ANY, COLOR_IFNAME, "ifname", fmt,
ll_index_to_name(ifi_index));
- open_json_array(PRINT_JSON, "vlans");
+ open_json_array(PRINT_JSON,
+ subject == VLAN_SHOW_VLAN ? "vlans": "tunnels");
}
static void close_vlan_port(void)
@@ -289,10 +291,8 @@ static void print_vlan_tunnel_info(struct rtattr *tb, int ifindex)
__u16 last_vid_start = 0;
__u32 last_tunid_start = 0;
- if (!filter_vlan)
- open_vlan_port(ifindex, "%s");
+ open_vlan_port(ifindex, "%s", VLAN_SHOW_TUNNELINFO);
- open_json_array(PRINT_JSON, "tunnel");
for (i = RTA_DATA(list); RTA_OK(i, rem); i = RTA_NEXT(i, rem)) {
struct rtattr *ttb[IFLA_BRIDGE_VLAN_TUNNEL_MAX+1];
__u32 tunnel_id = 0;
@@ -331,24 +331,13 @@ static void print_vlan_tunnel_info(struct rtattr *tb, int ifindex)
else if (vcheck_ret == 0)
continue;
- if (tunnel_flags & BRIDGE_VLAN_INFO_RANGE_BEGIN)
- continue;
-
- if (filter_vlan)
- open_vlan_port(ifindex, "%s");
-
open_json_object(NULL);
print_range("vlan", last_vid_start, tunnel_vid);
print_range("tunid", last_tunid_start, tunnel_id);
close_json_object();
-
print_string(PRINT_FP, NULL, "%s", _SL_);
- if (filter_vlan)
- close_vlan_port();
}
-
- if (!filter_vlan)
- close_vlan_port();
+ close_vlan_port();
}
static int print_vlan(struct nlmsghdr *n, void *arg)
@@ -467,7 +456,7 @@ static void print_vlan_stats_attr(struct rtattr *attr, int ifindex)
/* found vlan stats, first time print the interface name */
if (!found_vlan) {
- open_vlan_port(ifindex, "%-16s");
+ open_vlan_port(ifindex, "%-16s", VLAN_SHOW_VLAN);
found_vlan = true;
} else {
print_string(PRINT_FP, NULL, "%-16s", "");
@@ -600,7 +589,7 @@ void print_vlan_info(struct rtattr *tb, int ifindex)
int rem = RTA_PAYLOAD(list);
__u16 last_vid_start = 0;
- open_vlan_port(ifindex, "%s");
+ open_vlan_port(ifindex, "%s", VLAN_SHOW_VLAN);
for (i = RTA_DATA(list); RTA_OK(i, rem); i = RTA_NEXT(i, rem)) {
struct bridge_vlan_info *vinfo;
diff --git a/testsuite/tests/bridge/vlan/tunnelshow.t b/testsuite/tests/bridge/vlan/tunnelshow.t
index b2141e7c5..fd41bfcb3 100755
--- a/testsuite/tests/bridge/vlan/tunnelshow.t
+++ b/testsuite/tests/bridge/vlan/tunnelshow.t
@@ -29,3 +29,5 @@ ts_bridge "$0" "Add tunnel with vni > 16k" \
ts_bridge "$0" "Show tunnel info" vlan tunnelshow dev $VX_DEV
test_on "1030\s+65556"
test_lines_count 5
+
+ts_bridge "$0" "Dump tunnel info" -j vlan tunnelshow dev $VX_DEV