From b47e2e45235b62edd31e5dd296092dd30fdc9dfb Mon Sep 17 00:00:00 2001 From: Tuka Martin Date: Thu, 15 Dec 2011 23:47:13 +0100 Subject: [PATCH] Added demo skeleton for fwp data sending depending on tx bitrate --- src/fwp/fwp/Makefile.omk | 2 +- src/fwp/fwp/demo/Makefile | 14 ++ src/fwp/fwp/demo/Makefile.omk | 6 + src/fwp/fwp/demo/reciever.c | 121 ++++++++++++++++ src/fwp/fwp/demo/sender.c | 264 ++++++++++++++++++++++++++++++++++ 5 files changed, 406 insertions(+), 1 deletion(-) create mode 100644 src/fwp/fwp/demo/Makefile create mode 100644 src/fwp/fwp/demo/Makefile.omk create mode 100644 src/fwp/fwp/demo/reciever.c create mode 100644 src/fwp/fwp/demo/sender.c diff --git a/src/fwp/fwp/Makefile.omk b/src/fwp/fwp/Makefile.omk index b59d1d34..244bdf94 100644 --- a/src/fwp/fwp/Makefile.omk +++ b/src/fwp/fwp/Makefile.omk @@ -1,6 +1,6 @@ default_CONFIG = CONFIG_FWP=y ifeq ($(CONFIG_FWP),y) -SUBDIRS = lib mngr wme_test tests wifi_agent +SUBDIRS = lib mngr wme_test tests wifi_agent demo CFLAGS+= -Wall -Wextra -D_REENTRANT endif diff --git a/src/fwp/fwp/demo/Makefile b/src/fwp/fwp/demo/Makefile new file mode 100644 index 00000000..b22a3576 --- /dev/null +++ b/src/fwp/fwp/demo/Makefile @@ -0,0 +1,14 @@ +# Generic directory or leaf node makefile for OCERA make framework + +ifndef MAKERULES_DIR +MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" = `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) ) +endif + +ifeq ($(MAKERULES_DIR),) +all : default +.DEFAULT:: + @echo -e "\nThe Makefile.rules has not been found in this or partent directory\n" +else +include $(MAKERULES_DIR)/Makefile.rules +endif + diff --git a/src/fwp/fwp/demo/Makefile.omk b/src/fwp/fwp/demo/Makefile.omk new file mode 100644 index 00000000..660cf08f --- /dev/null +++ b/src/fwp/fwp/demo/Makefile.omk @@ -0,0 +1,6 @@ +test_PROGRAMS = fwp_demo_sender fwp_demo_reciever +CFLAGS+= -D_FWP_INTERNALS_ +fwp_demo_sender_SOURCES+= sender.c +fwp_demo_reciever_SOURCES+= reciever.c +lib_LOADLIBES += frm forb fosa frsh fwp_admctrl fwp pthread rt ulut frsh_fwp contract + diff --git a/src/fwp/fwp/demo/reciever.c b/src/fwp/fwp/demo/reciever.c new file mode 100644 index 00000000..a9bbf304 --- /dev/null +++ b/src/fwp/fwp/demo/reciever.c @@ -0,0 +1,121 @@ +/** + * \file reciever.c + * + */ +#define CONFIGURE_FWP_MNGT 0 +#include "fwp_confdefs.h" +#include "fwp.h" + +#include +#include +#include + +int main() +{ + ssize_t len; + fwp_vres_t *vres1, *vres2; + int i; + struct fwp_vres_params vparam1, vparam2; + char msg1[] = "Hello1"; + char msg2[] = "Hello2"; + char buffer[30]; + struct fwp_endpoint *sepoint1, *sepoint2, *repoint1, *repoint2; + fwp_endpoint_attr_t attr; + fwp_addr_t from; + + fwp_endpoint_attr_init(&attr); + + vparam1.ac_id = FWP_AC_VO; + vparam1.budget = 100; + vparam1.period.tv_sec = 2; + vparam1.period.tv_nsec = 0; + + vparam2.ac_id = FWP_AC_BK; + vparam2.budget = 100; + vparam2.period.tv_sec = 0; + vparam2.period.tv_nsec = 100000; + + printf("Start\n"); + if (fwp_init() != 0) { + printf("FWP initialization failed!\n"); + return -1; + } + + printf("Create vres1, vres2\n"); + if (fwp_vres_create(&vparam1, &vres1) < 0) { + printf("Unable to create vres1\n"); + return -1; + } + printf("Vres1 created \n"); + + if (fwp_vres_create(&vparam2, &vres2) < 0){ + fprintf(stderr,"Unable to create vres2\n"); + return -1; + } + printf("Vres2 created\n"); + + /* local_addr should be handled when creating socket */ + if (fwp_receive_endpoint_create(7777, &attr,&repoint1) < 0){ + return -1; + } + printf("Receive endpoint created\n"); + + if (fwp_receive_endpoint_create(7778, &attr,&repoint2) < 0){ + return -1; + } + printf("Receive endpoint created\n"); + + //TODO: delete comments + /* + if (fwp_send_endpoint_create(inet_addr("10.42.43.10"), 7777, 0, + &sepoint1) < 0) { + return -1; + } + printf("Send endpoint 1 created\n"); + fwp_send_endpoint_bind(sepoint1, vres1); + + if (fwp_send_endpoint_create(inet_addr("10.42.43.1"), 7778, 0, + &sepoint2) < 0){ + return -1; + } + printf("Send endpoint 2 created\n"); + fwp_send_endpoint_bind(sepoint2, vres2); + + fwp_send_sync(sepoint1, msg1, sizeof(msg1)); + fwp_send_sync(sepoint1, msg2, sizeof(msg2)); + + fwp_send_sync(sepoint2, msg1, sizeof(msg1)); + fwp_send_sync(sepoint2, msg2, sizeof(msg2)); + */ + + for (i = 0; i < 2; i++) { + if ((len = fwp_recv(repoint1, buffer, sizeof(buffer), &from, + 0)) < 0) { + perror("Error while receiving data"); + return -1; + } + else printf("Received - %s\n", buffer); + } + + /* + while(1) { + fwp_recv(repoint1, buffer, sizeof(buffer), &from, 0); + printf("Received - %s\n", buffer); + } + */ + + if (fwp_vres_destroy(vres1) < 0) { + perror("Unable to destroy vres1\n"); + return -1; + } + printf("Vres1 destroyed\n"); + + if (fwp_vres_destroy(vres2) < 0){ + perror("Unable to destroy vres2\n"); + return -1; + } + printf("Vres2 destroyed\n"); + + return 0; +} + diff --git a/src/fwp/fwp/demo/sender.c b/src/fwp/fwp/demo/sender.c new file mode 100644 index 00000000..0d8794c0 --- /dev/null +++ b/src/fwp/fwp/demo/sender.c @@ -0,0 +1,264 @@ +/* + * sender + */ +#include "fwp_confdefs.h" +#include "fwp.h" +#include +#include +#include + +#include +#include +#include +#include +#include + +#include +#include + +#include +#include + +#include + +struct stream_params { + int id; + int budget1; + int period_ms1; + int async; + int number; + int count; + int schedulable_expected; + long long mac_address1; + +}; + +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; +} + +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; +} + +long long get_local_mac(char dev[10]) { + + struct ifreq s; + int fd = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP); + char mac[20]; + + strcpy(s.ifr_name, dev); + + if (0 == ioctl(fd, SIOCGIFHWADDR, &s)) { + sprintf(mac, "%02x:%02x:%02x:%02x:%02x:%02x", (unsigned char) s.ifr_addr.sa_data[0],(unsigned char) s.ifr_addr.sa_data[1],(unsigned char) s.ifr_addr.sa_data[2],(unsigned char) s.ifr_addr.sa_data[3],(unsigned char) s.ifr_addr.sa_data[4],(unsigned char) s.ifr_addr.sa_data[5]); + printf("Mac address of sender is: %s\n", mac); + + return mac_addr_string_to_number(mac); + } + return 0; +} + +int fwp_admctrl_utilization_test(struct stream_params *p) +{ + frsh_contract_t contract1; + frsh_rel_time_t period1; + frsh_rel_time_t budget1; + frsh_rel_time_t deadline1; + int ret; + + /* ----------------------------- */ + ssize_t len; + fwp_vres_t *vres1; + struct fwp_vres_params vparam1; + //char msg1[] = "000000000012345678901234567890123456789012345678905555555555666666666677777777778888888889999999999";//x";//0000000000111111111122222eeeee"; + char msg1[] = "Hello"; + //char buffer[30]; + //char msg1[7000]; + int i; + + struct fwp_endpoint *sepoint1, *repoint1; + fwp_endpoint_attr_t attr1; + fwp_addr_t from; + + /* ----------------------------- */ + fres_block_fwp_sched *fwp_sched; + + /* define scenario and its contracts */ + struct fres_sa_scenario * scenario; + scenario = fres_sa_scenario_new(); + + struct fres_sa_contract * c1; + c1 = fres_sa_contract_new(); + + for(i=0; i < 7000; i++) + ;// msg1[i]='a'; + //msg1[699999]='x'; + + + /* initialization of contracts */ + frsh_contract_init(&contract1); + + /* set resource and label of contracts */ + frsh_contract_set_resource_and_label( + &contract1, + FRSH_RT_NETWORK, FRSH_NETPF_FWP, + NULL); + + /* set basic parameters of contracts */ + frsh_network_bytes_to_budget(FRSH_NETPF_FWP, p->budget1, &budget1); + period1 = fosa_msec_to_rel_time(p->period_ms1); + frsh_contract_set_basic_params(&contract1, + &budget1, + &period1, + FRSH_WT_BOUNDED, + FRSH_CT_REGULAR); + + /* FWP doesn't accept smaller deadlines than 30 ms. */ + if (frsh_rel_time_smaller(period1, frsh_msec_to_rel_time(30))) + deadline1 = frsh_msec_to_rel_time(30); + else + { deadline1 = period1; + } + frsh_contract_set_timing_reqs(&contract1, false, &deadline1); + + /* set fwp parameters of contract */ + fres_block_fwp *fwp_block1; + fwp_block1 = (fres_block_fwp*)malloc(sizeof(fres_block_fwp)); + + /*Add mac address for each contract*/ + fwp_block1->mac_address = get_local_mac("wlan0"); + //TODO: Correct mac address setting up + fres_contract_add_block(contract1, FRES_BLOCK_FWP, fwp_block1); + + /* --------------------------- */ + fwp_endpoint_attr_init(&attr1); + + vparam1.ac_id = FWP_AC_VO; + vparam1.budget = p->budget1;//1000; + vparam1.period.tv_sec = 2;//0;//p->period_ms1;//2; + vparam1.period.tv_nsec = 0;//p->period_ms1*1000*1000; + + printf("Start\n"); + fwp_init(); + + printf("Create vres1\n"); + if (fwp_vres_create(&vparam1, &vres1) < 0) { + printf("Unable to create vres1\n"); + return -1; + } + printf("Vres1 created \n"); + + frsh_send_endpoint_protocol_info_t send_pinfo; + if (frsh_send_endpoint_create(FRSH_NETPF_FWP, inet_addr("10.42.43.10"), 7777, + send_pinfo, &sepoint1)< 0) { + return -1; + } + printf("Send endpoint 1 created\n"); + + //contract negotioate function + //TODO: Uncomment + //ret = frsh_contract_negotiate(&contract1, &vres1); + if (ret) PERROR_AND_EXIT(ret, "frsh_contract_negotiate"); + + //fwp_send_endpoint_bind(sepoint1, vres1); + frsh_send_endpoint_bind(vres1, sepoint1); + + //fwp_send_sync(sepoint1, msg1, sizeof(msg1)); + frsh_send_async(sepoint1, msg1, sizeof(msg1)); + + printf("Sent\n"); + + /*for (i = 0; i < 2; i++) { + if ((len = fwp_recv(repoint1, buffer, sizeof(buffer), &from, + 0)) < 0) { + perror("Error while receiving data"); + return -1; + } + else printf("Received - %s\n", buffer); + } + + if (fwp_vres_destroy(vres1) < 0) { + perror("Unable to destroy vres1\n"); + return -1; + } + printf("Vres1 destroyed\n"); + */ + + return 0; +} + + +int main(void) +{ + int i; + int num = 0; + + struct stream_params sp = { + .budget1 = 700000,//884736,//7077888, + .period_ms1 = 1000, + .async = false, + .number = 1, + .count = -1, + .mac_address1 = 151192294355, + .schedulable_expected = 1, + }; + + struct stream_params *p[100]; + + memset(p, 0, sizeof(p)); + + frsh_init(); + + for (i=0; iid = num; + + fwp_admctrl_utilization_test(p[num]); + + } + + frsh_destroy(); + + return 0; +} + -- 2.39.2