static void frescan_manager_req_gn(frescan_bwres_request_data_t *req_data)
{
- int ret;
+ int ret, i;
frescan_node_t me;
bool accepted;
frescan_bwres_sa_scenario_t *scenario;
+ frescan_ss_t ss;
+ frescan_server_params_t server_params;
+ frescan_bwres_vres_t *vres;
me = frescan_data[req_data->net].local_node;
}
if (req_data->request_node == me) {
+ // create servers for new contracts
+ for(i=0; i<req_data->contracts_to_neg->size; i++) {
+ vres = &frescan_data[req_data->net].scenario.
+ vres_pool[me]
+ [req_data->ss_new->ss[i]];
+
+ 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;
+
+ // Create server
+ ret = frescan_servers_create(req_data->net,
+ &server_params,
+ &ss);
+ assert(ret == 0);
+ assert (req_data->ss_new->ss[i] == ss);
+ }
+
DEBUG(FRESCAN_BWRES_MANAGER_ENABLE_DEBUG, "signal robj\n");
ret = frescan_bwres_robjs_signal(req_data->robj);
assert(ret == 0);
frescan_bwres_request_data_t *req_data)
{
int ret, i;
- frescan_server_params_t server_params;
// NEG-GROUP
- server_params.budget = 0;
- server_params.period.tv_sec = 0;
- server_params.period.tv_nsec = 0;
- server_params.prio = 0;
-
for(i=0; i<req_data->contracts_to_neg->size; i++) {
- ret = frescan_servers_create(req_data->net,
- &server_params,
- &req_data->ss_new->ss[i]);
- assert(ret == 0);
+ ret = freelist_alloc(&frescan_data[req_data->net].scenario.
+ ss_id_freelist[req_data->request_node]);
+ assert(ret >= 0);
+
+ req_data->ss_new->ss[i] = (frescan_ss_t)ret;
ret = frescan_bwres_sa_add_contract
(scenario,
NULL);
assert(ret == 0);
- ret = frescan_servers_destroy(req_data->net,
- req_data->ss_new->ss[i]);
+ ret = freelist_free(&frescan_data[req_data->net].scenario.
+ ss_id_freelist[req_data->request_node],
+ req_data->ss_new->ss[i]);
assert(ret == 0);
}
static void frescan_manager_rep_gn(frescan_bwres_request_data_t *req_data)
{
- int ret;
- frescan_bwres_request_data_t *orig_req_data;
+ int ret, i;
+ frescan_bwres_request_data_t *caller_req;
- ret = frescan_bwres_requests_get_data(req_data->req, &orig_req_data);
+ ret = frescan_bwres_requests_get_data(req_data->req, &caller_req);
assert(ret == 0);
DEBUG(FRESCAN_BWRES_MANAGER_ENABLE_DEBUG,
"reply to gn, return value:%d\n", req_data->return_value);
- orig_req_data->return_value = req_data->return_value;
+ caller_req->return_value = req_data->return_value;
+
+ assert (req_data->ss_new->size == caller_req->contracts_to_neg->size);
+
+ for (i=0; i<req_data->ss_new->size; i++) {
+ caller_req->ss_new->ss[i] = req_data->ss_new->ss[i];
+ }
- ret = frescan_bwres_robjs_signal(orig_req_data->robj);
+ ret = frescan_bwres_robjs_signal(caller_req->robj);
assert(ret == 0);
}
int ret;
ret = frescan_bwres_mode_change_local(req_data->net,
- req_data->mode_change_type);
+ req_data->mode_change_type,
+ req_data->ss_to_cancel);
assert(ret == 0);
}