int _fib_route_handler(int argc, char **argv) { /* e.g. fibroute right now dont care about the adress/protocol family */ if (argc == 1) { fib_print_routes(); return 0; } /* e.g. firoute [add|del] */ if (argc == 2) { if ((strcmp("add", argv[1]) == 0)) { _fib_usage(2); } else if ((strcmp("del", argv[1]) == 0)) { _fib_usage(3); } else { puts("\nunrecognized parameter1.\nPlease enter fibroute [add|del] for more information."); } return 1; } if (argc > 2 && !((strcmp("add", argv[1]) == 0) || (strcmp("del", argv[1]) == 0))) { puts("\nunrecognized parameter2.\nPlease enter fibroute [add|del] for more information."); return 1; } /* e.g. fibroute del <destination> */ if (argc == 3) { if (inet_pton(AF_INET6, argv[2], tmp_ipv6_dst)) { fib_remove_entry(tmp_ipv6_dst, IN6ADDRSZ); } else if (inet_pton(AF_INET, argv[2], tmp_ipv4_dst)) { fib_remove_entry(tmp_ipv4_dst, INADDRSZ); } else { fib_remove_entry((uint8_t *)argv[2], (strlen(argv[2]))); } return 0; } #ifdef MODULE_NG_NETIF /* e.g. fibroute add <destination> via <next hop> */ if ((argc == 5) && (strcmp("add", argv[1]) == 0) && (strcmp("via", argv[3]) == 0)) { kernel_pid_t ifs[NG_NETIF_NUMOF]; size_t ifnum = ng_netif_get(ifs); if (ifnum == 1) { _fib_add(argv[2], argv[4], ifs[0], FIB_LIFETIME_NO_EXPIRE); } else { _fib_usage(1); return 1; } return 0; } /* e.g. fibroute add <destination> via <next hop> lifetime <lifetime> */ if ((argc == 7) && (strcmp("add", argv[1]) == 0) && (strcmp("via", argv[3]) == 0) && (strcmp("lifetime", argv[5]) == 0)) { kernel_pid_t ifs[NG_NETIF_NUMOF]; size_t ifnum = ng_netif_get(ifs); if (ifnum == 1) { _fib_add(argv[2], argv[4], ifs[0], (uint32_t)atoi(argv[6])); } else { _fib_usage(1); return 1; } return 0; } #endif /* e.g. fibroute add <destination> via <next hop> dev <device> */ if (argc == 7) { if ((strcmp("add", argv[1]) == 0) && (strcmp("via", argv[3]) == 0) && (strcmp("dev", argv[5]) == 0)) { _fib_add(argv[2], argv[4], (kernel_pid_t)atoi(argv[6]), FIB_LIFETIME_NO_EXPIRE); } else { _fib_usage(1); return 1; } return 0; } /* e.g. fibroute add <destination> via <next hop> dev <device> lifetime <lifetime> */ if (argc == 9) { if ((strcmp("add", argv[1]) == 0) && (strcmp("via", argv[3]) == 0) && (strcmp("dev", argv[5]) == 0) && (strcmp("lifetime", argv[7]) == 0)) { _fib_add(argv[2], argv[4], (kernel_pid_t )atoi(argv[6]), (uint32_t)atoi(argv[8])); } else { _fib_usage(2); return 1; } return 0; } puts("\nunrecognized parameters.\nPlease enter fibroute [add|del] for more information."); return 1; }
int _fib_route_handler(int argc, char **argv) { /* e.g. fibroute right now dont care about the adress/protocol family */ if (argc == 1) { fib_print_routes(&gnrc_ipv6_fib_table); return 0; } /* e.g. firoute [add|del] */ if (argc == 2) { if ((strcmp("add", argv[1]) == 0)) { _fib_usage(2); } else if ((strcmp("del", argv[1]) == 0)) { _fib_usage(3); } else if ((strcmp("flush", argv[1]) == 0)) { fib_flush(&gnrc_ipv6_fib_table, KERNEL_PID_UNDEF); puts("successfully flushed all entries"); } else { _fib_usage(0); } return 1; } if (argc > 2 && !((strcmp("add", argv[1]) == 0) || (strcmp("del", argv[1]) == 0) || (strcmp("flush", argv[1]) == 0))) { puts("\nunrecognized parameter2.\nPlease enter fibroute [add|del] for more information."); return 1; } /* e.g. fibroute del <destination> */ if (argc == 3) { if ((strcmp("flush", argv[1]) == 0)) { kernel_pid_t iface = atoi(argv[2]); if (gnrc_netif_exist(iface)) { fib_flush(&gnrc_ipv6_fib_table, iface); printf("successfully flushed all entries for interface %" PRIu16"\n", iface); } else { printf("interface %" PRIu16" does not exist\n", iface); } } else if (inet_pton(AF_INET6, argv[2], tmp_ipv6_dst)) { fib_remove_entry(&gnrc_ipv6_fib_table, tmp_ipv6_dst, IN6ADDRSZ); } else if (inet_pton(AF_INET, argv[2], tmp_ipv4_dst)) { fib_remove_entry(&gnrc_ipv6_fib_table, tmp_ipv4_dst, INADDRSZ); } else { fib_remove_entry(&gnrc_ipv6_fib_table, (uint8_t *)argv[2], (strlen(argv[2]))); } return 0; } #ifdef MODULE_GNRC_NETIF /* e.g. fibroute add <destination> via <next hop> */ if ((argc == 5) && (strcmp("add", argv[1]) == 0) && (strcmp("via", argv[3]) == 0)) { kernel_pid_t ifs[GNRC_NETIF_NUMOF]; size_t ifnum = gnrc_netif_get(ifs); if (ifnum == 1) { _fib_add(argv[2], argv[4], ifs[0], (uint32_t)FIB_LIFETIME_NO_EXPIRE); } else { _fib_usage(1); return 1; } return 0; } /* e.g. fibroute add <destination> via <next hop> lifetime <lifetime> */ if ((argc == 7) && (strcmp("add", argv[1]) == 0) && (strcmp("via", argv[3]) == 0) && (strcmp("lifetime", argv[5]) == 0)) { kernel_pid_t ifs[GNRC_NETIF_NUMOF]; size_t ifnum = gnrc_netif_get(ifs); if (ifnum == 1) { _fib_add(argv[2], argv[4], ifs[0], (uint32_t)atoi(argv[6])); } else { _fib_usage(1); return 1; } return 0; } #endif /* e.g. fibroute add <destination> via <next hop> dev <device> */ if (argc == 7) { if ((strcmp("add", argv[1]) == 0) && (strcmp("via", argv[3]) == 0) && (strcmp("dev", argv[5]) == 0)) { _fib_add(argv[2], argv[4], (kernel_pid_t)atoi(argv[6]), (uint32_t)FIB_LIFETIME_NO_EXPIRE); } else { _fib_usage(1); return 1; } return 0; } /* e.g. fibroute add <destination> via <next hop> dev <device> lifetime <lifetime> */ if (argc == 9) { if ((strcmp("add", argv[1]) == 0) && (strcmp("via", argv[3]) == 0) && (strcmp("dev", argv[5]) == 0) && (strcmp("lifetime", argv[7]) == 0)) { _fib_add(argv[2], argv[4], (kernel_pid_t )atoi(argv[6]), (uint32_t)atoi(argv[8])); } else { _fib_usage(2); return 1; } return 0; } puts("\nunrecognized parameters.\nPlease enter fibroute [add|del] for more information."); return 1; }