Changeset e1fdc05


Ignore:
Timestamp:
06/28/07 15:43:40 (14 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:
1344aa8
Parents:
0c47bf4
Message:
  • Added format for Auckland VII-style ATM header captures
  • Fixed bug in format_legacy where a non-64 byte record would cause an assert fail - it will now keep trying to read until it gets a 64 byte record or reaches EOF.
  • trace_copy_packet was not initializing the cached values sensibly which was wreaking havoc - this is now fixed.
Location:
lib
Files:
1 added
7 edited

Legend:

Unmodified
Added
Removed
  • lib/Makefile.am

    re01a738 re1fdc05  
    3636                format_rt.c format_helper.c format_helper.h format_pcapfile.c \
    3737                format_duck.c format_tsh.c $(NATIVEFORMATS) $(BPFFORMATS) \
     38                format_atmhdr.c \
    3839                libtrace_int.h lt_inttypes.h \
    3940                linktypes.c protocols.c libtraceio.h link_wireless.c \
  • lib/daglegacy.h

    r23971d0 re1fdc05  
    1818} PACKED legacy_pos_t;
    1919
     20typedef struct atmhdr {
     21        uint32_t ts_fraction;
     22        uint32_t ts_sec;
     23} PACKED atmhdr_t;
    2024#endif
  • lib/format_legacy.c

    r954a329 re1fdc05  
    132132                        assert(0);
    133133        }
    134        
    135         if ((numbytes=libtrace_io_read(INPUT.file,
    136                                         buffer,
    137                                         (size_t)64)) != 64) {
    138                 if (numbytes!=0) {
    139                         trace_set_err(libtrace,errno,"read(%s)",libtrace->uridata);
     134
     135        /* This is going to block until we either get an entire record
     136         * or we reach the end of the file */
     137        while (1) {
     138       
     139                if ((numbytes=libtrace_io_read(INPUT.file,
     140                                                buffer,
     141                                                (size_t)64)) != 64) {
     142                        if (numbytes < 0) {
     143                                trace_set_err(libtrace,errno,"read(%s)",libtrace->uridata);
     144                        } else if (numbytes > 0) {
     145                               
     146                                continue;
     147                        }
     148                        return numbytes;
    140149                }
    141                 return numbytes;
     150                break;
    142151        }
    143152       
  • lib/libtrace.h.in

    r8fbd1e6 re1fdc05  
    262262        TRACE_FORMAT_DUCK         =10,
    263263        TRACE_FORMAT_BPF          =11,
    264         TRACE_FORMAT_TSH          =12
     264        TRACE_FORMAT_TSH          =12,
     265        TRACE_FORMAT_ATMHDR       =13
    265266};
    266267
     
    299300        TRACE_RT_DATA_TSH       =TRACE_RT_DATA_SIMPLE+TRACE_FORMAT_TSH,
    300301
     302        TRACE_RT_DATA_ATMHDR = TRACE_RT_DATA_SIMPLE + TRACE_FORMAT_ATMHDR,
    301303        TRACE_RT_DATA_DLT               = 2000, /**< Pcap doesn't store the
    302304                                                  * linktype per packet, and
  • lib/libtrace_int.h

    rce0bf2c re1fdc05  
    459459void wag_constructor(void);
    460460void duck_constructor(void);
     461void atmhdr_constructor(void);
    461462
    462463/* Used internally by get_wire_length() methods */
  • lib/linktypes.c

    r7c72e4d re1fdc05  
    258258{
    259259        uint8_t type;
    260         uint32_t remaining;
     260        uint32_t remaining = 0;
    261261        char *tmp;
    262262        struct timeval tv;
     
    267267                        packet->payload=trace_get_payload_from_atm(
    268268                                packet->payload,&type,&remaining);
    269 
     269                        if (!packet->payload)
     270                                return false;
    270271                        tmp=(char*)malloc(
    271272                                trace_get_capture_length(packet)
  • lib/trace.c

    r21ab138 re1fdc05  
    224224                tsh_constructor();
    225225                legacy_constructor();
     226                atmhdr_constructor();
    226227#ifdef HAVE_NETPACKET_PACKET_H
    227228                linuxnative_constructor();
     
    650651        dest->type=packet->type;
    651652        dest->buf_control=TRACE_CTRL_PACKET;
     653        /* Reset the cache - better to recalculate than try to convert
     654         * the values over to the new packet */
     655        dest->capture_length = -1;
     656        dest->l3_header = NULL;
     657        dest->l3_ethertype = 0;
    652658        memcpy(dest->header,packet->header,trace_get_framing_length(packet));
    653659        memcpy(dest->payload,packet->payload,trace_get_capture_length(packet));
Note: See TracChangeset for help on using the changeset viewer.