static int frescan_bwres_send_mc_messages
(frescan_network_t net,
- frescan_bwres_mode_change_type_t mode_change_type);
+ frescan_bwres_mode_change_type_t mode_change_type,
+ frescan_ss_group_t *ss_to_cancel);
/**
* frescan_bwres_mode_change_protocol() - performs the mode change protocol
[vres->fsa_vres_global_id];
vres->mode_change_type = 0;
+ if ((vres->old_c == 0) &&
+ (vres->old_t == 0) &&
+ (vres->old_p == 0)) {
+ //new vres (transmitted in the reply message)
+ vres->old_c = sa_vres_data->c;
+ vres->old_t = sa_vres_data->t;
+ vres->old_p = sa_vres_data->p;
+ continue;
+ }
+
if (sa_vres_data->c > vres->old_c) {
vres->mode_change_type |= FRESCAN_BWRES_MC_BUDGET_INC;
if (sa_vres_data->t > max_period_in_budget_inc) {
DEBUG(FRESCAN_BWRES_MC_ENABLE_DEBUG, "2.- Budget decrease\n");
ret = frescan_bwres_send_mc_messages(req_data->net,
- FRESCAN_BWRES_MC_BUDGET_DEC);
+ FRESCAN_BWRES_MC_BUDGET_DEC,
+ req_data->ss_to_cancel);
if (ret != 0) return -1;
ret = frescan_bwres_mode_change_local(req_data->net,
- FRESCAN_BWRES_MC_BUDGET_DEC);
+ FRESCAN_BWRES_MC_BUDGET_DEC,
+ req_data->ss_to_cancel);
if (ret != 0) return -1;
DEBUG(FRESCAN_BWRES_MC_ENABLE_DEBUG, "3.- Wait max_period\n");
DEBUG(FRESCAN_BWRES_MC_ENABLE_DEBUG, "4.- Budget increase\n");
ret = frescan_bwres_send_mc_messages(req_data->net,
- FRESCAN_BWRES_MC_BUDGET_INC);
+ FRESCAN_BWRES_MC_BUDGET_INC,
+ NULL);
if (ret != 0) return -1;
ret = frescan_bwres_mode_change_local(req_data->net,
- FRESCAN_BWRES_MC_BUDGET_INC);
+ FRESCAN_BWRES_MC_BUDGET_INC,
+ NULL);
if (ret != 0) return -1;
return 0;
static int frescan_bwres_send_mc_messages
(frescan_network_t net,
- frescan_bwres_mode_change_type_t mode_change_type)
+ frescan_bwres_mode_change_type_t mode_change_type,
+ frescan_ss_group_t *ss_to_cancel)
{
int ret;
frescan_node_t node;
"send MC message to node:%u\n", node);
tmp_req_data.request_node = node;
+ tmp_req_data.ss_to_cancel = ss_to_cancel;
ret = frescan_messages_send_request(&tmp_req_data);
if (ret != 0) return -1;
int frescan_bwres_mode_change_local
(frescan_network_t net,
- frescan_bwres_mode_change_type_t mode_change_type)
+ frescan_bwres_mode_change_type_t mode_change_type,
+ frescan_ss_group_t *ss_to_cancel)
{
- int ret;
+ int ret, i;
frescan_server_params_t server_params;
frescan_bwres_vres_t *vres;
struct timespec start_timestamp, next_activation;
if (mode_change_type == FRESCAN_BWRES_MC_BUDGET_INC) return 0;
+ // for ss cancelled set the perceived capacity to cero
+ if (ss_to_cancel != NULL) {
+ for(i=0; i<ss_to_cancel->size; i++) {
+ server_params.budget = 0;
+ server_params.period = frsh_usec_to_rel_time(0);
+ server_params.prio = 0;
+ ret = frescan_servers_set_perceived
+ (net,
+ &server_params,
+ ss_to_cancel->ss[i]);
+ if (ret != 0) return ret;
+ }
+ }
+
ret = clock_gettime(CLOCK_MONOTONIC, &start_timestamp);
if (ret != 0) return -1;
if (ret != 0) return ret;
}
+ if (ss_to_cancel != NULL) {
+ for(i=0; i<ss_to_cancel->size; i++) {
+ ret = frescan_servers_destroy
+ (net, ss_to_cancel->ss[i]);
+ if (ret != 0) return ret;
+ }
+ }
+
return 0;
}