Changeset 117e83b


Ignore:
Timestamp:
11/03/05 15:55:40 (16 years ago)
Author:
Shane Alcock <salcock@…>
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:
41b53c2
Parents:
1da1812
Message:

rtclient_read_packet should now read packet->size from the fifo and use
that to calculate how much to read from the fifo into packet->buffer.
Also fixed problem where an incorrect amount of data was being skipped
when RT_MSG packets are encountered.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • lib/format_erf.c

    r44c6c85 r117e83b  
    629629                tracefifo_out_update(libtrace->fifo,sizeof(uint32_t));
    630630
     631                // Read in packet size
     632                if (tracefifo_out_read(libtrace->fifo,
     633                                &packet->size, sizeof(uint32_t)) == 0) {
     634                        tracefifo_out_reset(libtrace->fifo);
     635                        read_required = 1;
     636                        continue;
     637                }
     638                tracefifo_out_update(libtrace->fifo, sizeof(uint32_t));
     639               
     640                /*
    631641                // read in the ERF header
    632642                if ((numbytes = tracefifo_out_read(libtrace->fifo, buffer,
     
    636646                        continue;
    637647                }
    638                
     648                */
    639649                if (packet->status.type == RT_MSG) {
    640650                        // Need to skip this packet as it is a message packet
    641                         tracefifo_out_update(libtrace->fifo, dag_record_size);
    642                         tracefifo_ack_update(libtrace->fifo, dag_record_size + sizeof(uint32_t));
     651                        tracefifo_out_update(libtrace->fifo, packet->size);
     652                        tracefifo_ack_update(libtrace->fifo, packet->size + (sizeof(uint32_t) * 2));
    643653                        continue;
    644654                }
    645655               
    646                 size = ntohs(((dag_record_t *)buffer)->rlen);
     656                //size = ntohs(((dag_record_t *)buffer)->rlen);
    647657               
    648658                // read in the full packet
    649659                if ((numbytes = tracefifo_out_read(libtrace->fifo,
    650                                                 buffer, size)) == 0) {
     660                                                buffer, packet->size)) == 0) {
    651661                        tracefifo_out_reset(libtrace->fifo);
    652662                        read_required = 1;
     
    655665
    656666                // got in our whole packet, so...
    657                 tracefifo_out_update(libtrace->fifo,size);
    658 
    659                 tracefifo_ack_update(libtrace->fifo,size + sizeof(uint32_t));
    660 
    661                 packet->size = numbytes;
     667                tracefifo_out_update(libtrace->fifo,packet->size);
     668
     669                tracefifo_ack_update(libtrace->fifo,packet->size + (sizeof(uint32_t) * 2));
     670
     671                //packet->size = numbytes;
    662672                return numbytes;
    663673        } while(1);
Note: See TracChangeset for help on using the changeset viewer.