• Florian Westphal's avatar
    netfilter: bridge: don't use nf_bridge_info data to store mac header · e70deecb
    Florian Westphal authored
    br_netfilter maintains an extra state, nf_bridge_info, which is attached
    to skb via skb->nf_bridge pointer.
    
    Amongst other things we use skb->nf_bridge->data to store the original
    mac header for every processed skb.
    
    This is required for ip refragmentation when using conntrack
    on top of bridge, because ip_fragment doesn't copy it from original skb.
    
    However there is no need anymore to do this unconditionally.
    
    Move this to the one place where its needed -- when br_netfilter calls
    ip_fragment().
    
    Also switch to percpu storage for this so we can handle fragmenting
    without accessing nf_bridge meta data.
    
    Only user left is neigh resolution when DNAT is detected, to hold
    the original source mac address (neigh resolution builds new mac header
    using bridge mac), so rename ->data and reduce its size to whats needed.
    Signed-off-by: default avatarFlorian Westphal <fw@strlen.de>
    Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
    e70deecb
br_netfilter.c 29.7 KB