예제 #1
0
static void test_ipv6_addr_from_str__string_too_long(void)
{
    ng_ipv6_addr_t result;

    TEST_ASSERT_NULL(ng_ipv6_addr_from_str(&result, "ffff:ffff:ffff:ffff:"
                                           "ffff:ffff:ffff:ffff:ffff"));
}
예제 #2
0
static void test_ipv6_addr_from_str__success4(void)
{
    ng_ipv6_addr_t a = NG_IPV6_ADDR_UNSPECIFIED;
    ng_ipv6_addr_t result;

    TEST_ASSERT_NOT_NULL(ng_ipv6_addr_from_str(&result, "::"));
    TEST_ASSERT(ng_ipv6_addr_equal(&a, &result));
}
예제 #3
0
static void test_ipv6_addr_from_str__success5(void)
{
    ng_ipv6_addr_t a = NG_IPV6_ADDR_LOOPBACK;
    ng_ipv6_addr_t result;

    TEST_ASSERT_NOT_NULL(ng_ipv6_addr_from_str(&result, "::1"));
    TEST_ASSERT(ng_ipv6_addr_equal(&a, &result));
}
예제 #4
0
파일: udp.c 프로젝트: PeterKietzmann/Demos
static void send(char *addr_str, char *port_str, char *data)
{
    uint8_t port[2];
    uint16_t tmp;
    ng_pktsnip_t *payload, *udp, *ip;
    ng_ipv6_addr_t addr;
    ng_netreg_entry_t *sendto;

    /* parse destination address */
    if (ng_ipv6_addr_from_str(&addr, addr_str) == NULL) {
        puts("Error: unable to parse destination address");
        return;
    }
    /* parse port */
    tmp = (uint16_t)atoi(port_str);
    if (tmp == 0) {
        puts("Error: unable to parse destination port");
        return;
    }
    port[0] = (uint8_t)tmp;
    port[1] = tmp >> 8;

    /* allocate payload */
    payload = ng_pktbuf_add(NULL, data, strlen(data), NG_NETTYPE_UNDEF);
    if (payload == NULL) {
        puts("Error: unable to copy data to packet buffer");
        return;
    }
    /* allocate UDP header, set source port := destination port */
    udp = ng_udp_hdr_build(payload, port, 2, port, 2);
    if (udp == NULL) {
        puts("Error: unable to allocate UDP header");
        ng_pktbuf_release(payload);
        return;
    }
    /* allocate IPv6 header */
    ip = ng_ipv6_hdr_build(udp, NULL, 0, (uint8_t *)&addr, sizeof(addr));
    if (ip == NULL) {
        puts("Error: unable to allocate IPv6 header");
        ng_pktbuf_release(udp);
        return;
    }
    /* send packet */
    sendto = ng_netreg_lookup(NG_NETTYPE_UDP, NG_NETREG_DEMUX_CTX_ALL);
    if (sendto == NULL) {
        puts("Error: unable to locate UDP thread");
        ng_pktbuf_release(ip);
        return;
    }
    ng_pktbuf_hold(ip, ng_netreg_num(NG_NETTYPE_UDP,
                                     NG_NETREG_DEMUX_CTX_ALL) - 1);
    while (sendto != NULL) {
        ng_netapi_send(sendto->pid, ip);
        sendto = ng_netreg_getnext(sendto);
    }
    printf("Success: send %i byte to %s:%u\n", payload->size, addr_str, tmp);
}
예제 #5
0
static void test_ipv6_addr_from_str__success(void)
{
    ng_ipv6_addr_t a = { {
            0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
            0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f
        }
    };
    ng_ipv6_addr_t result;

    TEST_ASSERT_NOT_NULL(ng_ipv6_addr_from_str(&result, "1:203:405:607:809:a0b:c0d:e0f"));
    TEST_ASSERT(ng_ipv6_addr_equal(&a, &result));
}
예제 #6
0
static void test_ipv6_addr_from_str__success2(void)
{
    ng_ipv6_addr_t a = { {
            0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
        }
    };
    ng_ipv6_addr_t result;

    TEST_ASSERT_NOT_NULL(ng_ipv6_addr_from_str(&result, "fe80::f8f9:fafb:fcfd:feff"));
    TEST_ASSERT(ng_ipv6_addr_equal(&a, &result));
}
예제 #7
0
static void test_ipv6_addr_from_str__success3(void)
{
    ng_ipv6_addr_t a = { {
            0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
        }
    };
    ng_ipv6_addr_t result;

    TEST_ASSERT_NOT_NULL(ng_ipv6_addr_from_str(&result, "FE80::F8F9:FAFB:FCFD:FEFF"));
    TEST_ASSERT(ng_ipv6_addr_equal(&a, &result));
}
예제 #8
0
static void test_ipv6_addr_from_str__success6(void)
{
    ng_ipv6_addr_t a = { {
            0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
            0xff, 0xff, 0xff, 0xff, 255, 255, 255, 255
        }
    };
    ng_ipv6_addr_t result;

    TEST_ASSERT_NOT_NULL(ng_ipv6_addr_from_str(&result, "ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255"));
    TEST_ASSERT(ng_ipv6_addr_equal(&a, &result));
}
예제 #9
0
static void test_ipv6_addr_from_str__success6(void)
{
    ng_ipv6_addr_t a = { {
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0xff, 0xff, 192, 168, 0, 1
        }
    };
    ng_ipv6_addr_t result;

    TEST_ASSERT_NOT_NULL(ng_ipv6_addr_from_str(&result, "::ffff:192.168.0.1"));
    TEST_ASSERT(ng_ipv6_addr_equal(&a, &result));
}
예제 #10
0
파일: main.c 프로젝트: PeterKietzmann/Demos
int main(void)
{
    shell_t shell;
    const char *disco_addr = DISCO_ADDR;

    port[0] = (uint8_t)DISCO_PORT;
    port[1] = (uint8_t)(DISCO_PORT >> 8);
    ng_ipv6_addr_from_str(&addr, disco_addr);

    char buf[100];
    ng_ipv6_addr_to_str(buf, &addr, 100);
    printf("got address: %s\n", buf);


    set_chan(DISCO_CHANNEL);

    shell_init(&shell, shell_commands, STDIO_RX_BUFSIZE, getchar, putchar);
    shell_run(&shell);

    return 0;
}
예제 #11
0
파일: sc_netif.c 프로젝트: 4dahalibut/RIOT
static int _netif_del(kernel_pid_t dev, char *addr_str)
{
#ifdef MODULE_NG_IPV6_NETIF
    ng_ipv6_addr_t addr;

    if (ng_ipv6_addr_from_str(&addr, addr_str) == NULL) {
        puts("error: unable to parse IPv6 address.");
        return 1;
    }

    ng_ipv6_netif_remove_addr(dev, &addr);

    printf("success: removed %s to interface %" PRIkernel_pid "\n", addr_str,
           dev);

    return 0;
#else
    (void)dev;
    (void)addr_str;
    puts("error: unable to delete IPv6 address.");
    return 1;
#endif
}
예제 #12
0
static void test_ipv6_addr_from_str__addr_NULL(void)
{
    ng_ipv6_addr_t result;

    TEST_ASSERT_NULL(ng_ipv6_addr_from_str(&result, NULL));
}
예제 #13
0
파일: sc_netif.c 프로젝트: 4dahalibut/RIOT
static int _netif_add(char *cmd_name, kernel_pid_t dev, int argc, char **argv)
{
#ifdef MODULE_NG_IPV6_NETIF
    enum {
        _UNICAST = 0,
        _MULTICAST,     /* multicast value just to check if given addr is mc */
        _ANYCAST
    } type = _UNICAST;
    char *addr_str = argv[0];
    ng_ipv6_addr_t addr;
    uint8_t prefix_len;

    if (argc > 1) {
        if (strcmp(argv[0], "anycast") == 0) {
            type = _ANYCAST;
            addr_str = argv[1];
        }
        else if (strcmp(argv[0], "multicast") == 0) {
            type = _MULTICAST;
            addr_str = argv[1];
        }
        else if (strcmp(argv[0], "unicast") == 0) {
            /* type already set to unicast */
            addr_str = argv[1];
        }
        else {
            _add_usage(cmd_name);
            return 1;
        }
    }

    prefix_len = _get_prefix_len(addr_str);

    if (ng_ipv6_addr_from_str(&addr, addr_str) == NULL) {
        puts("error: unable to parse IPv6 address.");
        return 1;
    }

    if ((argc > 1) && (ng_ipv6_addr_is_multicast(&addr)) && (type != _MULTICAST)) {
        puts("error: address was not a multicast address.");
        return 1;
    }

    if (ng_ipv6_netif_add_addr(dev, &addr, prefix_len,
                               (type == _ANYCAST) ?
                               NG_IPV6_NETIF_ADDR_FLAGS_NON_UNICAST :
                               NG_IPV6_NETIF_ADDR_FLAGS_UNICAST) == NULL) {
        printf("error: unable to add IPv6 address\n");
        return 1;
    }

    printf("success: added %s/%d to interface %" PRIkernel_pid "\n", addr_str,
           prefix_len, dev);

    return 0;
#else
    (void)cmd_name;
    (void)dev;
    (void)argc;
    (void)argv;
    puts("error: unable to add IPv6 address.");

    return 1;
#endif
}
예제 #14
0
static void test_ipv6_addr_from_str__one_colon_start(void)
{
    ng_ipv6_addr_t result;

    TEST_ASSERT_NULL(ng_ipv6_addr_from_str(&result, ":ff::1"));
}
예제 #15
0
static void test_ipv6_addr_from_str__three_colons(void)
{
    ng_ipv6_addr_t result;

    TEST_ASSERT_NULL(ng_ipv6_addr_from_str(&result, "ff02:::1"));
}
예제 #16
0
static void test_ipv6_addr_from_str__illegal_chars(void)
{
    ng_ipv6_addr_t result;

    TEST_ASSERT_NULL(ng_ipv6_addr_from_str(&result, ":-)"));
}
예제 #17
0
static void test_ipv6_addr_from_str__illegal_encapsulated_ipv4(void)
{
    ng_ipv6_addr_t result;

    TEST_ASSERT_NULL(ng_ipv6_addr_from_str(&result, "192.168.0.1"));
}
예제 #18
0
static void test_ipv6_addr_from_str__result_NULL(void)
{
    TEST_ASSERT_NULL(ng_ipv6_addr_from_str(NULL, "::"));
}