Changeset 84d137d


Ignore:
Timestamp:
08/04/15 13:57:38 (5 years ago)
Author:
Shane Alcock <salcock@…>
Branches:
4.0.1-hotfixes, cachetimestamps, develop, dpdk-ndag, etsilive, 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:
0277ab8
Parents:
7428ab2
Message:

Attempt at a faster stripping approach

Unfortunately, the stripping is more indiscriminate. We won't be able
to choose whether we just want VLAN or MPLS stripped -- it'll all get
thrown away, but this is probably the most common use case anyway.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • lib/protocols_l2.c

    r7428ab2 r84d137d  
    109109        uint32_t remaining;
    110110        libtrace_packet_t *copy;
    111         void *payload;
     111        char *payload;
    112112        uint16_t finalethertype = 0;
    113113        uint16_t caplen, removed = 0;
     
    145145        }
    146146
     147        payload = (char *)trace_get_layer3(packet, &ethertype, &remaining);
     148        caplen = trace_get_capture_length(packet);
     149        dest = ((char *)ethernet) + sizeof(libtrace_ether_t);
     150
     151        if (payload == NULL || remaining == 0)
     152                return packet;
     153
     154        if (payload == dest)
     155                return packet;
     156
     157        ethernet->ether_type = ntohs(ethertype);
     158        trace_set_capture_length(packet, caplen - (payload - dest));
     159        memmove(payload - (dest - (char *)packet->payload), packet->payload,
     160                        (dest - (char *)packet->payload));
     161        packet->payload = payload - (dest - (char *)packet->payload);
     162        packet->l2_header = NULL;
     163        packet->l3_header = NULL;
     164        packet->l4_header = NULL;
     165       
     166        /*
    147167        payload = trace_get_payload_from_layer2(ethernet, linktype,
    148168                        &ethertype, &remaining);
    149169
    150         dest = ((char *)ethernet) + sizeof(libtrace_ether_t);
    151         caplen = trace_get_capture_length(packet);
    152170        while (!done) {
    153171
     
    164182                        {
    165183                                removed += (oldrem - remaining);
    166                                 memmove(dest, payload, remaining);
    167                                 payload = dest;
     184                                //memmove(dest, payload, remaining);
     185                                //payload = dest;
    168186
    169187                        } else {
     
    171189                                        finalethertype = TRACE_ETHERTYPE_8021Q;
    172190                                }
    173                                 dest = payload;
     191                                //dest = payload;
    174192                        }
    175193                        break;
     
    181199                        {
    182200                                removed += (oldrem - remaining);
    183                                 memmove(dest, payload, remaining);
    184                                 payload = dest;
     201                                //memmove(dest, payload, remaining);
     202                                //payload = dest;
    185203
    186204                        } else {
     
    188206                                        finalethertype = TRACE_ETHERTYPE_MPLS;
    189207                                }
    190                                 dest = payload;
     208                                //dest = payload;
    191209                        }
    192210                        break;
     
    201219                }
    202220        }
    203 
     221                */
    204222        /* Update the preceding headers to match the new packet contents */
    205         ethernet->ether_type = ntohs(finalethertype);
    206         trace_set_capture_length(packet, caplen - removed);
    207223        return packet;
    208224
Note: See TracChangeset for help on using the changeset viewer.