Netdev List
 help / color / mirror / Atom feed
From: Bobby Eshleman <bobbyeshleman@gmail.com>
To: Daniel Borkmann <daniel@iogearbox.net>
Cc: kuba@kernel.org, razor@blackwall.org, bobbyeshleman@meta.com,
	dw@davidwei.uk, netdev@vger.kernel.org
Subject: Re: [PATCH net-next 2/4] selftests/net: Use public NetDrvContEnv API in nk_qlease fixtures
Date: Wed, 10 Jun 2026 16:53:40 -0700	[thread overview]
Message-ID: <ain5BKx4Vupob5al@devvm29614.prn0.facebook.com> (raw)
In-Reply-To: <20260610080344.701380-3-daniel@iogearbox.net>

On Wed, Jun 10, 2026 at 10:03:42AM +0200, Daniel Borkmann wrote:
> Expose the netkit host ifname as a public attribute nk_host_ifname
> (symmetric with the already-public nk_guest_ifname), rename _attach_bpf
> to a public attach_bpf, and add a public detach_bpf helper that
> encapsulates the tc-filter teardown bookkeeping. Switch the fixtures
> to this public API. No functional change and keeps pylint happy.
> 
> Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
> ---
>  .../selftests/drivers/net/hw/nk_qlease.py     | 33 ++++++++---------
>  .../selftests/drivers/net/lib/py/env.py       | 36 +++++++++++--------
>  2 files changed, 35 insertions(+), 34 deletions(-)
> 
> diff --git a/tools/testing/selftests/drivers/net/hw/nk_qlease.py b/tools/testing/selftests/drivers/net/hw/nk_qlease.py
> index 81125856727f..fee114676fd8 100755
> --- a/tools/testing/selftests/drivers/net/hw/nk_qlease.py
> +++ b/tools/testing/selftests/drivers/net/hw/nk_qlease.py
> @@ -34,16 +34,11 @@ from lib.py import KsftSkipEx, CmdExitFailure
>  
>  
>  def _create_netkit_pair(cfg, rxqueues=2):
> -    if cfg._nk_host_ifname:
> -        cmd(f"ip link del dev {cfg._nk_host_ifname}", fail=False)
> -        cfg._nk_host_ifname = None
> +    if cfg.nk_host_ifname:
> +        cmd(f"ip link del dev {cfg.nk_host_ifname}", fail=False)
> +        cfg.nk_host_ifname = None
>          cfg.nk_guest_ifname = None
> -    if getattr(cfg, "_tc_attached", False):
> -        cmd(
> -            f"tc filter del dev {cfg.ifname} ingress pref {cfg._bpf_prog_pref}",
> -            fail=False,
> -        )
> -        cfg._tc_attached = False
> +    cfg.detach_bpf()
>  
>      all_links = ip("-d link show", json=True)
>      old_idxs = {
> @@ -79,17 +74,17 @@ def _create_netkit_pair(cfg, rxqueues=2):
>          raise KsftSkipEx("Failed to create netkit pair")
>  
>      nk_links.sort(key=lambda x: x["ifindex"])
> -    cfg._nk_host_ifname = nk_links[1]["ifname"]
> +    cfg.nk_host_ifname = nk_links[1]["ifname"]
>      cfg.nk_guest_ifname = nk_links[0]["ifname"]
>      cfg.nk_host_ifindex = nk_links[1]["ifindex"]
>      cfg.nk_guest_ifindex = nk_links[0]["ifindex"]
>  
>      ip(f"link set dev {cfg.nk_guest_ifname} netns {cfg.netns.name}")
> -    ip(f"link set dev {cfg._nk_host_ifname} up")
> -    ip(f"-6 addr add fe80::1/64 dev {cfg._nk_host_ifname} nodad")
> +    ip(f"link set dev {cfg.nk_host_ifname} up")
> +    ip(f"-6 addr add fe80::1/64 dev {cfg.nk_host_ifname} nodad")
>      ip(
>          f"-6 route add {cfg.nk_guest_ipv6}/128 via fe80::2 "
> -        f"dev {cfg._nk_host_ifname}"
> +        f"dev {cfg.nk_host_ifname}"
>      )
>      ip(f"link set dev {cfg.nk_guest_ifname} up", ns=cfg.netns)
>      ip(f"-6 addr add fe80::2/64 dev {cfg.nk_guest_ifname}", ns=cfg.netns)
> @@ -102,7 +97,7 @@ def _create_netkit_pair(cfg, rxqueues=2):
>          ns=cfg.netns,
>      )
>  
> -    cfg._attach_bpf()
> +    cfg.attach_bpf()
>  
>  
>  def _setup_lease(cfg, rxqueues=2):
> @@ -135,9 +130,9 @@ def _setup_lease(cfg, rxqueues=2):
>  
>  
>  def _teardown_netkit(cfg):
> -    if cfg._nk_host_ifname:
> -        cmd(f"ip link del dev {cfg._nk_host_ifname}", fail=False)
> -        cfg._nk_host_ifname = None
> +    if cfg.nk_host_ifname:
> +        cmd(f"ip link del dev {cfg.nk_host_ifname}", fail=False)
> +        cfg.nk_host_ifname = None
>          cfg.nk_guest_ifname = None
>  
>  
> @@ -320,9 +315,9 @@ def test_destroy(cfg) -> None:
>      kill_timer = threading.Timer(1, rx_proc.proc.terminate)
>      kill_timer.start()
>  
> -    ip(f"link del dev {cfg._nk_host_ifname}")
> +    ip(f"link del dev {cfg.nk_host_ifname}")
>      kill_timer.join()
> -    cfg._nk_host_ifname = None
> +    cfg.nk_host_ifname = None
>      cfg.nk_guest_ifname = None
>  
>      queue_info = netdevnl.queue_get(
> diff --git a/tools/testing/selftests/drivers/net/lib/py/env.py b/tools/testing/selftests/drivers/net/lib/py/env.py
> index 2cc78b8a2152..e1038a02760e 100644
> --- a/tools/testing/selftests/drivers/net/lib/py/env.py
> +++ b/tools/testing/selftests/drivers/net/lib/py/env.py
> @@ -341,7 +341,7 @@ class NetDrvContEnv(NetDrvEpEnv):
>                   userns=False, **kwargs):
>          self.netns = None
>          self._userns = userns
> -        self._nk_host_ifname = None
> +        self.nk_host_ifname = None
>          self.nk_guest_ifname = None
>          self._tc_clsact_added = False
>          self._tc_attached = False
> @@ -395,23 +395,23 @@ class NetDrvContEnv(NetDrvEpEnv):
>              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_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()
> +        self.attach_bpf()
>          if primary_rx_redirect:
>              self._attach_primary_rx_redirect_bpf()
>  
>      def __del__(self):
>          if self._primary_rx_redirect_attached:
> -            cmd(f"tc filter del dev {self._nk_host_ifname} ingress", fail=False)
> +            cmd(f"tc filter del dev {self.nk_host_ifname} ingress", fail=False)
>              self._primary_rx_redirect_attached = False
>  
>          if self._primary_rx_redirect_clsact_added:
> -            cmd(f"tc qdisc del dev {self._nk_host_ifname} clsact", fail=False)
> +            cmd(f"tc qdisc del dev {self.nk_host_ifname} clsact", fail=False)
>              self._primary_rx_redirect_clsact_added = False
>  
>          if self._tc_attached:
> @@ -427,9 +427,9 @@ class NetDrvContEnv(NetDrvEpEnv):
>                  host=self.remote, fail=False)
>              self._remote_route_added = False
>  
> -        if self._nk_host_ifname:
> -            cmd(f"ip link del dev {self._nk_host_ifname}")
> -            self._nk_host_ifname = None
> +        if self.nk_host_ifname:
> +            cmd(f"ip link del dev {self.nk_host_ifname}")
> +            self.nk_host_ifname = None
>              self.nk_guest_ifname = None
>  
>          if self._init_ns_attached:
> @@ -470,9 +470,9 @@ class NetDrvContEnv(NetDrvEpEnv):
>          self._init_ns_attached = True
>          ip("netns set init 0", ns=self.netns)
>          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(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)
> @@ -512,7 +512,13 @@ class NetDrvContEnv(NetDrvEpEnv):
>                  return map_id
>          raise Exception(f"Failed to find .bss map for prog {prog_id}")
>  
> -    def _attach_bpf(self):
> +    def detach_bpf(self):
> +        if self._tc_attached:
> +            cmd(f"tc filter del dev {self.ifname} ingress pref "
> +                f"{self._bpf_prog_pref}", fail=False)
> +            self._tc_attached = False
> +
> +    def attach_bpf(self):
>          bpf_obj = self.test_dir / "nk_forward.bpf.o"
>          if not bpf_obj.exists():
>              raise KsftSkipEx("BPF prog not found")
> @@ -539,9 +545,9 @@ class NetDrvContEnv(NetDrvEpEnv):
>          if not bpf_obj.exists():
>              raise KsftSkipEx("Primary RX redirect BPF prog not found")
>  
> -        if self._tc_ensure_clsact(self._nk_host_ifname):
> +        if self._tc_ensure_clsact(self.nk_host_ifname):
>              self._primary_rx_redirect_clsact_added = True
> -        cmd(f"tc filter add dev {self._nk_host_ifname} ingress"
> +        cmd(f"tc filter add dev {self.nk_host_ifname} ingress"
>              f" bpf obj {bpf_obj} sec tc/ingress direct-action")
>          self._primary_rx_redirect_attached = True
>  
> @@ -550,7 +556,7 @@ class NetDrvContEnv(NetDrvEpEnv):
>          self._remote_route_added = True
>  
>          filters = json.loads(
> -            cmd(f"tc -j filter show dev {self._nk_host_ifname} ingress").stdout)
> +            cmd(f"tc -j filter show dev {self.nk_host_ifname} ingress").stdout)
>          redirect_prog_id = None
>          for bpf in filters:
>              if 'options' not in bpf:
> -- 
> 2.43.0
> 

Reviewed-by: Bobby Eshleman <bobbyeshleman@meta.com>

  reply	other threads:[~2026-06-10 23:53 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-06-10  8:03 [PATCH net-next 0/4] Extend netkit io_uring ZC selftests Daniel Borkmann
2026-06-10  8:03 ` [PATCH net-next 1/4] selftests/net: Move netkit lease hw setup into per-test fixtures Daniel Borkmann
2026-06-10 23:50   ` Bobby Eshleman
2026-06-10  8:03 ` [PATCH net-next 2/4] selftests/net: Use public NetDrvContEnv API in nk_qlease fixtures Daniel Borkmann
2026-06-10 23:53   ` Bobby Eshleman [this message]
2026-06-10  8:03 ` [PATCH net-next 3/4] selftests/net: Add netkit io_uring ZC test for large rx_buf_len Daniel Borkmann
2026-06-10 23:28   ` Bobby Eshleman
2026-06-10  8:03 ` [PATCH net-next 4/4] selftests/net: Add hugepage kernel config dependency for zcrx Daniel Borkmann
2026-06-10 23:54   ` 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=ain5BKx4Vupob5al@devvm29614.prn0.facebook.com \
    --to=bobbyeshleman@gmail.com \
    --cc=bobbyeshleman@meta.com \
    --cc=daniel@iogearbox.net \
    --cc=dw@davidwei.uk \
    --cc=kuba@kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=razor@blackwall.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox