From b6722e77a5298d30624ce01c9ab311b75624f37e Mon Sep 17 00:00:00 2001 From: Sapan Bhatia Date: Fri, 17 Sep 2010 11:35:16 -0400 Subject: [PATCH] Packetseer wrapper to let slices see all traffic on a PL node --- packetseer/Makefile | 7 +++++ packetseer/packetseer.c | 63 ++++++++++++++++++++++++++++++++++++++++ packetseer/packetseer.h | 6 ++++ packetseer/pcap | Bin 0 -> 8814 bytes 4 files changed, 76 insertions(+) create mode 100644 packetseer/Makefile create mode 100644 packetseer/packetseer.c create mode 100644 packetseer/packetseer.h create mode 100755 packetseer/pcap diff --git a/packetseer/Makefile b/packetseer/Makefile new file mode 100644 index 0000000..01147d4 --- /dev/null +++ b/packetseer/Makefile @@ -0,0 +1,7 @@ +all: packetseer.so + +LIBDIR=../lib/ +INCLUDEDIR=../lib/ + +packetseer.so: packetseer.c $(LIBDIR)/fdpass.c + gcc -I$(INCLUDEDIR) -shared -ldl packetseer.c $(LIBDIR)/fdpass.c -o packetseer.so diff --git a/packetseer/packetseer.c b/packetseer/packetseer.c new file mode 100644 index 0000000..8ab785d --- /dev/null +++ b/packetseer/packetseer.c @@ -0,0 +1,63 @@ +#include +#include +#include +#include +#include +#include "fdpass.h" +#include + +#define VSYS_PACKETSEER "/vsys/fd_packetseer.control" + +int (*socket_orig)(int f, int p, int s); + +int _init_pslib() { + socket_orig = &socket; + printf("Stored value of socket"); +} + +int socket(int f, int p, int s) +{ + if (!socket_orig) { + void *handle = dlopen("/lib/libc.so.6",RTLD_LAZY); + if (!handle) { + fprintf(stderr,"Error loading libc.so.6\n"); + return -1; + } + socket_orig = dlsym(handle, "socket"); + if (!socket_orig) { + fprintf(stderr,"Error loading socket symbol"); + return -1; + } + fprintf(stderr,"Socket call: %x",socket_orig); + } + + if (f == PF_PACKET) { + int sfd; + struct sockaddr_un addr; + int remotefd; + + sfd = socket(AF_UNIX, SOCK_STREAM, 0); + if (sfd == -1) { + perror("Could not create UNIX socket\n"); + exit(-1); + } + + memset(&addr, 0, sizeof(struct sockaddr_un)); + /* Clear structure */ + addr.sun_family = AF_UNIX; + strncpy(addr.sun_path, VSYS_PACKETSEER, + sizeof(addr.sun_path) - 1); + + if (connect(sfd, (struct sockaddr *) &addr, + sizeof(struct sockaddr_un)) == -1) { + perror("Could not connect to Vsys control socket"); + exit(-1); + } + + remotefd = receive_fd(sfd); + return remotefd; + } + else + return (*socket_orig)(f, p, s); +} + diff --git a/packetseer/packetseer.h b/packetseer/packetseer.h new file mode 100644 index 0000000..930f6f2 --- /dev/null +++ b/packetseer/packetseer.h @@ -0,0 +1,6 @@ +#ifndef _BM_SOCKET_H_ +#define _BM_SOCKET_H_ + +extern int CreateLargeBufSocket(int recvbuf, int sndbuf); + +#endif diff --git a/packetseer/pcap b/packetseer/pcap new file mode 100755 index 0000000000000000000000000000000000000000..942c42a38cd92db511470598c6d5a68cbb8fc86a GIT binary patch literal 8814 zcmeHMVQd`575;W_Y&OJ+&n6H9#<<0Sq>cCDkc1=^5{d1EfJq>BAW;a*`EKpIa=trm z_d-&Eht~oseUP>$m;?31F$C(`0B~IhCr`!u5G`}&zWHn;9eKR<(f6Kh@BGvG*B<=n*xJ93 zHopJ#&c-*#K3jP1kAGVju$h5y19f=YOpny*y#ap50-zp%8{j|EB>rfCw?N`Q1kiFs za4Lx6Gw&dP#t=@$x(9_pUDu%&PXzrEZ@^dueH(xaCCRTI^KlQ?-a&;g1TyK~d?KEw z8CJlu`Ui4Z%W>lc*Ro(eu-Dpd_op4#F0^Ojj$=Ep(%G~Nt1q2Rg9EKx-p*Q?^j@2+ z66CW6efdH<>-NEMlXjs1Ys)svag*t+RdnnmEQ^$Zl!16U3(HQ%-8d|(*KuS!EIXUT z=B_Op+pU%6ia<-Wn-0zYQ*YW|Lzi6oK19>$1*H5*Flu^S7}c88V-*+15n)`X0fO%c zVDK$~8osN59V2H-=Z&dh08@YAzr{LmasuA!i{rxZmRuT_`tz2MQ;Jf~p7uP?TSAU0 z+V1S6kCStX%lhmwAE$&=1M$~A&*Q+hPoEh1u=Mft!#&$mM}~!wdVN?Jk35ElAGo)fYsRfP z*H}6xUT!!d4DZxYzDA?Nr;6v^sbar&aw4EVx@cS&!^hnEHz;HHm^<%;XknW-d2-_L zSXYZEeLU?weQC$YnMVfCuM)u6@Wn4YZ=|CodZMGHW-0=l=x8zMxlVMn2yTTFqGjJf zVN88;+4Dv^FP5IWh~lcFT+3tM_s90M)Nl-mIOe&7!Wa=PQ}12&yf?T#M~0`q@Vs;S zx$05>*Whsq-nC~eeku6a!@h3zOpLjAV(jg^IQJbRXC8aBd+KojgA?m+0ZQi^r@ndF z^TtY1&-2D!;QwWlzqzQ7bWXb~+PsnX#(v3x!T8b6=;o1*7Gt!tW~8GL?G3H!e}n1eZ( zgE^RkIhccM4ZOONr+O1qoXR)v-i(_VXD~)%e8G6+(4a8>dD+WN4hn-Y+3D{JgK<{$ zyTai8<<%gb;{`bgqy2d8!niPa0c1S2$d7Y?#Q@$d38N0c@scnYOK}|IW?r~2dtUC9 zk}y2a%W+QAo|iim#64dX7&EIeUmp_2${}HF91_O%p>lhaG@IMo*EcWSymiO2=2d2! z+19*tvz>KwIf=Cv?p}ufSDNKP3@syfX>;0wYk)EO(2y|hR7zw_>(jqJL!SxO$h;wG zYXz^B`O=Jt?Tr^=?m#}4&lTKwza4Y-JFS^?uM_KM5ZSuYTpfERS9mJcTTEw?tx3Bt zUd*_y={0NDwB{2s#n9THEw*O!ZYGv+im^n&O`F|co^e@D!YML0(Y&F%d8OI5#%zOj zK+cydQD|@dx8|F@cJtNh5Uq|Fw;D@~8@MMcamGSAGVIa5Sa>}&nf%hOxgCJO5WbnK zbUKa5-CEP~ruC0C>DACQROwtzkvp`eo_nIxq$&Y>%vUhy~Tbj zUWjM=ZF2F^bha<2e#d)z3-(@xWzyNJCkC$$w+817&jLSJs!4yZz}G*3JA(Wk>HM4~ z^P!4p#^V61A#!)eOICTR&aiij%Qj_2PT93 zB{Fn=<3V}G`f_=89f|<=Lv_ z68eKYDCu}+9*@ZR_<7`Demv;%Av&J1?*{xxr*f*K+aK_!9PZ2u5qT~v;P(=kJTAgCE`TaPcV@}4;wb#nKh5{w`l@MLcxG-w|4c$*ebWE--Vh&$1 z3v@!@DM{T?uAjrNE$8nQ9qsXEh#zyD(^ug~{=W{<@osgY_DcPc?nH<#dPEq}sI!zlViM~6JoK9| zSwGt!s3E*zsNaO?dSH8~LH*>Nli#Xf<02rcIzzJ9#I>j3*;|0qLdsqj*q8o5)iV@4 zemhVf5)fj21<((&QC6X(zmvF>Our^^$&mg_;?jEbQxcb6fc{A0TygOIj>Kifg#Jb1 z{>%3x5|J zr&ZwZH;FSMfWNOK&fBQmKN4po0e_!JTt*z+4-&u0@8`OgI3td7?Ii-H?aL6s&1J;5 z2R(HeBL3-BhR7_BMf=@0%gzFyc~V0Xh%YS<_wiT-zPwbq+&h2 z4yP;de`w|Pqv?xqiSrGO!<|%*1z?$o=NP|-cvHw3@IKO7fp5^|ImMmH zTHgJ7c|X)+A+`qes&=?1z*X(=JNoQe;D}zHUlfb+16{6P$-e=w>cFC4{&o6d{6Ys< zZsI+G^ZjkWU)3Vt561I*Sd08vpIw_gThTwQ1B+E{QC|So)>y~lx+MRa$n07q;=Sos z|LWTf(`00qwDV3ZefQcmF+0;2^UIKCH+YXV6aI_WSTphEgSW356(-`DOsEFR7{zgm zeSKyEmet;~ZM)UArMrivQLAGX_CWhgS0Xo%&)BY=G*_=#*M_{gdd=E(u&iXx>d)kQ z;~C4pZCml;KKQqAD_I;E*slb1ZtW=ZSIDOA8y@PM!6;1il)3s>d7tYw57rnoGve_p z#R*uOyS8oI&}D7gw5hwZ$LiUzv8$6Rp`omJp%CBiS8r!E_{N0Qv1{vwhqknX(S&M~ z<=})