diff --git a/cpu/a.out b/cpu/a.out
deleted file mode 100755
index 42ff03228098fea0de181c79488b2422125b5273..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 6251
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

diff --git a/network/ocli b/network/ocli
new file mode 100755
index 0000000000000000000000000000000000000000..221967ae3dc7c99b79ae188e1431db3d814d07ad
GIT binary patch
literal 9160
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

literal 0
HcmV?d00001

diff --git a/network/oser b/network/oser
new file mode 100755
index 0000000000000000000000000000000000000000..4ccfe1e8552aec7988de0f0cb0e449e90b5aa572
GIT binary patch
literal 13496
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
b?01?4mR{$<_BKWC01V}~;>JG!Sh4>AQ5b?h

literal 0
HcmV?d00001

diff --git a/network/overhead_client.c b/network/overhead_client.c
new file mode 100644
index 0000000..241fa1a
--- /dev/null
+++ b/network/overhead_client.c
@@ -0,0 +1,70 @@
+#include "../rasperf.h"
+#include<stdio.h>
+#include<stdlib.h>
+#include<arpa/inet.h>
+#include<sys/types.h>
+#include<sys/socket.h>
+#include<netdb.h>
+#include<string.h>
+//Macro definitions
+#define handle_error(msg) \
+    do { perror(msg); exit(1);} while(0);
+#define BACKLOG 50
+int main(int argc, char*argv[])
+{   
+    int socket_fd, rc;
+    float start_delta = 0, close_delta = 0;
+    if(argc<2){
+        handle_error("<usage>:tcp_client <IP address>");
+    }
+    //Retrieve the protocol number mapping 
+    //from /etc/protocols file
+    struct protoent *proto_entry;
+    proto_entry = getprotobyname("tcp");
+    
+
+    //My address information to bind to
+    struct sockaddr_in server;
+    memset(&server, 0, sizeof(struct sockaddr));
+    server.sin_family = AF_INET;
+    server.sin_port = htons(8000);
+    
+    rc= inet_pton(AF_INET, argv[1], &server.sin_addr);
+    if(rc == -1){
+        handle_error("Address Error");
+    }
+    time starttime, endtime;
+    //accept incoming connections
+    int addr_size = sizeof(struct sockaddr);
+    int i;
+    int protonum = proto_entry->p_proto;
+    for(i=1;i<=BACKLOG;i++){
+        getTime(starttime);
+         //Open an socket end-point for this TCP Server
+        if((socket_fd = socket(AF_INET, SOCK_STREAM, protonum))<0){
+            handle_error("Socket Error");
+        }
+        if(connect(socket_fd, (struct sockaddr*)&server, sizeof(server))<0){
+            handle_error("Connection Error");
+        }
+        /*The end calculated here will miss time taken for ACK K+1 
+        from the client. And so we have to one way delay
+        measured using another experiment*/
+        getTime(endtime);
+
+        //Calculate connection overhead client
+        start_delta+=diff(endtime,starttime);
+        
+        getTime(starttime);
+        shutdown(socket_fd, SHUT_RDWR);
+        getTime(endtime);
+        
+        //Calculate connection overhead server side
+        close_delta+=diff(endtime,starttime);
+    }
+    printf("Connection Setup =%f us\n", (start_delta + RTT/2 * BACKLOG)/BACKLOG);
+    printf("Connection Teardown =%f us\n", (close_delta + RTT/2 * BACKLOG)/BACKLOG);
+    return 0;
+}
+   
+ 
diff --git a/network/overhead_server.c b/network/overhead_server.c
new file mode 100644
index 0000000..db3c1f2
--- /dev/null
+++ b/network/overhead_server.c
@@ -0,0 +1,78 @@
+#include "../rasperf.h"
+#include<stdio.h>
+#include<stdlib.h>
+#include<arpa/inet.h>
+#include<sys/types.h>
+#include<sys/wait.h>
+#include<sys/socket.h>
+#include<netdb.h>
+#include<string.h>
+
+//Macro definitions
+#define handle_error(msg) \
+    do { perror(msg); exit(1);} while(0);
+#define LISTEN_BACKLOG 100
+
+int main(int argc, char*argv[])
+{   
+    int socket_fd, rc;
+    float setup_delta, close_delta;
+    if(argc<1){
+        handle_error("<usage>:tcp_server");
+    }
+    //Retrieve the protocol number mapping 
+    //from /etc/protocols file
+    struct protoent *proto_entry;
+    proto_entry = getprotobyname("tcp");
+    
+    //Open an socket end-point for this TCP Server
+    socket_fd = socket(AF_INET, SOCK_STREAM, proto_entry->p_proto);
+    if(socket_fd == -1){
+        handle_error("Socket descriptor creation failed");
+    }
+
+    //My address information to bind to
+    struct sockaddr_in sock_addr;
+    memset(&sock_addr, 0, sizeof(struct sockaddr));
+    sock_addr.sin_family = AF_INET;
+    sock_addr.sin_addr.s_addr = htonl(INADDR_ANY);
+    sock_addr.sin_port = htons(8000);
+
+
+    rc = bind(socket_fd, (struct sockaddr*)&sock_addr, sizeof(sock_addr)); 
+    if(rc == -1){
+        handle_error("Bind failure");
+    }
+    rc = listen(socket_fd, LISTEN_BACKLOG); 
+    if(rc == -1){
+        handle_error(" Listen Error");
+    }
+
+    time starttime, endtime;
+
+    //accept incoming connections
+    int connfd, i, pid, addr_size = sizeof(struct sockaddr);
+    for(i=1;i<=1000;i++)
+    {
+        printf("Accept Connection\n");
+        waitpid(WAIT_ANY, NULL, WNOHANG);
+        connfd = accept(socket_fd, (struct sockaddr *)NULL, NULL);
+        if( connfd == -1){
+            handle_error("Accept failed");
+        }    
+        if(pid = fork() == 0){
+            //close the copy of socket descriptor
+            //child should not medle with it..
+            close(socket_fd);
+            close(connfd);
+            printf("Connection %d closed in Child\n",i);
+            exit(0);
+        } 
+        close(connfd);
+    }   
+    close(socket_fd);
+
+    return 0;
+}
+   
+ 
diff --git a/network/peak_client.c b/network/peak_client.c
new file mode 100644
index 0000000..3527121
--- /dev/null
+++ b/network/peak_client.c
@@ -0,0 +1,70 @@
+#include "../rasperf.h"
+#include<stdio.h>
+#include<stdlib.h>
+#include<arpa/inet.h>
+#include<sys/types.h>
+#include<sys/socket.h>
+#include<netdb.h>
+#include<string.h>
+//Macro definitions
+#define handle_error(msg) \
+    do { perror(msg); exit(1);} while(0);
+#define BACKLOG 50
+int main(int argc, char*argv[])
+{   
+    int socket_fd, rc;
+    float start_delta = 0, close_delta = 0;
+    if(argc<2){
+        handle_error("<usage>:tcp_client <IP address>");
+    }
+    //Retrieve the protocol number mapping 
+    //from /etc/protocols file
+    struct protoent *proto_entry;
+    proto_entry = getprotobyname("tcp");
+    
+
+    //My address information to bind to
+    struct sockaddr_in server;
+    memset(&server, 0, sizeof(struct sockaddr));
+    server.sin_family = AF_INET;
+    server.sin_port = htons(8000);
+    
+    rc= inet_pton(AF_INET, argv[1], &server.sin_addr);
+    if(rc == -1){
+        handle_error("Address Error");
+    }
+    time starttime, endtime;
+    //accept incoming connections
+    int addr_size = sizeof(struct sockaddr);
+    int i;
+    int protonum = proto_entry->p_proto;
+    for(i=1;i<=BACKLOG;i++){
+        getTime(starttime);
+         //Open an socket end-point for this TCP Server
+        if((socket_fd = socket(AF_INET, SOCK_STREAM, protonum))<0){
+            handle_error("Socket Error");
+        }
+        if(connect(socket_fd, (struct sockaddr*)&server, sizeof(server))<0){
+            handle_error("Connection Error");
+        }
+        /*The end calculated here will miss time taken for ACK K+1 
+        from the client. And so we have to one way delay
+        measured using another experiment*/
+        getTime(endtime);
+
+        //Calculate connection overhead client
+        start_delta+=diff(endtime,starttime);
+        
+        getTime(starttime);
+        close(socket_fd);
+        getTime(endtime);
+        
+        //Calculate connection overhead server side
+        close_delta+=diff(endtime,starttime);
+    }
+    printf("Connection Setup =%f us\n", (start_delta + RTT/2 * BACKLOG)/BACKLOG);
+    printf("Connection Teardown =%f us\n", (close_delta + RTT/2 * BACKLOG)/BACKLOG);
+    return 0;
+}
+   
+ 
diff --git a/network/peak_server.c b/network/peak_server.c
new file mode 100644
index 0000000..87de305
--- /dev/null
+++ b/network/peak_server.c
@@ -0,0 +1,90 @@
+#include "../rasperf.h"
+#include<stdio.h>
+#include<stdlib.h>
+#include<arpa/inet.h>
+#include<sys/types.h>
+#include<sys/wait.h>
+#include<sys/socket.h>
+#include<netdb.h>
+#include<string.h>
+
+//Macro definitions
+#define handle_error(msg) \
+    do { perror(msg); exit(1);} while(0);
+#define LISTEN_BACKLOG 50
+
+int main(int argc, char*argv[])
+{   
+    int socket_fd, rc;
+    float setup_delta, close_delta;
+    if(argc<1){
+        handle_error("<usage>:tcp_server");
+    }
+    //Retrieve the protocol number mapping 
+    //from /etc/protocols file
+    struct protoent *proto_entry;
+    proto_entry = getprotobyname("tcp");
+    
+    //Open an socket end-point for this TCP Server
+    socket_fd = socket(AF_INET, SOCK_STREAM, proto_entry->p_proto);
+    if(socket_fd == -1){
+        handle_error("Socket descriptor creation failed");
+    }
+
+    //My address information to bind to
+    struct sockaddr_in sock_addr;
+    memset(&sock_addr, 0, sizeof(struct sockaddr));
+    sock_addr.sin_family = AF_INET;
+    sock_addr.sin_addr.s_addr = htonl(INADDR_ANY);
+    sock_addr.sin_port = htons(8000);
+
+
+    rc = bind(socket_fd, (struct sockaddr*)&sock_addr, sizeof(sock_addr)); 
+    if(rc == -1){
+        handle_error("Bind failure");
+    }
+    rc = listen(socket_fd, LISTEN_BACKLOG); 
+    if(rc == -1){
+        handle_error(" Listen Error");
+    }
+
+    time starttime, endtime;
+
+    //accept incoming connections
+    int connfd, i, pid, addr_size = sizeof(struct sockaddr);
+    for(i=1;i<=1000;i++)
+    {
+        //getTime(starttime);
+        printf("Accept Connection\n");
+        //waitpid(WAIT_ANY, NULL, WNOHANG);
+        connfd = accept(socket_fd, (struct sockaddr *)NULL, NULL);
+        /*The end calculated here would have missed SYN time
+        from the client. And so we have to add one 
+        packet worth round trip time in the overhead*/
+        //getTime(endtime);
+        if( connfd == -1){
+            handle_error("Accept failed");
+        }    
+        //setup_delta+=diff(endtime,starttime);
+        if(pid = fork() == 0){
+            close(socket_fd);
+            close(connfd);
+            printf("Connection %d closed in Child\n",i);
+            //close_delta=diff(endtime, starttime);
+            //printf("Connection Termination %f", close_delta + RTT);
+            exit(0);
+        } 
+        close(connfd);
+    }   
+    //getTime(starttime);
+    close(socket_fd);
+    //getTime(endtime);
+
+    //Calculate connection overhead server side
+    //setup_delta+=diff(endtime,starttime);
+    //printf("Connection Overhead:Setup =%f us\n", (setup_delta+ RTT*600)/600);
+
+    return 0;
+}
+   
+ 
diff --git a/network/rand b/network/rand
new file mode 100755
index 0000000000000000000000000000000000000000..ebd6e6eb4e94a6316ade822f6b4d268c202fb4b5
GIT binary patch
literal 8852
zcmeHMeQaCR6~DIg)i1~C$`&YV-dHQ8NHJ|FCFNs0Cvp1Hr5|e@C?DyI6FZ5)u_ODr
zv`m9ap=DNE)<3GLRGL8h1F;Ql42h}gA2ey8Wz+sh853;lHdeKhQ()>ufovMhe&@b>
z;^!A<LzDJjul3%!=XcLJ_uS)q@4FvQg}XYu9*^MU72goVy;7-5$bJhkRwr47wTJ~m
z7c0baQ3a$Dk1k7y+Bv4v$~4m&CFcXJz|-QjfflbWGfZ!`VZoF=Bue!aldiHh{cwTJ
zG8ICT0O^sh0l#EHdu4{{PUT0hqO3<O=`||7My1DeQaQ$y+edAqC!*{{ygE4Ibt0l&
zzKfJ(DQ&xC#VCJN89G{{6Aa#__ef3%rmXiZ=#igaGzFC4c2(beak-+}$5gT6wq&Aj
z{kq$dv8H4qmD|&_r)7Q9`gOr<I@m1RP4-E4<Cbn&6UVV09QnKq5A^{mH#S{9`R?L}
zq8r}5^5CP1KN**Pe!P}+`9byzr#m6Jw2U;>TMnmgT@GJ0558y~oc<3Dk2|dZP|p71
zd2oTa_EQ+wi)<#Eiiwd-B4rJTek(B?7sJtHGTkpslcdb770p=Ya5Rw;1DSXn@ZfMd
zrC?KR?CNZ7Gn<3W!8^z+@9fXc6GkznAI62`gvi~LzzFh+Zz_JewpZq;Z#nx{eZa=6
zfs;Nb&4JGjB@{L~aQfdlt#RPom#M79fjh^$?!cY?7!I6#;<U|y^Vp;^WAwus<6z|{
z3pHWvAG0b8SqZ*TGr^iRow?%zL}pf9#JjdZM~?U*Dx7+M25HsriKh@uO-lZ4;;HFV
zW0L<B@zmt0S0sO$cxvj@3z9!cJT-CZh~!@-o|-nbPx3z|o|-f@0)FjBo%wUSjQj;-
z^x~Cmk<PPYBbXVCv*SXNv)ik6QFsP|R|jev+J!igMgY2vrXdhxblPv^FFo$<nK%J^
zvf)>IPEpa!`?U@G2s=R>%a2d{AaCSP8{?PnGdz>Vx#=8~Pm-Xq|847PkC8uP>t9g%
z`|hoSzam%H4b8%naHQu<<+TNx@O(T$@iRv6eW@A(){0pdmUW-fFsnj-X0m7M+fb=(
z5K~!DvJr~xz<;IXzjOW+RV%d$2d>S`<j)p<268Zb-Z*A}ISt0hhYM%J7fJAgtp~#w
zjs8jFV7SnAc%`@SD(OrVenR9-{=MfuyOuw9vM1E_)BIbXT|Qi~aD2Kde>(rx_;kbS
z)A`BA#&)e9&%ZS~_O;M=D^`w%FM3eXXu)%L_~KJ97A+$vXAle2VT`_^Jsf(ZXM&uD
z$AMGypB6Tt8SrWvBGVMCr|~!0ZFu{0lt}b!;YH+6HIn>-dF6lTkl#)6+erR*cB{+S
z&p6~eke9Xoa$+D@+we3r1-di(N9ci2ekOE(Xa3VrcW3^$p-9)^RnwIky1?NkqC2`)
zUt0SIWBhX;jhMol|AN!|KeAS^k*@sZuKcI%uragjyfHfAF*baVyNqDeJlqp{B-9hy
z6*4CVij{th@g>I|BxtC4FxTv`FvksQ=>hGIyR=nV;aTpxy9H%52o9k_a`$GmAOgAo
z?R^>ab<lS}lZe+<(DR`8U=-4Kg_7rq?ZUGs;90)7y5@+dIzTwBCB|UyRuWLDyu1)A
zQBLv#@<)jJ10DYQO|^?2uh}Q=yXo#*Z(n%}!6es?ryKsgMnK3PIN)ttQnm4rZ?wYu
zBUDeQw3P(C0J-N0U^(w`DMB_5;Tb`@;#A)14}8xX_SZk_3;VUh6=8qlp-RKQ=0KI<
zZyBxL?AMe2mXLo<$luuN*INDckZ<+Z$o9Vj^<%K(oPWvW^>jS~*CTK}0{<xjBUQRA
z-liza@*0onVpT9*VaqR3yoK)@r5oj&_FKI&w_Ne|Y$(J{imzAYa;^o&<)2)eNt4Ji
zuTErk&v(RU^Ym??bi%6>5ewy8hzAs1q-edOHz>-47GyGExkHKP$}!0mzazYs{EEU`
zRC^iM6wiKheQFyjn8$Q1+ar`bK39_GcwSL_LA6g+_kSn6k9AkHzEYP^hobi@I-uxo
zMGq+YeMMhX)NOBLTiab)V|QOJW#zPW!It2<rskaF);_s*U2x61)ix^T2sSsZ-Jm3G
znPwq^*}cP7v=7wE*mQ_<*e%5~BO;heTk&A1wX?~J4k~Uil?(Re64<jQVj@V~P&7Lv
zg0a0R*t4mXu}gNxGucEsRl=Ak%fypWQc$^(q$PrhR03}+z6b9CFeppMqE=J{<3r{^
zCORB9hhorW&ekxanM`!At-<+6`ymGF(cwfts!qcoUO`!lZLu$#6~X@W@Nhh3xnuml
z@H8%|4|4x+@#^4;=Q2DlC5RXISLVNtOf??Xk9c)(#d8l$a>Z9gF)MRx@pkH4UR~mr
zGPqK5#g|*Z9YvpF>~Q_Zyt))VrU3Sz7UPt7oZ6faTacl-g7r^$b#OGVNFv^|iCl|P
z+gZO};rD~mT*CT1KOIpM49`bOd`|p!p@8NB*5~nGQ2Km!!2Yuw)5oAsa|`o4zsN%t
zlxcV<(R}IjUxIi&frnzs`kI=bG!<xWC)e+8|I;pgo*!G3{us(Bkv@Gh-1^S~BfrQ$
zO8h;UR{H#%uuE-UIZrf?$EmNW`A1U@%eA{hfzLUZ9(C#Sx#ufN|1<|i*<d|3dEBMX
z-#<$=l)nQkubRcIctPoNHT%@}bDz>*HY;go-1;xM^!c2S&kyhUFZ#c5=})TqCsqA7
zQ*a$g!L!I1a&$DRy6f!sp3f8A@^1du(5-do^Ln6OowvH>-8_v?a*^w&lLSiI7u5eF
zWU245K7SASymwNypZh1*&;8)9&~?_&=VjB>C?uA*xgyW_2Pkmr3$-5M1G$~7s3_|(
zz3S56sq}X$2iZ?H!+OmB6B)v|{dD|8X-Fx$<yAPO483OX5VnRGM`HcW4vey_&y>zz
zxo)TEYg|7IszMhl?eW-g>g#F&`jYzNzKX&oJlr0h*Jyl}tH01-TYK4M++DvdRsQXR
zcP(ChPN5I8ZKN#j6INNgVs;(uH0HysdZMg+mEiACseHBI?@K9;s8r}qNalUG<>Bvv
zv(SgtHqY~=_@deQyA)q6cwR2Wm(1QXmEwNE^JpnvD|mh^#RIeVBc*tq;Q6c+UphNa
zmEvC#JpYv9%P^nxIw6_&i5qY)R1W{L;CaBQ<P+FM@c4EV_^?ahaqEE5FK@&+EN9>S
zRkX)dh4?!S$C5<fTn|o#-2T(>@QNkkeb;(DsPI6Qj$AQ?kR^HdzL3^89*3ViJ_aN{
zH=c);9o}bxmFYRWJ-8|1{i1^9S!ua;Q9b4GH>I6A9Hi=OLek$zd~O`5u$-MgORc4I
z`ok4zXYT+04<+yRe=!{Ol=<Ip0lpORq|<v!Jk2yqTtX$UcHmkGVl%xGpWA;P10F!X
za`&GMa9&e7&Fz=?+;Mks9{K0z!C#*TKPT}e;s>f<$+J>8@E73Zr@R0E4Y=lXP~|@d
zUgxbBy{>Vw5CN>iN`mJHUMJlMoZ>80oa4&QYKhOS;9lSX^yd+m{Z?g%*N3dxspQ>p
z?pE@2A4BPR`4-|K;F`)iNeVc%%Wdb0dE}2u`*Y{p;}UmTR{8#nm9=s>iKpwsO>NuF
zuFf41(-g6ICO(+RV$*C|!)AXnor-5g8OStaX>%}{?u#bPn3c|C&1i0qz)o}|8MorG
z;Q9@B-VV!UgiP8K+dEtnyVlHJ+*Z<_IF=h8-U}56XVO->M3nA8)5Eya%t*&Owud%{
z&G43Xcy2d?^Cg-wVYWZGCA7J-4N{I0d1ETfja^$?LtW<9j*cDSh#3jBc7@5Dyj1Pa
z=A^^&N>$gLm#AiEWV2a}S7dV=MJp2ROU4E5&h495VaDZFUEbKb49L>~`$pGQ;=a)>
zEtXforO;qJ70*PiIE4ncCve~CLg`H~%Cc#52%&_hX6IJu#1bhpmyIJ(#b#5W)D?4S
zUHID|sDfwW2twuM)w8*2x4B()p|)f+n??UIO$3MkCW;z&sFIk;e@4(hTw2|~0VfMW
AtN;K2

literal 0
HcmV?d00001

diff --git a/network/random_str.c b/network/random_str.c
new file mode 100644
index 0000000..7f765d5
--- /dev/null
+++ b/network/random_str.c
@@ -0,0 +1,32 @@
+#include<stdio.h>
+#include<stdlib.h>
+char* generate_string(int length)
+{
+    //Random number seed
+    srand((unsigned int) ctime(0));
+    char * buff;
+    buff=(char *)malloc(sizeof(char)*length);
+    int i;
+    for(i=0;i< length-1;i++){
+        buff[i] = rand() % rand() % (126 - 33 + 1) + 33;
+    }
+    buff[i] = '\0';
+    return buff;
+}        
+int main()
+{
+    char *buf;
+    buf = generate_string(5); 
+    printf("String of 5: %s", buf);
+    free(buf);
+
+    buf = generate_string(40); 
+    printf("String of 5: %s", buf);
+    free(buf);
+
+    buf = generate_string(80); 
+    printf("String of 5: %s", buf);
+    free(buf);
+    
+    return 0;
+}
diff --git a/network/rtt_client.c b/network/rtt_client.c
new file mode 100644
index 0000000..3a743d6
--- /dev/null
+++ b/network/rtt_client.c
@@ -0,0 +1,94 @@
+#include "../rasperf.h"
+#include<stdio.h>
+#include<stdlib.h>
+#include<arpa/inet.h>
+#include<sys/types.h>
+#include<sys/socket.h>
+#include<netdb.h>
+#include<string.h>
+//Macro definitions
+#define handle_error(msg) \
+    do { perror(msg); exit(1);} while(0);
+#define BUFFER_SIZE 2048
+#define STRIDE_SIZE 64
+#define BACKLOG 32 //buff size/stride size
+
+//A random string generator of given length
+char* generate_string(int length)
+{
+    //Random number seed
+    srand((unsigned int) ctime(0));
+    char * buff;
+    buff=(char *)malloc(sizeof(char)*length);
+    int i;
+    for(i=0;i< length-1;i++){
+        buff[i] = rand() % rand() % (126 - 33 + 1) + 33;
+    }
+    buff[i] = '\0';
+    return buff;
+}
+
+int main(int argc, char*argv[])
+{   
+    int socket_fd, rc;
+    char buf[BUFFER_SIZE];
+    char *msg;
+    float start_delta = 0, close_delta = 0;
+    if(argc<2){
+        handle_error("<usage>:tcp_client <IP address>");
+    }
+    //Retrieve the protocol number mapping 
+    //from /etc/protocols file
+    struct protoent *proto_entry;
+    proto_entry = getprotobyname("tcp");
+    
+
+    //My address information to bind to
+    struct sockaddr_in server;
+    memset(&server, 0, sizeof(struct sockaddr));
+    server.sin_family = AF_INET;
+    server.sin_port = htons(8000);
+    
+    rc= inet_pton(AF_INET, argv[1], &server.sin_addr);
+    if(rc == -1){
+        handle_error("Address Error");
+    }
+    time starttime, endtime;
+    //accept incoming connections
+    int addr_size = sizeof(struct sockaddr);
+    int i;
+    int protonum = proto_entry->p_proto;
+    
+    //Open an socket end-point for this TCP Server
+    if((socket_fd = socket(AF_INET, SOCK_STREAM, protonum))<0){
+        handle_error("Socket Error");
+    }
+    if(connect(socket_fd, (struct sockaddr*)&server, sizeof(server))<0){
+        handle_error("Connection Error");
+    }
+    
+    for(i=1;i<=BACKLOG;i++){
+        //increase the sent message in strides of 64
+        //look for for peak rtt
+        msg = generate_string(STRIDE_SIZE * i);
+        printf("String Generated: \"%s\"",msg);
+        getTime(starttime);
+        if(send(socket_fd, msg, sizeof(msg), 0) <0){
+            handler_error("Send Error");
+        }
+        //The recv buffer size is same as the one we sent
+        if(recv(socket_fd, buff, sizeof(msg), 0) != sizeof(msg)){
+            handle_error("Data over/ Receive Error");
+        }
+        getTime(endtime);
+        delta+=diff(endtime, starttime);
+        printf("Single RTT %f", diff(endtime, starttime));
+        
+    }
+    
+    close(socket_fd);
+    printf("Averaged RTT =%f us\n", delta/BACKLOG);
+    return 0;
+}
+   
+ 
diff --git a/network/rtt_server.c b/network/rtt_server.c
new file mode 100644
index 0000000..2ff16a1
--- /dev/null
+++ b/network/rtt_server.c
@@ -0,0 +1,80 @@
+#include "../rasperf.h"
+#include<stdio.h>
+#include<stdlib.h>
+#include<arpa/inet.h>
+#include<sys/types.h>
+#include<sys/wait.h>
+#include<sys/socket.h>
+#include<netdb.h>
+#include<string.h>
+
+//Macro definitions
+#define handle_error(msg) \
+    do { perror(msg); exit(1);} while(0);
+#define LISTEN_BACKLOG 100
+#define BUFFER_SIZE 2048
+
+int main(int argc, char*argv[])
+{   
+    int socket_fd, rc;
+    char buff[BUFFER_SIZE], msg[BUFFER_SIZE];
+    char 
+    float setup_delta, close_delta;
+    if(argc<1){
+        handle_error("<usage>:tcp_server");
+    }
+    //Retrieve the protocol number mapping 
+    //from /etc/protocols file
+    struct protoent *proto_entry;
+    proto_entry = getprotobyname("tcp");
+    
+    //Open an socket end-point for this TCP Server
+    socket_fd = socket(AF_INET, SOCK_STREAM, proto_entry->p_proto);
+    if(socket_fd == -1){
+        handle_error("Socket descriptor creation failed");
+    }
+
+    //My address information to bind to
+    struct sockaddr_in sock_addr;
+    memset(&sock_addr, 0, sizeof(struct sockaddr));
+    sock_addr.sin_family = AF_INET;
+    sock_addr.sin_addr.s_addr = htonl(INADDR_ANY);
+    sock_addr.sin_port = htons(8000);
+
+
+    rc = bind(socket_fd, (struct sockaddr*)&sock_addr, sizeof(sock_addr)); 
+    if(rc == -1){
+        handle_error("Bind failure");
+    }
+    rc = listen(socket_fd, LISTEN_BACKLOG); 
+    if(rc == -1){
+        handle_error(" Listen Error");
+    }
+
+    time starttime, endtime;
+    //accept incoming connections
+    int connfd, i, pid, addr_size = sizeof(struct sockaddr);
+    printf("Accept Connection\n");
+    connfd = accept(socket_fd, (struct sockaddr *)NULL, NULL);
+    if( connfd == -1){
+        handle_error("Accept failed");
+    }    
+    for(i=1;i<=BACKLOG;i++)
+    {
+        getTime(starttime);
+        if(recv(connfd, buff, sizeof(i* STRIDE_SIZE), 0)!= sizeof(i* STRIDE_SIZE)){
+            handle_error("Receive Error/ Data Done");
+        }
+        if(send(connfd, buff, sizeof(i * STRIDE_SIZE), 0)<0){
+            handle_error("Send Error");
+        }
+        getTime(endtime);
+    }
+        
+    close(socket_fd);
+    close(connfd);
+    printf("Connection %d closed in Child\n",i);
+    return 0;
+}
+   
+
diff --git a/network/run_script.sh b/network/run_script.sh
new file mode 100755
index 0000000..8d32350
--- /dev/null
+++ b/network/run_script.sh
@@ -0,0 +1,6 @@
+#!/bin/bash
+for i in `seq 1 10`; 
+do  
+    ./tcp_client localhost  
+done 
+
diff --git a/network/tcp_rtt_client.bul b/network/tcp_rtt_client.bul
new file mode 100644
index 0000000..82bf516
--- /dev/null
+++ b/network/tcp_rtt_client.bul
@@ -0,0 +1,76 @@
+#include "../rasperf.h"
+#include<stdio.h>
+#include<stdlib.h>
+#include<arpa/inet.h>
+#include<sys/types.h>
+#include<sys/socket.h>
+#include<netdb.h>
+#include<string.h>
+//Macro definitions
+#define handle_error(msg) \
+    do { perror(msg); exit(1);} while(0);
+#define BACKLOG 1
+int main(int argc, char*argv[])
+{   
+    int socket_fd, rc;
+    float start_delta = 0, close_delta = 0;
+    if(argc<2){
+        handle_error("<usage>:tcp_client <IP address>");
+    }
+    //Retrieve the protocol number mapping 
+    //from /etc/protocols file
+    struct protoent *proto_entry;
+    proto_entry = getprotobyname("tcp");
+    
+
+    //My address information to bind to
+    struct sockaddr_in server;
+    memset(&server, 0, sizeof(struct sockaddr));
+    server.sin_family = AF_INET;
+    server.sin_port = htons(8000);
+    
+    rc= inet_pton(AF_INET, argv[1], &server.sin_addr);
+    if(rc == -1){
+        handle_error("Address Error");
+    }
+    time starttime, endtime;
+    //accept incoming connections
+    int addr_size = sizeof(struct sockaddr);
+    int i;
+    int protonum = proto_entry->p_proto;
+    for(i=1;i<=BACKLOG;i++){
+        getTime(starttime);
+         //Open an socket end-point for this TCP Server
+        if((socket_fd = socket(AF_INET, SOCK_STREAM, protonum))<0){
+            handle_error("Socket descriptor creation failed");
+        }
+        if((connect(socket_fd, (struct sockaddr*)&server, sizeof(server)))<0){
+            handle_error("Connect failed");
+        } 
+        /*The end calculated here will miss time taken for ACK K+1 
+        from the client. And so we have to one way delay
+        measured using another experiment*/
+        getTime(endtime);
+
+        //Calculate connection overhead client
+        start_delta+=diff(endtime,starttime);
+        printf("EndTime: %f usec\n", endtime.tv_sec + endtime.tv_usec*1e6);
+        printf("Start time:%f usec\n", starttime.tv_sec +starttime.tv_usec*1e6);
+        printf("Setup:%f\n",diff(endtime,starttime) + 25); 
+        
+        getTime(starttime);
+        sleep(1);
+        close(socket_fd);
+        getTime(endtime);
+        printf("Endtime %f usec\n", endtime.tv_sec + endtime.tv_usec*1e6);
+        printf("Start time:%f usec\n", starttime.tv_sec +starttime.tv_usec*1e6);
+        printf("TearDown:%f\n",diff(endtime,starttime) + 25);
+        //Calculate connection overhead server side
+        close_delta+=diff(endtime,starttime);
+    }
+    printf("Connection Setup =%f us\n", (start_delta + RTT/2 * BACKLOG)/BACKLOG);
+    printf("Connection Teardown =%f us\n", (close_delta + RTT/2 * BACKLOG)/BACKLOG);
+    return 0;
+}
+   
+ 
diff --git a/network/tcp_rtt_server.c b/network/tcp_rtt_server.c
deleted file mode 100644
index 2e2fbd0..0000000
--- a/network/tcp_rtt_server.c
+++ /dev/null
@@ -1,50 +0,0 @@
-#include "../rasperf.h"
-#include<arpa/inet.h>
-#include<sys/typesh>
-#include<sys/socket.h>
-#include<netdb.h>
-
-//Macro definitions
-#define handle_error(msg) \
-    do { perror(msg); exit(EXIT_FAILURE);} while(0)
-#define LISTEN_BACKLOG 5
-int main(int argc, char*argv[])
-{   
-    int socket_fd, rc;
-    if(argc<1){
-        handle_error("<usage>:");
-    }
-    //Retrieve the protocol number mapping 
-    //from /etc/protocols file
-    struct protoent *proto_entry;
-    proto_entry = getprotobyname("tcp");
-    
-    //Open an socket end-point for this TCP Server
-    socket_fd = socket(AF_INET, SOCK_STREAM, proto_entry->p_proto);
-    if(socket_fd == -1){
-        handle_error("Errno: %d,Socket descriptor creation failed", errorno);
-    }
-
-    //My address information to bind to
-    struct sockaddr sock_addr;
-    memset(&sock_addr, 0, sizeof(struct sockaddr));
-    sock_addr.sa_family = AF_INET;
-    sock_addr.sin_addr.s_addr = htonl(INADDR_ANY);
-    sock_addr.sin_port = htons(8000);
-
-
-    rc = bind(sock_fd, &sock_addr, sizeof(sock_addr)); 
-    if(rc == -1){
-        handle_error("Errno: %d, Bind failure", errorno);
-    }
-    rc = listen(socket_fd, LISTEN_BACKLOG); 
-    if(rc == -1){
-        handle_error("Errno: %d, Listen Error", errorno);
-    }
-
-    int addr_size = sizeof(struct sockaddr);
-    rc= accept(sock_fd, &sock_addr, &addr_size);
-    if( rc == -1){
-        handle_error("Error: %d,Accept failed", errorno);
-    }
-    
diff --git a/osproject_task.c b/osproject_task.c
index 64432f5..5b68269 100644
--- a/osproject_task.c
+++ b/osproject_task.c
@@ -7,13 +7,12 @@ int main()
 	unsigned int a, b;
 	unsigned int avg;
 	int status;
-	asm volatile("mrc p15, 0, %0, c9, c14, 0" : "=r" (regr));
+	readCCNT(regr);
 	printf("regr: %x\n", regr);
-
-	asm volatile("mrc p15, 0, %0, c9, c13, 0" : "=r" (a));
+	getTime(a);
 	int pid = fork();
 	if (pid) {
-		asm volatile("mrc p15, 0, %0, c9, c13, 0" : "=r" (b));
+		getTime(b);
 		printf("Time for fork: %u\n", b - a);
 	}
 
diff --git a/rasperf.h b/rasperf.h
index e0e76b4..8a57704 100644
--- a/rasperf.h
+++ b/rasperf.h
@@ -1,7 +1,12 @@
+
 #ifndef __RASPERF_H__
+#define NULL '\0'
 #define __RASPERF_H__
-#define PI 1
-#define x86 0
+#define RTT 35 //in MicroSec
+#define PI 0
+#define x86 1
+#define CPU_CYCLES 900 
+#define MHz 1e6
 #if defined(PI) && PI
 #define time unsigned int
 #define getTime(var) \
@@ -12,13 +17,14 @@
 	asm volatile (\
 	"mrc p15, 0, %0, c9, c14, 0":\
 	"=r" (var));
-#define diff(end, begin) (end - begin)
+#define diff(end, begin) \
+        (end - begin)/ CPU_CYCLES};
 #endif
 #if defined(x86) && x86
 #define time struct timeval
 #define getTime(var) gettimeofday(&var, NULL)
 #define diff(end, begin) \
-	(end.tv_sec*1e6+end.tv_usec - begin.tv_sec*1e6+ begin.tv_usec)
+	((end.tv_sec*1e6+end.tv_usec) - (begin.tv_sec*1e6+ begin.tv_usec))
 #endif
 #endif