From cae5cfd3f097b7cffa7223083467f5954d99ecae Mon Sep 17 00:00:00 2001 From: Ahmed Karic Date: Tue, 13 May 2025 16:58:02 +0200 Subject: [PATCH] statd: Set default dest-mac-address for LLDP --- src/confd/yang/confd.inc | 2 +- src/confd/yang/confd/infix-lldp.yang | 23 +++++++++++++++++++ ...-01-08.yang => infix-lldp@2025-05-05.yang} | 0 src/statd/python/yanger/infix_lldp.py | 13 ++--------- .../infix_services/lldp_admin_status/test.py | 2 +- 5 files changed, 27 insertions(+), 13 deletions(-) rename src/confd/yang/confd/{infix-lldp@2025-01-08.yang => infix-lldp@2025-05-05.yang} (100%) diff --git a/src/confd/yang/confd.inc b/src/confd/yang/confd.inc index 9aab145f..f6074cfa 100644 --- a/src/confd/yang/confd.inc +++ b/src/confd/yang/confd.inc @@ -25,7 +25,7 @@ MODULES=( "infix-if-type@2025-02-12.yang" "infix-routing@2024-11-27.yang" "ieee802-dot1ab-lldp@2022-03-15.yang" - "infix-lldp@2025-01-08.yang" + "infix-lldp@2025-05-05.yang" "infix-dhcp-common@2025-01-29.yang" "infix-dhcp-client@2025-01-29.yang" "infix-dhcp-server@2025-01-29.yang" diff --git a/src/confd/yang/confd/infix-lldp.yang b/src/confd/yang/confd/infix-lldp.yang index 375c3077..5a49f3d4 100644 --- a/src/confd/yang/confd/infix-lldp.yang +++ b/src/confd/yang/confd/infix-lldp.yang @@ -11,6 +11,13 @@ module infix-lldp { contact "kernelkit@googlegroups.com"; description "Infix augments and deviations to ieee-dot1ab-lldp."; + revision 2025-05-05 { + description + "Restrict 'dest-mac-address' to only allow the LLDP multicast MAC + address (01:80:C2:00:00:0E)."; + reference "internal"; + } + revision 2025-01-08 { description "Enable std. /lldp:lldp/message-tx-interval"; } @@ -32,6 +39,22 @@ module infix-lldp { } } + deviation "/lldp:lldp/lldp:port/lldp:dest-mac-address" { + deviate replace { + type string { + pattern "([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2}"; + } + } + } + + deviation "/lldp:lldp/lldp:port/lldp:dest-mac-address" { + deviate add { + must "translate(., 'abcdef', 'ABCDEF') = '01:80:C2:00:00:0E'" { + error-message "Only the LLDP Multicast MAC (01:80:C2:00:00:0E) is allowed."; + } + } + } + deviation "/lldp:lldp/lldp:message-fast-tx" { deviate not-supported; } diff --git a/src/confd/yang/confd/infix-lldp@2025-01-08.yang b/src/confd/yang/confd/infix-lldp@2025-05-05.yang similarity index 100% rename from src/confd/yang/confd/infix-lldp@2025-01-08.yang rename to src/confd/yang/confd/infix-lldp@2025-05-05.yang diff --git a/src/statd/python/yanger/infix_lldp.py b/src/statd/python/yanger/infix_lldp.py index fcd5f5f5..81e24995 100644 --- a/src/statd/python/yanger/infix_lldp.py +++ b/src/statd/python/yanger/infix_lldp.py @@ -15,9 +15,9 @@ def operational(): "local": "local" } - DEFAULT_MAC = "00-00-00-00-00-00" + LLDP_MULTICAST_MAC = "01:80:C2:00:00:0E" - port_data = defaultdict(lambda: {"remote-systems-data": [], "dest-mac-address": None}) + port_data = defaultdict(lambda: {"remote-systems-data": [], "dest-mac-address": LLDP_MULTICAST_MAC}) data = HOST.run_json(["lldpcli", "show", "neighbors", "-f", "json"]) @@ -38,12 +38,6 @@ def operational(): port_id_type = subtype_mapping.get(port_info.get("id", {}).get("type"), "unknown") port_id_value = port_info.get("id", {}).get("value", "") - dest_mac_address = ( - chassis_id_value.replace(":", "-") if chassis_id_type == "mac-address" else - port_id_value.replace(":", "-") if port_id_type == "mac-address" else - DEFAULT_MAC - ) - remote_entry = { "time-mark": time_mark, "remote-index": remote_index, @@ -55,9 +49,6 @@ def operational(): port_data[iface_name]["remote-systems-data"].append(remote_entry) - if port_data[iface_name]["dest-mac-address"] is None: - port_data[iface_name]["dest-mac-address"] = dest_mac_address - formatted_output = { "ieee802-dot1ab-lldp:lldp": { "port": [ diff --git a/test/case/infix_services/lldp_admin_status/test.py b/test/case/infix_services/lldp_admin_status/test.py index 2bb7e275..87e6183d 100755 --- a/test/case/infix_services/lldp_admin_status/test.py +++ b/test/case/infix_services/lldp_admin_status/test.py @@ -45,7 +45,7 @@ def verify_admin_status(test, target, port, admin_status, local_capture, remote_ "lldp": { "port": [{ "name": target["data"], - "dest-mac-address": "00-00-00-00-00-00", + "dest-mac-address": "01:80:C2:00:00:0E", "admin-status": admin_status }] }