root@dut-vm:~# ip netns add foo
root@dut-vm:~# ip netns add bar
root@dut-vm:~# ip -n foo netns set bar 0
root@dut-vm:~# ip -n foo link add xfrmi0 link-netnsid 0 type xfrm dev lo if_id 23
root@dut-vm:~# ip -n bar link ls xfrmi0
Device "xfrmi0" does not exist.
root@dut-vm:~# ip -n foo link ls xfrmi0
2: xfrmi0@if1: <NOARP> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/none 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff link-netns bar
=> interface is correctly created and there is no backtrace in dmesg, OK
root@dut-vm:~# ip netns del foo
root@dut-vm:~# ip netns del bar
root@dut-vm:~# ip link add xfrm1 type xfrm dev lo if_id 1
root@dut-vm:~# ip link add xfrm2 type xfrm dev lo if_id 2
root@dut-vm:~# ip link set xfrm1 type xfrm dev lo if_id 2
RTNETLINK answers: File exists
root@dut-vm:~# ip -d link list dev xfrm1
7: xfrm1@lo: <NOARP> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/none 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff promiscuity 0 minmtu 68 maxmtu 1500
xfrm if_id 0x1 addrgenmode eui64 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535
=> if_id 0x1 and no backtrace in dmesg, OK
root@dut-vm:~# ip link add dummy type dummy
root@dut-vm:~# ip link add xfrm1 type xfrm dev dummy if_id 1
root@dut-vm:~# ip l d dummy
root@dut-vm:~# ip -d l ls xfrm1
10: xfrm1@if9: <NOARP> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/none 3a:90:dc:59:76:c6 brd ff:ff:ff:ff:ff:ff promiscuity 0 minmtu 68 maxmtu 1500
xfrm if_id 0x1 addrgenmode eui64 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535
root@dut-vm:~#
root@dut-vm:~# ip netns add foo
root@dut-vm:~# ip netns add bar
root@dut-vm:~# ip -n foo netns set bar 0
root@dut-vm:~# ip -n foo link add xfrmi0 link-netnsid 0 type xfrm dev lo if_id 23
root@dut-vm:~# ip -n bar link ls xfrmi0
Device "xfrmi0" does not exist.
root@dut-vm:~# ip -n foo link ls xfrmi0
2: xfrmi0@if1: <NOARP> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/none 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff link-netns bar
=> interface is correctly created and there is no backtrace in dmesg, OK
root@dut-vm:~# ip netns del foo
root@dut-vm:~# ip netns del bar
root@dut-vm:~# ip link add xfrm1 type xfrm dev lo if_id 1
root@dut-vm:~# ip link add xfrm2 type xfrm dev lo if_id 2
root@dut-vm:~# ip link set xfrm1 type xfrm dev lo if_id 2
RTNETLINK answers: File exists
root@dut-vm:~# ip -d link list dev xfrm1
7: xfrm1@lo: <NOARP> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/none 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff promiscuity 0 minmtu 68 maxmtu 1500
xfrm if_id 0x1 addrgenmode eui64 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535
=> if_id 0x1 and no backtrace in dmesg, OK
root@dut-vm:~# ip link add dummy type dummy
root@dut-vm:~# ip link add xfrm1 type xfrm dev dummy if_id 1
root@dut-vm:~# ip l d dummy
root@dut-vm:~# ip -d l ls xfrm1
10: xfrm1@if9: <NOARP> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/none 3a:90:dc:59:76:c6 brd ff:ff:ff:ff:ff:ff promiscuity 0 minmtu 68 maxmtu 1500
xfrm if_id 0x1 addrgenmode eui64 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535
root@dut-vm:~#
=> no refcnt pb, OK
Our internal tests suite is also OK.