From d08e818b34d899564f0cda9a8b3be37354cf5ce7 Mon Sep 17 00:00:00 2001 From: HappyZ Date: Mon, 26 Sep 2016 20:07:46 -0700 Subject: [PATCH] rewrote bypassl3, normaludp, fix bugs in normaltcp and sendfile --- offloading_binaries/BypassL3Binary/main.c | 206 -------------- offloading_binaries/Normal_donothing/Makefile | 21 -- offloading_binaries/Normal_donothing/main.c | 130 --------- .../Normal_donothing/normal_readonly | Bin 74704 -> 0 bytes offloading_binaries/Normal_lo/Makefile | 23 -- offloading_binaries/Normal_lo/main.c | 131 --------- offloading_binaries/Normal_lo/main.o | Bin 3724 -> 0 bytes offloading_binaries/Normal_memory/main.c | 100 ------- .../Normal_memory/normal_memory | Bin 12772 -> 0 bytes offloading_binaries/Normal_udp/main.c | 123 --------- offloading_binaries/Normal_udp/main.o | Bin 3604 -> 0 bytes offloading_binaries/Normal_udp/normal_udp | Bin 51092 -> 0 bytes offloading_binaries/Normal_udp_lo/Makefile | 21 -- offloading_binaries/Normal_udp_lo/main.c | 124 --------- offloading_binaries/Normal_udp_lo/main.o | Bin 3608 -> 0 bytes .../Normal_udp_lo/normal_udp_lo | Bin 51092 -> 0 bytes offloading_binaries/Normal_udp_usb/Makefile | 21 -- offloading_binaries/Normal_udp_usb/main.c | 124 --------- offloading_binaries/Normal_udp_usb/main.o | Bin 3600 -> 0 bytes .../{Normal_memory => c2s_bypassl3}/Makefile | 5 +- .../bypassl3 => c2s_bypassl3/c2s_bypassl3} | Bin 51224 -> 51292 bytes offloading_binaries/c2s_bypassl3/main.c | 254 ++++++++++++++++++ offloading_binaries/c2s_bypassl3/main.o | Bin 0 -> 5648 bytes .../c2s_normaltcp/c2s_normaltcp | Bin 51248 -> 51248 bytes offloading_binaries/c2s_normaltcp/main.c | 46 ++-- offloading_binaries/c2s_normaltcp/main.o | Bin 4504 -> 4612 bytes .../c2s_normaltcp_sendfile | Bin 51232 -> 51232 bytes .../c2s_normaltcp_sendfile/main.c | 23 +- .../c2s_normaltcp_sendfile/main.o | Bin 4200 -> 4216 bytes .../Makefile | 8 +- .../normal_lo => c2s_normaludp/c2s_normaludp} | Bin 51180 -> 51252 bytes offloading_binaries/c2s_normaludp/main.c | 195 ++++++++++++++ offloading_binaries/c2s_normaludp/main.o | Bin 0 -> 4640 bytes .../Makefile | 8 +- .../c2s_readfile_only} | Bin 51092 -> 51132 bytes offloading_binaries/c2s_readfile_only/main.c | 165 ++++++++++++ offloading_binaries/c2s_readfile_only/main.o | Bin 0 -> 3748 bytes 37 files changed, 665 insertions(+), 1063 deletions(-) delete mode 100644 offloading_binaries/BypassL3Binary/main.c delete mode 100644 offloading_binaries/Normal_donothing/Makefile delete mode 100644 offloading_binaries/Normal_donothing/main.c delete mode 100755 offloading_binaries/Normal_donothing/normal_readonly delete mode 100644 offloading_binaries/Normal_lo/Makefile delete mode 100644 offloading_binaries/Normal_lo/main.c delete mode 100644 offloading_binaries/Normal_lo/main.o delete mode 100644 offloading_binaries/Normal_memory/main.c delete mode 100755 offloading_binaries/Normal_memory/normal_memory delete mode 100644 offloading_binaries/Normal_udp/main.c delete mode 100644 offloading_binaries/Normal_udp/main.o delete mode 100755 offloading_binaries/Normal_udp/normal_udp delete mode 100644 offloading_binaries/Normal_udp_lo/Makefile delete mode 100644 offloading_binaries/Normal_udp_lo/main.c delete mode 100644 offloading_binaries/Normal_udp_lo/main.o delete mode 100755 offloading_binaries/Normal_udp_lo/normal_udp_lo delete mode 100644 offloading_binaries/Normal_udp_usb/Makefile delete mode 100644 offloading_binaries/Normal_udp_usb/main.c delete mode 100644 offloading_binaries/Normal_udp_usb/main.o rename offloading_binaries/{Normal_memory => c2s_bypassl3}/Makefile (73%) rename offloading_binaries/{BypassL3Binary/bypassl3 => c2s_bypassl3/c2s_bypassl3} (51%) create mode 100644 offloading_binaries/c2s_bypassl3/main.c create mode 100644 offloading_binaries/c2s_bypassl3/main.o rename offloading_binaries/{BypassL3Binary => c2s_normaludp}/Makefile (67%) rename offloading_binaries/{Normal_lo/normal_lo => c2s_normaludp/c2s_normaludp} (53%) create mode 100644 offloading_binaries/c2s_normaludp/main.c create mode 100644 offloading_binaries/c2s_normaludp/main.o rename offloading_binaries/{Normal_udp => c2s_readfile_only}/Makefile (66%) rename offloading_binaries/{Normal_udp_usb/normal_udp_usb => c2s_readfile_only/c2s_readfile_only} (55%) create mode 100644 offloading_binaries/c2s_readfile_only/main.c create mode 100644 offloading_binaries/c2s_readfile_only/main.o diff --git a/offloading_binaries/BypassL3Binary/main.c b/offloading_binaries/BypassL3Binary/main.c deleted file mode 100644 index fba88fe..0000000 --- a/offloading_binaries/BypassL3Binary/main.c +++ /dev/null @@ -1,206 +0,0 @@ -/* - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define ETH_P_IP 0x0800 /* Internet Protocol packet */ -#define ETH_ALEN 6 /* from */ -#define ETH_P_ALL 0x0003 - -#define MY_DEST_MAC0 0xba -#define MY_DEST_MAC1 0xf6 -#define MY_DEST_MAC2 0xb1 -#define MY_DEST_MAC3 0x71 -#define MY_DEST_MAC4 0x09 -#define MY_DEST_MAC5 0x64 - -#define DEFAULT_IF "wlan0" -//#define DEFAULT_IF "eth1" -#define BUF_SIZ 8192 - -int main(int argc, char *argv[]) -{ - int slotLength = 10000; // in microseconds - int quota = 1000000000; // Bytes per slot, default 1GB/slot - int sentInSlot = 0, slot = 1; - double elapsedTime; - double packetPerSlot; - - struct iovec iov; - int sockfd; - struct ifreq if_idx; - struct ifreq if_mac; - int tx_len = 0; - char sendbuf[BUF_SIZ]; - struct ether_header *eh = (struct ether_header *) sendbuf; - struct iphdr *iph = (struct iphdr *) (sendbuf + sizeof(struct ether_header)); - struct sockaddr_ll socket_address; - char ifName[IFNAMSIZ]; - int i, j, ret, sendsize=1500, packet_num, offset = 0; - int fd; /* file descriptor for file to send */ - struct timeval t_start, t_end, t_now; - - if (argc > 4) - sendsize = atoi(argv[4]); - - if (argc > 1) - packet_num = atoi(argv[1])/sendsize; - else - packet_num = 166666; - - if (argc > 2) - quota = atoi(argv[2]) / (1000000 / slotLength); - else { - printf("Usage: ./bypassl3 "); - exit(-1); - } - - if (argc > 3) { - /* get the name of the interface */ - strcpy(ifName, argv[3]); - } else { - strcpy(ifName, DEFAULT_IF); - } - - // fix packet size problem - packetPerSlot = ceil(((double)quota) / sendsize); - slotLength = (int)(packetPerSlot * sendsize / quota * slotLength); - quota = (int)packetPerSlot * sendsize; - - - /* Open RAW socket to send on */ - //sendsize -= 14; - //if ((sockfd = socket(AF_PACKET, SOCK_DGRAM, IPPROTO_RAW)) == -1) { - if ((sockfd = socket(AF_PACKET, SOCK_RAW, IPPROTO_RAW)) == -1) { - perror("socket"); - } - - /* Get the index of the interface to send on */ - memset(&if_idx, 0, sizeof(struct ifreq)); - strncpy(if_idx.ifr_name, ifName, IFNAMSIZ-1); - if (ioctl(sockfd, SIOCGIFINDEX, &if_idx) < 0) - perror("SIOCGIFINDEX"); - /* Get the MAC address of the interface to send on */ - memset(&if_mac, 0, sizeof(struct ifreq)); - strncpy(if_mac.ifr_name, ifName, IFNAMSIZ-1); - if (ioctl(sockfd, SIOCGIFHWADDR, &if_mac) < 0) - perror("SIOCGIFHWADDR"); - - /* Construct the Ethernet header */ - memset(sendbuf, 0, BUF_SIZ); - /* Ethernet header */ - - eh->ether_shost[0] = ((uint8_t *)&if_mac.ifr_hwaddr.sa_data)[0]; - eh->ether_shost[1] = ((uint8_t *)&if_mac.ifr_hwaddr.sa_data)[1]; - eh->ether_shost[2] = ((uint8_t *)&if_mac.ifr_hwaddr.sa_data)[2]; - eh->ether_shost[3] = ((uint8_t *)&if_mac.ifr_hwaddr.sa_data)[3]; - eh->ether_shost[4] = ((uint8_t *)&if_mac.ifr_hwaddr.sa_data)[4]; - eh->ether_shost[5] = ((uint8_t *)&if_mac.ifr_hwaddr.sa_data)[5]; - eh->ether_dhost[0] = MY_DEST_MAC0; - eh->ether_dhost[1] = MY_DEST_MAC1; - eh->ether_dhost[2] = MY_DEST_MAC2; - eh->ether_dhost[3] = MY_DEST_MAC3; - eh->ether_dhost[4] = MY_DEST_MAC4; - eh->ether_dhost[5] = MY_DEST_MAC5; - eh->ether_type = htons(ETH_P_IP); - tx_len += sizeof(struct ether_header); - - - /* Packet data */ - /* - sendbuf[tx_len++] = 0xde; - sendbuf[tx_len++] = 0xad; - sendbuf[tx_len++] = 0xbe; - sendbuf[tx_len++] = 0xef; - */ - - /* Index of the network device */ - socket_address.sll_ifindex = if_idx.ifr_ifindex; - /* Address length*/ - socket_address.sll_halen = ETH_ALEN; - /* Destination MAC */ - socket_address.sll_addr[0] = MY_DEST_MAC0; - socket_address.sll_addr[1] = MY_DEST_MAC1; - socket_address.sll_addr[2] = MY_DEST_MAC2; - socket_address.sll_addr[3] = MY_DEST_MAC3; - socket_address.sll_addr[4] = MY_DEST_MAC4; - socket_address.sll_addr[5] = MY_DEST_MAC5; - //test - //socket_address.sll_family = AF_PACKET; - //socket_address.sll_protocol = htons(ETH_P_ALL); - -// fd = open("bigfile"); - fd = open("/data/local/tmp/bigfile", O_RDONLY); - if (fd == -1) { - fprintf(stderr, "unable to open the file.\n"); - exit(1); - } - - /* - if (bind(sockfd,(struct sockaddr*)&socket_address, sizeof(struct sockaddr_ll)) == -1) - { - perror("bind error.\n"); - exit(1); - } - */ - /* Send packet */ - gettimeofday(&t_start, NULL); - read(fd, sendbuf+tx_len, sendsize-tx_len); - for (i = 0; i < packet_num;) - { - if (((packet_num - i) * sendsize) < quota) - { - quota = (packet_num - i) * sendsize; - } - - while (sentInSlot < quota) - { - //ret = sendfile(sockfd, fd, (off_t *)&offset, sendsize); - //printf("%d\t%d\n", ret, errno); - //read(fd, sendbuf, sendsize); - ret = sendto(sockfd, sendbuf, sendsize, MSG_DONTWAIT, (struct sockaddr*)&socket_address, sizeof(struct sockaddr_ll)); -// printf("%d\t%d\n", ret, errno); - if (ret == sendsize) - { - read(fd, sendbuf+tx_len, sendsize-tx_len); - i++; - sentInSlot = sentInSlot + ret; - } - else - { - //printf("sendto error\n"); - usleep(100); - } - } - gettimeofday(&t_now, NULL); - elapsedTime = (t_now.tv_sec-t_start.tv_sec)*1000000.0+(t_now.tv_usec-t_start.tv_usec); - if (elapsedTime < slotLength * slot) - { - //printf("sent %d, quota %d, packet_num %d, usleep %lf\n", i, quota, packet_num, slotLength * slot - elapsedTime); - usleep((int)(slotLength * slot - elapsedTime)); - } - sentInSlot = 0; - slot++; - } - gettimeofday(&t_end, NULL); - printf("%lf\n", (t_end.tv_sec-t_start.tv_sec)*1000.0+(t_end.tv_usec-t_start.tv_usec)/1000.0); - - - return 0; -} diff --git a/offloading_binaries/Normal_donothing/Makefile b/offloading_binaries/Normal_donothing/Makefile deleted file mode 100644 index a15cbec..0000000 --- a/offloading_binaries/Normal_donothing/Makefile +++ /dev/null @@ -1,21 +0,0 @@ -CC = arm-linux-androideabi-gcc -CFLAGS = -pie -fPIE -llog -TARGET = normal_readonly - -OBJS = $(patsubst %.c, %.o, $(wildcard *.c)) -HEADERS = $(wildcard *.h) - -all: $(TARGET) - -%.o: %.c $(HEADERS) - $(CC) $(CFLAGS) -c $< -o $@ - -.PRECIOUS: $(TARGET) $(OBJS) - -$(TARGET): $(OBJS) - $(CC) $(OBJS) -Wall $(CFLAGS) -o $@ -# cp $(TARGET) /media/Lucifer/yanzi/projects/mobileOffloading/RDMAMobileDemo/app/src/main/assets/ - -clean: - -rm -f *.o - -rm -f $(TARGET) diff --git a/offloading_binaries/Normal_donothing/main.c b/offloading_binaries/Normal_donothing/main.c deleted file mode 100644 index 2b8bc44..0000000 --- a/offloading_binaries/Normal_donothing/main.c +++ /dev/null @@ -1,130 +0,0 @@ -/* - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - */ -// #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -//#include -#include -#define ETH_P_IP 0x0800 /* Internet Protocol packet */ -#define ETH_ALEN 6 /* from */ -#define ETH_P_ALL 0x0003 - -#define MY_DEST_MAC0 0xba -#define MY_DEST_MAC1 0xf6 -#define MY_DEST_MAC2 0xb1 -#define MY_DEST_MAC3 0x71 -#define MY_DEST_MAC4 0x09 -#define MY_DEST_MAC5 0x64 - -#define DEFAULT_IF "wlan0" -//#define DEFAULT_IF "eth0" -#define BUF_SIZ 8192 - -int main(int argc, char *argv[]) -{ - int slotLength = 10000; // in microseconds - int quota = 1000000000; // Bytes per slot, default 1GB/slot - int sentInSlot = 0, slot = 1; - double elapsedTime; - - struct iovec iov; - int sockfd; - struct ifreq if_idx; - struct ifreq if_mac; - int tx_len = 0; - char sendbuf[BUF_SIZ]; - struct ether_header *eh = (struct ether_header *) sendbuf; - struct iphdr *iph = (struct iphdr *) (sendbuf + sizeof(struct ether_header)); - struct sockaddr_ll socket_address; - char ifName[IFNAMSIZ]; - int i, j, ret, sendsize=1488, packet_num, offset = 0; - int fd; /* file descriptor for file to send */ - struct timeval t_start,t_end,t_now; - - struct sockaddr_in servaddr; - -monstartup("normal_readonly.so"); - if (argc > 1) - packet_num = atoi(argv[1]); - else - packet_num = 166666*sendsize; - - if (argc > 2) - quota = atoi(argv[2]) / (1000000 / slotLength); - -// sockfd = socket(AF_INET, SOCK_STREAM, 0); - -// bzero(&servaddr,sizeof(servaddr)); -// servaddr.sin_family = AF_INET; -// servaddr.sin_addr.s_addr=inet_addr("128.111.68.220"); -// servaddr.sin_port=htons(4444); - - - - fd = open("/data/local/tmp/bigfile", O_RDONLY); - if (fd == -1) { - fprintf(stderr, "unable to open the file.\n"); - exit(1); - } - - gettimeofday(&t_start, NULL); -// if (connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) < 0) -// { -// fprintf(stderr, "unable to connect the server.\n"); -// exit(1); -// } - while (offset < packet_num) - { - if ((packet_num - offset) < quota) - { - quota = packet_num - offset; - } - while (sentInSlot < quota) - { - read(fd, sendbuf, (quota - sentInSlot < 4096) ? quota - sentInSlot : 4096); - //ret = send(sockfd, sendbuf, (quota - sentInSlot < 4096) ? quota - sentInSlot : 4096, 0); - //if (ret <= 0) - //{ - // printf("send fail\n"); - // usleep(100); - // continue; - //} - ret = 100; - offset += ret; - sentInSlot = sentInSlot + ret; - } - gettimeofday(&t_now, NULL); - elapsedTime = (t_now.tv_sec-t_start.tv_sec)*1000000.0+(t_now.tv_usec-t_start.tv_usec); - if (elapsedTime < slotLength * slot) - { - //printf("sent %d, quota %d, packet_num %d, usleep %lf\n", offset, quota, packet_num, slotLength * slot - elapsedTime); - usleep((int)(slotLength * slot - elapsedTime)); - } - sentInSlot = 0; - slot++; - - } -// close(sockfd); - gettimeofday(&t_end, NULL); - printf("%lf\n", (t_end.tv_sec-t_start.tv_sec)*1000.0+(t_end.tv_usec-t_start.tv_usec)/1000.0); - -// close(fd); -moncleanup(); - return 0; -} diff --git a/offloading_binaries/Normal_donothing/normal_readonly b/offloading_binaries/Normal_donothing/normal_readonly deleted file mode 100755 index 6052a6308b31c2d4ad6ad5929234aa73df04003c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 74704 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 -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -//#include "/media/Lucifer/android/ndk-profiler/jni/prof.h" - -#define ETH_P_IP 0x0800 /* Internet Protocol packet */ -#define ETH_ALEN 6 /* from */ -#define ETH_P_ALL 0x0003 - -#define MY_DEST_MAC0 0xba -#define MY_DEST_MAC1 0xf6 -#define MY_DEST_MAC2 0xb1 -#define MY_DEST_MAC3 0x71 -#define MY_DEST_MAC4 0x09 -#define MY_DEST_MAC5 0x64 - -#define DEFAULT_IF "wlan0" -#define BUF_SIZ 8192 - -int main(int argc, char *argv[]) -{ - int slotLength = 10000; // in microseconds - int quota = 1000000000; // Bytes per slot, default 1GB/slot - int sentInSlot = 0, slot = 1; - double elapsedTime; - - struct iovec iov; - int sockfd; - struct ifreq if_idx; - struct ifreq if_mac; - int tx_len = 0; - char sendbuf[BUF_SIZ]; - struct ether_header *eh = (struct ether_header *) sendbuf; - struct iphdr *iph = (struct iphdr *) (sendbuf + sizeof(struct ether_header)); - struct sockaddr_ll socket_address; - char ifName[IFNAMSIZ]; - int i, j, ret, sendsize=1488, packet_num, offset = 0; - int fd; /* file descriptor for file to send */ - struct timeval t_start,t_end,t_now; - - struct sockaddr_in servaddr; - -// monstartup("normal"); - - if (argc > 1) - packet_num = atoi(argv[1]); - else - packet_num = 166666*sendsize; - - if (argc > 2) - quota = atoi(argv[2]) / (1000000 / slotLength); - - sockfd = socket(AF_INET, SOCK_STREAM, 0); - - bzero(&servaddr,sizeof(servaddr)); - servaddr.sin_family = AF_INET; - servaddr.sin_addr.s_addr=inet_addr("192.168.1.15"); - servaddr.sin_port=htons(4444); - - - - fd = open("/data/local/tmp/bigfile", O_RDONLY); - if (fd == -1) { - fprintf(stderr, "unable to open the file.\n"); - exit(1); - } - - gettimeofday(&t_start, NULL); - if (connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) < 0) - { - fprintf(stderr, "unable to connect the server.\n"); - exit(1); - } - while (offset < packet_num) - { - if ((packet_num - offset) < quota) - { - quota = packet_num - offset; - } - while (sentInSlot < quota) - { - read(fd, sendbuf, (quota - sentInSlot < 4096) ? quota - sentInSlot : 4096); - ret = send(sockfd, sendbuf, (quota - sentInSlot < 4096) ? quota - sentInSlot : 4096, 0); -// printf("%d\t%d\n", ret, errno); - if (ret <= 0) - { - printf("send fail\n"); - usleep(100); - continue; - } - offset += ret; - sentInSlot = sentInSlot + ret; - } - gettimeofday(&t_now, NULL); - elapsedTime = (t_now.tv_sec-t_start.tv_sec)*1000000.0+(t_now.tv_usec-t_start.tv_usec); - if (elapsedTime < slotLength * slot) - { - //printf("sent %d, quota %d, packet_num %d, usleep %lf\n", offset, quota, packet_num, slotLength * slot - elapsedTime); - usleep((int)(slotLength * slot - elapsedTime)); - } - sentInSlot = 0; - slot++; - - } - close(sockfd); - gettimeofday(&t_end, NULL); - printf("%lf\n", (t_end.tv_sec-t_start.tv_sec)*1000.0+(t_end.tv_usec-t_start.tv_usec)/1000.0); - - close(fd); - -// moncleanup(); - return 0; -} diff --git a/offloading_binaries/Normal_lo/main.o b/offloading_binaries/Normal_lo/main.o deleted file mode 100644 index 53f3881225c34f7510a53b8f2d53945bc89beb3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3724 zcmb7HU2GIp6h5=Fi=}N~r6u%d#Zd|_2-9g?Xv-5E9Y!fuJUR@WBu?eb9sujNM%}qVOPZJP_-5W@mPX(IVbv=DXjy z=bn4cx%ZywzCAQLEC>SGO`ssv8PUaNbHo=iAxO=%n3SCxes8|?erfWTT_tIDSIM(= zq|~eolx~t(vHNp=vGUWS+NrCL(ONDaCnj-=2^=>LH6@m7Z8;EY$vN_1Sm`BP-6_EaI8m&i(`r)rU>#WkX~*i z>UglR?i0t}4qxw@va`Q^jy&=lfvR)uJr5xl9D{AsnWHduRyePI*s*g>*dwfU;hbx& zmC!k{z*_HN-vd%-MS`y$DL&^1inO$GNEx_S(FN23hN5z zZJ+s^Ml9dhuYc$((BE1(k9kGs96KJI5i_1aGcu72NJ&mY@OSh;!vK1uM2 zb+J!#eEwS%JqqJ9^jngtYnZ=-aq!i-qURhYh*Of=-_Oip? zLb-MB)oGW#f6Kea+P_24wd;r%Ir1UD93!7^E8k_#QS@NRH_`$@y%R#IxzNmcdviYiKeY+MpY1{0)-(_U@8Z!^kIN6NaW^b$4@qyS;R8 z-Z?Hl^kpX!@#kzJS(|1FMe-58r;g^MCX3f)cd_!lld z?c!g%_>7DH;Nm~K_zf5T)x~eQ_#GF&=i>KWe2L>gasDZ-CNpxJx)PMkY*rJAd{oUG ztMyaaY%azpwM(UF)Vw9pWFmQ_PI?oyej+`QsuS3%lXyCJ*r-!|B3388$>Vjxw%H|8 zjck(iZ2S$)fH#^EW#5Pk1C70zPZ}C&N0SB})(j(=*0N&>^%z;Df%2M~Fe?J(CJdb> z^pvLMD4xpd8s+lIj4?*h9izMZ`$nU?hllqK?T_y7>mMD8!VP_x=rYn0;ERA8QX}?F}4#mdw?CNk&K>hrk8PcY>Cn(K#ulP$jIBi18DZCpS|3=2 zhY|K8jIeir5%xc@_(jI$@PiTS+-B?|`jZj!xem0iCTatUkVzJHSr`O%tRY%&amB)I z79yg@YDf`p1!0=m__s^MCg>w9vmy2PHG?se5e=fajbkEz40t~4as7kKCP!M$W;krI zfOWZXtz!NE(o>+rbFi&uV|(YUK7;LF7=6}beQwPtmusqB^UY)Y^jT;M@#=lJtk(SF z+6dorPCaLRWn0{^b+s6nAA~)XJ65yx80{E%Xa;&Y2#`j?@i*hZ@i232=LD1#B)G*k I0&aKz25xAoAOHXW diff --git a/offloading_binaries/Normal_memory/main.c b/offloading_binaries/Normal_memory/main.c deleted file mode 100644 index e30688b..0000000 --- a/offloading_binaries/Normal_memory/main.c +++ /dev/null @@ -1,100 +0,0 @@ -/* - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define ETH_P_IP 0x0800 /* Internet Protocol packet */ -#define ETH_ALEN 6 /* from */ -#define ETH_P_ALL 0x0003 - -#define MY_DEST_MAC0 0xba -#define MY_DEST_MAC1 0xf6 -#define MY_DEST_MAC2 0xb1 -#define MY_DEST_MAC3 0x71 -#define MY_DEST_MAC4 0x09 -#define MY_DEST_MAC5 0x64 - -#define DEFAULT_IF "wlan0" -#define BUF_SIZ 8192 - -int main(int argc, char *argv[]) -{ - struct iovec iov; - int sockfd; - struct ifreq if_idx; - struct ifreq if_mac; - int tx_len = 0; - char sendbuf[BUF_SIZ]; - struct ether_header *eh = (struct ether_header *) sendbuf; - struct iphdr *iph = (struct iphdr *) (sendbuf + sizeof(struct ether_header)); - struct sockaddr_ll socket_address; - char ifName[IFNAMSIZ]; - int i, j, ret, sendsize=1488, packet_num, offset = 0; - int fd; /* file descriptor for file to send */ - struct timeval t_start,t_end; - - struct sockaddr_in servaddr; - - if (argc > 1) - packet_num = atoi(argv[1])*sendsize; - else - packet_num = 166666*sendsize; - - sockfd = socket(AF_INET, SOCK_STREAM, 0); - - bzero(&servaddr,sizeof(servaddr)); - servaddr.sin_family = AF_INET; - servaddr.sin_addr.s_addr=inet_addr("128.111.68.220"); - servaddr.sin_port=htons(4444); - - - - fd = open("/data/local/tmp/bigfile"); - if (fd == -1) { - fprintf(stderr, "unable to open the file.\n"); - exit(1); - } - read(fd, sendbuf, 4096); - - gettimeofday(&t_start, NULL); - if (connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) < 0) - { - fprintf(stderr, "unable to connect the server.\n"); - exit(1); - } - while (offset < packet_num) - { - ret = send(sockfd, sendbuf, 4096, 0); - if (ret <= 0) - { - printf("send fail\n"); - usleep(100); - continue; - } - offset += ret; - } - close(sockfd); - gettimeofday(&t_end, NULL); - printf("%lf\n", (t_end.tv_sec-t_start.tv_sec)*1000.0+(t_end.tv_usec-t_start.tv_usec)/1000.0); - - close(fd); - - return 0; -} diff --git a/offloading_binaries/Normal_memory/normal_memory b/offloading_binaries/Normal_memory/normal_memory deleted file mode 100755 index 259244d26ec54a43b2203e825ea6f458e2cc1c73..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12772 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 b5J8+b;+~4GzVkJ5e|8g|Nn9p)Zt;Hr)i`%n diff --git a/offloading_binaries/Normal_udp/main.c b/offloading_binaries/Normal_udp/main.c deleted file mode 100644 index e226700..0000000 --- a/offloading_binaries/Normal_udp/main.c +++ /dev/null @@ -1,123 +0,0 @@ -/* - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define ETH_P_IP 0x0800 /* Internet Protocol packet */ -#define ETH_ALEN 6 /* from */ -#define ETH_P_ALL 0x0003 - -#define MY_DEST_MAC0 0xba -#define MY_DEST_MAC1 0xf6 -#define MY_DEST_MAC2 0xb1 -#define MY_DEST_MAC3 0x71 -#define MY_DEST_MAC4 0x09 -#define MY_DEST_MAC5 0x64 - -#define DEFAULT_IF "wlan0" -#define BUF_SIZ 8192 - -int main(int argc, char *argv[]) -{ - int slotLength = 10000; // in microseconds - int quota = 1000000000; // Bytes per slot, default 1GB/slot - int sentInSlot = 0, slot = 1; - double elapsedTime; - double packetPerSlot; - - struct iovec iov; - int sockfd, listenfd; - struct ifreq if_idx; - struct ifreq if_mac; - int tx_len = 0; - char sendbuf[BUF_SIZ]; - struct ether_header *eh = (struct ether_header *) sendbuf; - struct iphdr *iph = (struct iphdr *) (sendbuf + sizeof(struct ether_header)); - struct sockaddr_ll socket_address; - char ifName[IFNAMSIZ]; - int i, j, ret, sendsize=1458, packet_num, offset = 0, port; - int fd; /* file descriptor for file to send */ - struct sockaddr_in servaddr,cliaddr; - socklen_t clilen; - struct timeval t_start,t_end,t_now; - if (argc > 1) - packet_num = atoi(argv[1]); - else - packet_num = 166666*sendsize; - - if (argc > 2) - quota = atoi(argv[2]) / (1000000 / slotLength); - else - { - printf("Usage: UDPSender bytes rate"); - exit(1); - } - - // fix packet size problem - packetPerSlot = ceil(((double)quota) / sendsize); - slotLength = (int)(packetPerSlot * sendsize / quota * slotLength); - quota = (int)packetPerSlot * sendsize; - - sockfd=socket(AF_INET, SOCK_DGRAM, 0); - bzero(&servaddr,sizeof(servaddr)); - servaddr.sin_family = AF_INET; - servaddr.sin_addr.s_addr=inet_addr("128.111.68.220"); - servaddr.sin_port=htons(9876); - - gettimeofday(&t_start, NULL); - while (offset < packet_num) - { - if ((packet_num - offset) < quota) - { - quota = packet_num - offset; - } - while (sentInSlot < quota) - { - ret = sendto(sockfd, sendbuf, sendsize, 0, (struct sockaddr *)&servaddr, sizeof(servaddr)); - if (ret < sendsize) - { - printf("send fail\n"); - usleep(100); - continue; - } - offset += ret; - sentInSlot = sentInSlot + ret; - } - gettimeofday(&t_now, NULL); - elapsedTime = (t_now.tv_sec-t_start.tv_sec)*1000000.0+(t_now.tv_usec-t_start.tv_usec); - //printf("sent %d, quota %d, packet_num %d, usleep %lf\n", offset, quota, packet_num, slotLength * slot - elapsedTime); - if (elapsedTime < slotLength * slot) - { - usleep((int)(slotLength * slot - elapsedTime)); - } - sentInSlot = 0; - slot++; - - } - close(sockfd); - gettimeofday(&t_end, NULL); - printf("%lf\n", (t_end.tv_sec-t_start.tv_sec)*1000.0+(t_end.tv_usec-t_start.tv_usec)/1000.0); - - close(fd); - - return 0; -} diff --git a/offloading_binaries/Normal_udp/main.o b/offloading_binaries/Normal_udp/main.o deleted file mode 100644 index cefe867241b3ca9cabf6c7809d48385a71486a5b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3604 zcmb7HUx-vy82|3v85`Y2CmnHhCcEaYji$rhX|&A>W?jvV)iD1+P_*8exvPWokD0r% z8$z-M3ME4MU=i*>J%somA`www;6sFg4?bAz!_I6stb8!o2Op&E_uV;X=6ZEYkBqdS0}_RR!|ewAx?vF67<(m%0Ps@4CQoBJzD9hlRfNj+j8?U}ScR@LdK$Bqwn zPI&ADJ$5KntEU3UD-^NWE^?~-;X@5I{V?ZTLnP$TSN7EENy#;Eu_qw+h&7+f&OLSL zfjv?_wRXtKiR8W%{KH4fr&#B>9`GS_yB{+i&Wn3Fg}9u&;e%_*b>w^z+l((%n?X!7 zEKi}{$3ApGIkBIvrj^9oYzU5p z6l%(%TEx~+6Q7nrO(HmNd+RuJ=UeMKuXotb@HxB^u_rb){e|IE`g3ZfpTd2q&G>;S z^a*vXcOqZ(z=>fHwH<^nu0Q)&03Y8a?ypZ)#PkGwY0w>HU43Gj?@rjo`93n2@!p)9 z`&P!HdvcfczN0N`-M?wvH6QYF_l3{5JgeOIZp0?fj3Y}m&#Sa|+huQR9(xZv%d+Q#Oo?JZX=9;LR|^#88yZ!UZD)z;msqaJ$?tGiG1Z$EV9o%Ewd0o0dsd{gAg z=ap;Jd3~s%pZxw-=vjO~e){aCO93?CLm#EKEuo;F=*&8z!?-AZ{EmGP@2Ax1)K~Ij zG(Rc_s>UI6t9D@fo_%I9YgV-MxMfzgieZ`5o9K)8_V&iN^u-eiou~>8ZN$jsVXr4Y zvdA&Jb6{Yr7Tfvyf%RH4{-T!9dy{%!;sq^Mu9y`wZyHr|J@s#Zu3;MK94Q*6fzA7O z&;ox@S*R@ahn3~Z3bjjFsjTv?UO@5cc)>E#K&#Tk!*T|DamyUDD4sPegW~CGmEx6B zlVnPTf?0&DShCDG0@_ryjLZ>=_wU^uH!Q1?OOGNoc=rzXciK;X&$;F5eP3}R6@T1A zB^2K^R0oeuCA>zip;AlHSyi$7IhUM$ z^m+Jp4}ZhM-|_Gx9zN#bCp`R&;8}#W6d8Z&k)QMMFFgFbhhO&aA3Xd=5C7T2Z+Q4G z9zN~iR4{VIc!s*Olq+sAvf0Y8Q5-{Ea%c%B`S|vRT{14O|wjye5q<8=L`5naTsR>`f(AWi;2PlyBU|@->w1& z8F8TAX6(XyBi4^GK1p;|@C%I4yDIoiA-~Ot563-$Q6Kn9qN9wf5C>y~D2OW-jpBYV zK1DRfxSHs5#;1wCWYmc6FhW0!E68!`jEEyE_!#3d#3lGe#xT)!!EZ4xM?8#(D~LCh z?Is!55ba`w{W2r$f5Zs;R|KD8M4opT;in7do#WORv40S#LbgZXet`!CqU?_}kTPx& zwQhP6bG}=0Abe*aRQ#`kDCIDs%Xp!=H~diZe%9l+sYh^>&lzW3ws?VcdGI^J`v0e= zLx=aEea>Ke2gRI0#>ejv>#;tMyU<(LoH~EAjDP(Cokje$`u-=c6(7G_h^_3_bH9CT yiw9cP%7OW7uxIc@45`N`b70X0=xJE!z#P}Y$ph_nYAkC4O4m^I-+3a2wD&KA;Id)> diff --git a/offloading_binaries/Normal_udp/normal_udp b/offloading_binaries/Normal_udp/normal_udp deleted file mode 100755 index efdea1a017f3b44d2d95b9f20915089cbac8a1a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 51092 zcmeEv3w%`7o&UM_PM(A?AwiLs6B3@1$s`0siW(qbAOR*15S2O!$>bp+iOEEQVhw~> zRTLDhwZRNNT5G9|)^6PvyRlm9U)e5g?XKI>b{=M>NVjyQyVP3wf4}G4J987T+wSha zpZ|V74xIU&-{btw@BGg1Jnp%7ZthxEzFgBZVSNlSQxNM;6ru>QOqD1Cf-n+8OX~&fnPF zn%~mgy2;;hK~++vMIDRGXbS-(K4AoY`3O9B1b)Q`eBKCr$q0PK2pn#TeOUk67^dvG zaRgpF0&gVlRYa%w?fKRb`0c|%pRwUCM#FZV{brb({PF(cJ0}_-gCxJ4B;D5NO`) zZ)>Qp-74BUnp*=6LYC?Dx7G*RM0;1DQ*?E<`2FpouBENhFMR&`+CVKT*x1?W>kQO( zpfbpcj@o8&eT}VMzO}7enp^9A%lQRu_1&U&V;clF`#0CMZ#9kE=x=Op_0_fbYg@b8 zO%E|$1!FeLrRV*qL-L73n1)=edHJgg=3s!g<~QK$^J<(ku<<$Gf(^Y z$wKO0qwLsb!X6XuG~r$o-fP1BCOl}uJ`)B__z2)QH26tEH1Gw$OJMkmgqSRj62jm? zLKyujAsX^JAsTRu5REua2!r1uL?hlNg!4`i!jU0DH0m8fIQJwW8g`lx^`9ZcM0b`D z4LwH)$A3r&$2vlJLyl1YPp5%7pSI=SvE@(L@^9Jl$87mmZTX|N{0p}H5nKLATfUEZ;f*F2=lv?V z=cQ!N`TQ{8$qj@3L!vbASLGyYZmF|>D9bf!s04h& z)Az2^GiqoNc$%~C-8APYDU%GoL);TFATON3XqKle^33`3?>UZ_Ma15hPG(^eJbwQC z`L~eXMmm8MLV|2K4SLfA>$*QA#QmZE^XE^UD-~ir_#W7m2Ai@^tcvIh%OYu>rIEA3 z7_#!`oW@Y{{QjX_*yI4DZNkI)M-6F!<4t@f;Et&YC_L{$_a`BRH_4m1bK3D1K=h6siOXzwI33VCs=$TM+h+qC|n2Mi-LX@njf zdiIRalWfzo5qd;%FkGB~b~z^wt<%JNXj9mMIt=)$(!|+Tr^F+h|sO1GEt~voBA;t|O++^dCSAi9KU>6m`-6tOL{YGe-;K{y7erdf4bcaV$frBg@_JG36e! z)o1BDZR%ou-S7+hg?=0lTQtlUoZIO0NoN0a!>8=WcF0=3ooVy!dYf-g+I(U6ZNWwC zqi>I4zOS|OM)>v}n?Ad5C)>-Q9h|?YZyWTTwDByzf7e=aDEQ;?h z4!R&KDxw~UYJ;wjaMmu-Ton;q1EdPi0LDVi63qMIDMCD|i;OVDQ#110!kJ^*(8o(c z8rqV9HjRZ{LIk6f)jUgGy6DM1jQnBbA4fi0s|sfqEOkxQKu7*C@{c3WIGH+iAR~Kh zFylAp&*M^LLsW>GB~!3A3$X~v$_M8j8xzzt(PNND8!mTkj8J~A&blo*Z&cSpujpFv z>z%qd#kT$a{P|P^YyNAP&k~DYI{AP=3_BNxs7KGph7NH`FUW~_AhR7l@AbmRq6lNl zqlv+T8T#Nu8Lz%^CgXcZThaa}R|dmR-53Z7um5?>2|rCJ-Wk$eu8`r$4hbgjoDudZc8wM#H&UkgUFFS$3Y(Z8ZSBAnrfu4P7z`IsB$n{-zP*3@W(He3%m zt+*uO3UvV&-x~XaV7M@0KlZ33YU9PGK=E-N$Tn|LB_5Eqq;0~+<8zUKM!EnJ?uJ7VhmTO1EHMsFd8NfZ0w*Szn z2Y+Z3SBD%Ewg*w~VbuGyqc{}4ytq1oZSON_#Rut^H?m-}%T*uoID+8}y(e6dwM*KV zR$Q;>h>;9Ok6fo|djaIQW;2h|fv7e=C!$@Ft)uO_=3O@SF!o^R^Dz4y*D|SAJYbzk zMNDuUYq|((EN_Scu3Ok`2Qz_>fAWn1u16Dk;7`p7|7UE^p`5ntAnMp&i2MTf$z55y zqGK-Ej(86;MozLm=*@s$#+rutJp*$^hPHfv*jV>~hI%yp((SARHhbt}js=ZztCa<# zh46v!V*PgpqlaMs$I0jwPQ*dY63RUYxgOU*_`4awa4r0yrw7C5i^h&U@0gpJo|!!s z`f*iJ7$t7imA(pl5XMx-%h6tx*IfI<7LWBa9_=)}A_H-W_%q|(vNik7f$#>7P0S%j zUWU(HJI2OfHrLRN5$7xDBlewvK1EFE7;9@#XFJ+_elQqKI(Ba~d*!51&W)3tX`(12 zP0Y(^!=)z2q*0R{x_83M;d>Xp64us9A7;S+=9LmtN>$0TLo`&5=k%uUc5 z_J`r43D6_Qq|xvIWivR=FmJ?k-IcXHHWsOq_%)Yqm-_!ytZk67RuVEo*&&S4Fz5I( z)X(``s|-eS3U`I4F6s^IxxsLD<*u-6!>+KXrw`My-(3q^)@gq%ellW|@8lSn{RGzB zjaW zFy`0Pgvwxe`pvt-i5syl76ikOU(*}jksS=r`R+jYXXp#g`{{rHw3b3!?xCmSNAUHvLZNIeF)EzzvTa4Ep2>%OgcZfsp zP+p*3wu9F#ut~Nx&4W1{Hfxw8ao+Hrz?lc?U8=#)$vF2p2bzX{LEmI1pE>jnX;`;O zn+sZwMf+Dpdl0lJ4dHo}Lp9t9cBP1^pF$b0m+ zD2Cj+Fy@sFX&6G#p}ZVcK-ZA>Q6&_oVg$S0rU&YBMze27r{L^n?k#D zaTX**|GRAWBwIeqmbZM>Js&-b)P!^v*9lj`KZd9OU4b@nZ>@V5N1zk?7woT``y%=9 z8|&em$m=PmXXj7~{5c0UzBq{MN9af!?0=U!(gy27$6iKEvFzZ!p#&Fo92)u({2;vE z2;w94G3k?shOqCCLZ1PB38iA^5b85<{E0SIMIB;Sq+IO$2KF;wN56jS0L!Cp(1yyz z!67efU_Vlp`@|QAiXP6fsYN_jfgZO!Z#jr_JFGvDIWBfa3QStENgJ2GGvYC6PSBj#-%SS1 zS^Uz;as&Np+AYL`m%>jP`;7i1Wa8R^7zk_9j$pXhd2r|;+g0O5tccVfe1J0?&%vQA z&o20o{qfKc_oWW_dM?T*qy1;#=OjSxtrLaP@h)^YVDC9xBcDO6J3`wdX+8Ug#_xw8 zQI}prAAaZL`@iH_=Dx@napWZN;qbAO7!T3pfqjwNzebsRPbRnTgFk}dQuOmJ(*NtC zsWrjOlp6RSeeSH;omuQTG!A2XLMg^V7W!@!?49BcMpIGl5ZdEJduXQv^i-E>hpX_= z5XW9Q&RWC(>e#y9k^D)QP7hL8S38+-O1wmXhKaej5P*6 zxgN14CNQ>X@8hsHP3(&x$lhZgu#d@m|CegKm5BXA?2|L-lSQ5bL-bj(XZw)VKlIO5 z_zSWAvHqIUs{AB8p=hXJ`VjROqwdS4ue?#LnG>u&OmxNjkZni*rP43!Ae#u=5zEqc z`iW=`P?d7c3o;R?$AHe)KSWXQ~Fd ztt^8eYclPjofyZ!H4SxUg6`lv{M-BYV?I5FL3|26I)!!e6y~5)m>^D# zk$S5h#Qc!SIfORpT2Dy04h=b+)VTw5E@A+>sFRTGA-tU99PLW;?89{}`W*2EJz*?> zhy}za<_8DXxc`a`0{trOa3WUF4}a2zL7WSlHaJ{4L+Tt++44)+V%f3C^T3b;*S%*J z=l!bKvqO#vt%qav=*jyKdmBQGuV*n%k0RM&-^tN6l)LZb`eL*d@wXmrWjs9sJMZE- z5c-qzTZ$KFGVm+MaTbQT8n66Q}18);Gw2ZpBA}r#Ry9{8+{n z*02dI_hsl$0KAX!x&5V+oOAScjAz6_F7B5&YIa1#{;G&@Juswsv1as$NS15g(D)jx z8|+W)e+>`L??9Wp|L<{T_xG67aqc2+U<|%773ac}LDO-TeBNWovPSLhknRdbC%OI} zYs5o{?e)1Pp11{B2)BTlQM&%h7V?Fc@c@OpdWDjiE&oEJAycuTojJ8r&9^@Pzv@iHDe9;+w=4-+5 zJ)o_3?ZUd&8Fj+9TxqOrUYI!|16aB$`5bBd_QXkqz`vvM`nX4d6$T9gT=z*Uj zpJRJu|E!Pdi(idiX141}*prMnWWQ;iUQ7{H(L&OK!SMRQT@feNCx^H(TnU;MygQPr z?G8By_hFy1Z)ghR9x*b?BkPjw)X~ngLF!X$C(bhC?Fc?J^jkSrZVa=2s~wjhk2NSN zg2AWTIJLL3 z;`k-hn+`u)zW*t3-m9c7x~ut-o7hqP0Jy=>3%4r59rkG3R>RKag`hZatrR5vd2M4~h1_ zfVSx4F?OM20oIjlhPxOOFc z5qcc1SKzP8=wax}?MA(&xNnBUeP~k6PM(QQaAIxzJjU`EthGi@@Bqf$gAV~uKzSE< z5171z*snWk5I;Te;r@ps+Wuf>0`y>Q&HOC%usjCy-NMCv?pW?iQZ?syqa4GOD|Pm~ z1Ak7?ojAL3?i!N!GSs|=Gr)ZjjPLhQ=9J<3F8XNK5b8yr-VogeJp$v1`%eTt#`Y^x z=W$QZI|ro9`e?UV|LODRq2>ne8B#~1UfA`Xv$zrdcu0;L^au8x;-@``nLQcXLpzJn z9{AURm^HKqE;Y36^ygTd!%Q#=c7&)4v7G8e+mc+tY^N(Ycgf}ZB0I9ThwAc|M0VHq z!iQDZ!#$Yga6Ufn4=BgE2={y83e3ZZ5!%A`;SA)x#b_V>gc!b?w42N}V(d$Mi7%iJ z;IAV33Vk)TN%dKxXJ^O>x|=@69)f#s>Q06~yahe))S_%p`#zi<2g5g04}7+}c2CGr zvplkMac_uibhu!r>xL|_GUf72a{`p2b$1- zPT1===XAuN^c~{jy?vn3XV_D}_gUoW$Gtc!X+wS~*W2EgP8Ks+kF;WFmEz+$>+mQ|+9Y%T% z>1CuJB88EDd&blef)1o?qynVHNEJx6NVg(wM>>FX80k5rmyv#m6h``ONb1nG4}7Q{ zKst={+`xx&U$;F78q#5;=Yo@3HmFry~pX~{g?>?=P0yC^r*6nH|PsxgExNdy~e%KGaY~yIuF&cTyrKz&KY2z4|Bf|1;!A`c<;?Z`}e*^k+ z&=W*i?stSM6i#yKksGFBKP{Zm^KLz&&Dw!ALzTt6dTIc&nC~V$2YXnC^U)UWpIqL^ zG1Py?IX3bJ>|`0%(TXz9Lv}p%qit5*mLIpiJI2LZI&o)LlmpC20I4j>L z=e;ECGjLz!z2Cv+?fJbp=id>c9>mNL>w6vaucI!mS=3npSTI&(*q*Q2jPAJ#wFp2=o=7*ptX*xVCw znr$+s?+9~_{y&h%`G%Cw_?Y(7R_>En|8dlh>)Z(!^8xnF(W4w6(76^e(_xQX129LO z+4Is#j@fdIdksFtI)!V=eGwhw+u_1~9dki4pn+IR!*x!Q=f^{%aUC=UHd)ttME*zzr(e0Yrx;>>cE4nqM&eryP%-JJ%53_u+Sp}pHOu*)Z(dD zA*Qu7ApG$R=X03l2gFY1lmEi}q*Leb8a#jgu3W%@fq|YP!msH)$4z|vd%(Y}_l!SH z{?k3%Bpm2DDB&|bX8^y}@qCZ-UsZX+uUxyJ=ZJ|9O889AoZl$^Q9!ZN(R0GYJ!ceN z4R~bq^F3L=h1}PYdpsr;J@wxJQH`Gr9Teh9*lT;jr#rRBgo_au6PTFC%A_tf76P4a3TO4=SQLj3Fl+- zH>J3z(#As%>s$r*o$sShcdNYpy9JH=pGxAorArsOW?r{??JQT3d%OHt-F=S)U832m#JMT9Q8gKFyo% zu;ey?ZkKxz_#8{FGTmXd=^fBt2YosECUIB7ZpR*DFIu%S{kTJ~OdlWf-4Q$}aK`u; z-z`rsHBM{8e8(|j?_0T2K7(cnY1f$cfuaWUgNW{q$K@m-8iD9 z!=Y>&=O<0XWAzy3j#r_i20Z$NcrGHJdhI?Ty&QDDigQD`|J)o`k)Q z&l-25R%1|0cUk)0hU1DYeH+pp7JYo4nsb(+0h$}4hT zg%@6IBwE+j+R)sXU)!-6W2|{&K|@z-U8lQ>$}suroCb`4PuB81p8WiLrhJd?&hij1 z0O~0RvCz0=2RZoYI;^<`g>`{D!~etfHT(VkE9VvE)i=Zq45Y)r@1fyy=NG^nX9X&0gWP3g)CvDD1B1UNF{<#Vg7uT@gS$ge1h*uq^vU zRX`=OCiX2fP+n>#9Ut%ur4D?_KmbizC%Ht}ZG`5x!lX)2;+UBOO__vB)PF?*n-Yj4 zs|+yfgT9i*Ww*S{@c%0ff<8Q*VSE{*v`_^+{UdFG3lLRStCgKbn%PzJ@@2%qEF`S+3asJC;0fJZ_V+X;G0|PTDt1}e@-!M4I7%f`BtQkwzfci zS7%48wCIvA!^y)s;jZK25XbZC+BR=)YjvX{c*tb9n*`%E@`E(av3FzVh+>S#v$*Mp^^>OW%%md*&FOZWw~G?eWaX&o3`8^UU$&RbG+r zVIkv>Vx`f0m+Fi^3b(QQu9ce#iV7Qz+gHvmD$IwBBhl@qs5>#3ocr>sD+*<0D-&1k z&M#!;v*ym4TZj%TC@=L?uG+L}uF*lSn?0PkBeARnjVZeYb2AtMl^8 zJf$&m#ttcfLYwpQ^I@c?$x}YZQ?|RD#^)OYpK%*M)mE;uTECjTLrrivt<>F#W&MoQ z8&)>XDV&pU3<@_|`S6_$nHBhF{Nm1)4Fw;p%3m?JkrmzL%{RuvQw?T7G62fZJ@deH ztnijG;8NX>Q#5g9ViPPWCN2udW5nbatnidQzPhP5|Caos zD+=;&DO**BC|Q6Y0A%MSzR@M&YA+_xz99kj9s=8JW!ZO(-CBe0z&1~NNacX^X$U{?6LrsX4wICk(KJ2CF()IYUm#J<(O zA%?0A9z^jm-0tLT^-mv*M(pK`F24Fdy;uD&PSSXJSzc#Xdplk;_HolJCI}ddnUYsE z#&MyIYi=s*U$rW~%;=IsSvSrJcfnCa+HXZert$D+-0n5TFEE_y-Ns^$<%06Jf4(OF zP*c8V6K5L@ah8wrDl#xeRyVJ@<=fx(tZB^iqh5G=ESaP{(?@yI+ur60(N!hah=73KmOW{&E_?e zz#)rkah0pkU5E=QkI;Jl2FB|0^3I_Jk*CqzD*ty3A9k_x|JZU~3_G-R1QxC4Zt{PN z<%^`{Phqb?tGR{z-(oorz#Q5w*bdQZZa4q`w_FX-dTIIZVL7elhV8#&`Cny#zKD}O zhv=4u-wDID1vqDsuQi4BCox(B+}{5_1yVV9C{GxUq+e6mk$`te3Vkb1pB>Z4Nbq%S z5sn$tkk!*LUK}%d%wZ%a?Li3Yn<+QzR#Nn&H8{f7`%#Z$b}uPfav#`<4oBWgK$Dty zT9tGhRcc9><2xZ~I*yJLlYRzEl9K)ab;(JYkVz5xDIAJB=HCr@l)j3m+)2}9=>$k= zN%w%QC%uVsM$%Vgx$nXi|nDG##Ux6MGlROn*? z9II}FP%5+fkBP5d0hOb&9P3#)PZtR&*IDBC)FWFlk^8<)A{9KSB`~wqnwWBOJRwU-NYn++Oo7Uz*HA(vWy_j=!*W7D z!#@5Te*Z5`hRlPiKvA1|kR)uL+NYl!uKvl}u;3G|rC6U6@c5TgM z$U0K~9WBtjG@>N!wuW}0RnYL#lmhgDR!NJFkNYyqR?!r%Htq=`)imHZPRox{)mm0N zszj?@8LO#|8qJ#OWlcigNR|FskTJBxr9ccl;Vgp5NKP0J2aR#GgLTOm2m3}Z2SuOJ z3nltuI9#8#56sm0sQl6&;me`Veh!2rzN}Rw{SseV(i_O@Vw6KK`4Lzt3t4P=16Y_g zsPa1I5wo`wl(P7!WPRmFG1+ouvy@%MJVp;AMqmAN$RvM+YLoR!H$ci~sk>Uq|B)kM zttn3-eO(H^$CpBbF>4wt+XVcwZLmS%6WRkE!kA6g#K7iuVa#DxjBm%(Y?LtA^+POC z0v{M9jP%PmsElQ-b z^iRRKoTXg7}=1^cA+Ny5NlmU^f(-&x z_Y~A+pQTx^vb%o-LDjxj*@7&Prryl>d5wPgG|(B+8Q-T?{Xol10I>`@X0bLsLE3Qu zVzaYw$M6Z15xGscPk9Y6AH=3<75agCvvIjc!1*N_(J48VY;f+2pwS6?BuzRY_q0j- zf<<$P*>j+ga^i{#)S_*(?sjT@)6tqaw{>)a$m};@O>PUMZ$|os(qIH$hlv3Yx{z}B z;%hh3hZYy3JGT#nLr59W0fUXeab4u`z9|z3iSKLPoa6A#7zZaA_f;^4EZ)Y_`ff(4 z{A!SXgX%pikV*W2-~9zXd^=H0xH&Sc8?Rd5!zkf7AO-o|@7XQ${OS)>y+1B)oD{2sYqqFxk7eA#{0P z_)X<2ozF1jo(96m+-M4+yJw#RErPTl3)0iHNzj{ZshUwFoAEhVGVdYuAtc$1ZxHt(qtBD0;E%wkdk+WIM9!Az_#knPZJ zP))u{)-nSIPiaSU^+g)H*EsM<_mpjPtA(GtW2OuIe}{(o575KcX}l1@ zz0x~Dnq2}0dpQS=r!*(1a?s3PHVz!*uI5wQ;4jCIrXg$H>eu>e*jJp>aYvVv`Zu6Y zEV`VX@u>8R^%Q{CHwHIPRkuDWyY(L-s=DmVm*wY_3eq7 z`-U{vgX-tWD0@>zSp{(!XKzYReulV=(qpnYUjd%SXBj>#hef64L9NF7S`|DD;6=Sl zVVeFkS+DibgVuK|uD_IQ<(8kzl10F;+=+VFwV5cay7%9tQI%lk z?gx|ItAokzr6(Q%ZP+08nwAzyp-RM7ED+(NtD3-GrC7s;a-qm&-E?ZBWLwdTLbLg_ z1}6cr=!XmlO@9e_>k$sE?-wYbTB^xCNh6F^9@KS?^TWWeJ^~#KvhOSH@LYxEz&t+v zF~YkQSd(5xImeH!M?t#_Q5hOG7Uiq<#DX;$et!75Kv zDeG{Y-~v7xVZZpc+7{vX#R{PMfxvVx9$aA?r)gCT#7gDI3g%@r$|>YP3tG4f#yFl~ z3$2G@w7z{-b=u#ux~rgHweVYP;k`iT$`*c`)oGQgeMi~87s-?D3`mXiFjn?;jt1`#CtnA-dnQYs;Y+EME&5><;moB*$==2k496j=%Hg3^97)*MO zj6>^D9;~JK%BWISV{`jML;<&=Rpe6YoN~D|55)U?VdB1flsqVr@sIhKX1$=0C&QUedQ9 z6s`h3Wg_wK=qm6_=U;{H*8fg_0PJ$GbG^_t2eES4s?f2NTS?6$a_hmGh-;c04U7P?`u&+cU7WMdr?e>&E<1jB4x?t-bRF`Y_(((R%!_ck##)}nIo*`fy| zze?_ZS4mI6=D7WLWN;-U2-r_&AquJm*Eg%@AM8jXPYwlpFh`t)ggFGG1+xJ02n{ z(bR6GQ9n>(`Zjlw*~$YWjVK3$Ha}xBt}#o@t}z*6QK^p5I3<_-J`g!|YJEAEm}3{5 z-+}TDJR`@h_MY54Byfq9OVeq&J(~_Zj}I4e&a+LIm2ioDX%&lntnS}rb(B}tJrJwz z-(+>ySu42qzO1e(R^3@y-Dg?d5nFZGRdDIKusR-EX&=byD6gv1F11?sfvoPCSapAp z)x8<3?n7DKX;#NaBdyjIeoS?r`U2O==efvPPf}`qW3f|F%lO-z=0m&^D+bCLTz z(W9_S`zeRSmFO(B%>9hZ+^ayvGpOVpD%l4# zr&(x2oJWH|#LP$VH42x-Q~woev=1otFD$ejrL{j0or-%>i+RGLeaKTSnCtL(Gx2;*VpmaElNVCo0)Ay+8U`|o zuEYt&d|WW&luRmZ&mi2;*%;P_|6?9(9L z0m)n^D!7+3fmMW8ifM- zaJplLBGOb^C9Zr2MFVKbVK{xhbb3G@cDT{J`O@oM60ZTiM7sSpji-k6`z(5Pi*)6q z6ql~;miYI8=T3qNhtSe(&@G*VqlVm>CUL(aa^{|1O&aVsN4;3M9)u=Xg*jOJf^_%w zm>E?4eHsrcWAz`B_1y<{?lzQq7WMI5Mb&5E5X2<%w*b`7W$h?v=5YscoRdbeR3#ko zF#EUoN*It?9{uV~JdY|#@q*83$B6Kdg#nxCWAR#)HCLmFJ-KDwvop#kQu1U zA3|2!#BNgL_^r96=fu}s#c3{K({XLK^q;~9&{R?1$lMmfBU9m>=6_5=H;LB zJl$XRRKQozPKW51hTn;A?H8DcX!(91<&3W1qn&yV=N{aO_%(q2hNC`>40*#*pMfRY zy31(4wW!Z-Cd0b5sOLQa^e?@&sLyXlDS2N|FXvcL_XYK;bOepOFQ~6gK_{yFg8I7o z$gBH;dJRv1)qO#|u@!lBUr^ut6!Pl6pnlsM$eZ^C^;MSviQgC0S1*I!QCa$W7M8cv z^czW1_XYKvm{<1&^$pCc`-1wXnOFA(^_!XJeL;OAp0Str1@(H;)V)64Pb%&UlJpp| z>HMp9Rn}c!mF(o;sQ`Mup5#yA<2#jNlAJ6HQ8&@&=Pq$HvM(zO-(>Ga>w^9 zYp+K&V&}_i#c$B==09muZ8A@p{R!L(FK0I1OorDzoAl zK~u#;l2(Nko;t394w;Q92%sS^LiR><=*z=ouf3>j)@)VRPi%FSfYyuh@2m0*1r-mx zT%NHLT!xDa-Df$}5fIm+Q86j2Ei?KcOjG7cVKiFIc*m^qI!Tglow3by^G!C|ag)|& zqkU-7dTq3FtReK)=WMiXChaS6+N?p)*eWsg(KH0(KR$u1^|L0eZyH9Ri|0Ao)iS~# zL%*rGzFNlh-vOU3H~rUYoDSXteuW%{#Tv&OhR9@R9^ya-4{w~Q;IBY^y{zx_Leyvd zTuSR}XMHmGZ;<+(*yqfV_1`4xF91H-1%({B@p1H3s`~XL(5zorX?<_TRMksWB{5YE zQk5ULGQCln-c8k>3sld*xY1u)2rI20X=!~Q#Z-4o)n7!>S^TZmm!u=tvB=-Ci1qs| ztxtxAY}jXHk?*rewN)gKXRZ3PoQ)Y4865Z-Tm>?gK}!Z__YAg9z{fIUX3>-ch$LGgi4JYlC?XoKa)J&j@5U8UvZH4g*SW7L1Mr+!NOe#&!7ArFIK^Zd!*3c~HIBmvdWMw3Pg%yps z63(Oy7A`1Gu&f$qs~w)bWIDWiDW1`_893ezl=9T$l5M#xA!aj{C?K&WPb{(_lgyF{ zEJ-I8kN?~fY20M9Ou~vx9gdxXQmld~t`aYwE=_mYD;`!nJ6=DFPc@6f0Yr1+HW1DI z><&%K&G1KDt zX2VSM%2Dvd*hDsMfwBxIq$)$&LdC`zu3NkIvUsl#t6@=$cVWL?ZEG$SUK5i=^bFH- zt<6p}r#My+hbp%I18a$`4}dOZ4;Ey~9xO3ihmODYG7g$$_WD+2E|S5v+)h-a>)ayV zJ{BxhG7QurXrk>ah8O$TX~&!<*t-9X4@jJ0zD?T5v zZ&z6{S+4`vR zm$)oGPgkD4p#Fb|@vZXj{n`eVlBC zC2NRot=}$PaS_dxmb50;*<~wZvhApA8J-kEO|g9Z@frxf4Rguis52v|pup_%xDX8mzUA1Vexnv6_)hmpbvgi3;PnXM*hQdELu z1SA?qz(?zbcVij^a;0nq!6KPmOF%7&2#<=wN&U?8IV4T2C7>FM1-s;jPw4Z3LYUG5 zutjCN0eV%IfWs3y%p&3~kWL^aiB3^E?b-?bM1F|`C6)~9;*~l`1lwe`n&2)ZhiD(z z*3Vpz#O%%?-+$cBDqsufb+ z&kU8YqvInmuBVcEc>aqK*kZ~u(k+9sK%)-QEM1reEH;arLqcg6YRQ%6uCur`;Ov)N zFM(=Itiz9k^p4`j%f`Ce0abkZ+YkqicUuan!6WPN67bM}cm$K;RRRQW%WSO1IJY9s zjdjrx2*04p5*(A+SWBtueZ?g>i!{7y3Y?Y#6$BL0MSGfEINkvi4oTrk0#kUrT{u1m z#;dNf3sl8AiN;LC#R-C&082cwYYDK~CY7K`Q7u=-%T&b6RI|)XDOf?E%EUZW1X8Kw zdc6SEDr;#Z=_aIM@k|Z89|0o>x{;LInA@Wm1bbr)OI^HVg}r1&f4pRcy=2_E_d-`t zsU~k^}q@0ifUV<|*0p`vs2En-)gSihCg8;L{MO3~c1u6(El@2O}5f5dtAy^5m>TSQkGU>Nh7c_1OrIJy+DD3QlNrB$!@UA#=StUID5PY z@;boNSF!E|nE4`-6ge8RIp)_~l$a??-AHZiDr@z;3uv(|mP-IJzzrIsW zs-|ZKkg$Ispw}@q-_^eezVS*o#U}P1w1pkSRi1L}7Ul`*RV>0U++|f^7j8kJK52oM zZ5}Th>#YH(S6Mdyq{_~OvN=cyJ9`~=wE{X4u;*HU5JHw>GNgc8MNBp=i$xs8%}+Us zRU@Gii^QI(k)+tBozHs8CuD?|;BCo`^~Frs%ctF-gCJjKV^cQnjR`hT*3~{@?Yht>c;AJ7f7=lY>HfGFTp!X^+!TmBD ztA-A0lRfPvXh#}8;m!O7Z<3s3&h6}b#75r5OiNqMO>i5E)cIGE>LL~h*v?K zcd04}dM>CUE>K|?h*uF8sI&{jtDw$fstSU0GP{U|ZTB8`u9aIbg8l)I;(<&^}6vJ-atJ1nkf-^E(O<);X+0WdEl2J*J zCT*@JuxzgEkK0^nx4E)EZgZt&GbS(^Oh3_>;oUYUE2<)}EU1zed`?zdMQ{X(C9C?G z`=(+LSoTy&dtR45tRk>{SS9T#Ld{qb2rO4s^~YURWp`D4fp{Gzsi3MPcn8T49gcox zXe$1apXF7GDpG7@TctS-v-oi&Lv-HN&&*p$n%F=PvgpjHIyyfSn+~n6NDv*Ocv?TZ zBN^>Zz=LE!nWYP`17T}IvYD|f9;<8;%Hl8aOpvA7i%BRg309XTvsWa=QWK|GO%$ld zDeI~x;C&uiQIOlutV?kSJV-nPa0PJbO{54Z5u%-9Qa|$x>;jg0-2X9^ROTYfa;Yd$ znA?FLEIML(K)cJL)j*~m30`&dGt+{EZf*zQ?RH7G^p6KY8ChZJPZphckoQ)bm7t(T zQi>r?{VuUZj4dw9omzZJ7Qq!WHE~I1@ua!A2ewU3ouf_arxYvx(~>hGX_>-)DMvRj zG6*-IGZ9(=BBrv-)utH8dtR0FgmiTE-ExA0nYz0*)50 z)0K!ROEF7uWXGb1$T_5VXb^Lts2K-VNs`lKC{__jjYBLPCLa08Ujq!2+4BCgAxc z1gZfxsBAqzyUG$AM2gLEMEVqu;02^)>`8VF!JT%Dw-1TLAaCQv?* z4PUPW2uZ752(2|wM3DRV?nt*-rF?!iIMN-mBz>`KS&IIL(N>DAcl>{}4O3;Et z8>HiMv=Z9T4cbm6Laz)Sl1u5$#cu{7n363FsjOlNI6_S!( zg40MNU4n>_A1lTrV-ZTQjt$kjWm2rQh-n8U~5NECbM1wOE$j!odl|U0G|sTGZae{ z2bvO#;u9B(-GqdZK~Rr0yv7Zn)F=VdPf}=;A`$c;4KLFIN2;iw+EWrT77kRrF?5wyRcN$`|H~3{l37~c7JngLz|CJhxyj7tE?*Vty}J0FFI>) z^Vj?M%g<${)dllo`hzS?@cB^8?L0-JrEU3GPSf4#pRFCgt~Zfy0}yZCmei#89H_)2^Q^L>Ff z-`oPx>hGp<<(=w|+B&~)d8_r>tN-?sqB%@YS_-wFZ2JVoO^`eW$O*4+nMl@sd~k z&B;J5dkwD}^xx*gZ#vALS-WC&H6CQaJFfU`Hg{=TYd|*NUKOfQuYDD*U7LM)<;-n! zm7zXgEnk)AGfk>%Z-+@9*m)6h!Ntji42ijg@g~GfSzITr9@b-32qcCSgsObYR+sqJ zEcaDaFJ4*}D+O)7QhzP}5GVfHW^G4ZlW*CIYG0ssV~Za$G9*jZtX)#ROsZJB`uY{n zvb=Kfs%2DES-oQQbt8hLwz<>4%nE(H!nUp5*T6`;$Pki&B>ae1Ro7DA(lwQ=3H2_O z1FS@B#2;foU!$``OIvHBOMVTD(YA($PQ*iikteNOzNT{NGM}Hma3T9vUziNz3N?al>6#x z>zZJQ&)P7=>uB4?)(kRd!-*7!C8#^5)ihr9i$=aVh?6#mD@e z3Rm9djfmFfI%L>?SL1gWx6KRqfi|?X)dunqa94M>H3Ud#@46b{h+LqhGq1k6w#8o; zxEdYf%4@X#uPJopt?5J}H1iFuZF!wda7UgW5e;U8d~1GlYa`wR$v5SLLXkji-KMTeY}~;{g4;Vl`s9 zyj=G4vh~%mI@NqDBL;yZXMNkOBgeJsUi>)$&fv<@Duz5}K;Mm3fvY&j`#8yCc4@3r z6So>x%gfg+t`=&f$#B4=0SDCA25N`5a(P=voxffwM3uSMjchyX}5r2IFzEIw5<>DBd$KzIFbhNej zmbA3hZ4y|enmM!K*A2rabaR42)4 zq0rYLeXC|E>Hb(eV$tR*i;29wwl08asH3Af7DbzDJ2%N?lYg8TYo?sBDt)WhRQpz} z@|G`KwQP0uvJz_zjK6#Q&;NrH`N~f7o#JX#Z1gu`jk7irDrUGzz>>6Jc*t1uzOO{o zH+R-`G;eNhtwsC}U+R5ZngdPTd~hL`^Q<}Za>bD2{lYy!TyuN_AjiFffipJV*uYguMa%WrB&bft;^$qA9a{74 zel|))I3nP}Wyvbb$SlF2t{lF*kONkQBo`%gP^0iSaV6~9f-T?h==NfRs6y4;J79BS zPH3^EP|iVEW$>PQ{1Ky8tc7Nb*VVSPpqRhA9n&)Qm9-7n8(MlAT2*tcog&(0Mf38- zE6NeXa^RvXxm!e(sZ|Ysm^6tHby%mINukBOkTRLBs5ht^`l(%Rv#1Ha0*ZbfDF+QsF=W@t>u zofqA4V8hkYfIm0oQ!$O5w2Vva&xg%(g+|%lX>tF#qtHg_olIrJRCzx3p+%YpHh?;LpT^ws3HlV<#T?}Lv0a{`j^Cco03 zb_72S*R2+x^87nz>N8rF=ife4pLB`GkJvIL&cBbQK4T=#zmcXs>GE&2Ss3l3e*PFn zeNx0U6CV$#!9#OQ4uK`#5|d9Ab3rHW1k`XIaxLIC8_xFe@3X0oYJchII8J`I4d-cL zj}51N)U7__WP8#q6n|-s<$2PoK1zSwX2s|8zjl7Pg_`C0{I8wgVxcCV&;Q!__gbjQ z=kvdI{xP&)eMU)plie1cCh;Q{it>%Iyz(#G!{>$7CmH8U3MWa&@ul>KP2Voit@lro z|1fatRgRW?5q<-pKFQKw#WwtFU=UA6;9ByF@CzxsJl~FJ;rtQ0^|nOH{}{OS;zHv8 z4%~VzA#o@4S}z+UJ{7q2E#gVO~h+~TW=L2PJcX-gD?3} z?cZ8h^wovp(H}qQ{Yy9&0YxPMM{1uq>+gGdp7j6CVF!THNPR!@4 zN8mRCcW_e0hkPG!`u7BIwzmnm_4|dXz;6Ry4S%>y{%+vb{7QMA?%VyvcTw2=`$gb$ z&|kS`d7kpy@t1+y`}6OCcSF9|l>gZX{9WKLf*&yX{Nbb>*AZBJU0IFEPalC#0B(Jf8GY% zYm3L-Bk+fT*W36{0q?fqF95&ShQ9(lXv2R5+&&&o0Jrz|Dd5(J@puNf^(rRDLlWi! z&Zjs!m-g~ibk@6*$j49eVxOtVtpZ+b&aX1QfO~BCcHmwc{uJ;U8$Jm9qz(TWaO*?+ z!oWFyTjTfr5&RE;*G!7rn}T`9dOIlXnFic?{U-5ifm^S|BwhvFdU+)A4&c^H9*OgZ z-qs5piGKmO^^!*7{DHUiN<-q`25!9skT_q#ZGBwG{L2XZKY&|rB%pkJFQ~@k)FjMb z=nsxt@(Y2N+WfT=_yQYV1AM&=-wymq8~%CVAKGxf9@y^R?*VsW^38>qKrX-jydAxDikf0?s}IwT-w)Z*B$F z+&Z5ZvA){Yt+9MdTU+}^93u*Mee-Rd&2xR7o0{8w$a{PNUbm@>7xNhAf(y0_kIe1Y zV~w_34$Q|7e*g6O*F|m*xtlvXYTcgU*L(8HP;q$esE#V)M_%T2mw9wD471L?tU|a1 zvt1cXo)ACB?5aU^cuwefA~ zsBOpPzA#VD6&Kdjcea@_!dG&`>cy*8@a~)akln)M;ly?2YnI?je9iLZRm-Y<)r)Zp z!v}esSJ&Y@mRHn1FAjiK<7jhnW#!@3I%vr9kWo~ z#c4+HfMX(sI43dlILC}L>Nj`sJX1;47dGD>M-ZcNq;7M2BW*PWJG(Xt9ON~NI)8JE z=*0Ob4l{5V5>Pj`5M_bp&HlEA`r55HBErc^18zg2vAC;MA7~TpU4c%~)!E|5?XtR- zHe8(h{N{o4#?DUD<2dT20ct$Ns%EnofAL0cZnN3hLCbu&jkvMCVJ^k$>s3bHgy30E zeM78tSF?1BWSI;c0HE5=hWduWm{>zxs;jkrn1Yr#YZyb(;agQXY*v}ZfKuG(SFpvz zad;~$gqu|cH$El7f2)G3xpnm&kl-ybv;B4T!2P!l$8G!(Y@+hEli7{Km640vmOdZ; zz+`?uOrIp! zZ|eRDPE70Y5HWQRC&pxL9cK#KDE3~u;8=Fp0j^mV!FT<@S70fQ4fzJijZN#yBK00^7wfV z36Cd9xl$0BdXR9rAj|V|&x!OT5^2=;I=+}bLf-mV`rZeDmsnB`1ztzu`6Y3FsE_GQ zB%Y^}&d0`>YD^qJ%3yabnvpEIw;;pBYj3+g%56rX4ZJ+!c@z`Rw5-qnt>cVUA_k%; zI*4`(vLM(9TP=!>c7h_&EiAOK)GnpvvW;O2Q5*dNJN*HFLD0fa*uqaxu&}lB+?m{D zi27hMZ|=K!Gn1JOKcnD-S85guCv-QkM96qIb%Nb!V01PR)pHzuk>2;qApdK zk!r -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define ETH_P_IP 0x0800 /* Internet Protocol packet */ -#define ETH_ALEN 6 /* from */ -#define ETH_P_ALL 0x0003 - -#define MY_DEST_MAC0 0xba -#define MY_DEST_MAC1 0xf6 -#define MY_DEST_MAC2 0xb1 -#define MY_DEST_MAC3 0x71 -#define MY_DEST_MAC4 0x09 -#define MY_DEST_MAC5 0x64 - -#define DEFAULT_IF "wlan0" -#define BUF_SIZ 327680 - -int main(int argc, char *argv[]) -{ - int slotLength = 10000; // in microseconds - int quota = 1000000000; // Bytes per slot, default 1GB/slot - int sentInSlot = 0, slot = 1; - double elapsedTime; - double packetPerSlot; - - struct iovec iov; - int sockfd, listenfd; - struct ifreq if_idx; - struct ifreq if_mac; - int tx_len = 0; - char sendbuf[BUF_SIZ]; - struct ether_header *eh = (struct ether_header *) sendbuf; - struct iphdr *iph = (struct iphdr *) (sendbuf + sizeof(struct ether_header)); - struct sockaddr_ll socket_address; - char ifName[IFNAMSIZ]; - int i, j, ret, sendsize=58320, packet_num, offset = 0, port; - int fd; /* file descriptor for file to send */ - struct sockaddr_in servaddr,cliaddr; - socklen_t clilen; - struct timeval t_start,t_end,t_now; - if (argc > 1) - packet_num = atoi(argv[1]); - else - packet_num = 166666*sendsize; - - if (argc > 2) - quota = atoi(argv[2]) / (1000000 / slotLength); - else - { - printf("Usage: UDPSender bytes rate"); - exit(1); - } - - // fix packet size problem - packetPerSlot = ceil(((double)quota) / sendsize); - slotLength = (int)(packetPerSlot * sendsize / quota * slotLength); - quota = (int)packetPerSlot * sendsize; - - sockfd=socket(AF_INET, SOCK_DGRAM, 0); - bzero(&servaddr,sizeof(servaddr)); - servaddr.sin_family = AF_INET; - servaddr.sin_addr.s_addr=inet_addr("192.168.1.15"); - servaddr.sin_port=htons(9876); - - gettimeofday(&t_start, NULL); - while (offset < packet_num) - { - if ((packet_num - offset) < quota) - { - quota = packet_num - offset; - } - while (sentInSlot < quota) - { - ret = sendto(sockfd, sendbuf, sendsize, 0, (struct sockaddr *)&servaddr, sizeof(servaddr)); -// printf("%d, %d\n", ret, errno); - if (ret < sendsize) - { - printf("send fail\n"); - usleep(100); - continue; - } - offset += ret; - sentInSlot = sentInSlot + ret; - } - gettimeofday(&t_now, NULL); - elapsedTime = (t_now.tv_sec-t_start.tv_sec)*1000000.0+(t_now.tv_usec-t_start.tv_usec); - //printf("sent %d, quota %d, packet_num %d, usleep %lf\n", offset, quota, packet_num, slotLength * slot - elapsedTime); - if (elapsedTime < slotLength * slot) - { - usleep((int)(slotLength * slot - elapsedTime)); - } - sentInSlot = 0; - slot++; - - } - close(sockfd); - gettimeofday(&t_end, NULL); - printf("%lf\n", (t_end.tv_sec-t_start.tv_sec)*1000.0+(t_end.tv_usec-t_start.tv_usec)/1000.0); - - close(fd); - - return 0; -} diff --git a/offloading_binaries/Normal_udp_lo/main.o b/offloading_binaries/Normal_udp_lo/main.o deleted file mode 100644 index 297265b325b436e0bf6a1582efa9e4f25d9cfb4f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3608 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 diff --git a/offloading_binaries/Normal_udp_usb/Makefile b/offloading_binaries/Normal_udp_usb/Makefile deleted file mode 100644 index 87d82c4..0000000 --- a/offloading_binaries/Normal_udp_usb/Makefile +++ /dev/null @@ -1,21 +0,0 @@ -CC = arm-linux-androideabi-gcc -#CC = gcc -CFLAGS = -pie -fPIE -lm -TARGET = normal_udp_usb - -OBJS = $(patsubst %.c, %.o, $(wildcard *.c)) -HEADERS = $(wildcard *.h) - -all: $(TARGET) - -%.o: %.c $(HEADERS) - $(CC) $(CFLAGS) -c $< -o $@ - -.PRECIOUS: $(TARGET) $(OBJS) - -$(TARGET): $(OBJS) - $(CC) $(OBJS) -Wall $(CFLAGS) -o $@ - cp $(TARGET) /media/Lucifer/yanzi/projects/offloading/RDMAMobileDemo/app/src/main/assets/ -clean: - -rm -f *.o - -rm -f $(TARGET) diff --git a/offloading_binaries/Normal_udp_usb/main.c b/offloading_binaries/Normal_udp_usb/main.c deleted file mode 100644 index d7bda03..0000000 --- a/offloading_binaries/Normal_udp_usb/main.c +++ /dev/null @@ -1,124 +0,0 @@ -/* - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define ETH_P_IP 0x0800 /* Internet Protocol packet */ -#define ETH_ALEN 6 /* from */ -#define ETH_P_ALL 0x0003 - -#define MY_DEST_MAC0 0xba -#define MY_DEST_MAC1 0xf6 -#define MY_DEST_MAC2 0xb1 -#define MY_DEST_MAC3 0x71 -#define MY_DEST_MAC4 0x09 -#define MY_DEST_MAC5 0x64 - -#define DEFAULT_IF "usb0" -#define BUF_SIZ 8192 - -int main(int argc, char *argv[]) -{ - int slotLength = 10000; // in microseconds - int quota = 1000000000; // Bytes per slot, default 1GB/slot - int sentInSlot = 0, slot = 1; - double elapsedTime; - double packetPerSlot; - - struct iovec iov; - int sockfd, listenfd; - struct ifreq if_idx; - struct ifreq if_mac; - int tx_len = 0; - char sendbuf[BUF_SIZ]; - struct ether_header *eh = (struct ether_header *) sendbuf; - struct iphdr *iph = (struct iphdr *) (sendbuf + sizeof(struct ether_header)); - struct sockaddr_ll socket_address; - char ifName[IFNAMSIZ]; - int i, j, ret, sendsize=1458, packet_num, offset = 0, port; - int fd; /* file descriptor for file to send */ - struct sockaddr_in servaddr,cliaddr; - socklen_t clilen; - struct timeval t_start,t_end,t_now; - if (argc > 1) - packet_num = atoi(argv[1]); - else - packet_num = 166666*sendsize; - - if (argc > 2) - quota = atoi(argv[2]) / (1000000 / slotLength); - else - { - printf("Usage: UDPSender bytes rate"); - exit(1); - } - - // fix packet size problem - packetPerSlot = ceil(((double)quota) / sendsize); - slotLength = (int)(packetPerSlot * sendsize / quota * slotLength); - quota = (int)packetPerSlot * sendsize; - - sockfd=socket(AF_INET, SOCK_DGRAM, 0); - bzero(&servaddr,sizeof(servaddr)); - servaddr.sin_family = AF_INET; - servaddr.sin_addr.s_addr=inet_addr("10.42.0.1"); - servaddr.sin_port=htons(9876); - - gettimeofday(&t_start, NULL); - while (offset < packet_num) - { - if ((packet_num - offset) < quota) - { - quota = packet_num - offset; - } - while (sentInSlot < quota) - { - ret = sendto(sockfd, sendbuf, sendsize, 0, (struct sockaddr *)&servaddr, sizeof(servaddr)); -// printf("%d, %d\n", ret, errno); - if (ret < sendsize) - { - printf("send fail\n"); - usleep(100); - continue; - } - offset += ret; - sentInSlot = sentInSlot + ret; - } - gettimeofday(&t_now, NULL); - elapsedTime = (t_now.tv_sec-t_start.tv_sec)*1000000.0+(t_now.tv_usec-t_start.tv_usec); - //printf("sent %d, quota %d, packet_num %d, usleep %lf\n", offset, quota, packet_num, slotLength * slot - elapsedTime); - if (elapsedTime < slotLength * slot) - { - usleep((int)(slotLength * slot - elapsedTime)); - } - sentInSlot = 0; - slot++; - - } - close(sockfd); - gettimeofday(&t_end, NULL); - printf("%lf\n", (t_end.tv_sec-t_start.tv_sec)*1000.0+(t_end.tv_usec-t_start.tv_usec)/1000.0); - - close(fd); - - return 0; -} diff --git a/offloading_binaries/Normal_udp_usb/main.o b/offloading_binaries/Normal_udp_usb/main.o deleted file mode 100644 index c07d53fe775e34fd7c08095f43fb3c81e4347fc9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3600 zcmb7HUx-vy82|3v85`Y2CmnHhCcEaYji#6DHkw(%tgE@O8s;AelD0cDcXe?7F>^O| zLrB&@p+qPjETSFAhY%k`Bq9n7e2^&c!3T?d*qQByl@A8{;DfaNzB}j4T(7R_f!W{r zo$ou}-*e7oKiIMBbwyD~4uulbW<*A(D+wiCNKhxuCu3m4pPd&^HC9dTZUnXtHad;| z#tf;BoZpS8PI&W#(`|G(L0|+(Mr}F@RDfNACxGLxHTOqhW4(_rG>$h6tX9`GS_yPq%~&Wn3FiMZUn;e%_*b>w^z+jJmOn?_92 zEKi}{$3`isJ+^yk*fIEDLCn+^g~ z=o9K%??k@nfg8gBYC8a5Tz~d44?e!{y}v$L5z|xfr9pRqb&c^UzB^G5=ljT9#(Q&i z_B$Di;mcjt`;NAxb^oSt*8<4P+ZR6H@~m>-yAhi_Gp;PvJg?H;ZI8XlIqW^`EYI`| z;!MVzF2v90aIP3`K+pA$xCnQAG0}o2+K1YEbCR}N{?He$V;5pk@LurS#x;+N{*0og z+(+IgYnzy(wzoXBc%0h)Y&^QQzkBS>Ravcaq@>-k>~LN`RVglE``v5j{=n1wur((qBCoV4&$N_e#bu4`zUofb4$?ofUb%YT7o1DW1#S_mE_p)8o1nP+lX#3Imor9{@Dh23N-afqRmJWXJaYE2#mBe% z_?tfdj*lPl@lhW?;p1ln&my$N$oMm#{7WDI%E!<9_+=me(Z{d(_%A+w!^eO1@hKmt zf|)Do8S2hbuDIFEW-CKxajZ4ZmrCU{pR8_^hKAfzJ(SDl-fNTIY-^tN3bKWfd|T3+ zd%sQKrA;!0@*%rTt0QSQBr@$%jxrW5V6~JvV%Z4EvWGZ8I%L^)u3(jhv*s9;E4iXQ zOx9@5b}y}6qVkAcrIBjhvdWanm#P+WzJOmGhjB(=5Emi7kSHp!n{g3QQs4k14%9)$ zF1$5j{TSoZL}vxRzzDsog5MPK+l=^V+!GiNfG;OH%D4h?Fvf_&xMJ}*?g!&DM5Bx= ziN0WbmgpR#Ms$Y}`cYg#j?-X799h9f8J8d~!7nmKiLMKNi*YI9VMJVEyr*n8$+(JW z7bEPK8DalpM%ce1_#`9pyu%1TT{!O?x5kM513(qBJp%U&d{-dK{#XMk;}%itrYAAy zyCnz0cLzene-uP1ml0jW3(dXZhnn}Z9=}aJf}?!yIP0;+3#`k7-x1dTKRp9Fya(-b z2irR+<_t1Eeur3(^?A%dZ%uRR{$&~e`UJX*__N~vC$AMBzgvi{?A7zWeQb*dTGq;e s`3~4Kc_N0?W0X0t=xgX{Sm?kU*TT&M?RIM{YXVBwQ1m}|B8Ig0AH@T)E&u=k diff --git a/offloading_binaries/Normal_memory/Makefile b/offloading_binaries/c2s_bypassl3/Makefile similarity index 73% rename from offloading_binaries/Normal_memory/Makefile rename to offloading_binaries/c2s_bypassl3/Makefile index 792847a..f513991 100644 --- a/offloading_binaries/Normal_memory/Makefile +++ b/offloading_binaries/c2s_bypassl3/Makefile @@ -1,6 +1,7 @@ CC = arm-linux-androideabi-gcc +# CC = gcc CFLAGS = -pie -fPIE -TARGET = normal_memory +TARGET = c2s_bypassl3 OBJS = $(patsubst %.c, %.o, $(wildcard *.c)) HEADERS = $(wildcard *.h) @@ -14,7 +15,7 @@ all: $(TARGET) $(TARGET): $(OBJS) $(CC) $(OBJS) -Wall $(CFLAGS) -o $@ - cp $(TARGET) /media/Lucifer/yanzi/projects/offloading/RDMAMobileDemo/app/src/main/assets/ + clean: -rm -f *.o -rm -f $(TARGET) diff --git a/offloading_binaries/BypassL3Binary/bypassl3 b/offloading_binaries/c2s_bypassl3/c2s_bypassl3 similarity index 51% rename from offloading_binaries/BypassL3Binary/bypassl3 rename to offloading_binaries/c2s_bypassl3/c2s_bypassl3 index 5189a90e5818a2dda67113d8b15874d1379e7cb3..4e18bfc858117668b1976954d29a6911ccccc9b0 100755 GIT binary patch delta 11522 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 delta 11178 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 tdJ}U;secN*tKt{nnY+;yap!|%zxj +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define ETH_P_IP 0x0800 /* Internet Protocol packet */ +#define ETH_ALEN 6 /* from */ +#define ETH_P_ALL 0x0003 + +#define MY_DEST_MAC0 0x18 +#define MY_DEST_MAC1 0x03 +#define MY_DEST_MAC2 0x73 +#define MY_DEST_MAC3 0xc8 +#define MY_DEST_MAC4 0x86 +#define MY_DEST_MAC5 0x52 + +#define DEFAULT_IF "eth0" +#define BUF_SIZ 4096 + +char isNumber(char number[]) +{ + int i = 0; + + //checking for negative numbers + if (number[0] == '-') + i = 1; + for (; number[i] != 0; i++) + { + //if (number[i] > '9' || number[i] < '0') + if (!isdigit(number[i])) + return 0; + } + return 1; +} + +int main(int argc, char *argv[]) +{ + // defaults + uint slotLength = 10000; // in microseconds, for bandwidth control + uint quota = 1000000000; // default bytes per slot, default 1GB/slot + uint sentInSlot = 0, slot = 1; + uint total_bytes_sent = 0; + // for timing + double elapsedTime; + struct timeval t_start, t_end, t_now; + // for socket + int i, j, fd; // file descriptor of file to send + int sockfd; // socket + int tx_len = 0; + char sendbuf[BUF_SIZ]; + struct ifreq if_idx; + struct ifreq if_mac; + struct sockaddr_in servaddr; + struct ether_header *eh = (struct ether_header *) sendbuf; + struct iphdr *iph = (struct iphdr *) (sendbuf + sizeof(struct ether_header)); + struct sockaddr_ll socket_address; + char ifName[IFNAMSIZ]; + // for misc + int ret; + int sendsize = 1500; // 1500 MTU (raw socket) + int bytes2send = 0; + struct stat st; + + if (argc < 2) + { + printf("Usage: %s <[optional] bandwidth (bps)> <[optional] sendsize (bytes)> <[optional] interface>\n", argv[0]); + exit(0); + } + + // set bandwidth + if (argc > 2) + quota = atoi(argv[2]) / 8 / (1000000 / slotLength); + + // set sendsize (if larger than 1460 will do packetization (fragmentation)) + if (argc > 3) + sendsize = atoi(argv[3]); + + // set interface + if (argc > 4) { + strcpy(ifName, argv[4]); + } else { + strcpy(ifName, DEFAULT_IF); + } + + // get file size (bytes2send) + if (isNumber(argv[1])) + { + // set bytes to send + bytes2send = atoi(argv[1]); + // open file descriptor + fd = open("/data/local/tmp/bigfile", O_RDONLY); + if (fd == -1) + { + fprintf(stderr, "! Unable to open /data/local/tmp/bigfile.\n"); + exit(1); + } + } + else + { + // open file descriptor + fd = open(argv[1], O_RDONLY); + if (fd == -1) + { + fprintf(stderr, "! Unable to open file %s.\n", argv[1]); + exit(1); + } + fstat(fd, &st); + bytes2send = st.st_size; + printf("bytes2send:%d\n", bytes2send); + } + + if ((sockfd = socket(AF_PACKET, SOCK_RAW, IPPROTO_RAW)) == -1) + { + fprintf(stderr, "! raw socket error.\n"); + exit(1); + } + + // Get the index of the interface to send on + memset(&if_idx, 0, sizeof(struct ifreq)); + strncpy(if_idx.ifr_name, ifName, IFNAMSIZ - 1); + if (ioctl(sockfd, SIOCGIFINDEX, &if_idx) < 0) + { + fprintf(stderr, "! SIOCGIFINDEX error. Check permission.\n"); + exit(1); + } + + // Get the MAC address of the interface to send on + memset(&if_mac, 0, sizeof(struct ifreq)); + strncpy(if_mac.ifr_name, ifName, IFNAMSIZ - 1); + if (ioctl(sockfd, SIOCGIFHWADDR, &if_mac) < 0) + { + fprintf(stderr, "! SIOCGIFHWADDR error. Check permission.\n"); + exit(1); + } + + // Set mem + memset(sendbuf, 0, BUF_SIZ); + + // Construct the Ethernet header + eh->ether_shost[0] = ((uint8_t *)&if_mac.ifr_hwaddr.sa_data)[0]; + eh->ether_shost[1] = ((uint8_t *)&if_mac.ifr_hwaddr.sa_data)[1]; + eh->ether_shost[2] = ((uint8_t *)&if_mac.ifr_hwaddr.sa_data)[2]; + eh->ether_shost[3] = ((uint8_t *)&if_mac.ifr_hwaddr.sa_data)[3]; + eh->ether_shost[4] = ((uint8_t *)&if_mac.ifr_hwaddr.sa_data)[4]; + eh->ether_shost[5] = ((uint8_t *)&if_mac.ifr_hwaddr.sa_data)[5]; + eh->ether_dhost[0] = MY_DEST_MAC0; + eh->ether_dhost[1] = MY_DEST_MAC1; + eh->ether_dhost[2] = MY_DEST_MAC2; + eh->ether_dhost[3] = MY_DEST_MAC3; + eh->ether_dhost[4] = MY_DEST_MAC4; + eh->ether_dhost[5] = MY_DEST_MAC5; + eh->ether_type = htons(ETH_P_IP); + tx_len += sizeof(struct ether_header); + + // Index of the network device + socket_address.sll_ifindex = if_idx.ifr_ifindex; + + // Address length + socket_address.sll_halen = ETH_ALEN; + + // Destination MAC + socket_address.sll_addr[0] = MY_DEST_MAC0; + socket_address.sll_addr[1] = MY_DEST_MAC1; + socket_address.sll_addr[2] = MY_DEST_MAC2; + socket_address.sll_addr[3] = MY_DEST_MAC3; + socket_address.sll_addr[4] = MY_DEST_MAC4; + socket_address.sll_addr[5] = MY_DEST_MAC5; + + // start timing + gettimeofday(&t_start, NULL); + read(fd, sendbuf + tx_len, sendsize - tx_len); + + // start to send + while (total_bytes_sent < bytes2send) + { + if ((bytes2send - total_bytes_sent) < quota) + { + quota = bytes2send - total_bytes_sent; + } + // send in slots + while (sentInSlot < quota) + { + // printf( + // "before: total_bytes_sent %d, sentInSlot %d, quota - sentInSlot %d\n", + // total_bytes_sent, sentInSlot, quota - sentInSlot); + read( + fd, sendbuf + tx_len, + ( + ((quota - sentInSlot) < (sendsize - tx_len)) ? + (quota - sentInSlot) : (sendsize - tx_len)) + ); + ret = sendto( + sockfd, sendbuf, + (quota - sentInSlot < sendsize) ? (quota - sentInSlot) : sendsize, + MSG_DONTWAIT, (struct sockaddr*)&socket_address, sizeof(struct sockaddr_ll)); + + if (ret <= 0) + { + fprintf(stderr, "! Fail to send: ret:%d, err:%d; wait for 100us..\n", ret, errno); + usleep(100); + continue; + } + total_bytes_sent += ret; + sentInSlot += ret; + // printf( + // "after: total_bytes_sent %d, sentInSlot %d, quota - sentInSlot %d\n", + // total_bytes_sent, sentInSlot, quota - sentInSlot); + } + // control bandwidth + if (total_bytes_sent < bytes2send) + { + gettimeofday(&t_now, NULL); + elapsedTime = (t_now.tv_sec - t_start.tv_sec) * 1000000.0 + (t_now.tv_usec - t_start.tv_usec); + if (elapsedTime < (slotLength * slot)) + { + // printf( + // "sent %d, quota %d, bytes2send %d, usleep %lfus\n", + // total_bytes_sent, quota, bytes2send, slotLength * slot - elapsedTime); + usleep((int)(slotLength * slot - elapsedTime)); + } + } + sentInSlot = 0; + ++slot; + } + + // end timing + gettimeofday(&t_end, NULL); + elapsedTime = (t_end.tv_sec - t_start.tv_sec) + (t_end.tv_usec - t_start.tv_usec) / 1000000.0; + printf( + "sent(bytes):%d\nduration(s):%lf\nthroughput(bps):%lf\n", + total_bytes_sent, elapsedTime, total_bytes_sent * 8 / elapsedTime); + + close(sockfd); + close(fd); + + return 0; +} diff --git a/offloading_binaries/c2s_bypassl3/main.o b/offloading_binaries/c2s_bypassl3/main.o new file mode 100644 index 0000000000000000000000000000000000000000..5d21121a46626c27a7c68b0a6b215fbbcad515d3 GIT binary patch literal 5648 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 RI6asiqWsPD(cmV-{{ui*Z{Pp` delta 6722 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 Ufiq5VZa6tW`G@HJ;q8XM0|uyI;s5{u diff --git a/offloading_binaries/c2s_normaltcp/main.c b/offloading_binaries/c2s_normaltcp/main.c index 29dedb4..049073a 100644 --- a/offloading_binaries/c2s_normaltcp/main.c +++ b/offloading_binaries/c2s_normaltcp/main.c @@ -32,7 +32,7 @@ // #define MY_DEST_MAC5 0x64 // #define DEFAULT_IF "wlan0" -#define BUF_SIZ 8192 +#define BUF_SIZ 65536 char isNumber(char number[]) { @@ -62,22 +62,21 @@ int main(int argc, char *argv[]) struct timeval t_start, t_end, t_now; // for socket int fd; // file descriptor of file to send - int sockfd; // socket - // int sendsize = 1488; - // char ifName[IFNAMSIZ]; + int sockfd; // socket char sendbuf[BUF_SIZ]; struct sockaddr_in servaddr; - struct ether_header *eh = (struct ether_header *) sendbuf; - struct iphdr *iph = (struct iphdr *) (sendbuf + sizeof(struct ether_header)); + // struct ether_header *eh = (struct ether_header *) sendbuf; + // struct iphdr *iph = (struct iphdr *) (sendbuf + sizeof(struct ether_header)); // struct sockaddr_ll socket_address; // for misc - int i, j, ret; + int ret; + int sendsize = 1460; // 1500 MTU - 20 IPv4 - 20 TCP int bytes2send = 0; struct stat st; if (argc < 4) { - printf("Usage: %s <[optional] bandwidth (bps)>\n", argv[0]); + printf("Usage: %s <[optional] bandwidth (bps)> <[optional] sendsize (bytes)>\n", argv[0]); exit(0); } @@ -85,6 +84,10 @@ int main(int argc, char *argv[]) if (argc > 4) quota = atoi(argv[4]) / 8 / (1000000 / slotLength); + // set sendsize (if larger than 1460 will do packetization (fragmentation)) + if (argc > 5) + sendsize = atoi(argv[5]); + // get file size (bytes2send) if (isNumber(argv[1])) { @@ -142,8 +145,10 @@ int main(int argc, char *argv[]) // printf( // "before: total_bytes_sent %d, sentInSlot %d, quota - sentInSlot %d\n", // total_bytes_sent, sentInSlot, quota - sentInSlot); - read(fd, sendbuf, (quota - sentInSlot < 4096) ? (quota - sentInSlot) : 4096); - ret = send(sockfd, sendbuf, (quota - sentInSlot < 4096) ? (quota - sentInSlot) : 4096, 0); + read(fd, sendbuf, (quota - sentInSlot < sendsize) ? (quota - sentInSlot) : sendsize); + ret = send( + sockfd, sendbuf, + (quota - sentInSlot < sendsize) ? (quota - sentInSlot) : sendsize, 0); if (ret <= 0) { @@ -158,14 +163,17 @@ int main(int argc, char *argv[]) // total_bytes_sent, sentInSlot, quota - sentInSlot); } // control bandwidth - gettimeofday(&t_now, NULL); - elapsedTime = (t_now.tv_sec - t_start.tv_sec) * 1000000.0 + (t_now.tv_usec - t_start.tv_usec); - if (elapsedTime < slotLength * slot) + if (total_bytes_sent < bytes2send) { - // printf( - // "sent %d, quota %d, bytes2send %d, usleep %lfus\n", - // total_bytes_sent, quota, bytes2send, slotLength * slot - elapsedTime); - usleep((int)(slotLength * slot - elapsedTime)); + gettimeofday(&t_now, NULL); + elapsedTime = (t_now.tv_sec - t_start.tv_sec) * 1000000.0 + (t_now.tv_usec - t_start.tv_usec); + if (elapsedTime < slotLength * slot) + { + // printf( + // "sent %d, quota %d, bytes2send %d, usleep %lfus\n", + // total_bytes_sent, quota, bytes2send, slotLength * slot - elapsedTime); + usleep((int)(slotLength * slot - elapsedTime)); + } } sentInSlot = 0; ++slot; @@ -174,7 +182,9 @@ int main(int argc, char *argv[]) // end timing gettimeofday(&t_end, NULL); elapsedTime = (t_end.tv_sec - t_start.tv_sec) + (t_end.tv_usec - t_start.tv_usec) / 1000000.0; - printf("duration(s):%lf\nthroughput(bps):%lf\n", elapsedTime, total_bytes_sent * 8 / elapsedTime); + printf( + "sent(bytes):%d\nduration(s):%lf\nthroughput(bps):%lf\n", + total_bytes_sent, elapsedTime, total_bytes_sent * 8 / elapsedTime); close(sockfd); close(fd); diff --git a/offloading_binaries/c2s_normaltcp/main.o b/offloading_binaries/c2s_normaltcp/main.o index ccd67fa16bd715ba057af5a352feca7fcfbdec23..1360fc87a17329a764d6af41f86bb9b6b2f249de 100644 GIT binary patch delta 1633 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 G%>M`5p`~O1 delta 5045 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 diff --git a/offloading_binaries/c2s_normaltcp_sendfile/main.c b/offloading_binaries/c2s_normaltcp_sendfile/main.c index 9c45d8f..c3bc334 100644 --- a/offloading_binaries/c2s_normaltcp_sendfile/main.c +++ b/offloading_binaries/c2s_normaltcp_sendfile/main.c @@ -69,13 +69,11 @@ int main(int argc, char *argv[]) struct timeval t_start, t_end, t_now; // for socket int fd; // file descriptor of file to send - int sockfd; // socket - // int sendsize = 1488; - // char ifName[IFNAMSIZ]; + int sockfd; // socket struct sockaddr_in servaddr; // struct sockaddr_ll socket_address; // for misc - int i, j, ret; + int ret; int bytes2send = 0; struct stat st; @@ -159,14 +157,17 @@ int main(int argc, char *argv[]) // total_bytes_sent, sentInSlot, quota - sentInSlot); } // control bandwidth - gettimeofday(&t_now, NULL); - elapsedTime = (t_now.tv_sec - t_start.tv_sec) * 1000000.0 + (t_now.tv_usec - t_start.tv_usec); - if (elapsedTime < slotLength * slot) + if (total_bytes_sent < bytes2send) { - // printf( - // "sent %d, quota %d, bytes2send %d, usleep %lfus\n", - // total_bytes_sent, quota, bytes2send, slotLength * slot - elapsedTime); - usleep((int)(slotLength * slot - elapsedTime)); + gettimeofday(&t_now, NULL); + elapsedTime = (t_now.tv_sec - t_start.tv_sec) * 1000000.0 + (t_now.tv_usec - t_start.tv_usec); + if (elapsedTime < slotLength * slot) + { + // printf( + // "sent %d, quota %d, bytes2send %d, usleep %lfus\n", + // total_bytes_sent, quota, bytes2send, slotLength * slot - elapsedTime); + usleep((int)(slotLength * slot - elapsedTime)); + } } sentInSlot = 0; ++slot; diff --git a/offloading_binaries/c2s_normaltcp_sendfile/main.o b/offloading_binaries/c2s_normaltcp_sendfile/main.o index c0f57ed65569b2e2a3de70e85cb2f5989acc84b4..ff4a4a23e7c66c763a98d7ff0ee509a9c4f9925f 100644 GIT binary patch delta 537 zcmY+5OY!MuEs2~+VH$j&oVulEU zhT|a8k~cUwv|vfaQ3nfY>EPlJa7c^~6&xK3?a*`LTfA`3@1A=&hkLKBKh~y2+xfP` z;P0V=uKE(#DXx2yM5}zzaMe?40L%n{UpoVPa?ZR8U|5x{>ydcp1)5}Mi$5EWJha4X zk85NV=byxl6s zyDD=}U2oNhJgiY{MlWJ|kU?ox3S(*uFsaJNrd^lBmZW@wr~J|O)=pqsZVVas$<=n< zb^XFC{z2O3AO1L<@{K=1mmCb-#|V!GOv$Gt&+wYW5B#kj%M$ZUW`gdxQ{ooCH6#B4 DubzLH delta 520 zcmY+)Cp<{9s zOKj#ATWqt*CL=M01cgQv3JS><7!xE4CD|>U!)@H;d!O&*+;fue$-cAKZCXuM?FRNb zQ#rGJ?K0Dx%GD(bb34iVR+{B%8l*VS(GZ>T1x12?no>CBSuqvZj2RAH)#KDZic(ej`X$}CtBen z?`?g?3s^A#$6Kx6<=+0;k56Jkj($%ja3klx0ZgYa^7cJ6&YSsJveI(}5o3N-df^B# zqgud*8UQkGeWI2C4{9l3%HD7p5LKmaQ-i=)wHz2$KLYEj?ER_A-UHXaY6y5#OVEd+ zJh{lCs49&wY6Z}v%ES6y$Hj`cJVG>Nc-D2nby=*e0am%!_ra@wY;)4rK@Ok$B6Psd pz8IZxmH#b6JmR;co|HPlo00>3_?q{UiyW|Gbi*x@%lyp>y#VuHdV~M~ diff --git a/offloading_binaries/BypassL3Binary/Makefile b/offloading_binaries/c2s_normaludp/Makefile similarity index 67% rename from offloading_binaries/BypassL3Binary/Makefile rename to offloading_binaries/c2s_normaludp/Makefile index 7b6c665..98edc26 100644 --- a/offloading_binaries/BypassL3Binary/Makefile +++ b/offloading_binaries/c2s_normaludp/Makefile @@ -1,7 +1,7 @@ CC = arm-linux-androideabi-gcc -#CC = gcc -CFLAGS = -pie -fPIE -lm -TARGET = bypassl3 +# CC = gcc +CFLAGS = -pie -fPIE +TARGET = c2s_normaludp OBJS = $(patsubst %.c, %.o, $(wildcard *.c)) HEADERS = $(wildcard *.h) @@ -15,7 +15,7 @@ all: $(TARGET) $(TARGET): $(OBJS) $(CC) $(OBJS) -Wall $(CFLAGS) -o $@ - cp $(TARGET) /media/Lucifer/yanzi/projects/offloading/RDMAMobileDemo/app/src/main/assets/ + clean: -rm -f *.o -rm -f $(TARGET) diff --git a/offloading_binaries/Normal_lo/normal_lo b/offloading_binaries/c2s_normaludp/c2s_normaludp similarity index 53% rename from offloading_binaries/Normal_lo/normal_lo rename to offloading_binaries/c2s_normaludp/c2s_normaludp index 01c850fc5f41463fdcd44890248b003a5b19f8f7..907ed0a367f7a8496e291f23176c2f8b661f292d 100755 GIT binary patch delta 10631 zcmcIqeOQ%Mw%_kQ2Lwbtd<-H8ya$eOfCC(mDI!o*Mk}q*tjAGOz7BGffPsS_WgSwd zu^uaITQQ}#|_AI`_BU4|qGxANP-Y z_rrVE{;jq4+H0--@$P*NmmfFvw42&vLw8JLET1uUai6t1_;4O$hx7J5QW!J=*2KPd za>5Shf~7oyOAkp_@vxL6Wr|-*Nx9cUM=z16EYtxg;hzQI72*>q$-6#)yEymg# z*c*T!3cz~}I0E&31`Myf>}dld8TI1^Om4ptfKM2(jQU^z9uB}?6E0Jk7WRez`yXKM z7ydAbF|$E|ZP-xnuBzVPZg6{0uijR(Zt&DHrC#Z2bhE}LR|Biv+U)kY zSgj_lZShokSW9E|W|xP#8(f|Zl{GcZth%wG!By>H8(kic`yN+gZB6BN*6d2DtYIy# zh8j;Jx^gu)H#D-=mU@?~iB;D(wz$A-St<^iHj3ugV%L&e*)5F>w5Faal+Z*qG!_r~ z6Fii&>3C-0iN!M$PaGa9F?i-GHO3M^L$vxF@kLft1oFVlcuaVL@o?g<3`0#X;i$~O z6RI(yK* z>ODj4F&c`FWzUV7OCBEzzy7(geCh-=7L**A3rY^l8n%JXF7}N&6zuhl zI!Qq{?2H;S!6D3@Gdgb&JmwT*y{XTQaryBf4kt|(-|)|nOw8HQrJ%a*S?HS49#i3C zok#60h@NavfW_3#=^LIVgXe`Zclus7Iemvt<-%~8Z+LYuqOin|9h8`&7^HRhYYkIm zx^e0-2sW?^e$ZjGp+hS=bYM93Hsp|5lY7ad2Q`mqD6r#%{Ub%vn*}{54E6r>IgIz? zL&|Vje52vu+rhVEE=a6p6z{sY4ug&aoebGGx<}#d|Ibcz&e29|>bzZ0KhIbI8sxX)Vir!+$df&ZjRK#&8VN zoVb`j6{QoyaRz!A`%#W)7^3+TaDgGM6(Tfre!1=%helWGl3^WFXd#9{Ifd4+GAS>Y z4O1Gr;RfB`kuJOvO`#=T$&NK3FCIDh)5VjGD-chC5|3}#f{uM!0~%0FF6inq;3<&qmqg0QiRQLnr^RO&{9yp^X-B8G@Dyyy^}>5i{qb zSXjPMGblxmff)`*N|CBjH;k5Ga7y3=WdWQ0nT_C48d;wh>&T;wAbQM}14zO&}_ZRA!q39Pe_Dqc-twm%U z`m14sD;e?)Hw$UT?7Piy1=kA}Ao5fxBpr zgac;9&5sOen2`T{xW+j(&uy0Yu?uMRTXajaV-S?q{JWquL&!=r-Zc|=7xpg2Q6~*& znlsPb*q6#!$>Lee1{#ZJ2rtHgdD!Uj?6Bd`lEPTq?(9X|tk}FIdF2RRR1$cF5-S_V zA?6v*B8F)fjab+?Y{_ZF++Q+8FQAA>-*8kOrXLm`=}N3bHpx4!hfqI+`tzt;rLtkG zR3fKX!AJcN>d&K&!|rHGURQ)Q(iib}ye#P*l<2=c2S$8YhrTF!TSlO>B)MwD$w`GaT&Ti!q@5UXIn#KL`?@5cqt#j8&8Qm|;-74{SzUfX*yvxMDxhn3pHt?aV;*#}m z{C8Ko-%q|x;(h7e$+lymVSoP0|7i&N{L@$B+hDUDjRCHx@$ajvc0OQC4GVX11VW)ao_8L zkgTRJ2ou)q_;ptK&W6gWdY9~Jl<8D2=hResDs$=^t1IhsJohx^RJk`&-`UtBf22zS zI7+f9R}1IWsJi0k*-4wJ)zV6LJ=rH03gu>(2PzI3hkno-<*k)&k6hc>Eay6%tu5JP zjBW-V%}+8{)7o4~QQBM53+L6>hI#6m8(TNlHMK$skt#f#+F#C|ExNK}@q~M?jQhQP ze!uq`XjfNPTlgoS$9Y>PQQ!%pFYvaBON2YyR)4DU>lON9+W_eC=HIuCUsm}}?DAyUK8Y9+~m`w#%Sh$3xoAeW^CM2zqoOZ!7)U z@0Aep#j7g6=o__NIVd^0hUhU<+xcrM-}0T`d*yq-Hx~3Nr~~wxMi~MoEV1tQbB;|H zWeaS{`*H5ZJ%RP%q3ek!NWHGm^@X1BAo0|K>#TMx5z4#_U+6A$6F$hTS@Xw)-@%#T~d8+R-a|GL^G z?q3-mwjVx>gYAn3`*6&^0CFXEv&0dP5AmXlDG`o$%q;yH%gHha^Cpf&;-x#n!`34W zMVN~n#OezB46p;RlOT2XKq$@Bah$^Hx=Zf-RWN)M@2p$MF<-;Vcg4{690#$KcH*ct zPb%ZBjHSlLi|5NTcul-`uiVZtgTE=S^zOloejZB9b^%Qmz~%<6yReX}gBXL#SNSrGpZ)S+JrGf*AoLaMR=&a~?!hqFD!_Ob!BlBVNJmCJcq33M*pndkZb+l0{mOi^D2`Rc@okCXOhp#&NEF{x%w2H=`m`jjJ1$}3?2^V2fsgv^g@7DO z!E)7xCAAMc%`wxy{oBy&#vO>&{65ZA>|CO#tW4+FOZHaYT9S{wg#37Ss`(8oz`Lm6 zRfv;DoW`{R+}|S8S2az_fG0`JsgikHlDM(zR*rq>k*YKz-BrcjtI#Kpqc9Uyum4N& zdKD6GGs~*i96~*v;o$uso&B)zFjASPD6Num$rXLp-P?U=F0$H!=Qqely?(e5YW`hk&+-X^>HaE!f&qOKrmLzQub4GIFFvl})>s z<=M8d;;`(QyCIdv=63;kq5RN^F;Y3E8ja$ zcsIq~+@*QBFVIGx*5!+uV1d?c#yL&Eif+PiOP3^NCZ~#_O~pJmRU~cBCUX1cVlJnO z$ACai0^zOt-R3NiZb$triI1m=;(Hw4k~GFPA&DDs9zYMKR_v>`GL7lcnEM7FU>Ox) z-Um(FZdCSC-t{K5*&f!Izf+l<=CISQZqKh7%-Bl7q>X$~VV0Je$hd7axU_*^G&HYI zS3CU1&^&dU#w1^|fj)N=KG< zGp@4TFaKh>iOvAud-6FBF8QrC-jgZTw&wD_Oz~)I0>`oCNNXICfz}4TKT8yBvBw<9 zLUK&F7Q#lNx_%P+v&5Dyc3$8RzAbUQ%pp!}$%?s%j!4lRG^v;t?GXMg8QkFznOier z_Bd3H|1fCuI>hF!bNN+=czA23*MiR0hA=iCQ$7(Zr8F;1H zs_{kxuSw(WGVuB|-qQx&gvLvLX^NSikF(h>_`;H(!ApgI_&lmO(cQUig>5%Pb|oKl z-auB=eK~m-DPAsw;@%wb*0!v~{ZPD&oTw^guyvGFKAQ_34uh8M#r$xNxP5yZ@68dL zwG%=aZoq7{;xDKyGwMUQFbS|hFzaUa?bVgN62&4Cqe!JpYZjMZv3TF>N-Ut1|pd^19RKIrV`kh$AY6($J z9X(Un%eo*TMhKmqv<|v(cr-Sk2oHL!k@BTT>i={GsTDZn=+ zz)9$FwkCw-f zjw^HQ)#Gus+tETVdX8ydQcDPX2y*>urCVH`r_00H(~x&SU-#%`VExXe>w9uVVON~@ z9f)Wu(=c)#!bX7UXZIZ%{sfq&vaI0=V46|1jwBw%z5{N$4Z$hc!h*5P=qGul@NgDQ zSa%Ir2BvQxs7O4*t8`4?2B>8kyABF^!S}3eF>oC^pbjJOJML=WHIsNIs|GHc#4}hk zaK$8^$=ZPF8;WfRA`;pEC9qy1@l7Oq0t{MC?ckEav%vcDA^ZYxKTb=OOv0}K`;e}B zP{MD5Ua??GX!t#nL*J(9UjVja!c&GxAHRjL3Fvo`z88$EsL&md&NQSDgn1HpB(E?*mqc0OL=L zcfc@?;rqbGF&qLm&H;KyUB(!fXa>Ixz`>ZU4h*8peeP5+Jnybd@P@^(#L9e_6j%aD8bXbN=YC5Dc71mNAkosc^<{U?F@ zf%RGa+W`Cu@Ogv0ADE71y8Z{iIFYIApN3!rjA+9$`2yIuD*hYTIL4tk6zPTL&@5p6 zTPd0YslfWTR%E{zSpSxaKTZnO;76|9b#RBp?^t84%mS&;PQVMGQy?6`nQFI*8?9&nwn(I zz!rIG*6#y$0wZxs``-ZP1LG{N;8%gYE5OhUMzAEyv6NVJJp>V{2y})M;*asYINO3Q4lK~F` z8&iA{csJxWI7beB7l5NfkpE7D!n}|l;(Xw<26W48SM6 zV64E|u0-?jJ>b3CS&uya8}I>OI?oUe4#j`(0E4aI1YkM?>o^}+Iq-qd|99OOfR_Oq z|Gi5@_pX#$yIs8{Jks5ATkAblu4eq3Ri&%4%Dtgg9DQ}Zsnwk)K76&n`~UF&UjK`K z_kuI6HSR4fZn5vRSgBRK@LECl=dY~_qJIJFE_tI*l7@tIDk+p+a`fQK9U%Ilf}Vb{ z5-1!ik)Aqn=v0*0dn!DXe(#{C51gdX$sZ%cJExLz=`=)7g&jH63QQ^GPJGe<2ybSb z+|?&mEb5OEj{fjmI<(WXhg7tpw@d|3Z%HR>dWw{mJNmDYW8t zIIs}!07a$#tsd#Du%1qldd1I9r%Bg|d+=E%p2TO9c>Q!*(3*qjT0Hnxl(=@I(Iyo7n9v|sVIMH&=$gLe(Q67lfcDM3ZOn0eymw^L&GyusMd4KC}|{{fr_mK^{9 delta 10077 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 diff --git a/offloading_binaries/c2s_normaludp/main.c b/offloading_binaries/c2s_normaludp/main.c new file mode 100644 index 0000000..7b0afef --- /dev/null +++ b/offloading_binaries/c2s_normaludp/main.c @@ -0,0 +1,195 @@ +/* + * Initial commit by Yibo @ Jul. 28, 2015 + * Last update by Yanzi @ Sept. 26, 2016 + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// #define ETH_P_IP 0x0800 /* Internet Protocol packet */ +// #define ETH_ALEN 6 /* from */ +// #define ETH_P_ALL 0x0003 + +// #define MY_DEST_MAC0 0xba +// #define MY_DEST_MAC1 0xf6 +// #define MY_DEST_MAC2 0xb1 +// #define MY_DEST_MAC3 0x71 +// #define MY_DEST_MAC4 0x09 +// #define MY_DEST_MAC5 0x64 + +// #define DEFAULT_IF "wlan0" +#define BUF_SIZ 65536 + +char isNumber(char number[]) +{ + int i = 0; + + //checking for negative numbers + if (number[0] == '-') + i = 1; + for (; number[i] != 0; i++) + { + //if (number[i] > '9' || number[i] < '0') + if (!isdigit(number[i])) + return 0; + } + return 1; +} + +int main(int argc, char *argv[]) +{ + // for bandwidth control + uint slotLength = 10000; // in microseconds, for bandwidth control + uint quota = 1000000000; // default bytes per slot, default 1GB/slot + uint sentInSlot = 0, slot = 1; + uint total_bytes_sent = 0; + // for timing + double elapsedTime; + struct timeval t_start, t_end, t_now; + // for socket + int fd; // file descriptor of file to send + int sockfd; // socket + // char ifName[IFNAMSIZ]; + char sendbuf[BUF_SIZ]; + struct sockaddr_in servaddr; + // struct ether_header *eh = (struct ether_header *) sendbuf; + // struct iphdr *iph = (struct iphdr *) (sendbuf + sizeof(struct ether_header)); + // struct sockaddr_ll socket_address; + // for misc + int ret; + int sendsize = 1472; // 1500 MTU - 20 IPv4 - 8 UDP + int bytes2send = 0; + struct stat st; + + if (argc < 4) + { + printf("Usage: %s <[optional] bandwidth (bps)> <[optional] sendsize (bytes)>\n", argv[0]); + exit(0); + } + + // set bandwidth + if (argc > 4) + quota = atoi(argv[4]) / 8 / (1000000 / slotLength); + + // set sendsize (if larger than 1472 will do packetization (fragmentation) (is this true??)) + if (argc > 5) + sendsize = atoi(argv[5]); + + // get file size (bytes2send) + if (isNumber(argv[1])) + { + // set bytes to send + bytes2send = atoi(argv[1]); + // open file descriptor + fd = open("/data/local/tmp/bigfile", O_RDONLY); + if (fd == -1) + { + fprintf(stderr, "! Unable to open /data/local/tmp/bigfile.\n"); + exit(1); + } + } + else + { + // open file descriptor + fd = open(argv[1], O_RDONLY); + if (fd == -1) + { + fprintf(stderr, "! Unable to open file %s.\n", argv[1]); + exit(1); + } + fstat(fd, &st); + bytes2send = st.st_size; + printf("bytes2send:%d\n", bytes2send); + } + + // bind socket + sockfd = socket(AF_INET, SOCK_DGRAM, 0); + bzero(&servaddr, sizeof(servaddr)); + servaddr.sin_family = AF_INET; + servaddr.sin_addr.s_addr = inet_addr(argv[2]); + servaddr.sin_port = htons(atoi(argv[3])); + + // connect socket + if (connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) < 0) + { + fprintf(stderr, "! Unable to connect the server.\n"); + exit(1); + } + + // start timing + gettimeofday(&t_start, NULL); + + // start to send + while (total_bytes_sent < bytes2send) + { + if ((bytes2send - total_bytes_sent) < quota) + { + quota = bytes2send - total_bytes_sent; + } + // send in slots + while (sentInSlot < quota) + { + // printf( + // "before: total_bytes_sent %d, sentInSlot %d, quota - sentInSlot %d\n", + // total_bytes_sent, sentInSlot, quota - sentInSlot); + read(fd, sendbuf, (quota - sentInSlot < sendsize) ? (quota - sentInSlot) : sendsize); + ret = sendto( + sockfd, sendbuf, + (quota - sentInSlot < sendsize) ? (quota - sentInSlot) : sendsize, + 0, (struct sockaddr *)&servaddr, sizeof(servaddr)); + if (ret <= 0) + { + fprintf(stderr, "! Fail to send: ret:%d, err:%d; wait for 100us..\n", ret, errno); + usleep(100); + continue; + } + total_bytes_sent += ret; + sentInSlot += ret; + // printf( + // "after: total_bytes_sent %d, sentInSlot %d, quota - sentInSlot %d\n", + // total_bytes_sent, sentInSlot, quota - sentInSlot); + } + // control bandwidth + if (total_bytes_sent < bytes2send) + { + gettimeofday(&t_now, NULL); + elapsedTime = (t_now.tv_sec - t_start.tv_sec) * 1000000.0 + (t_now.tv_usec - t_start.tv_usec); + if (elapsedTime < slotLength * slot) + { + // printf( + // "sent %d, quota %d, bytes2send %d, usleep %lfus\n", + // total_bytes_sent, quota, bytes2send, slotLength * slot - elapsedTime); + usleep((int)(slotLength * slot - elapsedTime)); + } + } + sentInSlot = 0; + ++slot; + } + + // end timing + gettimeofday(&t_end, NULL); + elapsedTime = (t_end.tv_sec - t_start.tv_sec) + (t_end.tv_usec - t_start.tv_usec) / 1000000.0; + printf( + "sent(bytes):%d\nduration(s):%lf\nthroughput(bps):%lf\n", + total_bytes_sent, elapsedTime, total_bytes_sent * 8 / elapsedTime); + + close(sockfd); + close(fd); + + return 0; +} diff --git a/offloading_binaries/c2s_normaludp/main.o b/offloading_binaries/c2s_normaludp/main.o new file mode 100644 index 0000000000000000000000000000000000000000..8d1919e1dc782ca00226581937330c92a8001f21 GIT binary patch literal 4640 zcmb7IZ)_Y_5uf#*T_<+wkvhb&O?YX};T)Xv#&xK1)5w1m2gyllT1P@kkh6EYwpTsh zo_6<|q+dWyKUjz=g+!=|3OT+Z=m#T3B0`}u0->r(B}){^f`0IwbE1SI87Uw7q2l<> z-h1csHvPkk_I_{X&CHvbH*a>G@1Hm|sc9Oip;3~yD5BALxY9fnLXz5P2gQ~TS7`aw za>wfFa-7;KWE3}AjkZeM=*IjnmBaM>25fX`lHW#jzZGk7(OuDvm)BXwFeb`7YH~MN ze}|OOj4Nff6_qE*{<~TYZR%7k(dtw=w*0eu`>F$_&2Jz6X9xVz)=rn#;FC5yRqlZO zyQEjtd^N6D;wNubVxw2r+n>5w8R9*Foj~5d2gv>kNhg4No+)nhOWNRdW!HGTqQjq^ zMDHlxDtKgEtK2?#v(hB4t~bF)JzgyRw_5!dQE`J&$=-!*4EkRo`kUghejKs04UR9= zGm5201bC2bGK#;^jp8rtAUq8-L z>99Ys$U5>=Vqdz6c7B$e0Xw&k-o#m7T@TMHUW-2oeiC({k-vd@>UzCFMuW^DQQTMx zdDs8(OY9xyERwsZU-S^$k8YA> zqJ*<3aXs7{+KSPTXMuCyXo63KSlIvJhMZo2P3DuhQp@cZn5#INAiI2UqNHe!t2KH) zqF7%)FB)nevh7h>#PGW(r|_IB=|iZg;bQ4Pl6mJ!2NVrn$Y(TO-kP&49xaJ`CdSKe z9UZUl%P|hiyv1b>RNdgd{OZ<|TRG!17m&Fg@;-UyGsaZ8v3`Dv9$}z|Bv3<5BD3BJ z)akjBPIRcwH<;g6IR@E&$admfdLXBP&$7tl5nUAbt2|Ce&iSD_E6`bij*NF2F)RJ> zOpRA@cZ(Y_AjgjLFSX+=5O-Juqo{#V_`rAPOXwNu&eF=Y%Ikxi55$g|d?TFW&Om<@ zzPICySk|JN9o*mhY$t&=?xWnJnC_7@_b{HTyu4Mdj;OqF>|;bXtVm8R$j`t=Q7uu3+Vks*TeqMxUTkm zA95idesJD)q38Txddg4upzbi&A=i_%8}@twU-+HFeZMhRR<-)W^O0Pge^{ARni2Ne_N@s6=Qk1_bu{E!@RjbGtjulyC;&!nCo$=?+3mMqv-JvR~Wt|%Fi& zW#f9?i~%*KM}oSk8-e${Dok zb8E4X-6CMMP87C@Wft@EL4D2g3+XLl(0OT#;EmW*%6m>Om?Qg=6Ob9W4sr9Nxr?3? z*fb|s=Wsg%^4-h}c7RaqV3q?T+0SU+4gzP>u-l4z%61YGM;Xz?W*A{N&j`Cq zlK&P3Y!2{p&A%P#3 zQ|}JuDLIrb!W^rdfTSe;XnsZ+0j;M0 E1NHssYybcN literal 0 HcmV?d00001 diff --git a/offloading_binaries/Normal_udp/Makefile b/offloading_binaries/c2s_readfile_only/Makefile similarity index 66% rename from offloading_binaries/Normal_udp/Makefile rename to offloading_binaries/c2s_readfile_only/Makefile index 3bdff0a..26289cd 100644 --- a/offloading_binaries/Normal_udp/Makefile +++ b/offloading_binaries/c2s_readfile_only/Makefile @@ -1,7 +1,7 @@ CC = arm-linux-androideabi-gcc -#CC = gcc -CFLAGS = -pie -fPIE -lm -TARGET = normal_udp +# CC = gcc +CFLAGS = -pie -fPIE +TARGET = c2s_readfile_only OBJS = $(patsubst %.c, %.o, $(wildcard *.c)) HEADERS = $(wildcard *.h) @@ -15,7 +15,7 @@ all: $(TARGET) $(TARGET): $(OBJS) $(CC) $(OBJS) -Wall $(CFLAGS) -o $@ - cp $(TARGET) /media/Lucifer/yanzi/projects/offloading/RDMAMobileDemo/app/src/main/assets/ + clean: -rm -f *.o -rm -f $(TARGET) diff --git a/offloading_binaries/Normal_udp_usb/normal_udp_usb b/offloading_binaries/c2s_readfile_only/c2s_readfile_only similarity index 55% rename from offloading_binaries/Normal_udp_usb/normal_udp_usb rename to offloading_binaries/c2s_readfile_only/c2s_readfile_only index 1a060cd8244a9b2a3aa3c5e548ef9a08acfe43e7..6173a6acd48868a3133860117fe5557deae3ee57 100755 GIT binary patch delta 9830 zcmb_idw5human?qfldgJ7a=5_) z{m!dSRh_DP?(H1dYdXExv@b4n_aMgd8DpOPDJ$-ia~Y!=0s@O*jH7WCpw3roJqUhO z=qP*%%?|K)fKRm#xNrZ3+)#Ne3{e%FkBkg9Q7^K1S!4bD%K5QD?C-z6|h@9 zL(DKeE^V(9%FH6Em}WD zJdqPEWV87}GbkohiY$sMV+jKY)d<7ThNBMF@NliAozM$KulE6rD4sB@J`Y zP(4U3oNb_Xg!tTC?+B`J{G>6n>wEgTLN zeFcZ$6rVV!D;xu~FjJ4-Z;deZ#N2nd$6UC#BjWDEJ((CJ9Bl+zav%mRIUJ{9E81yO zR67>fvO9dgBn*S64o%ob%KD&==pK%lA(lVVX|13!hv@O!4);j%-VO;9Fh%$~=LG`a z;hycDk5-p$fvg05oVGvcG}5>DFd!MB+22Qs4u9uh88iq>4*%;WhyTd=JQyzVcTP5A zh7k!pBREs!LbL%RHB7TM8aEqkKcm?uy9tbi>2f~u!YF8ipbh(f@vg(z*S#IewnX^5 zQ$UwNm$B!ZRd?ToSU72r;gHFe{oM@;?Z7vU7M|nW-CR+q(+&!Lj5_8|Z(24t!Un?XS!bnBet;rrT=ID(b|lcGA|G6@8yNLmQU0 z1A@hlIbHgUZvcA{!8Sy=6|IeiT>JE{E(-?bU zv0*Z2FxX6F0)6QyUlp zP}A#Ao70&Ii8x3;XEG`Aaz7VOTVhkYB{fbd=5QZ}1&d8k#8U7?968Dnvjocefw>HoJUB&LJr6D2MWh;z`^~ZI-K(eX$3r&*kDrfT znB=!HRych)3rEXPv6F$OG{$zL*6kQOtwTm4Coky2oyb9&$XQ7zLe2Mr#3DQCC`V4M z>Ws*(>XhW74!Z0jqx_xG<8UajlO)Vpp=^@3r5r*32>LIhpTbKzQ+T1AmI6BZN6>#6 zeWWtoY2%tAQ=m3KKLl}SqQJGxq8-!itK`!9h& zn5i)5+GowqVIPO`!_7HygL&w!d+>-xy(*@R%HWGd#i;)ZZ3W&-FztVVH4jhZpc;KDV!n!(F$lfZMvN8Gp5gZE}De~+fVKO0) zt|sOkuO^Om0lR9}JISBS>a2;QJuAb!mFuf&9 znwskBsXZapjsI4~b=1Bh)zy7RxUuev(l*ugEA6XwOL_yo6YJlotG%wuQ+ssk__~-s zsW?+)qof6@u^bX#Xkpp z9O3J|t>t+cqym6o$+DR;(jvAiIE z)KxQM$l#Pjl#X5PiU8?wL z>Y{OWJpAaTgVJPN1p&^aEyKcxDp&^XBr8=FqzhIAuy@vcnNSRFu5nAo&=`3O&=EbD_%0p ztjk>vk{d6kO&`f!;*seY+%C3G&&{J9GERzi%ZO>`2$OXgHD7d2pA=OLxEzSaZ$l(C zWQwsxu~BUxliM_DBDZIXhls~wdb^s3C1o>Db$PKao0VpZcHggGcIfgT2jWw_)L%_@rnTU+w7)dN~bWwQN zGAzMN1Y84=n!>IFHUOR^NW(oHO5u2Q7>;6d;e*c%f{Wt9(y0=HGOTp_h;VH5OL!;T zhBGvpmq<1EOkfkgE*-3#9!nP0eP9 z%pYN@TH!1tQ?~J-k@;s7nquDO(P%H~G&9RSrqS4#1sH{IX$AIRI9{KQR}{PW{bR#t z^@6qxBY&;xnY^t?@os`x1ES4>KRZ$Tb#6OnHY*4(p+>?8+%$RHC6<#f@|Gp>d{MG2 z54*Q**#ur9PA_xdfp>jbfz%K$a>^2lo1pd2(3*m4izc`M>v9UTk5LJGvCcLRz$fsx zTob~Kvui=?LLGk~UhFQ*pcDFL*|`xhIH4r!!CRT45A~U1_i~w+isQ=@q#X(3qvbhL zLxQ-y+&cFZq$%3(Il&PZ+xb=OyPrmE0fXF13s=q1cC~?~xn+$gs$kH8H;?nwwYebwSX`^BoY!}LF5#l|T@3wa)m=~d)0 z@`S5k&r?|nmHdG%K91SUV$F(Cv2=aW3bVpdL?PV(jkIwgC@Knc4EWJczxaasz zfkl2)tE|DB**MzhrQOSsfvK#4kBEo3O8nO~d%+s1z`-64bv>{&A7zNre*&P~#O`a)X7ry0cwEl5b0k?^y)w%dPe{}&O zcMtk@@hEwDCcnMBz!M&}_12?j*Q6uhCi4=C}7m0?Ev~^?? zFO3%G*5+sTgZ>%}(9=LQV8Z2((TGS%Bq`AOnA|K^eZa$>#6?gKc5$ZiKpgwT=1|Hf z_L=cc*Zleub4++f|Kz<}LQ;`mW0THiibremq_#}4rzTNCN^z_vo|@L0wUR$ujNgzM z+n9}&!3EI)6G`eJNo>y+8#ZLZ)Zq;YIJ56;7(1d5qmY<8WI!xK7C&zogX<%EyJlj5SGL@B}Tmb8# z-nOaRNv?MyXfP_svyEO^< zns{|<64JE`Ta)p?zqU0Q>6!@JmPDygHk$f$F?(AQFK%{k`)$^OT1;Cl7Uh$Ap8?}$ zVHP|;jeI!>(_4vJhAR3VvFTWHB)zk!Ww=81idT*$M_t4e)e_1O*X*KQ{NY%Vvv+_T z#_$!75yth!I9{UY=b3&3CYLgUT<8x6Q7INBji4pbF};D<#UsaamE}3EF3)jgd5$Z~ zb38eP5=dR1x>s^^JVbF`7Fn+)_$qZGS~I&5AWtaQREvetLrH%Xl8|u|D|4*I#>>S{ zblX5|Kui4R(dzF=y8KDpDQZz?a`q1Pu_kbcVBx9(8sM}N6QrUlP$H=o3p<03o>D#i0|)6q0YBh_BcL1-ENmzE`rDCiu-&l4 z&x79pc~T+%>%jVJlP=#UCNw4ZE`URkPn#%77S;t!zg%w7@HJqHd|AVN!1OjtXO2tJ z>?dIT2TCqQut7MI^!ubzq;M8PIQI^gfgAC&4;3y&`jmm`6*ym<~*b zhz5*g!`WhB`Us%nVQd939X%BfW$S_Ij#JME5Pj$>RJ+h6PRApJZK4@L(7JNrr}SC4|$tr?=o;ccAQq2?~{(2p1tBYXZ*#(@QcHQaA`auw=kT zfQ?K3DzI_MPXQaZtOfWMMl00peLjG(|1`kYAdH8rUQK|WS4MmrcrN(MHGT-9%ZMX^ zjWH1qY}~>$V0wQ)sOgWv^19t?;>Z4mzku>Spx^ywG&tH?zgpi9^atbd3jd=GFVk`_J2W&>M& zcoUU11vd!#Cpl8s46J{WBm5k&{z;DTuYvVXZ-n0fcHybhs@b~$tQQ%buY&NOfPL+m z2r5K3888i`6RK0Afb-L^Od3B6xHVlhN%GTxPZ{vTz?TfT7TA_?M}8mh76Wb^jQuw* z@o5O`gMbY>G{BcZxEJ`Of&Wtw4#zHBGVn8l@O0pQ1OE{V_TNZY3jsOvjsx3*@B!c@ zc&Zm_4pN$`d~ww98Q@0nDL17F&?hV91Ehw31g7*BjlvJl#f!4?aTrYma;fMboD6LI z7Zq{wtp&WMdGx75Dau_vzh+H&#d`cpiL=64?k=klYu=8xuBq`1P+U%zYXH=^$BCx5 zlYF|kYn*%Y0Mq4iZ}@xsn~UMUTwuEfR;%524UFOj9^x2)HDcjAR@)JC%MogtQ-JY>e1?E?QVWj0oum b>Jxb%riJvrg`gCVe3&LhyeFRiF!uideH`Ew delta 9966 zcmcIqdsvlKx?k(t8wEw!Tm*D)U;|qL<+4#MP1G$?QDWh(u{60W7>UY8sbSjNOXc%S zj@t5+Q<&R{rp7Qac*;pMOHyWzQ`B(g_?(yy7x!d}rHys44gAH`TUV=QlPLfPHMOvb1NfWSmZ-UY z_&z_3QHKl3FCRvV{v&?4#1F3}T&NID?7GXh{&s@zNnqoMfX}7K%D*(=(>k1p{sA2( z{;PiYunt?%KXn_1^-pdi02CEfSCy6(RjsdbqF+{DQdHuss0S!<)>N^wimGZ>TT}K} zg_BjSuW%NXl$UQ}Yb%`2s>ds8)|8h#!8UBFTJK!LWS!cI_2teQwxP~h%j#;YD=Idy zvg(@J3RYB6Ug9hX!w99dwMDhgl1&&5!op!#TMh>v�|olx9R#8T|ZLS4_5mwQa0)sw{DIY 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 KDZ^5W*8M-ca@5}d diff --git a/offloading_binaries/c2s_readfile_only/main.c b/offloading_binaries/c2s_readfile_only/main.c new file mode 100644 index 0000000..17b7352 --- /dev/null +++ b/offloading_binaries/c2s_readfile_only/main.c @@ -0,0 +1,165 @@ +/* + * Initial commit by Yibo @ Jul. 28, 2015 + * Last update by Yanzi @ Sept. 26, 2016 + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// #define ETH_P_IP 0x0800 /* Internet Protocol packet */ +// #define ETH_ALEN 6 /* from */ +// #define ETH_P_ALL 0x0003 + +// #define MY_DEST_MAC0 0xba +// #define MY_DEST_MAC1 0xf6 +// #define MY_DEST_MAC2 0xb1 +// #define MY_DEST_MAC3 0x71 +// #define MY_DEST_MAC4 0x09 +// #define MY_DEST_MAC5 0x64 + +// #define DEFAULT_IF "wlan0" +#define BUF_SIZ 4096 + +char isNumber(char number[]) +{ + int i = 0; + + //checking for negative numbers + if (number[0] == '-') + i = 1; + for (; number[i] != 0; i++) + { + //if (number[i] > '9' || number[i] < '0') + if (!isdigit(number[i])) + return 0; + } + return 1; +} + +int main(int argc, char *argv[]) +{ + // defaults + uint slotLength = 10000; // in microseconds, for bandwidth control + uint quota = 1000000000; // default bytes per slot, default 1GB/slot + uint sentInSlot = 0, slot = 1; + uint total_bytes_sent = 0; + // for timing + double elapsedTime; + struct timeval t_start, t_end, t_now; + // for socket + int fd; // file descriptor of file to send + int sockfd; // socket + // int sendsize = 1488; + // char ifName[IFNAMSIZ]; + char sendbuf[BUF_SIZ]; + struct sockaddr_in servaddr; + struct ether_header *eh = (struct ether_header *) sendbuf; + struct iphdr *iph = (struct iphdr *) (sendbuf + sizeof(struct ether_header)); + // struct sockaddr_ll socket_address; + // for misc + int ret; + int bytes2send = 0; + struct stat st; + + if (argc < 2) + { + printf("Usage: %s <[optional] bandwidth (bps)>\n", argv[0]); + exit(0); + } + + // set bandwidth + if (argc > 2) + quota = atoi(argv[2]) / 8 / (1000000 / slotLength); + + // get file size (bytes2send) + if (isNumber(argv[1])) + { + // set bytes to send + bytes2send = atoi(argv[1]); + // open file descriptor + fd = open("/data/local/tmp/bigfile", O_RDONLY); + if (fd == -1) + { + fprintf(stderr, "! Unable to open /data/local/tmp/bigfile.\n"); + exit(1); + } + } + else + { + // open file descriptor + fd = open(argv[1], O_RDONLY); + if (fd == -1) + { + fprintf(stderr, "! Unable to open file %s.\n", argv[1]); + exit(1); + } + fstat(fd, &st); + bytes2send = st.st_size; + printf("bytes2send:%d\n", bytes2send); + } + + // start timing + gettimeofday(&t_start, NULL); + + // start to send + while (total_bytes_sent < bytes2send) + { + if ((bytes2send - total_bytes_sent) < quota) + { + quota = bytes2send - total_bytes_sent; + } + // send in slots + while (sentInSlot < quota) + { + // printf( + // "before: total_bytes_sent %d, sentInSlot %d, quota - sentInSlot %d\n", + // total_bytes_sent, sentInSlot, quota - sentInSlot); + read(fd, sendbuf, (quota - sentInSlot < BUF_SIZ) ? (quota - sentInSlot) : BUF_SIZ); + + ret = (quota - sentInSlot < BUF_SIZ) ? (quota - sentInSlot) : BUF_SIZ; + total_bytes_sent += ret; + sentInSlot += ret; + // printf( + // "after: total_bytes_sent %d, sentInSlot %d, quota - sentInSlot %d\n", + // total_bytes_sent, sentInSlot, quota - sentInSlot); + } + // control bandwidth + if (total_bytes_sent < bytes2send) + { + gettimeofday(&t_now, NULL); + elapsedTime = (t_now.tv_sec - t_start.tv_sec) * 1000000.0 + (t_now.tv_usec - t_start.tv_usec); + if (elapsedTime < slotLength * slot) + { + // printf( + // "sent %d, quota %d, bytes2send %d, usleep %lfus\n", + // total_bytes_sent, quota, bytes2send, slotLength * slot - elapsedTime); + usleep((int)(slotLength * slot - elapsedTime)); + } + } + sentInSlot = 0; + ++slot; + } + + // end timing + gettimeofday(&t_end, NULL); + elapsedTime = (t_end.tv_sec - t_start.tv_sec) + (t_end.tv_usec - t_start.tv_usec) / 1000000.0; + printf("duration(s):%lf\nthroughput(bps):%lf\n", elapsedTime, total_bytes_sent * 8 / elapsedTime); + + close(fd); + + return 0; +} diff --git a/offloading_binaries/c2s_readfile_only/main.o b/offloading_binaries/c2s_readfile_only/main.o new file mode 100644 index 0000000000000000000000000000000000000000..0a0e5d4d42e3c926fe7afd744670baba1287a54e GIT binary patch literal 3748 zcmb7HU2GIp6h710LjQynij;Q6!M3`sbUT!ySdnyFTAH*#gb!(ltB5W- zvI~%rdLo}~n$DLg$LGorzwFQE{w@^$Aj&QQ?t3{ z3S`hNQ?p;lYWCA_H^J|4Hn+`(_4ym}j$XNYKG^Y^-M)SI@XdZ3h^ii>*Mz;lym=aX zdVJ2_6Mu0n3gim*TOxB|GwR?=myQITRwcXenJxS1*VCBWUcV;~yk>V?bPwMTagB++ zF6k>L@&k@3P^*Q#)VUx(|4s~$eyGd|{$fBc8R4K!1mbtyF7DHixs3bLy6` ze>XQx7wgLz>n_&bFzmbUWA8%_%SEo?!}fWnaWEHzejV&Slx4e)?7DUQ!iM+f3iOl)7H1|EudgUBL9=PWOIkxDnIs z-gaf%fn>@uk_j#LiW1Qh(L+YmnpA?3l-aT!muGuav$XbDa!iZ0Tk%wT#F$`X+Mw)D zXpxw%SV<+B(i6&k6hrWFmo9riNIbR}R9ABpJeo;s98S<|>1vLRS6P$kWM*PAm9gxQ zY?-~toxQzXN^s}y{Vhso=vk#h-PEaW?RZ8BrqX&^kLjAJw@|nhx|*&<43ZRd%eRd5 z(K26!R4J|U)k#w5f4MVYqfE;@yn>z*lJ|kD zFk|tzN>Rvj_K0x?=DR)ofQL_dc*etzdH4q&{)vZw4$iSzSR=c^7FRD>(D zNh8DDory>EG>wkh$73{OM2*)<%;<=g`q6kMwn*T$L^4a%#^R|7t27ohGm%BoVZ6Rb zcp{FJQfVV$jgx-Zut>9#2JuBg6QrPH_=9mi?1XhOFvBd#aMquLaubuCI6Gp6e) z8jB@Ookn*K?db^*jqd61-`6)XIuh;~>Knz3WBR;4H8CPQ-##*A2g3mCn!T$n`_+dKB_&DN4J@Y(ujPTPbaF`K? zKFSEcM;PJvq>!IsM4aas8;SVruWQ0L1}NjXCh)qzo51>JqFaLB7RXlt>;Kn=6yfwy z=?39@!soh9uq?Y_i|}6#@?tZhmvNy@!VsSc+n)9K&O=BxM_TQ+)#Zx?JQp{`=h(>!DD6Ok*EmkVo$fzX Cjj${L literal 0 HcmV?d00001