Changeset f3e1f19


Ignore:
Timestamp:
10/16/18 15:55:10 (2 years ago)
Author:
Shane Alcock <salcock@…>
Branches:
develop, master, ringperformance
Children:
928db3d, dab79f2
Parents:
fe4940e
Message:

Make sure we use cached framing length wherever possible

Location:
lib
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • lib/format_erf.c

    r32ee9b2 rf3e1f19  
    469469                packet->payload = NULL;
    470470        } else {
    471                 packet->payload = (char*)packet->buffer + erf_get_framing_length(packet);
     471                packet->payload = (char*)packet->buffer + trace_get_framing_length(packet);
    472472        }
    473473
     
    765765        dag_record_t *erfptr = 0;
    766766        int caplen;
     767        size_t framinglen;
     768        uint16_t wlen, rlen;
     769
    767770        if (packet->payload == NULL)
    768                 return 0; 
    769        
     771                return 0;
     772
    770773        erfptr = (dag_record_t *)packet->header;
    771         caplen = ntohs(erfptr->rlen) - erf_get_framing_length(packet);
    772         if (ntohs(erfptr->wlen) < caplen)
    773                 return ntohs(erfptr->wlen);
    774 
    775         return (ntohs(erfptr->rlen) - erf_get_framing_length(packet));
     774        framinglen = trace_get_framing_length(packet);
     775        rlen = ntohs(erfptr->rlen);
     776        wlen = ntohs(erfptr->wlen);
     777
     778        caplen = rlen - framinglen;
     779        if (wlen < caplen)
     780                return wlen;
     781
     782        return caplen;
    776783}
    777784
     
    788795size_t erf_set_capture_length(libtrace_packet_t *packet, size_t size) {
    789796        dag_record_t *erfptr = 0;
     797        uint16_t wlen;
     798
    790799        assert(packet);
    791800        erfptr = (dag_record_t *)packet->header;
     
    800809         * return the wrong value. */
    801810        packet->capture_length = -1;
    802         erfptr->rlen = htons(size + erf_get_framing_length(packet));
    803         return trace_get_capture_length(packet);
     811        erfptr->rlen = htons(size + trace_get_framing_length(packet));
     812        wlen = ntohs(erfptr->wlen);
     813
     814        if (wlen < size) {
     815                return wlen;
     816        }
     817
     818        return size;
    804819}
    805820
  • lib/trace.c

    r86087c53 rf3e1f19  
    13821382        }
    13831383
     1384        if (packet->framing_length >= 0) {
     1385                return packet->framing_length;
     1386        }
     1387
    13841388        if (packet->trace->format->get_framing_length) {
    1385                 return packet->trace->format->get_framing_length(packet);
     1389                ((libtrace_packet_t *)packet)->framing_length =
     1390                       packet->trace->format->get_framing_length(packet);
     1391                return packet->framing_length;
    13861392        }
    13871393        return ~0U;
     
    24032409        packet->capture_length = -1;
    24042410        packet->wire_length = -1;
     2411        packet->framing_length = -1;
    24052412        packet->payload_length = -1;
    24062413        packet->l2_remaining = 0;
Note: See TracChangeset for help on using the changeset viewer.