diff --git a/features/nanostack/FEATURE_ETHERNET_HOST/TOOLCHAIN_ARM/TARGET_LIKE_CORTEX_M0/libnanostack_armcc_Cortex-M0_ethernet_host.ar b/features/nanostack/FEATURE_ETHERNET_HOST/TOOLCHAIN_ARM/TARGET_LIKE_CORTEX_M0/libnanostack_armcc_Cortex-M0_ethernet_host.ar index ef189b631b4..11fcaae29ba 100644 Binary files a/features/nanostack/FEATURE_ETHERNET_HOST/TOOLCHAIN_ARM/TARGET_LIKE_CORTEX_M0/libnanostack_armcc_Cortex-M0_ethernet_host.ar and b/features/nanostack/FEATURE_ETHERNET_HOST/TOOLCHAIN_ARM/TARGET_LIKE_CORTEX_M0/libnanostack_armcc_Cortex-M0_ethernet_host.ar differ diff --git a/features/nanostack/FEATURE_ETHERNET_HOST/TOOLCHAIN_ARM/TARGET_M3/libnanostack_armcc_Cortex-M3_ethernet_host.ar b/features/nanostack/FEATURE_ETHERNET_HOST/TOOLCHAIN_ARM/TARGET_M3/libnanostack_armcc_Cortex-M3_ethernet_host.ar index f6b57254a58..6c2b9de10e9 100644 Binary files a/features/nanostack/FEATURE_ETHERNET_HOST/TOOLCHAIN_ARM/TARGET_M3/libnanostack_armcc_Cortex-M3_ethernet_host.ar and b/features/nanostack/FEATURE_ETHERNET_HOST/TOOLCHAIN_ARM/TARGET_M3/libnanostack_armcc_Cortex-M3_ethernet_host.ar differ diff --git a/features/nanostack/FEATURE_ETHERNET_HOST/TOOLCHAIN_ARM/TARGET_RTOS_M4_M7/libnanostack_armcc_Cortex-M3_ethernet_host.ar b/features/nanostack/FEATURE_ETHERNET_HOST/TOOLCHAIN_ARM/TARGET_RTOS_M4_M7/libnanostack_armcc_Cortex-M3_ethernet_host.ar index f6b57254a58..6c2b9de10e9 100644 Binary files a/features/nanostack/FEATURE_ETHERNET_HOST/TOOLCHAIN_ARM/TARGET_RTOS_M4_M7/libnanostack_armcc_Cortex-M3_ethernet_host.ar and b/features/nanostack/FEATURE_ETHERNET_HOST/TOOLCHAIN_ARM/TARGET_RTOS_M4_M7/libnanostack_armcc_Cortex-M3_ethernet_host.ar differ diff --git a/features/nanostack/FEATURE_ETHERNET_HOST/TOOLCHAIN_GCC/TARGET_LIKE_CORTEX_M0/libnanostack_arm-none-eabi-gcc_Cortex-M0_ethernet_host.a b/features/nanostack/FEATURE_ETHERNET_HOST/TOOLCHAIN_GCC/TARGET_LIKE_CORTEX_M0/libnanostack_arm-none-eabi-gcc_Cortex-M0_ethernet_host.a index 7e2f74f62e9..87286229924 100644 Binary files a/features/nanostack/FEATURE_ETHERNET_HOST/TOOLCHAIN_GCC/TARGET_LIKE_CORTEX_M0/libnanostack_arm-none-eabi-gcc_Cortex-M0_ethernet_host.a and b/features/nanostack/FEATURE_ETHERNET_HOST/TOOLCHAIN_GCC/TARGET_LIKE_CORTEX_M0/libnanostack_arm-none-eabi-gcc_Cortex-M0_ethernet_host.a differ diff --git a/features/nanostack/FEATURE_ETHERNET_HOST/TOOLCHAIN_GCC/TARGET_M3/libnanostack_arm-none-eabi-gcc_Cortex-M3_ethernet_host.a b/features/nanostack/FEATURE_ETHERNET_HOST/TOOLCHAIN_GCC/TARGET_M3/libnanostack_arm-none-eabi-gcc_Cortex-M3_ethernet_host.a index ce9fb9966c8..0dc7129377b 100644 Binary files a/features/nanostack/FEATURE_ETHERNET_HOST/TOOLCHAIN_GCC/TARGET_M3/libnanostack_arm-none-eabi-gcc_Cortex-M3_ethernet_host.a and b/features/nanostack/FEATURE_ETHERNET_HOST/TOOLCHAIN_GCC/TARGET_M3/libnanostack_arm-none-eabi-gcc_Cortex-M3_ethernet_host.a differ diff --git a/features/nanostack/FEATURE_ETHERNET_HOST/TOOLCHAIN_GCC/TARGET_RTOS_M4_M7/libnanostack_arm-none-eabi-gcc_Cortex-M3_ethernet_host.a b/features/nanostack/FEATURE_ETHERNET_HOST/TOOLCHAIN_GCC/TARGET_RTOS_M4_M7/libnanostack_arm-none-eabi-gcc_Cortex-M3_ethernet_host.a index ce9fb9966c8..0dc7129377b 100644 Binary files a/features/nanostack/FEATURE_ETHERNET_HOST/TOOLCHAIN_GCC/TARGET_RTOS_M4_M7/libnanostack_arm-none-eabi-gcc_Cortex-M3_ethernet_host.a and b/features/nanostack/FEATURE_ETHERNET_HOST/TOOLCHAIN_GCC/TARGET_RTOS_M4_M7/libnanostack_arm-none-eabi-gcc_Cortex-M3_ethernet_host.a differ diff --git a/features/nanostack/FEATURE_ETHERNET_HOST/TOOLCHAIN_IAR/TARGET_LIKE_CORTEX_M0/libnanostack_iccarm_Cortex-M0_ethernet_host.a b/features/nanostack/FEATURE_ETHERNET_HOST/TOOLCHAIN_IAR/TARGET_LIKE_CORTEX_M0/libnanostack_iccarm_Cortex-M0_ethernet_host.a index 07df41cf84c..8a77a92af7d 100644 Binary files a/features/nanostack/FEATURE_ETHERNET_HOST/TOOLCHAIN_IAR/TARGET_LIKE_CORTEX_M0/libnanostack_iccarm_Cortex-M0_ethernet_host.a and b/features/nanostack/FEATURE_ETHERNET_HOST/TOOLCHAIN_IAR/TARGET_LIKE_CORTEX_M0/libnanostack_iccarm_Cortex-M0_ethernet_host.a differ diff --git a/features/nanostack/FEATURE_ETHERNET_HOST/TOOLCHAIN_IAR/TARGET_M3/libnanostack_iccarm_Cortex-M3_ethernet_host.a b/features/nanostack/FEATURE_ETHERNET_HOST/TOOLCHAIN_IAR/TARGET_M3/libnanostack_iccarm_Cortex-M3_ethernet_host.a index b1c3bd18d40..f365c568c6b 100644 Binary files a/features/nanostack/FEATURE_ETHERNET_HOST/TOOLCHAIN_IAR/TARGET_M3/libnanostack_iccarm_Cortex-M3_ethernet_host.a and b/features/nanostack/FEATURE_ETHERNET_HOST/TOOLCHAIN_IAR/TARGET_M3/libnanostack_iccarm_Cortex-M3_ethernet_host.a differ diff --git a/features/nanostack/FEATURE_ETHERNET_HOST/TOOLCHAIN_IAR/TARGET_RTOS_M4_M7/libnanostack_iccarm_Cortex-M3_ethernet_host.a b/features/nanostack/FEATURE_ETHERNET_HOST/TOOLCHAIN_IAR/TARGET_RTOS_M4_M7/libnanostack_iccarm_Cortex-M3_ethernet_host.a index b1c3bd18d40..f365c568c6b 100644 Binary files a/features/nanostack/FEATURE_ETHERNET_HOST/TOOLCHAIN_IAR/TARGET_RTOS_M4_M7/libnanostack_iccarm_Cortex-M3_ethernet_host.a and b/features/nanostack/FEATURE_ETHERNET_HOST/TOOLCHAIN_IAR/TARGET_RTOS_M4_M7/libnanostack_iccarm_Cortex-M3_ethernet_host.a differ diff --git a/features/nanostack/FEATURE_LOWPAN_BORDER_ROUTER/TOOLCHAIN_ARM/TARGET_LIKE_CORTEX_M0/libnanostack_armcc_Cortex-M0_lowpan_border_router.ar b/features/nanostack/FEATURE_LOWPAN_BORDER_ROUTER/TOOLCHAIN_ARM/TARGET_LIKE_CORTEX_M0/libnanostack_armcc_Cortex-M0_lowpan_border_router.ar old mode 100755 new mode 100644 index d7dec0f5724..868ad25fcca Binary files a/features/nanostack/FEATURE_LOWPAN_BORDER_ROUTER/TOOLCHAIN_ARM/TARGET_LIKE_CORTEX_M0/libnanostack_armcc_Cortex-M0_lowpan_border_router.ar and b/features/nanostack/FEATURE_LOWPAN_BORDER_ROUTER/TOOLCHAIN_ARM/TARGET_LIKE_CORTEX_M0/libnanostack_armcc_Cortex-M0_lowpan_border_router.ar differ diff --git a/features/nanostack/FEATURE_LOWPAN_BORDER_ROUTER/TOOLCHAIN_ARM/TARGET_M3/libnanostack_armcc_Cortex-M3_lowpan_border_router.ar b/features/nanostack/FEATURE_LOWPAN_BORDER_ROUTER/TOOLCHAIN_ARM/TARGET_M3/libnanostack_armcc_Cortex-M3_lowpan_border_router.ar old mode 100755 new mode 100644 index 68530cb7294..50026ea69cb Binary files a/features/nanostack/FEATURE_LOWPAN_BORDER_ROUTER/TOOLCHAIN_ARM/TARGET_M3/libnanostack_armcc_Cortex-M3_lowpan_border_router.ar and b/features/nanostack/FEATURE_LOWPAN_BORDER_ROUTER/TOOLCHAIN_ARM/TARGET_M3/libnanostack_armcc_Cortex-M3_lowpan_border_router.ar differ diff --git a/features/nanostack/FEATURE_LOWPAN_BORDER_ROUTER/TOOLCHAIN_ARM/TARGET_RTOS_M4_M7/libnanostack_armcc_Cortex-M3_lowpan_border_router.ar b/features/nanostack/FEATURE_LOWPAN_BORDER_ROUTER/TOOLCHAIN_ARM/TARGET_RTOS_M4_M7/libnanostack_armcc_Cortex-M3_lowpan_border_router.ar old mode 100755 new mode 100644 index 68530cb7294..50026ea69cb Binary files a/features/nanostack/FEATURE_LOWPAN_BORDER_ROUTER/TOOLCHAIN_ARM/TARGET_RTOS_M4_M7/libnanostack_armcc_Cortex-M3_lowpan_border_router.ar and b/features/nanostack/FEATURE_LOWPAN_BORDER_ROUTER/TOOLCHAIN_ARM/TARGET_RTOS_M4_M7/libnanostack_armcc_Cortex-M3_lowpan_border_router.ar differ diff --git a/features/nanostack/FEATURE_LOWPAN_BORDER_ROUTER/TOOLCHAIN_GCC/TARGET_LIKE_CORTEX_M0/libnanostack_arm-none-eabi-gcc_Cortex-M0_lowpan_border_router.a b/features/nanostack/FEATURE_LOWPAN_BORDER_ROUTER/TOOLCHAIN_GCC/TARGET_LIKE_CORTEX_M0/libnanostack_arm-none-eabi-gcc_Cortex-M0_lowpan_border_router.a old mode 100755 new mode 100644 index f555ad50dbd..e06ba6c839f Binary files a/features/nanostack/FEATURE_LOWPAN_BORDER_ROUTER/TOOLCHAIN_GCC/TARGET_LIKE_CORTEX_M0/libnanostack_arm-none-eabi-gcc_Cortex-M0_lowpan_border_router.a and b/features/nanostack/FEATURE_LOWPAN_BORDER_ROUTER/TOOLCHAIN_GCC/TARGET_LIKE_CORTEX_M0/libnanostack_arm-none-eabi-gcc_Cortex-M0_lowpan_border_router.a differ diff --git a/features/nanostack/FEATURE_LOWPAN_BORDER_ROUTER/TOOLCHAIN_GCC/TARGET_M3/libnanostack_arm-none-eabi-gcc_Cortex-M3_lowpan_border_router.a b/features/nanostack/FEATURE_LOWPAN_BORDER_ROUTER/TOOLCHAIN_GCC/TARGET_M3/libnanostack_arm-none-eabi-gcc_Cortex-M3_lowpan_border_router.a old mode 100755 new mode 100644 index bdc90e5078d..bba9eaef4dd Binary files a/features/nanostack/FEATURE_LOWPAN_BORDER_ROUTER/TOOLCHAIN_GCC/TARGET_M3/libnanostack_arm-none-eabi-gcc_Cortex-M3_lowpan_border_router.a and b/features/nanostack/FEATURE_LOWPAN_BORDER_ROUTER/TOOLCHAIN_GCC/TARGET_M3/libnanostack_arm-none-eabi-gcc_Cortex-M3_lowpan_border_router.a differ diff --git a/features/nanostack/FEATURE_LOWPAN_BORDER_ROUTER/TOOLCHAIN_GCC/TARGET_RTOS_M4_M7/libnanostack_arm-none-eabi-gcc_Cortex-M3_lowpan_border_router.a b/features/nanostack/FEATURE_LOWPAN_BORDER_ROUTER/TOOLCHAIN_GCC/TARGET_RTOS_M4_M7/libnanostack_arm-none-eabi-gcc_Cortex-M3_lowpan_border_router.a old mode 100755 new mode 100644 index bdc90e5078d..bba9eaef4dd Binary files a/features/nanostack/FEATURE_LOWPAN_BORDER_ROUTER/TOOLCHAIN_GCC/TARGET_RTOS_M4_M7/libnanostack_arm-none-eabi-gcc_Cortex-M3_lowpan_border_router.a and b/features/nanostack/FEATURE_LOWPAN_BORDER_ROUTER/TOOLCHAIN_GCC/TARGET_RTOS_M4_M7/libnanostack_arm-none-eabi-gcc_Cortex-M3_lowpan_border_router.a differ diff --git a/features/nanostack/FEATURE_LOWPAN_BORDER_ROUTER/TOOLCHAIN_IAR/TARGET_LIKE_CORTEX_M0/libnanostack_iccarm_Cortex-M0_lowpan_border_router.a b/features/nanostack/FEATURE_LOWPAN_BORDER_ROUTER/TOOLCHAIN_IAR/TARGET_LIKE_CORTEX_M0/libnanostack_iccarm_Cortex-M0_lowpan_border_router.a old mode 100755 new mode 100644 index 64c1ab63355..999329f66e2 Binary files a/features/nanostack/FEATURE_LOWPAN_BORDER_ROUTER/TOOLCHAIN_IAR/TARGET_LIKE_CORTEX_M0/libnanostack_iccarm_Cortex-M0_lowpan_border_router.a and b/features/nanostack/FEATURE_LOWPAN_BORDER_ROUTER/TOOLCHAIN_IAR/TARGET_LIKE_CORTEX_M0/libnanostack_iccarm_Cortex-M0_lowpan_border_router.a differ diff --git a/features/nanostack/FEATURE_LOWPAN_BORDER_ROUTER/TOOLCHAIN_IAR/TARGET_M3/libnanostack_iccarm_Cortex-M3_lowpan_border_router.a b/features/nanostack/FEATURE_LOWPAN_BORDER_ROUTER/TOOLCHAIN_IAR/TARGET_M3/libnanostack_iccarm_Cortex-M3_lowpan_border_router.a old mode 100755 new mode 100644 index b6ffed778cd..72c38c42fc8 Binary files a/features/nanostack/FEATURE_LOWPAN_BORDER_ROUTER/TOOLCHAIN_IAR/TARGET_M3/libnanostack_iccarm_Cortex-M3_lowpan_border_router.a and b/features/nanostack/FEATURE_LOWPAN_BORDER_ROUTER/TOOLCHAIN_IAR/TARGET_M3/libnanostack_iccarm_Cortex-M3_lowpan_border_router.a differ diff --git a/features/nanostack/FEATURE_LOWPAN_BORDER_ROUTER/TOOLCHAIN_IAR/TARGET_RTOS_M4_M7/libnanostack_iccarm_Cortex-M3_lowpan_border_router.a b/features/nanostack/FEATURE_LOWPAN_BORDER_ROUTER/TOOLCHAIN_IAR/TARGET_RTOS_M4_M7/libnanostack_iccarm_Cortex-M3_lowpan_border_router.a old mode 100755 new mode 100644 index b6ffed778cd..72c38c42fc8 Binary files a/features/nanostack/FEATURE_LOWPAN_BORDER_ROUTER/TOOLCHAIN_IAR/TARGET_RTOS_M4_M7/libnanostack_iccarm_Cortex-M3_lowpan_border_router.a and b/features/nanostack/FEATURE_LOWPAN_BORDER_ROUTER/TOOLCHAIN_IAR/TARGET_RTOS_M4_M7/libnanostack_iccarm_Cortex-M3_lowpan_border_router.a differ diff --git a/features/nanostack/FEATURE_LOWPAN_HOST/TOOLCHAIN_ARM/TARGET_LIKE_CORTEX_M0/libnanostack_armcc_Cortex-M0_lowpan_host.ar b/features/nanostack/FEATURE_LOWPAN_HOST/TOOLCHAIN_ARM/TARGET_LIKE_CORTEX_M0/libnanostack_armcc_Cortex-M0_lowpan_host.ar old mode 100755 new mode 100644 index b52b83611fc..73930b8d9e3 Binary files a/features/nanostack/FEATURE_LOWPAN_HOST/TOOLCHAIN_ARM/TARGET_LIKE_CORTEX_M0/libnanostack_armcc_Cortex-M0_lowpan_host.ar and b/features/nanostack/FEATURE_LOWPAN_HOST/TOOLCHAIN_ARM/TARGET_LIKE_CORTEX_M0/libnanostack_armcc_Cortex-M0_lowpan_host.ar differ diff --git a/features/nanostack/FEATURE_LOWPAN_HOST/TOOLCHAIN_ARM/TARGET_M3/libnanostack_armcc_Cortex-M3_lowpan_host.ar b/features/nanostack/FEATURE_LOWPAN_HOST/TOOLCHAIN_ARM/TARGET_M3/libnanostack_armcc_Cortex-M3_lowpan_host.ar old mode 100755 new mode 100644 index dab67dd9fd2..a1a5b5d2c19 Binary files a/features/nanostack/FEATURE_LOWPAN_HOST/TOOLCHAIN_ARM/TARGET_M3/libnanostack_armcc_Cortex-M3_lowpan_host.ar and b/features/nanostack/FEATURE_LOWPAN_HOST/TOOLCHAIN_ARM/TARGET_M3/libnanostack_armcc_Cortex-M3_lowpan_host.ar differ diff --git a/features/nanostack/FEATURE_LOWPAN_HOST/TOOLCHAIN_ARM/TARGET_RTOS_M4_M7/libnanostack_armcc_Cortex-M3_lowpan_host.ar b/features/nanostack/FEATURE_LOWPAN_HOST/TOOLCHAIN_ARM/TARGET_RTOS_M4_M7/libnanostack_armcc_Cortex-M3_lowpan_host.ar old mode 100755 new mode 100644 index dab67dd9fd2..a1a5b5d2c19 Binary files a/features/nanostack/FEATURE_LOWPAN_HOST/TOOLCHAIN_ARM/TARGET_RTOS_M4_M7/libnanostack_armcc_Cortex-M3_lowpan_host.ar and b/features/nanostack/FEATURE_LOWPAN_HOST/TOOLCHAIN_ARM/TARGET_RTOS_M4_M7/libnanostack_armcc_Cortex-M3_lowpan_host.ar differ diff --git a/features/nanostack/FEATURE_LOWPAN_HOST/TOOLCHAIN_GCC/TARGET_LIKE_CORTEX_M0/libnanostack_arm-none-eabi-gcc_Cortex-M0_lowpan_host.a b/features/nanostack/FEATURE_LOWPAN_HOST/TOOLCHAIN_GCC/TARGET_LIKE_CORTEX_M0/libnanostack_arm-none-eabi-gcc_Cortex-M0_lowpan_host.a old mode 100755 new mode 100644 index 062bff06d80..da5ab7d0c00 Binary files a/features/nanostack/FEATURE_LOWPAN_HOST/TOOLCHAIN_GCC/TARGET_LIKE_CORTEX_M0/libnanostack_arm-none-eabi-gcc_Cortex-M0_lowpan_host.a and b/features/nanostack/FEATURE_LOWPAN_HOST/TOOLCHAIN_GCC/TARGET_LIKE_CORTEX_M0/libnanostack_arm-none-eabi-gcc_Cortex-M0_lowpan_host.a differ diff --git a/features/nanostack/FEATURE_LOWPAN_HOST/TOOLCHAIN_GCC/TARGET_M3/libnanostack_arm-none-eabi-gcc_Cortex-M3_lowpan_host.a b/features/nanostack/FEATURE_LOWPAN_HOST/TOOLCHAIN_GCC/TARGET_M3/libnanostack_arm-none-eabi-gcc_Cortex-M3_lowpan_host.a old mode 100755 new mode 100644 index e11a2b71871..effa4503d3d Binary files a/features/nanostack/FEATURE_LOWPAN_HOST/TOOLCHAIN_GCC/TARGET_M3/libnanostack_arm-none-eabi-gcc_Cortex-M3_lowpan_host.a and b/features/nanostack/FEATURE_LOWPAN_HOST/TOOLCHAIN_GCC/TARGET_M3/libnanostack_arm-none-eabi-gcc_Cortex-M3_lowpan_host.a differ diff --git a/features/nanostack/FEATURE_LOWPAN_HOST/TOOLCHAIN_GCC/TARGET_RTOS_M4_M7/libnanostack_arm-none-eabi-gcc_Cortex-M3_lowpan_host.a b/features/nanostack/FEATURE_LOWPAN_HOST/TOOLCHAIN_GCC/TARGET_RTOS_M4_M7/libnanostack_arm-none-eabi-gcc_Cortex-M3_lowpan_host.a old mode 100755 new mode 100644 index e11a2b71871..effa4503d3d Binary files a/features/nanostack/FEATURE_LOWPAN_HOST/TOOLCHAIN_GCC/TARGET_RTOS_M4_M7/libnanostack_arm-none-eabi-gcc_Cortex-M3_lowpan_host.a and b/features/nanostack/FEATURE_LOWPAN_HOST/TOOLCHAIN_GCC/TARGET_RTOS_M4_M7/libnanostack_arm-none-eabi-gcc_Cortex-M3_lowpan_host.a differ diff --git a/features/nanostack/FEATURE_LOWPAN_HOST/TOOLCHAIN_IAR/TARGET_LIKE_CORTEX_M0/libnanostack_iccarm_Cortex-M0_lowpan_host.a b/features/nanostack/FEATURE_LOWPAN_HOST/TOOLCHAIN_IAR/TARGET_LIKE_CORTEX_M0/libnanostack_iccarm_Cortex-M0_lowpan_host.a old mode 100755 new mode 100644 index 24080c7d3af..9a179d06711 Binary files a/features/nanostack/FEATURE_LOWPAN_HOST/TOOLCHAIN_IAR/TARGET_LIKE_CORTEX_M0/libnanostack_iccarm_Cortex-M0_lowpan_host.a and b/features/nanostack/FEATURE_LOWPAN_HOST/TOOLCHAIN_IAR/TARGET_LIKE_CORTEX_M0/libnanostack_iccarm_Cortex-M0_lowpan_host.a differ diff --git a/features/nanostack/FEATURE_LOWPAN_HOST/TOOLCHAIN_IAR/TARGET_M3/libnanostack_iccarm_Cortex-M3_lowpan_host.a b/features/nanostack/FEATURE_LOWPAN_HOST/TOOLCHAIN_IAR/TARGET_M3/libnanostack_iccarm_Cortex-M3_lowpan_host.a old mode 100755 new mode 100644 index 9d331b9fe5a..3ca8e32cc38 Binary files a/features/nanostack/FEATURE_LOWPAN_HOST/TOOLCHAIN_IAR/TARGET_M3/libnanostack_iccarm_Cortex-M3_lowpan_host.a and b/features/nanostack/FEATURE_LOWPAN_HOST/TOOLCHAIN_IAR/TARGET_M3/libnanostack_iccarm_Cortex-M3_lowpan_host.a differ diff --git a/features/nanostack/FEATURE_LOWPAN_HOST/TOOLCHAIN_IAR/TARGET_RTOS_M4_M7/libnanostack_iccarm_Cortex-M3_lowpan_host.a b/features/nanostack/FEATURE_LOWPAN_HOST/TOOLCHAIN_IAR/TARGET_RTOS_M4_M7/libnanostack_iccarm_Cortex-M3_lowpan_host.a old mode 100755 new mode 100644 index 9d331b9fe5a..3ca8e32cc38 Binary files a/features/nanostack/FEATURE_LOWPAN_HOST/TOOLCHAIN_IAR/TARGET_RTOS_M4_M7/libnanostack_iccarm_Cortex-M3_lowpan_host.a and b/features/nanostack/FEATURE_LOWPAN_HOST/TOOLCHAIN_IAR/TARGET_RTOS_M4_M7/libnanostack_iccarm_Cortex-M3_lowpan_host.a differ diff --git a/features/nanostack/FEATURE_LOWPAN_ROUTER/TOOLCHAIN_ARM/TARGET_LIKE_CORTEX_M0/libnanostack_armcc_Cortex-M0_lowpan_router.ar b/features/nanostack/FEATURE_LOWPAN_ROUTER/TOOLCHAIN_ARM/TARGET_LIKE_CORTEX_M0/libnanostack_armcc_Cortex-M0_lowpan_router.ar old mode 100755 new mode 100644 index c0e19cd07ad..60ba4642341 Binary files a/features/nanostack/FEATURE_LOWPAN_ROUTER/TOOLCHAIN_ARM/TARGET_LIKE_CORTEX_M0/libnanostack_armcc_Cortex-M0_lowpan_router.ar and b/features/nanostack/FEATURE_LOWPAN_ROUTER/TOOLCHAIN_ARM/TARGET_LIKE_CORTEX_M0/libnanostack_armcc_Cortex-M0_lowpan_router.ar differ diff --git a/features/nanostack/FEATURE_LOWPAN_ROUTER/TOOLCHAIN_ARM/TARGET_M3/libnanostack_armcc_Cortex-M3_lowpan_router.ar b/features/nanostack/FEATURE_LOWPAN_ROUTER/TOOLCHAIN_ARM/TARGET_M3/libnanostack_armcc_Cortex-M3_lowpan_router.ar old mode 100755 new mode 100644 index 9554800c992..b5ae02ba962 Binary files a/features/nanostack/FEATURE_LOWPAN_ROUTER/TOOLCHAIN_ARM/TARGET_M3/libnanostack_armcc_Cortex-M3_lowpan_router.ar and b/features/nanostack/FEATURE_LOWPAN_ROUTER/TOOLCHAIN_ARM/TARGET_M3/libnanostack_armcc_Cortex-M3_lowpan_router.ar differ diff --git a/features/nanostack/FEATURE_LOWPAN_ROUTER/TOOLCHAIN_ARM/TARGET_RTOS_M4_M7/libnanostack_armcc_Cortex-M3_lowpan_router.ar b/features/nanostack/FEATURE_LOWPAN_ROUTER/TOOLCHAIN_ARM/TARGET_RTOS_M4_M7/libnanostack_armcc_Cortex-M3_lowpan_router.ar old mode 100755 new mode 100644 index 9554800c992..b5ae02ba962 Binary files a/features/nanostack/FEATURE_LOWPAN_ROUTER/TOOLCHAIN_ARM/TARGET_RTOS_M4_M7/libnanostack_armcc_Cortex-M3_lowpan_router.ar and b/features/nanostack/FEATURE_LOWPAN_ROUTER/TOOLCHAIN_ARM/TARGET_RTOS_M4_M7/libnanostack_armcc_Cortex-M3_lowpan_router.ar differ diff --git a/features/nanostack/FEATURE_LOWPAN_ROUTER/TOOLCHAIN_GCC/TARGET_LIKE_CORTEX_M0/libnanostack_arm-none-eabi-gcc_Cortex-M0_lowpan_router.a b/features/nanostack/FEATURE_LOWPAN_ROUTER/TOOLCHAIN_GCC/TARGET_LIKE_CORTEX_M0/libnanostack_arm-none-eabi-gcc_Cortex-M0_lowpan_router.a old mode 100755 new mode 100644 index 25799d3af8d..dacc9b074e7 Binary files a/features/nanostack/FEATURE_LOWPAN_ROUTER/TOOLCHAIN_GCC/TARGET_LIKE_CORTEX_M0/libnanostack_arm-none-eabi-gcc_Cortex-M0_lowpan_router.a and b/features/nanostack/FEATURE_LOWPAN_ROUTER/TOOLCHAIN_GCC/TARGET_LIKE_CORTEX_M0/libnanostack_arm-none-eabi-gcc_Cortex-M0_lowpan_router.a differ diff --git a/features/nanostack/FEATURE_LOWPAN_ROUTER/TOOLCHAIN_GCC/TARGET_M3/libnanostack_arm-none-eabi-gcc_Cortex-M3_lowpan_router.a b/features/nanostack/FEATURE_LOWPAN_ROUTER/TOOLCHAIN_GCC/TARGET_M3/libnanostack_arm-none-eabi-gcc_Cortex-M3_lowpan_router.a old mode 100755 new mode 100644 index b469e72576e..b13d56b71dc Binary files a/features/nanostack/FEATURE_LOWPAN_ROUTER/TOOLCHAIN_GCC/TARGET_M3/libnanostack_arm-none-eabi-gcc_Cortex-M3_lowpan_router.a and b/features/nanostack/FEATURE_LOWPAN_ROUTER/TOOLCHAIN_GCC/TARGET_M3/libnanostack_arm-none-eabi-gcc_Cortex-M3_lowpan_router.a differ diff --git a/features/nanostack/FEATURE_LOWPAN_ROUTER/TOOLCHAIN_GCC/TARGET_RTOS_M4_M7/libnanostack_arm-none-eabi-gcc_Cortex-M3_lowpan_router.a b/features/nanostack/FEATURE_LOWPAN_ROUTER/TOOLCHAIN_GCC/TARGET_RTOS_M4_M7/libnanostack_arm-none-eabi-gcc_Cortex-M3_lowpan_router.a old mode 100755 new mode 100644 index b469e72576e..b13d56b71dc Binary files a/features/nanostack/FEATURE_LOWPAN_ROUTER/TOOLCHAIN_GCC/TARGET_RTOS_M4_M7/libnanostack_arm-none-eabi-gcc_Cortex-M3_lowpan_router.a and b/features/nanostack/FEATURE_LOWPAN_ROUTER/TOOLCHAIN_GCC/TARGET_RTOS_M4_M7/libnanostack_arm-none-eabi-gcc_Cortex-M3_lowpan_router.a differ diff --git a/features/nanostack/FEATURE_LOWPAN_ROUTER/TOOLCHAIN_IAR/TARGET_LIKE_CORTEX_M0/libnanostack_iccarm_Cortex-M0_lowpan_router.a b/features/nanostack/FEATURE_LOWPAN_ROUTER/TOOLCHAIN_IAR/TARGET_LIKE_CORTEX_M0/libnanostack_iccarm_Cortex-M0_lowpan_router.a old mode 100755 new mode 100644 index 12be904ee09..f3fee65f35c Binary files a/features/nanostack/FEATURE_LOWPAN_ROUTER/TOOLCHAIN_IAR/TARGET_LIKE_CORTEX_M0/libnanostack_iccarm_Cortex-M0_lowpan_router.a and b/features/nanostack/FEATURE_LOWPAN_ROUTER/TOOLCHAIN_IAR/TARGET_LIKE_CORTEX_M0/libnanostack_iccarm_Cortex-M0_lowpan_router.a differ diff --git a/features/nanostack/FEATURE_LOWPAN_ROUTER/TOOLCHAIN_IAR/TARGET_M3/libnanostack_iccarm_Cortex-M3_lowpan_router.a b/features/nanostack/FEATURE_LOWPAN_ROUTER/TOOLCHAIN_IAR/TARGET_M3/libnanostack_iccarm_Cortex-M3_lowpan_router.a old mode 100755 new mode 100644 index 9d216ebd63c..04af103f7c1 Binary files a/features/nanostack/FEATURE_LOWPAN_ROUTER/TOOLCHAIN_IAR/TARGET_M3/libnanostack_iccarm_Cortex-M3_lowpan_router.a and b/features/nanostack/FEATURE_LOWPAN_ROUTER/TOOLCHAIN_IAR/TARGET_M3/libnanostack_iccarm_Cortex-M3_lowpan_router.a differ diff --git a/features/nanostack/FEATURE_LOWPAN_ROUTER/TOOLCHAIN_IAR/TARGET_RTOS_M4_M7/libnanostack_iccarm_Cortex-M3_lowpan_router.a b/features/nanostack/FEATURE_LOWPAN_ROUTER/TOOLCHAIN_IAR/TARGET_RTOS_M4_M7/libnanostack_iccarm_Cortex-M3_lowpan_router.a old mode 100755 new mode 100644 index 9d216ebd63c..04af103f7c1 Binary files a/features/nanostack/FEATURE_LOWPAN_ROUTER/TOOLCHAIN_IAR/TARGET_RTOS_M4_M7/libnanostack_iccarm_Cortex-M3_lowpan_router.a and b/features/nanostack/FEATURE_LOWPAN_ROUTER/TOOLCHAIN_IAR/TARGET_RTOS_M4_M7/libnanostack_iccarm_Cortex-M3_lowpan_router.a differ diff --git a/features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/docs/11_API_sockets.md b/features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/docs/11_API_sockets.md index ffbc38fc3c2..16ccb61fefb 100644 --- a/features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/docs/11_API_sockets.md +++ b/features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/docs/11_API_sockets.md @@ -82,16 +82,17 @@ Member|Description Event type|Description ----------|----------- `SOCKET_DATA`|Data received. -`SOCKET_BIND_DONE`|TCP connection ready. -`SOCKET_BIND_FAIL`|TCP connection failed. -`SOCKET_BIND_AUTH_FAIL`|TCP connection authentication failed. +`SOCKET_CONNECT_DONE`|TCP connection ready. +`SOCKET_CONNECT_FAIL`|TCP connection failed. +`SOCKET_CONNECT_AUTH_FAIL`|TCP connection authentication failed. `SOCKET_INCOMING_CONNECTION`|TCP connection state change from listen to establishment. `SOCKET_TX_FAIL`|Socket data send failed. `SOCKET_CONNECT_CLOSED`|TCP connection closed. `SOCKET_CONNECTION_RESET`|TCP connection reset. `SOCKET_NO_ROUTER`|No route available to destination. -`SOCKET_TX_DONE`|Last socket TX process done, in TCP case whole TCP process is ready. +`SOCKET_TX_DONE`|TX process done (one per datagram, or if stream will be called each time some data acknowledged) `SOCKET_NO_RAM `|If no RAM is present. +`SOCKET_CONNECTION_PROBLEM`|If TCP is suffering a connection problem (a soft event, it continues to retry). An example parsing socket event: @@ -102,7 +103,7 @@ An example parsing socket event: static uint8_t rx_buffer[APP_SOCK_RX_SIZE]; void main_receive -( +(SOCKET_NO_ROUTER void *cb ) { @@ -248,6 +249,31 @@ Parameter|Description
-6 bind2addrsel is not supported on this type of socket.
+### How to connect a socket + +To connect a socket to a remote host: + +``` +int8_t socket_connect +( + int8_t socket, + ns_address_t *address, + uint8_t randomly_take_src_numbers +) +``` + +Parameter|Description +---------|----------- +`socket`|The socket ID, which is used to connect to the remote host. +`address`|A pointer to an address_t structure that contains the address of the remote host. +`randomly_take_src_numbers`|Value 1 indicates that a randomly selected source port number is used. + +
+
Return value
+
0 Valid request.
+
-1 Fail.
+
+ ### How to read data from a socket To read received data from a socket: @@ -300,9 +326,9 @@ _Table 3-24_ describes the possible response events when the outcome of the func Response Event|Socket Type|Description --------------|-----------|----------- -`SOCKET_TX_DONE`|TCP/UDP|UDP link layer TX ready/TCP TX process ready by TCP _Acknowledgement_ (ACK). -`SOCKET_TX_FAIL`|UDP|UDP link layer TX fails. -`SOCKET_CONNECTION_RESET`|TCP|TX process fails and connection closed. +`SOCKET_TX_DONE`|TCP/UDP|UDP: link layer TX ready (d_len = length of datagram). TCP: some data acknowledged (d_len = unacknowledged data remaining in send queue). +`SOCKET_TX_FAIL`|TCP/UDP|UDP: link layer TX fails. TCP: transmit timeout (no ACKs) and connection closed. +`SOCKET_CONNECTION_RESET`|TCP|Either the peer reset the connection or there was a protocol error. Connection closed. To transmit data on an unconnected socket: @@ -364,7 +390,7 @@ The TCP socket configuration API offers three function calls, as shown in _Table Function|Description --------|----------- `socket_listen()`|Set socket to the listen state. -`socket_connect()`|Connect socket to a host. +`socket_accept()`|Accepts an incoming TCP connection. `socket_shutdown()`|Shut down socket connection. To set a TCP socket into the listen state: @@ -380,47 +406,50 @@ int8_t socket_listen Parameter|Description ---------|----------- `socket`|The socket ID that is to be set to the listen state. -`backlog`|The pending connections queue size. (Not yet implemented). +`backlog`|The pending connections queue size.
Return value
0 Valid request.
-
Note: This does not imply that the state of the socket has been successfully changed.
-1 Fail.
-To connect a socket to a remote host: +For connecting a socket, please refer to the section above [How to connect a socket](#how-to-connect-a-socket). + +There are three possible responses from the stack for `socket_connect( )`: + +- `SOCKET_CONNECT_DONE` + - TCP handshake ready. + +- `SOCKET_CONNECT_FAIL` + - TCP handshake fail - connection actively refused or protocol error. + +- `SOCKET_TX_FAIL` + - TCP handshake fail - timed out. + +For accepting an incoming TCP connection, use `socket_accept()` function. ``` -int8_t socket_connect +int8_t socket_accept() ( - int8_t socket, - ns_address_t *address, - uint8_t randomly_take_src_numbers + int8_t listen_socket_id, + ns_address_t *addr, + void (*passed_fptr) (void *) ) ``` Parameter|Description ---------|----------- -`socket`|The socket ID, which is used to connect to the remote host. -`address`|A pointer to an address_t structure that contains the address of the remote host. -`randomly_take_src_numbers`|Value 1 indicates that a randomly selected source port number is used. +`listen_socket_id`|The socket ID of the listening socket. +`addr`|Pointer to the address structure where you wish to save the address +`passed_fptr`|A function pointer to a function that is called whenever a data frame is received to the new socket
Return value
-
0 Valid request.
-
Note:This does not imply that the state of the socket has been successfully changed.
+
0 or greter than zero, i.e., id for the new socket.
-1 Fail.
-There are two possible responses from the stack for `socket_connect( )`: - -- `SOCKET_BIND_DONE` - - TCP handshake ready. - -- `SOCKET_CONNECT_FAIL_CLOSED` - - TCP handshake fail. - To shut down a TCP connection: ``` diff --git a/features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/docs/16_API_porting.md b/features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/docs/16_API_porting.md index c37e7ed8988..7ab23ea911d 100644 --- a/features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/docs/16_API_porting.md +++ b/features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/docs/16_API_porting.md @@ -59,7 +59,9 @@ initializing. ![NanostackRfPhy](img/NanostackRfPhy.png) -Applications use only `LoWPANNDInterface` or `ThreadInterface` directly to set up the network and provide a driver. Rest of the classes provide an abstration between Nanostack and Socket layers of mbed OS. +Applications use only `LoWPANNDInterface`, `ThreadInterface` or `NanostackEthernetInterface` +directly to set up the network and provide a driver. Rest of the classes provide an abstration +between Nanostack and Socket layers of mbed OS. See [NanostackRfPhy.h](https://github.com/ARMmbed/mbed-os/blob/master/features/nanostack/FEATURE_NANOSTACK/nanostack-interface/NanostackRfPhy.h) for an up-to-date header file and API. diff --git a/features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/docs/img/NanostackRfPhy.plantuml.txt b/features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/docs/img/NanostackRfPhy.plantuml.txt index b8a0a776b28..0428954f6e3 100644 --- a/features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/docs/img/NanostackRfPhy.plantuml.txt +++ b/features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/docs/img/NanostackRfPhy.plantuml.txt @@ -1,28 +1,66 @@ @startuml -class NanostackRfPhy { - +int8_t rf_register() - +int8_t rf_register() - +void get_mac_address(uint8_t *mac) - +void set_mac_address(uint8_t *mac) +package "mbed OS Socket abstraction" { + abstract class MeshInterface -|> NetworkInterface + + interface NetworkInterface { + +connect(); + +disconnect(); + +NetworkStack *get_stack(); + } + + interface NetworkStack } -class MeshInterfaceNanostack { +package "Nanostack PHY driver interface" { + interface NanostackPhy { + +int8_t phy_register() + +void get_mac_address(uint8_t *mac) + +void set_mac_address(uint8_t *mac) + } + NanostackPhy <|-- abstract class NanostackRfPhy + NanostackPhy <|-- abstract class NanostackEthernetPhy +} + +package "mesh API internals" { + class NanostackInterface { + {static} +NanostackInterface *get_stack() + #socket_open() + #socket_close() + #socket_bind() + #socket_listen() + #socket_connect() + #socket_accept() + #socket_send() + #socket_recv() + #socket_sendto() + #socket_recvfrom() + #socket_attach() + #setsockopt() + #getsockopt() + } + NetworkStack <|-- NanostackInterface + + abstract class MeshInterfaceNanostack { + +initialize(NanostackPhy *phy) + +connect() + +disconnect() + #NetworkStack *get_stack(void) + } + MeshInterface <|-- MeshInterfaceNanostack + NanostackPhy --o MeshInterfaceNanostack + MeshInterfaceNanostack -left-> NanostackInterface : get_stack() } -MeshInterfaceNanostack o-- NanostackRfPhy -MeshInterfaceNanostack o-- AbstractMesh -MeshInterfaceNanostack o-- NanostackInterface -class MeshInterface { +package "mbed-mesh-api" { + MeshInterfaceNanostack <|-- LoWPANNDInterface + MeshInterfaceNanostack <|-- ThreadInterface + MeshInterfaceNanostack <|-- NanostackEthernetInterface } -NanostackInterface --|> NetworkStack -MeshInterfaceNanostack --|> MeshInterface -MeshInterface --|> NetworkInterface -LoWPANNDInterface --|> MeshInterfaceNanostack -ThreadInterface --|> MeshInterfaceNanostack -AbstractMesh --|> AbstractNetworkInterface -class AbstractNetworkInterface +hide empty members +hide empty attributes +hide empty fields -@enduml \ No newline at end of file +@enduml diff --git a/features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/docs/img/NanostackRfPhy.png b/features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/docs/img/NanostackRfPhy.png index 1c392994a4e..9a794b5cbd4 100644 Binary files a/features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/docs/img/NanostackRfPhy.png and b/features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/docs/img/NanostackRfPhy.png differ diff --git a/features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/docs/img/mbedOS_sockets.plantumlt.txt b/features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/docs/img/mbedOS_sockets.plantumlt.txt new file mode 100644 index 00000000000..26f40b95ef3 --- /dev/null +++ b/features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/docs/img/mbedOS_sockets.plantumlt.txt @@ -0,0 +1,28 @@ +@startuml + +package "mbed OS Socket abstraction" { + interface NetworkStack + NetworkStack -o Socket + abstract class Socket + Socket <|-- UDPSocket + Socket <|-- TCPSocket + Socket <|-- TCPServer +} + +interface NetworkInterface +NetworkInterface --> NetworkStack : get_stack() +EthernetInterface --|> NetworkInterface +CellularInterface --|> NetworkInterface + +package "mbed-mesh-api" { + abstract class MeshInterfaceNanostack <|-- LoWPANNDInterface + MeshInterfaceNanostack <|-- ThreadInterface + MeshInterfaceNanostack --|> NetworkInterface +} + + +hide empty members +hide empty attributes +hide empty fields + +@enduml diff --git a/features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/docs/img/mbedOS_sockets.png b/features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/docs/img/mbedOS_sockets.png index 2a04be80159..9416663d427 100644 Binary files a/features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/docs/img/mbedOS_sockets.png and b/features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/docs/img/mbedOS_sockets.png differ diff --git a/features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/docs/img/node_to_server.png b/features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/docs/img/node_to_server.png index 51af6c6a0ed..4a3e4b590c9 100644 Binary files a/features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/docs/img/node_to_server.png and b/features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/docs/img/node_to_server.png differ diff --git a/features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/docs/thread_APIs.md b/features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/docs/thread_APIs.md index e4687f43001..e67305d2013 100644 --- a/features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/docs/thread_APIs.md +++ b/features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/docs/thread_APIs.md @@ -380,14 +380,37 @@ Parameter|Description ### Collecting Thread management information -The function `thread_management_info_get()` is used to collect Thread management related information from the Leader Router. +#### Fetching Thread Management Information + +The function `thread_management_get()` is used to collect Thread management related information from the any device in the Thread network. + +Parameter|Description +-----------|----------- +`instance_id`|Instance ID of the management session. +`dst_addr` |Destination address; the address of a remote device from whome it is desirable to fetch management information. If however, the address is not provided, a request is sent to the leader of the network for this purpose. If a native commissioner is used, the request for management information is sent to the border router. +`uri_ptr` |The ASCII string for the URI. This string identifies the CoAP URI for the desired resource. For example, `/c/mg` identifies the management get information resource. +`fields_ptr`|A pointer to management fields; a set of TLVs. A list of such TLVs can be found in `thread_meshcop_lib.h`. +`field_count`|Number of fields in the field pointer array (set of TLVs). +`cb_ptr`|A pointer to `management_get_response_cb` callback function carrying the result of the operation. + +
+
Response
+
0, success.
+
<0, failure.
+
+ +#### Setting up Thread Management Information + +The function `thread_management_set()` is used to set up Thread management related information to any device in the Thread network. Parameter|Description -----------|----------- `instance_id`|Instance ID of the management session. -`fields_ptr`|A pointer to management fields from which the information is fetched. -`field_count`|Number of fields in the field pointer array. -`cb_ptr`|A pointer to `management_get_response_cb` callback function. +`dst_addr` |Destination address; the address of a remote device where it is desired to set up management information. If however, the address is not provided, a request is sent to the leader of the network for this purpose. If a native commissioner is used, the request for setting up management information is sent to the border router. +`uri_ptr` |The ASCII string for the URI. This string identifies the CoAP URI for the desired resource. For example, `/c/ms` identifies the management set information resource. +`data_ptr`|A pointer to the desired set of TLVs. +`field_count`|Number of fields in the field pointer array (set of TLVs). +`cb_ptr`|A pointer to `management_get_response_cb` callback function carrying the result of the operation.
Response
diff --git a/features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/nanostack/ethernet_mac_api.h b/features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/nanostack/ethernet_mac_api.h index ef8ee789445..bc5114f17a3 100644 --- a/features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/nanostack/ethernet_mac_api.h +++ b/features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/nanostack/ethernet_mac_api.h @@ -79,21 +79,21 @@ extern int8_t ethernet_mac_destroy(eth_mac_api_t *mac_api); * @param api API to handle the request * @param data Data containing request parameters */ -typedef void data_request(const eth_mac_api_t* api, const eth_data_req_t *data); +typedef void eth_mac_data_request(const eth_mac_api_t* api, const eth_data_req_t *data); /** * @brief data_confirm confirm is called as a response to data_request * @param api The API which handled the request * @param data Data containing confirm parameters */ -typedef void data_confirm(const eth_mac_api_t* api, const eth_data_conf_t *data ); +typedef void eth_mac_data_confirm(const eth_mac_api_t* api, const eth_data_conf_t *data ); /** * @brief data_indication Data indication is called when MAC layer has received data * @param api The API which handled the response * @param data Data containing indication parameters */ -typedef void data_indication(const eth_mac_api_t* api, const eth_data_ind_t *data ); +typedef void eth_mac_data_indication(const eth_mac_api_t* api, const eth_data_ind_t *data ); /** * @brief Set 48 bit address from MAC @@ -119,15 +119,15 @@ typedef int8_t eth_mac_mac48_address_get(const eth_mac_api_t* api, uint8_t *mac4 * @param parent_id Upper layer identifier * @return 0 if success; -1 if api is NULL or not found */ -typedef int8_t eth_mac_api_initialize(eth_mac_api_t *api, data_confirm *conf_cb, - data_indication *ind_cb, uint8_t parent_id); +typedef int8_t eth_mac_api_initialize(eth_mac_api_t *api, eth_mac_data_confirm *conf_cb, + eth_mac_data_indication *ind_cb, uint8_t parent_id); struct eth_mac_api_s { eth_mac_api_initialize *mac_initialize; - data_request *data_req; - data_confirm *data_conf_cb; - data_indication *data_ind_cb; + eth_mac_data_request *data_req; + eth_mac_data_confirm *data_conf_cb; + eth_mac_data_indication *data_ind_cb; eth_mac_mac48_address_set *mac48_set; eth_mac_mac48_address_get *mac48_get; @@ -141,3 +141,4 @@ struct eth_mac_api_s { #endif #endif // ETHERNET_MAC_API_H + diff --git a/features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/nanostack/mlme.h b/features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/nanostack/mlme.h index 6943dd887f3..8433f9d1e8d 100644 --- a/features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/nanostack/mlme.h +++ b/features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/nanostack/mlme.h @@ -249,7 +249,7 @@ typedef enum { macAutoRequestKeyIndex = 0x7b, /*>The index of the key used for automatic data*/ macDefaultKeySource = 0x7c, /*>Default key source*/ //NON standard extension - macLoadBalancingBeaconTxPeriod = 0xfd, /*> Set Beacon periodic Tx interval.Value size uint16_t in seconds, Use 0 to disable */ + macLoadBalancingBeaconTx = 0xfd, /*> Trig Beacon from load balance module periodic */ macLoadBalancingAcceptAnyBeacon = 0xfe, /*>Beacon accept state control from other network. Value size bool, data true=Enable, false=disable .*/ macThreadForceLongAddressForBeacon = 0xff /*>Thread standard force beacon source address for extended 64-bit*/ } mlme_attr_t; diff --git a/features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/nanostack/net_fhss.h b/features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/nanostack/net_fhss.h index 6e05fc585f9..1d3e406254e 100644 --- a/features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/nanostack/net_fhss.h +++ b/features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/nanostack/net_fhss.h @@ -21,7 +21,7 @@ #ifndef NET_FHSS_H_ #define NET_FHSS_H_ -#include +#include "ns_types.h" #ifndef RPL_SYNCHRONIZATION_INSTANCE_ID #define RPL_SYNCHRONIZATION_INSTANCE_ID 1 @@ -56,6 +56,7 @@ typedef struct int (*fhss_timer_start)(uint32_t, void (*fhss_timer_callback)(int8_t, uint16_t), int8_t); int (*fhss_timer_stop)(void); uint32_t (*fhss_get_remaining_slots)(void); + uint32_t (*fhss_get_timestamp)(void); int (*fhss_time_measure_start)(void); uint32_t (*fhss_time_measure_read)(void); int (*fhss_time_measure_stop)(void); @@ -120,9 +121,10 @@ extern int8_t arm_fhss_disable(int8_t interface_id); extern int8_t arm_fhss_set_tuning_params(int8_t interface_id, const fhss_platform_tuning_params_s *fhss_tuning_params); #else -#define arm_fhss_enable(interface_id, fhss_platform_functions,fhss_configuration) (int8_t) -1 -#define arm_fhss_disable(interface_id) (int8_t) -1 -#define arm_fhss_set_tuning_params(interface_id, fhss_tuning_params) (int8_t) -1 +NS_DUMMY_DEFINITIONS_OK +#define arm_fhss_enable(interface_id, fhss_platform_functions,fhss_configuration) (-1) +#define arm_fhss_disable(interface_id) (-1) +#define arm_fhss_set_tuning_params(interface_id, fhss_tuning_params) (-1) #endif #endif /* NET_FHSS_H_ */ diff --git a/features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/nanostack/net_interface.h b/features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/nanostack/net_interface.h index cc2d769cb67..3a8b3eb19a0 100644 --- a/features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/nanostack/net_interface.h +++ b/features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/nanostack/net_interface.h @@ -81,16 +81,16 @@ typedef enum arm_library_event_type_e { /** Data received. */ #define SOCKET_DATA (0 << 4) /** TCP connection ready. */ -#define SOCKET_BIND_DONE (1 << 4) +#define SOCKET_CONNECT_DONE (1 << 4) /** TCP connection failure. */ -#define SOCKET_BIND_FAIL (2 << 4) +#define SOCKET_CONNECT_FAIL (2 << 4) /** TCP connection authentication failed. */ -#define SOCKET_BIND_AUTH_FAIL (3 << 4) -/** TCP incoming connection attempt to listening socket */ +#define SOCKET_CONNECT_AUTH_FAIL (3 << 4) +/** TCP incoming connection on listening socket */ #define SOCKET_INCOMING_CONNECTION (4 << 4) /** Socket data send failure. */ #define SOCKET_TX_FAIL (5 << 4) -/** TCP connection closed. */ +/** TCP connection closed (received their FIN and ACK of our FIN). */ #define SOCKET_CONNECT_CLOSED (6 << 4) /** TCP connection reset */ #define SOCKET_CONNECTION_RESET (7 << 4) @@ -100,6 +100,13 @@ typedef enum arm_library_event_type_e { #define SOCKET_TX_DONE (9 << 4) /** Out of memory failure. */ #define SOCKET_NO_RAM (10 << 4) +/** TCP connection problem indication (RFC 1122 R1) */ +#define SOCKET_CONNECTION_PROBLEM (11 << 4) + +/* Backwards compatibility */ +#define SOCKET_BIND_DONE SOCKET_CONNECT_DONE +#define SOCKET_BIND_FAIL SOCKET_CONNECT_FAIL +#define SOCKET_BIND_AUTH_FAIL SOCKET_CONNECT_AUTH_FAIL /*! * \enum net_security_t @@ -992,6 +999,23 @@ void arm_print_neigh_cache(void); */ void arm_print_neigh_cache2(void (*print_fn)(const char *fmt, ...)); +/** + * \brief Print PCB list + * + * Prints Protocol Control Block list to the command line + */ +void arm_print_protocols(void); + +/** + * \brief Print PCB list + * + * Prints Protocol Control Block list using the given printf style function + * + * \param print_fn pointer to a printf style output function + * \param sep column separator character + */ +void arm_print_protocols2(void (*print_fn)(const char *fmt, ...), char sep); + /** * \brief Get the library version information. * diff --git a/features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/nanostack/net_load_balance_api.h b/features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/nanostack/net_load_balance_api.h new file mode 100644 index 00000000000..274fd8c37f5 --- /dev/null +++ b/features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/nanostack/net_load_balance_api.h @@ -0,0 +1,105 @@ +/* + * Copyright (c) 2016 ARM Limited. All rights reserved. + * + * SPDX-License-Identifier: LicenseRef-PBL + * + * Licensed under the Permissive Binary License, Version 1.0 (the "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.mbed.com/licenses/PBL-1.0 + * + * See the License for the specific language governing permissions and limitations under the License. + * + */ + +/** + * \file net_load_balance_api.h + * \brief 6Lowpan network load balance control API. + */ + +#ifndef NET_LOAD_BALANCE_API_H_ +#define NET_LOAD_BALANCE_API_H_ + +#include "ns_types.h" + +/** + * \brief load_balance_network_switch_notify this function will be called by load balance when it have detected better network to switch + * \param interface id + * + * \return true Network switching can be performed immediately + * \return false means that load balance will ask at a later time for network switching, if a better network is still available at that time + */ +typedef bool net_load_balance_network_switch_notify(int8_t interface_id); + +/** + * \brief Set user callback for accept network switch. + * \param network_switch_notify user callback + */ +void net_load_balance_network_switch_cb_set(net_load_balance_network_switch_notify *network_switch_notify); + +/** + * \brief Create and enable load balance to selected interface. + * \param interface_id interface id + * \param enable_periodic_beacon_interval Set True when want activate load balance periodic beacon, false will work only properly with fhss system + * + * \return 0 Enable ok + * \return -1 unknown Interface or parameter error + * \return -2 Out of memory + * \return -3 Load balance already configured to this interface + */ +int8_t net_load_balance_create(int8_t interface_id, bool enable_periodic_beacon_interval); + +/** + * \brief Disable and delete load balansing from interface + * \param interface_id interface id + * + * \return 0 Process ok + * \return -1 unknown Interface + */ +int8_t net_load_balance_delete(int8_t interface_id); + +/** + * \brief Set Load balance threshold min and max + * + * Nework switch will work next diff_priority >= randLIB_get_random_in_range(threshold_min, threshold_max) --> switch network if true + * For border router Disable Network compare set threshold_min and threshold_max to 0. + * \param threshold_min min value define random minimal value for compare + * \param threshold_max max value for define random max value for compare + * + * \return 0 process ok -1 Unknown interface id + */ +int8_t net_load_balance_threshold_set(int8_t interface_id, uint8_t threshold_min, uint8_t threshold_max); + +/** + * \brief Set Load balance expected device count and enable automatic network load level update + * + * This feature is just for RPL DoDAG root device! + * + * \param interface_id interface id + * \param expected_device_count Device count which will set max load level. If count is not expected_device_count % 8 it not zero function update number up to reach that.It is not hard limit it define max DoDAG preference + * + * \return 0 process ok -1 Unknown interface id -2 Out of memory + */ +int8_t net_load_balance_load_level_update_enable(int8_t interface_id, uint16_t expected_device_count); + +/** + * \brief Disable automatic network load level update + * + * \param interface_id interface id + * + * \return 0 process ok -1 Unknown interface id + */ +int8_t net_load_balance_load_level_update_disable(int8_t interface_id); + +/** + * \brief Set network probability percent when new network is better than threshold max + * + * \param interface_id interface id + * \param max_p is percent probability to switch network. Default is 40%. Accepted values are [1,100] recommend values are 15-50. + * + * \return 0 process ok -1 Unknown interface id or parameter fail + */ +int8_t net_load_balance_set_max_probability(int8_t interface_id , uint8_t max_p); + + +#endif /* NET_LOAD_BALANCE_API_H_ */ diff --git a/features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/nanostack/net_test_api.h b/features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/nanostack/net_test_api.h new file mode 100644 index 00000000000..b0c0375bc34 --- /dev/null +++ b/features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/nanostack/net_test_api.h @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2016 ARM Limited. All rights reserved. + * + * SPDX-License-Identifier: LicenseRef-PBL + * + * Licensed under the Permissive Binary License, Version 1.0 (the "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.mbed.com/licenses/PBL-1.0 + * + * See the License for the specific language governing permissions and limitations under the License. + * + */ + +/** + * \file net_ipv6_api.h + * \brief IPv6 configuration API. + */ + +#ifndef NET_TEST_API_H_ +#define NET_TEST_API_H_ + +#include "ns_types.h" + +/** + * \brief Makes TCP protocol drop given number of packets from a particular state (TX side, tcp_down()). + * + * Testing API for TCP retransmission mechanism after a packet is dropped in a particular state. + * + * \param state Particular TCP state - Identified by its number from 1-11. Numbering is from the SNMP MIB - RFC 4022. + * \param count No. of packets to be dropped + * \return 0 OK + * \return <0 If request can't be fulfilled, i.e., Not test environment. + */ +int8_t arm_nwk_test_tcp_drop_tx(int state, uint8_t count); + +/** + * \brief Makes TCP protocol drop given number of packets from a particular state (RX side, tcp_up()). + * + * Testing API for TCP to drop received packets. + * + * \param state Particular TCP state - Identified by its number from 1-11. Numbering is from the SNMP MIB - RFC 4022. + * \param count No. of packets to be dropped + * \return 0 OK + * \return <0 If request can't be fulfilled, i.e., Not test environment. + */ +int8_t arm_nwk_test_tcp_drop_rx(int state, uint8_t count); + +/** + * \brief Resets drop counters. + * + * Testing API for TCP reset any packet drop counters. + */ +void arm_nwk_test_tcp_drop_reset(void); + +#endif //NET_TEST_API_H_ diff --git a/features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/nanostack/net_thread_test.h b/features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/nanostack/net_thread_test.h index 910793463c8..a49cafb6554 100644 --- a/features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/nanostack/net_thread_test.h +++ b/features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/nanostack/net_thread_test.h @@ -220,6 +220,16 @@ int thread_test_version_set(int8_t interface_id, uint8_t version); */ int thread_test_router_selection_jitter_set(int8_t interface_id, uint32_t jitter); +/** + * \brief Sets the thread MIN_DELAY_TIMER default value. + * + * \param interface_id Network Interface + * \param delay_timer_value delay timer value in seconds used in leader + * + * \return 0, OK + * \return <0 Error + */ +int thread_test_min_delay_timer_set(int8_t interface_id, uint32_t delay_timer_value); /** * \brief Increment Thread key sequence counter * diff --git a/features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/nanostack/ns_address.h b/features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/nanostack/ns_address.h index 5ddc9b285e6..5ab483fb6cc 100644 --- a/features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/nanostack/ns_address.h +++ b/features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/nanostack/ns_address.h @@ -37,7 +37,7 @@ typedef enum address_type_t { */ typedef struct ns_address { address_type_t type; /**< Address type. */ - uint8_t address[16]; /**< Addresss. */ + uint8_t address[16]; /**< Address. */ uint16_t identifier; /**< TCP/UDP port number. */ } ns_address_t; diff --git a/features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/nanostack/platform/arm_hal_phy.h b/features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/nanostack/platform/arm_hal_phy.h index 788f5cc158a..34432a5ba49 100644 --- a/features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/nanostack/platform/arm_hal_phy.h +++ b/features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/nanostack/platform/arm_hal_phy.h @@ -52,6 +52,7 @@ typedef enum { PHY_EXTENSION_READ_CHANNEL_ENERGY, /**< RF interface ED scan energy read. */ PHY_EXTENSION_READ_LINK_STATUS, /**< Net library could read link status. */ PHY_EXTENSION_CONVERT_SIGNAL_INFO, /**< Convert signal info. */ + PHY_EXTENSION_ACCEPT_ANY_BEACON, /**< Set boolean true or false for accept beacon from other Pan-ID than configured. Default value should be false */ } phy_extension_type_e; /** Address types */ diff --git a/features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/nanostack/socket_api.h b/features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/nanostack/socket_api.h index e11fc6119d5..8023d52a6ba 100644 --- a/features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/nanostack/socket_api.h +++ b/features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/nanostack/socket_api.h @@ -24,20 +24,23 @@ extern "C" { * \section socket-com Common socket API * - socket_open(), A function to open a socket. * - socket_close(), A function to close a socket. + * - socket_connect(), A function to connect to a remote peer. + * - socket_bind(), A function to bind a local address or port or both. + * - socket_getpeername(), A function to get remote address and port of a connected socket. + * - socket_getsockname(), A function to get local address and port of a bound socket. * * \section socket-read Socket read API at callback * - socket_read(), A function to read received data buffer from a socket. * - socket_recvmsg(), A function to read received data buffer from a socket to Posix defined message structure - * - socket_read_session_address(), A function to read session info for a TCP event. * * \section socket-tx Socket TX API * - socket_send(), A function to write data buffer to a socket. * - socket_sendto(), A function to write data to a specific destination in the socket. - * - socket_senmsg(), A function which support socket_send and socket_sendto functionality which supports ancillary data + * - socket_sendmsg(), A function which support socket_send and socket_sendto functionality which supports ancillary data * * \section sock-connect TCP socket connection handle * - socket_listen(), A function to set the socket to listening mode. - * - socket_connect(), A function to connect to a remote peer. + * - socket_accept(), A function to accept an incoming connection. * - socket_shutdown(), A function to shut down a connection. * * Sockets are a common abstraction model for network communication and are used in most operating systems. @@ -98,13 +101,17 @@ extern "C" { * | :------------------------: | :---: | :-----------------------------------------------------------------: | * | SOCKET_EVENT_MASK | 0xF0 | NC Socket event mask. | * | SOCKET_DATA | 0x00 | Data received, read data length available in d_len field. | - * | SOCKET_BIND_DONE | 0x10 | TCP connection ready. | + * | SOCKET_CONNECT_DONE | 0x10 | TCP connection ready. | + * | SOCKET_CONNECT_FAIL | 0x20 | TCP connection failed. | + * | SOCKET_INCOMING_CONNECTION | 0x40 | TCP incoming connection on listening socket. | * | SOCKET_TX_FAIL | 0x50 | Socket data send failed. | * | SOCKET_CONNECT_CLOSED | 0x60 | TCP connection closed. | * | SOCKET_CONNECTION_RESET | 0x70 | TCP connection reset. | * | SOCKET_NO_ROUTER | 0x80 | No route available to destination. | - * | SOCKET_TX_DONE | 0x90 | Last socket TX process done, in TCP, whole TCP process is ready. | + * | SOCKET_TX_DONE | 0x90 | UDP: link layer TX ready (d_len = length of datagram). | + * | | | TCP: some data acknowledged (d_len = data remaining in send queue) | * | SOCKET_NO_RAM | 0xA0 | No RAM available. | + * | SOCKET_CONNECTION_PROBLEM | 0xB0 | TCP connection is retrying. | * * * \section socket-tcp How to use TCP sockets: @@ -112,28 +119,26 @@ extern "C" { * | API | Socket Type | Description | * | :---------------------------: | :-----------: | :------------------------------------------------------------: | * | socket_open() | Server/Client | Open socket to specific or dynamic port number. | - * | socket_shutdown() | Client | Shut down opened TCP connection. | + * | socket_shutdown() | Server/Client | Shut down opened TCP connection. | * | socket_listen() | Server | Set server port to listen state. | + * | socket_accept() | Server | Accept a connection to a listening socket as a new socket. | * | socket_connect() | Client | Connect client socket to specific destination. | - * | socket_close() | Server/Client | Closes the TCP Socket. | - * | socket_send() | Client | Send data to session based destination. | - * | socket_sendto() | Server/Client | Send data to specific destination. | - * | socket_read_session_address() | Server/Client | Read socket TCP session address and port information. | + * | socket_close() | Server/Client | Closes the TCP Socket. | + * | socket_send() | Server/Client | Send data to peer. | + * | socket_recv() | Server/Client | Receive data from peer. | * * When the TCP socket is opened it is in closed state. It must be set either to listen or to connect state before it can be used to receive or transmit data. * * A socket can be set to listen mode with the socket_listen() function. After the call, the socket can accept an incoming connection from a remote host. - * The listen mode closes the connection automatically after server timeout or when the client or application closes the connection manually by socket_shutdown() function. * * A TCP socket can be connected to a remote host with socket_connect() with correct arguments. After the function call, a (non-blocking) application must wait for the socket event to confirm the successful state change of the socket. - * After the successful state change, data can be sent using socket_send() by client and socket_send() by server. - * The connection can be shut down with socket_shutdown() function or by server timeout. + * After the successful state change, data can be sent using socket_send(). + * The connection can be shut down in either direction with socket_shutdown() function - shutting down write signals end-of-data to the peer. * * \section socket-udpicmp How to use UDP and RAW socket: * * A UDP socket is ready to receive and send data immediately after a successful call of socket_open() and a NET_READY event is received. * Data can be transmitted with the socket_sendto() function. An ICMP socket works with same function call. - * */ #include "ns_address.h" @@ -199,7 +204,7 @@ typedef struct ns_msghdr { uint_fast16_t msg_iovlen; /**< Data vector count in msg_iov */ void *msg_control; /**< Ancillary data list of ns_cmsghdr_t pointer */ uint_fast16_t msg_controllen; /**< Ancillary data length */ - int flags; /**< Flags for received messages */ + int msg_flags; /**< Flags for received messages */ } ns_msghdr_t; /*! @@ -212,8 +217,15 @@ typedef struct ns_cmsghdr { uint8_t cmsg_type; /**< Protocol Specific types for example SOCKET_IPV6_PKTINFO, */ } ns_cmsghdr_t; +/** \name Error values + * \anchor ERROR_CODES + */ +///@{ +/** No data currently available to read, or insufficient queue space for write */ +#define NS_EWOULDBLOCK (-100) +///@} -/** \name socket_recvmsg() message error flags. +/** \name socket_recvfrom() or socket_recvmsg() flags. * \anchor MSG_HEADER_FLAGS */ ///@{ @@ -221,6 +233,10 @@ typedef struct ns_cmsghdr { #define NS_MSG_TRUNC 1 /** Indicates that given ancillary data buffer was smaller than enabled at socket msg->msg_controllen define proper writed data lengths. */ #define NS_MSG_CTRUNC 2 +/** Can be passed as an input flag to socket_recvfrom() to not consume data */ +#define NS_MSG_PEEK 4 +/** \deprecated Can be passed as an input flag to get legacy returns of zero - used by socket_read() and socket_sendto() */ +#define NS_MSG_LEGACY0 0x4000 ///@} /*! * \struct ns_in6_pktinfo_t @@ -231,15 +247,22 @@ typedef struct ns_in6_pktinfo { int8_t ipi6_ifindex; /**< send/recv interface index */ } ns_in6_pktinfo_t; -#define CMSG_HEADER_ALIGN sizeof(long) +/** \privatesection Alignment macros for control message headers +* \anchor CMSG_ALIGN_FLAGS +*/ +///@{ +/** Base header alignment size */ +#define CMSG_HEADER_ALIGN sizeof(long) +/** Base data alignment size */ #define CMSG_DATA_ALIGN CMSG_HEADER_ALIGN - +/** Returns control message alignment size for data or header based upon alignment base */ #ifndef NS_ALIGN_SIZE #define NS_ALIGN_SIZE(length, aligment_base) \ ((length + (aligment_base -1 )) & ~(aligment_base -1)) #endif - +///@} +/// \publicsection /** * \brief Parse first control message header from message ancillary data. * @@ -327,7 +350,7 @@ int8_t socket_close(int8_t socket); * \brief A function to set a socket to listening mode. * * \param socket The socket ID. - * \param backlog The pending connections queue size. (Not yet implemented). + * \param backlog The pending connections queue size. * \return 0 on success. * \return -1 on failure. */ @@ -336,13 +359,12 @@ int8_t socket_listen(int8_t socket, uint8_t backlog); /** * \brief A function to accept a new connection on an socket. * - * NOT YET IMPLEMENTED - PLACEHOLDER FOR FUTURE TCP CHANGES - * * \param socket_id The socket ID of the listening socket. * \param addr Either NULL pointer or pointer to structure where the remote address of the connecting host is copied. * \param passed_fptr A function pointer to a function that is called whenever a data frame is received to the new socket. * \return 0 or greater on success; return value is the new socket ID. * \return -1 on failure. + * \return NS_EWOULDBLOCK if no pending connections. */ int8_t socket_accept(int8_t socket_id, ns_address_t *addr, void (*passed_fptr)(void *)); @@ -367,11 +389,14 @@ int8_t socket_connect(int8_t socket, ns_address_t *address, uint8_t randomly_tak /** * \brief Bind socket to address. * - * Used by the application to bind a socket to a port and/or an address. Binding can - * be done only once. The port or address cannot be changed after binding. + * Used by the application to bind a socket to a port and/or an address. Binding of each + * of address and port can only be done once. + * + * If address is ns_in6addr_any, the address binding is not changed. If port is 0, + * the port binding is not changed. * * \param socket Socket ID of the socket to bind. - * \param address Address structure containing the port and address to bind. + * \param address Address structure containing the port and/or address to bind. * * \return 0 on success. * \return -1 if the given address is NULL. @@ -386,6 +411,7 @@ int8_t socket_bind(int8_t socket, const ns_address_t *address); /** * \brief Bind a local address to a socket based on the destination address and * the address selection preferences. + * * Binding happens to the same address that socket_connect() would bind to. * Reference: RFC5014 IPv6 Socket API for Source Address Selection. * @@ -417,70 +443,119 @@ int8_t socket_bind2addrsel(int8_t socket, const ns_address_t *dst_address); * * \return 0 on success. * \return -1 if the given socket ID is not found, if the socket type is wrong or TCP layer returns a failure. - * \return -2 if no active TCP session was found. + * \return -2 if socket is not connected. */ int8_t socket_shutdown(int8_t socket, uint8_t how); /** - * \brief Send data via a connected TCP socket by client. + * \brief Send data via a connected socket by client. * * Note: The socket connection must be ready before using this function. * The stack uses automatically the address of the remote connected host as the destination address for the packet. * + * This call is equivalent to socket_sendto() with address set to NULL - see + * that call for more details. + * * \param socket The socket ID. * \param buffer A pointer to data. * \param length Data length. - * - * \return 0 done - * \return -1 Invalid socket ID. - * \return -2 Socket memory allocation fail. - * \return -3 TCP state not established or address scope not defined . - * \return -4 Socket TX process busy or unknown interface. - * \return -5 Socket not connected - * \return -6 Packet too short (ICMP raw socket error). */ -int8_t socket_send(int8_t socket, uint8_t *buffer, uint16_t length); +int16_t socket_send(int8_t socket, const void *buffer, uint16_t length); /** * \brief A function to read received data buffer from a socket. + * \deprecated * - * Used by the application to get data from a socket. This method must be called once - * from a socket callback when handling event SOCKET_DATA. If the received data does not fit - * in the buffer provided the excess data bytes are discarded. + * Used by the application to get data from a socket. See socket_recvfrom() + * for more details. + * + * This is equivalent to socket_recvfrom, except that it passes the + * flag NS_MSG_LEGACY0, which modifies the return behaviour for zero data. * * \param socket The socket ID. * \param src_addr A pointer to a structure where the sender's address is stored. + * May be NULL if not required. * \param buffer A pointer to an array where the read data is written to. * \param length The maximum length of the allocated buffer. * - * \return greater than 0 indicates the length of the data copied to buffer. - * \return 0 if no data is available to read. + * \return >0 indicates the length of the data copied to buffer. + * \return 0 if no data was read (includes zero-length datagram, + * end of stream and no data currently available) * \return -1 invalid input parameters. */ int16_t socket_read(int8_t socket, ns_address_t *src_addr, uint8_t *buffer, uint16_t length); /** - * \brief A function to read received message with ancillary data from a socket. + * \brief A function to read received data buffer from a socket, * - * Used by the application to get data from a socket. This method must be called once - * from a socket callback when handling event SOCKET_DATA. If the received data does not fit - * in the buffer provided the excess data bytes are discarded. + * Equivalent to socket_recvfrom with src_address set to NULL. * - * Ancillary data must request by socket_setsockopt(). + * \param socket The socket ID. + * \param buffer A pointer to an array where the read data is written to. + * \param length The maximum length of the allocated buffer. + * \param flags Flags for read call * - * msg->msg_controllen is updated to indicate actual length of ancillary data output + * \return as for socket_recvfrom + */ +int16_t socket_recv(int8_t socket, void *buffer, uint16_t length, int flags); + +/** + * \brief A function to read received data buffer from a socket + * + * Used by the application to get data from a socket. + * + * This has two modes of operation. + * + * 1) For non-stream sockets, if the receive queue is disabled (set to 0 via + * SOCKET_SO_RCVBUF), which is the non-stream default and original Nanostack + * behaviour, then applications receive exactly one SOCKET_DATA callback per + * datagram, indicating that datagram's length. They must make 1 read call + * in that callback, and they will be given the data. If not read, the + * datagram is discarded on return from the callback. + * + * 2) Otherwise - stream sockets or SOCKET_SO_RCVBUF non-zero - behaviour is + * akin to traditional BSD. SOCKET_DATA callbacks occur when new data arrives, + * and read calls can be made any time. Data will be queued to an extent + * determined by the receive buffer size. The length in the data callback + * is the total amount of data in the receive queue - possibly multiple + * datagrams. + * + * \param socket The socket ID. + * \param buffer A pointer to an array where the read data is written to. + * \param length The maximum length of the allocated buffer. + * \param flags Flags for read call + * \param src_addr A pointer to a structure where the sender's address is stored. + * May be NULL if not required. * * The returned length is normally the length of data actually written to the buffer; if * NS_MSG_TRUNC is set in flags, then for non-stream sockets, the actual datagram length is * returned instead, which may be larger than the buffer size. * + * Return values assume flag NS_MSG_LEGACY0 is not set - if it is set, they are + * as per socket_read(). + * + * \return >0 indicates the length of the data copied to buffer (or original datagram size) + * \return 0 if end of stream or zero-length datagram + * \return -1 invalid input parameters. + * \return NS_EWOULDBLOCK if no data is currently available + */ +int16_t socket_recvfrom(int8_t socket, void *buffer, uint16_t length, int flags, ns_address_t *src_addr); + +/** + * \brief A function to read received message with ancillary data from a socket. + * + * Used by the application to get data from a socket. See socket_recvfrom for + * details of the two delivery mechanisms. + * + * Ancillary data must request by socket_setsockopt(). + * + * msg->msg_controllen is updated to indicate actual length of ancillary data output + * * \param socket The socket ID. * \param msg A pointer to a structure where messages is stored with or without ancillary data * \param flags A flags for message read. * - * \return greater than 0 indicates the length of the data. - * \return 0 if no data is available to read. - * \return -1 invalid input parameters. + * \return as for socket_recvfrom */ int16_t socket_recvmsg(int8_t socket, ns_msghdr_t *msg, int flags); @@ -489,20 +564,28 @@ int16_t socket_recvmsg(int8_t socket, ns_msghdr_t *msg, int flags); * * Used by the application to send data. * + * The return of 0 on success is unconventional, and obtained by passing + * NS_MSG_LEGACY0 to socket_sendmsg internally - to get conventional + * return values, you can use socket_sendmsg() instead. + * * \param socket The socket ID. * \param address A pointer to the destination address information. * \param buffer A pointer to data to be sent. * \param length Length of the data to be sent. * - * \return 0 on success. + * \return 0 On success (whole packet queued) + * \return NS_EWOULDBLOCK if nothing written due to lack of queue space. + * + * Error returns: + * * \return -1 Invalid socket ID. * \return -2 Socket memory allocation fail. * \return -3 TCP state not established or address scope not defined . - * \return -4 Socket TX process busy or unknown interface. + * \return -4 Unknown interface. * \return -5 Socket not connected * \return -6 Packet too short (ICMP raw socket error). */ -int8_t socket_sendto(int8_t socket, ns_address_t *address, uint8_t *buffer, uint16_t length); +int16_t socket_sendto(int8_t socket, const ns_address_t *address, const void *buffer, uint16_t length); /** * \brief A function to send UDP, TCP or raw ICMP data via the socket with or without ancillary data or destination address. @@ -511,7 +594,7 @@ int8_t socket_sendto(int8_t socket, ns_address_t *address, uint8_t *buffer, uint * * \param socket The socket ID. * \param msg A pointer to the Message header which include address, payload and ancillary data. - * \param flags A flags for message send for future usage (not supported yet) + * \param flags A flags for message send (eg NS_MSG_LEGACY0) * * Messages destination address is defined by msg->msg_name which must be ns_address_t. If msg->msg_nme is NULL socket select connected address * @@ -519,34 +602,56 @@ int8_t socket_sendto(int8_t socket, ns_address_t *address, uint8_t *buffer, uint * * Supported ancillary data for send defined by msg->msg_control and msg->msg_controllen. * - * msg->flags and flags is ignored + * msg->msg_flags is unused, and need not be initialised. * - * \return 0 on success. - * \return -1 Invalid socket ID or message structure. + * The following main return values assume flag NS_MSG_LEGACY0 is not set - + * if it is set, they are as per socket_sendto(). + * + * \return length if entire amount written (which could be 0) + * \return value >0 and 0. Can be NULL which only searches for the length. + * \ [OUT] Pointer to previous TLV found + * + * \return The length of the TLV data found and found_tlv updated to point beginning of value field. 0 if TLV is not found. + */ +uint16_t thread_meshcop_tlv_find_next(uint8_t* tlv_ba, uint16_t tlv_ba_length, uint8_t tlv_id, uint8_t** found_tlv); + /** * Read 1 byte length TLV. * diff --git a/features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/nanostack/whiteboard_api.h b/features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/nanostack/whiteboard_api.h index caab82f9f16..bb8c4e3a811 100644 --- a/features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/nanostack/whiteboard_api.h +++ b/features/nanostack/FEATURE_NANOSTACK/sal-stack-nanostack/nanostack/whiteboard_api.h @@ -43,6 +43,15 @@ typedef struct whiteboard_entry_t { * \return A pointer to whiteboard_entry_t structure. */ extern whiteboard_entry_t *whiteboard_get(whiteboard_entry_t *cur); + +/** + * @brief Whiteboard_set_device_hard_limit Sets the absolut limit of child devices this device can handle. + * This is very useful in situations, where 1 GW drops from network and causes it's children + * to join other GW networks. This might cause other GWs to run out of memory. + * @param limit Absolute maximum amount of devices allowed to join. Default value=0 means unlimited (as long as there is memory) + */ +extern void whiteboard_set_device_hard_limit(uint16_t limit); + #ifdef __cplusplus } #endif diff --git a/features/nanostack/FEATURE_NANOSTACK_FULL/TOOLCHAIN_ARM/TARGET_LIKE_CORTEX_M0/libnanostack_armcc_Cortex-M0_nanostack_full.ar b/features/nanostack/FEATURE_NANOSTACK_FULL/TOOLCHAIN_ARM/TARGET_LIKE_CORTEX_M0/libnanostack_armcc_Cortex-M0_nanostack_full.ar old mode 100755 new mode 100644 index 9510d96fe74..3d755949a7d Binary files a/features/nanostack/FEATURE_NANOSTACK_FULL/TOOLCHAIN_ARM/TARGET_LIKE_CORTEX_M0/libnanostack_armcc_Cortex-M0_nanostack_full.ar and b/features/nanostack/FEATURE_NANOSTACK_FULL/TOOLCHAIN_ARM/TARGET_LIKE_CORTEX_M0/libnanostack_armcc_Cortex-M0_nanostack_full.ar differ diff --git a/features/nanostack/FEATURE_NANOSTACK_FULL/TOOLCHAIN_ARM/TARGET_M3/libnanostack_armcc_Cortex-M3_nanostack_full.ar b/features/nanostack/FEATURE_NANOSTACK_FULL/TOOLCHAIN_ARM/TARGET_M3/libnanostack_armcc_Cortex-M3_nanostack_full.ar old mode 100755 new mode 100644 index 9cf32606c3a..4516ff0665a Binary files a/features/nanostack/FEATURE_NANOSTACK_FULL/TOOLCHAIN_ARM/TARGET_M3/libnanostack_armcc_Cortex-M3_nanostack_full.ar and b/features/nanostack/FEATURE_NANOSTACK_FULL/TOOLCHAIN_ARM/TARGET_M3/libnanostack_armcc_Cortex-M3_nanostack_full.ar differ diff --git a/features/nanostack/FEATURE_NANOSTACK_FULL/TOOLCHAIN_ARM/TARGET_RTOS_M4_M7/libnanostack_armcc_Cortex-M3_nanostack_full.ar b/features/nanostack/FEATURE_NANOSTACK_FULL/TOOLCHAIN_ARM/TARGET_RTOS_M4_M7/libnanostack_armcc_Cortex-M3_nanostack_full.ar old mode 100755 new mode 100644 index 9cf32606c3a..4516ff0665a Binary files a/features/nanostack/FEATURE_NANOSTACK_FULL/TOOLCHAIN_ARM/TARGET_RTOS_M4_M7/libnanostack_armcc_Cortex-M3_nanostack_full.ar and b/features/nanostack/FEATURE_NANOSTACK_FULL/TOOLCHAIN_ARM/TARGET_RTOS_M4_M7/libnanostack_armcc_Cortex-M3_nanostack_full.ar differ diff --git a/features/nanostack/FEATURE_NANOSTACK_FULL/TOOLCHAIN_GCC/TARGET_LIKE_CORTEX_M0/libnanostack_arm-none-eabi-gcc_Cortex-M0_nanostack_full.a b/features/nanostack/FEATURE_NANOSTACK_FULL/TOOLCHAIN_GCC/TARGET_LIKE_CORTEX_M0/libnanostack_arm-none-eabi-gcc_Cortex-M0_nanostack_full.a old mode 100755 new mode 100644 index 3e185429bfb..09558f8036b Binary files a/features/nanostack/FEATURE_NANOSTACK_FULL/TOOLCHAIN_GCC/TARGET_LIKE_CORTEX_M0/libnanostack_arm-none-eabi-gcc_Cortex-M0_nanostack_full.a and b/features/nanostack/FEATURE_NANOSTACK_FULL/TOOLCHAIN_GCC/TARGET_LIKE_CORTEX_M0/libnanostack_arm-none-eabi-gcc_Cortex-M0_nanostack_full.a differ diff --git a/features/nanostack/FEATURE_NANOSTACK_FULL/TOOLCHAIN_GCC/TARGET_M3/libnanostack_arm-none-eabi-gcc_Cortex-M3_nanostack_full.a b/features/nanostack/FEATURE_NANOSTACK_FULL/TOOLCHAIN_GCC/TARGET_M3/libnanostack_arm-none-eabi-gcc_Cortex-M3_nanostack_full.a old mode 100755 new mode 100644 index 17fcef0a0ac..c8f4433fa29 Binary files a/features/nanostack/FEATURE_NANOSTACK_FULL/TOOLCHAIN_GCC/TARGET_M3/libnanostack_arm-none-eabi-gcc_Cortex-M3_nanostack_full.a and b/features/nanostack/FEATURE_NANOSTACK_FULL/TOOLCHAIN_GCC/TARGET_M3/libnanostack_arm-none-eabi-gcc_Cortex-M3_nanostack_full.a differ diff --git a/features/nanostack/FEATURE_NANOSTACK_FULL/TOOLCHAIN_GCC/TARGET_RTOS_M4_M7/libnanostack_arm-none-eabi-gcc_Cortex-M3_nanostack_full.a b/features/nanostack/FEATURE_NANOSTACK_FULL/TOOLCHAIN_GCC/TARGET_RTOS_M4_M7/libnanostack_arm-none-eabi-gcc_Cortex-M3_nanostack_full.a old mode 100755 new mode 100644 index 17fcef0a0ac..c8f4433fa29 Binary files a/features/nanostack/FEATURE_NANOSTACK_FULL/TOOLCHAIN_GCC/TARGET_RTOS_M4_M7/libnanostack_arm-none-eabi-gcc_Cortex-M3_nanostack_full.a and b/features/nanostack/FEATURE_NANOSTACK_FULL/TOOLCHAIN_GCC/TARGET_RTOS_M4_M7/libnanostack_arm-none-eabi-gcc_Cortex-M3_nanostack_full.a differ diff --git a/features/nanostack/FEATURE_NANOSTACK_FULL/TOOLCHAIN_IAR/TARGET_LIKE_CORTEX_M0/libnanostack_iccarm_Cortex-M0_nanostack_full.a b/features/nanostack/FEATURE_NANOSTACK_FULL/TOOLCHAIN_IAR/TARGET_LIKE_CORTEX_M0/libnanostack_iccarm_Cortex-M0_nanostack_full.a old mode 100755 new mode 100644 index 37ba392dd8d..75857b38bd2 Binary files a/features/nanostack/FEATURE_NANOSTACK_FULL/TOOLCHAIN_IAR/TARGET_LIKE_CORTEX_M0/libnanostack_iccarm_Cortex-M0_nanostack_full.a and b/features/nanostack/FEATURE_NANOSTACK_FULL/TOOLCHAIN_IAR/TARGET_LIKE_CORTEX_M0/libnanostack_iccarm_Cortex-M0_nanostack_full.a differ diff --git a/features/nanostack/FEATURE_NANOSTACK_FULL/TOOLCHAIN_IAR/TARGET_M3/libnanostack_iccarm_Cortex-M3_nanostack_full.a b/features/nanostack/FEATURE_NANOSTACK_FULL/TOOLCHAIN_IAR/TARGET_M3/libnanostack_iccarm_Cortex-M3_nanostack_full.a old mode 100755 new mode 100644 index 3f148da850d..673c42beb8c Binary files a/features/nanostack/FEATURE_NANOSTACK_FULL/TOOLCHAIN_IAR/TARGET_M3/libnanostack_iccarm_Cortex-M3_nanostack_full.a and b/features/nanostack/FEATURE_NANOSTACK_FULL/TOOLCHAIN_IAR/TARGET_M3/libnanostack_iccarm_Cortex-M3_nanostack_full.a differ diff --git a/features/nanostack/FEATURE_NANOSTACK_FULL/TOOLCHAIN_IAR/TARGET_RTOS_M4_M7/libnanostack_iccarm_Cortex-M3_nanostack_full.a b/features/nanostack/FEATURE_NANOSTACK_FULL/TOOLCHAIN_IAR/TARGET_RTOS_M4_M7/libnanostack_iccarm_Cortex-M3_nanostack_full.a old mode 100755 new mode 100644 index 3f148da850d..673c42beb8c Binary files a/features/nanostack/FEATURE_NANOSTACK_FULL/TOOLCHAIN_IAR/TARGET_RTOS_M4_M7/libnanostack_iccarm_Cortex-M3_nanostack_full.a and b/features/nanostack/FEATURE_NANOSTACK_FULL/TOOLCHAIN_IAR/TARGET_RTOS_M4_M7/libnanostack_iccarm_Cortex-M3_nanostack_full.a differ diff --git a/features/nanostack/FEATURE_THREAD_BORDER_ROUTER/TOOLCHAIN_ARM/TARGET_LIKE_CORTEX_M0/libnanostack_armcc_Cortex-M0_thread_border_router.ar b/features/nanostack/FEATURE_THREAD_BORDER_ROUTER/TOOLCHAIN_ARM/TARGET_LIKE_CORTEX_M0/libnanostack_armcc_Cortex-M0_thread_border_router.ar old mode 100755 new mode 100644 index 518f9f44bae..f84486c9085 Binary files a/features/nanostack/FEATURE_THREAD_BORDER_ROUTER/TOOLCHAIN_ARM/TARGET_LIKE_CORTEX_M0/libnanostack_armcc_Cortex-M0_thread_border_router.ar and b/features/nanostack/FEATURE_THREAD_BORDER_ROUTER/TOOLCHAIN_ARM/TARGET_LIKE_CORTEX_M0/libnanostack_armcc_Cortex-M0_thread_border_router.ar differ diff --git a/features/nanostack/FEATURE_THREAD_BORDER_ROUTER/TOOLCHAIN_ARM/TARGET_M3/libnanostack_armcc_Cortex-M3_thread_border_router.ar b/features/nanostack/FEATURE_THREAD_BORDER_ROUTER/TOOLCHAIN_ARM/TARGET_M3/libnanostack_armcc_Cortex-M3_thread_border_router.ar old mode 100755 new mode 100644 index 10d9f785243..bbe5d828583 Binary files a/features/nanostack/FEATURE_THREAD_BORDER_ROUTER/TOOLCHAIN_ARM/TARGET_M3/libnanostack_armcc_Cortex-M3_thread_border_router.ar and b/features/nanostack/FEATURE_THREAD_BORDER_ROUTER/TOOLCHAIN_ARM/TARGET_M3/libnanostack_armcc_Cortex-M3_thread_border_router.ar differ diff --git a/features/nanostack/FEATURE_THREAD_BORDER_ROUTER/TOOLCHAIN_ARM/TARGET_RTOS_M4_M7/libnanostack_armcc_Cortex-M3_thread_border_router.ar b/features/nanostack/FEATURE_THREAD_BORDER_ROUTER/TOOLCHAIN_ARM/TARGET_RTOS_M4_M7/libnanostack_armcc_Cortex-M3_thread_border_router.ar old mode 100755 new mode 100644 index 10d9f785243..bbe5d828583 Binary files a/features/nanostack/FEATURE_THREAD_BORDER_ROUTER/TOOLCHAIN_ARM/TARGET_RTOS_M4_M7/libnanostack_armcc_Cortex-M3_thread_border_router.ar and b/features/nanostack/FEATURE_THREAD_BORDER_ROUTER/TOOLCHAIN_ARM/TARGET_RTOS_M4_M7/libnanostack_armcc_Cortex-M3_thread_border_router.ar differ diff --git a/features/nanostack/FEATURE_THREAD_BORDER_ROUTER/TOOLCHAIN_GCC/TARGET_LIKE_CORTEX_M0/libnanostack_arm-none-eabi-gcc_Cortex-M0_thread_border_router.a b/features/nanostack/FEATURE_THREAD_BORDER_ROUTER/TOOLCHAIN_GCC/TARGET_LIKE_CORTEX_M0/libnanostack_arm-none-eabi-gcc_Cortex-M0_thread_border_router.a old mode 100755 new mode 100644 index 60fdef2f268..9068bf10f87 Binary files a/features/nanostack/FEATURE_THREAD_BORDER_ROUTER/TOOLCHAIN_GCC/TARGET_LIKE_CORTEX_M0/libnanostack_arm-none-eabi-gcc_Cortex-M0_thread_border_router.a and b/features/nanostack/FEATURE_THREAD_BORDER_ROUTER/TOOLCHAIN_GCC/TARGET_LIKE_CORTEX_M0/libnanostack_arm-none-eabi-gcc_Cortex-M0_thread_border_router.a differ diff --git a/features/nanostack/FEATURE_THREAD_BORDER_ROUTER/TOOLCHAIN_GCC/TARGET_M3/libnanostack_arm-none-eabi-gcc_Cortex-M3_thread_border_router.a b/features/nanostack/FEATURE_THREAD_BORDER_ROUTER/TOOLCHAIN_GCC/TARGET_M3/libnanostack_arm-none-eabi-gcc_Cortex-M3_thread_border_router.a old mode 100755 new mode 100644 index a1fbd2ac054..537c417a175 Binary files a/features/nanostack/FEATURE_THREAD_BORDER_ROUTER/TOOLCHAIN_GCC/TARGET_M3/libnanostack_arm-none-eabi-gcc_Cortex-M3_thread_border_router.a and b/features/nanostack/FEATURE_THREAD_BORDER_ROUTER/TOOLCHAIN_GCC/TARGET_M3/libnanostack_arm-none-eabi-gcc_Cortex-M3_thread_border_router.a differ diff --git a/features/nanostack/FEATURE_THREAD_BORDER_ROUTER/TOOLCHAIN_GCC/TARGET_RTOS_M4_M7/libnanostack_arm-none-eabi-gcc_Cortex-M3_thread_border_router.a b/features/nanostack/FEATURE_THREAD_BORDER_ROUTER/TOOLCHAIN_GCC/TARGET_RTOS_M4_M7/libnanostack_arm-none-eabi-gcc_Cortex-M3_thread_border_router.a old mode 100755 new mode 100644 index a1fbd2ac054..537c417a175 Binary files a/features/nanostack/FEATURE_THREAD_BORDER_ROUTER/TOOLCHAIN_GCC/TARGET_RTOS_M4_M7/libnanostack_arm-none-eabi-gcc_Cortex-M3_thread_border_router.a and b/features/nanostack/FEATURE_THREAD_BORDER_ROUTER/TOOLCHAIN_GCC/TARGET_RTOS_M4_M7/libnanostack_arm-none-eabi-gcc_Cortex-M3_thread_border_router.a differ diff --git a/features/nanostack/FEATURE_THREAD_BORDER_ROUTER/TOOLCHAIN_IAR/TARGET_LIKE_CORTEX_M0/libnanostack_iccarm_Cortex-M0_thread_border_router.a b/features/nanostack/FEATURE_THREAD_BORDER_ROUTER/TOOLCHAIN_IAR/TARGET_LIKE_CORTEX_M0/libnanostack_iccarm_Cortex-M0_thread_border_router.a old mode 100755 new mode 100644 index 47f897b5136..a75c831fbef Binary files a/features/nanostack/FEATURE_THREAD_BORDER_ROUTER/TOOLCHAIN_IAR/TARGET_LIKE_CORTEX_M0/libnanostack_iccarm_Cortex-M0_thread_border_router.a and b/features/nanostack/FEATURE_THREAD_BORDER_ROUTER/TOOLCHAIN_IAR/TARGET_LIKE_CORTEX_M0/libnanostack_iccarm_Cortex-M0_thread_border_router.a differ diff --git a/features/nanostack/FEATURE_THREAD_BORDER_ROUTER/TOOLCHAIN_IAR/TARGET_M3/libnanostack_iccarm_Cortex-M3_thread_border_router.a b/features/nanostack/FEATURE_THREAD_BORDER_ROUTER/TOOLCHAIN_IAR/TARGET_M3/libnanostack_iccarm_Cortex-M3_thread_border_router.a old mode 100755 new mode 100644 index bf5bdb80570..4b9a76b3df1 Binary files a/features/nanostack/FEATURE_THREAD_BORDER_ROUTER/TOOLCHAIN_IAR/TARGET_M3/libnanostack_iccarm_Cortex-M3_thread_border_router.a and b/features/nanostack/FEATURE_THREAD_BORDER_ROUTER/TOOLCHAIN_IAR/TARGET_M3/libnanostack_iccarm_Cortex-M3_thread_border_router.a differ diff --git a/features/nanostack/FEATURE_THREAD_BORDER_ROUTER/TOOLCHAIN_IAR/TARGET_RTOS_M4_M7/libnanostack_iccarm_Cortex-M3_thread_border_router.a b/features/nanostack/FEATURE_THREAD_BORDER_ROUTER/TOOLCHAIN_IAR/TARGET_RTOS_M4_M7/libnanostack_iccarm_Cortex-M3_thread_border_router.a old mode 100755 new mode 100644 index bf5bdb80570..4b9a76b3df1 Binary files a/features/nanostack/FEATURE_THREAD_BORDER_ROUTER/TOOLCHAIN_IAR/TARGET_RTOS_M4_M7/libnanostack_iccarm_Cortex-M3_thread_border_router.a and b/features/nanostack/FEATURE_THREAD_BORDER_ROUTER/TOOLCHAIN_IAR/TARGET_RTOS_M4_M7/libnanostack_iccarm_Cortex-M3_thread_border_router.a differ diff --git a/features/nanostack/FEATURE_THREAD_END_DEVICE/TOOLCHAIN_ARM/TARGET_LIKE_CORTEX_M0/libnanostack_armcc_Cortex-M0_thread_end_device.ar b/features/nanostack/FEATURE_THREAD_END_DEVICE/TOOLCHAIN_ARM/TARGET_LIKE_CORTEX_M0/libnanostack_armcc_Cortex-M0_thread_end_device.ar old mode 100755 new mode 100644 index b57626a5e32..8a3d6f25280 Binary files a/features/nanostack/FEATURE_THREAD_END_DEVICE/TOOLCHAIN_ARM/TARGET_LIKE_CORTEX_M0/libnanostack_armcc_Cortex-M0_thread_end_device.ar and b/features/nanostack/FEATURE_THREAD_END_DEVICE/TOOLCHAIN_ARM/TARGET_LIKE_CORTEX_M0/libnanostack_armcc_Cortex-M0_thread_end_device.ar differ diff --git a/features/nanostack/FEATURE_THREAD_END_DEVICE/TOOLCHAIN_ARM/TARGET_M3/libnanostack_armcc_Cortex-M3_thread_end_device.ar b/features/nanostack/FEATURE_THREAD_END_DEVICE/TOOLCHAIN_ARM/TARGET_M3/libnanostack_armcc_Cortex-M3_thread_end_device.ar old mode 100755 new mode 100644 index 016136c943c..97240916d2e Binary files a/features/nanostack/FEATURE_THREAD_END_DEVICE/TOOLCHAIN_ARM/TARGET_M3/libnanostack_armcc_Cortex-M3_thread_end_device.ar and b/features/nanostack/FEATURE_THREAD_END_DEVICE/TOOLCHAIN_ARM/TARGET_M3/libnanostack_armcc_Cortex-M3_thread_end_device.ar differ diff --git a/features/nanostack/FEATURE_THREAD_END_DEVICE/TOOLCHAIN_ARM/TARGET_RTOS_M4_M7/libnanostack_armcc_Cortex-M3_thread_end_device.ar b/features/nanostack/FEATURE_THREAD_END_DEVICE/TOOLCHAIN_ARM/TARGET_RTOS_M4_M7/libnanostack_armcc_Cortex-M3_thread_end_device.ar old mode 100755 new mode 100644 index 016136c943c..97240916d2e Binary files a/features/nanostack/FEATURE_THREAD_END_DEVICE/TOOLCHAIN_ARM/TARGET_RTOS_M4_M7/libnanostack_armcc_Cortex-M3_thread_end_device.ar and b/features/nanostack/FEATURE_THREAD_END_DEVICE/TOOLCHAIN_ARM/TARGET_RTOS_M4_M7/libnanostack_armcc_Cortex-M3_thread_end_device.ar differ diff --git a/features/nanostack/FEATURE_THREAD_END_DEVICE/TOOLCHAIN_GCC/TARGET_LIKE_CORTEX_M0/libnanostack_arm-none-eabi-gcc_Cortex-M0_thread_end_device.a b/features/nanostack/FEATURE_THREAD_END_DEVICE/TOOLCHAIN_GCC/TARGET_LIKE_CORTEX_M0/libnanostack_arm-none-eabi-gcc_Cortex-M0_thread_end_device.a old mode 100755 new mode 100644 index ec8f46ef699..45cb0bafa5f Binary files a/features/nanostack/FEATURE_THREAD_END_DEVICE/TOOLCHAIN_GCC/TARGET_LIKE_CORTEX_M0/libnanostack_arm-none-eabi-gcc_Cortex-M0_thread_end_device.a and b/features/nanostack/FEATURE_THREAD_END_DEVICE/TOOLCHAIN_GCC/TARGET_LIKE_CORTEX_M0/libnanostack_arm-none-eabi-gcc_Cortex-M0_thread_end_device.a differ diff --git a/features/nanostack/FEATURE_THREAD_END_DEVICE/TOOLCHAIN_GCC/TARGET_M3/libnanostack_arm-none-eabi-gcc_Cortex-M3_thread_end_device.a b/features/nanostack/FEATURE_THREAD_END_DEVICE/TOOLCHAIN_GCC/TARGET_M3/libnanostack_arm-none-eabi-gcc_Cortex-M3_thread_end_device.a old mode 100755 new mode 100644 index 42a372f0b06..ca865e567b6 Binary files a/features/nanostack/FEATURE_THREAD_END_DEVICE/TOOLCHAIN_GCC/TARGET_M3/libnanostack_arm-none-eabi-gcc_Cortex-M3_thread_end_device.a and b/features/nanostack/FEATURE_THREAD_END_DEVICE/TOOLCHAIN_GCC/TARGET_M3/libnanostack_arm-none-eabi-gcc_Cortex-M3_thread_end_device.a differ diff --git a/features/nanostack/FEATURE_THREAD_END_DEVICE/TOOLCHAIN_GCC/TARGET_RTOS_M4_M7/libnanostack_arm-none-eabi-gcc_Cortex-M3_thread_end_device.a b/features/nanostack/FEATURE_THREAD_END_DEVICE/TOOLCHAIN_GCC/TARGET_RTOS_M4_M7/libnanostack_arm-none-eabi-gcc_Cortex-M3_thread_end_device.a old mode 100755 new mode 100644 index 42a372f0b06..ca865e567b6 Binary files a/features/nanostack/FEATURE_THREAD_END_DEVICE/TOOLCHAIN_GCC/TARGET_RTOS_M4_M7/libnanostack_arm-none-eabi-gcc_Cortex-M3_thread_end_device.a and b/features/nanostack/FEATURE_THREAD_END_DEVICE/TOOLCHAIN_GCC/TARGET_RTOS_M4_M7/libnanostack_arm-none-eabi-gcc_Cortex-M3_thread_end_device.a differ diff --git a/features/nanostack/FEATURE_THREAD_END_DEVICE/TOOLCHAIN_IAR/TARGET_LIKE_CORTEX_M0/libnanostack_iccarm_Cortex-M0_thread_end_device.a b/features/nanostack/FEATURE_THREAD_END_DEVICE/TOOLCHAIN_IAR/TARGET_LIKE_CORTEX_M0/libnanostack_iccarm_Cortex-M0_thread_end_device.a old mode 100755 new mode 100644 index 8b7f1988129..aec8686a0af Binary files a/features/nanostack/FEATURE_THREAD_END_DEVICE/TOOLCHAIN_IAR/TARGET_LIKE_CORTEX_M0/libnanostack_iccarm_Cortex-M0_thread_end_device.a and b/features/nanostack/FEATURE_THREAD_END_DEVICE/TOOLCHAIN_IAR/TARGET_LIKE_CORTEX_M0/libnanostack_iccarm_Cortex-M0_thread_end_device.a differ diff --git a/features/nanostack/FEATURE_THREAD_END_DEVICE/TOOLCHAIN_IAR/TARGET_M3/libnanostack_iccarm_Cortex-M3_thread_end_device.a b/features/nanostack/FEATURE_THREAD_END_DEVICE/TOOLCHAIN_IAR/TARGET_M3/libnanostack_iccarm_Cortex-M3_thread_end_device.a old mode 100755 new mode 100644 index 389c65e02b4..27e6e6bef4a Binary files a/features/nanostack/FEATURE_THREAD_END_DEVICE/TOOLCHAIN_IAR/TARGET_M3/libnanostack_iccarm_Cortex-M3_thread_end_device.a and b/features/nanostack/FEATURE_THREAD_END_DEVICE/TOOLCHAIN_IAR/TARGET_M3/libnanostack_iccarm_Cortex-M3_thread_end_device.a differ diff --git a/features/nanostack/FEATURE_THREAD_END_DEVICE/TOOLCHAIN_IAR/TARGET_RTOS_M4_M7/libnanostack_iccarm_Cortex-M3_thread_end_device.a b/features/nanostack/FEATURE_THREAD_END_DEVICE/TOOLCHAIN_IAR/TARGET_RTOS_M4_M7/libnanostack_iccarm_Cortex-M3_thread_end_device.a old mode 100755 new mode 100644 index 389c65e02b4..27e6e6bef4a Binary files a/features/nanostack/FEATURE_THREAD_END_DEVICE/TOOLCHAIN_IAR/TARGET_RTOS_M4_M7/libnanostack_iccarm_Cortex-M3_thread_end_device.a and b/features/nanostack/FEATURE_THREAD_END_DEVICE/TOOLCHAIN_IAR/TARGET_RTOS_M4_M7/libnanostack_iccarm_Cortex-M3_thread_end_device.a differ diff --git a/features/nanostack/FEATURE_THREAD_ROUTER/TOOLCHAIN_ARM/TARGET_LIKE_CORTEX_M0/libnanostack_armcc_Cortex-M0_thread_router.ar b/features/nanostack/FEATURE_THREAD_ROUTER/TOOLCHAIN_ARM/TARGET_LIKE_CORTEX_M0/libnanostack_armcc_Cortex-M0_thread_router.ar old mode 100755 new mode 100644 index d42d222639b..adacf260402 Binary files a/features/nanostack/FEATURE_THREAD_ROUTER/TOOLCHAIN_ARM/TARGET_LIKE_CORTEX_M0/libnanostack_armcc_Cortex-M0_thread_router.ar and b/features/nanostack/FEATURE_THREAD_ROUTER/TOOLCHAIN_ARM/TARGET_LIKE_CORTEX_M0/libnanostack_armcc_Cortex-M0_thread_router.ar differ diff --git a/features/nanostack/FEATURE_THREAD_ROUTER/TOOLCHAIN_ARM/TARGET_M3/libnanostack_armcc_Cortex-M3_thread_router.ar b/features/nanostack/FEATURE_THREAD_ROUTER/TOOLCHAIN_ARM/TARGET_M3/libnanostack_armcc_Cortex-M3_thread_router.ar old mode 100755 new mode 100644 index 1f2ad36bc4c..9f7e72cfd15 Binary files a/features/nanostack/FEATURE_THREAD_ROUTER/TOOLCHAIN_ARM/TARGET_M3/libnanostack_armcc_Cortex-M3_thread_router.ar and b/features/nanostack/FEATURE_THREAD_ROUTER/TOOLCHAIN_ARM/TARGET_M3/libnanostack_armcc_Cortex-M3_thread_router.ar differ diff --git a/features/nanostack/FEATURE_THREAD_ROUTER/TOOLCHAIN_ARM/TARGET_RTOS_M4_M7/libnanostack_armcc_Cortex-M3_thread_router.ar b/features/nanostack/FEATURE_THREAD_ROUTER/TOOLCHAIN_ARM/TARGET_RTOS_M4_M7/libnanostack_armcc_Cortex-M3_thread_router.ar old mode 100755 new mode 100644 index 1f2ad36bc4c..9f7e72cfd15 Binary files a/features/nanostack/FEATURE_THREAD_ROUTER/TOOLCHAIN_ARM/TARGET_RTOS_M4_M7/libnanostack_armcc_Cortex-M3_thread_router.ar and b/features/nanostack/FEATURE_THREAD_ROUTER/TOOLCHAIN_ARM/TARGET_RTOS_M4_M7/libnanostack_armcc_Cortex-M3_thread_router.ar differ diff --git a/features/nanostack/FEATURE_THREAD_ROUTER/TOOLCHAIN_GCC/TARGET_LIKE_CORTEX_M0/libnanostack_arm-none-eabi-gcc_Cortex-M0_thread_router.a b/features/nanostack/FEATURE_THREAD_ROUTER/TOOLCHAIN_GCC/TARGET_LIKE_CORTEX_M0/libnanostack_arm-none-eabi-gcc_Cortex-M0_thread_router.a old mode 100755 new mode 100644 index 84b6dfccd1d..a4356eaf823 Binary files a/features/nanostack/FEATURE_THREAD_ROUTER/TOOLCHAIN_GCC/TARGET_LIKE_CORTEX_M0/libnanostack_arm-none-eabi-gcc_Cortex-M0_thread_router.a and b/features/nanostack/FEATURE_THREAD_ROUTER/TOOLCHAIN_GCC/TARGET_LIKE_CORTEX_M0/libnanostack_arm-none-eabi-gcc_Cortex-M0_thread_router.a differ diff --git a/features/nanostack/FEATURE_THREAD_ROUTER/TOOLCHAIN_GCC/TARGET_M3/libnanostack_arm-none-eabi-gcc_Cortex-M3_thread_router.a b/features/nanostack/FEATURE_THREAD_ROUTER/TOOLCHAIN_GCC/TARGET_M3/libnanostack_arm-none-eabi-gcc_Cortex-M3_thread_router.a old mode 100755 new mode 100644 index 4ad1ad96b3e..8c92b6b8c4c Binary files a/features/nanostack/FEATURE_THREAD_ROUTER/TOOLCHAIN_GCC/TARGET_M3/libnanostack_arm-none-eabi-gcc_Cortex-M3_thread_router.a and b/features/nanostack/FEATURE_THREAD_ROUTER/TOOLCHAIN_GCC/TARGET_M3/libnanostack_arm-none-eabi-gcc_Cortex-M3_thread_router.a differ diff --git a/features/nanostack/FEATURE_THREAD_ROUTER/TOOLCHAIN_GCC/TARGET_RTOS_M4_M7/libnanostack_arm-none-eabi-gcc_Cortex-M3_thread_router.a b/features/nanostack/FEATURE_THREAD_ROUTER/TOOLCHAIN_GCC/TARGET_RTOS_M4_M7/libnanostack_arm-none-eabi-gcc_Cortex-M3_thread_router.a old mode 100755 new mode 100644 index 4ad1ad96b3e..8c92b6b8c4c Binary files a/features/nanostack/FEATURE_THREAD_ROUTER/TOOLCHAIN_GCC/TARGET_RTOS_M4_M7/libnanostack_arm-none-eabi-gcc_Cortex-M3_thread_router.a and b/features/nanostack/FEATURE_THREAD_ROUTER/TOOLCHAIN_GCC/TARGET_RTOS_M4_M7/libnanostack_arm-none-eabi-gcc_Cortex-M3_thread_router.a differ diff --git a/features/nanostack/FEATURE_THREAD_ROUTER/TOOLCHAIN_IAR/TARGET_LIKE_CORTEX_M0/libnanostack_iccarm_Cortex-M0_thread_router.a b/features/nanostack/FEATURE_THREAD_ROUTER/TOOLCHAIN_IAR/TARGET_LIKE_CORTEX_M0/libnanostack_iccarm_Cortex-M0_thread_router.a old mode 100755 new mode 100644 index 05f0c0e5cca..5b0a43972f4 Binary files a/features/nanostack/FEATURE_THREAD_ROUTER/TOOLCHAIN_IAR/TARGET_LIKE_CORTEX_M0/libnanostack_iccarm_Cortex-M0_thread_router.a and b/features/nanostack/FEATURE_THREAD_ROUTER/TOOLCHAIN_IAR/TARGET_LIKE_CORTEX_M0/libnanostack_iccarm_Cortex-M0_thread_router.a differ diff --git a/features/nanostack/FEATURE_THREAD_ROUTER/TOOLCHAIN_IAR/TARGET_M3/libnanostack_iccarm_Cortex-M3_thread_router.a b/features/nanostack/FEATURE_THREAD_ROUTER/TOOLCHAIN_IAR/TARGET_M3/libnanostack_iccarm_Cortex-M3_thread_router.a old mode 100755 new mode 100644 index 887ada3579f..abe04acd4e1 Binary files a/features/nanostack/FEATURE_THREAD_ROUTER/TOOLCHAIN_IAR/TARGET_M3/libnanostack_iccarm_Cortex-M3_thread_router.a and b/features/nanostack/FEATURE_THREAD_ROUTER/TOOLCHAIN_IAR/TARGET_M3/libnanostack_iccarm_Cortex-M3_thread_router.a differ diff --git a/features/nanostack/FEATURE_THREAD_ROUTER/TOOLCHAIN_IAR/TARGET_RTOS_M4_M7/libnanostack_iccarm_Cortex-M3_thread_router.a b/features/nanostack/FEATURE_THREAD_ROUTER/TOOLCHAIN_IAR/TARGET_RTOS_M4_M7/libnanostack_iccarm_Cortex-M3_thread_router.a old mode 100755 new mode 100644 index 887ada3579f..abe04acd4e1 Binary files a/features/nanostack/FEATURE_THREAD_ROUTER/TOOLCHAIN_IAR/TARGET_RTOS_M4_M7/libnanostack_iccarm_Cortex-M3_thread_router.a and b/features/nanostack/FEATURE_THREAD_ROUTER/TOOLCHAIN_IAR/TARGET_RTOS_M4_M7/libnanostack_iccarm_Cortex-M3_thread_router.a differ