+
+ if (the_networks[req_data->net].local_node == FRESCAN_NEG_MASTER_NODE) {
+ // scheduling analysis
+ ret = frescan_sa_update_contract
+ (&the_networks[req_data->net].scenario,
+ req_data->ss,
+ req_data->request_node,
+ req_data->contract,
+ &old_contract);
+ assert(ret == 0);
+
+ ret = frescan_sa_sched_test
+ (&the_networks[req_data->net].scenario,
+ &accepted);
+ assert(ret == 0);
+
+ if (accepted) {
+ ret = frescan_sa_get_final_values
+ (&the_networks[req_data->net].scenario,
+ req_data->ss,
+ req_data->request_node,
+ &req_data->final_values);
+ assert(ret == 0);
+ req_data->return_value = FRESCAN_REQ_ACCEPTED;
+ } else {
+ ret = frescan_sa_update_contract
+ (&the_networks[req_data->net].scenario,
+ req_data->ss,
+ req_data->request_node,
+ &old_contract,
+ NULL);
+ assert(ret == 0);
+ req_data->return_value = FRESCAN_REQ_NOT_ACCEPTED;
+ }
+
+ // signal or reply the results
+ if (req_data->request_node == FRESCAN_NEG_MASTER_NODE) {
+ DEBUG(FRESCAN_MANAGER_ENABLE_DEBUG, "master local\n");
+ ret = frescan_bwres_robjs_signal(req_data->robj);
+ assert(ret == 0);
+ } else {
+ DEBUG(FRESCAN_MANAGER_ENABLE_DEBUG,
+ "master external, sending reply\n");
+
+ req_data->type = FRESCAN_REP_NEG;
+ ret = frescan_messages_send_request(req_data);
+ assert(ret == 0);
+ }
+ } else {
+ DEBUG(FRESCAN_MANAGER_ENABLE_DEBUG,
+ "send renegotiation request to master\n");
+ ret = frescan_messages_send_request(req_data);
+ assert(ret == 0);
+ }