* 2.- enqueue the request
* 3.- wait in the reply object for a reply
* 4.- return the final values and free the request
- *
*/
int frescan_bwres_negotiate(frescan_network_t net,
const frescan_contract_t *contract,
- frescan_ss_t *id,
+ frescan_ss_t *ss,
bool *accepted)
{
int ret;
if (ret != 0) return ret;
switch (req_data->return_value) {
- case FRESCAN_REQ_ACCEPTED:
- DEBUG(FRESCAN_BWRES_ENABLE_DEBUG, "negotiation OK\n");
- *accepted = true;
- *id = req_data->ss;
- server_params.prio = req_data->final_values.server_prio;
- ret = frescan_servers_update(net, &server_params, *id);
- if (ret != 0) return ret;
- break;
-
- case FRESCAN_REQ_NOT_ACCEPTED:
- DEBUG(FRESCAN_BWRES_ENABLE_DEBUG, "negotiation FAIL\n");
- *accepted = false;
- ret = frescan_servers_destroy(net, req_data->ss);
- if (ret != 0) return ret;
- break;
-
- default:
- ERROR("return_value unknown\n");
- return -1;
+ case FRESCAN_REQ_ACCEPTED:
+ DEBUG(FRESCAN_BWRES_ENABLE_DEBUG, "negotiation OK\n");
+ *accepted = true;
+ *ss = req_data->ss;
+ server_params.prio = req_data->final_values.server_prio;
+ ret = frescan_servers_update(net, &server_params, *ss);
+ if (ret != 0) return ret;
+ break;
+
+ case FRESCAN_REQ_NOT_ACCEPTED:
+ DEBUG(FRESCAN_BWRES_ENABLE_DEBUG, "negotiation FAIL\n");
+ *accepted = false;
+ ret = frescan_servers_destroy(net, req_data->ss);
+ if (ret != 0) return ret;
+ break;
+
+ default:
+ ERROR("return_value unknown\n");
+ return -1;
}
frescan_requests_free(req);
return 0;
}
+
+/**
+ * frescan_bwres_renegotiate()
+ */
+
+int frescan_bwres_renegotiate(frescan_network_t net,
+ const frescan_contract_t *contract,
+ frescan_ss_t ss,
+ bool *accepted)
+{
+ int ret;
+ frescan_request_id_t req;
+ frescan_request_data_t *req_data;
+ frescan_server_params_t server_params;
+
+ DEBUG(FRESCAN_BWRES_ENABLE_DEBUG, "preparing renegotiation request\n");
+
+ ret = frescan_requests_alloc(&req);
+ if (ret != 0) return ret;
+
+ ret = frescan_requests_get_data(req, &req_data);
+ if (ret != 0) return ret;
+
+ req_data->type = FRESCAN_REQ_RENEG;
+ req_data->req = req;
+ req_data->contract = (frescan_contract_t *)contract;
+ req_data->request_node = the_networks[net].local_node;
+ req_data->net = net;
+ req_data->ss = ss;
+
+ ret = frescan_bwres_robjs_alloc(&req_data->robj, FRESCAN_BWRES_MX_PRIO);
+ if (ret != 0) return ret;
+
+ DEBUG(FRESCAN_BWRES_ENABLE_DEBUG, "enqueue renegotiation request\n");
+
+ ret = frescan_requests_enqueue(req);
+ if (ret != 0) return ret;
+
+ DEBUG(FRESCAN_BWRES_ENABLE_DEBUG, "wait for a reply\n");
+
+ ret = frescan_bwres_robjs_wait(req_data->robj);
+ if (ret != 0) return ret;
+
+ ret = frescan_bwres_robjs_free(req_data->robj);
+ if (ret != 0) return ret;
+
+ switch (req_data->return_value) {
+ case FRESCAN_REQ_ACCEPTED:
+ DEBUG(FRESCAN_BWRES_ENABLE_DEBUG, "renegotiation OK\n");
+ *accepted = true;
+ server_params.values.budget = contract->min_values.budget;
+ server_params.values.period = contract->min_values.period;
+ server_params.prio = req_data->final_values.server_prio;
+ ret = frescan_servers_update(net, &server_params, ss);
+ if (ret != 0) return ret;
+ break;
+
+ case FRESCAN_REQ_NOT_ACCEPTED:
+ DEBUG(FRESCAN_BWRES_ENABLE_DEBUG, "negotiation FAIL\n");
+ *accepted = false;
+ if (ret != 0) return ret;
+ break;
+
+ default:
+ ERROR("return_value unknown\n");
+ return -1;
+ }
+
+ frescan_requests_free(req);
+ return 0;
+}
+
+/**
+ * frescan_bwres_cancel()
+ */
+
+int frescan_bwres_cancel(frescan_network_t net,
+ frescan_ss_t ss)
+{
+ int ret;
+ frescan_request_id_t req;
+ frescan_request_data_t *req_data;
+
+ DEBUG(FRESCAN_BWRES_ENABLE_DEBUG, "preparing cancel request\n");
+
+ ret = frescan_requests_alloc(&req);
+ if (ret != 0) return ret;
+
+ ret = frescan_requests_get_data(req, &req_data);
+ if (ret != 0) return ret;
+
+ req_data->type = FRESCAN_REQ_CANCEL;
+ req_data->req = req;
+ req_data->request_node = the_networks[net].local_node;
+ req_data->net = net;
+ req_data->ss = ss;
+
+ ret = frescan_bwres_robjs_alloc(&req_data->robj, FRESCAN_BWRES_MX_PRIO);
+ if (ret != 0) return ret;
+
+ DEBUG(FRESCAN_BWRES_ENABLE_DEBUG, "enqueue cancel request\n");
+
+ ret = frescan_requests_enqueue(req);
+ if (ret != 0) return ret;
+
+ DEBUG(FRESCAN_BWRES_ENABLE_DEBUG, "wait for a signal\n");
+
+ ret = frescan_bwres_robjs_wait(req_data->robj);
+ if (ret != 0) return ret;
+
+ ret = frescan_bwres_robjs_free(req_data->robj);
+ if (ret != 0) return ret;
+
+ ret = frescan_servers_destroy(net, ss);
+ if (ret != 0) return ret;
+
+ frescan_requests_free(req);
+ return 0;
+}
extern int frescan_bwres_negotiate(frescan_network_t net,
const frescan_contract_t *contract,
- frescan_ss_t *id,
+ frescan_ss_t *ss,
bool *accepted);
-// TODO: add other functions: renegotiate, cancel...
+extern int frescan_bwres_renegotiate(frescan_network_t net,
+ const frescan_contract_t *contract,
+ frescan_ss_t ss,
+ bool *accepted);
+
+extern int frescan_bwres_cancel(frescan_network_t net,
+ frescan_ss_t ss);
+
+// TODO: add other functions: renegotiate_async
#endif // _FRESCAN_BANDWIDTH_RESERVATION_H_
*
* @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)
+ * @contract: the values to update the contract (in)
+ * @old_contract: the values of the previous contract. Can be NULL (out)
*/
int frescan_sa_update_contract(frescan_sa_scenario_t *scenario,
frescan_ss_t ss,
+ frescan_node_t node,
const frescan_contract_t *contract,
- frescan_node_t node)
+ frescan_contract_t *old_contract)
{
// int ret;
//
sa_contract = &scenario->contracts[node][ss];
+ if (old_contract != NULL) {
+ *old_contract = sa_contract->contract;
+ }
+
sa_contract->contract = *contract;
- sa_contract->node = node;
- sa_contract->ss = ss;
return 0;
}
int num_contracts;
double utilization, max_utilization, budget, period;
- WARNING("simplified ub test (no blockings, prio ordered)\n");
+ WARNING("simplified ub test (no blocks, prio ordered)\n");
utilization = 0.0;
num_contracts = 0;
*
* @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)
+ * @contract: the values to update the contract (in)
+ * @old_contract: the values of the previous contract. Can be NULL (out)
*/
-extern int frescan_sa_update_contract(frescan_sa_scenario_t *scenario,
- frescan_ss_t ss,
+extern int frescan_sa_update_contract(frescan_sa_scenario_t *scenario,
+ frescan_ss_t ss,
+ frescan_node_t node,
const frescan_contract_t *contract,
- frescan_node_t node);
+ frescan_contract_t *old_contract);
/**
* frescan_sa_remove_contract() - remove a contract from the scenario
return -1;
}
+ DEBUG(true, "request type %X sent, size %d\n",
+ *(frescan_request_type_t *)msg, size);
+
ret = frescan_send(&send_params[req_data->net], msg, size);
if (ret != 0) return ret;
case FRESCAN_REP_NEG:
return frescan_repneg_message_to_request(msg, req_data);
default:
- ERROR("request type not supported\n");
+ ERROR("request type %X not supported\n",
+ *(frescan_request_type_t *)msg);
return -1;
}
}
}
if(req_data->request_node != the_networks[net].local_node) {
- ret = frescan_requests_free(req);
+ ret = frescan_requests_free(req); // acceptor request
assert(ret == 0);
}
}
static void frescan_manager_reneg(frescan_request_data_t *req_data)
{
+ int ret;
+ bool accepted;
+ frescan_contract_t old_contract;
+
DEBUG(FRESCAN_MANAGER_ENABLE_DEBUG, "renegotiation request\n");
+
+ 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);
+ }
}
/**
- * frescan_manager_neg
+ * frescan_manager_cancel
*/
static void frescan_manager_cancel(frescan_request_data_t *req_data)
{
+ int ret;
+
DEBUG(FRESCAN_MANAGER_ENABLE_DEBUG, "cancel request\n");
+
+ if (the_networks[req_data->net].local_node == FRESCAN_NEG_MASTER_NODE) {
+ ret = frescan_sa_remove_contract
+ (&the_networks[req_data->net].scenario,
+ req_data->ss,
+ req_data->request_node);
+ assert(ret == 0);
+ } else {
+ DEBUG(FRESCAN_MANAGER_ENABLE_DEBUG,
+ "send cancel request to master\n");
+ ret = frescan_messages_send_request(req_data);
+ assert(ret == 0);
+ }
+
+ if (req_data->request_node == the_networks[req_data->net].local_node) {
+ ret = frescan_bwres_robjs_signal(req_data->robj);
+ assert(ret == 0);
+ }
}
/**
- * frescan_manager_neg
+ * frescan_manager_repneg
*/
static void frescan_manager_repneg(frescan_request_data_t *req_data)
--- /dev/null
+#include <stdio.h> // perror
+#include <stdlib.h> // exit
+#include <unistd.h> // sleep
+
+#include "frescan.h"
+#include "frescan_bwres.h"
+#include "frescan_servers.h"
+
+#define ERROR(s) {perror (s); exit (-1);}
+
+#define NETWORK 0
+#define LOCAL_NODE 0
+
+int main ()
+{
+ int ret;
+ frescan_init_params_t init_params;
+ frescan_ss_t ss1, ss2, ss3;
+ frescan_contract_t contract;
+ bool accepted;
+ frescan_server_params_t server_params;
+
+ init_params.net = NETWORK;
+ init_params.node = LOCAL_NODE;
+ init_params.tx_fp_max_prio = 10;
+ init_params.rx_num_of_channels = 10;
+ init_params.rx_channel_max_prio = NULL;
+
+ printf("Initializing FRESCAN\n");
+ ret = frescan_init(&init_params);
+ if (ret != 0) ERROR ("could not init FRESCAN");
+
+ printf("Initializing BWRES\n");
+ ret = frescan_bwres_init(NETWORK);
+ if (ret != 0) ERROR ("could not init BWRES");
+
+ contract.min_values.budget = 5;
+ contract.min_values.period.tv_sec = 3;
+ contract.min_values.period.tv_nsec = 69;
+ contract.prio = 7;
+
+ ret = frescan_bwres_negotiate(NETWORK, &contract, &ss1, &accepted);
+ if (ret != 0) ERROR ("could not negotiate");
+
+ 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");
+
+ 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.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;
+
+ ret = frescan_bwres_negotiate(NETWORK, &contract, &ss2, &accepted);
+ if (ret != 0) 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");
+
+ 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.prio);
+ } else {
+ printf("The contract was not accepted\n");
+ }
+
+ ret = frescan_bwres_cancel(NETWORK, ss1);
+ if (ret != 0) ERROR ("could not cancel server");
+
+ contract.min_values.budget = 1;
+ contract.min_values.period.tv_sec = 6;
+ contract.min_values.period.tv_nsec = 666;
+ contract.prio = 3;
+
+ ret = frescan_bwres_negotiate(NETWORK, &contract, &ss3, &accepted);
+ if (ret != 0) 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");
+
+ 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.prio);
+ } else {
+ printf("The contract was not accepted\n");
+ }
+
+ while (1) {
+ sleep(1);
+ }
+
+ return 0;
+}
+
+
--- /dev/null
+#include <stdio.h> // perror
+#include <stdlib.h> // exit
+#include <unistd.h> // sleep
+
+#include "frescan.h"
+#include "frescan_bwres.h"
+#include "frescan_servers.h"
+
+#define ERROR(s) {perror (s); exit (-1);}
+
+#define NETWORK 0
+#define LOCAL_NODE 1
+
+int main ()
+{
+ int ret;
+ frescan_init_params_t init_params;
+ frescan_ss_t ss1, ss2, ss3;
+ frescan_contract_t contract;
+ frescan_server_params_t server_params;
+ bool accepted;
+
+ init_params.net = NETWORK;
+ init_params.node = LOCAL_NODE;
+ init_params.tx_fp_max_prio = 10;
+ init_params.rx_num_of_channels = 10;
+ init_params.rx_channel_max_prio = NULL;
+
+ printf("Initializing FRESCAN\n");
+ ret = frescan_init(&init_params);
+ if (ret != 0) ERROR ("could not init FRESCAN");
+
+ printf("Initializing BWRES\n");
+ ret = frescan_bwres_init(NETWORK);
+ if (ret != 0) ERROR ("could not init BWRES");
+
+ contract.min_values.budget = 5;
+ contract.min_values.period.tv_sec = 3;
+ contract.min_values.period.tv_nsec = 0;
+ contract.prio = 5;
+
+ printf("Negotiating a contract 1\n");
+ ret = frescan_bwres_negotiate(NETWORK, &contract, &ss1, &accepted);
+ if (ret != 0) 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");
+
+ 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.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;
+
+ printf("Negotiating a contract 2\n");
+ ret = frescan_bwres_negotiate(NETWORK, &contract, &ss2, &accepted);
+ if (ret != 0) 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");
+
+ 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.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");
+
+ contract.min_values.budget = 1;
+ contract.min_values.period.tv_sec = 6;
+ contract.min_values.period.tv_nsec = 666;
+ contract.prio = 3;
+
+ printf("Negotiating a contract 3\n");
+ ret = frescan_bwres_negotiate(NETWORK, &contract, &ss3, &accepted);
+ if (ret != 0) 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");
+
+ 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.prio);
+ } else {
+ printf("The contract was not accepted\n");
+ }
+
+ while (1) {
+ sleep(1);
+ }
+
+ return 0;
+}
+
+
--- /dev/null
+#include <stdio.h> // perror
+#include <stdlib.h> // exit
+#include <unistd.h> // sleep
+
+#include "frescan.h"
+#include "frescan_bwres.h"
+#include "frescan_servers.h"
+
+#define ERROR(s) {perror (s); exit (-1);}
+
+#define NETWORK 0
+#define LOCAL_NODE 0
+
+int main ()
+{
+ int ret;
+ frescan_init_params_t init_params;
+ frescan_ss_t ss;
+ frescan_contract_t contract;
+ bool accepted;
+ frescan_server_params_t server_params;
+
+ init_params.net = NETWORK;
+ init_params.node = LOCAL_NODE;
+ init_params.tx_fp_max_prio = 10;
+ init_params.rx_num_of_channels = 10;
+ init_params.rx_channel_max_prio = NULL;
+
+ printf("Initializing FRESCAN\n");
+ ret = frescan_init(&init_params);
+ if (ret != 0) ERROR ("could not init FRESCAN");
+
+ printf("Initializing BWRES\n");
+ ret = frescan_bwres_init(NETWORK);
+ if (ret != 0) ERROR ("could not init BWRES");
+
+ contract.min_values.budget = 5;
+ contract.min_values.period.tv_sec = 3;
+ contract.min_values.period.tv_nsec = 69;
+ contract.prio = 7;
+
+ ret = frescan_bwres_negotiate(NETWORK, &contract, &ss, &accepted);
+ if (ret != 0) ERROR ("could not negotiate");
+
+ if (accepted) {
+ printf("The contract was accepted, ss:%u\n", ss);
+ ret = frescan_servers_get_data(NETWORK, &server_params, ss);
+ if (ret != 0) 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.prio);
+ } else {
+ printf("The contract was not accepted\n");
+ }
+
+ printf("Renegotiate the contract in 2 seconds\n");
+ sleep(2);
+
+ contract.min_values.budget = 7;
+ contract.min_values.period.tv_sec = 2;
+ contract.min_values.period.tv_nsec = 45;
+ contract.prio = 8;
+
+ ret = frescan_bwres_renegotiate(NETWORK, &contract, ss, &accepted);
+ if (ret != 0) ERROR ("could not renegotiate");
+
+ if (accepted) {
+ printf("The contract renegotiation was accepted, ss:%u\n", ss);
+ ret = frescan_servers_get_data(NETWORK, &server_params, ss);
+ if (ret != 0) 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.prio);
+ } else {
+ printf("The contract was not accepted\n");
+ }
+
+
+ while (1) {
+ sleep(1);
+ }
+
+ return 0;
+}
--- /dev/null
+#include <stdio.h> // perror
+#include <stdlib.h> // exit
+#include <unistd.h> // sleep
+
+#include "frescan.h"
+#include "frescan_bwres.h"
+#include "frescan_servers.h"
+
+#define ERROR(s) {perror (s); exit (-1);}
+
+#define NETWORK 0
+#define LOCAL_NODE 1
+
+int main ()
+{
+ int ret;
+ frescan_init_params_t init_params;
+ frescan_ss_t ss;
+ frescan_contract_t contract;
+ frescan_server_params_t server_params;
+ bool accepted;
+
+ init_params.net = NETWORK;
+ init_params.node = LOCAL_NODE;
+ init_params.tx_fp_max_prio = 10;
+ init_params.rx_num_of_channels = 10;
+ init_params.rx_channel_max_prio = NULL;
+
+ printf("Initializing FRESCAN\n");
+ ret = frescan_init(&init_params);
+ if (ret != 0) ERROR ("could not init FRESCAN");
+
+ printf("Initializing BWRES\n");
+ ret = frescan_bwres_init(NETWORK);
+ if (ret != 0) ERROR ("could not init BWRES");
+
+ contract.min_values.budget = 5;
+ contract.min_values.period.tv_sec = 3;
+ contract.min_values.period.tv_nsec = 0;
+ contract.prio = 5;
+
+ printf("Negotiating a contract\n");
+ ret = frescan_bwres_negotiate(NETWORK, &contract, &ss, &accepted);
+ if (ret != 0) ERROR ("could not negotiate succesfully");
+
+ if (accepted) {
+ printf("The contract was accepted, ss:%u\n", ss);
+ ret = frescan_servers_get_data(NETWORK, &server_params, ss);
+ if (ret != 0) 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.prio);
+ } else {
+ printf("The contract was not accepted\n");
+ }
+
+ printf("Renegotiate the contract in 2 seconds\n");
+ sleep(2);
+
+ contract.min_values.budget = 2;
+ contract.min_values.period.tv_sec = 6;
+ contract.min_values.period.tv_nsec = 43;
+ contract.prio = 2;
+
+ ret = frescan_bwres_renegotiate(NETWORK, &contract, ss, &accepted);
+ if (ret != 0) ERROR ("could not renegotiate");
+
+ if (accepted) {
+ printf("The contract renegotiation was accepted, ss:%u\n", ss);
+ ret = frescan_servers_get_data(NETWORK, &server_params, ss);
+ if (ret != 0) 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.prio);
+ } else {
+ printf("The contract was not accepted\n");
+ }
+
+ while (1) {
+ sleep(1);
+ }
+
+ return 0;
+}
+
+