Blob Blame History Raw
From 9822fef7a13eaec70be8e86c23bdb71569835bd0 Mon Sep 17 00:00:00 2001
From: Phil Sutter <psutter@redhat.com>
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 <sd@queasysnail.net>
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 <sd@queasysnail.net>
    Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
 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