From: Xiao Liang <shaw.leon@gmail.com>
To: netdev@vger.kernel.org, linux-kselftest@vger.kernel.org,
Kuniyuki Iwashima <kuniyu@amazon.com>,
Jakub Kicinski <kuba@kernel.org>,
Donald Hunter <donald.hunter@gmail.com>
Cc: "David S. Miller" <davem@davemloft.net>,
David Ahern <dsahern@kernel.org>,
Eric Dumazet <edumazet@google.com>,
Paolo Abeni <pabeni@redhat.com>, Ido Schimmel <idosch@nvidia.com>,
Andrew Lunn <andrew+netdev@lunn.ch>,
Simon Horman <horms@kernel.org>, Shuah Khan <shuah@kernel.org>,
Jiri Pirko <jiri@resnulli.us>, Hangbin Liu <liuhangbin@gmail.com>,
linux-rdma@vger.kernel.org, linux-can@vger.kernel.org,
osmocom-net-gprs@lists.osmocom.org, bpf@vger.kernel.org,
linux-ppp@vger.kernel.org, wireguard@lists.zx2c4.com,
linux-wireless@vger.kernel.org, b.a.t.m.a.n@lists.open-mesh.org,
bridge@lists.linux.dev, linux-wpan@vger.kernel.org,
linux-kernel@vger.kernel.org
Subject: [PATCH net-next v3 1/6] Revert "tools/net/ynl: improve async notification handling"
Date: Wed, 13 Nov 2024 20:57:10 +0800 [thread overview]
Message-ID: <20241113125715.150201-2-shaw.leon@gmail.com> (raw)
In-Reply-To: <20241113125715.150201-1-shaw.leon@gmail.com>
From: Donald Hunter <donald.hunter@gmail.com>
This reverts commit 1bf70e6c3a5346966c25e0a1ff492945b25d3f80.
This modification to check_ntf() is being reverted so that its behaviour
remains equivalent to ynl_ntf_check() in the C YNL. Instead a new
poll_ntf() will be added in a separate patch.
Signed-off-by: Donald Hunter <donald.hunter@gmail.com>
---
tools/net/ynl/cli.py | 10 +++-----
tools/net/ynl/lib/ynl.py | 49 ++++++++++++++++------------------------
2 files changed, 23 insertions(+), 36 deletions(-)
diff --git a/tools/net/ynl/cli.py b/tools/net/ynl/cli.py
index 9e95016b85b3..b8481f401376 100755
--- a/tools/net/ynl/cli.py
+++ b/tools/net/ynl/cli.py
@@ -5,7 +5,6 @@ import argparse
import json
import pprint
import time
-import signal
from lib import YnlFamily, Netlink, NlError
@@ -18,8 +17,6 @@ class YnlEncoder(json.JSONEncoder):
return list(obj)
return json.JSONEncoder.default(self, obj)
-def handle_timeout(sig, frame):
- exit(0)
def main():
description = """
@@ -84,8 +81,7 @@ def main():
ynl.ntf_subscribe(args.ntf)
if args.sleep:
- signal.signal(signal.SIGALRM, handle_timeout)
- signal.alarm(args.sleep)
+ time.sleep(args.sleep)
if args.list_ops:
for op_name, op in ynl.ops.items():
@@ -110,8 +106,8 @@ def main():
exit(1)
if args.ntf:
- for msg in ynl.check_ntf():
- output(msg)
+ ynl.check_ntf()
+ output(ynl.async_msg_queue)
if __name__ == "__main__":
diff --git a/tools/net/ynl/lib/ynl.py b/tools/net/ynl/lib/ynl.py
index 92f85698c50e..c22c22bf2cb7 100644
--- a/tools/net/ynl/lib/ynl.py
+++ b/tools/net/ynl/lib/ynl.py
@@ -12,8 +12,6 @@ import sys
import yaml
import ipaddress
import uuid
-import queue
-import time
from .nlspec import SpecFamily
@@ -491,7 +489,7 @@ class YnlFamily(SpecFamily):
self.sock.setsockopt(Netlink.SOL_NETLINK, Netlink.NETLINK_GET_STRICT_CHK, 1)
self.async_msg_ids = set()
- self.async_msg_queue = queue.Queue()
+ self.async_msg_queue = []
for msg in self.msgs.values():
if msg.is_async:
@@ -905,39 +903,32 @@ class YnlFamily(SpecFamily):
msg['name'] = op['name']
msg['msg'] = attrs
- self.async_msg_queue.put(msg)
+ self.async_msg_queue.append(msg)
- def check_ntf(self, interval=0.1):
+ def check_ntf(self):
while True:
try:
reply = self.sock.recv(self._recv_size, socket.MSG_DONTWAIT)
- nms = NlMsgs(reply)
- self._recv_dbg_print(reply, nms)
- for nl_msg in nms:
- if nl_msg.error:
- print("Netlink error in ntf!?", os.strerror(-nl_msg.error))
- print(nl_msg)
- continue
- if nl_msg.done:
- print("Netlink done while checking for ntf!?")
- continue
+ except BlockingIOError:
+ return
- decoded = self.nlproto.decode(self, nl_msg, None)
- if decoded.cmd() not in self.async_msg_ids:
- print("Unexpected msg id while checking for ntf", decoded)
- continue
+ nms = NlMsgs(reply)
+ self._recv_dbg_print(reply, nms)
+ for nl_msg in nms:
+ if nl_msg.error:
+ print("Netlink error in ntf!?", os.strerror(-nl_msg.error))
+ print(nl_msg)
+ continue
+ if nl_msg.done:
+ print("Netlink done while checking for ntf!?")
+ continue
- self.handle_ntf(decoded)
- except BlockingIOError:
- pass
+ decoded = self.nlproto.decode(self, nl_msg, None)
+ if decoded.cmd() not in self.async_msg_ids:
+ print("Unexpected msg id done while checking for ntf", decoded)
+ continue
- try:
- yield self.async_msg_queue.get_nowait()
- except queue.Empty:
- try:
- time.sleep(interval)
- except KeyboardInterrupt:
- return
+ self.handle_ntf(decoded)
def operation_do_attributes(self, name):
"""
--
2.47.0
next prev parent reply other threads:[~2024-11-13 12:57 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-11-13 12:57 [PATCH net-next v3 0/6] net: Improve netns handling in RTNL and ip_tunnel Xiao Liang
2024-11-13 12:57 ` Xiao Liang [this message]
2024-11-13 12:57 ` [PATCH net-next v3 2/6] net: ip_tunnel: Build flow in underlay net namespace Xiao Liang
2024-11-13 12:57 ` [PATCH net-next v3 3/6] rtnetlink: Lookup device in target netns when creating link Xiao Liang
2024-11-13 12:57 ` [PATCH net-next v3 4/6] rtnetlink: Decouple net namespaces in rtnl_newlink_create() Xiao Liang
2024-11-15 23:35 ` Jakub Kicinski
2024-11-13 12:57 ` [PATCH net-next v3 5/6] selftests: net: Add python context manager for netns entering Xiao Liang
2024-11-13 12:57 ` [PATCH net-next v3 6/6] selftests: net: Add two test cases for link netns Xiao Liang
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=20241113125715.150201-2-shaw.leon@gmail.com \
--to=shaw.leon@gmail.com \
--cc=andrew+netdev@lunn.ch \
--cc=b.a.t.m.a.n@lists.open-mesh.org \
--cc=bpf@vger.kernel.org \
--cc=bridge@lists.linux.dev \
--cc=davem@davemloft.net \
--cc=donald.hunter@gmail.com \
--cc=dsahern@kernel.org \
--cc=edumazet@google.com \
--cc=horms@kernel.org \
--cc=idosch@nvidia.com \
--cc=jiri@resnulli.us \
--cc=kuba@kernel.org \
--cc=kuniyu@amazon.com \
--cc=linux-can@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=linux-ppp@vger.kernel.org \
--cc=linux-rdma@vger.kernel.org \
--cc=linux-wireless@vger.kernel.org \
--cc=linux-wpan@vger.kernel.org \
--cc=liuhangbin@gmail.com \
--cc=netdev@vger.kernel.org \
--cc=osmocom-net-gprs@lists.osmocom.org \
--cc=pabeni@redhat.com \
--cc=shuah@kernel.org \
--cc=wireguard@lists.zx2c4.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.