1 #include <frm_generic.h>
5 #include <fres_sa_scenario.h>
9 #include <frsh_distributed.h>
10 #include "functions.h"
11 #include <cluster_tree.h>
14 TOPOLOGY_PARAMS topology;
17 struct cluster_tree configuration = {
31 int admission_test(struct fres_sa_scenario *scenario, void *priv, bool *schedulable)
33 struct cluster_tree *configuration = priv;
34 TOPOLOGY_PARAMS *topology = &configuration->topology;
35 struct fres_sa_contract *c;
36 APPLICATION_PARAMS application_params;
38 OUTPUT_PARAMS output_params;
39 frsh_rel_time_t min_deadline = fosa_msec_to_rel_time(0);
41 application_params.ack_enable = FALSE;
42 application_params.mpdu = 120;
43 application_params.number_of_alfas = scenario->num_contracts;
45 application_params.alfa_data =
46 (ALFA *)malloc((application_params.number_of_alfas)*sizeof(ALFA));
47 if (application_params.alfa_data == NULL) return -1;
50 fres_sa_scenario_for_each_contract(scenario, c) {
51 fres_block_cluster_tree_traffic *traffic;
52 ALFA *alfa = &application_params.alfa_data[i++];
53 fres_block_timing_reqs *timing;
55 traffic = fres_contract_get_block(c->contract,
56 FRES_BLOCK_CLUSTER_TREE_TRAFFIC);
60 /* Find the most restricting deadline */
61 timing = fres_contract_get_timing_reqs(c->contract);
63 fosa_rel_time_t deadline;
64 if (timing->d_equals_t) {
65 fres_block_basic *basic;
66 basic = fres_contract_get_basic(c->contract);
67 deadline = basic->period;
69 deadline = timing->deadline;
71 if (fosa_rel_time_is_null(min_deadline) ||
72 fosa_rel_time_smaller(deadline, min_deadline)) {
73 min_deadline = deadline;
77 output_params.buffer_requirements =
78 (int *) malloc((topology->height+topology->h_sink+2)*sizeof(int));
79 if (output_params.buffer_requirements == NULL)
82 output_params.number_of_time_slots =
83 (int *) malloc((topology->height+topology->h_sink)*sizeof(int));
84 if(output_params.number_of_time_slots == NULL)
87 /* Call the real admission test */
88 ret = ct_wsn(*topology, application_params, &output_params);
92 printf("error-code: %d\n", output_params.error_params.error_code);
94 /* Compare the deadlines */
95 if (output_params.d_e2e > fosa_rel_time_to_double(min_deadline)) {
102 free((void *)output_params.number_of_time_slots);
103 free((void *)output_params.buffer_requirements);
104 free((void *)application_params.alfa_data);
109 static const struct fres_res_manager frm = {
110 .res_type = FRSH_RT_NETWORK,
111 .res_id = FRSH_NETPF_CLUSTER_TREE,
112 .admission_test = admission_test,
113 .priv = &configuration,
117 int main(int argc, char *argv[])
122 orb = forb_init(&argc, &argv, "frm_cluster_tree");
123 if (!orb) error(1, errno, "forb_init");
125 fres_block_register_cluster_tree();
127 ret = frm_register_and_run(orb, &frm);
130 error(1, errno, "frm_generic_run failed");