• Alan Maguire's avatar
    bpf: add layer 2 encap support to bpf_skb_adjust_room · 58dfc900
    Alan Maguire authored
    commit 868d5235 ("bpf: add bpf_skb_adjust_room encap flags")
    introduced support to bpf_skb_adjust_room for GSO-friendly GRE
    and UDP encapsulation.
    
    For GSO to work for skbs, the inner headers (mac and network) need to
    be marked.  For L3 encapsulation using bpf_skb_adjust_room, the mac
    and network headers are identical.  Here we provide a way of specifying
    the inner mac header length for cases where L2 encap is desired.  Such
    an approach can support encapsulated ethernet headers, MPLS headers etc.
    For example to convert from a packet of form [eth][ip][tcp] to
    [eth][ip][udp][inner mac][ip][tcp], something like the following could
    be done:
    
    	headroom = sizeof(iph) + sizeof(struct udphdr) + inner_maclen;
    
    	ret = bpf_skb_adjust_room(skb, headroom, BPF_ADJ_ROOM_MAC,
    				  BPF_F_ADJ_ROOM_ENCAP_L4_UDP |
    				  BPF_F_ADJ_ROOM_ENCAP_L3_IPV4 |
    				  BPF_F_ADJ_ROOM_ENCAP_L2(inner_maclen));
    Signed-off-by: default avatarAlan Maguire <alan.maguire@oracle.com>
    Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
    58dfc900
bpf.h 124 KB