/* * Copyright (C) 2014 Oliver Hahm * * This file is subject to the terms and conditions of the GNU Lesser * General Public License v2.1. See the file LICENSE in the top level * directory for more details. */ /** * @ingroup sys_shell_commands * @{ * * @file * @brief Provides shell commands to manage and query RPL * * @author Oliver Hahm * * @} */ #include #include #include "rpl.h" static char addr_str[IPV6_MAX_ADDR_STR_LEN]; int _rpl_route_handler(int argc, char **argv) { (void) argc; (void) argv; rpl_routing_entry_t *rtable; rtable = rpl_get_routing_table(); if (rtable) { unsigned c = 0; puts("--------------------------------------------------------------------"); puts("Routing table"); printf(" %-3s %-18s %-18s %s\n", "#", "target", "next hop", "lifetime"); puts("--------------------------------------------------------------------"); for (int i = 0; i < rpl_max_routing_entries; i++) { if (rtable[i].used) { c++; printf(" %03d: %-18s ", i, ipv6_addr_to_str(addr_str, IPV6_MAX_ADDR_STR_LEN, (&rtable[i].address))); printf("%-18s ", ipv6_addr_to_str(addr_str, IPV6_MAX_ADDR_STR_LEN, (&rtable[i].next_hop))); printf("%d\n", rtable[i].lifetime); } } puts("--------------------------------------------------------------------"); printf(" %u routing table entries\n", c); } else { puts("No routing table available"); } puts("$"); return 0; }