Ignore:
Timestamp:
11/24/10 10:34:17 (3 years ago)
Author:
salcock
Message:
  • IPv6 fragment extension headers use a rather different header format than other extensions.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/lib/protocols_l3.c

    r1645 r1665  
    141141        void *payload = (char*)ipptr+sizeof(libtrace_ip6_t); 
    142142        uint8_t nxt; 
     143        uint16_t len; 
    143144 
    144145        assert (ipptr != NULL); 
     
    156157                        case 0: /* hop by hop options */ 
    157158                        case TRACE_IPPROTO_ROUTING: 
    158                         case TRACE_IPPROTO_FRAGMENT: 
    159159                        case TRACE_IPPROTO_ESP: 
    160160                        case TRACE_IPPROTO_AH:  
    161161                        case TRACE_IPPROTO_DSTOPTS:  
    162162                                { 
    163                                         uint16_t len=((libtrace_ip6_ext_t*)payload)->len 
     163                                        len=((libtrace_ip6_ext_t*)payload)->len 
    164164                                        +sizeof(libtrace_ip6_ext_t); 
    165165 
     
    177177                                        continue; 
    178178                                } 
     179                        case TRACE_IPPROTO_FRAGMENT: 
     180                                { 
     181                                        len = sizeof(libtrace_ip6_frag_t); 
     182                                        if (remaining) { 
     183                                                if (*remaining < len) { 
     184                                                        /* Snap too short */ 
     185                                                        *remaining = 0; 
     186                                                        return NULL; 
     187                                                } 
     188                                                *remaining-=len; 
     189                                        } 
     190                                        payload=(char*)payload+len; 
     191                                        nxt=((libtrace_ip6_frag_t*)payload)->nxt; 
     192                                        continue; 
     193                                } 
     194 
    179195                        default: 
    180196                                if (prot) *prot=nxt; 
Note: See TracChangeset for help on using the changeset viewer.