Skip to content

Conversation

gs-adn
Copy link
Contributor

@gs-adn gs-adn commented Sep 11, 2025

With the netbox 4.2 changes to MAC address management, updating a server (with eg --update-all) results in unnecessary deletion/recreation of mac addresses. Netbox normalizes all mac addresses to uppercase, while the tools used by netbox-agent (ethtool or /sys/class/net) return all addresses as lowercase

Also with the 4.2 changes to MAC addresses, it's possible to have multiple MAC address objects in netbox with the same address, but assigned to different interfaces or different devices (notably for locally-administered mac addresses, or for virtual interfaces created as children from a physical interface where they inherit the parent MAC).
In that case, assigning the primary_mac_address attribute of interfaces will fail with an error:

pynetbox.core.query.RequestError: The request failed with code 400 Bad Request: {'primary_mac_address': ["Multiple objects match the provided attributes: {'mac_address': 'aa:bb:cc:dd:ee:ff'}"]}

To avoid this, specify the interface the mac address is assigned to in the pynetbox request to restore uniqueness (update_interface_macs will have created the MAC objects and assigned them to the interface before)

Both tools used to gather MAC addresses from devices (ethtool and
/sys/class/net) return mac addresses as lowercase, but netbox normalizes them
as uppercase, causing spurious MAC delete/re-creates when updating servers as
the macs don't compare equal
MAC address objects are not necessarily unique in netbox, so when assigning the
primary_interface_field match on the parent object to ensure uniqueness
(example usecase: when using virtual VLAN interfaces on a physical interface,
the children interface may use the same MAC. Then this update fails with an
HTTP 400 because there are multiple netbox MAC address objects with the same
MAC)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant