Changeset 72bfe20 for lib/trace.c
- Timestamp:
- 08/08/05 16:33:16 (17 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:
- c3274c6
- Parents:
- 8184acc
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
lib/trace.c
ra114d8b5 r72bfe20 113 113 #endif 114 114 115 #if HAVE_PCAP_H116 # include <pcap.h>117 # ifdef HAVE_PCAP_INT_H118 # include <pcap-int.h>119 # endif120 #endif121 122 #ifdef HAVE_ZLIB_H123 # include <zlib.h>124 #endif125 126 127 #include "wag.h"128 129 #ifdef HAVE_DAG_API130 # include "dagnew.h"131 # include "dagapi.h"132 #else133 # include "dagformat.h"134 #endif115 //#if HAVE_PCAP_H 116 //# include <pcap.h> 117 //# ifdef HAVE_PCAP_INT_H 118 //# include <pcap-int.h> 119 //# endif 120 //#endif 121 122 //#ifdef HAVE_ZLIB_H 123 //# include <zlib.h> 124 //#endif 125 126 127 //#include "wag.h" 128 129 //#ifdef HAVE_DAG_API 130 //# include "dagnew.h" 131 //# include "dagapi.h" 132 //#else 133 //# include "dagformat.h" 134 //#endif 135 135 136 136 #include "libtrace_int.h" 137 #include "format_helper.h" 137 138 //#include "format/format_list.h" 138 139 #include <err.h> … … 977 978 packet->trace = trace; 978 979 979 /* Is there a packet ready? */ 980 switch (trace->sourcetype) { 981 #if HAVE_PCAP 982 case INTERFACE: 983 { 984 int data; 985 // XXX FIXME 986 //event.fd = pcap_fileno(trace->input.pcap); 987 if(ioctl(event.fd,FIONREAD,&data)==-1){ 988 perror("ioctl(FIONREAD)"); 989 } 990 if (data>0) { 991 event.size = trace_read_packet(trace,packet); 992 event.type = TRACE_EVENT_PACKET; 993 return event; 994 } 995 event.type = TRACE_EVENT_IOWAIT; 996 return event; 997 } 998 #endif 999 case SOCKET: 1000 case DEVICE: 1001 case RT: 1002 { 1003 int data; 1004 // XXX FIXME 1005 //event.fd = trace->input.fd; 1006 if(ioctl(event.fd,FIONREAD,&data)==-1){ 1007 perror("ioctl(FIONREAD)"); 1008 } 1009 if (data>0) { 1010 event.size = trace_read_packet(trace,packet); 1011 event.type = TRACE_EVENT_PACKET; 1012 return event; 1013 } 1014 event.type = TRACE_EVENT_IOWAIT; 1015 return event; 1016 } 1017 case STDIN: 1018 case TRACE: 1019 { 1020 double ts; 1021 double now; 1022 struct timeval stv; 1023 /* "Prime" the pump */ 1024 if (!trace->event.packet.buffer) { 1025 trace->event.packet.buffer = malloc(4096); 1026 trace->event.packet.size= 1027 trace_read_packet(trace,packet); 1028 event.size = trace->event.packet.size; 1029 if (trace->event.packet.size > 0 ) { 1030 memcpy(trace->event.packet.buffer,packet->buffer,trace->event.packet.size); 1031 } else { 1032 // return here, the test for event.size will sort out the error 1033 event.type = TRACE_EVENT_PACKET; 1034 return event; 1035 } 1036 } 1037 1038 ts=trace_get_seconds(packet); 1039 if (trace->event.tdelta!=0) { 1040 // Get the adjusted current time 1041 gettimeofday(&stv, NULL); 1042 now = stv.tv_sec + ((double)stv.tv_usec / 1000000.0); 1043 now -= trace->event.tdelta; // adjust for trace delta 1044 1045 1046 // if the trace timestamp is still in the future, 1047 // return a SLEEP event, otherwise fire the packet 1048 if (ts > now) { 1049 event.seconds = ts - trace->event.trace_last_ts; 1050 event.type = TRACE_EVENT_SLEEP; 1051 return event; 1052 } 1053 } else { 1054 gettimeofday(&stv, NULL); 1055 // work out the difference between the start of trace replay, 1056 // and the first packet in the trace 1057 trace->event.tdelta = stv.tv_sec + ((double)stv.tv_usec / 1000000.0); 1058 trace->event.tdelta -= ts; 1059 1060 } 1061 1062 // This is the first packet, so just fire away. 1063 packet->size = trace->event.packet.size; 1064 memcpy(packet->buffer,trace->event.packet.buffer,trace->event.packet.size); 1065 1066 free(trace->event.packet.buffer); 1067 trace->event.packet.buffer = 0; 1068 event.type = TRACE_EVENT_PACKET; 1069 1070 trace->event.trace_last_ts = ts; 1071 1072 return event; 1073 } 1074 default: 1075 assert(0); 1076 } 1077 assert(0); 980 if (packet->trace->format->trace_event) { 981 return packet->trace->format->trace_event(trace,packet); 982 } else { 983 return event; 984 } 985 1078 986 } 1079 987
Note: See TracChangeset
for help on using the changeset viewer.