#include "frescan_bwres_threads.h"
#include "frescan_bwres_messages.h"
#include "frescan_bwres_requests.h"
+#include "frescan_bwres_analysis.h"
#include "frescan_config.h"
#include "frescan_debug.h"
#include "frescan_data.h"
DEBUG(FRESCAN_MANAGER_ENABLE_DEBUG, "negotiation request\n");
if (the_networks[req_data->net].local_node == FRESCAN_NEG_MASTER_NODE) {
+ // scheduling analysis
+ ret = frescan_sa_add_contract
+ (&the_networks[req_data->net].scenario,
+ req_data->contract,
+ req_data->ss,
+ req_data->request_node);
+ assert(ret == 0);
- // NOTE: req_data->ss is an INPUT parameter
- accepted = true; // TODO: sched analysis
- ret = 0; // TODO: sched analysis
+ 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 {
- req_data->return_value = (ret == 0) ?
- FRESCAN_REQ_NOT_ACCEPTED :
- FRESCAN_REQ_ERROR;
+ ret = frescan_sa_remove_contract
+ (&the_networks[req_data->net].scenario,
+ req_data->ss,
+ req_data->request_node);
+ 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);
neg_req_data->return_value = req_data->return_value;
+ neg_req_data->final_values = req_data->final_values;
ret = frescan_bwres_robjs_signal(neg_req_data->robj);
assert(ret == 0);