From: William Tu <[email protected]>
Date: Fri, 18 May 2018 19:22:28 -0700
> Currently ip6gre and ip6erspan share single metadata mode device,
> using 'collect_md_tun'. Thus, when doing:
> ip link add dev ip6gre11 type ip6gretap external
> ip link add dev ip6erspan12 type ip6erspan external
> RTNETLINK answers: File exists
> simply fails due to the 2nd tries to create the same collect_md_tun.
>
> The patch fixes it by adding a separate collect md tunnel device
> for the ip6erspan, 'collect_md_tun_erspan'. As a result, a couple
> of places need to refactor/split up in order to distinguish ip6gre
> and ip6erspan.
>
> First, move the collect_md check at ip6gre_tunnel_{unlink,link} and
> create separate function {ip6gre,ip6ersapn}_tunnel_{link_md,unlink_md}.
> Then before link/unlink, make sure the link_md/unlink_md is called.
> Finally, a separate ndo_uninit is created for ip6erspan. Tested it
> using the samples/bpf/test_tunnel_bpf.sh.
>
> Fixes: ef7baf5e083c ("ip6_gre: add ip6 erspan collect_md mode")
> Signed-off-by: William Tu <[email protected]>
Applied and queued up for -stable.