Changeset 6c248a9


Ignore:
Timestamp:
03/01/06 11:52:01 (15 years ago)
Author:
Perry Lorier <perry@…>
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:
30c0246
Parents:
4aa4615
Message:

Add support for the other seek formats.
Fix bugs in other formats to do with _start()/_pause()

Location:
lib
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • lib/format_erf.c

    r4aa4615 r6c248a9  
    218218static int erf_start_input(libtrace_t *libtrace)
    219219{
     220        if (INPUT.file)
     221                return 0; /* success */
     222
    220223        INPUT.file = trace_open_file(libtrace);
    221224
     
    384387                return -1;
    385388        }
    386         return 0;
     389        return 0; /* success */
     390}
     391
     392static int rtclient_pause_input(libtrace_t *libtrace)
     393{
     394        close(INPUT.fd);
     395        return 0; /* success */
    387396}
    388397
     
    731740        } else {
    732741                dag_record_t erfhdr;
     742                int type;
    733743                /* convert format - build up a new erf header */
    734744                /* Timestamp */
    735745                erfhdr.ts = trace_get_erf_timestamp(packet);
    736                 erfhdr.type = libtrace_to_erf_type(trace_get_link_type(packet));
     746                type=libtrace_to_erf_type(trace_get_link_type(packet));
     747                if (type==(char)-1) {
     748                        trace_set_err_out(libtrace,TRACE_ERR_BAD_PACKET,
     749                                        "No erf type for packet");
     750                        return -1;
     751                }
     752                erfhdr.type = type;
    737753                /* Flags. Can't do this */
    738754                memset(&erfhdr.flags,1,sizeof(erfhdr.flags));
     
    806822
    807823static int rtclient_get_fd(const libtrace_t *libtrace) {
    808         return INPUT.fd;
    809 }
    810 
    811 static int erf_get_fd(const libtrace_t *libtrace) {
    812824        return INPUT.fd;
    813825}
     
    964976        NULL,                           /* config_input */
    965977        rtclient_start_input,           /* start_input */
    966         NULL,                           /* pause_input */
     978        rtclient_pause_input,           /* pause_input */
    967979        NULL,                           /* init_output */
    968980        NULL,                           /* config_output */
  • lib/format_pcap.c

    rd8f02df r6c248a9  
    116116static int pcap_start_input(struct libtrace_t *libtrace) {
    117117        char errbuf[PCAP_ERRBUF_SIZE];
     118
     119        /* if the file is already open */
     120        if (INPUT.pcap)
     121                return 0; /* success */
     122
    118123        if ((INPUT.pcap =
    119124                pcap_open_offline(libtrace->uridata,
     
    158163}
    159164
    160 static int pcap_pause_input(libtrace_t *libtrace) {
    161         pcap_close(INPUT.pcap);
    162         INPUT.pcap=NULL;
    163 
    164         return 0;
    165 }
    166 
    167165static int pcap_init_output(struct libtrace_out_t *libtrace) {
    168166        libtrace->format_data = malloc(sizeof(struct pcap_format_data_out_t));
     
    177175        DATA(libtrace)->snaplen = LIBTRACE_PACKET_BUFSIZE;
    178176        DATA(libtrace)->promisc = 0;
    179         return 1;
     177        return 0; /* success */
    180178}
    181179
     
    211209                        errbuf)) == NULL) {
    212210                trace_set_err(libtrace,TRACE_ERR_INIT_FAILED,"%s",errbuf);
    213                 return -1;
     211                return -1; /* failure */
    214212        }
    215213        /* Set a filter if one is defined */
     
    219217                        trace_set_err(libtrace,TRACE_ERR_INIT_FAILED,"%s",
    220218                                        pcap_geterr(INPUT.pcap));
    221                         return -1;
     219                        return -1; /* failure */
    222220                }
    223                 return 0;
    224         }
    225         return 1;
    226 }
    227 
    228 static int pcap_fin_input(struct libtrace_t *libtrace) {
    229         /* we don't need to close the pcap object since libtrace will have
    230          * paused the trace for us.
    231          */
     221        }
     222        return 0; /* success */
     223}
     224
     225static int pcapint_pause_input(libtrace_t *libtrace)
     226{
     227        pcap_close(INPUT.pcap);
     228        INPUT.pcap=NULL;
     229        return 0; /* success */
     230}
     231
     232static int pcap_fin_input(libtrace_t *libtrace)
     233{
    232234        free(libtrace->format_data);
    233         return 0;
    234 }
    235 
    236 static int pcap_fin_output(libtrace_out_t *libtrace) {
     235        return 0; /* success */
     236}
     237
     238static int pcap_fin_output(libtrace_out_t *libtrace)
     239{
    237240        pcap_dump_flush(OUTPUT.trace.dump);
    238241        pcap_dump_close(OUTPUT.trace.dump);
     
    452455        pcap_config_input,              /* config_input */
    453456        pcap_start_input,               /* start_input */
    454         pcap_pause_input,               /* pause_input */
     457        NULL,                           /* pause_input */
    455458        pcap_init_output,               /* init_output */
    456459        NULL,                           /* config_output */
     
    485488        pcapint_config_input,           /* config_input */
    486489        pcapint_start_input,            /* start_input */
    487         pcap_pause_input,               /* pause_input */
     490        pcapint_pause_input,            /* pause_input */
    488491        NULL,                           /* init_output */
    489492        NULL,                           /* config_output */
  • lib/format_rt.c

    r9fae46b r6c248a9  
    274274
    275275
    276 static int rt_set_format(struct libtrace_t *libtrace,
    277                 struct libtrace_packet_t *packet) {
     276static int rt_set_format(libtrace_t *libtrace, libtrace_packet_t *packet)
     277{
    278278        switch (packet->type) {
    279279                case RT_DATA_ERF:
     
    304304                        return -1;
    305305        }
    306         return 1;
     306        return 0; /* success */
    307307}               
    308308
     
    371371}
    372372       
    373 static int rt_read_packet(struct libtrace_t *libtrace,
    374                 struct libtrace_packet_t *packet) {
     373static int rt_read_packet(libtrace_t *libtrace, libtrace_packet_t *packet) {
    375374       
    376375        rt_header_t pkt_hdr;
     
    443442                                        pkt_hdr.type);
    444443        }
    445         return 1;
    446        
     444        return trace_get_capture_length(packet)+trace_get_framing_length(packet);
    447445}
    448446
  • lib/format_wag.c

    r4aa4615 r6c248a9  
    142142{
    143143        libtrace->format_data = malloc(sizeof(struct wag_format_data_t));
    144 
    145144        return 0;
    146145}
     
    148147static int wtf_start_input(libtrace_t *libtrace)
    149148{
     149        if (DATA(libtrace)->input.file)
     150                return 0; /* success */
    150151        DATA(libtrace)->input.file = trace_open_file(libtrace);
    151152
    152         if (DATA(libtrace)->input.file)
    153                 return 0;
    154 
    155         return -1;
     153        if (!DATA(libtrace)->input.file)
     154                return -1;
     155
     156        return 0; /* success */
    156157}
    157158
     
    360361        if (packet->trace->format != &wag_trace) {
    361362                trace_set_err_out(libtrace,TRACE_ERR_NO_CONVERSION,
    362                                 "Cannot convert from wag trace format to %s format yet",
     363                                "Cannot convert to wag trace format from %s format yet",
    363364                                packet->trace->format->name);
    364365                return -1;
  • lib/trace.c

    r4aa4615 r6c248a9  
    16891689        }
    16901690        else {
    1691                 /*FIXME: can this be transmuted into seek_seconds, or
    1692                  * seek_timeval?
    1693                  */
     1691                if (trace->format->seek_timeval) {
     1692                        struct timeval tv;
     1693#if __BYTE_ORDER == __BIG_ENDIAN
     1694                        tv.tv_sec = ts & 0xFFFFFFFF;
     1695#elif __BYTE_ORDER == __LITTLE_ENDIAN
     1696                        tv.tv_sec = ts >> 32;
     1697#else
     1698#error "What on earth are you running this on?"
     1699#endif
     1700                        tv.tv_usec = ((ts&0xFFFFFFFF)*1000000)>>32;
     1701                        if (tv.tv_usec >= 1000000) {
     1702                                tv.tv_usec -= 1000000;
     1703                                tv.tv_sec += 1;
     1704                        }
     1705                        return trace->format->seek_timeval(trace,tv);
     1706                }
     1707                if (trace->format->seek_seconds) {
     1708                        double seconds = 
     1709                                (ts>>32) + ((ts & UINT_MAX)*1.0 / UINT_MAX);
     1710                        return trace->format->seek_seconds(trace,seconds);
     1711                }
    16941712                trace_set_err(trace,
    16951713                                TRACE_ERR_OPTION_UNAVAIL,
     
    16991717}
    17001718
     1719int trace_seek_seconds(libtrace_t *trace, double seconds)
     1720{
     1721        if (trace->format->seek_seconds) {
     1722                return trace->format->seek_seconds(trace,seconds);
     1723        }
     1724        else {
     1725                if (trace->format->seek_timeval) {
     1726                        struct timeval tv;
     1727                        tv.tv_sec = (uint32_t)seconds;
     1728                        tv.tv_usec = (uint32_t)(((seconds - tv.tv_sec) * 1000000)/UINT_MAX);
     1729                        return trace->format->seek_timeval(trace,tv);
     1730                }
     1731                if (trace->format->seek_erf) {
     1732                        uint64_t timestamp =
     1733                                ((uint64_t)((uint32_t)seconds) << 32) + \
     1734                            (( seconds - (uint32_t)seconds   ) * UINT_MAX);
     1735                        return trace->format->seek_erf(trace,timestamp);
     1736                }
     1737                trace_set_err(trace,
     1738                                TRACE_ERR_OPTION_UNAVAIL,
     1739                                "Feature unimplemented");
     1740                return -1;
     1741        }
     1742}
     1743
     1744int trace_seek_timeval(libtrace_t *trace, struct timeval tv)
     1745{
     1746        if (trace->format->seek_timeval) {
     1747                return trace->format->seek_timeval(trace,tv);
     1748        }
     1749        else {
     1750                if (trace->format->seek_erf) {
     1751                        uint64_t timestamp = ((((uint64_t)tv.tv_sec) << 32) + \
     1752                                (((uint64_t)tv.tv_usec * UINT_MAX)/1000000));
     1753                        return trace->format->seek_erf(trace,timestamp);
     1754                }
     1755                if (trace->format->seek_seconds) {
     1756                        double seconds = tv.tv_sec + ((tv.tv_usec * UINT_MAX * 1.0)/1000000);
     1757                        return trace->format->seek_seconds(trace,seconds);
     1758                }
     1759                trace_set_err(trace,
     1760                                TRACE_ERR_OPTION_UNAVAIL,
     1761                                "Feature unimplemented");
     1762                return -1;
     1763        }
     1764}
     1765
Note: See TracChangeset for help on using the changeset viewer.