diff --git a/tests/gnrc_netif2/Makefile b/tests/gnrc_netif2/Makefile index 37e2497de0221df586a7b4b932ce7c0d8c41797c..f757c9248e57ba4c630a32193faf5be75454e457 100644 --- a/tests/gnrc_netif2/Makefile +++ b/tests/gnrc_netif2/Makefile @@ -19,6 +19,7 @@ USEMODULE += gnrc_sixlowpan USEMODULE += gnrc_sixlowpan_iphc USEMODULE += gnrc_ipv6 USEMODULE += netdev_eth +USEMODULE += netdev_ieee802154 USEMODULE += netdev_test USEMODULE += od diff --git a/tests/gnrc_netif2/common.c b/tests/gnrc_netif2/common.c index d106ee3d098a16255385bb3dc328cb82b20ff0f3..a3ddb58d86b32e90f81c9dec91415264e33f291a 100644 --- a/tests/gnrc_netif2/common.c +++ b/tests/gnrc_netif2/common.c @@ -27,6 +27,7 @@ static netdev_test_t _devs[GNRC_NETIF_NUMOF]; netdev_t *ethernet_dev = (netdev_t *)&_devs[0]; +netdev_t *ieee802154_dev = (netdev_t *)&_devs[1]; netdev_t *devs[DEFAULT_DEVS_NUMOF]; #define MSG_QUEUE_SIZE (8) @@ -47,6 +48,9 @@ static int _dump_send_packet(netdev_t *netdev, const struct iovec *vector, if (netdev == ethernet_dev) { printf("Ethernet "); } + else if (netdev == ieee802154_dev) { + printf("IEEE 802.15.4 "); + } else { printf("unknown "); } @@ -114,11 +118,15 @@ static int _get_netdev_device_type(netdev_t *netdev, void *value, size_t max_len if (dev->state == 0x0) { *((uint16_t *)value) = NETDEV_TYPE_ETHERNET; } + else if (dev->state == (void *)0x1) { + *((uint16_t *)value) = NETDEV_TYPE_IEEE802154; + } else { *((uint16_t *)value) = NETDEV_TYPE_UNKNOWN; } return sizeof(uint16_t); } + static int _get_netdev_max_packet_size(netdev_t *netdev, void *value, size_t max_len) { netdev_test_t *dev = (netdev_test_t *)netdev; @@ -126,6 +134,9 @@ static int _get_netdev_max_packet_size(netdev_t *netdev, void *value, size_t max if (dev->state == 0x0) { *((uint16_t *)value) = ETHERNET_DATA_LEN; } + else if (dev->state == ((void *)0x1)) { + *((uint16_t *)value) = TEST_IEEE802154_MAX_FRAG_SIZE; + } else { *((uint16_t *)value) = IPV6_MIN_MTU; } @@ -144,6 +155,14 @@ void _tests_init(void) _get_netdev_device_type); netdev_test_set_get_cb((netdev_test_t *)ethernet_dev, NETOPT_MAX_PACKET_SIZE, _get_netdev_max_packet_size); + netdev_test_setup((netdev_test_t *)ieee802154_dev, (void *)1); + netdev_test_set_send_cb((netdev_test_t *)ieee802154_dev, _dump_send_packet); + netdev_test_set_recv_cb((netdev_test_t *)ieee802154_dev, _netdev_recv); + netdev_test_set_isr_cb((netdev_test_t *)ieee802154_dev, _netdev_isr); + netdev_test_set_get_cb((netdev_test_t *)ieee802154_dev, NETOPT_DEVICE_TYPE, + _get_netdev_device_type); + netdev_test_set_get_cb((netdev_test_t *)ieee802154_dev, + NETOPT_MAX_PACKET_SIZE, _get_netdev_max_packet_size); for (intptr_t i = SPECIAL_DEVS; i < GNRC_NETIF_NUMOF; i++) { devs[i - SPECIAL_DEVS] = (netdev_t *)&_devs[i]; netdev_test_setup(&_devs[i], (void *)i); diff --git a/tests/gnrc_netif2/common.h b/tests/gnrc_netif2/common.h index 7144bd723d19c1915fe9fc8cc3021ad52764fab1..0ff9d3d24cff1d11ddfe95478beddbc86e5942d1 100644 --- a/tests/gnrc_netif2/common.h +++ b/tests/gnrc_netif2/common.h @@ -26,7 +26,7 @@ extern "C" { #endif -#define SPECIAL_DEVS (1) +#define SPECIAL_DEVS (2) #define DEFAULT_DEVS_NUMOF (GNRC_NETIF_NUMOF - SPECIAL_DEVS) #define GP1 (0x20U) @@ -56,11 +56,19 @@ extern "C" { #define LA7 (0xfdU) #define LA8 (0x0aU) +#define TEST_IEEE802154_MAX_FRAG_SIZE (102) + #define ETHERNET_SRC { LA1, LA2, LA3, LA6, LA7, LA8 } #define ETHERNET_IPV6_LL { LP1, LP2, LP3, LP4, LP5, LP6, LP7, LP8, \ LA1 ^ 0x2, LA2, LA3, 0xff, 0xfe, LA6, LA7, LA8 } #define ETHERNET_IPV6_G { GP1, GP2, GP3, GP4, GP5, GP6, GP7, GP8, \ LA1 ^ 0x2, LA2, LA3, 0xff, 0xfe, LA6, LA7, LA8 } +#define IEEE802154_LONG_SRC { LA1, LA2, LA3, LA4, LA5, LA6, LA7, LA8 } +#define IEEE802154_SHORT_SRC { LA7, LA8 } +#define IEEE802154_IPV6_LL { LP1, LP2, LP3, LP4, LP5, LP6, LP7, LP8, \ + LA1 ^ 0x2, LA2, LA3, LA4, LA5, LA6, LA7, LA8 } +#define IEEE802154_IPV6_G { GP1, GP2, GP3, GP4, GP5, GP6, GP7, GP8, \ + LA1 ^ 0x2, LA2, LA3, LA4, LA5, LA6, LA7, LA8 } #define NETIF0_SRC { LA1, LA2 + 1, LA3, LA4, LA5, LA6, LA7, LA8 } #define NETIF0_IPV6_LL { LP1, LP2, LP3, LP4, LP5, LP6, LP7, LP8, \ LA1 ^ 0x2, LA2 + 1, LA3, LA4, LA5, LA6, LA7, LA8 } @@ -74,6 +82,7 @@ extern "C" { LA1 ^ 0x82, LA2, LA3, LA4, LA5, LA6, LA7, LA8 } extern netdev_t *ethernet_dev; +extern netdev_t *ieee802154_dev; extern netdev_t *devs[DEFAULT_DEVS_NUMOF]; void _tests_init(void); diff --git a/tests/gnrc_netif2/main.c b/tests/gnrc_netif2/main.c index 896e7b74c8f2b364302dd2b9a6134019da8e278d..e024b137b0b90d6653c2100e7fe7d7bf8d670832 100644 --- a/tests/gnrc_netif2/main.c +++ b/tests/gnrc_netif2/main.c @@ -31,16 +31,20 @@ #include "net/gnrc/netif/hdr.h" #include "net/gnrc/netif2.h" #include "net/gnrc/netif2/ethernet.h" +#include "net/gnrc/netif2/ieee802154.h" #include "net/gnrc/netif2/internal.h" #include "net/netdev_test.h" #include "utlist.h" #include "xtimer.h" #define ETHERNET_STACKSIZE (THREAD_STACKSIZE_MAIN) +#define IEEE802154_STACKSIZE (THREAD_STACKSIZE_MAIN) static gnrc_netif2_t *ethernet_netif = NULL; +static gnrc_netif2_t *ieee802154_netif = NULL; static gnrc_netif2_t *netifs[DEFAULT_DEVS_NUMOF]; static char ethernet_netif_stack[ETHERNET_STACKSIZE]; +static char ieee802154_netif_stack[ETHERNET_STACKSIZE]; static char netifs_stack[DEFAULT_DEVS_NUMOF][THREAD_STACKSIZE_DEFAULT]; static bool init_called = false; @@ -48,7 +52,14 @@ static inline void _test_init(gnrc_netif2_t *netif); static inline int _mock_netif_send(gnrc_netif2_t *netif, gnrc_pktsnip_t *pkt); static inline gnrc_pktsnip_t *_mock_netif_recv(gnrc_netif2_t * netif); static int _get_netdev_address(netdev_t *dev, void *value, size_t max_len); -static int _set_netdev_address(netdev_t *dev, const void *value, size_t value_len); +static int _set_netdev_address(netdev_t *dev, const void *value, + size_t value_len); +static int _get_netdev_address_long(netdev_t *dev, void *value, size_t max_len); +static int _set_netdev_address_long(netdev_t *dev, const void *value, + size_t value_len); +static int _get_netdev_src_len(netdev_t *dev, void *value, size_t max_len); +static int _set_netdev_src_len(netdev_t *dev, const void *value, + size_t value_len); static const gnrc_netif2_ops_t default_ops = { .init = _test_init, @@ -71,6 +82,14 @@ static void _set_up(void) memset(ethernet_netif->ipv6.groups, 0, sizeof(ethernet_netif->ipv6.groups)); } + if (ieee802154_netif != NULL) { + memset(ieee802154_netif->ipv6.addrs_flags, 0, + sizeof(ieee802154_netif->ipv6.addrs_flags)); + memset(ieee802154_netif->ipv6.addrs, 0, + sizeof(ieee802154_netif->ipv6.addrs)); + memset(ieee802154_netif->ipv6.groups, 0, + sizeof(ieee802154_netif->ipv6.groups)); + } for (unsigned i = 0; i < DEFAULT_DEVS_NUMOF; i++) { if (netifs[i] != NULL) { memset(netifs[i]->ipv6.addrs_flags, 0, @@ -112,6 +131,29 @@ static void test_creation(void) TEST_ASSERT_EQUAL_STRING("eth", sched_threads[ethernet_netif->pid]->name); #endif TEST_ASSERT_NOT_NULL(sched_threads[ethernet_netif->pid]->msg_array); + + TEST_ASSERT_NOT_NULL((ieee802154_netif = gnrc_netif2_ieee802154_create( + ieee802154_netif_stack, IEEE802154_STACKSIZE, GNRC_NETIF2_PRIO, + "wpan", ieee802154_dev + ))); + TEST_ASSERT_EQUAL_INT(2, gnrc_netif2_numof()); + TEST_ASSERT_NOT_NULL((ptr = gnrc_netif2_iter(ptr))); + TEST_ASSERT_NOT_NULL((ptr = gnrc_netif2_iter(ptr))); + TEST_ASSERT_NULL((ptr = gnrc_netif2_iter(ptr))); + TEST_ASSERT_NOT_NULL(ieee802154_netif->ops); + TEST_ASSERT_NOT_NULL(ieee802154_netif->dev); + TEST_ASSERT_EQUAL_INT(IPV6_MIN_MTU, ieee802154_netif->ipv6.mtu); + TEST_ASSERT_EQUAL_INT(TEST_IEEE802154_MAX_FRAG_SIZE, + ieee802154_netif->sixlo.max_frag_size); + TEST_ASSERT_EQUAL_INT(GNRC_NETIF2_DEFAULT_HL, ieee802154_netif->cur_hl); + TEST_ASSERT_EQUAL_INT(NETDEV_TYPE_IEEE802154, + ieee802154_netif->device_type); + TEST_ASSERT(ieee802154_netif->pid > KERNEL_PID_UNDEF); +#ifdef DEVELHELP + TEST_ASSERT_EQUAL_STRING("wpan", sched_threads[ieee802154_netif->pid]->name); +#endif + TEST_ASSERT_NOT_NULL(sched_threads[ieee802154_netif->pid]->msg_array); + for (unsigned i = 0; i < DEFAULT_DEVS_NUMOF; i++) { TEST_ASSERT_NOT_NULL((netifs[i] = gnrc_netif2_create( netifs_stack[i], THREAD_STACKSIZE_DEFAULT, @@ -135,6 +177,7 @@ static void test_creation(void) static void test_get_by_pid(void) { TEST_ASSERT(ethernet_netif == gnrc_netif2_get_by_pid(ethernet_netif->pid)); + TEST_ASSERT(ieee802154_netif == gnrc_netif2_get_by_pid(ieee802154_netif->pid)); for (kernel_pid_t i = 0; i < DEFAULT_DEVS_NUMOF; i++) { TEST_ASSERT(netifs[i] == gnrc_netif2_get_by_pid(netifs[i]->pid)); } @@ -143,6 +186,8 @@ static void test_get_by_pid(void) static void test_addr_to_str(void) { static const uint8_t ethernet_l2addr[] = ETHERNET_SRC; + static const uint8_t ieee802154_l2addr_long[] = IEEE802154_LONG_SRC; + static const uint8_t ieee802154_l2addr_short[] = IEEE802154_SHORT_SRC; static const uint8_t netif0_l2addr[] = NETIF0_SRC; char out[sizeof(netif0_l2addr) * 3]; @@ -151,6 +196,14 @@ static void test_addr_to_str(void) TEST_ASSERT(out == gnrc_netif2_addr_to_str(ethernet_l2addr, sizeof(ethernet_l2addr), out)); TEST_ASSERT_EQUAL_STRING("3e:e6:b5:22:fd:0a", &out[0]); + TEST_ASSERT(out == gnrc_netif2_addr_to_str(ieee802154_l2addr_long, + sizeof(ieee802154_l2addr_long), + out)); + TEST_ASSERT_EQUAL_STRING("3e:e6:b5:0f:19:22:fd:0a", &out[0]); + TEST_ASSERT(out == gnrc_netif2_addr_to_str(ieee802154_l2addr_short, + sizeof(ieee802154_l2addr_short), + out)); + TEST_ASSERT_EQUAL_STRING("fd:0a", &out[0]); TEST_ASSERT(out == gnrc_netif2_addr_to_str(netif0_l2addr, sizeof(netif0_l2addr), out)); @@ -160,6 +213,8 @@ static void test_addr_to_str(void) static void test_addr_from_str(void) { static const uint8_t ethernet_l2addr[] = ETHERNET_SRC; + static const uint8_t ieee802154_l2addr_long[] = IEEE802154_LONG_SRC; + static const uint8_t ieee802154_l2addr_short[] = IEEE802154_SHORT_SRC; uint8_t out[GNRC_NETIF2_L2ADDR_MAXLEN]; TEST_ASSERT_EQUAL_INT(0, gnrc_netif2_addr_from_str("", out)); @@ -167,6 +222,15 @@ static void test_addr_from_str(void) gnrc_netif2_addr_from_str("3e:e6:b5:22:fd:0a", out)); TEST_ASSERT_EQUAL_INT(0, memcmp(ethernet_l2addr, out, sizeof(ethernet_l2addr))); + TEST_ASSERT_EQUAL_INT(sizeof(ieee802154_l2addr_long), + gnrc_netif2_addr_from_str("3e:e6:b5:0f:19:22:fd:0a", + out)); + TEST_ASSERT_EQUAL_INT(0, memcmp(ieee802154_l2addr_long, out, + sizeof(ieee802154_l2addr_long))); + TEST_ASSERT_EQUAL_INT(sizeof(ieee802154_l2addr_short), + gnrc_netif2_addr_from_str("fd:0a", out)); + TEST_ASSERT_EQUAL_INT(0, memcmp(ieee802154_l2addr_short, out, + sizeof(ieee802154_l2addr_short))); } static void test_ipv6_addr_add__ENOMEM(void) @@ -515,11 +579,32 @@ static void test_ipv6_group_idx__success(void) static void test_ipv6_get_iid(void) { static const ipv6_addr_t ethernet_ipv6_ll = { .u8 = ETHERNET_IPV6_LL }; + static const ipv6_addr_t ieee802154_ipv6_ll_long = { .u8 = IEEE802154_IPV6_LL }; + static const uint8_t ieee802154_eui64_short[] = { 0, 0, 0, 0xff, + 0xfe, 0, LA7, LA8 }; eui64_t res; + uint16_t ieee802154_l2addr_len = 2U; TEST_ASSERT_EQUAL_INT(0, gnrc_netif2_ipv6_get_iid(ethernet_netif, &res)); TEST_ASSERT_EQUAL_INT(0, memcmp(&res, ðernet_ipv6_ll.u64[1], sizeof(res))); + TEST_ASSERT_EQUAL_INT(0, gnrc_netif2_ipv6_get_iid(ieee802154_netif, &res)); + TEST_ASSERT_EQUAL_INT(0, memcmp(&res, &ieee802154_ipv6_ll_long.u64[1], + sizeof(res))); + TEST_ASSERT_EQUAL_INT(sizeof(ieee802154_l2addr_len), + gnrc_netapi_set(ieee802154_netif->pid, + NETOPT_SRC_LEN, 0, + &ieee802154_l2addr_len, + sizeof(ieee802154_l2addr_len))); + TEST_ASSERT_EQUAL_INT(0, gnrc_netif2_ipv6_get_iid(ieee802154_netif, &res)); + TEST_ASSERT_EQUAL_INT(0, memcmp(&res, &ieee802154_eui64_short, sizeof(res))); + /* reset to source length 8 */ + ieee802154_l2addr_len = 8U; + TEST_ASSERT_EQUAL_INT(sizeof(ieee802154_l2addr_len), + gnrc_netapi_set(ieee802154_netif->pid, + NETOPT_SRC_LEN, 0, + &ieee802154_l2addr_len, + sizeof(ieee802154_l2addr_len))); for (unsigned i = 0; i < DEFAULT_DEVS_NUMOF; i++) { TEST_ASSERT_EQUAL_INT(-ENOTSUP, gnrc_netif2_ipv6_get_iid(netifs[i], &res)); } @@ -576,13 +661,40 @@ static void test_netapi_get__IPV6_GROUP(void) static void test_netapi_get__IPV6_IID(void) { static const ipv6_addr_t ethernet_ipv6_ll = { .u8 = ETHERNET_IPV6_LL }; + static const ipv6_addr_t ieee802154_ipv6_ll_long = { .u8 = IEEE802154_IPV6_LL }; + static const uint8_t ieee802154_eui64_short[] = { 0, 0, 0, 0xff, + 0xfe, 0, LA7, LA8 }; eui64_t value; + uint16_t ieee802154_l2addr_len = 2U; TEST_ASSERT_EQUAL_INT(sizeof(eui64_t), gnrc_netapi_get(ethernet_netif->pid, NETOPT_IPV6_IID, 0, &value, sizeof(value))); TEST_ASSERT_EQUAL_INT(0, memcmp(&value, ðernet_ipv6_ll.u64[1], sizeof(value))); + TEST_ASSERT_EQUAL_INT(sizeof(eui64_t), gnrc_netapi_get(ieee802154_netif->pid, + NETOPT_IPV6_IID, + 0, &value, sizeof(value))); + TEST_ASSERT_EQUAL_INT(0, memcmp(&value, &ieee802154_ipv6_ll_long.u64[1], + sizeof(value))); + TEST_ASSERT_EQUAL_INT(sizeof(ieee802154_l2addr_len), + gnrc_netapi_set(ieee802154_netif->pid, + NETOPT_SRC_LEN, 0, + &ieee802154_l2addr_len, + sizeof(ieee802154_l2addr_len))); + TEST_ASSERT_EQUAL_INT(sizeof(eui64_t), gnrc_netapi_get(ieee802154_netif->pid, + NETOPT_IPV6_IID, + 0, &value, + sizeof(value))); + TEST_ASSERT_EQUAL_INT(0, memcmp(&value, &ieee802154_eui64_short, + sizeof(value))); + /* reset to source length 8 */ + ieee802154_l2addr_len = 8U; + TEST_ASSERT_EQUAL_INT(sizeof(ieee802154_l2addr_len), + gnrc_netapi_set(ieee802154_netif->pid, + NETOPT_SRC_LEN, 0, + &ieee802154_l2addr_len, + sizeof(ieee802154_l2addr_len))); TEST_ASSERT_EQUAL_INT(-ENOTSUP, gnrc_netapi_get(netifs[0]->pid, NETOPT_IPV6_IID, 0, &value, sizeof(value))); @@ -602,6 +714,16 @@ static void test_netapi_get__MAX_PACKET_SIZE(void) GNRC_NETTYPE_NETIF, &value, sizeof(value))); TEST_ASSERT_EQUAL_INT(ETHERNET_DATA_LEN, value); + TEST_ASSERT_EQUAL_INT(sizeof(uint16_t), gnrc_netapi_get(ieee802154_netif->pid, + NETOPT_MAX_PACKET_SIZE, + GNRC_NETTYPE_IPV6, + &value, sizeof(value))); + TEST_ASSERT_EQUAL_INT(IPV6_MIN_MTU, value); + TEST_ASSERT_EQUAL_INT(sizeof(uint16_t), gnrc_netapi_get(ieee802154_netif->pid, + NETOPT_MAX_PACKET_SIZE, + GNRC_NETTYPE_NETIF, + &value, sizeof(value))); + TEST_ASSERT_EQUAL_INT(TEST_IEEE802154_MAX_FRAG_SIZE, value); TEST_ASSERT_EQUAL_INT(sizeof(uint16_t), gnrc_netapi_get(netifs[0]->pid, NETOPT_MAX_PACKET_SIZE, GNRC_NETTYPE_IPV6, @@ -623,6 +745,11 @@ static void test_netapi_get__6LO_IPHC(void) NETOPT_6LO_IPHC, 0, &value, sizeof(value))); TEST_ASSERT_EQUAL_INT(NETOPT_DISABLE, value); + TEST_ASSERT_EQUAL_INT(sizeof(netopt_enable_t), + gnrc_netapi_get(ieee802154_netif->pid, + NETOPT_6LO_IPHC, 0, + &value, sizeof(value))); + TEST_ASSERT_EQUAL_INT(NETOPT_ENABLE, value); TEST_ASSERT_EQUAL_INT(sizeof(netopt_enable_t), gnrc_netapi_get(netifs[0]->pid, NETOPT_6LO_IPHC, 0, @@ -633,6 +760,7 @@ static void test_netapi_get__6LO_IPHC(void) static void test_netapi_get__ADDRESS(void) { static const uint8_t exp_ethernet[] = ETHERNET_SRC; + static const uint8_t exp_ieee802154[] = IEEE802154_SHORT_SRC; uint8_t value[GNRC_NETIF2_L2ADDR_MAXLEN]; TEST_ASSERT_EQUAL_INT(sizeof(exp_ethernet), @@ -640,16 +768,29 @@ static void test_netapi_get__ADDRESS(void) NETOPT_ADDRESS, 0, &value, sizeof(value))); TEST_ASSERT_EQUAL_INT(0, memcmp(exp_ethernet, value, sizeof(exp_ethernet))); + TEST_ASSERT_EQUAL_INT(sizeof(exp_ieee802154), + gnrc_netapi_get(ieee802154_netif->pid, + NETOPT_ADDRESS, 0, + &value, sizeof(value))); + TEST_ASSERT_EQUAL_INT(0, memcmp(exp_ieee802154, value, + sizeof(exp_ieee802154))); } static void test_netapi_get__ADDRESS_LONG(void) { + static const uint8_t exp_ieee802154[] = IEEE802154_LONG_SRC; uint8_t value[GNRC_NETIF2_L2ADDR_MAXLEN]; TEST_ASSERT_EQUAL_INT(-ENOTSUP, gnrc_netapi_get(ethernet_netif->pid, NETOPT_ADDRESS_LONG, 0, &value, sizeof(value))); + TEST_ASSERT_EQUAL_INT(sizeof(exp_ieee802154), + gnrc_netapi_get(ieee802154_netif->pid, + NETOPT_ADDRESS_LONG, 0, + &value, sizeof(value))); + TEST_ASSERT_EQUAL_INT(0, memcmp(exp_ieee802154, value, + sizeof(exp_ieee802154))); TEST_ASSERT_EQUAL_INT(-ENOTSUP, gnrc_netapi_get(netifs[0]->pid, NETOPT_ADDRESS_LONG, 0, @@ -749,6 +890,8 @@ static void test_netapi_set__6LO_IPHC(void) static void test_netapi_set__ADDRESS(void) { static const uint8_t exp_ethernet[] = ETHERNET_SRC; + static const uint8_t exp_ieee802154[] = IEEE802154_SHORT_SRC; + static const uint8_t exp_ieee802154_long[] = IEEE802154_LONG_SRC; uint8_t value[] = { LA1 + 1, LA2 + 2, LA3 + 3, LA4 + 4, LA5 + 5, LA6 + 6 }; TEST_ASSERT_EQUAL_INT(sizeof(exp_ethernet), @@ -757,11 +900,16 @@ static void test_netapi_set__ADDRESS(void) &value, sizeof(value))); TEST_ASSERT_EQUAL_INT(sizeof(value), ethernet_netif->l2addr_len); TEST_ASSERT_EQUAL_INT(0, memcmp(value, ethernet_netif->l2addr, - sizeof(value))); - TEST_ASSERT_EQUAL_INT(-ENOTSUP, - gnrc_netapi_set(netifs[0]->pid, - NETOPT_ADDRESS_LONG, 0, - &value, sizeof(value))); + ETHERNET_ADDR_LEN)); + TEST_ASSERT_EQUAL_INT(sizeof(exp_ieee802154), + gnrc_netapi_set(ieee802154_netif->pid, + NETOPT_ADDRESS, 0, + &value, sizeof(uint16_t))); + /* we did not change NETOPT_SRC_LEN, so this field shouldn't change */ + TEST_ASSERT_EQUAL_INT(sizeof(exp_ieee802154_long), ieee802154_netif->l2addr_len); + TEST_ASSERT_EQUAL_INT(0, memcmp(exp_ieee802154_long, + ieee802154_netif->l2addr, + sizeof(exp_ieee802154_long))); /* return addresses to previous state for further testing */ memcpy(value, exp_ethernet, sizeof(exp_ethernet)); TEST_ASSERT_EQUAL_INT(sizeof(exp_ethernet), @@ -771,20 +919,71 @@ static void test_netapi_set__ADDRESS(void) TEST_ASSERT_EQUAL_INT(sizeof(value), ethernet_netif->l2addr_len); TEST_ASSERT_EQUAL_INT(0, memcmp(value, ethernet_netif->l2addr, sizeof(value))); + memcpy(value, exp_ieee802154, sizeof(exp_ieee802154)); + TEST_ASSERT_EQUAL_INT(sizeof(exp_ieee802154), + gnrc_netapi_set(ieee802154_netif->pid, + NETOPT_ADDRESS, 0, + &value, sizeof(uint16_t))); } static void test_netapi_set__ADDRESS_LONG(void) { - uint8_t value[GNRC_NETIF2_L2ADDR_MAXLEN]; + static const uint8_t exp_ieee802154[] = IEEE802154_LONG_SRC; + uint8_t value[] = { LA1 + 1, LA2 + 2, LA3 + 3, LA4 + 4, LA5 + 5, LA6 + 6, + LA7 + 1, LA8 + 2 }; TEST_ASSERT_EQUAL_INT(-ENOTSUP, gnrc_netapi_set(ethernet_netif->pid, NETOPT_ADDRESS_LONG, 0, &value, sizeof(value))); + TEST_ASSERT_EQUAL_INT(sizeof(exp_ieee802154), + gnrc_netapi_set(ieee802154_netif->pid, + NETOPT_ADDRESS_LONG, 0, + &value, sizeof(value))); + TEST_ASSERT_EQUAL_INT(sizeof(value), ieee802154_netif->l2addr_len); + TEST_ASSERT_EQUAL_INT(0, memcmp(value, ieee802154_netif->l2addr, + sizeof(value))); TEST_ASSERT_EQUAL_INT(-ENOTSUP, gnrc_netapi_set(netifs[0]->pid, NETOPT_ADDRESS_LONG, 0, &value, sizeof(value))); + /* return addresses to previous state for further testing */ + memcpy(value, exp_ieee802154, sizeof(exp_ieee802154)); + TEST_ASSERT_EQUAL_INT(sizeof(exp_ieee802154), + gnrc_netapi_set(ieee802154_netif->pid, + NETOPT_ADDRESS_LONG, 0, + &value, sizeof(value))); + TEST_ASSERT_EQUAL_INT(sizeof(value), ieee802154_netif->l2addr_len); + TEST_ASSERT_EQUAL_INT(0, memcmp(value, ieee802154_netif->l2addr, + sizeof(value))); +} + +static void test_netapi_set__SRC_LEN(void) +{ + static const uint8_t exp_l2addr[] = { LA7, LA8 }; + static const uint8_t orig_ieee802154[] = IEEE802154_LONG_SRC; + uint16_t value = 2U; + + TEST_ASSERT_EQUAL_INT(-ENOTSUP, + gnrc_netapi_set(ethernet_netif->pid, NETOPT_SRC_LEN, + 0, &value, sizeof(value))); + TEST_ASSERT_EQUAL_INT(sizeof(uint16_t), + gnrc_netapi_set(ieee802154_netif->pid, NETOPT_SRC_LEN, + 0, &value, sizeof(value))); + TEST_ASSERT_EQUAL_INT(value, ieee802154_netif->l2addr_len); + TEST_ASSERT_EQUAL_INT(0, memcmp(exp_l2addr, ieee802154_netif->l2addr, + sizeof(exp_l2addr))); + TEST_ASSERT_EQUAL_INT(-ENOTSUP, + gnrc_netapi_set(netifs[0]->pid, NETOPT_SRC_LEN, 0, + &value, sizeof(value))); + /* return addresses to previous state for further testing */ + value = 8U; + TEST_ASSERT_EQUAL_INT(sizeof(uint16_t), + gnrc_netapi_set(ieee802154_netif->pid, NETOPT_SRC_LEN, + 0, &value, sizeof(value))); + TEST_ASSERT_EQUAL_INT(value, ieee802154_netif->l2addr_len); + TEST_ASSERT_EQUAL_INT(0, memcmp(orig_ieee802154, ieee802154_netif->l2addr, + sizeof(orig_ieee802154))); } static void test_netapi_send__raw_unicast_ethernet_packet(void) @@ -815,6 +1014,133 @@ static void test_netapi_send__raw_broadcast_ethernet_packet(void) gnrc_netapi_send(ethernet_netif->pid, pkt); } +static void test_netapi_send__raw_unicast_ieee802154_long_long_packet(void) +{ + uint8_t dst[] = { LA1, LA2, LA3, LA4, LA5, LA6, LA7, LA8 + 1 }; + gnrc_pktsnip_t *pkt = gnrc_pktbuf_add(NULL, "123ABCDEFG", + sizeof("123ABCDEFG"), + GNRC_NETTYPE_UNDEF); + TEST_ASSERT_NOT_NULL(pkt); + gnrc_pktsnip_t *netif = gnrc_netif_hdr_build(NULL, 0, dst, sizeof(dst)); + TEST_ASSERT_NOT_NULL(netif); + LL_PREPEND(pkt, netif); + gnrc_netapi_send(ieee802154_netif->pid, pkt); +} + +static void test_netapi_send__raw_unicast_ieee802154_long_short_packet(void) +{ + uint8_t dst[] = { LA7, LA8 + 1 }; + gnrc_pktsnip_t *pkt = gnrc_pktbuf_add(NULL, "123ABCDEFG", + sizeof("123ABCDEFG"), + GNRC_NETTYPE_UNDEF); + TEST_ASSERT_NOT_NULL(pkt); + gnrc_pktsnip_t *netif = gnrc_netif_hdr_build(NULL, 0, dst, sizeof(dst)); + TEST_ASSERT_NOT_NULL(netif); + LL_PREPEND(pkt, netif); + gnrc_netapi_send(ieee802154_netif->pid, pkt); +} + +static void test_netapi_send__raw_unicast_ieee802154_short_long_packet1(void) +{ + uint8_t dst[] = { LA1, LA2, LA3, LA4, LA5, LA6, LA7, LA8 + 1 }; + gnrc_pktsnip_t *pkt = gnrc_pktbuf_add(NULL, "123ABCDEFG", + sizeof("123ABCDEFG"), + GNRC_NETTYPE_UNDEF); + uint16_t src_len = 2U; + + TEST_ASSERT_NOT_NULL(pkt); + TEST_ASSERT_EQUAL_INT(sizeof(src_len), + gnrc_netapi_set(ieee802154_netif->pid, NETOPT_SRC_LEN, + 0, &src_len, sizeof(src_len))); + gnrc_pktsnip_t *netif = gnrc_netif_hdr_build(NULL, 0, dst, sizeof(dst)); + TEST_ASSERT_NOT_NULL(netif); + LL_PREPEND(pkt, netif); + gnrc_netapi_send(ieee802154_netif->pid, pkt); + /* reset src_len */ + src_len = 8U; + TEST_ASSERT_EQUAL_INT(sizeof(src_len), + gnrc_netapi_set(ieee802154_netif->pid, NETOPT_SRC_LEN, + 0, &src_len, sizeof(src_len))); +} + +static void test_netapi_send__raw_unicast_ieee802154_short_long_packet2(void) +{ + uint8_t src[] = { LA7, LA8 }; + uint8_t dst[] = { LA1, LA2, LA3, LA4, LA5, LA6, LA7, LA8 + 1 }; + gnrc_pktsnip_t *pkt = gnrc_pktbuf_add(NULL, "123ABCDEFG", + sizeof("123ABCDEFG"), + GNRC_NETTYPE_UNDEF); + TEST_ASSERT_NOT_NULL(pkt); + gnrc_pktsnip_t *netif = gnrc_netif_hdr_build(src, sizeof(src), + dst, sizeof(dst)); + TEST_ASSERT_NOT_NULL(netif); + LL_PREPEND(pkt, netif); + gnrc_netapi_send(ieee802154_netif->pid, pkt); +} + +static void test_netapi_send__raw_unicast_ieee802154_short_short_packet(void) +{ + uint8_t dst[] = { LA7, LA8 + 1 }; + gnrc_pktsnip_t *pkt = gnrc_pktbuf_add(NULL, "123ABCDEFG", + sizeof("123ABCDEFG"), + GNRC_NETTYPE_UNDEF); + uint16_t src_len = 2U; + + TEST_ASSERT_NOT_NULL(pkt); + TEST_ASSERT_EQUAL_INT(sizeof(src_len), + gnrc_netapi_set(ieee802154_netif->pid, NETOPT_SRC_LEN, + 0, &src_len, sizeof(src_len))); + gnrc_pktsnip_t *netif = gnrc_netif_hdr_build(NULL, 0, dst, sizeof(dst)); + TEST_ASSERT_NOT_NULL(netif); + LL_PREPEND(pkt, netif); + gnrc_netapi_send(ieee802154_netif->pid, pkt); + /* reset src_len */ + src_len = 8U; + TEST_ASSERT_EQUAL_INT(sizeof(src_len), + gnrc_netapi_set(ieee802154_netif->pid, NETOPT_SRC_LEN, + 0, &src_len, sizeof(src_len))); +} + +static void test_netapi_send__raw_broadcast_ieee802154_long_packet(void) +{ + gnrc_netif_hdr_t *hdr; + gnrc_pktsnip_t *pkt = gnrc_pktbuf_add(NULL, "123ABCDEFG", + sizeof("123ABCDEFG"), + GNRC_NETTYPE_UNDEF); + TEST_ASSERT_NOT_NULL(pkt); + gnrc_pktsnip_t *netif = gnrc_netif_hdr_build(NULL, 0, NULL, 0); + TEST_ASSERT_NOT_NULL(netif); + hdr = netif->data; + hdr->flags |= GNRC_NETIF_HDR_FLAGS_BROADCAST; + LL_PREPEND(pkt, netif); + gnrc_netapi_send(ieee802154_netif->pid, pkt); +} + +static void test_netapi_send__raw_broadcast_ieee802154_short_packet(void) +{ + gnrc_netif_hdr_t *hdr; + gnrc_pktsnip_t *pkt = gnrc_pktbuf_add(NULL, "123ABCDEFG", + sizeof("123ABCDEFG"), + GNRC_NETTYPE_UNDEF); + uint16_t src_len = 2U; + + TEST_ASSERT_NOT_NULL(pkt); + TEST_ASSERT_EQUAL_INT(sizeof(src_len), + gnrc_netapi_set(ieee802154_netif->pid, NETOPT_SRC_LEN, + 0, &src_len, sizeof(src_len))); + gnrc_pktsnip_t *netif = gnrc_netif_hdr_build(NULL, 0, NULL, 0); + TEST_ASSERT_NOT_NULL(netif); + hdr = netif->data; + hdr->flags |= GNRC_NETIF_HDR_FLAGS_BROADCAST; + LL_PREPEND(pkt, netif); + gnrc_netapi_send(ieee802154_netif->pid, pkt); + /* reset src_len */ + src_len = 8U; + TEST_ASSERT_EQUAL_INT(sizeof(src_len), + gnrc_netapi_set(ieee802154_netif->pid, NETOPT_SRC_LEN, + 0, &src_len, sizeof(src_len))); +} + static void test_netapi_send__ipv6_unicast_ethernet_packet(void) { ipv6_hdr_t *ipv6_hdr; @@ -871,6 +1197,62 @@ static void test_netapi_send__ipv6_multicast_ethernet_packet(void) gnrc_netapi_send(ethernet_netif->pid, pkt); } +static void test_netapi_send__ipv6_unicast_ieee802154_packet(void) +{ + ipv6_hdr_t *ipv6_hdr; + uint8_t dst_netif[] = { LA1, LA2, LA3, LA4, LA5, LA6, LA7, LA8 + 1 }; + static const ipv6_addr_t dst_ipv6 = { .u8 = { LP1, LP2, LP3, LP4, + LP5, LP6, LP7, LP8, + LA1 ^ 0x2, LA2, LA3, 0xff, + 0xfe, LA4, LA5, LA6 + 1} }; + static const ipv6_addr_t src_ipv6 = { .u8 = IEEE802154_IPV6_LL }; + gnrc_pktsnip_t *payload = gnrc_pktbuf_add(NULL, "ABCDEFG", + sizeof("ABCDEFG"), + GNRC_NETTYPE_UNDEF); + TEST_ASSERT_NOT_NULL(payload); + /* we don't send through gnrc_ipv6 (because we are lazy and don't want + * to update the neighbor cache ;-)) so we need to set the IPv6 source + * address */ + gnrc_pktsnip_t *pkt = gnrc_ipv6_hdr_build(payload, &src_ipv6, &dst_ipv6); + TEST_ASSERT_NOT_NULL(pkt); + ipv6_hdr = pkt->data; + ipv6_hdr->len = byteorder_htons(sizeof("ABCDEFG")); + ipv6_hdr->nh = PROTNUM_IPV6_NONXT; + ipv6_hdr->hl = ieee802154_netif->cur_hl; + gnrc_pktsnip_t *netif = gnrc_netif_hdr_build(NULL, 0, dst_netif, + sizeof(dst_netif)); + TEST_ASSERT_NOT_NULL(netif); + LL_PREPEND(pkt, netif); + gnrc_netapi_send(ieee802154_netif->pid, pkt); +} + +static void test_netapi_send__ipv6_multicast_ieee802154_packet(void) +{ + ipv6_hdr_t *ipv6_hdr; + gnrc_netif_hdr_t *netif_hdr; + static const ipv6_addr_t src_ipv6 = { .u8 = IEEE802154_IPV6_LL }; + gnrc_pktsnip_t *payload = gnrc_pktbuf_add(NULL, "ABCDEFG", + sizeof("ABCDEFG"), + GNRC_NETTYPE_UNDEF); + TEST_ASSERT_NOT_NULL(payload); + /* we don't send through gnrc_ipv6 (because we are lazy and don't want + * to update the neighbor cache ;-)) so we need to set the IPv6 source + * address */ + gnrc_pktsnip_t *pkt = gnrc_ipv6_hdr_build(payload, &src_ipv6, + &ipv6_addr_all_nodes_link_local); + TEST_ASSERT_NOT_NULL(pkt); + ipv6_hdr = pkt->data; + ipv6_hdr->len = byteorder_htons(sizeof("ABCDEFG")); + ipv6_hdr->nh = PROTNUM_IPV6_NONXT; + ipv6_hdr->hl = ieee802154_netif->cur_hl; + gnrc_pktsnip_t *netif = gnrc_netif_hdr_build(NULL, 0, NULL, 0); + TEST_ASSERT_NOT_NULL(netif); + netif_hdr = netif->data; + netif_hdr->flags |= GNRC_NETIF_HDR_FLAGS_MULTICAST; + LL_PREPEND(pkt, netif); + gnrc_netapi_send(ieee802154_netif->pid, pkt); +} + static void test_netapi_recv__empty_ethernet_payload(void) { static const uint8_t data[] = { LA1, LA2, LA3, LA6, LA7, LA8, @@ -881,6 +1263,19 @@ static void test_netapi_recv__empty_ethernet_payload(void) _test_trigger_recv(ethernet_netif, data, sizeof(data)); } +static void test_netapi_recv__empty_ieee802154_payload(void) +{ + static const uint8_t data[] = { 0x41, 0xdc, /* FCF */ + 0x03, /* Sequence number */ + 0x00, 0x00, /* Destination PAN */ + LA8, LA7, LA6, LA5, LA4, LA3, LA2, LA1, + LA8 + 1, LA7, LA6, LA5, LA4, LA3, LA2, + LA1 }; + + puts("pktdump dumping IEEE 802.15.4 packet with empty payload"); + _test_trigger_recv(ieee802154_netif, data, sizeof(data)); +} + static void test_netapi_recv__raw_ethernet_payload(void) { static const uint8_t data[] = { LA1, LA2, LA3, LA6, LA7, LA8, @@ -891,6 +1286,19 @@ static void test_netapi_recv__raw_ethernet_payload(void) _test_trigger_recv(ethernet_netif, data, sizeof(data)); } +static void test_netapi_recv__raw_ieee802154_payload(void) +{ + static const uint8_t data[] = { 0x41, 0xdc, /* FCF */ + 0x03, /* Sequence number */ + 0x00, 0x00, /* Destination PAN */ + LA8, LA7, LA6, LA5, LA4, LA3, LA2, LA1, + LA8 + 1, LA7, LA6, LA5, LA4, LA3, LA2, + LA1, 0x12, 0x34, 0x45, 0x56 }; + + puts("pktdump dumping IEEE 802.15.4 packet with payload 12 34 45 56"); + _test_trigger_recv(ieee802154_netif, data, sizeof(data)); +} + static void test_netapi_recv__ipv6_ethernet_payload(void) { static const uint8_t data[] = { LA1, LA2, LA3, LA6, LA7, LA8, @@ -971,6 +1379,7 @@ static Test *embunit_tests_gnrc_netif2(void) new_TestFixture(test_netapi_set__6LO_IPHC), new_TestFixture(test_netapi_set__ADDRESS), new_TestFixture(test_netapi_set__ADDRESS_LONG), + new_TestFixture(test_netapi_set__SRC_LEN), /* only add tests not involving output here */ }; EMB_UNIT_TESTCALLER(tests, _set_up, NULL, fixtures); @@ -985,16 +1394,39 @@ int main(void) _get_netdev_address); netdev_test_set_set_cb((netdev_test_t *)ethernet_dev, NETOPT_ADDRESS, _set_netdev_address); + netdev_test_set_get_cb((netdev_test_t *)ieee802154_dev, NETOPT_ADDRESS, + _get_netdev_address); + netdev_test_set_set_cb((netdev_test_t *)ieee802154_dev, NETOPT_ADDRESS, + _set_netdev_address); + netdev_test_set_get_cb((netdev_test_t *)ieee802154_dev, NETOPT_ADDRESS_LONG, + _get_netdev_address_long); + netdev_test_set_set_cb((netdev_test_t *)ieee802154_dev, NETOPT_ADDRESS_LONG, + _set_netdev_address_long); + netdev_test_set_get_cb((netdev_test_t *)ieee802154_dev, NETOPT_SRC_LEN, + _get_netdev_src_len); + netdev_test_set_set_cb((netdev_test_t *)ieee802154_dev, NETOPT_SRC_LEN, + _set_netdev_src_len); TESTS_START(); TESTS_RUN(embunit_tests_gnrc_netif2()); TESTS_END(); /* add netapi send and receive tests here */ test_netapi_send__raw_unicast_ethernet_packet(); test_netapi_send__raw_broadcast_ethernet_packet(); + test_netapi_send__raw_unicast_ieee802154_long_long_packet(); + test_netapi_send__raw_unicast_ieee802154_long_short_packet(); + test_netapi_send__raw_unicast_ieee802154_short_long_packet1(); + test_netapi_send__raw_unicast_ieee802154_short_long_packet2(); + test_netapi_send__raw_unicast_ieee802154_short_short_packet(); + test_netapi_send__raw_broadcast_ieee802154_long_packet(); + test_netapi_send__raw_broadcast_ieee802154_short_packet(); test_netapi_send__ipv6_unicast_ethernet_packet(); test_netapi_send__ipv6_multicast_ethernet_packet(); + test_netapi_send__ipv6_unicast_ieee802154_packet(); + test_netapi_send__ipv6_multicast_ieee802154_packet(); test_netapi_recv__empty_ethernet_payload(); + test_netapi_recv__empty_ieee802154_payload(); test_netapi_recv__raw_ethernet_payload(); + test_netapi_recv__raw_ieee802154_payload(); test_netapi_recv__ipv6_ethernet_payload(); return 0; } @@ -1013,6 +1445,9 @@ static inline gnrc_pktsnip_t *_mock_netif_recv(gnrc_netif2_t * netif) } static uint8_t ethernet_l2addr[] = ETHERNET_SRC; +static uint8_t ieee802154_l2addr_long[] = IEEE802154_LONG_SRC; +static uint8_t ieee802154_l2addr_short[] = IEEE802154_SHORT_SRC; +static uint16_t ieee802154_l2addr_len = 8U; static int _get_netdev_address(netdev_t *dev, void *value, size_t max_len) { @@ -1021,15 +1456,68 @@ static int _get_netdev_address(netdev_t *dev, void *value, size_t max_len) memcpy(value, ethernet_l2addr, sizeof(ethernet_l2addr)); return sizeof(ethernet_l2addr); } + else if (dev == ieee802154_dev) { + assert(max_len >= sizeof(ieee802154_l2addr_short)); + memcpy(value, ieee802154_l2addr_short, sizeof(ieee802154_l2addr_short)); + return sizeof(ieee802154_l2addr_short); + } return -ENOTSUP; } -static int _set_netdev_address(netdev_t *dev, const void *value, size_t value_len) +static int _set_netdev_address(netdev_t *dev, const void *value, + size_t value_len) { if (dev == ethernet_dev) { assert(value_len <= sizeof(ethernet_l2addr)); memcpy(ethernet_l2addr, value, value_len); return value_len; } + else if (dev == ieee802154_dev) { + assert(value_len <= sizeof(ieee802154_l2addr_short)); + memcpy(ieee802154_l2addr_short, value, value_len); + return value_len; + } + return -ENOTSUP; +} + +static int _get_netdev_address_long(netdev_t *dev, void *value, size_t max_len) +{ + if (dev == ieee802154_dev) { + assert(max_len >= sizeof(ieee802154_l2addr_long)); + memcpy(value, ieee802154_l2addr_long, sizeof(ieee802154_l2addr_long)); + return sizeof(ieee802154_l2addr_long); + } + return -ENOTSUP; +} + +static int _set_netdev_address_long(netdev_t *dev, const void *value, + size_t value_len) +{ + if (dev == ieee802154_dev) { + assert(value_len <= sizeof(ieee802154_l2addr_long)); + memcpy(ieee802154_l2addr_long, value, value_len); + return value_len; + } + return -ENOTSUP; +} + +static int _get_netdev_src_len(netdev_t *dev, void *value, size_t max_len) +{ + if (dev == ieee802154_dev) { + assert(max_len == sizeof(uint16_t)); + *((uint16_t *)value) = ieee802154_l2addr_len; + return sizeof(uint16_t); + } + return -ENOTSUP; +} + +static int _set_netdev_src_len(netdev_t *dev, const void *value, + size_t value_len) +{ + if (dev == ieee802154_dev) { + assert(value_len == sizeof(uint16_t)); + ieee802154_l2addr_len = *((uint16_t *)value); + return sizeof(uint16_t); + } return -ENOTSUP; } diff --git a/tests/gnrc_netif2/tests/01-run.py b/tests/gnrc_netif2/tests/01-run.py index 584bf4465b763eb7a78255abe6cb04888af6447e..aab476114f5a7ca8fdfbf83bb17051e21989b9de 100755 --- a/tests/gnrc_netif2/tests/01-run.py +++ b/tests/gnrc_netif2/tests/01-run.py @@ -27,6 +27,42 @@ def testfunc(child): child.expect("00000000 FF FF FF FF FF FF 3E E6 B5 22 FD 0A " + "FF FF 41 42") child.expect("00000010 43 44 45 46 47 00") + # test_netapi_send__raw_unicast_ieee802154_long_long_packet + child.expect(r"Sending data from IEEE 802\.15\.4 device:") + child.expect("00000000 41 DC 00 00 00 0B FD 22 19 0F B5 E6 " + + "3E 0A FD 22") + child.expect("00000010 19 0F B5 E6 3E 31 32 33 41 42 43 44 " + + "45 46 47 00") + # test_netapi_send__raw_unicast_ieee802154_long_short_packet + child.expect(r"Sending data from IEEE 802\.15\.4 device:") + child.expect("00000000 41 D8 01 00 00 0B FD 0A FD 22 19 0F " + + "B5 E6 3E 31") + child.expect("00000010 32 33 41 42 43 44 45 46 47 00") + # test_netapi_send__raw_unicast_ieee802154_short_long_packet1 + child.expect(r"Sending data from IEEE 802\.15\.4 device:") + child.expect("00000000 41 9C 02 00 00 0B FD 22 19 0F B5 E6 " + + "3E 0A FD 31") + child.expect("00000010 32 33 41 42 43 44 45 46 47 00") + # test_netapi_send__raw_unicast_ieee802154_short_long_packet2 + child.expect(r"Sending data from IEEE 802\.15\.4 device:") + child.expect("00000000 41 9C 03 00 00 0B FD 22 19 0F B5 E6 " + + "3E 0A FD 31") + child.expect("00000010 32 33 41 42 43 44 45 46 47 00") + # test_netapi_send__raw_unicast_ieee802154_short_short_packet + child.expect(r"Sending data from IEEE 802\.15\.4 device:") + child.expect("00000000 41 98 04 00 00 0B FD 0A FD 31 32 33 " + + "41 42 43 44") + child.expect("00000010 45 46 47 00") + # test_netapi_send__raw_broadcast_ieee802154_long_packet + child.expect(r"Sending data from IEEE 802\.15\.4 device:") + child.expect("00000000 41 D8 05 00 00 FF FF 0A FD 22 19 0F " + + "B5 E6 3E 31") + child.expect("00000010 32 33 41 42 43 44 45 46 47 00") + # test_netapi_send__raw_broadcast_ieee802154_short_packet + child.expect(r"Sending data from IEEE 802\.15\.4 device:") + child.expect("00000000 41 98 06 00 00 FF FF 0A FD 31 32 33 " + + "41 42 43 44") + child.expect("00000010 45 46 47 00") # test_netapi_send__ipv6_unicast_ethernet_packet child.expect("Sending data from Ethernet device:") child.expect("00000000 3E E6 B5 0F 19 23 3E E6 B5 22 FD 0A 86 DD 60 00") @@ -39,6 +75,19 @@ def testfunc(child): child.expect("00000010 00 00 00 08 3B 40 FE 80 00 00 00 00 00 00 3C E6") child.expect("00000020 B5 FF FE 22 FD 0A FF 02 00 00 00 00 00 00 00 00") child.expect("00000030 00 00 00 00 00 01 41 42 43 44 45 46 47 00") + # test_netapi_send__ipv6_unicast_ieee802154_packet + child.expect("Sending data from IEEE 802.15.4 device:") + child.expect("00000000 41 DC 07 00 00 0B FD 22 19 0F B5 E6 3E 0A FD 22") + child.expect("00000010 19 0F B5 E6 3E 60 00 00 00 00 08 3B 40 FE 80 00") + child.expect("00000020 00 00 00 00 00 3C E6 B5 0F 19 22 FD 0A FE 80 00") + child.expect("00000030 00 00 00 00 00 3C E6 B5 FF FE 0F 19 23 41 42 43") + child.expect("00000040 44 45 46 47 00") + # test_netapi_send__ipv6_multicast_ieee802154_packet + child.expect("Sending data from IEEE 802.15.4 device:") + child.expect("00000000 41 D8 08 00 00 FF FF 0A FD 22 19 0F B5 E6 3E 60") + child.expect("00000010 00 00 00 00 08 3B 40 FE 80 00 00 00 00 00 00 3C") + child.expect("00000020 E6 B5 0F 19 22 FD 0A FF 02 00 00 00 00 00 00 00") + child.expect("00000030 00 00 00 00 00 00 01 41 42 43 44 45 46 47 00") # test_netapi_recv__empty_ethernet_payload child.expect("pktdump dumping Ethernet packet with empty payload") child.expect("PKTDUMP: data received:") @@ -49,6 +98,16 @@ def testfunc(child): child.expect("src_l2addr: 3e:e6:b5:22:fd:0b") child.expect("dst_l2addr: 3e:e6:b5:22:fd:0a") child.expect("~~ PKT - 2 snips, total size: 20 byte") + # test_netapi_recv__empty_ieee802154_payload + child.expect(r"pktdump dumping IEEE 802\.15\.4 packet with empty payload") + child.expect("PKTDUMP: data received:") + child.expect(r"~~ SNIP 0 - size: 0 byte, type: NETTYPE_UNDEF \(0\)") + child.expect(r"00000000~~ SNIP 1 - size: 24 byte, type: NETTYPE_NETIF \(-1\)") + child.expect("if_pid: 7 rssi: 0 lqi: 0") + child.expect("flags: 0x0") + child.expect("src_l2addr: 3e:e6:b5:0f:19:22:fd:0b") + child.expect("dst_l2addr: 3e:e6:b5:0f:19:22:fd:0a") + child.expect("~~ PKT - 2 snips, total size: 24 byte") # test_netapi_recv__raw_ethernet_payload child.expect("pktdump dumping Ethernet packet with payload 12 34 45 56") child.expect("PKTDUMP: data received:") @@ -60,6 +119,17 @@ def testfunc(child): child.expect("src_l2addr: 3e:e6:b5:22:fd:0b") child.expect("dst_l2addr: 3e:e6:b5:22:fd:0a") child.expect("~~ PKT - 2 snips, total size: 24 byte") + # test_netapi_recv__raw_ieee802154_payload + child.expect(r"pktdump dumping IEEE 802\.15\.4 packet with payload 12 34 45 56") + child.expect("PKTDUMP: data received:") + child.expect(r"~~ SNIP 0 - size: 4 byte, type: NETTYPE_UNDEF \(0\)") + child.expect("00000000 12 34 45 56") + child.expect(r"~~ SNIP 1 - size: 24 byte, type: NETTYPE_NETIF \(-1\)") + child.expect("if_pid: 7 rssi: 0 lqi: 0") + child.expect("flags: 0x0") + child.expect("src_l2addr: 3e:e6:b5:0f:19:22:fd:0b") + child.expect("dst_l2addr: 3e:e6:b5:0f:19:22:fd:0a") + child.expect("~~ PKT - 2 snips, total size: 28 byte") # test_netapi_recv__ipv6_ethernet_payload child.expect("pktdump dumping IPv6 over Ethernet packet with payload 01") child.expect("PKTDUMP: data received:")