Beispiel #1
0
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;
}
Beispiel #2
0
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;
}