netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH iproute2 v2 0/2] vxlan: option printing
@ 2023-05-25 15:50 Stephen Hemminger
  2023-05-25 15:50 ` [PATCH iproute2 v2 1/2] vxlan: use print_nll for gbp and gpe Stephen Hemminger
  2023-05-25 15:50 ` [PATCH iproute2 v2 2/2] vxlan: make option printing more consistent Stephen Hemminger
  0 siblings, 2 replies; 3+ messages in thread
From: Stephen Hemminger @ 2023-05-25 15:50 UTC (permalink / raw)
  To: netdev; +Cc: Stephen Hemminger

This patchset makes printing of vxlan details more consistent.

Before:
$ ip -d link show dev vxlan0
4: vxlan0: <BROADCAST,MULTICAST> mtu 1450 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether e6:a4:54:b2:34:85 brd ff:ff:ff:ff:ff:ff promiscuity 0  allmulti 0 minmtu 68 maxmtu 65535 
    vxlan id 42 group 239.1.1.1 dev enp2s0 srcport 0 0 dstport 4789 ttl auto ageing 300 udpcsum noudp6zerocsumtx noudp6zerocsumrx addrgenmode eui64 numtxqueues 1 numrxqueues 1 gso_max_size 64000 gso_max_segs 64 tso_max_size 64000 tso_max_segs 64 gro_max_size 65536 

After:
$ ip -d link show dev vxlan0
4: vxlan0: <BROADCAST,MULTICAST> mtu 1450 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether e6:a4:54:b2:34:85 brd ff:ff:ff:ff:ff:ff promiscuity 0  allmulti 0 minmtu 68 maxmtu 65535 
    vxlan id 42 group 239.1.1.1 dev enp2s0 srcport 0 0 dstport 4789 ttl auto ageing 300 addrgenmode eui64 numtxqueues 1 numrxqueues 1 gso_max_size 64000 gso_max_segs 64 tso_max_size 64000 tso_max_segs 64 gro_max_size 65536

And JSON output is more complete
$ ip -j -p -d link show dev vxlan0
[ {
        "ifindex": 4,
        "ifname": "vxlan0",
        "flags": [ "BROADCAST","MULTICAST" ],
        "mtu": 1450,
        "qdisc": "noop",
        "operstate": "DOWN",
        "linkmode": "DEFAULT",
        "group": "default",
        "txqlen": 1000,
        "link_type": "ether",
        "address": "e6:a4:54:b2:34:85",
        "broadcast": "ff:ff:ff:ff:ff:ff",
        "promiscuity": 0,
        "allmulti": 0,
        "min_mtu": 68,
        "max_mtu": 65535,
        "linkinfo": {
            "info_kind": "vxlan",
            "info_data": {
                "external": false,
                "id": 42,
                "group": "239.1.1.1",
                "link": "enp2s0",
                "port_range": {
                    "low": 0,
                    "high": 0
                },
                "port": 4789,
                "learning": true,
                "proxy": false,
                "rsc": false,
                "l2miss": false,
                "l3miss": false,
                "ttl": 0,
                "df": "unset",
                "ageing": 300,
                "udp_csum": true,
                "udp_zero_csum6_tx": false,
                "udp_zero_csum6_rx": false,
                "remcsum_tx": false,
                "remcsum_rx": false
            }
        },
        "inet6_addr_gen_mode": "eui64",
        "num_tx_queues": 1,
        "num_rx_queues": 1,
        "gso_max_size": 64000,
        "gso_max_segs": 64,
        "tso_max_size": 64000,
        "tso_max_segs": 64,
        "gro_max_size": 65536
    } ]



Stephen Hemminger (2):
  vxlan: use print_nll for gbp and gpe
  vxlan: make option printing more consistent

 include/json_print.h |  9 +++++
 ip/iplink_vxlan.c    | 84 ++++++++++++++++----------------------------
 lib/json_print.c     | 19 ++++++++++
 3 files changed, 58 insertions(+), 54 deletions(-)

-- 
2.39.2


^ permalink raw reply	[flat|nested] 3+ messages in thread

* [PATCH iproute2 v2 1/2] vxlan: use print_nll for gbp and gpe
  2023-05-25 15:50 [PATCH iproute2 v2 0/2] vxlan: option printing Stephen Hemminger
@ 2023-05-25 15:50 ` Stephen Hemminger
  2023-05-25 15:50 ` [PATCH iproute2 v2 2/2] vxlan: make option printing more consistent Stephen Hemminger
  1 sibling, 0 replies; 3+ messages in thread
From: Stephen Hemminger @ 2023-05-25 15:50 UTC (permalink / raw)
  To: netdev; +Cc: Stephen Hemminger

The Gbp and Gpe are presence, not booleans so use print_null()
for them

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
 ip/iplink_vxlan.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/ip/iplink_vxlan.c b/ip/iplink_vxlan.c
index c7e0e1c47606..cb6745c74507 100644
--- a/ip/iplink_vxlan.c
+++ b/ip/iplink_vxlan.c
@@ -650,9 +650,9 @@ static void vxlan_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
 		print_bool(PRINT_ANY, "remcsum_rx", "remcsumrx ", true);
 
 	if (tb[IFLA_VXLAN_GBP])
-		print_bool(PRINT_ANY, "gbp", "gbp ", true);
+		print_null(PRINT_ANY, "gbp", "gbp ", NULL);
 	if (tb[IFLA_VXLAN_GPE])
-		print_bool(PRINT_ANY, "gpe", "gpe ", true);
+		print_null(PRINT_ANY, "gpe", "gpe ", NULL);
 }
 
 static void vxlan_print_help(struct link_util *lu, int argc, char **argv,
-- 
2.39.2


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* [PATCH iproute2 v2 2/2] vxlan: make option printing more consistent
  2023-05-25 15:50 [PATCH iproute2 v2 0/2] vxlan: option printing Stephen Hemminger
  2023-05-25 15:50 ` [PATCH iproute2 v2 1/2] vxlan: use print_nll for gbp and gpe Stephen Hemminger
@ 2023-05-25 15:50 ` Stephen Hemminger
  1 sibling, 0 replies; 3+ messages in thread
From: Stephen Hemminger @ 2023-05-25 15:50 UTC (permalink / raw)
  To: netdev; +Cc: Stephen Hemminger

Add new helper function print_bool_opt() which prints
with no prefix and use it for vxlan options.

If the option matches the expected default value,
it is not printed if in non JSON mode.

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
 include/json_print.h |  9 +++++
 ip/iplink_vxlan.c    | 80 ++++++++++++++++----------------------------
 lib/json_print.c     | 19 +++++++++++
 3 files changed, 56 insertions(+), 52 deletions(-)

diff --git a/include/json_print.h b/include/json_print.h
index 91b34571ceb0..be1a99775fde 100644
--- a/include/json_print.h
+++ b/include/json_print.h
@@ -101,6 +101,15 @@ static inline int print_rate(bool use_iec, enum output_type t,
 	return print_color_rate(use_iec, t, COLOR_NONE, key, fmt, rate);
 }
 
+int print_color_bool_opt(enum output_type type, enum color_attr color,
+			 const char *key, bool value, bool expected);
+
+static inline int print_bool_opt(enum output_type type,
+				 const char *key, bool value, bool expected)
+{
+	return print_color_bool_opt(type, COLOR_NONE, key, value, expected);
+}
+
 /* A backdoor to the size formatter. Please use print_size() instead. */
 char *sprint_size(__u32 sz, char *buf);
 
diff --git a/ip/iplink_vxlan.c b/ip/iplink_vxlan.c
index cb6745c74507..fb37d426372d 100644
--- a/ip/iplink_vxlan.c
+++ b/ip/iplink_vxlan.c
@@ -427,15 +427,13 @@ static void vxlan_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
 	if (!tb)
 		return;
 
-	if (tb[IFLA_VXLAN_COLLECT_METADATA] &&
-	    rta_getattr_u8(tb[IFLA_VXLAN_COLLECT_METADATA])) {
-		print_bool(PRINT_ANY, "external", "external ", true);
-	}
+	if (tb[IFLA_VXLAN_COLLECT_METADATA])
+		print_bool_opt(PRINT_ANY, "external",
+			       rta_getattr_u8(tb[IFLA_VXLAN_COLLECT_METADATA]), false);
 
-	if (tb[IFLA_VXLAN_VNIFILTER] &&
-	    rta_getattr_u8(tb[IFLA_VXLAN_VNIFILTER])) {
-		print_bool(PRINT_ANY, "vnifilter", "vnifilter", true);
-	}
+	if (tb[IFLA_VXLAN_VNIFILTER])
+		print_bool_opt(PRINT_ANY, "vnifilter",
+			       rta_getattr_u8(tb[IFLA_VXLAN_VNIFILTER]), false);
 
 	if (tb[IFLA_VXLAN_ID] &&
 	    RTA_PAYLOAD(tb[IFLA_VXLAN_ID]) >= sizeof(__u32)) {
@@ -532,22 +530,24 @@ static void vxlan_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
 	if (tb[IFLA_VXLAN_LEARNING]) {
 		__u8 learning = rta_getattr_u8(tb[IFLA_VXLAN_LEARNING]);
 
-		print_bool(PRINT_JSON, "learning", NULL, learning);
-		if (!learning)
-			print_bool(PRINT_FP, NULL, "nolearning ", true);
+		print_bool_opt(PRINT_ANY, "learning", learning, true);
 	}
 
-	if (tb[IFLA_VXLAN_PROXY] && rta_getattr_u8(tb[IFLA_VXLAN_PROXY]))
-		print_bool(PRINT_ANY, "proxy", "proxy ", true);
+	if (tb[IFLA_VXLAN_PROXY])
+		print_bool_opt(PRINT_ANY, "proxy",
+			       rta_getattr_u8(tb[IFLA_VXLAN_PROXY]), false);
 
-	if (tb[IFLA_VXLAN_RSC] && rta_getattr_u8(tb[IFLA_VXLAN_RSC]))
-		print_bool(PRINT_ANY, "rsc", "rsc ", true);
+	if (tb[IFLA_VXLAN_RSC])
+		print_bool_opt(PRINT_ANY, "rsc",
+			       rta_getattr_u8(tb[IFLA_VXLAN_RSC]), false);
 
-	if (tb[IFLA_VXLAN_L2MISS] && rta_getattr_u8(tb[IFLA_VXLAN_L2MISS]))
-		print_bool(PRINT_ANY, "l2miss", "l2miss ", true);
+	if (tb[IFLA_VXLAN_L2MISS])
+		print_bool_opt(PRINT_ANY, "l2miss",
+			       rta_getattr_u8(tb[IFLA_VXLAN_L2MISS]), false);
 
-	if (tb[IFLA_VXLAN_L3MISS] && rta_getattr_u8(tb[IFLA_VXLAN_L3MISS]))
-		print_bool(PRINT_ANY, "l3miss", "l3miss ", true);
+	if (tb[IFLA_VXLAN_L3MISS])
+		print_bool_opt(PRINT_ANY, "l3miss",
+			       rta_getattr_u8(tb[IFLA_VXLAN_L3MISS]), false);
 
 	if (tb[IFLA_VXLAN_TOS])
 		tos = rta_getattr_u8(tb[IFLA_VXLAN_TOS]);
@@ -604,51 +604,27 @@ static void vxlan_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
 	if (tb[IFLA_VXLAN_UDP_CSUM]) {
 		__u8 udp_csum = rta_getattr_u8(tb[IFLA_VXLAN_UDP_CSUM]);
 
-		if (is_json_context()) {
-			print_bool(PRINT_ANY, "udp_csum", NULL, udp_csum);
-		} else {
-			if (!udp_csum)
-				fputs("no", f);
-			fputs("udpcsum ", f);
-		}
+		print_bool_opt(PRINT_ANY, "udp_csum", udp_csum, true);
 	}
 
 	if (tb[IFLA_VXLAN_UDP_ZERO_CSUM6_TX]) {
 		__u8 csum6 = rta_getattr_u8(tb[IFLA_VXLAN_UDP_ZERO_CSUM6_TX]);
 
-		if (is_json_context()) {
-			print_bool(PRINT_ANY,
-				   "udp_zero_csum6_tx", NULL, csum6);
-		} else {
-			if (!csum6)
-				fputs("no", f);
-			fputs("udp6zerocsumtx ", f);
-		}
+		print_bool_opt(PRINT_ANY, "udp_zero_csum6_tx", csum6, false);
 	}
 
 	if (tb[IFLA_VXLAN_UDP_ZERO_CSUM6_RX]) {
 		__u8 csum6 = rta_getattr_u8(tb[IFLA_VXLAN_UDP_ZERO_CSUM6_RX]);
 
-		if (is_json_context()) {
-			print_bool(PRINT_ANY,
-				   "udp_zero_csum6_rx",
-				   NULL,
-				   csum6);
-		} else {
-			if (!csum6)
-				fputs("no", f);
-			fputs("udp6zerocsumrx ", f);
-		}
+		print_bool_opt(PRINT_ANY, "udp_zero_csum6_rx", csum6, false);
 	}
 
-	if (tb[IFLA_VXLAN_REMCSUM_TX] &&
-	    rta_getattr_u8(tb[IFLA_VXLAN_REMCSUM_TX]))
-		print_bool(PRINT_ANY, "remcsum_tx", "remcsumtx ", true);
-
-	if (tb[IFLA_VXLAN_REMCSUM_RX] &&
-	    rta_getattr_u8(tb[IFLA_VXLAN_REMCSUM_RX]))
-		print_bool(PRINT_ANY, "remcsum_rx", "remcsumrx ", true);
-
+	if (tb[IFLA_VXLAN_REMCSUM_TX])
+		print_bool_opt(PRINT_ANY, "remcsum_tx",
+			       rta_getattr_u8(tb[IFLA_VXLAN_REMCSUM_TX]), false);
+	if (tb[IFLA_VXLAN_REMCSUM_RX])
+		print_bool_opt(PRINT_ANY, "remcsum_rx",
+			       rta_getattr_u8(tb[IFLA_VXLAN_REMCSUM_RX]), false);
 	if (tb[IFLA_VXLAN_GBP])
 		print_null(PRINT_ANY, "gbp", "gbp ", NULL);
 	if (tb[IFLA_VXLAN_GPE])
diff --git a/lib/json_print.c b/lib/json_print.c
index d7ee76b10de8..2dfddf713eb8 100644
--- a/lib/json_print.c
+++ b/lib/json_print.c
@@ -215,6 +215,25 @@ int print_color_bool(enum output_type type,
 				  value ? "true" : "false");
 }
 
+/* In JSON mode, acts like print_color_bool
+ * otherwise, if the value does not match expected value
+ *   then print key if true and key with prefix of "no" if false.
+ */
+int print_color_bool_opt(enum output_type type,
+			 enum color_attr color,
+			 const char *key,
+			 bool value, bool expected)
+{
+	int ret = 0;
+
+	if (_IS_JSON_CONTEXT(type))
+		jsonw_bool_field(_jw, key, value);
+	else if (_IS_FP_CONTEXT(type) && value != expected)
+		ret = color_fprintf(stdout, color, "%s%s ",
+				    value ? "" : "no", key);
+	return ret;
+}
+
 int print_color_on_off(enum output_type type,
 		       enum color_attr color,
 		       const char *key,
-- 
2.39.2


^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2023-05-25 15:50 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-05-25 15:50 [PATCH iproute2 v2 0/2] vxlan: option printing Stephen Hemminger
2023-05-25 15:50 ` [PATCH iproute2 v2 1/2] vxlan: use print_nll for gbp and gpe Stephen Hemminger
2023-05-25 15:50 ` [PATCH iproute2 v2 2/2] vxlan: make option printing more consistent Stephen Hemminger

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).