return number;
}
+char * prepare_msg(int size) {
+ int i;
+ char * ret = (char*)malloc(size*sizeof(char));
+ for(i=0; i<size; i++) {
+ ret[i] = '0'; //just insert some characters
+ }
+ return ret;
+}
+
int main(int argc, char* argv[])
{
- char msg[MSGBUFFSIZE];
+ char *msg;
frsh_resource_id_t resource_id = TEST_RESOURCE_ID;
frsh_stream_id_t port = TEST_STREAM_ID;
long int num_msg = TEST_NUM_MSG;
size_t msg_size = MSGBUFFSIZE;
- int time_period = 1000;
+ int time_period = 100;
int dst_ip = 0;
char mac_addr[20];
frsh_rel_time_t budget, period;
int count;
- struct fwp_vres_params vparam;
+ bool opt_daemon = false;
+ char *opt_pidfile = NULL;
+ frsh_rel_time_t zero = fosa_msec_to_rel_time(0);
+
+ frsh_utilization_set_t utilization_set;
+ utilization_set.size = 4;
+ utilization_set.utilizations[1].period = fosa_msec_to_rel_time(100);
+ utilization_set.utilizations[1].budget = fosa_usec_to_rel_time(3);
+ utilization_set.utilizations[1].deadline = fosa_msec_to_rel_time(100);
+ utilization_set.utilizations[2].period = fosa_msec_to_rel_time(100);
+ utilization_set.utilizations[2].budget = fosa_usec_to_rel_time(9);
+ utilization_set.utilizations[2].deadline = fosa_msec_to_rel_time(100);
+ utilization_set.utilizations[3].period = fosa_msec_to_rel_time(100);
+ utilization_set.utilizations[3].budget = fosa_usec_to_rel_time(14);
+ utilization_set.utilizations[3].deadline = fosa_msec_to_rel_time(100);
opterr = 0;
- while ((opt = getopt (argc, argv, "d:p:s:m:t:a:")) != -1) {
+ while ((opt = getopt (argc, argv, "e:d:p:s:m:t:a:")) != -1) {
switch (opt) {
+ case 'e':
+ opt_daemon = true;
+ opt_pidfile = optarg;
+ break;
case 'd':
dst_ip = inet_addr(optarg);
break;
time_period = atoi(optarg);
break;
case 'a':
- strcpy(mac_addr, optarg); //msg_size = atoi(optarg);
+ strcpy(mac_addr, optarg);
break;
case '?':
printf("Usage: %s -e -d dst_ip_addr -p port"
}
}
- WVFRSH(frsh_init());
+ if (opt_daemon)
+ forb_daemon_prepare(opt_pidfile);
+ WVFRSH(frsh_init());
send_pinfo.body = NULL;
-
WVPASSNE(frsh_send_endpoint_create(resource_id, dst_ip, port, send_pinfo, &sepoint), 0);
-
- /* Contract negotiation */
+
+ /* Contract parameters */
WVFRSH(frsh_contract_init(&contract));
-
- WVFRSH(frsh_network_bytes_to_budget(resource_id, msg_size, &budget));
- period = fosa_msec_to_rel_time(time_period);
+ WVFRSH(frsh_network_bytes_to_budget(resource_id, msg_size, &utilization_set.utilizations[0].budget));
+ utilization_set.utilizations[0].period = fosa_msec_to_rel_time(time_period);
WVFRSH(frsh_contract_set_basic_params(&contract,
- &budget,
- &period,
+ &utilization_set.utilizations[0].budget,
+ &utilization_set.utilizations[0].period,
FRSH_WT_BOUNDED,
FRSH_CT_REGULAR));
WVFRSH(frsh_contract_set_resource_and_label(&contract,FRSH_RT_NETWORK,
- resource_id, "net_cont1"));
+ resource_id, "net_cont"));
- // TODO: Add fwp block with MAC address
+ /* Add fwp block with MAC address */
fres_block_fwp *fwp_block;
WVPASS((fwp_block = (fres_block_fwp*)malloc(sizeof(fres_block_fwp))) != NULL);
- /*Add mac address for each contract*/
fwp_block->mac_address = mac_addr_string_to_number(mac_addr);
WVPASS(fres_contract_add_block(contract, FRES_BLOCK_FWP, fwp_block) == 0);
+ /* Add spare capacity block */
+ //TODO: Delete extra spare capacity block initialization, since spare capacity is initialized in set_reclamation_params function
+ //fres_block_spare_capacity *s;
+ //WVPASS((s = malloc(sizeof(*s))) != NULL);
+ //s->budget = (fosa_rel_time_t)budget;
+ //s->budget = (fosa_rel_time_t)utilization_set.utilizations[0].budget;
+ //s->period = (fosa_rel_time_t)utilization_set.utilizations[0].period;
+ //WVPASS(fres_contract_add_spare_capacity(contract, s) == 0);
+
+ WVFRSH(frsh_contract_set_reclamation_params(&contract,
+ &zero,
+ &utilization_set.utilizations[utilization_set.size-1].budget,
+ &utilization_set.utilizations[utilization_set.size-1].period,
+ FRSH_GR_DISCRETE,
+ &utilization_set,
+ 0,
+ 0));
+
WVFRSH(frsh_contract_negotiate(&contract, &vres));
WVFRSH(frsh_send_endpoint_bind(vres, sepoint));
- //TODO : Create vres
- // Create vres
- //vparam.ac_id = FWP_AC_VO;
- //vparam.budget = size_of_budget_actual;
- //vparam.period.tv_sec = 0;
- //vparam.period.tv_nsec = size_of_period_ms*1000*1000;
- //printf("Create VRES\n");
- //if (fwp_vres_create(&vparam, &vres) < 0) {
- // printf("Unable to create VRES\n");
- // return -1;
- //}
- //printf("VRES created \n");
+ if (opt_daemon)
+ forb_daemon_ready();
count = 0;
while (count != num_msg) {
- // TODO: Synchronize with receiver
- sleep(1);
count++;
- // TODO: call fres_... function to find out actuall budget
- //if(frsh_vres_get_budget_and_period (const frsh_vres_id_t vres, frsh_rel_time_t *budget, frsh_rel_time_t *period) != 0)
- // printf("Error");
- WVPASSEQ(frsh_send_async(sepoint, msg, msg_size), msg_size);
- }
+ WVPASS(frsh_vres_get_budget_and_period (vres, &budget, &period) == 0);
+ WVFRSH(frsh_network_budget_to_bytes(resource_id, &budget, &msg_size));
+
+ //TODO: Delete printf below
+ printf("msg_size....%d\n", msg_size);
+ printf("count....%d\n", count);
- /* TODO: destroy vres and send enpoint */
+ msg = prepare_msg(msg_size);
+ WVPASSEQ(frsh_send_sync(sepoint, msg, msg_size), msg_size);
+ }
+ frsh_contract_cancel(vres);
+ frsh_contract_destroy((struct fres_contract **)contract);
printf("Test PASSED!\n");
return 0;
}