From: Jakub Kicinski <kuba@kernel.org>
To: Daniel Borkmann <daniel@iogearbox.net>
Cc: netdev@vger.kernel.org, bpf@vger.kernel.org, davem@davemloft.net,
razor@blackwall.org, pabeni@redhat.com, willemb@google.com,
sdf@fomichev.me, john.fastabend@gmail.com, martin.lau@kernel.org,
jordan@jrife.io, maciej.fijalkowski@intel.com,
magnus.karlsson@intel.com, dw@davidwei.uk, toke@redhat.com,
yangzhenze@bytedance.com, wangdongdong.6@bytedance.com
Subject: Re: [PATCH net-next v8 15/16] selftests/net: Add env for container based tests
Date: Sat, 31 Jan 2026 16:38:34 -0800 [thread overview]
Message-ID: <20260131163834.2c3d160d@kernel.org> (raw)
In-Reply-To: <20260129222830.439687-16-daniel@iogearbox.net>
On Thu, 29 Jan 2026 23:28:29 +0100 Daniel Borkmann wrote:
> +class NetDrvContEnv(NetDrvEpEnv):
> + """
> + Class for an environment with a netkit pair setup for forwarding traffic
> + between the physical interface and a network namespace.
A little diagram would be pretty awesome to have here, and perhaps copy
it to the README file too?
> + """
> +
> + def __init__(self, src_path, rxqueues=1, **kwargs):
> + super().__init__(src_path, **kwargs)
> +
> + self.require_ipver("6")
> + local_prefix = self.env.get("LOCAL_PREFIX_V6")
> + if not local_prefix:
> + raise KsftSkipEx("LOCAL_PREFIX_V6 required")
> +
> + local_prefix = local_prefix.rstrip("/64").rstrip("::").rstrip(":")
> + self.ipv6_prefix = f"{local_prefix}::"
> + self.nk_host_ipv6 = f"{local_prefix}::2:1"
> + self.nk_guest_ipv6 = f"{local_prefix}::2:2"
> +
> + self.netns = None
> + self._nk_host_ifname = None
> + self._nk_guest_ifname = None
> + self._tc_attached = False
> + self._bpf_prog_pref = None
> + self._bpf_prog_id = None
> + self._init_ns_attached = False
I'm not a Python expert but the pre-init of variables that are set
later on in __init__() (on all possible paths) seems like a waste of LoC
> +
> + ip(f"link add type netkit mode l2 forward peer forward numrxqueues {rxqueues}")
Would we be able to do this with YNL?
no big deal but always nice to avoid the dependency on very latest CLI
> + all_links = ip("-d link show", json=True)
> + netkit_links = [link for link in all_links
> + if link.get('linkinfo', {}).get('info_kind') == 'netkit'
> + and 'UP' not in link.get('flags', [])]
And of course if you use YNL you can actually ask Netlink to
echo back / return to you what interface it ended up creating.
No need for the scanning..
> + if len(netkit_links) != 2:
> + raise KsftSkipEx("Failed to create netkit pair")
> +
> + netkit_links.sort(key=lambda x: x['ifindex'])
> + self._nk_host_ifname = netkit_links[1]['ifname']
> + self._nk_guest_ifname = netkit_links[0]['ifname']
> + self.nk_host_ifindex = netkit_links[1]['ifindex']
> + self.nk_guest_ifindex = netkit_links[0]['ifindex']
> +
> + self._setup_ns()
> + self._attach_bpf()
> + def _setup_ns(self):
> + self.netns = NetNS()
> + cmd("ip netns attach init 1")
> + self._init_ns_attached = True
> + ip("netns set init 0", ns=self.netns)
Hm, refactor class NetNSEnter or just use its enter method?
> + ip(f"link set dev {self._nk_guest_ifname} netns {self.netns.name}")
> + ip(f"link set dev {self._nk_host_ifname} up")
> + ip(f"-6 addr add fe80::1/64 dev {self._nk_host_ifname} nodad")
> + ip(f"-6 route add {self.nk_guest_ipv6}/128 via fe80::2 dev {self._nk_host_ifname}")
> +
> + ip("link set lo up", ns=self.netns)
> + ip(f"link set dev {self._nk_guest_ifname} up", ns=self.netns)
> + ip(f"-6 addr add fe80::2/64 dev {self._nk_guest_ifname}", ns=self.netns)
> + ip(f"-6 addr add {self.nk_guest_ipv6}/64 dev {self._nk_guest_ifname} nodad", ns=self.netns)
> + ip(f"-6 route add default via fe80::1 dev {self._nk_guest_ifname}", ns=self.netns)
> +
> + def _attach_bpf(self):
> + bpf_obj = self.test_dir / "nk_forward.bpf.o"
> + if not bpf_obj.exists():
> + raise KsftSkipEx("BPF prog not found")
> +
> + cmd(f"tc filter add dev {self.ifname} ingress bpf obj {bpf_obj} sec tc/ingress direct-action")
> + self._tc_attached = True
> +
> + tc_info = cmd(f"tc filter show dev {self.ifname} ingress").stdout
Don't we need to also add a qdisc if there isn't one already?
> + match = re.search(r'pref (\d+).*nk_forward\.bpf.*id (\d+)', tc_info)
I haven't checked but TC doesn't support enough JSON and YNL doesn't
support enough TC to avoid re hacks? :( :(
As I mentioned to David in person, Wei Wang also needs to use this
class for PSP tests so would be awesome to detach these from the large
series. I promise to prioritize the "detached" bits of these series in
case you're worried about the MW.
next prev parent reply other threads:[~2026-02-01 0:38 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-01-29 22:28 [PATCH net-next v8 00/16] netkit: Support for io_uring zero-copy and AF_XDP Daniel Borkmann
2026-01-29 22:28 ` [PATCH net-next v8 01/16] net: Add queue-create operation Daniel Borkmann
2026-01-29 22:28 ` [PATCH net-next v8 02/16] net: Implement netdev_nl_queue_create_doit Daniel Borkmann
2026-01-31 23:45 ` Jakub Kicinski
2026-03-05 4:38 ` Daniel Borkmann
2026-03-06 2:10 ` Jakub Kicinski
2026-03-06 5:49 ` Daniel Borkmann
2026-01-29 22:28 ` [PATCH net-next v8 03/16] net: Add lease info to queue-get response Daniel Borkmann
2026-01-31 23:43 ` Jakub Kicinski
2026-02-01 0:15 ` Jakub Kicinski
2026-01-29 22:28 ` [PATCH net-next v8 04/16] net, ethtool: Disallow leased real rxqs to be resized Daniel Borkmann
2026-01-31 23:45 ` Jakub Kicinski
2026-01-29 22:28 ` [PATCH net-next v8 05/16] net: Slightly simplify net_mp_{open,close}_rxq Daniel Borkmann
2026-01-31 23:48 ` Jakub Kicinski
2026-01-29 22:28 ` [PATCH net-next v8 06/16] net: Proxy net_mp_{open,close}_rxq for leased queues Daniel Borkmann
2026-02-01 0:02 ` Jakub Kicinski
2026-02-01 22:09 ` David Wei
2026-01-29 22:28 ` [PATCH net-next v8 07/16] net: Proxy netdev_queue_get_dma_dev " Daniel Borkmann
2026-02-01 0:04 ` Jakub Kicinski
2026-02-01 22:23 ` David Wei
2026-01-29 22:28 ` [PATCH net-next v8 08/16] xsk: Extend xsk_rcv_check validation Daniel Borkmann
2026-01-29 22:28 ` [PATCH net-next v8 09/16] xsk: Proxy pool management for leased queues Daniel Borkmann
2026-01-29 22:28 ` [PATCH net-next v8 10/16] netkit: Add single device mode for netkit Daniel Borkmann
2026-01-29 22:28 ` [PATCH net-next v8 11/16] netkit: Implement rtnl_link_ops->alloc and ndo_queue_create Daniel Borkmann
2026-02-01 0:19 ` Jakub Kicinski
2026-02-01 22:27 ` David Wei
2026-01-29 22:28 ` [PATCH net-next v8 12/16] netkit: Add netkit notifier to check for unregistering devices Daniel Borkmann
2026-01-29 22:28 ` [PATCH net-next v8 13/16] netkit: Add xsk support for af_xdp applications Daniel Borkmann
2026-01-29 22:28 ` [PATCH net-next v8 14/16] selftests/net: Add bpf skb forwarding program Daniel Borkmann
2026-01-29 22:28 ` [PATCH net-next v8 15/16] selftests/net: Add env for container based tests Daniel Borkmann
2026-02-01 0:38 ` Jakub Kicinski [this message]
2026-02-01 22:53 ` David Wei
2026-02-02 18:41 ` Jakub Kicinski
2026-02-10 0:25 ` David Wei
2026-02-05 2:08 ` Bobby Eshleman
2026-02-05 2:34 ` Bobby Eshleman
2026-02-10 17:30 ` David Wei
2026-01-29 22:28 ` [PATCH net-next v8 16/16] selftests/net: Add netkit container tests Daniel Borkmann
2026-02-01 0:24 ` Jakub Kicinski
2026-02-01 22:54 ` David Wei
2026-02-05 1:44 ` Bobby Eshleman
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260131163834.2c3d160d@kernel.org \
--to=kuba@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=davem@davemloft.net \
--cc=dw@davidwei.uk \
--cc=john.fastabend@gmail.com \
--cc=jordan@jrife.io \
--cc=maciej.fijalkowski@intel.com \
--cc=magnus.karlsson@intel.com \
--cc=martin.lau@kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=razor@blackwall.org \
--cc=sdf@fomichev.me \
--cc=toke@redhat.com \
--cc=wangdongdong.6@bytedance.com \
--cc=willemb@google.com \
--cc=yangzhenze@bytedance.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.