From 678e414cb5fd37c704d25e2b8875064173981bf6 Mon Sep 17 00:00:00 2001 From: Tuka Martin Date: Sun, 18 Mar 2012 18:52:09 +0100 Subject: [PATCH] fwp: Created skeleton for adaptive send/receive test Amount of data should be set up according to the actual budget and period (used vres_get_budget_and_period function) --- src/fwp/fwp/demo/Makefile.omk | 9 +- src/fwp/fwp/demo/fwp_send_receive_adaptive.sh | 16 ++ src/fwp/fwp/demo/sender_adaptive.c | 191 ++++++++++++++++++ 3 files changed, 215 insertions(+), 1 deletion(-) create mode 100755 src/fwp/fwp/demo/fwp_send_receive_adaptive.sh create mode 100644 src/fwp/fwp/demo/sender_adaptive.c diff --git a/src/fwp/fwp/demo/Makefile.omk b/src/fwp/fwp/demo/Makefile.omk index 78a5a9eb..2f185860 100644 --- a/src/fwp/fwp/demo/Makefile.omk +++ b/src/fwp/fwp/demo/Makefile.omk @@ -1,6 +1,13 @@ -test_PROGRAMS = fwp_demo_sender fwp_demo_receiver +test_PROGRAMS = fwp_demo_sender fwp_demo_sender_adaptive fwp_demo_receiver fake_wifi_agent + fwp_demo_sender_SOURCES+= sender.c +fwp_demo_sender_adaptive_SOURCES+= sender_adaptive.c fwp_demo_receiver_SOURCES+= receiver.c lib_LOADLIBES += frm forb fosa frsh fwp_admctrl fwp pthread rt ulut frsh_fwp contract wvtest +fake_wifi_agent_SOURCES+= fake_wifi_agent.c +fake_wifi_agent_LIBS += wifi_agent_client_functions forb contract + wvtest_SCRIPTS += fwp_send_receive.sh +wvtest_SCRIPTS += fwp_send_receive_adaptive.sh + diff --git a/src/fwp/fwp/demo/fwp_send_receive_adaptive.sh b/src/fwp/fwp/demo/fwp_send_receive_adaptive.sh new file mode 100755 index 00000000..13729594 --- /dev/null +++ b/src/fwp/fwp/demo/fwp_send_receive_adaptive.sh @@ -0,0 +1,16 @@ +#!/bin/bash + +. $(dirname $0)/wvtest.sh + +wvtest_cleanup() { + WVPASS kill `cat fcb.pid fwp.pid` + WVPASS rm fcb.pid + WVPASS rm fwp.pid +} + +WVPASS fcb -dfcb.pid +WVPASS frm_fwp -dfwp.pid +WVPASS fake_wifi_agent -a 00:00:01:AA:BB:CC -r 10 +WVPASS fwp_demo_receiver -p 7777 -m 1 +WVPASS fwp_demo_sender_adaptive -d 127.0.0.1 -p 7777 -m 1 -s 1000 -a 00:00:01:AA:BB:CC + diff --git a/src/fwp/fwp/demo/sender_adaptive.c b/src/fwp/fwp/demo/sender_adaptive.c new file mode 100644 index 00000000..f8fa17e4 --- /dev/null +++ b/src/fwp/fwp/demo/sender_adaptive.c @@ -0,0 +1,191 @@ +/** + * \file sender_adaptive.c + * sends data according to the actual budget and period + * + */ +#include +#include "test_config.h" + +#include +#include +#include + +#include +#include +#include + +#include +#include "fwp_confdefs.h" +#include +#include +#include + +/* + * Mac address conversion functions + */ +/** + * Char to number conversion + */ +int atoint(char a) +{ + if( (a >= '0') && (a <= '9') ) + return a - '0'; + else if ( (a >= 'A') && (a <= 'F') ) + return a - 'A' + 10; + else if ( (a >= 'a') && (a <= 'f') ) + return a - 'a' + 10; + return 0; +} + +/** + * Mac addres char to number conversion + * @param mac mac address in string format + * + * @return Mac address in long long format + */ +long long mac_addr_string_to_number(char * mac) +{ + long long number; + long long help; + int ix; + int ix2; + char mac_num[12]; + + mac_num[0] = mac[0]; + mac_num[1] = mac[1]; + mac_num[2] = mac[3]; + mac_num[3] = mac[4]; + mac_num[4] = mac[6]; + mac_num[5] = mac[7]; + mac_num[6] = mac[9]; + mac_num[7] = mac[10]; + mac_num[8] = mac[12]; + mac_num[9] = mac[13]; + mac_num[10] = mac[15]; + mac_num[11] = mac[16]; + + number = 0; + + for(ix = 0; ix <= 12 ; ix++) + { + help = 1; + for(ix2 = 1; ix2 < 12 - ix; ix2++) + help *= 16; + number += atoint(mac_num[ix]) * help; + + } + + printf("%llu \n", number); + return number; +} + +int main(int argc, char* argv[]) +{ + char msg[MSGBUFFSIZE]; + + 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 dst_ip = 0; + char mac_addr[20]; + + int opt; + frsh_send_endpoint_t sepoint; + frsh_vres_id_t vres; + frsh_send_endpoint_protocol_info_t send_pinfo; + frsh_contract_t contract; + frsh_rel_time_t budget, period; + int count; + + struct fwp_vres_params vparam; + + opterr = 0; + while ((opt = getopt (argc, argv, "d:p:s:m:t:a:")) != -1) { + + switch (opt) { + case 'd': + dst_ip = inet_addr(optarg); + break; + case 'p': + port = atoi(optarg); + break; + case 'm': + num_msg = atoi(optarg); + break; + case 's': + msg_size = atoi(optarg); + break; + case 't': + time_period = atoi(optarg); + break; + case 'a': + strcpy(mac_addr, optarg); //msg_size = atoi(optarg); + break; + case '?': + printf("Usage: %s -e -d dst_ip_addr -p port" + "-m num_msg -s msg_size -a mac_addr\n", + argv[0]); + } + } + + WVFRSH(frsh_init()); + + send_pinfo.body = NULL; + + WVPASSNE(frsh_send_endpoint_create(resource_id, dst_ip, port, send_pinfo, &sepoint), 0); + + /* Contract negotiation */ + 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_contract_set_basic_params(&contract, + &budget, + &period, + FRSH_WT_BOUNDED, + FRSH_CT_REGULAR)); + WVFRSH(frsh_contract_set_resource_and_label(&contract,FRSH_RT_NETWORK, + resource_id, "net_cont1")); + + // TODO: 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); + + 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"); + + 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); + } + + /* TODO: destroy vres and send enpoint */ + + printf("Test PASSED!\n"); + return 0; +} + -- 2.39.2