Changeset 16da8f3 for lib/protocols.c


Ignore:
Timestamp:
10/25/06 13:06:05 (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:
d5e1796
Parents:
01bc623
Message:

Add ATM support

File:
1 edited

Legend:

Unmodified
Added
Removed
  • lib/protocols.c

    r7c3be58 r16da8f3  
    175175
    176176static void *trace_get_payload_from_atm(void *link,
     177                uint8_t *type, uint32_t *remaining)
     178{
     179        libtrace_atm_capture_cell_t *cell;
     180        if (remaining && *remaining<sizeof(libtrace_atm_capture_cell_t))
     181                return NULL;
     182        cell=(libtrace_atm_capture_cell_t*)link;
     183
     184        if (type)
     185                type=cell->pt;
     186
     187        if (remaining)
     188                *remaining-=sizeof(libtrace_atm_capture_cell_t);
     189
     190        return ((char*)link)+sizeof(libtrace_atm_capture_cell_t);
     191}
     192
     193static void *trace_get_payload_from_llcsnap(void *link,
    177194                uint16_t *type, uint32_t *remaining)
    178195{
     
    181198
    182199        if (remaining) {
    183                 if (*remaining < sizeof(libtrace_llcsnap_t)+4)
    184                         return NULL;
    185                 *remaining-=(sizeof(libtrace_llcsnap_t)+4);
    186         }
    187 
    188         /* advance the llc ptr +4 into the link layer.
    189          * TODO: need to check what is in these 4 bytes.
    190          * don't have time!
    191          */
    192         llc = (libtrace_llcsnap_t*)((char *)llc + 4);
     200                if (*remaining < sizeof(libtrace_llcsnap_t))
     201                        return NULL;
     202                *remaining-=(sizeof(libtrace_llcsnap_t));
     203        }
     204
     205        llc = (libtrace_llcsnap_t*)((char *)llc);
    193206
    194207        if (type) *type = ntohs(llc->type);
     
    302315                        return trace_get_payload_from_pos(link,type,remaining);
    303316                case TRACE_TYPE_ATM:
    304                         return trace_get_payload_from_atm(link,type,remaining);
     317                        l=trace_get_payload_from_atm(link,NULL,remaining);
     318                        return (l ? trace_get_payload_from_llcsnap(l,
     319                                                type, remaining):NULL);
    305320                case TRACE_TYPE_DUCK:
    306321                        return NULL; /* duck packets have no payload! */
Note: See TracChangeset for help on using the changeset viewer.