Looking at new_tunnel.c there are a few things I don't understand.
if (skb_headroom(skb) >= max_headroom) {
skb->h.iph = (struct iphdr *) skb_push(skb, tunnel_hlen);
} else {
So if there isn't enough space, here we copy the buffer - OK
...
memcpy(new_skb->ip_hdr, skb->data, skb->len);
This copies the data - OK
memset(new_skb->proto_priv, 0, sizeof(skb->proto_priv));
Zero the proto_priv field - WHY don't we copy?
WHY don't we copy the other fields from the old skb?
i.e. what about saddr,daddr,raddr and pkt_type??
}
Sure I don't follow what is going on 100%, but it seems strange to me that
we can ignore always the old skb fields. Can somebody look over this
condition.
-- Jon. <jon@gte.esi.us.es, http://www.esi.us.es/~jon>