Changeset 9e2a109 for lib/format_pcap.c


Ignore:
Timestamp:
08/04/05 15:37:08 (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:
ef55d05
Parents:
fe43699
Message:

moved format.h to libtrace_int.h

pulled out all the format-specific libtrace_t stuff into an opaque pointer which is defined inside each format_*.o file, for both input and output

This seems to work, it compiles at least, and wag and erf both work

rtclient input is currently broken, I suspect it's not stepping over the status properly

File:
1 edited

Legend:

Unmodified
Added
Removed
  • lib/format_pcap.c

    r7d69878 r9e2a109  
    3232#include "config.h"
    3333#include "libtrace.h"
    34 #include "format.h"
     34#include "libtrace_int.h"
    3535#include <inttypes.h>
    3636#include <sys/types.h>
     
    5757#if HAVE_PCAP
    5858
     59struct libtrace_format_data_t {
     60        union {
     61                char *path;             /**< information for local sockets */
     62                char *interface;        /**< intormation for reading of network
     63                                             interfaces */
     64        } conn_info;
     65        /** Information about the current state of the input device */
     66        union {
     67                int fd;
     68                FILE *file;
     69                pcap_t *pcap;
     70        } input;
     71};
     72
    5973static int pcap_init_input(struct libtrace_t *libtrace) {
    6074        char errbuf[PCAP_ERRBUF_SIZE];
    6175        struct stat buf;
    62         if (!strncmp(libtrace->conn_info.path,"-",1)) {
    63                 if ((libtrace->input.pcap =
    64                         pcap_open_offline(libtrace->conn_info.path,
     76        libtrace->format_data = (struct libtrace_format_data_t *)
     77                malloc(sizeof(struct libtrace_format_data_t));
     78        libtrace->format_data->conn_info.path = libtrace->uridata;
     79        if (!strncmp(libtrace->format_data->conn_info.path,"-",1)) {
     80                if ((libtrace->format_data->input.pcap =
     81                        pcap_open_offline(libtrace->format_data->conn_info.path,
    6582                                                errbuf)) == NULL) {
    6683                        fprintf(stderr,"%s\n",errbuf);
     
    6885                }               
    6986        } else {
    70                 if (stat(libtrace->conn_info.path,&buf) == -1) {
     87                if (stat(libtrace->format_data->conn_info.path,&buf) == -1) {
    7188                        perror("stat");
    7289                        return 0;
    7390                }
    7491                if (S_ISCHR(buf.st_mode)) {
    75                         if ((libtrace->input.pcap =
    76                                 pcap_open_live(libtrace->conn_info.path,
     92                        if ((libtrace->format_data->input.pcap =
     93                                pcap_open_live(libtrace->format_data->conn_info.path,
    7794                                        4096,
    7895                                        1,
     
    83100                        }
    84101                } else {
    85                         if ((libtrace->input.pcap =
    86                                 pcap_open_offline(libtrace->conn_info.path,
     102                        if ((libtrace->format_data->input.pcap =
     103                                pcap_open_offline(libtrace->format_data->conn_info.path,
    87104                                        errbuf)) == NULL) {
    88105                                fprintf(stderr,"%s\n",errbuf);
     
    93110        fprintf(stderr,
    94111                        "Unsupported scheme (%s) for format pcap\n",
    95                         libtrace->conn_info.path);
     112                        libtrace->format_data->conn_info.path);
    96113        return 0;
    97114       
     
    100117static int pcapint_init_input(struct libtrace_t *libtrace) {
    101118        char errbuf[PCAP_ERRBUF_SIZE];
    102         if ((libtrace->input.pcap =
    103                         pcap_open_live(libtrace->conn_info.path,
     119        if ((libtrace->format_data->input.pcap =
     120                        pcap_open_live(libtrace->format_data->conn_info.path,
    104121                        4096,
    105122                        1,
     
    132149        int pcapbytes = 0;
    133150
    134         while ((pcapbytes = pcap_dispatch(libtrace->input.pcap,
     151        while ((pcapbytes = pcap_dispatch(libtrace->format_data->input.pcap,
    135152                                        1, /* number of packets */
    136153                                        &trace_pcap_handler,
     
    151168        int linktype = 0;
    152169        pcapptr = (struct pcap_pkthdr *)packet->buffer;
    153         linktype = pcap_datalink(packet->trace->input.pcap);
     170        linktype = pcap_datalink(packet->trace->format_data->input.pcap);
    154171        switch(linktype) {
    155172                case DLT_NULL:
     
    280297        printf("\n");
    281298}
    282 static struct format_t pcap = {
     299
     300
     301static struct libtrace_format_t pcap = {
    283302        "pcap",
    284303        "$Id$",
     
    304323};
    305324
    306 static struct format_t pcapint = {
     325static struct libtrace_format_t pcapint = {
    307326        "pcapint",
    308327        "$Id$",
Note: See TracChangeset for help on using the changeset viewer.