Commit a6a41521 authored by Jakub Kicinski's avatar Jakub Kicinski Committed by David S. Miller

tools: ynl: support debug printing messages

For manual debug, allow printing the netlink level messages
to stderr.
Reviewed-by: default avatarDonald Hunter <donald.hunter@gmail.com>
Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 7c93a887
...@@ -7,6 +7,7 @@ import random ...@@ -7,6 +7,7 @@ import random
import socket import socket
import struct import struct
from struct import Struct from struct import Struct
import sys
import yaml import yaml
import ipaddress import ipaddress
import uuid import uuid
...@@ -420,6 +421,7 @@ class YnlFamily(SpecFamily): ...@@ -420,6 +421,7 @@ class YnlFamily(SpecFamily):
except KeyError: except KeyError:
raise Exception(f"Family '{self.yaml['name']}' not supported by the kernel") raise Exception(f"Family '{self.yaml['name']}' not supported by the kernel")
self._recv_dbg = False
# Note that netlink will use conservative (min) message size for # Note that netlink will use conservative (min) message size for
# the first dump recv() on the socket, our setting will only matter # the first dump recv() on the socket, our setting will only matter
# from the second recv() on. # from the second recv() on.
...@@ -453,6 +455,17 @@ class YnlFamily(SpecFamily): ...@@ -453,6 +455,17 @@ class YnlFamily(SpecFamily):
self.sock.setsockopt(Netlink.SOL_NETLINK, Netlink.NETLINK_ADD_MEMBERSHIP, self.sock.setsockopt(Netlink.SOL_NETLINK, Netlink.NETLINK_ADD_MEMBERSHIP,
mcast_id) mcast_id)
def set_recv_dbg(self, enabled):
self._recv_dbg = enabled
def _recv_dbg_print(self, reply, nl_msgs):
if not self._recv_dbg:
return
print("Recv: read", len(reply), "bytes,",
len(nl_msgs.msgs), "messages", file=sys.stderr)
for nl_msg in nl_msgs:
print(" ", nl_msg, file=sys.stderr)
def _encode_enum(self, attr_spec, value): def _encode_enum(self, attr_spec, value):
enum = self.consts[attr_spec['enum']] enum = self.consts[attr_spec['enum']]
if enum.type == 'flags' or attr_spec.get('enum-as-flags', False): if enum.type == 'flags' or attr_spec.get('enum-as-flags', False):
...@@ -819,6 +832,7 @@ class YnlFamily(SpecFamily): ...@@ -819,6 +832,7 @@ class YnlFamily(SpecFamily):
return return
nms = NlMsgs(reply) nms = NlMsgs(reply)
self._recv_dbg_print(reply, nms)
for nl_msg in nms: for nl_msg in nms:
if nl_msg.error: if nl_msg.error:
print("Netlink error in ntf!?", os.strerror(-nl_msg.error)) print("Netlink error in ntf!?", os.strerror(-nl_msg.error))
...@@ -871,6 +885,7 @@ class YnlFamily(SpecFamily): ...@@ -871,6 +885,7 @@ class YnlFamily(SpecFamily):
while not done: while not done:
reply = self.sock.recv(self._recv_size) reply = self.sock.recv(self._recv_size)
nms = NlMsgs(reply, attr_space=op.attr_set) nms = NlMsgs(reply, attr_space=op.attr_set)
self._recv_dbg_print(reply, nms)
for nl_msg in nms: for nl_msg in nms:
if nl_msg.extack: if nl_msg.extack:
self._decode_extack(msg, op, nl_msg.extack) self._decode_extack(msg, op, nl_msg.extack)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment