#include <stdlib.h> // exit
#include <unistd.h> // sleep
+#include "frsh.h"
+
#include "frescan.h"
#include "frescan_bwres.h"
#include "frescan_servers.h"
-#define ERROR(s) {perror (s); exit (-1);}
+#define PUT_ERROR(s) {perror (s); exit (-1);}
#define NETWORK 0
#define LOCAL_NODE 1
int ret;
frescan_init_params_t init_params;
frescan_ss_t ss1, ss2, ss3;
- frescan_contract_t contract;
+ frsh_contract_t contract;
frescan_server_params_t server_params;
bool accepted;
+ frsh_rel_time_t budget_min, period_max;
init_params.net = NETWORK;
init_params.node = LOCAL_NODE;
printf("Initializing FRESCAN\n");
ret = frescan_init(&init_params);
- if (ret != 0) ERROR ("could not init FRESCAN");
+ if (ret != 0) PUT_ERROR ("could not init FRESCAN");
printf("Initializing BWRES\n");
ret = frescan_bwres_init(NETWORK);
- if (ret != 0) ERROR ("could not init BWRES");
+ if (ret != 0) PUT_ERROR ("could not init BWRES");
+
+ ret = frsh_contract_init(&contract);
+ if (ret != 0) PUT_ERROR ("could not init contract");
+
+ budget_min.tv_sec = 5;
+ period_max = frsh_msec_to_rel_time(3000);
+
+ ret = frsh_contract_set_basic_params
+ (&contract,
+ &budget_min,
+ &period_max,
+ FRSH_WT_INDETERMINATE,
+ FRSH_CT_REGULAR);
+ if (ret != 0) PUT_ERROR ("could not set basic params");
- contract.min_values.budget = 5;
- contract.min_values.period.tv_sec = 3;
- contract.min_values.period.tv_nsec = 0;
- contract.prio = 5;
+#if !FRSH_AUTOMATIC_PRIO_ASSIGN_ENABLE
+ ret = frsh_contract_set_preemption_level(&contract, 5);
+ if (ret != 0) PUT_ERROR ("could not set preemption level");
+#endif
printf("Negotiating a contract 1\n");
ret = frescan_bwres_negotiate(NETWORK, &contract, &ss1, &accepted);
- if (ret != 0) ERROR ("could not negotiate succesfully");
+ if (ret != 0) PUT_ERROR ("could not negotiate succesfully");
if (accepted) {
printf("The contract was accepted, ss:%u\n", ss1);
ret = frescan_servers_get_data(NETWORK, &server_params, ss1);
- if (ret != 0) ERROR ("could not get servers data");
+ if (ret != 0) PUT_ERROR ("could not get servers data");
printf("B:%u, T=(%u,%u), P:%u\n",
- server_params.values.budget,
- server_params.values.period.tv_sec,
- server_params.values.period.tv_nsec,
+ server_params.budget,
+ server_params.period.tv_sec,
+ server_params.period.tv_nsec,
server_params.prio);
} else {
printf("The contract was not accepted\n");
}
- contract.min_values.budget = 6;
- contract.min_values.period.tv_sec = 2;
- contract.min_values.period.tv_nsec = 6;
- contract.prio = 4;
+ budget_min.tv_sec = 6;
+ period_max = frsh_msec_to_rel_time(2600);
+
+ ret = frsh_contract_set_basic_params
+ (&contract,
+ &budget_min,
+ &period_max,
+ FRSH_WT_INDETERMINATE,
+ FRSH_CT_REGULAR);
+ if (ret != 0) PUT_ERROR ("could not set basic params");
+
+#if !FRSH_AUTOMATIC_PRIO_ASSIGN_ENABLE
+ ret = frsh_contract_set_preemption_level(&contract, 4);
+ if (ret != 0) PUT_ERROR ("could not set preemption level");
+#endif
printf("Negotiating a contract 2\n");
ret = frescan_bwres_negotiate(NETWORK, &contract, &ss2, &accepted);
- if (ret != 0) ERROR ("could not negotiate");
+ if (ret != 0) PUT_ERROR ("could not negotiate");
if (accepted) {
printf("The contract was accepted, ss:%u\n", ss2);
ret = frescan_servers_get_data(NETWORK, &server_params, ss2);
- if (ret != 0) ERROR ("could not get servers data");
+ if (ret != 0) PUT_ERROR ("could not get servers data");
printf("B:%u, T=(%u,%u), P:%u\n",
- server_params.values.budget,
- server_params.values.period.tv_sec,
- server_params.values.period.tv_nsec,
+ server_params.budget,
+ server_params.period.tv_sec,
+ server_params.period.tv_nsec,
server_params.prio);
} else {
printf("The contract was not accepted\n");
printf("cancelling contract for ss:%u\n", ss1);
ret = frescan_bwres_cancel(NETWORK, ss1);
- if (ret != 0) ERROR ("could not cancel server");
+ if (ret != 0) PUT_ERROR ("could not cancel server");
+
+ budget_min.tv_sec = 1;
+ period_max = frsh_msec_to_rel_time(6666);
+
+ ret = frsh_contract_set_basic_params
+ (&contract,
+ &budget_min,
+ &period_max,
+ FRSH_WT_INDETERMINATE,
+ FRSH_CT_REGULAR);
+ if (ret != 0) PUT_ERROR ("could not set basic params");
- contract.min_values.budget = 1;
- contract.min_values.period.tv_sec = 6;
- contract.min_values.period.tv_nsec = 666;
- contract.prio = 3;
+#if !FRSH_AUTOMATIC_PRIO_ASSIGN_ENABLE
+ ret = frsh_contract_set_preemption_level(&contract, 3);
+ if (ret != 0) PUT_ERROR ("could not set preemption level");
+#endif
printf("Negotiating a contract 3\n");
ret = frescan_bwres_negotiate(NETWORK, &contract, &ss3, &accepted);
- if (ret != 0) ERROR ("could not negotiate");
+ if (ret != 0) PUT_ERROR ("could not negotiate");
if (accepted) {
printf("The contract was accepted, ss:%u\n", ss3);
ret = frescan_servers_get_data(NETWORK, &server_params, ss3);
- if (ret != 0) ERROR ("could not get servers data");
+ if (ret != 0) PUT_ERROR ("could not get servers data");
printf("B:%u, T=(%u,%u), P:%u\n",
- server_params.values.budget,
- server_params.values.period.tv_sec,
- server_params.values.period.tv_nsec,
+ server_params.budget,
+ server_params.period.tv_sec,
+ server_params.period.tv_nsec,
server_params.prio);
} else {
printf("The contract was not accepted\n");