Skip to content

Commit f871797

Browse files
author
Juha Heiskanen
authored
Merge pull request #2001 from ARMmbed/iotthd-2949
RPL DAO target request Update
2 parents 83fc53a + 64c5f23 commit f871797

File tree

8 files changed

+41
-14
lines changed

8 files changed

+41
-14
lines changed

source/6LoWPAN/ws/ws_bbr_api.c

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -468,8 +468,18 @@ uint16_t ws_bbr_pan_size(protocol_interface_info_entry_t *cur)
468468
if (test_pan_size_override != 0xffff) {
469469
return test_pan_size_override;
470470
}
471+
//
472+
const uint8_t *prefix_ptr;
473+
if ((configuration & (BBR_ULA_C | BBR_GUA_C)) == BBR_GUA_C) {
474+
//Use just GUA Prefix
475+
prefix_ptr = global_dodag_id;
471476

472-
rpl_control_get_instance_dao_target_count(cur->rpl_domain, RPL_INSTANCE_ID, NULL, &result);
477+
} else {
478+
//Use ULA for indentifier
479+
prefix_ptr = static_dodag_id;
480+
}
481+
482+
rpl_control_get_instance_dao_target_count(cur->rpl_domain, RPL_INSTANCE_ID, NULL, prefix_ptr, &result);
473483
return result;
474484
}
475485

source/6LoWPAN/ws/ws_bootstrap.c

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -845,6 +845,7 @@ static void ws_bootstrap_pan_advertisement_analyse(struct protocol_interface_inf
845845

846846
// Save route cost for all neighbours
847847
llc_neighbour_req_t neighbor_info;
848+
neighbor_info.neighbor = NULL;
848849
if (ws_bootstrap_neighbor_info_request(cur, data->SrcAddr, &neighbor_info, false)) {
849850
neighbor_info.ws_neighbor->routing_cost = pan_information.routing_cost;
850851
}
@@ -921,12 +922,16 @@ static void ws_bootstrap_pan_advertisement_analyse(struct protocol_interface_inf
921922
ws_bootstrap_pan_advertisement_analyse_active(cur, &pan_information);
922923

923924
// Learn latest network information
924-
if (cur->bootsrap_mode != ARM_NWK_BOOTSRAP_MODE_6LoWPAN_BORDER_ROUTER) {
925-
cur->ws_info->pan_information.pan_size = pan_information.pan_size;
926-
cur->ws_info->pan_information.routing_cost = pan_information.routing_cost;
927-
cur->ws_info->pan_information.rpl_routing_method = pan_information.rpl_routing_method;
928-
cur->ws_info->pan_information.use_parent_bs = pan_information.use_parent_bs;
929-
cur->ws_info->pan_information.version = pan_information.version;
925+
if (cur->bootsrap_mode != ARM_NWK_BOOTSRAP_MODE_6LoWPAN_BORDER_ROUTER && neighbor_info.neighbor) {
926+
927+
if (neighbor_info.neighbor->link_role == PRIORITY_PARENT_NEIGHBOUR) {
928+
cur->ws_info->pan_information.pan_size = pan_information.pan_size;
929+
cur->ws_info->pan_information.routing_cost = pan_information.routing_cost;
930+
cur->ws_info->pan_information.rpl_routing_method = pan_information.rpl_routing_method;
931+
cur->ws_info->pan_information.use_parent_bs = pan_information.use_parent_bs;
932+
cur->ws_info->pan_information.version = pan_information.version;
933+
}
934+
930935
}
931936
}
932937

source/RPL/rpl_control.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1654,13 +1654,14 @@ rpl_instance_t *rpl_control_lookup_instance(rpl_domain_t *domain, uint8_t instan
16541654
return rpl_lookup_instance(domain, instance_id, dodagid);
16551655
}
16561656

1657-
bool rpl_control_get_instance_dao_target_count(rpl_domain_t *domain, uint8_t instance_id, const uint8_t *dodagid, uint16_t *target_count)
1657+
bool rpl_control_get_instance_dao_target_count(rpl_domain_t *domain, uint8_t instance_id, const uint8_t *dodagid, const uint8_t *prefix, uint16_t *target_count)
16581658
{
16591659
rpl_instance_t *instance = rpl_lookup_instance(domain, instance_id, dodagid);
16601660
if (!instance) {
16611661
return false;
16621662
}
1663-
*target_count = rpl_upward_read_dao_target_list_size(instance);
1663+
1664+
*target_count = rpl_upward_read_dao_target_list_size(instance, prefix);
16641665
return true;
16651666
}
16661667

source/RPL/rpl_control.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ void rpl_control_print(route_print_fn_t *print_fn);
160160

161161
struct rpl_instance *rpl_control_enumerate_instances(rpl_domain_t *domain, struct rpl_instance *instance);
162162
struct rpl_instance *rpl_control_lookup_instance(rpl_domain_t *domain, uint8_t instance_id, const uint8_t *dodagid);
163-
bool rpl_control_get_instance_dao_target_count(rpl_domain_t *domain, uint8_t instance_id, const uint8_t *dodagid, uint16_t *target_count);
163+
bool rpl_control_get_instance_dao_target_count(rpl_domain_t *domain, uint8_t instance_id, const uint8_t *dodagid, const uint8_t *prefix, uint16_t *target_count);
164164
bool rpl_control_read_dodag_info(const struct rpl_instance *instance, struct rpl_dodag_info_t *dodag_info);
165165
const rpl_dodag_conf_t *rpl_control_get_dodag_config(const struct rpl_instance *instance);
166166
const uint8_t *rpl_control_preferred_parent_addr(const struct rpl_instance *instance, bool global);

source/RPL/rpl_upward.c

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1742,8 +1742,19 @@ void rpl_upward_print_instance(rpl_instance_t *instance, route_print_fn_t *print
17421742
}
17431743
}
17441744

1745-
uint16_t rpl_upward_read_dao_target_list_size(const rpl_instance_t *instance)
1745+
uint16_t rpl_upward_read_dao_target_list_size(const rpl_instance_t *instance, const uint8_t *target_prefix)
17461746
{
1747+
1748+
if (target_prefix) {
1749+
uint16_t registered_address_count = 0;
1750+
ns_list_foreach(rpl_dao_target_t, target, &instance->dao_targets) {
1751+
if (bitsequal(target->prefix, target_prefix, 64)) {
1752+
registered_address_count++;
1753+
}
1754+
}
1755+
return registered_address_count;
1756+
}
1757+
17471758
return ns_list_count(&instance->dao_targets);
17481759
}
17491760

source/RPL/rpl_upward.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,5 +143,5 @@ void rpl_instance_run_parent_selection(rpl_instance_t *instance);
143143
void rpl_upward_print_instance(rpl_instance_t *instance, route_print_fn_t *print_fn);
144144

145145
bool rpl_upward_read_dodag_info(const rpl_instance_t *instance, struct rpl_dodag_info_t *dodag_info);
146-
uint16_t rpl_upward_read_dao_target_list_size(const rpl_instance_t *instance);
146+
uint16_t rpl_upward_read_dao_target_list_size(const rpl_instance_t *instance, const uint8_t *target_prefix);
147147
#endif /* RPL_UPWARD_H_ */

source/libNET/src/net_load_balance.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,7 @@ void net_load_balance_internal_state_activate(protocol_interface_info_entry_t *i
268268
static int8_t net_load_balance_api_get_node_count_cb(void *lb_user, uint16_t *node_count)
269269
{
270270
protocol_interface_info_entry_t *interface_ptr = lb_user;
271-
if (rpl_control_get_instance_dao_target_count(interface_ptr->rpl_domain, 1, NULL, node_count)) {
271+
if (rpl_control_get_instance_dao_target_count(interface_ptr->rpl_domain, 1, NULL, NULL, node_count)) {
272272
return 0;
273273
}
274274

test/nanostack/unittest/stub/rpl_upward_stub.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -456,7 +456,7 @@ bool rpl_upward_read_dodag_info(const rpl_instance_t *instance, rpl_dodag_info_t
456456
return false;
457457
}
458458

459-
uint16_t rpl_upward_read_dao_target_list_size(const rpl_instance_t *instance)
459+
uint16_t rpl_upward_read_dao_target_list_size(const rpl_instance_t *instance, const uint8_t *target_prefix)
460460
{
461461
return 0;
462462
}

0 commit comments

Comments
 (0)