diff --git a/python/pynetlink/debian/deb_folder/changelog b/python/pynetlink/debian/deb_folder/changelog index 08f4899f9..395e99beb 100644 --- a/python/pynetlink/debian/deb_folder/changelog +++ b/python/pynetlink/debian/deb_folder/changelog @@ -1,3 +1,9 @@ +pynetlink (1.0.1-0) unstable; urgency=medium + + * Handling unknown enumerator value in Netlink DPLL. + + -- Reynaldo P Gomes Thu, 24 Jul 2025 15:40:00 -0300 + pynetlink (1.0.0-0) unstable; urgency=medium * New upstream release. diff --git a/python/pynetlink/debian/meta_data.yaml b/python/pynetlink/debian/meta_data.yaml index 80e5fdf51..7243821d3 100644 --- a/python/pynetlink/debian/meta_data.yaml +++ b/python/pynetlink/debian/meta_data.yaml @@ -1,6 +1,6 @@ --- debname: pynetlink -debver: 1.0.0 +debver: 1.0.1 src_path: src revision: dist: $STX_DIST diff --git a/python/pynetlink/debian/patches/0001-tools-ynl-process-unknown-for-enum-values.patch b/python/pynetlink/debian/patches/0001-tools-ynl-process-unknown-for-enum-values.patch new file mode 100644 index 000000000..bbc3918e2 --- /dev/null +++ b/python/pynetlink/debian/patches/0001-tools-ynl-process-unknown-for-enum-values.patch @@ -0,0 +1,73 @@ +From 8c2e602225f0a96f2c5c65de8ab06e304081e542 Mon Sep 17 00:00:00 2001 +From: Donald Hunter +Date: Fri, 11 Jul 2025 18:04:56 +0100 +Subject: [PATCH] tools: ynl: process unknown for enum values + +Extend the process_unknown handing to enum values and flags. + +Tested by removing entries from rt-link.yaml and rt-neigh.yaml: + +./tools/net/ynl/pyynl/cli.py --family rt-link --dump getlink \ + --process-unknown --output-json | jq '.[0] | ."ifi-flags"' +[ + "up", + "Unknown(6)", + "loopback", + "Unknown(16)" +] + +./tools/net/ynl/pyynl/cli.py --family rt-neigh --dump getneigh \ + --process-unknown --output-json | jq '.[] | ."ndm-type"' +"unicast" +"Unknown(5)" +"Unknown(5)" +"unicast" +"Unknown(5)" +"unicast" +"broadcast" + +Signed-off-by: Donald Hunter +Reviewed-by: Jakub Kicinski +Signed-off-by: David S. Miller +--- + pynetlink/base/ynl.py | 14 ++++++++++++-- + 1 file changed, 12 insertions(+), 2 deletions(-) + +diff --git a/pynetlink/base/ynl.py b/pynetlink/base/ynl.py +index 7529bce174ff..006b359294a4 100644 +--- a/pynetlink/base/ynl.py ++++ b/pynetlink/base/ynl.py +@@ -618,6 +618,16 @@ class YnlFamily(SpecFamily): + pad = b'\x00' * ((4 - len(attr_payload) % 4) % 4) + return struct.pack('HH', len(attr_payload) + 4, nl_type) + attr_payload + pad + ++ def _get_enum_or_unknown(self, enum, raw): ++ try: ++ name = enum.entries_by_val[raw].name ++ except KeyError as error: ++ if self.process_unknown: ++ name = f"Unknown({raw})" ++ else: ++ raise error ++ return name ++ + def _decode_enum(self, raw, attr_spec): + enum = self.consts[attr_spec['enum']] + if enum.type == 'flags' or attr_spec.get('enum-as-flags', False): +@@ -625,11 +635,11 @@ class YnlFamily(SpecFamily): + value = set() + while raw: + if raw & 1: +- value.add(enum.entries_by_val[i].name) ++ value.add(self._get_enum_or_unknown(enum, i)) + raw >>= 1 + i += 1 + else: +- value = enum.entries_by_val[raw].name ++ value = self._get_enum_or_unknown(enum, raw) + return value + + def _decode_binary(self, attr, attr_spec): +-- +2.34.1 + diff --git a/python/pynetlink/debian/patches/series b/python/pynetlink/debian/patches/series new file mode 100644 index 000000000..aedc09fed --- /dev/null +++ b/python/pynetlink/debian/patches/series @@ -0,0 +1 @@ +0001-tools-ynl-process-unknown-for-enum-values.patch \ No newline at end of file diff --git a/python/pynetlink/src/pynetlink/common/netlink.py b/python/pynetlink/src/pynetlink/common/netlink.py index c21c120ef..d131fe936 100644 --- a/python/pynetlink/src/pynetlink/common/netlink.py +++ b/python/pynetlink/src/pynetlink/common/netlink.py @@ -43,7 +43,8 @@ class NetlinkFactory: return YnlFamily( files('pynetlink').joinpath('specs', yaml_spec_file), - files('pynetlink').joinpath('schemas', yaml_schema_file)) + files('pynetlink').joinpath('schemas', yaml_schema_file), + process_unknown=True) @staticmethod def get_dpll_instance() -> YnlFamily: