Changeset ef36351d


Ignore:
Timestamp:
10/11/04 13:53:12 (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:
37d2975
Parents:
4e92740
Message:

fixes in the event framework

Location:
lib
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • lib/libtrace.h

    r83e0a25 ref36351d  
    358358        TRACE_EVENT_SLEEP,
    359359        TRACE_EVENT_PACKET
     360} libtrace_eventtype_t;
     361
     362typedef struct {
     363        libtrace_eventtype_t type;
     364        int fd;
     365        double seconds;
    360366} libtrace_event_t;
    361367
    362368/** process a libtrace event
    363  * @returns
     369 * @param trace the libtrace opaque pointer
     370 * @param packet the libtrace_packet opaque pointer
     371 * @param fd a pointer to a file descriptor to listen on
     372 * @param seconds a pointer the time in seconds since to the next event
     373 * @returns libtrace_event struct containing the type, and potential
     374 *      fd or seconds to sleep on
     375 *
     376 * Type can be:
    364377 *  TRACE_EVENT_IOWAIT  Waiting on I/O on <fd>
    365378 *  TRACE_EVENT_SLEEP   Next event in <seconds>
    366379 *  TRACE_EVENT_PACKET  Packet arrived in <buffer> with size <size>
    367380 */
    368 libtrace_event_t trace_event(struct libtrace_packet_t *packet,
    369                 int *fd,double *seconds);
     381libtrace_event_t trace_event(struct libtrace_t *trace,
     382                struct libtrace_packet_t *packet);
    370383
    371384/** setup a BPF filter
  • lib/trace.c

    rb020bb9 ref36351d  
    10331033
    10341034/** process a libtrace event
    1035  * @param libtrace the libtrace opaque pointer
     1035 * @param trace the libtrace opaque pointer
     1036 * @param packet the libtrace_packet opaque pointer
    10361037 * @param fd a pointer to a file descriptor to listen on
    10371038 * @param seconds a pointer the time in seconds since to the next event
    1038  * @param buffer a pointer to a filled in buffer
    1039  * @param len the length of the buffer
    1040  * @param size the size of the event
    10411039 * @returns
    10421040 *  TRACE_EVENT_IOWAIT  Waiting on I/O on <fd>
     
    10481046 */
    10491047libtrace_event_t libtrace_event(struct libtrace_t *trace,
    1050                 struct libtrace_packet_t *packet,
    1051                         int *fd,double *seconds) {
    1052         *seconds = 0;
    1053         *fd = 0;
     1048                struct libtrace_packet_t *packet) {
     1049        libtrace_event_t event;
    10541050        /* Is there a packet ready? */
    10551051        switch (trace->sourcetype) {
     
    10571053                        {
    10581054                                int data;
    1059                                 *fd = pcap_fileno(trace->input.pcap);
    1060                                 if(ioctl(*fd,FIONREAD,&data)==-1){
     1055                                event.fd = pcap_fileno(trace->input.pcap);
     1056                                if(ioctl(event.fd,FIONREAD,&data)==-1){
    10611057                                        perror("ioctl(FIONREAD)");
    10621058                                }
    10631059                                if (data>0) {
    1064                                         return TRACE_EVENT_PACKET;
    1065                                 }
    1066                                 return TRACE_EVENT_IOWAIT;
     1060                                        event.type = TRACE_EVENT_PACKET;
     1061                                }
     1062                                event.type = TRACE_EVENT_IOWAIT;
    10671063                        }
    10681064                case SOCKET:
     
    10751071                                }
    10761072                                if (data>0) {
    1077                                         return TRACE_EVENT_PACKET;
    1078                                 }
    1079                                 *fd = trace->input.fd;
    1080                                 return TRACE_EVENT_IOWAIT;
     1073                                        event.type = TRACE_EVENT_PACKET;
     1074                                }
     1075                                event.fd = trace->input.fd;
     1076                                event.type = TRACE_EVENT_IOWAIT;
    10811077                        }
    10821078                case STDIN:
     
    10921088                                ts=trace_get_seconds(packet);
    10931089                                if (trace->last_ts!=0) {
    1094                                         *seconds = ts - trace->last_ts;
    1095                                         if (*seconds>time(NULL)-trace->start_ts)
    1096                                                 return TRACE_EVENT_SLEEP;
     1090                                        event.seconds = ts - trace->last_ts;
     1091                                        if (event.seconds>time(NULL)-trace->start_ts)
     1092                                                event.type = TRACE_EVENT_SLEEP;
    10971093                                }
    10981094                                else {
     
    11061102                                free(trace->packet.buffer);
    11071103                                trace->packet.buffer = 0;
    1108                                 return TRACE_EVENT_PACKET;
     1104                                event.type = TRACE_EVENT_PACKET;
    11091105                        }
    11101106                default:
    11111107                        assert(0);
    11121108        }
    1113         /* Shouldn't get here */
    1114         assert(0);
     1109        return event;
    11151110}
    11161111
Note: See TracChangeset for help on using the changeset viewer.