Skip to content

net: ignore Intel's default unprogrammed MAC on igc NICs - #6991

Open
joelle-a-dev wants to merge 1 commit into
canonical:mainfrom
joelle-a-dev:fix/igc-unprogrammed-mac
Open

joelle-a-dev wants to merge 1 commit into
canonical:mainfrom
joelle-a-dev:fix/igc-unprogrammed-mac

Conversation

@joelle-a-dev

@joelle-a-dev joelle-a-dev commented Aug 11, 2026

Copy link
Copy Markdown

Some Intel i225 (NVM >= 1.53) and all i226 NICs ship with an unprogrammed placeholder MAC (00:a0:c9:00:00:00) until manufacturing flashes a real one. When two such NICs are present, cloud-init crashed with "duplicate mac found!" during networking setup.

Rather than ignoring all duplicate MACs for the igc driver (which would also hide genuine duplicate-MAC hardware faults on this common NIC), filter out this specific known placeholder value the same way the existing all-zero MAC placeholder is already filtered. Fixes GH-6782.

There was a prior attempt at this in #6784, which added igc to the existing driver-based duplicate-MAC ignore list (alongside fsl_enetc, mscc_felix, qmi_wwan). That approach is broader than needed here:
those other drivers are niche (automotive switches, cellular modems), but igc backs common consumer/server NICs (Intel I225/I226), so blanket-ignoring duplicate MACs for that driver would also silently hide a genuine duplicate-MAC hardware fault on such a board, rather than surfacing it as the RuntimeError does today. #6784 also had no test coverage and went stale.

Per Intel's own documentation, I225 (NVM >= 1.53) and all I226 parts ship with a specific, known default/placeholder MAC (00:a0:c9:00:00:00) until the manufacturing line programs a real one, this is exactly the MAC address in the linked bug report. This PR instead filters that specific sentinel value, the same way get_interfaces() already filters the all-zero MAC placeholder as "no real per-device MAC assigned yet." Real, distinct MACs that happen to collide on igc NICs still raise RuntimeError as before.

Test Steps

Added unit tests:

  • test_skip_intel_unprogrammed_placeholder_mac: two igc interfaces sharing the Intel placeholder MAC no longer raise, and are excluded from get_interfaces_by_mac().
  • test_real_duplicate_igc_macs_still_raise: two igc interfaces sharing a real (non-placeholder) MAC still raise RuntimeError.

tox -e py3 -- tests/unittests/test_net.py passes (273 passed, 12 xfailed).

Some Intel i225 (NVM >= 1.53) and all i226 NICs ship with an
unprogrammed placeholder MAC (00:a0:c9:00:00:00) until manufacturing
flashes a real one. When two such NICs are present, cloud-init
crashed with "duplicate mac found!" during networking setup.

Rather than ignoring all duplicate MACs for the igc driver (which
would also hide genuine duplicate-MAC hardware faults on this common
NIC), filter out this specific known placeholder value the same way
the existing all-zero MAC placeholder is already filtered.

LP: #2142651
Fixes canonicalGH-6782
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.

RuntimeError: duplicate mac found! (driver: igc)

1 participant