void net_load_balance_internal_state_activate(protocol_interface_info_entry_t *interface_ptr, bool state) { #ifdef HAVE_6LOWPAN_ND if (!interface_ptr || !interface_ptr->lb_api || !interface_ptr->mac_api) { return; } uint32_t trigle_period = 3600; uint32_t route_lifetime_period = 3600; //Enable Load Balance #ifdef HAVE_RPL if (state && interface_ptr->rpl_domain) { struct rpl_instance *instance = rpl_control_lookup_instance(interface_ptr->rpl_domain, 1, NULL); if (instance) { const rpl_dodag_conf_t *dodag_config = rpl_control_get_dodag_config(instance); if (dodag_config) { //dio max Period caluclate in seconds uint32_t Imax_ms = (dodag_config->dio_interval_min + dodag_config->dio_interval_doublings) < 32 ? (1ul << (dodag_config->dio_interval_min + dodag_config->dio_interval_doublings)) : 0xfffffffful; trigle_period = Imax_ms / 1000; route_lifetime_period = (uint32_t)dodag_config->default_lifetime * dodag_config->lifetime_unit; } } } #endif interface_ptr->lb_api->lb_enable(interface_ptr->lb_api, state, trigle_period, route_lifetime_period); mlme_set_t set_req; set_req.attr = macLoadBalancingAcceptAnyBeacon; set_req.attr_index = 0; set_req.value_pointer = &state; set_req.value_size = sizeof(bool); interface_ptr->mac_api->mlme_req(interface_ptr->mac_api, MLME_SET, &set_req); #endif }
uint8_t rpl_read_dodag_info(rpl_dodag_info_t *dodag_ptr, uint8_t instance_id) { if (!protocol_6lowpan_rpl_domain) { return 0; } struct rpl_instance *instance = rpl_control_lookup_instance(protocol_6lowpan_rpl_domain, instance_id, dodag_ptr->dodag_id); if (!instance) { return 0; } return rpl_control_read_dodag_info(instance, dodag_ptr); }