Willem de Bruijn says:
====================
BPF allows for dynamic tunneling, choosing the tunnel destination and
features on-demand. Extend bpf_skb_adjust_room to allow for efficient
tunneling at the TC hooks.
Most features are required for large packets with GSO, as these will
be modified after this patch.
Patch 1
  is a performance optimization, avoiding an unnecessary unclone
  for the TCP hot path.
Patches 2..6
  introduce a regression test. These can be squashed, but the code is
  arguably more readable when gradually expanding the feature set.
Patch 7
  is a performance optimization, avoid copying network headers
  that are going to be overwritten. This also simplifies the bpf
  program.
Patch 8
  reenables bpf_skb_adjust_room for UDP packets.
Patch 9
  configures skb tunneling metadata analogous to tunnel devices.
Patches 10..13
  expand the regression test to make use of the new features and
  enable the GSO testcases.
Changes
  v1->v2
  - move BPF_F_ADJ_ROOM_MASK out of uapi as it can be expanded
  - document new flags
  - in tests replace netcat -q flag with coreutils timeout:
      the -q flag is not supported in all netcat versions
  v2->v3
  - move BPF_F_ADJ_ROOM_ENCAP_L3_MASK out of uapi as it has no
    use in userspace
====================
Signed-off-by: Alexei Starovoitov <ast@kernel.org>