Changeset d5e1796 for lib/linktypes.c


Ignore:
Timestamp:
10/25/06 15:42:38 (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:
c9f6ee5
Parents:
16da8f3
Message:

Add support to convert from Endance-ATM to PCAP-LLCSnap

File:
1 edited

Legend:

Unmodified
Added
Removed
  • lib/linktypes.c

    r1ab9849 rd5e1796  
    3737                case TRACE_DLT_NULL: return TRACE_TYPE_NONE;
    3838                case TRACE_DLT_EN10MB: return TRACE_TYPE_ETH;
    39                 case TRACE_DLT_ATM_RFC1483: return TRACE_TYPE_ATM;
    4039                case TRACE_DLT_IEEE802_11: return TRACE_TYPE_80211;
    4140                case TRACE_DLT_LINUX_SLL: return TRACE_TYPE_LINUX_SLL;
    42                 case TRACE_DLT_PFLOG:
    43                                         return TRACE_TYPE_PFLOG;
    44                 case TRACE_DLT_IEEE802_11_RADIO:
    45                                         return TRACE_TYPE_80211_RADIO;
    46         }
    47         return ~0;
    48 }
     41                case TRACE_DLT_PFLOG: return TRACE_TYPE_PFLOG;
     42                case TRACE_DLT_IEEE802_11_RADIO: return TRACE_TYPE_80211_RADIO;
     43                case TRACE_DLT_ATM_RFC1483: return TRACE_TYPE_LLCSNAP;
     44                                         
     45        }
     46        return ~0;
     47}
     48
    4949
    5050libtrace_dlt_t libtrace_to_pcap_dlt(libtrace_linktype_t type)
    5151{
     52        /* If pcap doesn't have a DLT, you can either ask pcap to register
     53         * you a DLT, (and perhaps write a tcpdump decoder for it), or you
     54         * can add it to demote_packet
     55         */
    5256        switch(type) {
    5357                case TRACE_TYPE_NONE: return TRACE_DLT_NULL;
    5458                case TRACE_TYPE_ETH: return TRACE_DLT_EN10MB;
    55                 case TRACE_TYPE_ATM: return TRACE_DLT_ATM_RFC1483;
    5659                case TRACE_TYPE_80211: return TRACE_DLT_IEEE802_11;
    5760                case TRACE_TYPE_LINUX_SLL: return TRACE_DLT_LINUX_SLL;
    5861                case TRACE_TYPE_PFLOG: return TRACE_DLT_PFLOG;
    59         case TRACE_TYPE_80211_RADIO: return TRACE_DLT_IEEE802_11_RADIO;
     62                case TRACE_TYPE_80211_RADIO: return TRACE_DLT_IEEE802_11_RADIO;
     63                case TRACE_TYPE_ATM:
     64                        /* Dispite hints to the contrary, there is no DLT
     65                         * for 'raw atm packets that happen to be missing
     66                         * the HEC' or even 'raw atm packets that have a hec'.
     67                         *
     68                         * The closest are DLT_ATM_RFC1483 but that doesn't
     69                         * include the ATM header, only the LLCSNAP header.
     70                         */
     71                        return ~0;
     72                case TRACE_TYPE_LLCSNAP: return TRACE_DLT_ATM_RFC1483;
    6073        }
    6174        return ~0;
     
    196209bool demote_packet(libtrace_packet_t *packet)
    197210{
     211        uint8_t type;
     212        uint32_t remaining;
     213        char *tmp;
     214        struct timeval tv;
     215        static libtrace_t *trace = NULL;
    198216        switch(trace_get_link_type(packet)) {
     217                case TRACE_TYPE_ATM:
     218                        remaining=trace_get_capture_length(packet);
     219                        packet->payload=trace_get_payload_from_atm(
     220                                packet->payload,&type,&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)->caplen
     231                                = remaining;
     232                        ((libtrace_pcapfile_pkt_hdr_t*)tmp)->wirelen
     233                                = trace_get_capture_length(packet)-remaining;
     234
     235                        memcpy(tmp+sizeof(libtrace_pcapfile_pkt_hdr_t),
     236                                        packet->payload,
     237                                        remaining);
     238                        if (packet->buf_control == TRACE_CTRL_EXTERNAL) {
     239                                packet->buf_control=TRACE_CTRL_PACKET;
     240                        }
     241                        else {
     242                                free(packet->buffer);
     243                        }
     244                        packet->buffer=tmp;
     245                        packet->header=tmp;
     246                        packet->payload=tmp+sizeof(libtrace_pcapfile_pkt_hdr_t);
     247                        packet->type=pcap_dlt_to_rt(TRACE_DLT_ATM_RFC1483);
     248                       
     249                        if (trace == NULL) {
     250                                trace = trace_create_dead("pcap:-");
     251                        }
     252
     253                        packet->trace=trace;
     254
     255                        return true;
     256
    199257                case TRACE_TYPE_LINUX_SLL:
    200258                        switch(ntohs(((libtrace_sll_header_t*)packet->payload)
Note: See TracChangeset for help on using the changeset viewer.