Ejemplo n.º 1
0
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

}
Ejemplo n.º 2
0
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);
}