assigns MAC-based names for devices with locally administered MAC address

Bug #1574483 reported by Martin Pitt on 2016-04-25
8
This bug affects 1 person
Affects Status Importance Assigned to Milestone
systemd (Debian)
Fix Released
Unknown
systemd (Ubuntu)
High
Martin Pitt
Xenial
High
Martin Pitt
Yakkety
High
Martin Pitt

Bug Description

Originally from https://bugs.debian.org/812575: Our current /lib/systemd/network/90-mac-for-usb.link assigns MAC-based names to all USB devices. However, this is wrong and pointless for locally administered MAC addresses (with the second bit set to '1', see https://en.wikipedia.org/wiki/MAC_address#Address_details).

The old 75-persistent-net generator had this rule:

   ENV{MATCHADDR}=="?[2367abef]:*", ENV{MATCHADDR}=""

which ignored these devices. We need to adjust 90-mac-for-usb.link to do the same, and only apply to universally administered MAC addresses (at least until https://lists.ubuntu.com/archives/ubuntu-devel/2016-April/039302.html gets concluded).

We should simply fall through the default policy of assigning location based names. The kernel assigned ones have no meaning whatsoever, so this at least provides name stability for use cases where you can rely on plugging the device into the same port.

SRU INFORMATION:
================
Fix: https://anonscm.debian.org/cgit/pkg-systemd/systemd.git/commit/?id=ec7e332

Test case:
 - Plug in an Android phone and enable USB tethering, or a different USB device which uses locally administered MAC addresses, i. e. they change after every reboot of the device. The first byte of the MAC address must have the second bit set, i. e. the hex number matches ?[2367abef].
 - Check "ip a". With current xenial version the interface name is MAC based, like "enx12345678", and it changes after rebooting the device.
 - With this fix, the name is location based, like "enp0s1u2", and it remains stable as long as you use the same USB port.

Regression potential: This only affects naming USB network devices. It should be tested that devices with universally administered MACs (i. e. stable, second bit is zero) keep MAC based names to avoid changing existing stable names. For devices with locally administered MACs (i. e. random ones) the name currently changes all the time anyway, so any /etc/network/interfaces or firewall script that refers to them is already broken and there cannot be further regressions there. Also, the updated policy is only applied after a computer reboot or replugging the device, the name does not change while the device is already plugged in.

Martin Pitt (pitti) on 2016-04-25
Changed in systemd (Ubuntu):
assignee: nobody → Martin Pitt (pitti)
status: New → Triaged
importance: Undecided → High
Changed in systemd (Ubuntu Xenial):
status: New → Triaged
importance: Undecided → High
assignee: nobody → Martin Pitt (pitti)
Martin Pitt (pitti) wrote :
Changed in systemd (Ubuntu Yakkety):
status: Triaged → Fix Committed
Martin Pitt (pitti) on 2016-04-25
description: updated
Changed in systemd (Ubuntu Xenial):
status: Triaged → In Progress
Changed in systemd (Debian):
status: Unknown → Fix Committed
Changed in systemd (Debian):
status: Fix Committed → Fix Released
Launchpad Janitor (janitor) wrote :
Download full text (3.2 KiB)

This bug was fixed in the package systemd - 229-5ubuntu1

---------------
systemd (229-5ubuntu1) yakkety; urgency=medium

  * Merge with Debian unstable. Remaining Ubuntu changes:
    - Hack to support system-image read-only /etc, and modify files in
      /etc/writable/ instead.

systemd (229-5) unstable; urgency=medium

  * debian/tests/unit-config: Call "daemon-reload" to clean up generated units
    in between tests.
  * debian/tests/unit-config: Check that enable/disable commands are
    idempotent.
  * debian/tests/unit-config: Detect if system units are in /usr/, so that the
    test works on systems with merged /usr.
  * debian/tests/unit-config: Use systemd-sysv-install instead of update-rc.d
    directly, so that the test works under Fedora too.
  * debian/tests/unit-config: Check disabling of a "systemctl link"ed unit,
    and check "systemctl enable" on a unit with full path which is not in the
    standard directories.
  * Rename debian/extra/rules/73-idrac.rules to 73-special-net-names.rules, as
    it is going to get rules for other devices. Also install it into the
    initramfs.
  * debian/extra/rules/73-special-net-names.rules: Add DEVPATH number based
    naming schema for ibmveth devices. (LP: #1561096)
  * Don't set SYSTEMD_READY=0 on DM_UDEV_DISABLE_OTHER_RULES_FLAG=1 devmapper
    devices with "change" events, as this causes spurious unmounting with
    multipath devices. (LP: #1565969)
  * Fix bogus "No [Install] section" warning when enabling a unit with full
    path. (LP: #1563590)
  * debian/tests/cmdline-upstart-boot: In test_rsyslog(), check for messages
    from dbus instead of NetworkManager. NM 1.2 does not seem to log to syslog
    by default any more.
  * Bump Standards-Version to 3.9.8 (no changes necessary).
  * debian/tests/boot-smoke: Add some extra debugging if there are pending
    jobs after 10s, to figure out why lightdm is sometimes "restarting".
    (for LP #1571673)
  * debian/tests/boot-smoke: Configure dummy X.org driver (like in the
    boot-and-services test), to avoid lightdm randomly fail. (LP: #1571673)
  * Move Debian specific patches into debian/patches/debian (which translates
    to "Gbp-Pq: Topic debian" with pq). This keeps upstream vs. Debian
    patches separated without the comments in debian/patches/series (which
    always get removed by "pq export").
  * Don't ship an empty /etc/X11/xinit/xinitrc.d/ directory, this isn't
    supported in Debian. (Closes: #822198)
  * udev: Mark nbd as inactive until connected. (Closes: #812485)
  * On shutdown, unmount /tmp before disabling swap. (Closes: #788303)
  * debian/systemd-coredump.postinst: Do daemon-reload before starting
    systemd-coredump, as the unit file may have changed on upgrades.
    (Closes: #820325)
  * Set MAC based name for USB network interfaces only for universally
    administered (i. e. stable) MACs, not for locally administered (i. e.
    randomly generated) ones. Drop /lib/systemd/network/90-mac-for-usb.link
    (as link files don't currently support globs for MACAddress=) and replace
    with an udev rule in /lib/udev/rules.d/73-special-net-names.rules.
    (Closes: #812575, LP: #1574483)

 -- Martin Pitt <martin...

Read more...

Changed in systemd (Ubuntu Yakkety):
status: Fix Committed → Fix Released

Hello Martin, or anyone else affected,

Accepted systemd into xenial-proposed. The package will build now and be available at https://launchpad.net/ubuntu/+source/systemd/229-4ubuntu5 in a few hours, and then in the -proposed repository.

Please help us by testing this new package. See https://wiki.ubuntu.com/Testing/EnableProposed for documentation how to enable and use -proposed. Your feedback will aid us getting this update out to other Ubuntu users.

If this package fixes the bug for you, please add a comment to this bug, mentioning the version of the package you tested, and change the tag from verification-needed to verification-done. If it does not fix the bug for you, please add a comment stating that, and change the tag to verification-failed. In either case, details of your testing will help us make a better decision.

Further information regarding the verification process can be found at https://wiki.ubuntu.com/QATeam/PerformingSRUVerification . Thank you in advance!

Changed in systemd (Ubuntu Xenial):
status: In Progress → Fix Committed
tags: added: verification-needed
Martin Pitt (pitti) wrote :

I currently run systemd/udev from xenial-proposed, and when enabling tethering I now get enp0s29u3 as a device name, which is location based. Before, with 229-4ubuntu4 I got enxXXXXXXXX (MAC based).

tags: added: verification-done
removed: verification-needed
Launchpad Janitor (janitor) wrote :

This bug was fixed in the package systemd - 229-4ubuntu5

---------------
systemd (229-4ubuntu5) xenial-proposed; urgency=medium

  * debian/udev.postinst: Don't fail if /var/log/udev is a directory.
    (LP: #1574004)
  * Set MAC based name for USB network interfaces only for universally
    administered (i. e. stable) MACs, not for locally administered (i. e.
    randomly generated) ones. Drop /lib/systemd/network/90-mac-for-usb.link
    (as link files don't currently support globs for MACAddress=) and replace
    with an udev rule in /lib/udev/rules.d/73-special-net-names.rules.
    (Closes: #812575, LP: #1574483)
  * debian/extra/init-functions.d/40-systemd: Invoke status command with
    --no-pager, to avoid blocking scripts that call an init.d script with
    "status" with an unexpected pager process. (Closes: #765175, LP: #1576409)
  * Add debian/extra/rules/70-debian-uaccess.rules: Make FIDO U2F dongles
    accessible to the user session. This avoids having to install libu2f-host0
    (which isn't discoverable at all) to make those devices work.
    (LP: #1387908)
  * On shutdown, unmount /tmp before disabling swap. (Closes: #788303)

 -- Martin Pitt <email address hidden> Mon, 02 May 2016 15:04:42 -0500

Changed in systemd (Ubuntu Xenial):
status: Fix Committed → Fix Released

The verification of the Stable Release Update for systemd has completed successfully and the package has now been released to -updates. Subsequently, the Ubuntu Stable Release Updates Team is being unsubscribed and will not receive messages about this bug report. In the event that you encounter a regression using the package from -updates please report a new bug using ubuntu-bug and tag the bug report regression-update so we can easily find any regressions.

To post a comment you must log in.
This report contains Public information  Edit
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.