Repository navigation
Conversation
metal-core read the management address from eth0 only. The new setting METAL_CORE_MANAGEMENT_INTERFACE (default eth0) names the interface, and types.Nic carries its name for the templates, for NOSes that name the management port differently.
BISDN Linux (detected by ID=bisdn-linux in /etc/os-release) programs the ASIC from the Linux kernel state via baseboxd and OF-DPA. The bisdn switcher renders systemd-networkd files (NN-bisdn-*) and frr.conf, deletes stale netdevs and releases ports with netlink where networkd can't, reloads networkd via D-Bus (new dbus.ReloadNetworkd) and FRR via frr.service, after validating frr.conf with frr-validation@. Front panel ports are port1..portN, reported with their names as identifiers; the management interface defaults to enp0. Networkd's own LLDP is off on all front panel ports. The FRR template renders use-underlays-nexthop-weight in every router bgp: FRR 10.7.1 (BISDN Linux 6.0.0) shows that line whenever bgp deterministic-med is set (FRRouting/frr#22939, fixed by #22552), so every reload would flip deterministic-med otherwise. It also renders "debug bgp updates in/out" as FRR shows them, so frr-reload.py finds no difference after a reload. Port breakouts and FEC live in the Broadcom SDK configuration and need an ofdpa restart, so they are left to provisioning. Requires metal-stack/api with SWITCH_OS_VENDOR_BISDN (pinned to the branch commit until it is released).
metal-hammer only accepts a switch neighbor whose LLDP chassis ID is a MAC address and whose port ID is a MAC address or locally assigned, and uses the port description as switch port name. BISDN Linux has no LLDP agent, and systemd-networkd's LLDP sends the machine-id as chassis ID and no port description. With METAL_CORE_LLDP_SEND=true, metal-core sends LLDP on all switch ports itself: chassis ID = port MAC, port ID = port name (locally assigned), port description = port name, system name = hostname. Ports are rescanned every 10s, so ports created later get a sender too. The port ID subtype needs metal-stack/go-lldpd#34; until it is released, go-lldpd is replaced by github.com/mwindower/go-lldpd.
This was referenced Nov 5, 2026
Render one networkd file per interface from a small template per file kind (tpl/bisdn/*.tpl) instead of splitting one template at markers, as metal-networker does. Files are named NN-metal-core-<interface>.<kind>, so the netdevs to delete and the ports to release follow from the file names and no INI parsing is needed. Files without that prefix, such as metal-roles' mgmt VRF, are never touched. METAL_CORE_INTERFACES_TPL_FILE names a directory whose templates replace the embedded ones with the same name.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Adds a switcher for BISDN Linux, which programs the Broadcom ASIC from the Linux kernel state through baseboxd and OF-DPA. Four commits:
METAL_CORE_MANAGEMENT_INTERFACE. Empty means the NOS default:eth0, on BISDN Linuxenp0.cmd/internal/switcher/bisdn):ID=bisdn-linuxin/etc/os-releasedbus.ReloadNetworkd)frr.conf, validates it withfrr-validation@and reloadsfrr.serviceport1..portN, with their names as identifiersMETAL_CORE_LLDP_SEND=true.NN-metal-core-<interface>.netdev|network, each from a small template per file kind (tpl/bisdn/*.tpl), as metal-networker does itNN-metal-core-prefix (metal-roles' mgmt VRF and management port, anything else) are never touched. Unit tests cover both, the lab checks that no file naming the removed VRF/VNI/VLAN is left and the mgmt files are still thereMETAL_CORE_INTERFACES_TPL_FILEnames a directory whose templates replace the embedded ones with the same nameNotes:
use-underlays-nexthop-weightin everyrouter bgp. FRR 10.7.1 shows that line wheneverbgp deterministic-medis set (bgp:use-underlays-nexthop-weight/bgp deterministic-medflip-flop when usingfrr defaults datacenterFRRouting/frr#22939, fixed by bgpd: Fix flags used by use-underlays-nexthop-weight command FRRouting/frr#22552), so otherwise every reload would flip deterministic-med. It also rendersdebug bgp updates in/outthe way FRR shows them, sofrr-reload.pyfinds no difference after a reload.org.freedesktop.network1.Manager.Reload(whatnetworkctl reloadcalls). go-systemd only talks to the systemd manager, and BISDN Linux'ssystemd-networkd.servicehas noExecReload, so a unit reload fails and a restart would reconfigure all links. godbus is not a new module: go-systemd already depends on it, the PR only makes it a direct dependency.github.com/metal-stack/apiis pinned to metal-stack/api'sbisdn-vendorcommitgithubproxy.fjygbaifeng.eu.org/mwindower/go-lldpduntil Make the port ID subtype of the LLDP daemon configurable go-lldpd#34 is releasedTestLabApply: BGP unnumbered, EVPN L3VNI and PXE L2VNI, VNI filter, metal-hammer LLDP content, runtime VRF add/remove with netlink cleanup, port admin state, idempotent frr-reloadUsed AI-Tools ✨
References: