Changeset f57715c8


Ignore:
Timestamp:
05/25/06 14:59:54 (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:
77a38d9
Parents:
961f687
Message:

Fix writing out erf files
Fix the "padding" being counted as part of the wire length!

File:
1 edited

Legend:

Unmodified
Added
Removed
  • lib/format_erf.c

    r0e9b9f8 rf57715c8  
    224224static int erf_get_padding(const libtrace_packet_t *packet)
    225225{
    226         dag_record_t *erfptr = (dag_record_t *)packet->header;
    227         switch(erfptr->type) {
    228                 case TYPE_ETH:          return 2;
    229                 default:                return 0;
     226        if (packet->trace->format->type==TRACE_FORMAT_ERF) {
     227                dag_record_t *erfptr = (dag_record_t *)packet->header;
     228                switch(erfptr->type) {
     229                        case TYPE_ETH:          return 2;
     230                        default:                return 0;
     231                }
     232        }
     233        else {
     234                switch(trace_get_link_type(packet)) {
     235                        case TYPE_ETH:          return 2;
     236                        default:                return 0;
     237                }
    230238        }
    231239}
     
    733741                        return -1;
    734742                }
     743                trace_set_err(libtrace,EIO,"Truncated packet (wanted %d, got %d)", size, numbytes);
    735744                /* Failed to read the full packet?  must be EOF */
    736                 return 0;
     745                return -1;
    737746        }
    738747        if (((dag_record_t *)packet->buffer)->flags.rxerror == 1) {
     
    932941                memset(&erfhdr.flags,1,sizeof(erfhdr.flags));
    933942                /* Packet length (rlen includes format overhead) */
    934                 erfhdr.rlen = trace_get_capture_length(packet)
    935                         + erf_get_framing_length(packet);
     943                erfhdr.rlen = htons(trace_get_capture_length(packet)
     944                        + erf_get_framing_length(packet));
    936945                /* loss counter. Can't do this */
    937946                erfhdr.lctr = 0;
    938                 /* Wire length */
    939                 erfhdr.wlen = trace_get_wire_length(packet);
     947                /* Wire length, may contain the padding */
     948                erfhdr.wlen = htons(trace_get_wire_length(packet)+pad);
    940949
    941950                /* Write it out */
     
    983992        dag_record_t *erfptr = 0;
    984993        erfptr = (dag_record_t *)packet->header;
    985         return ntohs(erfptr->wlen);
     994        return ntohs(erfptr->wlen) - erf_get_padding(packet);
    986995}
    987996
Note: See TracChangeset for help on using the changeset viewer.