Changeset 5bbe424


Ignore:
Timestamp:
09/08/05 18:17:36 (15 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:
12290e6
Parents:
de8c420b
Message:

added vlan support

Location:
lib
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • lib/libtrace.h

    rde8c420b r5bbe424  
    190190};
    191191
     192/** 802.1Q frame */
     193struct libtrace_8021q
     194{
     195  u_int8_t  ether_dhost[6];      /* destination eth addr */
     196  u_int8_t  ether_shost[6];      /* source ether addr    */
     197  u_int16_t ether_type;                 /* packet type ID field , 0x8100 for VLAN */
     198  u_int16_t vlan_pri:3;                 /* vlan user priority */
     199  u_int16_t vlan_cfi:1;                 /* vlan format indicator, 0 for ethernet, 1 for token ring */
     200  u_int16_t vlan_id:12;                 /* vlan id */
     201  u_int16_t vlan_ether_type;            /* vlan sub-packet type ID field (next-header)*/
     202} __attribute__ ((__packed__));
    192203
    193204/** Prints help information for libtrace
  • lib/trace.c

    rde8c420b r5bbe424  
    527527                                else {
    528528                                        struct ieee_802_11_payload *eth = (void*)wifi->data;
    529                                         if (eth->type != 0x0008) {
    530                                                 ipptr=NULL;
    531                                         } else {
     529                                        ipptr = NULL;
     530
     531                                        if (eth->type == 0x0008) {
    532532                                                ipptr=(void*)eth->data;
     533                                        } else if (eth->type = 0x0081) {
     534                                                // VLAN
     535                                                if ((*(uint16_t *)(eth + 16)) == 0x0008) {
     536                                                        ipptr = (void*)eth->data + 4;
     537                                                }
    533538                                        }
    534539                                }
     
    543548                                        break;
    544549                                }
    545                                 if (ntohs(eth->ether_type)!=0x0800) {
    546                                         ipptr = NULL;
    547                                 }
    548                                 else {
     550                                ipptr = NULL;
     551                               
     552                                if (eth->ether_type==0x0008) {
    549553                                        ipptr = ((void *)eth) + 14;
     554                                } else if (eth->ether_type == 0x0081) {
     555                                        struct libtrace_8021q *vlanhdr =
     556                                                (struct libtrace_8021q *)eth;
     557                                        if (vlanhdr->vlan_ether_type == 0x0008) {
     558                                                ipptr = ((void *)eth) + 18;
     559                                        }
    550560                                }
    551561                                break;
Note: See TracChangeset for help on using the changeset viewer.