From 4366d9d29c0f725e71ea68e335dfcedd32da87af Mon Sep 17 00:00:00 2001
From: Martine Lenders <mlenders@inf.fu-berlin.de>
Date: Wed, 18 Nov 2015 14:58:29 +0100
Subject: [PATCH] shell: sc_netif: show and manipulate router related flags

---
 sys/shell/commands/sc_netif.c | 34 ++++++++++++++++++++++++++++++++--
 1 file changed, 32 insertions(+), 2 deletions(-)

diff --git a/sys/shell/commands/sc_netif.c b/sys/shell/commands/sc_netif.c
index adbb72bc67..9dfefa902d 100644
--- a/sys/shell/commands/sc_netif.c
+++ b/sys/shell/commands/sc_netif.c
@@ -103,7 +103,7 @@ static void _hl_usage(char *cmd_name)
 
 static void _flag_usage(char *cmd_name)
 {
-    printf("usage: %s <if_id> [-]{promisc|autoack|csma|autocca|preload|iphc}\n", cmd_name);
+    printf("usage: %s <if_id> [-]{promisc|autoack|csma|autocca|preload|iphc|rtr_adv}\n", cmd_name);
 }
 
 static void _add_usage(char *cmd_name)
@@ -315,10 +315,16 @@ static void _netif_list(kernel_pid_t dev)
 #ifdef MODULE_GNRC_IPV6_NETIF
     if (entry != NULL) {
         printf("MTU:%" PRIu16 "  ", entry->mtu);
-        printf("HL:%" PRIu8 " ", entry->cur_hl);
+        printf("HL:%" PRIu8 "  ", entry->cur_hl);
         if (entry->flags & GNRC_IPV6_NETIF_FLAGS_SIXLOWPAN) {
             printf("6LO  ");
         }
+        if (entry->flags & GNRC_IPV6_NETIF_FLAGS_ROUTER) {
+            printf("RTR  ");
+        }
+        if (entry->flags & GNRC_IPV6_NETIF_FLAGS_RTR_ADV) {
+            printf("RTR_ADV  ");
+        }
         linebreak = true;
 
     }
@@ -633,6 +639,30 @@ static int _netif_flag(char *cmd, kernel_pid_t dev, char *flag)
         return 1;
 #endif
     }
+    else if (strcmp(flag, "rtr_adv") == 0) {
+#if defined(MODULE_GNRC_NDP_ROUTER) || defined(MODULE_GNRC_SIXLOWPAN_ND_ROUTER)
+        gnrc_ipv6_netif_t *entry = gnrc_ipv6_netif_get(dev);
+
+        if (entry == NULL) {
+            puts("error: unable to (un)set router advertisement flag.");
+            return 1;
+        }
+
+        if (set) {
+            gnrc_ipv6_netif_set_rtr_adv(entry, true);
+            printf("success: enable router advertisements on interface %" PRIkernel_pid "\n", dev);
+        }
+        else {
+            gnrc_ipv6_netif_set_rtr_adv(entry, false);
+            printf("success: disable router advertisements on interface %" PRIkernel_pid "\n",
+                   dev);
+        }
+        return 0;
+#else
+        puts("error: unable to (un)set router advertisement flag.");
+        return 1;
+#endif
+    }
 
     _flag_usage(cmd);
     return 1;
-- 
GitLab