From 1168b1020d7753af6cd3fd203b906c5181806d87 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Cenk=20G=C3=BCndo=C4=9Fan?= <cnkgndgn@gmail.com>
Date: Thu, 30 Jul 2015 12:06:31 +0200
Subject: [PATCH] ng_fib: pretty print ipv6 addresses

---
 sys/net/network_layer/fib/fib.c | 33 ++++++++++++++++++++++++++++++++-
 1 file changed, 32 insertions(+), 1 deletion(-)

diff --git a/sys/net/network_layer/fib/fib.c b/sys/net/network_layer/fib/fib.c
index 4a00deeb7f..5523cbc9cf 100644
--- a/sys/net/network_layer/fib/fib.c
+++ b/sys/net/network_layer/fib/fib.c
@@ -30,6 +30,24 @@
 #include "ng_fib.h"
 #include "ng_fib/ng_fib_table.h"
 
+#ifdef MODULE_NG_IPV6_ADDR
+#include "net/ng_ipv6/addr.h"
+static char addr_str[NG_IPV6_ADDR_MAX_STR_LEN];
+#endif
+
+#ifdef MODULE_NG_IPV6_ADDR
+    #define NG_FIB_ADDR_PRINT_LEN       39
+#else
+    #define NG_FIB_ADDR_PRINT_LEN       32
+    #if NG_FIB_ADDR_PRINT_LEN != (UNIVERSAL_ADDRESS_SIZE * 2)
+        #error "NG_FIB_ADDR_PRINT_LEN MUST BE (UNIVERSAL_ADDRESS_SIZE * 2)"
+    #endif
+#endif
+
+#define NG_FIB_ADDR_PRINT_LENS1(X)      #X
+#define NG_FIB_ADDR_PRINT_LENS2(X)      NG_FIB_ADDR_PRINT_LENS1(X)
+#define NG_FIB_ADDR_PRINT_LENS          NG_FIB_ADDR_PRINT_LENS2(NG_FIB_ADDR_PRINT_LEN)
+
 /**
  * @brief access mutex to control exclusive operations on calls
  */
@@ -625,6 +643,13 @@ static void fib_print_address(universal_address_container_t *entry)
     uint8_t *ret = universal_address_get_address(entry, address, &addr_size);
 
     if (ret == address) {
+#ifdef MODULE_NG_IPV6_ADDR
+        if (addr_size == sizeof(ng_ipv6_addr_t)) {
+            printf("%-" NG_FIB_ADDR_PRINT_LENS "s",
+                    ng_ipv6_addr_to_str(addr_str, (ng_ipv6_addr_t *) address, sizeof(addr_str)));
+            return;
+        }
+#endif
         for (size_t i = 0; i < UNIVERSAL_ADDRESS_SIZE; ++i) {
             if (i <= addr_size) {
                 printf("%02x", address[i]);
@@ -633,13 +658,19 @@ static void fib_print_address(universal_address_container_t *entry)
                 printf("  ");
             }
         }
+#ifdef MODULE_NG_IPV6_ADDR
+        /* print trailing whitespaces */
+        for (size_t i = 0; i < NG_FIB_ADDR_PRINT_LEN - (UNIVERSAL_ADDRESS_SIZE * 2); ++i) {
+            printf(" ");
+        }
+#endif
     }
 }
 
 void fib_print_routes(void)
 {
     mutex_lock(&mtx_access);
-    printf("%-32s %-6s %-32s %-6s %-16s Interface\n"
+    printf("%-" NG_FIB_ADDR_PRINT_LENS "s %-6s %-" NG_FIB_ADDR_PRINT_LENS "s %-6s %-16s Interface\n"
            , "Destination", "Flags", "Next Hop", "Flags", "Expires");
 
     timex_t now;
-- 
GitLab