Skip to content

Commit 0dfb79e

Browse files
committed
Merge commit '00253cb11629fab6f753682d89faa2ce7b4a213a' into nanostack_v15_1_0
* commit '00253cb11629fab6f753682d89faa2ce7b4a213a': Squashed 'connectivity/nanostack/sal-stack-nanostack/' changes from 225a4af..154db5425e
2 parents b129f6e + 00253cb commit 0dfb79e

File tree

83 files changed

+2812
-2031
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

83 files changed

+2812
-2031
lines changed

connectivity/nanostack/sal-stack-nanostack/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Copyright (c) 2020 ARM Limited. All rights reserved.
1+
# Copyright (c) 2020-2021, Pelion and affiliates.
22
# SPDX-License-Identifier: Apache-2.0
33

44
add_subdirectory(source/6LoWPAN)

connectivity/nanostack/sal-stack-nanostack/nanostack/net_interface.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,8 @@ typedef enum arm_library_event_type_e {
9999
#define SOCKET_NO_RAM (10 << 4)
100100
/** TCP connection problem indication (RFC 1122 R1) */
101101
#define SOCKET_CONNECTION_PROBLEM (11 << 4)
102+
/** Socket is busy or Radio is returning CCA failure */
103+
#define SOCKET_BUSY (12 << 4)
102104

103105
#define SOCKET_BIND_DONE SOCKET_CONNECT_DONE /**< Backward compatibility */
104106
#define SOCKET_BIND_FAIL SOCKET_CONNECT_FAIL /**< Backward compatibility */

connectivity/nanostack/sal-stack-nanostack/nanostack/socket_api.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@ extern "C" {
115115
* | | | TCP: some data acknowledged (d_len = data remaining in send queue) |
116116
* | SOCKET_NO_RAM | 0xA0 | No RAM available. |
117117
* | SOCKET_CONNECTION_PROBLEM | 0xB0 | TCP connection is retrying. |
118+
* | SOCKET_BUSY | 0xC0 | Socket is busy or Radio channel is returning CCA failure. |
118119
*
119120
*
120121
* \section socket-tcp How to use TCP sockets:

connectivity/nanostack/sal-stack-nanostack/nanostack/ws_bbr_api.h

Lines changed: 66 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,22 @@ typedef struct bbr_timezone_configuration {
8888
* "bit xxxxxxxxxxxxxxxS" 0 = false 1 = true Daylight saving time status*/
8989
uint16_t status;
9090
} bbr_timezone_configuration_t;
91+
92+
93+
/**
94+
* \brief Border router configuration.
95+
*/
96+
typedef struct bbr_configuration_s {
97+
uint32_t dhcp_address_lifetime; /**< DHCP address lifetime in seconds minimum 2 hours and maximum few days*/
98+
uint32_t rpl_default_lifetime; /**< RPL default lifetime value from 30 minutes to 16 hours*/
99+
uint16_t dag_max_rank_increase; /**< DIO Max rank increase. Range 0-2048 */
100+
uint16_t min_hop_rank_increase; /**< DIO Min hop rank increase. range 32-256 */
101+
uint16_t options; /**< Border router configuration options */
102+
uint8_t dio_interval_min; /**< DIO interval min. range 1-255 */
103+
uint8_t dio_interval_doublings; /**< DIO interval doublings. range 1-8 */
104+
uint8_t dio_redundancy_constant; /**< DIO redundancy constant. Range 0-10 */
105+
} bbr_configuration_t;
106+
91107
/**
92108
* Start backbone border router service.
93109
*
@@ -270,7 +286,52 @@ int ws_bbr_eapol_node_limit_set(int8_t interface_id, uint16_t limit);
270286
int ws_bbr_ext_certificate_validation_set(int8_t interface_id, uint8_t validation);
271287

272288
/**
273-
* Sets RPL parameters
289+
* Sets Border router configuration
290+
*
291+
* Sets the configuration to the border router. Use ws_configuration_get to get
292+
* the settings and modify wanted parameters.
293+
*
294+
* Minor validation is done to parameters, but full validation must be done
295+
* at application level
296+
*
297+
* \param interface_id Network interface ID.
298+
* \param configuration_ptr Configuration structure.
299+
*
300+
* \return 0, Configuration parameters set.
301+
* \return <0 Parameter set failed.
302+
*/
303+
int ws_bbr_configuration_set(int8_t interface_id, bbr_configuration_t *configuration_ptr);
304+
305+
/**
306+
* Get Border router configuration
307+
*
308+
* Gets the current configuration to the border router.
309+
*
310+
* \param interface_id Network interface ID.
311+
* \param configuration_ptr Configuration structure.
312+
*
313+
* \return 0, Configuration parameters set.
314+
* \return <0 Parameter set failed.
315+
*/
316+
int ws_bbr_configuration_get(int8_t interface_id, bbr_configuration_t *configuration_ptr);
317+
318+
/**
319+
* validate Border router configuration
320+
*
321+
* Minor validation is done to parameters.
322+
* Full validation must be done at application level.
323+
*
324+
* \param interface_id Network interface ID.
325+
* \param configuration_ptr Configuration structure.
326+
*
327+
* \return 0, Configuration parameters set.
328+
* \return <0 Parameter set failed.
329+
*/
330+
int ws_bbr_configuration_validate(int8_t interface_id, bbr_configuration_t *configuration_ptr);
331+
332+
/**
333+
* Sets RPL parameters (DEPRECATED)
334+
* Use ws_bbr_configuration_set instead.
274335
*
275336
* Sets RPL DIO trickle parameters.
276337
*
@@ -285,7 +346,8 @@ int ws_bbr_ext_certificate_validation_set(int8_t interface_id, uint8_t validatio
285346
int ws_bbr_rpl_parameters_set(int8_t interface_id, uint8_t dio_interval_min, uint8_t dio_interval_doublings, uint8_t dio_redundancy_constant);
286347

287348
/**
288-
* Gets RPL parameters
349+
* Gets RPL parameters (DEPRECATED)
350+
* Use ws_bbr_configuration_get instead.
289351
*
290352
* Gets RPL DIO trickle parameters.
291353
*
@@ -300,7 +362,8 @@ int ws_bbr_rpl_parameters_set(int8_t interface_id, uint8_t dio_interval_min, uin
300362
int ws_bbr_rpl_parameters_get(int8_t interface_id, uint8_t *dio_interval_min, uint8_t *dio_interval_doublings, uint8_t *dio_redundancy_constant);
301363

302364
/**
303-
* Validate RPL parameters
365+
* Validate RPL parameters (DEPRECATED)
366+
* Use ws_bbr_configuration_validate instead.
304367
*
305368
* Validates RPL DIO trickle parameters.
306369
*

connectivity/nanostack/sal-stack-nanostack/source/6LoWPAN/CMakeLists.txt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Copyright (c) 2020 ARM Limited. All rights reserved.
1+
# Copyright (c) 2020-2021, Pelion and affiliates.
22
# SPDX-License-Identifier: Apache-2.0
33

44
target_include_directories(mbed-nanostack-sal_stack
@@ -84,8 +84,9 @@ target_sources(mbed-nanostack-sal_stack
8484
ws/ws_bbr_api.c
8585
ws/ws_bootstrap.c
8686
ws/ws_bootstrap_6lbr.c
87+
ws/ws_bootstrap_6ln.c
88+
ws/ws_bootstrap_6lr.c
8789
ws/ws_bootstrap_ffn.c
88-
ws/ws_bootstrap_lfn.c
8990
ws/ws_cfg_settings.c
9091
ws/ws_common.c
9192
ws/ws_eapol_auth_relay.c

connectivity/nanostack/sal-stack-nanostack/source/6LoWPAN/ND/nd_router_object.c

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -849,6 +849,7 @@ static void nd_update_registration(protocol_interface_info_entry_t *cur_interfac
849849
/* Register with 2 seconds off the lifetime - don't want the NCE to expire before the route */
850850
ipv6_route_add_metric(neigh->ip_address, 128, cur_interface->id, neigh->ip_address, ROUTE_ARO, NULL, 0, neigh->lifetime - 2, 32);
851851

852+
#ifdef HAVE_RPL
852853
/* We need to know peer is a host before publishing - this needs MLE. Not yet established
853854
* what to do without MLE - might need special external/non-external prioritisation at root.
854855
* This "publish for RFD" rule comes from ZigBee IP.
@@ -861,6 +862,7 @@ static void nd_update_registration(protocol_interface_info_entry_t *cur_interfac
861862
rpl_control_publish_host_address(protocol_6lowpan_rpl_domain, neigh->ip_address, neigh->lifetime);
862863
}
863864
}
865+
#endif // HAVE_RPL
864866
protocol_6lowpan_neighbor_address_state_synch(cur_interface, aro->eui64, neigh->ip_address + 8);
865867

866868
} else {
@@ -870,10 +872,13 @@ static void nd_update_registration(protocol_interface_info_entry_t *cur_interfac
870872
neigh->lifetime = 2;
871873
ipv6_neighbour_set_state(&cur_interface->ipv6_neighbour_cache, neigh, IP_NEIGHBOUR_STALE);
872874
ipv6_route_add_metric(neigh->ip_address, 128, cur_interface->id, neigh->ip_address, ROUTE_ARO, NULL, 0, 4, 32);
875+
#ifdef HAVE_RPL
873876
rpl_control_unpublish_address(protocol_6lowpan_rpl_domain, neigh->ip_address);
877+
#endif
874878
}
875879
}
876880

881+
#ifdef HAVE_RPL
877882
void nd_remove_registration(protocol_interface_info_entry_t *cur_interface, addrtype_t ll_type, const uint8_t *ll_address)
878883
{
879884
ns_list_foreach_safe(ipv6_neighbour_t, cur, &cur_interface->ipv6_neighbour_cache.list) {
@@ -888,7 +893,9 @@ void nd_remove_registration(protocol_interface_info_entry_t *cur_interface, addr
888893
}
889894
}
890895
}
896+
#endif // HAVE_RPL
891897

898+
#ifdef HAVE_RPL
892899
/* Process ICMP Neighbor Solicitation (RFC 4861 + RFC 6775) ARO. */
893900
bool nd_ns_aro_handler(protocol_interface_info_entry_t *cur_interface, const uint8_t *aro_opt, const uint8_t *slla_opt, const uint8_t *src_addr, aro_t *aro_out)
894901
{
@@ -1032,6 +1039,7 @@ bool nd_ns_aro_handler(protocol_interface_info_entry_t *cur_interface, const uin
10321039
return false; /* Tell ns_handler to not transmit now */
10331040
}
10341041
}
1042+
#endif //HAVE_RPL
10351043

10361044
buffer_t *nd_dac_handler(buffer_t *buf, protocol_interface_info_entry_t *cur)
10371045
{
@@ -1304,6 +1312,7 @@ void nd_ra_process_lowpan_context_option(protocol_interface_info_entry_t *cur, c
13041312
lowpan_context_update(&cur->lowpan_contexts, cid_flags, lifetime, opt + 8, ctx_len, true);
13051313
}
13061314
#ifdef HAVE_6LOWPAN_ROUTER
1315+
#ifdef HAVE_RPL
13071316
static void nd_ra_build(nd_router_t *cur, const uint8_t *address, protocol_interface_info_entry_t *cur_interface)
13081317
{
13091318
if (!(cur_interface->lowpan_info & INTERFACE_NWK_BOOTSRAP_ADDRESS_REGISTER_READY) || !icmp_nd_router_prefix_valid(cur)) {
@@ -1393,7 +1402,6 @@ void nd_ra_build_by_abro(const uint8_t *abro, const uint8_t *dest, protocol_inte
13931402
}
13941403
}
13951404

1396-
13971405
void nd_trigger_ras_from_rs(const uint8_t *unicast_adr, protocol_interface_info_entry_t *cur_interface)
13981406
{
13991407
ns_list_foreach(nd_router_t, cur, &nd_router_list) {
@@ -1470,7 +1478,7 @@ static nd_router_t *nd_router_object_scan_by_prefix(const uint8_t *ptr, nwk_inte
14701478

14711479
return NULL;
14721480
}
1473-
1481+
#endif //HAVE_RPL
14741482
#endif
14751483

14761484
void gp_address_add_to_end(gp_ipv6_address_list_t *list, const uint8_t address[static 16])

connectivity/nanostack/sal-stack-nanostack/source/6LoWPAN/adaptation_interface.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1747,6 +1747,9 @@ static uint8_t map_mlme_status_to_socket_event(uint8_t mlme_status)
17471747
case MLME_SUCCESS:
17481748
socket_event = SOCKET_TX_DONE;
17491749
break;
1750+
case MLME_BUSY_CHAN:
1751+
socket_event = SOCKET_BUSY;
1752+
break;
17501753
case MLME_TX_NO_ACK:
17511754
case MLME_SECURITY_FAIL:
17521755
case MLME_TRANSACTION_EXPIRED:

connectivity/nanostack/sal-stack-nanostack/source/6LoWPAN/ws/ws_bbr_api.c

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
#include "6LoWPAN/ws/ws_config.h"
3232
#include "6LoWPAN/ws/ws_common.h"
3333
#include "6LoWPAN/ws/ws_bootstrap.h"
34+
#include "6LoWPAN/ws/ws_bootstrap_ffn.h"
3435
#include "6LoWPAN/ws/ws_cfg_settings.h"
3536
#include "6LoWPAN/ws/ws_pae_key_storage.h"
3637
#include "6LoWPAN/ws/ws_pae_nvm_store.h"
@@ -1209,6 +1210,94 @@ int ws_bbr_ext_certificate_validation_set(int8_t interface_id, uint8_t validatio
12091210
return -1;
12101211
#endif
12111212
}
1213+
int ws_bbr_configuration_set(int8_t interface_id, bbr_configuration_t *configuration_ptr)
1214+
{
1215+
#ifdef HAVE_WS_BORDER_ROUTER
1216+
protocol_interface_info_entry_t *cur = protocol_stack_interface_info_get_by_id(interface_id);
1217+
1218+
ws_bbr_cfg_t cfg;
1219+
if (!configuration_ptr || ws_cfg_bbr_get(&cfg) < 0) {
1220+
return -1;
1221+
}
1222+
1223+
cfg.dio_interval_min = configuration_ptr->dio_interval_min;
1224+
cfg.dio_interval_doublings = configuration_ptr->dio_interval_doublings;
1225+
cfg.dio_redundancy_constant = configuration_ptr->dio_redundancy_constant;
1226+
cfg.dag_max_rank_increase = configuration_ptr->dag_max_rank_increase;
1227+
cfg.min_hop_rank_increase = configuration_ptr->min_hop_rank_increase;
1228+
cfg.dhcp_address_lifetime = configuration_ptr->dhcp_address_lifetime;
1229+
cfg.rpl_default_lifetime = configuration_ptr->rpl_default_lifetime;
1230+
1231+
/* Configuration change is different from settings change as it changes
1232+
* PAN version instead of RPL version.
1233+
*/
1234+
ws_bbr_configure(interface_id, configuration_ptr->options);
1235+
1236+
if (ws_cfg_bbr_set(cur, &cfg, 0) < 0) {
1237+
return -2;
1238+
}
1239+
1240+
return 0;
1241+
#else
1242+
(void) interface_id;
1243+
(void) configuration_ptr;
1244+
return -1;
1245+
#endif
1246+
}
1247+
1248+
int ws_bbr_configuration_get(int8_t interface_id, bbr_configuration_t *configuration_ptr)
1249+
{
1250+
#ifdef HAVE_WS_BORDER_ROUTER
1251+
(void) interface_id;
1252+
ws_bbr_cfg_t cfg;
1253+
if (!configuration_ptr || ws_cfg_bbr_get(&cfg) < 0) {
1254+
return -1;
1255+
}
1256+
1257+
configuration_ptr->dio_interval_min = cfg.dio_interval_min;
1258+
configuration_ptr->dio_interval_doublings = cfg.dio_interval_doublings;
1259+
configuration_ptr->dio_redundancy_constant = cfg.dio_redundancy_constant;
1260+
configuration_ptr->dag_max_rank_increase = cfg.dag_max_rank_increase;
1261+
configuration_ptr->min_hop_rank_increase = cfg.min_hop_rank_increase;
1262+
configuration_ptr->dhcp_address_lifetime = cfg.dhcp_address_lifetime;
1263+
configuration_ptr->rpl_default_lifetime = cfg.rpl_default_lifetime;
1264+
configuration_ptr->options = configuration;
1265+
return 0;
1266+
#else
1267+
(void) interface_id;
1268+
(void) configuration_ptr;
1269+
return -1;
1270+
#endif
1271+
}
1272+
1273+
int ws_bbr_configuration_validate(int8_t interface_id, bbr_configuration_t *configuration_ptr)
1274+
{
1275+
#ifdef HAVE_WS_BORDER_ROUTER
1276+
(void) interface_id;
1277+
ws_bbr_cfg_t cfg;
1278+
if (!configuration_ptr || ws_cfg_bbr_get(&cfg) < 0) {
1279+
return -1;
1280+
}
1281+
1282+
cfg.dio_interval_min = configuration_ptr->dio_interval_min;
1283+
cfg.dio_interval_doublings = configuration_ptr->dio_interval_doublings;
1284+
cfg.dio_redundancy_constant = configuration_ptr->dio_redundancy_constant;
1285+
cfg.dag_max_rank_increase = configuration_ptr->dag_max_rank_increase;
1286+
cfg.min_hop_rank_increase = configuration_ptr->min_hop_rank_increase;
1287+
cfg.dhcp_address_lifetime = configuration_ptr->dhcp_address_lifetime;
1288+
cfg.rpl_default_lifetime = configuration_ptr->rpl_default_lifetime;
1289+
1290+
if (ws_cfg_bbr_validate(&cfg) < 0) {
1291+
return -3;
1292+
}
1293+
1294+
return 0;
1295+
#else
1296+
(void) interface_id;
1297+
(void) configuration_ptr;
1298+
return -1;
1299+
#endif
1300+
}
12121301

12131302
int ws_bbr_rpl_parameters_set(int8_t interface_id, uint8_t dio_interval_min, uint8_t dio_interval_doublings, uint8_t dio_redundancy_constant)
12141303
{

0 commit comments

Comments
 (0)