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")); }
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)); }
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)); }
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); }
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)); }
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)); }
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)); }
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)); }
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)); }
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; }
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 }
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)); }
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 }
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")); }
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")); }
static void test_ipv6_addr_from_str__illegal_chars(void) { ng_ipv6_addr_t result; TEST_ASSERT_NULL(ng_ipv6_addr_from_str(&result, ":-)")); }
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")); }
static void test_ipv6_addr_from_str__result_NULL(void) { TEST_ASSERT_NULL(ng_ipv6_addr_from_str(NULL, "::")); }