From 979beae8fc501d5f07d29c05f095b53c0e192fe5 Mon Sep 17 00:00:00 2001 From: HappyZ Date: Mon, 26 Sep 2016 22:41:28 -0700 Subject: [PATCH] rewrote normaltcp_splice, add mac address to argv in bypassl3, optimize stuff also add a make all.sh bash to make all modified folders --- offloading_binaries/BypassL3_lo/Makefile | 21 -- offloading_binaries/BypassL3_lo/bypassl3_lo | Bin 51224 -> 0 bytes offloading_binaries/BypassL3_lo/main.c | 206 ---------------- offloading_binaries/BypassL3_lo/main.o | Bin 4888 -> 0 bytes offloading_binaries/BypassL3_usb/Makefile | 21 -- offloading_binaries/BypassL3_usb/bypassl3_usb | Bin 51224 -> 0 bytes offloading_binaries/BypassL3_usb/main.c | 206 ---------------- offloading_binaries/BypassL3_usb/main.o | Bin 4888 -> 0 bytes offloading_binaries/Normal_usb/Makefile | 23 -- offloading_binaries/Normal_usb/main.c | 131 ---------- offloading_binaries/Normal_usb/main.o | Bin 3720 -> 0 bytes offloading_binaries/Splice/main.c | 172 ------------- offloading_binaries/Splice_lo/Makefile | 20 -- offloading_binaries/Splice_lo/main.c | 172 ------------- offloading_binaries/Splice_lo/main.o | Bin 3884 -> 0 bytes offloading_binaries/Splice_lo/splice_lo | Bin 51208 -> 0 bytes offloading_binaries/c2s_bypassl3/c2s_bypassl3 | Bin 51292 -> 51316 bytes offloading_binaries/c2s_bypassl3/main.c | 69 ++++-- offloading_binaries/c2s_bypassl3/main.o | Bin 5648 -> 6388 bytes .../c2s_normaltcp/c2s_normaltcp | Bin 51248 -> 51248 bytes offloading_binaries/c2s_normaltcp/main.c | 30 ++- offloading_binaries/c2s_normaltcp/main.o | Bin 4612 -> 4876 bytes .../c2s_normaltcp_sendfile | Bin 51232 -> 51232 bytes .../c2s_normaltcp_sendfile/main.c | 48 ++-- .../c2s_normaltcp_sendfile/main.o | Bin 4216 -> 4568 bytes .../c2s_normaltcp_sendfile/old.c_orig | 94 -------- .../{Splice => c2s_normaltcp_splice}/Makefile | 5 +- .../c2s_normaltcp_splice} | Bin 51180 -> 51252 bytes .../c2s_normaltcp_splice/main.c | 225 ++++++++++++++++++ .../c2s_normaltcp_splice/main.o | Bin 0 -> 4928 bytes .../{Splice => c2s_normaltcp_splice}/splice | Bin .../c2s_normaludp/c2s_normaludp | Bin 51252 -> 51252 bytes offloading_binaries/c2s_normaludp/main.c | 30 ++- offloading_binaries/c2s_normaludp/main.o | Bin 4640 -> 4904 bytes offloading_binaries/makeall.sh | 12 + 35 files changed, 351 insertions(+), 1134 deletions(-) delete mode 100644 offloading_binaries/BypassL3_lo/Makefile delete mode 100755 offloading_binaries/BypassL3_lo/bypassl3_lo delete mode 100644 offloading_binaries/BypassL3_lo/main.c delete mode 100644 offloading_binaries/BypassL3_lo/main.o delete mode 100644 offloading_binaries/BypassL3_usb/Makefile delete mode 100755 offloading_binaries/BypassL3_usb/bypassl3_usb delete mode 100644 offloading_binaries/BypassL3_usb/main.c delete mode 100644 offloading_binaries/BypassL3_usb/main.o delete mode 100644 offloading_binaries/Normal_usb/Makefile delete mode 100644 offloading_binaries/Normal_usb/main.c delete mode 100644 offloading_binaries/Normal_usb/main.o delete mode 100644 offloading_binaries/Splice/main.c delete mode 100644 offloading_binaries/Splice_lo/Makefile delete mode 100644 offloading_binaries/Splice_lo/main.c delete mode 100644 offloading_binaries/Splice_lo/main.o delete mode 100755 offloading_binaries/Splice_lo/splice_lo delete mode 100644 offloading_binaries/c2s_normaltcp_sendfile/old.c_orig rename offloading_binaries/{Splice => c2s_normaltcp_splice}/Makefile (74%) rename offloading_binaries/{Normal_usb/normal_usb => c2s_normaltcp_splice/c2s_normaltcp_splice} (53%) create mode 100644 offloading_binaries/c2s_normaltcp_splice/main.c create mode 100644 offloading_binaries/c2s_normaltcp_splice/main.o rename offloading_binaries/{Splice => c2s_normaltcp_splice}/splice (100%) create mode 100644 offloading_binaries/makeall.sh diff --git a/offloading_binaries/BypassL3_lo/Makefile b/offloading_binaries/BypassL3_lo/Makefile deleted file mode 100644 index 8937390..0000000 --- a/offloading_binaries/BypassL3_lo/Makefile +++ /dev/null @@ -1,21 +0,0 @@ -CC = arm-linux-androideabi-gcc -#CC = gcc -CFLAGS = -pie -fPIE -lm -TARGET = bypassl3_lo - -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/BypassL3_lo/bypassl3_lo b/offloading_binaries/BypassL3_lo/bypassl3_lo deleted file mode 100755 index 5189a90e5818a2dda67113d8b15874d1379e7cb3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 51224 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 WqjZ3X$=bW#!i|1+?x{J!n))yF*uORa diff --git a/offloading_binaries/BypassL3_lo/main.c b/offloading_binaries/BypassL3_lo/main.c deleted file mode 100644 index fba88fe..0000000 --- a/offloading_binaries/BypassL3_lo/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/BypassL3_lo/main.o b/offloading_binaries/BypassL3_lo/main.o deleted file mode 100644 index b92680cb331b72ffc88a0ecfe06eaa27c5738435..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4888 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 V2Z)%gz3VO9=y&IyniH(4{{l@}z9Iks diff --git a/offloading_binaries/BypassL3_usb/main.c b/offloading_binaries/BypassL3_usb/main.c deleted file mode 100644 index 77fefdd..0000000 --- a/offloading_binaries/BypassL3_usb/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 "usb0" -//#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/BypassL3_usb/main.o b/offloading_binaries/BypassL3_usb/main.o deleted file mode 100644 index c305dbb6d66f3e00f15a5f097835bc716e0402e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4888 zcmb7IZERat8Gi4*cAB)==5^_oCT6>|-s+Xqxuofqbzw@HkG4ubvMv*mR*_!YH;q+) zVc$S9O`7RRl^6Ds=k49#n3ZLRm0d+)q(9mG76O-Pyyq4Qyn&StO9@j@xs zjJ&vX`e8#0)cj-{oGZ6p4SF|2uOD_-pI)kJ#<`-5i>O#(-=sXp-pV%h^Yy&;Bd;v4 z3LDMPBXiDk7j`UFRh@Od@iEat)yYHP!)iN;xK9*HN)~yLTnC4rP0+bP=p-?wVob(z z+c)+_W?PNHRJF*{4jLE zzC2fiJ%)|TZ5|s}?qK7}XV~C1Y~%WtJKMOrXMG&fU%r2QPB&TN(ndgt2 zSeIO!<9)})Ip!a`cnkR3F3z$42;A4(*f;i(&(0*y=p_8&GrAFHbai(_MuE&$tX+1- zF8uWp;@~w3)z&VEy6bc8JJ0v(o%PzmXF?4u6vG(fT&PB@IEl06I=ht+a&s0nr3*44 zA;a?LRTcLNvUIG3+I87GFYjF#Yr`MF=B`?9+mT;+Cc9vtjMuAe2F?PI&o$SvR@|Kd zjIqDRk%Qx~$9I`+p;mU>OAPF@g4}Q%LFhTodW_8!mkx+(n-c z`ux!6w(-dmW2k$bRUQ6w&hO^KGUS|fu+8-ddE9tU>!jcCLB0W8bL;l7Uz}52!qIsJ`G-`#R5YdG)GqDSAI@-6pm2D0+4_8~WZ zWJHGfu{h<1OMXc4#r zI1DWKh%Vy8?ewdWK^izW(C7XFSDW(wRbI@SC#}7Dq&qsFHS_u8ZoNM`Z(I52^!~VM zn>o|A(9LA+L?&$}_a@S|m76wW>jv{yI-XCwY&{3+R=Sg!n3?RhQ`zol;^cH9Y0+%jj3zDJ&ghw}mDcSUOXu+j zY8pMBoMs@}KQy#g5AQ$n;*)xB1Y*jkcN1G^;pHJCl6lmvaI3s(|7qP85nT625H_VKOS)ilDvb2SaC zzvSX6w4W!++}Gmp%OF9{x)Yf8WEe zdHC-<{0|=fClCLNhgUuPUmpH%5C7D|{jM$K{pj>?N|}jtBu1e)CDKos@px{^OwZT* z$xJ32<&zvTX==*3MN^4*;u{Up6R-E*cP3% zY&(&%GShK$o^qBMCoWlb2GuHQSy`Ief9UAG!9!C=M@L^6nV6aw+;?bX3O?mW=_+y- z#HG0@@HXT9L<7hpkB>8gpAfjn*p6DvxRvM{V+YYEj40tgwTA7C*pM#9PTUhQKF)~$ zYtIP&3M1q$2!2V-|C$jG@^yhX8G}TvC=tOg5b2DM!cWG>h$a|yqO6#IRm{ID=C6wR zWifwC%rD~o34RfAFm8iAM#QzsxE*x_B_J4re~gb4Een2|@d=_3N(RdvU_|_JM#Ohf z@GFcDL9gJejBUsh-Z_>JGHxL<7!hwjBlONOLhsv*kh{tVy*CAK#{K8K1sS1#m=XKJ zwQcJTH523z2qz|#U>6L?nOqQDEljxgR^!EqcuSHl*d8d1Gs^6w~Iqhynn97h4a ztYF{7L_1>BvA6u-@p_g+h=f!-9NXlyKe}}B0LyaYdd%{lC1*f}*T9t1Sl^21Gf4mX z&}TW8=k^OYhV7^~p5xD;KsoUd2jFTf!|i!|;9J%q_``DUH$=)|YwIzvtbY?8b?%5J l1{ulXuZz2Ey diff --git a/offloading_binaries/Normal_usb/Makefile b/offloading_binaries/Normal_usb/Makefile deleted file mode 100644 index b3b44aa..0000000 --- a/offloading_binaries/Normal_usb/Makefile +++ /dev/null @@ -1,23 +0,0 @@ -CC = arm-linux-androideabi-gcc -CFLAGS = -pie -fPIE -llog -#STATICLIB = -llog -l/media/Lucifer/android/ndk-profiler/obj/local/armeabi-v7a/libandroid-ndk-profiler.a -TARGET = normal_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) - -#$(call import-module,android-ndk-profiler) diff --git a/offloading_binaries/Normal_usb/main.c b/offloading_binaries/Normal_usb/main.c deleted file mode 100644 index dd709c2..0000000 --- a/offloading_binaries/Normal_usb/main.c +++ /dev/null @@ -1,131 +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 "/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 "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; - - 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("10.42.0.1"); - 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_usb/main.o b/offloading_binaries/Normal_usb/main.o deleted file mode 100644 index c7b98299b7202146f593dd51abbedd372ce1dbf9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3720 zcmb7HU2GIp6h5=Fi=}N~r6u%d#Zd|_Sf)c+v?7@8ACR;N0zMegWp;N;H|$?_rwGJE zLP;c1gHayP2fGO|A%sLUeISSl4?Y-zrVpABg0Z{HMid_;@xcdT{m$&%-C?wdx0(I! zcka38o^$TK=caEBk8Y79iA0kqNOeYZw%Ho-g)9hCGc6=-+uC26FT7Wp{Be6pnb}_Q zY#b>yYlEemBv(X#)-PASAD*gs!zX8FHcVBzw5G~6pdUzDq1+0TfNeGp0*`I3+G&8T zZWmvqO_nssUVEWX4%u@Qpjhvw)>4sZce#P+hLFud=EXeHKCH-8DE>7!cPBti=+mzu zt+NtdIaT>UmS+PlJ095ayX-W$?9k3a(d$E8{>}>9MNCB>){y_s8JTz62wUe_VKG-V?of$>0jAQ)L`jO(L z^{*D?5d7;a6juZb7GEJaWR{#!J67+rEa1{H{jei)P1qx>b?&rl zt>w@;I?r0~V&4NwXGMXp9wj#G2g-l55aXVL!z$XPh zu`c#$md}5ygY%tYF5>!bZtjxEqt}&RaYnvYT55M_8ux``b)F^M(IU>Ub*}lWYVgh4 z1H@#Fg)z3Xe&((?>|L10o)`9f*iWaOdtD>NF2vOa|M^bN=fh3tS@Yl*=W7X3i4v8S8n$?auFE*>Vg*R==d_M*ey ze7SY*)d`oqf6Kea-oJg&6?Mdm9Qlx6j*-u|o$oT|sCj0jq@DQc_Kc6n{}djDs~PCd1BDat+}-dR*_(mG8I^{Se>4q82N-PC)M znV6pJF;m%|Xk!0ZB5BY>T8}0T#mp#~tdUmCaYJFbikjdUi)GSjBW7B|c_Vkw$gx7+ zNXL~iJ&}a&%H$YNA=)}PxKRmieevbhN=SW9>DAVSw7%YFm0&h!=~v7-Uex*w8YygEtQtZZBo0`;aR?b)coO;sYiiku8QNL2Yae%95PAe z=tzy`^Q7i7RT9gjQbrnM>5OTpaA^X^WFB+-8tvD zeBY~1B;(K7WU@ER7Rux!yrqujqb8f-ZG<%+Edz32@Sr_j1<9K4ML`o>^cZDAHFGqX zYKoRr#_XpZF-th>O4N;-_pLhHFa@@kg%lPh9*{7yrz~r(OI@ z7r)}--@5n@E`Gzse{%6#E`GL zHuf>L5uIjiCu;TpJBY%JokZIh14R26A0v8`aXHa>dwkj+Z^d;DJWe#qs1PL?pCB?B zpCr1%i21h|7sDT1=KwY>#0b8P5w&^T=0_RvcouAak+Fs78e=Qbbw=3rqRt0a;A4dS zFeB{kWrY3rZGN6{Dg0o>I=30Sh<<0pe69oSD~Z~GGGvO4T{Z@R9jl1CZLZn4$wox< zPz@>KtsqRZ8voxC76g5SWi_N8|H)v?Vn7tPaZKdLfakLw*FU&yairC1ro$EsSeF~u zD%SrmJqsXKVxiz3%uBvveUmoMH-$qM_ANBsSTJw) -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#define _GNU_SOURCE /* See feature_test_macros(7) */ -#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; - - 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=0, sendsize=1488, packet_num, offset = 0; - int fd; /* file descriptor for file to send */ - int outstanding; - struct timeval t_start,t_end,t_now; - ssize_t bytes, bytes_sent, bytes_in_pipe; - size_t total_bytes_sent = 0; - - int filedes [2]; - ret = pipe (filedes); - - struct sockaddr_in servaddr; - - 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); - - connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)); - - fd = open("/data/local/tmp/bigfile", O_RDONLY); - if (fd == -1) { - fprintf(stderr, "unable to open the file.\n"); - exit(1); - } - - //setsockopt(sockfd, IPPROTO_TCP, TCP_NODELAY, (char *) &ret, sizeof(int)); - //ioctl(sockfd, SIOCOUTQ, &outstanding); - //printf("outstanding:%d\n", outstanding); - - gettimeofday(&t_start, NULL); - while (total_bytes_sent < packet_num) - { - if ((packet_num - total_bytes_sent) < quota) - { - quota = packet_num - offset; - } - - while (sentInSlot < quota) - { - // Splice the data from in_fd into the pipe - if ((bytes_sent = splice(fd, NULL, filedes[1], NULL, - quota - sentInSlot, - SPLICE_F_MORE | SPLICE_F_MOVE)) <= 0) { - if (errno == EINTR || errno == EAGAIN) { - // Interrupted system call/try again - // Just skip to the top of the loop and try again - continue; - } - perror("splice"); - return -1; - } - - // Splice the data from the pipe into out_fd - bytes_in_pipe = bytes_sent; - while (bytes_in_pipe > 0) { - if ((bytes = splice(filedes[0], NULL, sockfd, NULL, bytes_in_pipe, - SPLICE_F_MORE | SPLICE_F_MOVE)) <= 0) { - if (errno == EINTR || errno == EAGAIN) { - // Interrupted system call/try again - // Just skip to the top of the loop and try again - continue; - } - perror("splice"); - return -1; - } - bytes_in_pipe -= bytes; - } - total_bytes_sent += bytes_sent; - sentInSlot += bytes_sent; - } - - 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++; - - /* - for(;;) - { - ioctl(sockfd, SIOCOUTQ, &outstanding); - printf("outstanding:%d\n", outstanding); - if (outstanding>0) - { - usleep(100); - } - else - { - break; - } - } - */ - } - 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/Splice_lo/Makefile b/offloading_binaries/Splice_lo/Makefile deleted file mode 100644 index 8b890ac..0000000 --- a/offloading_binaries/Splice_lo/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -CC = arm-linux-androideabi-gcc -CFLAGS = -pie -fPIE -TARGET = splice_lo - -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/Splice_lo/main.c b/offloading_binaries/Splice_lo/main.c deleted file mode 100644 index 2268c14..0000000 --- a/offloading_binaries/Splice_lo/main.c +++ /dev/null @@ -1,172 +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 _GNU_SOURCE /* See feature_test_macros(7) */ -#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; - - 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=0, sendsize=1488, packet_num, offset = 0; - int fd; /* file descriptor for file to send */ - int outstanding; - struct timeval t_start,t_end,t_now; - ssize_t bytes, bytes_sent, bytes_in_pipe; - size_t total_bytes_sent = 0; - - int filedes [2]; - ret = pipe (filedes); - - struct sockaddr_in servaddr; - - 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); - - connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)); - - fd = open("/data/local/tmp/bigfile", O_RDONLY); - if (fd == -1) { - fprintf(stderr, "unable to open the file.\n"); - exit(1); - } - - //setsockopt(sockfd, IPPROTO_TCP, TCP_NODELAY, (char *) &ret, sizeof(int)); - //ioctl(sockfd, SIOCOUTQ, &outstanding); - //printf("outstanding:%d\n", outstanding); - - gettimeofday(&t_start, NULL); - while (total_bytes_sent < packet_num) - { - if ((packet_num - total_bytes_sent) < quota) - { - quota = packet_num - offset; - } - - while (sentInSlot < quota) - { - // Splice the data from in_fd into the pipe - if ((bytes_sent = splice(fd, NULL, filedes[1], NULL, - quota - sentInSlot, - SPLICE_F_MORE | SPLICE_F_MOVE)) <= 0) { - if (errno == EINTR || errno == EAGAIN) { - // Interrupted system call/try again - // Just skip to the top of the loop and try again - continue; - } - perror("splice"); - return -1; - } - - // Splice the data from the pipe into out_fd - bytes_in_pipe = bytes_sent; - while (bytes_in_pipe > 0) { - if ((bytes = splice(filedes[0], NULL, sockfd, NULL, bytes_in_pipe, - SPLICE_F_MORE | SPLICE_F_MOVE)) <= 0) { - if (errno == EINTR || errno == EAGAIN) { - // Interrupted system call/try again - // Just skip to the top of the loop and try again - continue; - } - perror("splice"); - return -1; - } - bytes_in_pipe -= bytes; - } - total_bytes_sent += bytes_sent; - sentInSlot += bytes_sent; - } - - 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++; - - /* - for(;;) - { - ioctl(sockfd, SIOCOUTQ, &outstanding); - printf("outstanding:%d\n", outstanding); - if (outstanding>0) - { - usleep(100); - } - else - { - break; - } - } - */ - } - 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/Splice_lo/main.o b/offloading_binaries/Splice_lo/main.o deleted file mode 100644 index 59f706cb81a3ea9d6c48b4e577b444f4c77b5a33..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3884 zcmbVPU5pb|6h6~w5!e+fyM+CzFvu=02xWFHxFC}5FC<$8VM$0t%WON#HuNv;tO73* zFp+2oMtM*lpot+NW*>M!V#u1T2@gOp*#{B{;bFUVBB&3TkjRVH?@Z^m!zhT}P5a&N z+;h*IpL@@A-y4VwN|HokNYp_!MihD0TJeP}=%9Lbcv&}_Zh zH~WBOQ_LUwWpixstmzG(nu%{XYj&u0=6;|bNNSf`uLo*_DbeoIT%y}mUm^3tKB=FY zVov~jWTKxptF7il`&si7S)K{NzSzTdJh0<;*_rFILpuw_tPk<~TTS)_u@`;tOZHcM zW6nA8P@yFG3nfwtCD!Z5^F=Ic5DUvmIbQMeDdxgY4|FGkeZ~8sv!<+`ni28AUQy`W zRb=xf)-Q#IikCuf7UdB9>n;>mbQCPULU70|Iiq^4HfLRYJgZSZrFZu7mfoV%_kL_!Lx=OyjJ=yJ+3BCoBgec)qRL+JEU#U2Ve@O$ zFQBxVZLsT6Vl#fAOuLGx>uQ#VS+26Y&fEiCk&jzb4W=LKjrKaJCruyDsuvhRENs6X z`9tk2-}l1zz0jq~dAKg>%;(7qnU`q3Q&tBVu2M@ko|$~vRTp)pbPaO0r@*f^hhKM; z2FUOnhd($sMfRs3{tAEg!JmEq!=HJ0)=bym{W%A@0{d)}^TmEyejtt?%H`|qYa7;a zCT92!He${)=6uhYi`<_pmoJNYHM;60@_!R?iuo13XLzRb+)B7J95eX@|Y3$Jq12o)7k%b{@136*~||6a44<|2Q9RLa$n1s-_LlnO++KCq zdt7dvwL0Ol_fL8Ege&#i4_(o-yvPympp|F7gLb}49Ao|T(5!mm+q>~OME)0Xv#x*f z>imy96z*L}^**9~&k=owOZYK9JZ_)?gz-80ez1qar@~h&;wODeog2G?og2D?ox#ra zthg?&8QQvJCZ;9V8L8~Lk;H+~L{g{mv^J8|6(gf$vU*xE#&m_{LG(1rXOoGTPSl

F(kDo#3V4%FcE9kzWx+GX9)H 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 diff --git a/offloading_binaries/c2s_bypassl3/c2s_bypassl3 b/offloading_binaries/c2s_bypassl3/c2s_bypassl3 index 4e18bfc858117668b1976954d29a6911ccccc9b0..ee583f97ceec9c60f371dcaac0ddfc02c410933b 100755 GIT binary patch delta 10375 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 Q#cb40{eiIu(52A-2Dxhvga7~l diff --git a/offloading_binaries/c2s_bypassl3/main.c b/offloading_binaries/c2s_bypassl3/main.c index a225072..072158c 100644 --- a/offloading_binaries/c2s_bypassl3/main.c +++ b/offloading_binaries/c2s_bypassl3/main.c @@ -77,28 +77,42 @@ int main(int argc, char *argv[]) int sendsize = 1500; // 1500 MTU (raw socket) int bytes2send = 0; struct stat st; + unsigned char my_dest_mac[6]; - if (argc < 2) + if (argc < 3) { - printf("Usage: %s <[optional] bandwidth (bps)> <[optional] sendsize (bytes)> <[optional] interface>\n", argv[0]); + 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); + if (argc > 3) + quota = atoi(argv[3]) / 8 / (1000000 / slotLength); // set sendsize (if larger than 1460 will do packetization (fragmentation)) - if (argc > 3) - sendsize = atoi(argv[3]); + if (argc > 4) + sendsize = atoi(argv[4]); // set interface - if (argc > 4) { - strcpy(ifName, argv[4]); + if (argc > 5) { + strcpy(ifName, argv[5]); } else { strcpy(ifName, DEFAULT_IF); } + // adjust slotLength to address packet size issue in the end + if ((quota % sendsize) > 0) + { + // printf("quota:%d,sendsize:%d,slotLength:%d\n", quota, sendsize, slotLength); + slotLength = (quota / sendsize + 1) * sendsize / quota * slotLength; + quota = (quota / sendsize + 1) * sendsize; + // printf("quota:%d,sendsize:%d,slotLength:%d\n", quota, sendsize, slotLength); + } + else + { + slotLength = (quota / sendsize) * sendsize / quota * slotLength; + } + // get file size (bytes2send) if (isNumber(argv[1])) { @@ -153,6 +167,16 @@ int main(int argc, char *argv[]) // Set mem memset(sendbuf, 0, BUF_SIZ); + // parse input MAC address + sscanf( + argv[2], "%hhx:%hhx:%hhx:%hhx:%hhx:%hhx", + &my_dest_mac[0], &my_dest_mac[1], &my_dest_mac[2], + &my_dest_mac[3], &my_dest_mac[4], &my_dest_mac[5]); + + printf("destMAC:0x%02x:0x%02x:0x%02x:0x%02x:0x%02x:0x%02x\n", + my_dest_mac[0], my_dest_mac[1], my_dest_mac[2], + my_dest_mac[3], my_dest_mac[4], my_dest_mac[5]); + // 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]; @@ -160,12 +184,12 @@ int main(int argc, char *argv[]) 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_dhost[0] = my_dest_mac[0]; + eh->ether_dhost[1] = my_dest_mac[1]; + eh->ether_dhost[2] = my_dest_mac[2]; + eh->ether_dhost[3] = my_dest_mac[3]; + eh->ether_dhost[4] = my_dest_mac[4]; + eh->ether_dhost[5] = my_dest_mac[5]; eh->ether_type = htons(ETH_P_IP); tx_len += sizeof(struct ether_header); @@ -224,17 +248,14 @@ int main(int argc, char *argv[]) // 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)) { - 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)); - } + // 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_bypassl3/main.o b/offloading_binaries/c2s_bypassl3/main.o index 5d21121a46626c27a7c68b0a6b215fbbcad515d3..3cfa60958e1524f6f8516fd243cd6ba5855859dd 100644 GIT binary patch literal 6388 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 Vi31`h$8LKKsI@^k7~19Q{{hg8QE31G delta 2244 zcmZ{lT}WGJ7{{M;a#BB%)YzoSQBO71%tQ_LSnEff8_{)a)_pK1Tg$pJ=*C9b#YXi) zkfuy8T9DTAcu~rz*`3|Wa8y_e4utJO#x8_;A;pWBG|X;exZ#BtQulw76F&}2IQhN* z=R6c#(nLzVb2{rVZ>FRSd6O9_6@@)&R$;Z5Gi^kb zTOE5o3Va$v$;^5O|Lv$&;_T6aC-(<<5U^XiP&CBZiCmJY-)CqnJ>J3ZXthd|N3@!9 z+2i=W3MSvvA_4C{i`4X^=0-be26$T=Y@P~WN}>GD;3(H9e=y%%Z9h2GD8kOQ^A+c% zX6=7MHrft`G$3T5EmtXaD9nRJpP%W*X6P_e=%=iVQ8}Yn{-$~dg?2*#Q< z9)Qn-&f=Joh=r=Moyee?7gJHnWy+oIS44l9co&v;p^GV9s?fligQ#)Wju`2jUifyx zx95d?%j;-+bzv;EKez0S?ybri$fF=ma;avry2W88k4s^hu(aGC85bt|aA&8hFj*V6<5FW6hcG% zmaBDl6y-K|885i}$0SuKH`lSWT*v)sKHz^`?<&jO=Z+|0{=(hr88!EgEX?1#eILt` zq;=(5ODp@A`qLZNeq7%wA@W8DSN6{Ht4^ZZ(DB|f(!kkbq8U8$_aWGcN5|88ohXUx z7y-M%m_~GUytyaJEuNS8x@Uk_J?jtjvIRw*FXhMHONlq~Npinl{Jv+?pW5`WO^@63 zEt|e;)89f*;u*#Nq9df3G;4GC!KUXAYW}UfC9!0Y)g9ZxPbd62d+jPvPd-^pC6qXS!S|l}ZKO;1V zt_csLF)aI{@EFmyu$oB2ZIparA?zOsYluFx?Bl`^;=zQ02`q@=IMJpM3ATkuprfOV zT6ChYj_86gOf(^c-;@x3vqJc-2;sLW3}XW5Wbum$;rFT#eg?YLcn-RV5@gg9{VWDh z+S-U9Ko})DC&bL9?TrSaIUxcUg*coi!g8YGlDsyAM{pg4KB7UPpJ>R^6T+joHbQ*; z?w2GmXdp_70f{$-NbE(&3S+_`c0h>47lcSWWZ7>Ev4crrBkrlid9b31=vUBzRWDmy zvAAk6bsB@p7*=8#)-C>Jans_qMZ&jK5*EAoaIjZ(yLcd2>)gN|#CarGr^a1;H&~xX zfLDXwLvchrQTX3rts3@lK(ANNdiX`X-gy?Ez$X4W=;Kk{s}6hk28=5(F7YG1&N+kS Jzrt&}??0ta4@Uq1 diff --git a/offloading_binaries/c2s_normaltcp/c2s_normaltcp b/offloading_binaries/c2s_normaltcp/c2s_normaltcp index c56ec8f16ea04353764877964745c2f33419d767..22f058ebdc5633723733f92f4ed7b60c2d81279d 100755 GIT binary patch delta 6585 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 5) sendsize = atoi(argv[5]); + // adjust slotLength to address packet size issue in the end + if ((quota % sendsize) > 0) + { + // printf("quota:%d,sendsize:%d,slotLength:%d\n", quota, sendsize, slotLength); + slotLength = (quota / sendsize + 1) * sendsize / quota * slotLength; + quota = (quota / sendsize + 1) * sendsize; + // printf("quota:%d,sendsize:%d,slotLength:%d\n", quota, sendsize, slotLength); + } + else + { + slotLength = (quota / sendsize) * sendsize / quota * slotLength; + } + // get file size (bytes2send) if (isNumber(argv[1])) { @@ -163,17 +176,14 @@ int main(int argc, char *argv[]) // 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) { - 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)); - } + // 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/main.o b/offloading_binaries/c2s_normaltcp/main.o index 1360fc87a17329a764d6af41f86bb9b6b2f249de..0f95d9c0371472fbedb8413e5c024bb29399026a 100644 GIT binary patch delta 1754 zcmaizU1%I-6o%iK+1V_+`I$|O*<>f(aWn32lf9VOEv?#O=!LCBq_#H|6h(tjiL}8V z6qE%UCB%hp{UQ`8W|3Uvq9Rg-UbLVWLM?is6s!;=+jSIdE-Ln_G{*N#CT%i^4$M5? zd(QdJIp5DryR|~y(aY&m`OACH?w|K#V<(pvcg_15FXbq=vw?IiI_Wv)W zI`v2QR=A$}&UxSPP6mC!YP6)UGVNui(eO&E0t_7A6r(X_*lDz$Q>XM@W)P{q*K?h* zAZG6OMVz>HyP|ICd9ADljcmHYelJw+7O9+j%qVJFO-;pmv`O`DtoY#jTuz1iQ({fs zd12Wm4IFA3!0;WrC-#)TQj+WJNp+W@Nw;POWge_;ZzQjhKHLMBc-UwJOkzQA`n z2An0RGrPqc?>20Z;QP*?C|_ z$iz2=Lx9U`#>6NKnRk!SWj^8kz*S)ZSP>ShJbB(xDd-4G+yNmcydg{jbHZ-me5k(@ z_Ar6)9w5g1ZuhdVka~~sUf`gxkBthMw=QJf1tIf(C9HC=B!diaL&(JKyo!>@71Dk{ z$Rj!^+|Hc}IZ5^p184H9+R8OP}=4=ueQJ-5qs+P9&FO%wH8Z#-b SPkoynGOu<3kE=h^J^ujXRCj>@ delta 1614 zcmZ9LPiP!<6vw|av$MN#n{;NgNjKT4JK2o8o3P5%Y)Wcdh%I>8wvfF4lCr~#m4tGlP1o<%;$aI z@6CI^dA~Q)`6*}CRvqI??(Xr;SLXf5=uEA7c-}9&34eo`X2SK>EvCY>1MM(Zc)b*8 zmj;xA>gDO2^0s~~$_eO>l2Ow1P#KDpknpc+7A-|0^pEQ3E^Ckaw9b5yt)iRp6}-1z z26{gpp7%9(rl!HGD~7i|XnX4u!*oXPrU}i~TjBJXmhDKj0j{&E@iLZuhnsDJWfYL%S|1XLGp^>9k%rG6VeO z+8N*B&8haKTAHchTwMbOpZZ<#C;VZKEpcqx$oLl3^=#MPt?XT?w9maL6}R{8(UEB3 zn8R;s?k6?r=qOjQ0xcaEd#CabTU#&fRF<8*4BVjU=#*aOmuxy6E7I{;;;E_}lms@f zDeh!Lj&1MD@6y+?YFs{U@{m`jW-LwPF@wh9#+#0j@z&pkp7DGEZ-MnKoZIc+zJJJ6Vi(z{cTA9NI&h%_Wd04 z{uS@nbH$z@U*>%XrM?*Rh(w!mQ8`5@2AO63lU)n1))bV!}C0?+4fU>X`7!ziI zY2kigF5rW}zbWkCTiuQ;3oYQX@E|ZD<(RP~su6a=;rxPCO>$#P19HIib+uq2qzFo&y|V9ylxHf)|85kT-=Kza-?=t_e+P zF|*2!lo(0wfUpxdB}@V1fu0g}0oR4yz!ySJyej0x8$!+#=Q$EO!UMpFkn^4wa^CU4 zKP%*pUuV8%6#-8i%mrr80PsCi<6SNXTnYGq**nOE1HBfo7VuHPjTY&U*-y=QjLw@W zwHc##%v|&oAKa=!SIwN_&~N4eS~iWARp6(dET}iz=!Ilnz28Q^o82^?G{pQUnb-eq g1Ky&#*-48@L%;Y8aEtCG`_o1{aFj=4=h`v<1KOWOX#fBK diff --git a/offloading_binaries/c2s_normaltcp_sendfile/c2s_normaltcp_sendfile b/offloading_binaries/c2s_normaltcp_sendfile/c2s_normaltcp_sendfile index fa25959700185e59411e5b179cd6f34e0c8ad019..9947bbe2eccedc98838074dfb0f1bc9e56fda9a3 100755 GIT binary patch delta 7418 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 delta 7130 zcmZWu4_H*!mA~)K2*ZB_g9G!I;Q`}_!-$xm6&;kMM2$g0{7j^Zf(DfsYyh=2&O}_- z?b-x$*~*vJI@xx&#P|mtliF5Ylk&B0mo#K+yLQ*4pt4OgNo`{r%&N1$^Zww=n={9xmN*D_;HWt|Ttxd^erTC@XQ7*ldICJp9gQMo)i^Jz< z9vm$Rq>K(gS|M2=a>WiQLAo_uqe-uL*D^VGZ{fjF?tXEYv&e`kGcxj6EOwo-$d!5_ zCAp+WMShZNX2k?}&9sd!lh}259GRfm)@hh}x*D*Jngd;zSwM`Mpg$;9C%Zyr@aAPH zqr>F~M@@kjhe^XSBUehn%iv|SlGw9XN*K#KXRwiA<8w!@^ebG?AN%0B5N#wxmIoQ% z8~G&O=re_}P~NzqTZ}gA&REyw2E8*3IZJbFhP)J5bXjJ$QA$MyVc((=jv;$7#1g#? z2H{0I{(3id9cjBl!7>D!0Q&$2)dnAgnOp2gnJ?WGZ>HEB{{v&n-H92CaIY9Kl_TF3 zk&yx~IB_dwMkt_ln~A2s*Q^

`F3YhstN%%O7>;hRq~}Q*(0`_LQ3_WG%Ya^ZYB| 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 diff --git a/offloading_binaries/c2s_normaltcp_sendfile/main.c b/offloading_binaries/c2s_normaltcp_sendfile/main.c index c3bc334..c92c6f3 100644 --- a/offloading_binaries/c2s_normaltcp_sendfile/main.c +++ b/offloading_binaries/c2s_normaltcp_sendfile/main.c @@ -27,17 +27,6 @@ #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 "lo" // #define BUF_SIZ 8192 @@ -74,12 +63,13 @@ int main(int argc, char *argv[]) // struct sockaddr_ll socket_address; // for misc 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); } @@ -87,6 +77,23 @@ 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]); + + // adjust slotLength to address packet size issue in the end + if ((quota % sendsize) > 0) + { + // printf("quota:%d,sendsize:%d,slotLength:%d\n", quota, sendsize, slotLength); + slotLength = (quota / sendsize + 1) * sendsize / quota * slotLength; + quota = (quota / sendsize + 1) * sendsize; + // printf("quota:%d,sendsize:%d,slotLength:%d\n", quota, sendsize, slotLength); + } + else + { + slotLength = (quota / sendsize) * sendsize / quota * slotLength; + } + // get file size (bytes2send) if (isNumber(argv[1])) { @@ -157,17 +164,14 @@ int main(int argc, char *argv[]) // 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) { - 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)); - } + // 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 ff4a4a23e7c66c763a98d7ff0ee509a9c4f9925f..7def226465a4ad2376a2e66407b0194518815b28 100644 GIT binary patch delta 1985 zcmai!Uuau(6vxlKH@E+?C0T7<)_c3$CNWDx(W?zowUthE#6@K|(Mmf+O~FXk4$?^{ zm8h%Qhrz193AGFw#fLsrEm-c3?Gk<8t_Vk`D&D}d=2TiX%3+f=5#j*iPVAPRQ;2G?9 zII<~rOMB&9OvI$8)nE+*h&Lpy!0shevsF4;R*8OG#k$Eny+Wq26)IXcH#UCnATPpb zwr*&)44o3#)Z;jd;J1&cp|Ve!UEM=UmV`JR@Oe*BN*qfMXg0^=J;f+mK~pPKHo2Dn z3&4r`iPrwjj)SrOKMvYDhYR#<6(~NHVm&76yONx-74vK*PYM*voM#;RILsx=mph1B z7IxT3ut^xj^2cJ2d{_HUOD`<94l#t?SMfUc>nxpKIU=&M))U{+r)!C{C8HlE$}@Jv zH=SOg-(^0Fa2Ds36c^=u^I~V(TI}q%lq5RYRkR}UqO~XX;+d%O?s~Z7#pf|n@jDML2&*R7W_0%tpBTvw4?UkdX5ocFC%E#2Y%ON!w~}LBu5|T(aqs4~e(D&(@vH zX0opwAI^xY-oFZUFwt9Zi%gA(U38tOkBNVlmmE$y`dKE<{>ssp9D3wU`woXGhbNf$ z3?`X~JIll;bd9;63be`#9DKvsNMc0v5K%W1`p1|CQI3g3$CzzI%giv*A4~*JVZ8JR z(I|62#*7L7NoEuWGVdU|&Wz#3Na~>iQIr>$;XWn|bId)MWo9GMoFgwWZzC!(n~2t# z%|t=WJj*8YcA|%wdx?%P5qF%4xKm8TU2wR}ECh*Gd4a%$x#B=UCiGoQRNTvqqe6!R z;J$Vw3Mxoq#NnvJF|Z|p4mk3-!wH9H9G(MZMHL_VLSo+M6-&M*d8$@?=L^@Y??yVZ zxakYamup4XA7dQ$$JER4851Y{5jj;arlB9I7hi5-4fvp5GzMboje4Sa(G!RS=XMdL KF(TEcy8H*1@bc*Z delta 1650 zcmZ9MUuau(6vxl+-Xx7l+-}!&{gcexHtCkmGOsq1Fd4K1A(}D7jj6Os#WG|FB2(;x z&}sV+p|F(Ghca4wl|4*UD0Th=g$g1?_Rt3h!Ybq@y*Q^28}wnwT>YNp#+G~G=JWfW z-}#;2Ip_Dw{VjdZESuW=p4r~7PhEd{$qfu$s;nJdatExa`xDp+l4aMDpaM-#7d&Rc zij{D6I$aAB{j!NMS?tdA@ey@4m=7Wpf2a~%*7E&Xf^%-k)vZevoot5;yY^sv`>zb_ z87x$Ep*BF&y~=mBHnq$_{jvVtb5YF61_5iTN+!GG^;mO%T&1b%D8H;H`Z9!64BL^Y z8;6UIX4#IUIIwHiEHCOE%Hpr|3+*d|MQ3Gj#L;uMqvvfWowc16J{}mv{9A!Udv0(i zTZL>*)2_w&YsltEW*Rba#D{F@%!P9FW(G5u4xk?{v>jK z@>FAG{nxI5zO9KP}C?|u45pZ=M@h^BgO z_^da5y2}5;Ys+ULvitPg7q`;hPvqJj|i7lkRJ2_g0?2~F(3A%h;GdqQk{ z2B)6vZJfRYo)L`z3&J!u6lRF-3;U2TZi;MV2@evzEref5h?ZOtwi2y*dP9f{e_uG+ zMij@DOU8+ELgTw4zDlSXf7J%+j! zzhd-in<0Mi(0-mbjOK9FFoK&{I?6YUv^Esxe~g3Lxp3Vr-)aQU;XD5*t4JG -#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=4096, 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]); - else - packet_num = 166666*1488; - - 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); - - connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)); - - fd = open("bigfile"); - if (fd == -1) { - fprintf(stderr, "unable to open the file.\n"); - exit(1); - } - - gettimeofday(&t_start, NULL); - while (offset < packet_num) - { - ret = sendfile(sockfd, fd, (off_t *)&offset, sendsize); - if (ret <= 0) - { - printf("sendfile fail\n"); - usleep(100); - continue; - } - offset += sendsize; - } - gettimeofday(&t_end, NULL); - printf("time cost is: %lfms.\n", (t_end.tv_sec-t_start.tv_sec)*1000.0+(t_end.tv_usec-t_start.tv_usec)/1000.0); - - close(fd); - close(sockfd); - - return 0; -} diff --git a/offloading_binaries/Splice/Makefile b/offloading_binaries/c2s_normaltcp_splice/Makefile similarity index 74% rename from offloading_binaries/Splice/Makefile rename to offloading_binaries/c2s_normaltcp_splice/Makefile index e472f73..d1954c8 100644 --- a/offloading_binaries/Splice/Makefile +++ b/offloading_binaries/c2s_normaltcp_splice/Makefile @@ -1,6 +1,7 @@ CC = arm-linux-androideabi-gcc +# CC = gcc CFLAGS = -pie -fPIE -TARGET = splice +TARGET = c2s_normaltcp_splice 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/Normal_usb/normal_usb b/offloading_binaries/c2s_normaltcp_splice/c2s_normaltcp_splice similarity index 53% rename from offloading_binaries/Normal_usb/normal_usb rename to offloading_binaries/c2s_normaltcp_splice/c2s_normaltcp_splice index 55edd0444e1ce6fc5a0732a5adcb428c749ae78f..7435d5c8d664518730683ce4bad4288d67d1e7cf 100755 GIT binary patch delta 10752 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 delta 10066 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 gUycYc +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +// #define _GNU_SOURCE /* See feature_test_macros(7) */ + +// #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 "lo" +// #define BUF_SIZ 8192 + +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; + uint bytes, bytes_sent, bytes_in_pipe; + // 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 + struct sockaddr_in servaddr; + // struct sockaddr_ll socket_address; + // for misc + int ret; + int sendsize = 1460; // 1500 MTU - 20 IPv4 - 20 TCP + int bytes2send = 0; + struct stat st; + // create two pipes + int filedes[2]; + ret = pipe(filedes); + + 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 1460 will do packetization (fragmentation)) + if (argc > 5) + sendsize = atoi(argv[5]); + + // adjust slotLength to address packet size issue in the end + if ((quota % sendsize) > 0) + { + // printf("quota:%d,sendsize:%d,slotLength:%d\n", quota, sendsize, slotLength); + slotLength = (quota / sendsize + 1) * sendsize / quota * slotLength; + quota = (quota / sendsize + 1) * sendsize; + // printf("quota:%d,sendsize:%d,slotLength:%d\n", quota, sendsize, slotLength); + } + else + { + slotLength = (quota / sendsize) * sendsize / quota * 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); + } + + // bind socket + sockfd = socket(AF_INET, SOCK_STREAM, 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); + + // Splice the data from in_fd into the pipe + if ((bytes_sent = splice(fd, NULL, filedes[1], NULL, + quota - sentInSlot, + SPLICE_F_MORE | SPLICE_F_MOVE)) <= 0) { + if (errno == EINTR || errno == EAGAIN) { + // Interrupted system call/try again + // Just skip to the top of the loop and try again + continue; + } + fprintf(stderr, "! splice error, errno: %d.\n", errno); + exit(1); + } + + // Splice the data from the pipe into out_fd + bytes_in_pipe = bytes_sent; + while (bytes_in_pipe > 0) { + if ((bytes = splice(filedes[0], NULL, sockfd, NULL, bytes_in_pipe, + SPLICE_F_MORE | SPLICE_F_MOVE)) <= 0) { + if (errno == EINTR || errno == EAGAIN) { + // Interrupted system call/try again + // Just skip to the top of the loop and try again + continue; + } + fprintf(stderr, "! splice error, errno: %d.\n", errno); + exit(1); + } + bytes_in_pipe -= bytes; + } + + total_bytes_sent += bytes_sent; + sentInSlot += bytes_sent; + // printf( + // "after: total_bytes_sent %d, sentInSlot %d, quota - sentInSlot %d\n", + // 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) + { + // 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(sockfd); + close(fd); + + return 0; +} + diff --git a/offloading_binaries/c2s_normaltcp_splice/main.o b/offloading_binaries/c2s_normaltcp_splice/main.o new file mode 100644 index 0000000000000000000000000000000000000000..959d2c94959d9d54ca2d2a8cd83434da6fbbcb8c GIT binary patch literal 4928 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 delta 6350 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 LzlwK4wYL8Q2e-k1 diff --git a/offloading_binaries/c2s_normaludp/main.c b/offloading_binaries/c2s_normaludp/main.c index 7b0afef..bcbf5dc 100644 --- a/offloading_binaries/c2s_normaludp/main.c +++ b/offloading_binaries/c2s_normaludp/main.c @@ -90,6 +90,19 @@ int main(int argc, char *argv[]) if (argc > 5) sendsize = atoi(argv[5]); + // adjust slotLength to address packet size issue in the end + if ((quota % sendsize) > 0) + { + // printf("quota:%d,sendsize:%d,slotLength:%d\n", quota, sendsize, slotLength); + slotLength = (quota / sendsize + 1) * sendsize / quota * slotLength; + quota = (quota / sendsize + 1) * sendsize; + // printf("quota:%d,sendsize:%d,slotLength:%d\n", quota, sendsize, slotLength); + } + else + { + slotLength = (quota / sendsize) * sendsize / quota * slotLength; + } + // get file size (bytes2send) if (isNumber(argv[1])) { @@ -165,17 +178,14 @@ int main(int argc, char *argv[]) // 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) { - 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)); - } + // 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_normaludp/main.o b/offloading_binaries/c2s_normaludp/main.o index 8d1919e1dc782ca00226581937330c92a8001f21..9576967274b4fbc05dcb7705ccf65559af2047ad 100644 GIT binary patch delta 1756 zcmaizU1%It6vxk<*~u>1Y&x4J-E4N!ohI9zY23oJ9ck4B*FI=Nz=sy3LZJ`Fk4VId zA5>7c*eWYT+U8bJDP$-`@=&l+9~5GV(1%j!ixfmCvfFi3Yzqx|RKX#Ap>2Q>H4qrY(TZV~ZU*(>|UY*Gs&t~e|IqgbGGxB}Iskm6F zdv7=R)~m>3E6rWO<96nY%gYbSCF7XEH&c?Ib-1Rw;vQUa+c+`E>q>Cp3+9e$SIgBu zC-cdgaOFqIhx=Sqd%ZLfHOns48y&K|oy={$lq518BD(VNLo*mxcdsL_gUH3pPs1Qu zzZYdEQ}Re>uiTz~qPB0vDf*iD9*pVfn0`H`-;L=HV){%>f4Wu=(E2geO zU8{R&$65o8%Y5d^)T>jIQ?I@7;-s9)+}%)ti#0&xGYdqMOiRAiovT?yw^*UHlm_CT zEh+9%Jft|IxWMct`hkh{e=-Mgy7&{UjYPYc$g-aa`-jXTQK0N!Fl{sqSmUym*szJ{ z0J_H-BC0bH_zrUz1);MzaD|D$qs$TlGB?AIS;hv?jTXApXCmP!(g#RgKmgqba zzsR)?szrvM*{~h~(Arink10quTkV2J+K4f=0Slfzuh>!;{o|DWrbr$aZ&VT02 zf6v}~XQ|-3vyN6Z=lXAsnJ+H}vFgQ*_GcG^iq{q-nOP=0ziBfS(+Rc9>>l%*tak8!hLyz*FL zy8Nc@eYhbTTIE&jP|Jo(+*e$ORpzi z1J##0P-Twrkl&^O+~RR12CQ8BBl$qn))Mq{+dH)rdj-3*$@7_ro{H!XBKkr^&qeg- z5&Z@0Ssv%OV++c{)kwiN^mTjZ;Z{;wT5SoY=pU%wp6~l9lKnNJ8+0U7G33+>_h3qpM=GTNz0_$OZQwgpS)@}>aJopOQHBNXESioz-PW~st zE?_3qzAytU3lDLFLN?wKvT>4cj2OEitHN&Jl#qR=h3q>M=C25O$CsI>?Go^p0K1vV7r}(JW6@8WNSEF=0UEH0! y$+S$4`mCb%{Q-K#Drol)(0hAWunH