From dca84479f54261f731045ba43234fec5d12079cb Mon Sep 17 00:00:00 2001 From: sangorrin Date: Tue, 25 Nov 2008 19:08:23 +0000 Subject: [PATCH] bug corrected in mode changes: in the slaves we have to set up the scenario values too, for the mode change algorithm git-svn-id: http://www.frescor.org/private/svn/frescor/fna/trunk@1435 35b4ef3e-fd22-0410-ab77-dab3279adceb --- src_frescan/frescan_bwres_messages.c | 75 ++++++++++++++++++++++------ 1 file changed, 60 insertions(+), 15 deletions(-) diff --git a/src_frescan/frescan_bwres_messages.c b/src_frescan/frescan_bwres_messages.c index d98b9ed..c8c775a 100644 --- a/src_frescan/frescan_bwres_messages.c +++ b/src_frescan/frescan_bwres_messages.c @@ -351,6 +351,9 @@ static int frescan_request_to_mc_message msg_begin = msg; + DEBUG(FRESCAN_BWRES_MESSAGES_ENABLE_DEBUG, + "MC send mode_change_type:0x%X\n", data->mode_change_type); + // type: FRESCAN_GN_MESSAGE *((uint8_t *)msg) = (uint8_t)FRESCAN_BWRES_REQ_MC; bytes_written = sizeof(uint8_t); @@ -393,6 +396,10 @@ static int frescan_request_to_mc_message bytes_written = sizeof(frsh_sa_prio_t); msg = msg + bytes_written; } + + DEBUG(FRESCAN_BWRES_MESSAGES_ENABLE_DEBUG, + "ss:%d c:%d t:%d p:%d\n", + vres->ss, vres->old_c, vres->old_t, vres->old_p); } *size = msg - msg_begin; @@ -412,7 +419,7 @@ static int frescan_mc_message_to_request(const uint8_t *msg_to_parse, frescan_bwres_vres_t *vres; frescan_node_t me; - DEBUG(FRESCAN_BWRES_MESSAGES_ENABLE_DEBUG, "MC message\n"); + DEBUG(FRESCAN_BWRES_MESSAGES_ENABLE_DEBUG, "MC message received\n"); msg = (uint8_t *)msg_to_parse; me = frescan_data[data->net].local_node; @@ -436,14 +443,14 @@ static int frescan_mc_message_to_request(const uint8_t *msg_to_parse, msg = msg + bytes_read; } - if (data->mode_change_type & (FRESCAN_BWRES_MC_PERIOD_INC | + if (vres->mode_change_type & (FRESCAN_BWRES_MC_PERIOD_INC | FRESCAN_BWRES_MC_PERIOD_DEC)) { vres->old_t = *((frsh_sa_time_t *)msg); bytes_read = sizeof(frsh_sa_time_t); msg = msg + bytes_read; } - if (data->mode_change_type & (FRESCAN_BWRES_MC_PRIO_INC | + if (vres->mode_change_type & (FRESCAN_BWRES_MC_PRIO_INC | FRESCAN_BWRES_MC_PRIO_DEC)) { vres->old_p = *((frsh_sa_prio_t *)msg); bytes_read = sizeof(frsh_sa_prio_t); @@ -457,6 +464,11 @@ static int frescan_mc_message_to_request(const uint8_t *msg_to_parse, } data->mode_change_type |= vres->mode_change_type; + + DEBUG(FRESCAN_BWRES_MESSAGES_ENABLE_DEBUG, + "mc:0x%X ss:%d vres->ss:%d c:%d t:%d p:%d\n", + vres->mode_change_type, ss, vres->ss, + vres->old_c, vres->old_t, vres->old_p); } return 0; @@ -496,6 +508,10 @@ static int frescan_request_to_rep_gn_message bytes_written = sizeof(uint8_t); msg = msg + bytes_written; + DEBUG(FRESCAN_BWRES_MESSAGES_ENABLE_DEBUG, + "req:%d return:%s\n", data->req, + (data->return_value == FRESCAN_BWRES_REQ_ACCEPTED)?"OK":"FAIL"); + if (data->return_value == FRESCAN_BWRES_REQ_ACCEPTED) { // new ss values for(i=0; icontracts_to_neg->size; i++) { @@ -522,7 +538,9 @@ static int frescan_request_to_rep_gn_message msg = msg + bytes_written; DEBUG(FRESCAN_BWRES_MESSAGES_ENABLE_DEBUG, - "ss[%d]:%u\n", i, data->ss_new->ss[i]); + "ss[%d]:%u b:%d t:%d p:%d\n", + i, data->ss_new->ss[i], + vres->old_c, vres->old_t, vres->old_p); } } @@ -543,6 +561,10 @@ static int frescan_rep_gn_message_to_request size_t bytes_read; frescan_ss_t ss; frescan_server_params_t server_params; + frescan_bwres_vres_t *vres; + frescan_node_t me; + + me = frescan_data[data->net].local_node; msg = (uint8_t *)msg_to_parse; @@ -556,6 +578,12 @@ static int frescan_rep_gn_message_to_request bytes_read = sizeof(uint8_t); msg = msg + bytes_read; + DEBUG(FRESCAN_BWRES_MESSAGES_ENABLE_DEBUG, + "req:%d return:%s\n", data->req, + (data->return_value == FRESCAN_BWRES_REQ_ACCEPTED)?"OK":"FAIL"); + + if (data->return_value != FRESCAN_BWRES_REQ_ACCEPTED) return 0; + // create the new sporadic servers data->ss_new->size = 0; @@ -565,33 +593,50 @@ static int frescan_rep_gn_message_to_request bytes_read = sizeof(uint16_t); msg = msg + bytes_read; + // Set values in the scenario (for mode changes) + vres = &frescan_data[data->net].scenario.vres_pool[me] + [data->ss_new->ss[data->ss_new->size]]; + + vres->ss = data->ss_new->ss[data->ss_new->size]; + vres->node = me; + // Budget - server_params.budget = - frsh_rel_time_to_usec - (frsh_sa_time_to_rel_time(*((frsh_sa_time_t *)msg))) / - FRESCAN_FRAME_TX_TIME_US; + vres->old_c = *((frsh_sa_time_t *)msg); bytes_read = sizeof(frsh_sa_time_t); msg = msg + bytes_read; // Period - server_params.period = frsh_sa_time_to_rel_time - (*((frsh_sa_time_t *)msg)); + vres->old_t = *((frsh_sa_time_t *)msg); bytes_read = sizeof(frsh_sa_time_t); msg = msg + bytes_read; // Prio - server_params.prio = *((frsh_sa_prio_t *)msg); + vres->old_p = *((frsh_sa_prio_t *)msg); bytes_read = sizeof(frsh_sa_prio_t); msg = msg + bytes_read; // Create server - ret = frescan_servers_create(data->net, &server_params, &ss); - if (ret != 0) return ret; + server_params.budget = frsh_rel_time_to_usec + (frsh_sa_time_to_rel_time(vres->old_c)) / + FRESCAN_FRAME_TX_TIME_US; + server_params.period = frsh_sa_time_to_rel_time(vres->old_t); + server_params.prio = vres->old_p; DEBUG(FRESCAN_BWRES_MESSAGES_ENABLE_DEBUG, - "ss_master[%d]:%u ss_created[%d]:%u\n", + "ss_master[%d]:%u ss[%d]:%u b:%d t:%d p:%d\n", data->ss_new->size, data->ss_new->ss[data->ss_new->size], - data->ss_new->size, ss); + data->ss_new->size, ss, + vres->old_c, vres->old_t, vres->old_p); + + DEBUG(FRESCAN_BWRES_MESSAGES_ENABLE_DEBUG, + "server_params[%d] b:%d t:(%d,%d) p:%d\n", + data->ss_new->size, server_params.budget, + server_params.period.tv_sec, + server_params.period.tv_nsec, + server_params.prio); + + ret = frescan_servers_create(data->net, &server_params, &ss); + if (ret != 0) return ret; if (ss != data->ss_new->ss[data->ss_new->size]) { FRESCAN_ERROR("ss from master != ss created\n"); -- 2.39.2