Skip to content

Commit 2b61377

Browse files
author
Juha Heiskanen
committed
RPL DAO target request Update
Added posibility to request Registered DAO targets for spesific prefix. Integrated API update to load balance and wi-sun bbr. Change-Id: I19289d9b8c79ced32567ac53f2d09044b52c7cba
1 parent bba1105 commit 2b61377

File tree

7 files changed

+30
-8
lines changed

7 files changed

+30
-8
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/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)