Changeset e696e87 for lib


Ignore:
Timestamp:
09/14/07 23:37:28 (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:
75453c2
Parents:
a81d2fc
Message:

Fix byteorder issues with ip struct

Location:
lib
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • lib/libtrace.h.in

    r3a14f3b re696e87  
    397397    uint16_t ip_len;                    /**< Total Length */
    398398    int16_t  ip_id;                     /**< Identification */
    399 #if BYTE_ORDER == LITTLE_ENDIAN
    400     LT_BITFIELD16 ip_off:13;            /**< Fragment Offset */
    401     LT_BITFIELD16 ip_mf:1;              /**< More Fragments Flag */
    402     LT_BITFIELD16 ip_df:1;              /**< Dont Fragment Flag */
    403     LT_BITFIELD16 ip_rf:1;              /**< Reserved Fragment Flag */
    404 #elif BYTE_ORDER == BIG_ENDIAN
    405     LT_BITFIELD16 ip_rf:1;              /**< Fragment Offset */
    406     LT_BITFIELD16 ip_df:1;              /**< More Fragments Flag */
    407     LT_BITFIELD16 ip_mf:1;              /**< Dont Fragment Flag */
    408     LT_BITFIELD16 ip_off:13;            /**< Reserved Fragment Flag */
    409 #else
    410 #   error "Adjust your <bits/endian.h> defines"
    411 #endif
     399    uint16_t ip_off;                    /**< IP Fragment offset (and flags) */
    412400    uint8_t  ip_ttl;                    /**< Time to Live */
    413401    uint8_t  ip_p;                      /**< Protocol */
  • lib/protocols_l2.c

    ra81d2fc re696e87  
    204204
    205205void *trace_get_payload_from_link(void *link, libtrace_linktype_t linktype,
    206                 uint16_t *type, uint32_t *remaining)
     206                uint16_t *ethertype, uint32_t *remaining)
    207207{
    208208        void *l = NULL;
    209209        uint16_t dummytype;
    210        
    211         switch(linktype) {
    212                 case TRACE_TYPE_80211_PRISM:
    213                         l = trace_get_payload_from_prism(link,&linktype,remaining);
    214                         return (l ? trace_get_payload_from_link(l, TRACE_TYPE_80211, type, remaining) : NULL);
    215                 case TRACE_TYPE_80211_RADIO:
    216                         l = trace_get_payload_from_radiotap(link,&linktype,remaining);
    217                         return (l ? trace_get_payload_from_link(l, TRACE_TYPE_80211, type, remaining) : NULL);
    218                 case TRACE_TYPE_80211:
    219                         return trace_get_payload_from_80211(link,type,remaining);
    220 
    221                 case TRACE_TYPE_ETH:
    222                         return trace_get_payload_from_ethernet(link,type,remaining);
    223                 case TRACE_TYPE_NONE:
    224                         if ((*(char*)link&0xF0) == 0x40)
    225                                 *type=0x0800;
    226                         else if ((*(char*)link&0xF0) == 0x60)
    227                                 *type=0x86DD;
    228                         return link; /* I love the simplicity */
    229                 case TRACE_TYPE_LINUX_SLL:
    230                         l = trace_get_payload_from_linux_sll(link,&dummytype,remaining);
    231                         if (type) *type = dummytype;
    232                         return (l ? trace_get_payload_from_link(l,
    233                                                 arphrd_type_to_libtrace(dummytype), type, remaining) : NULL);
    234                        
    235                 case TRACE_TYPE_PFLOG:
    236                         return trace_get_payload_from_pflog(link,type,remaining);
    237                 case TRACE_TYPE_PPP:
    238                         return trace_get_payload_from_ppp(link,type,remaining);
    239                 case TRACE_TYPE_ATM:
    240                         l=trace_get_payload_from_atm(link,NULL,remaining);
    241                         return (l ? trace_get_payload_from_llcsnap(l,
    242                                                 type, remaining):NULL);
    243                 case TRACE_TYPE_DUCK:
    244                         return NULL; /* duck packets have no payload! */
    245                 case TRACE_TYPE_METADATA:
    246                         return NULL; /* The payload is in these packets does
    247                                         not correspond to a genuine link-layer
    248                                         */
    249                 default:
    250                         break;
    251         }
    252         fprintf(stderr, "Don't understand link layer type %i in trace_get_payload_from_link()\n",
    253                 linktype);
    254         return NULL;
     210
     211        do {
     212                l = trace_get_payload_from_meta(link, &linktype, remaining);
     213                if (l != NULL) {
     214                        link=l;
     215                        continue;
     216                }
     217        } while (0);
     218
     219        return trace_get_payload_from_layer2(link,linktype,ethertype,remaining);
     220       
    255221}
    256222
     
    317283                case TRACE_TYPE_80211_PRISM:
    318284                case TRACE_TYPE_80211_RADIO:
     285                case TRACE_TYPE_PFLOG:
    319286                case TRACE_TYPE_LINUX_SLL:
    320287                        return NULL;
     
    340307                                *ethertype=0x86DD;
    341308                        return link; /* I love the simplicity */
    342                 case TRACE_TYPE_PFLOG:
    343                         return trace_get_payload_from_pflog(link,ethertype,remaining);
    344309                case TRACE_TYPE_PPP:
    345310                        return trace_get_payload_from_ppp(link,ethertype,remaining);
Note: See TracChangeset for help on using the changeset viewer.