From 9822fef7a13eaec70be8e86c23bdb71569835bd0 Mon Sep 17 00:00:00 2001 From: Phil Sutter Date: Thu, 18 Oct 2018 12:49:51 +0200 Subject: [PATCH] json: make 0xhex handle u64 Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1628428 Upstream Status: iproute2.git commit 45ec4771d40cb commit 45ec4771d40cb367377e4148a2af22f25c20f3bf Author: Sabrina Dubroca Date: Fri Oct 12 17:34:32 2018 +0200 json: make 0xhex handle u64 Stephen converted macsec's sci to use 0xhex, but 0xhex handles unsigned int's, not 64 bits ints. Thus, the output of the "ip macsec show" command is mangled, with half of the SCI replaced with 0s: # ip macsec show 11: macsec0: [...] cipher suite: GCM-AES-128, using ICV length 16 TXSC: 0000000001560001 on SA 0 # ip -d link show macsec0 11: macsec0@ens3: [...] link/ether 52:54:00:12:01:56 brd ff:ff:ff:ff:ff:ff promiscuity 0 macsec sci 5254001201560001 [...] where TXSC and sci should match. Fixes: c0b904de6211 ("macsec: support JSON") Signed-off-by: Sabrina Dubroca Signed-off-by: Stephen Hemminger --- include/json_print.h | 2 +- lib/json_print.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/include/json_print.h b/include/json_print.h index 78a6c83..218da31 100644 --- a/include/json_print.h +++ b/include/json_print.h @@ -66,7 +66,7 @@ _PRINT_FUNC(uint, unsigned int); _PRINT_FUNC(u64, uint64_t); _PRINT_FUNC(hu, unsigned short); _PRINT_FUNC(hex, unsigned int); -_PRINT_FUNC(0xhex, unsigned int); +_PRINT_FUNC(0xhex, unsigned long long int); _PRINT_FUNC(luint, unsigned long int); _PRINT_FUNC(lluint, unsigned long long int); _PRINT_FUNC(float, double); diff --git a/lib/json_print.c b/lib/json_print.c index 09e51d0..cf13e9b 100644 --- a/lib/json_print.c +++ b/lib/json_print.c @@ -171,12 +171,12 @@ void print_color_0xhex(enum output_type type, enum color_attr color, const char *key, const char *fmt, - unsigned int hex) + unsigned long long hex) { if (_IS_JSON_CONTEXT(type)) { SPRINT_BUF(b1); - snprintf(b1, sizeof(b1), "%#x", hex); + snprintf(b1, sizeof(b1), "%#llx", hex); print_string(PRINT_JSON, key, NULL, b1); } else if (_IS_FP_CONTEXT(type)) { color_fprintf(stdout, color, fmt, hex); -- 1.8.3.1