From aecb4546f827fcdd4b925188174001a492e95596 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20Walstr=C3=B6m?= Date: Tue, 26 May 2026 17:15:56 +0200 Subject: [PATCH] yanger: expand VLAN ranges from bridge global output bridge -j vlan global show can return VLAN ranges as {"vlan": 1, "vlanEnd": 3} instead of individual entries. The vlans dict was only keyed on the start value, causing port VLANs 2 and 3 to be reported as "Unexpected". Also fix typo in error message (brpvlans -> brpvlan). --- .../python/yanger/ietf_interfaces/bridge.py | 28 ++++++++++--------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/src/statd/python/yanger/ietf_interfaces/bridge.py b/src/statd/python/yanger/ietf_interfaces/bridge.py index 218962ba9..5583f6300 100644 --- a/src/statd/python/yanger/ietf_interfaces/bridge.py +++ b/src/statd/python/yanger/ietf_interfaces/bridge.py @@ -275,8 +275,9 @@ def vlans_add_memberships(iplink, vlans): continue for brpvlan in brpvlans["vlans"]: - if not (vlan := vlans.get(brpvlan["vlan"])): - LOG.error(f"Unexpected vlan {brpvlans['vlan']} on {port}") + vid = brpvlan["vlan"] + if not (vlan := vlans.get(vid)): + LOG.error(f"Unexpected vlan {vid} on {port}") continue if "Egress Untagged" in brpvlan.get("flags", []): @@ -291,17 +292,18 @@ def vlans(iplink): mctldata = mctl_queriers() - vlans = { - v["vlan"]: { - "vid": v["vlan"], - "untagged": [], - "tagged": [], - - "multicast": multicast(iplink, v, mctldata), - "multicast-filters": multicast_filters(iplink, v["vlan"]), - } - for v in brgvlans[0]["vlans"] - } + vlans = {} + for v in brgvlans[0]["vlans"]: + start = v["vlan"] + end = v.get("vlanEnd", start) + for vid in range(start, end + 1): + vlans[vid] = { + "vid": vid, + "untagged": [], + "tagged": [], + "multicast": multicast(iplink, v, mctldata), + "multicast-filters": multicast_filters(iplink, vid), + } vlans_add_memberships(iplink, vlans) return list(vlans.values())