- Timestamp:
- 10/25/04 20:42:36 (18 years ago)
- Branches:
- 4.0.1-hotfixes, cachetimestamps, develop, dpdk-ndag, etsilive, getfragoff, help, libtrace4, master, ndag_format, pfring, rc-4.0.1, rc-4.0.2, rc-4.0.3, rc-4.0.4, ringdecrementfix, ringperformance, ringtimestampfixes
- Children:
- 24412fc
- Parents:
- dea6547
- Location:
- lib
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
lib/Makefile.am
r4eb5172 r4fd12ac 1 1 lib_LTLIBRARIES = libtrace.la 2 include_HEADERS = libtrace.h dagformat.h wag.h 2 3 libtrace_la_SOURCES = trace.c fifo.c fifo.h common.h 3 include_HEADERS = libtrace.h dagformat.h wag.h 4 libtrace_la_LIBADD = @ LIBPCAP@ @LIBZ@5 libtrace_la_LDFLAGS=-version-info 2:7:0 @ LIBPCAP_PATH@ @LIBZ_PATH@4 libtrace_la_CFLAGS = @ADD_INCLS@ 5 libtrace_la_LIBADD = @ADD_LIBS@ 6 libtrace_la_LDFLAGS=-version-info 2:7:0 @ADD_LDFLAGS@ -
lib/Makefile.in
rdea6547 r4fd12ac 58 58 host_alias = @host_alias@ 59 59 host_triplet = @host@ 60 ADD_INCLS = @ADD_INCLS@ 61 ADD_LDFLAGS = @ADD_LDFLAGS@ 62 ADD_LIBS = @ADD_LIBS@ 60 63 AMTAR = @AMTAR@ 61 AR = @AR@62 64 AS = @AS@ 63 65 AWK = @AWK@ 64 66 CC = @CC@ 65 CXX = @CXX@66 CXXCPP = @CXXCPP@67 67 DEPDIR = @DEPDIR@ 68 68 DLLTOOL = @DLLTOOL@ 69 69 ECHO = @ECHO@ 70 EGREP = @EGREP@71 70 EXEEXT = @EXEEXT@ 72 F77 = @F77@73 GCJ = @GCJ@74 GCJFLAGS = @GCJFLAGS@75 71 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ 76 LIBPCAP = @LIBPCAP@77 LIBPCAP_PATH = @LIBPCAP_PATH@78 72 LIBTOOL = @LIBTOOL@ 79 LIBZ = @LIBZ@80 LIBZ_PATH = @LIBZ_PATH@81 73 LN_S = @LN_S@ 82 74 OBJDUMP = @OBJDUMP@ … … 84 76 PACKAGE = @PACKAGE@ 85 77 RANLIB = @RANLIB@ 86 RC = @RC@87 78 STRIP = @STRIP@ 88 79 VERSION = @VERSION@ … … 92 83 93 84 lib_LTLIBRARIES = libtrace.la 85 include_HEADERS = libtrace.h dagformat.h wag.h 94 86 libtrace_la_SOURCES = trace.c fifo.c fifo.h common.h 95 include_HEADERS = libtrace.h dagformat.h wag.h 96 libtrace_la_LIBADD = @ LIBPCAP@ @LIBZ@97 libtrace_la_LDFLAGS = -version-info 2:7:0 @ LIBPCAP_PATH@ @LIBZ_PATH@87 libtrace_la_CFLAGS = @ADD_INCLS@ 88 libtrace_la_LIBADD = @ADD_LIBS@ 89 libtrace_la_LDFLAGS = -version-info 2:7:0 @ADD_LDFLAGS@ 98 90 subdir = lib 99 91 mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs … … 103 95 104 96 libtrace_la_DEPENDENCIES = 105 am_libtrace_la_OBJECTS = trace.lofifo.lo97 am_libtrace_la_OBJECTS = libtrace_la-trace.lo libtrace_la-fifo.lo 106 98 libtrace_la_OBJECTS = $(am_libtrace_la_OBJECTS) 107 99 … … 112 104 LIBS = @LIBS@ 113 105 depcomp = $(SHELL) $(top_srcdir)/depcomp 114 @AMDEP_TRUE@DEP_FILES = $(DEPDIR)/fifo.Plo $(DEPDIR)/trace.Plo 106 @AMDEP_TRUE@DEP_FILES = $(DEPDIR)/libtrace_la-fifo.Plo \ 107 @AMDEP_TRUE@ $(DEPDIR)/libtrace_la-trace.Plo 115 108 COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ 116 109 $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) … … 166 159 clean-libLTLIBRARIES: 167 160 -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) 161 libtrace_la-trace.lo: trace.c 162 libtrace_la-fifo.lo: fifo.c 168 163 libtrace.la: $(libtrace_la_OBJECTS) $(libtrace_la_DEPENDENCIES) 169 164 $(LINK) -rpath $(libdir) $(libtrace_la_LDFLAGS) $(libtrace_la_OBJECTS) $(libtrace_la_LIBADD) $(LIBS) … … 175 170 -rm -f *.tab.c 176 171 177 @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/ fifo.Plo@am__quote@178 @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/ trace.Plo@am__quote@172 @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/libtrace_la-fifo.Plo@am__quote@ 173 @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/libtrace_la-trace.Plo@am__quote@ 179 174 180 175 distclean-depend: … … 198 193 @AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 199 194 $(LTCOMPILE) -c -o $@ `test -f $< || echo '$(srcdir)/'`$< 195 196 libtrace_la-trace.o: trace.c 197 @AMDEP_TRUE@ source='trace.c' object='libtrace_la-trace.o' libtool=no @AMDEPBACKSLASH@ 198 @AMDEP_TRUE@ depfile='$(DEPDIR)/libtrace_la-trace.Po' tmpdepfile='$(DEPDIR)/libtrace_la-trace.TPo' @AMDEPBACKSLASH@ 199 @AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 200 $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtrace_la_CFLAGS) $(CFLAGS) -c -o libtrace_la-trace.o `test -f trace.c || echo '$(srcdir)/'`trace.c 201 202 libtrace_la-trace.obj: trace.c 203 @AMDEP_TRUE@ source='trace.c' object='libtrace_la-trace.obj' libtool=no @AMDEPBACKSLASH@ 204 @AMDEP_TRUE@ depfile='$(DEPDIR)/libtrace_la-trace.Po' tmpdepfile='$(DEPDIR)/libtrace_la-trace.TPo' @AMDEPBACKSLASH@ 205 @AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 206 $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtrace_la_CFLAGS) $(CFLAGS) -c -o libtrace_la-trace.obj `cygpath -w trace.c` 207 208 libtrace_la-trace.lo: trace.c 209 @AMDEP_TRUE@ source='trace.c' object='libtrace_la-trace.lo' libtool=yes @AMDEPBACKSLASH@ 210 @AMDEP_TRUE@ depfile='$(DEPDIR)/libtrace_la-trace.Plo' tmpdepfile='$(DEPDIR)/libtrace_la-trace.TPlo' @AMDEPBACKSLASH@ 211 @AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 212 $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtrace_la_CFLAGS) $(CFLAGS) -c -o libtrace_la-trace.lo `test -f trace.c || echo '$(srcdir)/'`trace.c 213 214 libtrace_la-fifo.o: fifo.c 215 @AMDEP_TRUE@ source='fifo.c' object='libtrace_la-fifo.o' libtool=no @AMDEPBACKSLASH@ 216 @AMDEP_TRUE@ depfile='$(DEPDIR)/libtrace_la-fifo.Po' tmpdepfile='$(DEPDIR)/libtrace_la-fifo.TPo' @AMDEPBACKSLASH@ 217 @AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 218 $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtrace_la_CFLAGS) $(CFLAGS) -c -o libtrace_la-fifo.o `test -f fifo.c || echo '$(srcdir)/'`fifo.c 219 220 libtrace_la-fifo.obj: fifo.c 221 @AMDEP_TRUE@ source='fifo.c' object='libtrace_la-fifo.obj' libtool=no @AMDEPBACKSLASH@ 222 @AMDEP_TRUE@ depfile='$(DEPDIR)/libtrace_la-fifo.Po' tmpdepfile='$(DEPDIR)/libtrace_la-fifo.TPo' @AMDEPBACKSLASH@ 223 @AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 224 $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtrace_la_CFLAGS) $(CFLAGS) -c -o libtrace_la-fifo.obj `cygpath -w fifo.c` 225 226 libtrace_la-fifo.lo: fifo.c 227 @AMDEP_TRUE@ source='fifo.c' object='libtrace_la-fifo.lo' libtool=yes @AMDEPBACKSLASH@ 228 @AMDEP_TRUE@ depfile='$(DEPDIR)/libtrace_la-fifo.Plo' tmpdepfile='$(DEPDIR)/libtrace_la-fifo.TPlo' @AMDEPBACKSLASH@ 229 @AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 230 $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtrace_la_CFLAGS) $(CFLAGS) -c -o libtrace_la-fifo.lo `test -f fifo.c || echo '$(srcdir)/'`fifo.c 200 231 CCDEPMODE = @CCDEPMODE@ 201 232 uninstall-info-am: -
lib/trace.c
rdea6547 r4fd12ac 60 60 #include <sys/socket.h> 61 61 #include <sys/un.h> 62 #include <sys/mman.h> 62 63 #include <unistd.h> 63 64 #include <net/ethernet.h> … … 72 73 73 74 #ifdef HAVE_STDDEF_H 74 # include <stddef.h>75 # include <stddef.h> 75 76 #else 76 77 # error "Can't find stddef.h - do you define ptrdiff_t elsewhere?" … … 90 91 #include <zlib.h> 91 92 #include <pcap.h> 92 93 #include "dagformat.h" 93 #include <zlib.h> 94 94 95 95 96 #include "wag.h" 96 97 98 #ifdef HAVE_DAG_API 99 # include "dagnew.h" 100 # include "dagapi.h" 101 # define DAGDEVICE 1 102 #else 103 # include "dagformat.h" 104 #endif 97 105 98 106 … … 123 131 } input; 124 132 struct fifo_t *fifo; 133 void *buf; 125 134 struct { 126 135 void *buffer; … … 134 143 static int init_trace(struct libtrace_t **libtrace, char *uri) { 135 144 char *scan = calloc(sizeof(char),URI_PROTO_LINE); 136 char *uridata = 0; 145 char *uridata = 0; 146 struct stat buf; 137 147 138 148 // parse the URI to determine what sort of event we are dealing with … … 190 200 case ERF: 191 201 case WAG: 192 case DAG:193 202 /* 194 203 * Can have uridata of the following format … … 202 211 (*libtrace)->sourcetype = STDIN; 203 212 } else { 204 struct stat buf;205 213 if (stat(uridata,&buf) == -1) { 206 214 perror("stat"); … … 217 225 } 218 226 break; 227 case DAG: 228 /* 229 * Can have uridata of the following format: 230 * /dev/device 231 */ 232 if (stat(uridata,&buf) == -1) { 233 perror("stat"); 234 return 0; 235 } 236 if (S_ISCHR(buf.st_mode)) { 237 (*libtrace)->sourcetype = DEVICE; 238 } else { 239 fprintf(stderr,"%s isn't a valid char device, exiting\n",uridata); 240 exit(1); 241 } 242 (*libtrace)->conn_info.path = strdup(uridata); 243 244 break; 219 245 220 246 case RTCLIENT: … … 249 275 250 276 (*libtrace)->fifo = create_fifo(1048576); 251 (*libtrace)->packet.buffer = 0;252 (*libtrace)->packet.size = 0;277 //(*libtrace)->packet.buffer = 0; 278 //(*libtrace)->packet.size = 0; 253 279 254 280 return 1; … … 370 396 O_RDONLY); 371 397 break; 398 #ifdef DAGDEVICE 399 case DAG: 400 if((libtrace->input.fd = dag_open(libtrace->conn_info.path)) < 0) { 401 fprintf(stderr,"Cannot open DAG %s: %m", libtrace->conn_info.path,errno); 402 exit(0); 403 } 404 if((libtrace->buf = dag_mmap(libtrace->input.fd)) == MAP_FAILED) { 405 fprintf(stderr,"Cannot mmap DAG %s: %m", libtrace->conn_info.path,errno); 406 exit(0); 407 } 408 if(dag_start(libtrace->input.fd) < 0) { 409 fprintf(stderr,"Cannot start DAG %s: %m", libtrace->conn_info.path,errno); 410 } 411 break; 412 #endif 413 372 414 } 373 415 break; … … 399 441 static int trace_read(struct libtrace_t *libtrace, void *buffer, size_t len) { 400 442 int numbytes; 401 assert(libtrace); 443 static unsigned bottom = 0, top, diff, curr, scan; 444 static short lctr = 0; 445 struct dag_record_t *recptr = 0; 446 int rlen; 447 assert(libtrace); 402 448 assert(len >= 0); 403 449 … … 424 470 break; 425 471 case DEVICE: 426 if ((numbytes=read(libtrace->input.fd, 472 switch(libtrace->format) { 473 case DAG: 474 top = dag_offset(libtrace->input.fd, 475 &bottom, 476 0); 477 diff = top - bottom; 478 errno = 0; 479 curr = 0; 480 481 recptr = (dag_record_t *) (libtrace->buf + (bottom + curr)); 482 483 buffer=libtrace->buf + (bottom + curr); 484 485 numbytes=diff; 486 487 488 break; 489 default: 490 if ((numbytes=read(libtrace->input.fd, 427 491 buffer, 428 492 len)) == -1) { 429 perror("read"); 430 return -1; 493 perror("read"); 494 return -1; 495 } 431 496 } 432 497 break; … … 452 517 * 453 518 */ 519 #define RP_BUFSIZE 65536 454 520 int trace_read_packet(struct libtrace_t *libtrace, struct libtrace_packet_t *packet) { 455 521 int numbytes; 456 522 int size; 457 char buf[ 4096];523 char buf[RP_BUFSIZE]; 458 524 struct pcap_pkthdr pcaphdr; 459 525 const u_char *pcappkt; … … 488 554 489 555 /* If we're reading from an ERF input, it's an offline trace. We can make some assumptions */ 490 491 556 if (libtrace->format == ERF) { 492 557 void *buffer2 = buffer; … … 518 583 do { 519 584 if (fifo_out_available(libtrace->fifo) == 0 || read_required) { 520 if ((numbytes = trace_read(libtrace,buf, 4096))<=0){585 if ((numbytes = trace_read(libtrace,buf,RP_BUFSIZE))<=0){ 521 586 return numbytes; 522 587 } … … 1046 1111 * @author Perry Lorier 1047 1112 */ 1048 struct libtrace_eventobj_t libtrace_event(struct libtrace_t *trace,1113 struct libtrace_eventobj_t trace_event(struct libtrace_t *trace, 1049 1114 struct libtrace_packet_t *packet) { 1050 1115 struct libtrace_eventobj_t event; 1116 1117 if (!trace) { 1118 fprintf(stderr,"You called trace_event() with a NULL trace object!\n"); 1119 } 1120 assert(trace); 1121 assert(packet); 1122 1123 /* Store the trace we are reading from into the packet opaque 1124 * structure */ 1125 packet->trace = trace; 1126 1051 1127 /* Is there a packet ready? */ 1052 1128 switch (trace->sourcetype) { … … 1059 1135 } 1060 1136 if (data>0) { 1137 trace_read_packet(trace,packet); 1061 1138 event.type = TRACE_EVENT_PACKET; 1139 return event; 1062 1140 } 1063 1141 event.type = TRACE_EVENT_IOWAIT; 1142 return event; 1064 1143 } 1065 1144 case SOCKET: … … 1068 1147 { 1069 1148 int data; 1070 if(ioctl(trace->input.fd,FIONREAD,&data)==-1){ 1149 event.fd = trace->input.fd; 1150 if(ioctl(event.fd,FIONREAD,&data)==-1){ 1071 1151 perror("ioctl(FIONREAD)"); 1072 1152 } 1073 1153 if (data>0) { 1154 trace_read_packet(trace,packet); 1074 1155 event.type = TRACE_EVENT_PACKET; 1075 }1076 event.fd = trace->input.fd;1156 return event; 1157 } 1077 1158 event.type = TRACE_EVENT_IOWAIT; 1159 return event; 1078 1160 } 1079 1161 case STDIN: … … 1090 1172 if (trace->last_ts!=0) { 1091 1173 event.seconds = ts - trace->last_ts; 1092 if (event.seconds>time(NULL)-trace->start_ts) 1174 if (event.seconds>time(NULL)-trace->start_ts) { 1093 1175 event.type = TRACE_EVENT_SLEEP; 1176 return event; 1177 } 1178 1094 1179 } 1095 1180 else { … … 1104 1189 trace->packet.buffer = 0; 1105 1190 event.type = TRACE_EVENT_PACKET; 1191 return event; 1106 1192 } 1107 1193 default: 1108 1194 assert(0); 1109 1195 } 1110 return event;1196 assert(0); 1111 1197 } 1112 1198
Note: See TracChangeset
for help on using the changeset viewer.