Changeset 72bfe20 for lib/trace.c


Ignore:
Timestamp:
08/08/05 16:33:16 (16 years ago)
Author:
Daniel Lawson <dlawson@…>
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
Message:

trace_event fixed

File:
1 edited

Legend:

Unmodified
Added
Removed
  • lib/trace.c

    ra114d8b5 r72bfe20  
    113113#endif
    114114
    115 #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
     115//#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
    135135
    136136#include "libtrace_int.h"
     137#include "format_helper.h"
    137138//#include "format/format_list.h"
    138139#include <err.h>
     
    977978        packet->trace = trace;
    978979
    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
    1078986}
    1079987
Note: See TracChangeset for help on using the changeset viewer.