Changeset f04e489


Ignore:
Timestamp:
10/28/05 16:57:37 (16 years ago)
Author:
Daniel Lawson <dlawson@…>
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:
950d54a
Parents:
b190686
Message:

fixed the legacyatm legacypos and legacyeth formats to correctly calculate the framing offset then use that to step into the link layer properly.
Added headers to deal with the link layers.

updated tracedump to be correct now.

Files:
6 edited

Legend:

Unmodified
Added
Removed
  • examples/tracedump/link_10.cc

    r57bbf89 rf04e489  
    1111{
    1212        printf(" Legacy ATM:");
    13         /*
    14         if (len>=6)
    15                 printf(" %s",ether_ntoa((struct ether_addr*)packet));
    16         else {
    17                 printf("[|Truncated]\n");
    18                 return;
    19         }
    20         if (len>=12)
    21                 printf(" %s",ether_ntoa((struct ether_addr*)(packet+6)));
    22         else {
    23                 printf("[|Truncated]\n");
    24                 return;
    25         }
    26         */
    27         if (len>=24) {
    28                 uint16_t type = htons(*(uint16_t*)(packet+22));
     13        if (len>=12) {
     14                uint16_t type = htons(*(uint16_t*)(packet+10));
    2915                printf(" %04x\n",type);
    30                 decode_next(packet+24,len-24,"eth",type);
     16                decode_next(packet+12,len-12,"eth",type);
    3117        }
    3218        else {
  • examples/tracedump/link_11.cc

    r57bbf89 rf04e489  
    1212{
    1313        printf(" Legacy Framing: ");
    14         if (len>=10) {
    15                 decode_next(packet+10,len-10,"link",2);
    16         }
    17         else {
    18                 printf("[|Truncated]\n");
    19                 return;
    20         }
     14        decode_next(packet,len,"link",2);
    2115        return;
    2216}
  • examples/tracedump/link_9.cc

    r57bbf89 rf04e489  
    1111{
    1212        printf(" Legacy POS:");
    13         /*
    14         if (len>=6)
    15                 printf(" %s",ether_ntoa((struct ether_addr*)packet));
    16         else {
    17                 printf("[|Truncated]\n");
    18                 return;
    19         }
    20         if (len>=12)
    21                 printf(" %s",ether_ntoa((struct ether_addr*)(packet+6)));
    22         else {
    23                 printf("[|Truncated]\n");
    24                 return;
    25         }
    26         */
    27         if (len>=20) {
    28                 uint16_t type = htons(*(uint16_t*)(packet+18));
     13        if (len>=4) {
     14                uint16_t type = htons(*(uint16_t*)(packet+2));
    2915                printf(" %04x\n",type);
    30                 decode_next(packet+20,len-20,"eth",type);
     16                decode_next(packet+4,len-4,"eth",type);
    3117        }
    3218        else {
  • lib/format_erf.c

    r7c8eacf rf04e489  
    6262#include <string.h>
    6363#include <stdlib.h>
     64#include "daglegacy.h"
    6465
    6566#if HAVE_ZLIB
     
    208209}
    209210
     211static int legacyeth_get_framing_length(const struct libtrace_packet_t *packet)
     212{
     213        /* the legacy ethernet format consists of:
     214         * uint64_t ts;
     215         * uint16_t wlen;
     216         * The legacy ethernet framing is therefore five (5) octets;
     217         */
     218        return sizeof(legacy_ether_t);
     219}
     220
     221static int legacypos_get_framing_length(const struct libtrace_packet_t *packet)
     222{
     223        /* the legacy POS format consists of:
     224         * uint64_t ts;
     225         * uint32_t slen;
     226         * uint32_t wlen;
     227         * The legacy pos framing is therefore eight (8) octets;
     228         */
     229        return sizeof(legacy_pos_t);
     230}
     231
     232static int legacyatm_get_framing_length(const struct libtrace_packet_t *packet)
     233{
     234        /* the legacy ATM format consists of:
     235         * uint64_t ts;
     236         * uint32_t crc;
     237         * The legacy atm framing is therefore six (6) octets;
     238         */
     239        return sizeof(legacy_cell_t);
     240}
    210241
    211242static int erf_init_input(struct libtrace_t *libtrace) {
     
    675706
    676707
    677 static void *legacy_get_link(const struct libtrace_packet_t *packet) {
    678         return (void *)packet->buffer;
    679 }
    680 
    681 static libtrace_linktype_t legacy_get_link_type(const struct libtrace_packet_t *packet) {
    682         return TRACE_TYPE_LEGACY;
     708static void *legacypos_get_link(const struct libtrace_packet_t *packet) {
     709        const void *posptr = 0;
     710        posptr = ((uint8_t *)packet->buffer +
     711                        legacypos_get_framing_length(packet));
     712        return (void *)posptr;
     713}
     714
     715static libtrace_linktype_t legacypos_get_link_type(const struct libtrace_packet_t *packet) {
     716        return TRACE_TYPE_LEGACY_POS;
     717}
     718
     719static void *legacyatm_get_link(const struct libtrace_packet_t *packet) {
     720        const void *atmptr = 0;
     721        atmptr = ((uint8_t *)packet->buffer +
     722                        legacyatm_get_framing_length(packet));
     723        return (void *)atmptr;
     724}
     725
     726static libtrace_linktype_t legacyatm_get_link_type(const struct libtrace_packet_t *packet) {
     727        return TRACE_TYPE_LEGACY_ATM;
     728}
     729
     730static void *legacyeth_get_link(const struct libtrace_packet_t *packet) {
     731        const void *ethptr = 0;
     732        ethptr = ((uint8_t *)packet->buffer +
     733                        legacyeth_get_framing_length(packet));
     734        return (void *)ethptr;
    683735}
    684736
     
    687739}
    688740
    689 static libtrace_linktype_t legacyatm_get_link_type(const struct libtrace_packet_t *packet) {
    690         return TRACE_TYPE_LEGACY_ATM;
    691 }
    692 
    693 static libtrace_linktype_t legacypos_get_link_type(const struct libtrace_packet_t *packet) {
    694         return TRACE_TYPE_LEGACY_POS;
    695 }
     741
    696742
    697743static void *erf_get_link(const struct libtrace_packet_t *packet) {
     
    745791}
    746792
    747 static int legacy_get_framing_length(const struct libtrace_packet_t *packet __attribute__((unused))) {
    748        
    749 }
    750793static int legacypos_get_wire_length(const struct libtrace_packet_t *packet) {
    751794        legacy_pos_t *lpos = (legacy_pos_t *)packet->buffer;
     
    896939        legacy_read_packet,             /* read_packet */
    897940        NULL,                           /* write_packet */
    898         legacy_get_link,                /* get_link */
     941        legacyatm_get_link,             /* get_link */
    899942        legacyatm_get_link_type,        /* get_link_type */
    900943        NULL,                           /* get_direction */
     
    905948        legacy_get_capture_length,      /* get_capture_length */
    906949        legacyatm_get_wire_length,      /* get_wire_length */
    907         legacy_get_framing_length,      /* get_framing_length */
     950        legacyatm_get_framing_length,   /* get_framing_length */
    908951        NULL,                           /* set_capture_length */
    909952        NULL,                           /* get_fd */
     
    923966        legacy_read_packet,             /* read_packet */
    924967        NULL,                           /* write_packet */
    925         legacy_get_link,                /* get_link */
     968        legacyeth_get_link,             /* get_link */
    926969        legacyeth_get_link_type,        /* get_link_type */
    927970        NULL,                           /* get_direction */
     
    932975        legacy_get_capture_length,      /* get_capture_length */
    933976        legacyeth_get_wire_length,      /* get_wire_length */
    934         legacy_get_framing_length,      /* get_framing_length */
     977        legacyeth_get_framing_length,   /* get_framing_length */
    935978        NULL,                           /* set_capture_length */
    936979        NULL,                           /* get_fd */
     
    950993        legacy_read_packet,             /* read_packet */
    951994        NULL,                           /* write_packet */
    952         legacy_get_link,                /* get_link */
     995        legacypos_get_link,             /* get_link */
    953996        legacypos_get_link_type,        /* get_link_type */
    954997        NULL,                           /* get_direction */
     
    9591002        legacy_get_capture_length,      /* get_capture_length */
    9601003        legacypos_get_wire_length,      /* get_wire_length */
    961         legacy_get_framing_length,      /* get_framing_length */
     1004        legacypos_get_framing_length,   /* get_framing_length */
    9621005        NULL,                           /* set_capture_length */
    9631006        NULL,                           /* get_fd */
  • lib/libtrace.h

    rba0017c rf04e489  
    4343
    4444/* HAVE_ATTR_PURE is replaced by autoconf */
    45 #define HAVE_ATTR_PURE 0
     45#define HAVE_ATTR_PURE 1
    4646
    4747/* Function does not depend on anything but its
     
    217217} __attribute__ ((packed));
    218218
     219/** ATM cell */
     220struct libtrace_atm_cell
     221{
     222  u_int8_t gfc:4;
     223  u_int8_t vpi;
     224  u_int16_t vci;
     225  u_int8_t pt:3;
     226  u_int8_t clp:1;
     227  u_int8_t hec;
     228  u_int16_t ether_type;
     229};
     230
     231/** POS header */
     232struct libtrace_pos
     233{
     234 u_int16_t header;
     235 u_int16_t ether_type;
     236};
     237
    219238/** Prints help information for libtrace
    220239 *
  • lib/trace.c

    ra8a9355 rf04e489  
    598598                        break;
    599599                case TRACE_TYPE_ETH:
     600                case TRACE_TYPE_LEGACY_ETH:
    600601                        {
    601602                                struct libtrace_ether *eth =
     
    653654                        }
    654655                        break;
    655                 case TRACE_TYPE_ATM:
    656                         {
    657                                 struct atm_rec *atm =
    658                                         trace_get_link(packet);
    659                                 // TODO: Find out what ATM does, and return
    660                                 //       NULL for non IP data
    661                                 //       Presumably it uses the normal stuff
    662                                 if (!atm) {
    663                                         ipptr = NULL;
    664                                         break;
    665                                 }
    666                                 ipptr =  (void*)&atm->pload;
    667                                 break;
    668                         }
    669656                case TRACE_TYPE_LEGACY_POS:
    670657                        {
    671658                                // 64 byte capture.
    672                                 legacy_framing_t *cell =
     659                                struct libtrace_pos *pos =
    673660                                        trace_get_link(packet);
    674                                 // check ethertype
    675                                 uint16_t *etype = (uint16_t *)cell->data + 1;
    676                                 if (*etype == 0x0008) {
    677                                         ipptr = (void *)&cell->data[1];
     661                                if (ntohs(pos->ether_type) == 0x0800) {
     662                                        ipptr = ((void *)pos) + sizeof(*pos);
    678663                                } else {
    679664                                        ipptr = NULL;
     
    683668                        }
    684669                case TRACE_TYPE_LEGACY_ATM:
    685                 case TRACE_TYPE_LEGACY_ETH:
    686                 case TRACE_TYPE_LEGACY:
     670                case TRACE_TYPE_ATM:
    687671                        {
    688672                                // 64 byte capture.
    689                                 legacy_framing_t *cell =
     673                                struct libtrace_atm_cell *cell =
    690674                                        trace_get_link(packet);
    691                                 uint16_t *etype = (uint16_t *)cell->data + 3;
    692                                 if (*etype == 0x0008) {
    693                                         ipptr = (void *)&cell->data[2];
     675                                if (ntohs(cell->ether_type) == 0x0800) {
     676                                        ipptr = ((void *)cell) + sizeof(*cell);
    694677                                } else {
    695678                                        ipptr = NULL;
Note: See TracChangeset for help on using the changeset viewer.