Changeset a6d38b6


Ignore:
Timestamp:
11/02/04 16:23:59 (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:
4389bd1
Parents:
aa27e1e
Message:

updated capture example

fixed bug in DAG read path of libtrace where it wasn't reading from the memory hole correctly

Files:
3 edited

Legend:

Unmodified
Added
Removed
  • examples/capture/Makefile

    raa27e1e ra6d38b6  
    44
    55INCLUDE = -I$(PREFIX)/include
    6 CFLAGS = -Wall -Wimplicit -Wformat -pipe -g -O2 -D_FILE_OFFSET_BITES=64
     6CFLAGS = -Wall -Wimplicit -Wformat -pipe -g -O2 -D_FILE_OFFSET_BITES=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE
    77CFLAGS += $(INCLUDE)
    88libdir = -L$(PREFIX)/lib
  • examples/capture/capture.c

    raa27e1e ra6d38b6  
    110110                perror("setitimer");
    111111
     112        if (argc == 1) {
     113                printf("usage: capture <uri> [<output filename>]\n");
     114                exit(0);
     115        }
    112116        if (argc == 2) {
    113117                uri = strdup(argv[1]);
  • lib/trace.c

    r678048a ra6d38b6  
    485485                                switch(libtrace->format) {
    486486                                        case DAG:
    487                                                
     487
     488                                                libtrace->dag.bottom = libtrace->dag.top;
    488489                                                libtrace->dag.top = dag_offset(
    489490                                                                libtrace->input.fd,
     
    493494                                                        libtrace->dag.bottom;
    494495                                               
    495                                                 //recptr = (dag_record_t *) ((void *)libtrace->buf + (bottom + curr));
    496                                                 //rlen = ntohs(recptr->rlen);
    497 
    498                                                
    499                                                 //memcpy(buffer,(void *)(libtrace->buf + (bottom + curr)),diff);
    500                                                
    501                                                 //buffer=libtrace->buf + (bottom + curr);
    502 
    503496                                                numbytes=libtrace->dag.diff;
    504                                                 libtrace->dag.bottom = libtrace->dag.top;
    505497                                                libtrace->dag.offset = 0;
    506498                                               
     
    604596
    605597        if (libtrace->format == DAG) {
    606                 // we can do some zero-copy stuff here
    607                 while(1) {
    608                         if (libtrace->dag.diff == 0) {
    609                                 if ((numbytes = trace_read(libtrace,buf,RP_BUFSIZE)) <= 0)
    610                                         return numbytes;
    611                         }
    612                         // DAG always gives us whole packets.
    613 
    614                         erfptr = (dag_record_t *) (libtrace->dag.buf + libtrace->dag.offset);
    615                         size = ntohs(erfptr->rlen);
    616 
    617                         assert( (size - sizeof(dag_record_t)) < LIBTRACE_PACKET_BUFSIZE);
    618 
    619                         memcpy(packet->buffer, erfptr, size);
    620                         //packet->buffer = (void *)erfptr;
    621                         packet->size = size;
    622                         libtrace->dag.offset += size;
    623                         libtrace->dag.diff -= size;
    624 
    625                         return (size);
     598                if (libtrace->dag.diff == 0) {
     599                        if ((numbytes = trace_read(libtrace,buf,RP_BUFSIZE)) <= 0)
     600                                return numbytes;
     601                }
     602                // DAG always gives us whole packets.
     603
     604                erfptr = (dag_record_t *) ((void *)libtrace->dag.buf + (libtrace->dag.bottom + libtrace->dag.offset));
     605                size = ntohs(erfptr->rlen);
     606
     607                if ( size  > LIBTRACE_PACKET_BUFSIZE) {
     608                        printf("%d\n",size);
     609                        assert( size < LIBTRACE_PACKET_BUFSIZE);
     610                }
     611
     612                // have to copy it out of the memory hole at this stage:
     613                memcpy(packet->buffer, erfptr, size);
     614
     615                packet->size = size;
     616                libtrace->dag.offset += size;
     617                libtrace->dag.diff -= size;
     618               
     619                assert(libtrace->dag.diff >= 0);
     620                //assert(libtrace->dag.offset <= libtrace->dag.top);
     621                return (size);
    626622                       
    627                 }
    628623        }
    629624        do {
     
    649644
    650645                                /* FALL THRU */
    651                         case ERF:
    652                         case DAG:
     646                        //case ERF:
     647                        //case DAG:
    653648                                // read in the erf header
    654649                                if ((numbytes = fifo_out_read(libtrace->fifo, buffer, sizeof(dag_record_t))) == 0) {
Note: See TracChangeset for help on using the changeset viewer.