Add ntf_bind() method to YnlFamily for binding the netlink
socket without joining a multicast group. This enables receiving
unicast notifications through the existing poll_ntf/check_ntf
path.
The OVS packet family sends MISS and ACTION upcalls via
genlmsg_unicast() to a per-vport PID rather than through a
multicast group. The existing ntf_subscribe() couples bind()
with setsockopt(ADD_MEMBERSHIP), which does not fit the unicast
case. ntf_bind() provides the bind-only alternative, with the
address defaulting to (0, 0) but exposed as an explicit argument.
Signed-off-by: Minxi Hou <redacted>
---
tools/net/ynl/pyynl/lib/ynl.py | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/tools/net/ynl/pyynl/lib/ynl.py b/tools/net/ynl/pyynl/lib/ynl.py
index 010aac0c6c67..092d132edec1 100644
--- a/tools/net/ynl/pyynl/lib/ynl.py
+++ b/tools/net/ynl/pyynl/lib/ynl.py
@@ -682,6 +682,7 @@ class YnlFamily(SpecFamily):
ynl.ntf_subscribe(mcast_name) -- join a multicast group
ynl.ntf_listen_all_nsid() -- listen on all netns
+ ynl.ntf_bind(addr=(0, 0)) -- bind socket for unicast notifications
ynl.check_ntf() -- drain pending notifications
ynl.poll_ntf(duration=None) -- yield notifications
@@ -767,6 +768,10 @@ class YnlFamily(SpecFamily):
return None
return None
+ def ntf_bind(self, addr=(0, 0)):
+ """Bind socket for receiving unicast notifications."""
+ self.sock.bind(addr)
+
def set_recv_dbg(self, enabled):
self._recv_dbg = enabled
--
2.54.0