Changeset bb75d10


Ignore:
Timestamp:
11/13/06 16:24:07 (14 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:
6d977c9
Parents:
ef8358e
Message:
  • Support Demoting PoS traces
  • Ignore the (incorrect) ethertype field of the legacypos: traces
  • Correctly calculate the wire length for some of the legacy trace types
  • Support pausing and restarting legacy traces
Location:
lib
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • lib/format_legacy.c

    r7e28dcf rbb75d10  
    9292static int erf_start_input(libtrace_t *libtrace)
    9393{
     94        if (DATA(libtrace)->input.file)
     95                return 0;
     96
    9497        DATA(libtrace)->input.file = trace_open_file(libtrace);
    9598
     
    165168static int legacypos_get_wire_length(const libtrace_packet_t *packet) {
    166169        legacy_pos_t *lpos = (legacy_pos_t *)packet->header;
    167         return ntohs(lpos->wlen);
     170        assert(ntohl(lpos->wlen)>0);
     171        return ntohl(lpos->wlen);
    168172}
    169173
  • lib/linktypes.c

    r2f3a25e rbb75d10  
    215215        static libtrace_t *trace = NULL;
    216216        switch(trace_get_link_type(packet)) {
     217                case TRACE_TYPE_POS:
     218                        remaining=trace_get_capture_length(packet);
     219                        packet->payload=trace_get_payload_from_pos(
     220                                packet->payload,NULL,&remaining);
     221
     222                        tmp=malloc(
     223                                trace_get_capture_length(packet)
     224                                +sizeof(libtrace_pcapfile_pkt_hdr_t)
     225                                );
     226
     227                        tv=trace_get_timeval(packet);
     228                        ((libtrace_pcapfile_pkt_hdr_t*)tmp)->ts_sec=tv.tv_sec;
     229                        ((libtrace_pcapfile_pkt_hdr_t*)tmp)->ts_usec=tv.tv_usec;
     230                        ((libtrace_pcapfile_pkt_hdr_t*)tmp)->wirelen
     231                                = trace_get_wire_length(packet)-(trace_get_capture_length(packet)-remaining);
     232                        ((libtrace_pcapfile_pkt_hdr_t*)tmp)->caplen
     233                                = remaining;
     234
     235                        fprintf(stderr,"%i %i %i %i\n",
     236                                        trace_get_capture_length(packet),
     237                                        trace_get_wire_length(packet),
     238                                        remaining,
     239                                        trace_get_capture_length(packet)-remaining);
     240
     241                        memcpy(tmp+sizeof(libtrace_pcapfile_pkt_hdr_t),
     242                                        packet->payload,
     243                                        remaining);
     244                        if (packet->buf_control == TRACE_CTRL_EXTERNAL) {
     245                                packet->buf_control=TRACE_CTRL_PACKET;
     246                        }
     247                        else {
     248                                free(packet->buffer);
     249                        }
     250                        packet->buffer=tmp;
     251                        packet->header=tmp;
     252                        packet->payload=tmp+sizeof(libtrace_pcapfile_pkt_hdr_t);
     253                        packet->type=pcap_dlt_to_rt(TRACE_DLT_RAW);
     254                       
     255                        if (trace == NULL) {
     256                                trace = trace_create_dead("pcap:-");
     257                        }
     258
     259                        packet->trace=trace;
     260
     261                        return true;
    217262                case TRACE_TYPE_ATM:
    218263                        remaining=trace_get_capture_length(packet);
     
    228273                        ((libtrace_pcapfile_pkt_hdr_t*)tmp)->ts_sec=tv.tv_sec;
    229274                        ((libtrace_pcapfile_pkt_hdr_t*)tmp)->ts_usec=tv.tv_usec;
     275                        ((libtrace_pcapfile_pkt_hdr_t*)tmp)->wirelen
     276                                = trace_get_wire_length(packet)-(trace_get_capture_length(packet)-remaining);
    230277                        ((libtrace_pcapfile_pkt_hdr_t*)tmp)->caplen
    231278                                = remaining;
    232                         ((libtrace_pcapfile_pkt_hdr_t*)tmp)->wirelen
    233                                 = trace_get_capture_length(packet)-remaining;
    234279
    235280                        memcpy(tmp+sizeof(libtrace_pcapfile_pkt_hdr_t),
  • lib/protocols.c

    rd5e1796 rbb75d10  
    211211}
    212212
    213 static void *trace_get_payload_from_pos(void *link,
     213void *trace_get_payload_from_pos(void *link,
    214214                uint16_t *type, uint32_t *remaining)
    215215{
     
    223223        }
    224224
    225         if (type) *type = ntohs(pos->ether_type);
     225        /* This is documented by endace to be an ethertype.  The ethertype
     226         * however is always ntohs(0x0021), which endace in their own tools
     227         * ignore and assume IP, so...
     228         */
     229        /*if (type) *type = ntohs(pos->ether_type); */
     230        if (type) *type = ntohs(0x0800);
    226231
    227232        return (void*)((char *)pos+sizeof(*pos));
Note: See TracChangeset for help on using the changeset viewer.