#include "frescan_bwres_analysis.h"
#undef ERROR
#include "frescan_debug.h"
-// #include "frsh_sa_tools.h"
-
/**
* frescan_sa_init() - init the scenario
+ *
+ * @scenario: the scenario (in out)
+ * @params: init params (in)
*/
-int frescan_sa_init(frsh_sa_scenario_t *scenario, // in out
- const frsh_sa_init_params_t *params) // in
+int frescan_sa_init(frescan_sa_scenario_t *scenario,
+ const frescan_sa_init_params_t *params)
{
// int ret;
//
// ret = frsh_sa_scenario_init(scenario, params);
// return ret;
- WARNING("not implemented, returning 0\n");
+
+ INIT_LIST_HEAD(&scenario->contracts_head.list);
+ scenario->init_params = *params;
return 0;
}
/**
* frescan_sa_add_contract() - add a contract to the scenario
+ *
+ * @scenario: the scenario (in out)
+ * @contract: the new contract (in)
+ * @ss: the preallocated ss identificator (in)
+ * @node: the node this contract belongs to (in)
*/
-int frescan_sa_add_contract(frsh_sa_scenario_t *scenario, // in out
- const frsh_contract_t *contract, // in
- frsh_vres_index_t id) // in
+int frescan_sa_add_contract(frescan_sa_scenario_t *scenario,
+ const frescan_contract_t *contract,
+ frescan_ss_t ss,
+ frescan_node_t node)
{
// int ret;
//
// ret = frsh_sa_scenario_add_vres(scenario, contract, id);
// return ret;
- WARNING("not implemented, returning 0\n");
+ frescan_sa_contract_t *sa_contract;
+
+ sa_contract = &scenario->contracts[node][ss];
+
+ sa_contract->contract = *contract;
+ sa_contract->node = node;
+ sa_contract->ss = ss;
+
+ list_add_tail(&sa_contract->list,
+ &scenario->contracts_head.list);
+
return 0;
}
/**
* frescan_sa_update_contract() - update a contract in the scenario
+ *
+ * @scenario: the scenario (in out)
+ * @ss: the ss identificator (in)
+ * @contract: the values to update the contract (in)
+ * @node: the node this contract belongs to (in)
*/
-int frescan_sa_update_contract(frsh_sa_scenario_t *scenario, // in out
- frsh_vres_index_t id, // in
- const frsh_contract_t *contract) // in
+int frescan_sa_update_contract(frescan_sa_scenario_t *scenario,
+ frescan_ss_t ss,
+ const frescan_contract_t *contract,
+ frescan_node_t node)
{
// int ret;
//
// ret = frsh_sa_scenario_modify_vres(scenario, id, *contract);
// return ret;
- WARNING("not implemented, returning 0\n");
+ frescan_sa_contract_t *sa_contract;
+
+ sa_contract = &scenario->contracts[node][ss];
+
+ sa_contract->contract = *contract;
+ sa_contract->node = node;
+ sa_contract->ss = ss;
+
return 0;
}
/**
* frescan_sa_remove_contract() - remove a contract from the scenario
+ *
+ * @scenario: the scenario (in out)
+ * @ss: the ss to remove (in)
+ * @node: the node this contract belongs to (in)
*/
-int frescan_sa_remove_contract(frsh_sa_scenario_t *scenario, // in out
- frsh_vres_index_t id) // in
+int frescan_sa_remove_contract(frescan_sa_scenario_t *scenario,
+ frescan_ss_t ss,
+ frescan_node_t node)
{
// int ret;
//
// ret = frsh_sa_scenario_del_vres(scenario, id);
// return ret;
- WARNING("not implemented, returning 0\n");
+ frescan_sa_contract_t *sa_contract;
+
+ sa_contract = &scenario->contracts[node][ss];
+ list_del(&sa_contract->list);
+
return 0;
}
/**
* frescan_sa_sched_test() - perform a scheduling test on the scenario
+ *
+ * @scenario: the scenario (in out)
+ * @success: if the scenario is schedulable or not (out)
*/
-int frescan_sa_sched_test(frsh_sa_scenario_t *scenario, // in out
- bool *success) // out
+int frescan_sa_sched_test(frescan_sa_scenario_t *scenario,
+ bool *success)
{
// int ret;
//
// error:
// *success = false;
// return ret;
- WARNING("not implemented, returning 0\n");
+
+ struct list_head *pos;
+ frescan_sa_contract_t *sa_contract;
+
+ list_for_each(pos, &scenario->contracts_head.list) {
+ sa_contract = list_entry(pos, frescan_sa_contract_t, list);
+ sa_contract->final_values.server_prio = sa_contract->contract.prio;
+ DEBUG(FRESCAN_SA_ENABLE_DEBUG,
+ "sa_contract, node:%d ss:%d, c:%d t:(%d,%d) p:%d\n",
+ sa_contract->node, sa_contract->ss,
+ sa_contract->contract.min_values.budget,
+ sa_contract->contract.min_values.period.tv_sec,
+ sa_contract->contract.min_values.period.tv_nsec,
+ sa_contract->contract.prio);
+ }
+
+ WARNING("test not implemented, returning 0 and success by default\n");
+ *success = true;
+
return 0;
}
/**
* frescan_sa_spare_capacity() - distribute the remaining spare capacity
+ *
+ * @scenario: the scenario (in out)
*/
-int frescan_sa_spare_capacity(frsh_sa_scenario_t *scenario) // in out
+int frescan_sa_spare_capacity(frescan_sa_scenario_t *scenario)
{
// int ret;
//
}
/**
- * sa_get_final_values() - get the final values
+ * frescan_sa_get_final_values() - get the final values
+ *
+ * @scenario: the scenario (in)
+ * @ss: the ss from which we want the final values (in)
+ * @node: the node this contract belongs to (in)
+ * @final_values: the final values (out)
*/
-int sa_get_final_values(const frsh_sa_scenario_t *scenario, // in
- frsh_vres_index_t id, // in
- frescan_sa_final_values_t *final_values) // out
+
+int frescan_sa_get_final_values(const frescan_sa_scenario_t *scenario,
+ frescan_ss_t ss,
+ frescan_node_t node,
+ frescan_sa_final_values_t *final_values)
{
// final_values->budget = scenario->sa_vres_alloc[id].c;
// final_values->period = scenario->sa_vres_alloc[id].t;
// final_values->deadline = scenario->sa_vres_alloc[id].d;
// final_values->priority = scenario->sa_vres_alloc[id].p;
// return 0;
- WARNING("not implemented, returning 0\n");
+
+ *final_values = scenario->contracts[node][ss].final_values;
+
return 0;
}