Prediction de nom des interfaces reseau de systemd
Rédigé par Paulo
Aucun commentaire
Extrait du fichier src/udev/udev-builtin_id.c |
/* * Predictable network interface device names based on: * - firmware/bios-provided index numbers for on-board devices * - firmware-provided pci-express hotplug slot index number * - physical/geographical location of the hardware * - the interface's MAC address * * http://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames * * Two character prefixes based on the type of interface: * en -- ethernet * sl -- serial line IP (slip) * wl -- wlan * ww -- wwan * * Type of names: * b<number> -- BCMA bus core number * ccw<name> -- CCW bus group name * o<index>[d<dev_port>] -- on-board device index number * s<slot>[f<function>][d<dev_port>] -- hotplug slot index number * x<MAC> -- MAC address * [P<domain>]p<bus>s<slot>[f<function>][d<dev_port>] * -- PCI geographical location * [P<domain>]p<bus>s<slot>[f<function>][u<port>][..][c<config>][i<interface>] * -- USB port number chain En Résumé :
|
un extrait de la base udev montre qu'une interface possede plusieurs noms commande : udevadm info -e |
# lst='ID_NET_NAME_MAC ID_NET_NAME_PATH ID_NET_NAME_SLOT' # for i in $lst;do echo $i;udevadm info -e|grep $i;echo;done ID_NET_NAME_MAC E: ID_NET_NAME_MAC=enx98be9410e830 E: ID_NET_NAME_MAC=enx98be9410e838 E: ID_NET_NAME_MAC=enx0a94ef0f7cbb E: ID_NET_NAME_MAC=enx0894ef0f7cb4 E: ID_NET_NAME_MAC=enx0894ef0f7cb5 E: ID_NET_NAME_MAC=enx0894ef0f7cb6 E: ID_NET_NAME_MAC=enx0894ef0f7cb7 ID_NET_NAME_PATH E: ID_NET_NAME_PATH=enp1s0f0 E: ID_NET_NAME_PATH=enp1s0f1 E: ID_NET_NAME_PATH=enp0s20u1u5 E: ID_NET_NAME_PATH=enp22s0f0 E: ID_NET_NAME_PATH=enp22s0f1 E: ID_NET_NAME_PATH=enp22s0f2 E: ID_NET_NAME_PATH=enp22s0f3 ID_NET_NAME_SLOT E: ID_NET_NAME_SLOT=ens3f0 E: ID_NET_NAME_SLOT=ens3f1 |
Choix du nom final : |
A partir du code udev : src/udev/net/link-config.c, on constate que la recherche de nom se fait séquentiellement :
La première correspondance trouvée donne le nom à l'interface.... if (ctx->enable_name_policy && config->name_policy) { NamePolicy *policy; for (policy = config->name_policy; !new_name && *policy != _NAMEPOLICY_INVALID; policy++) { switch (*policy) { case NAMEPOLICY_KERNEL: respect_predictable = true; break; case NAMEPOLICY_DATABASE: new_name = udev_device_get_property_value(device, "ID_NET_NAME_FROM_DATABASE"); break; case NAMEPOLICY_ONBOARD: new_name = udev_device_get_property_value(device, "ID_NET_NAME_ONBOARD"); break; case NAMEPOLICY_SLOT: new_name = udev_device_get_property_value(device, "ID_NET_NAME_SLOT"); break; case NAMEPOLICY_PATH: new_name = udev_device_get_property_value(device, "ID_NET_NAME_PATH"); break; case NAMEPOLICY_MAC: new_name = udev_device_get_property_value(device, "ID_NET_NAME_MAC"); break; default: break; } } }
On peut donc intervenir au niveau des règles afin de selectionner le type de nommage désiré. #copie d'un fichier de règle cp /usr/lib/udev/rules.d/80-net-name-slot.rules /etc/udev/rules.d/ #adaptation des noms d'interface souhaitée sed -i '/ID_NET_NAME_ONBOARD/s/^/#/' /etc/udev/rules.d/80-net-name-slot.rules sed -i '/ID_NET_NAME_SLOT/s/^/#/' /etc/udev/rules.d/80-net-name-slot.rules
|
Extrait doc RedHat sur la procédure d'affectations de noms des périphériques: ici |
|
En vrac |
udevadm info -e|grep -A 23 ^P.*ens3f0 P: /devices/pci0000:00/0000:00:01.0/0000:01:00.0/net/ens3f0 E: DEVPATH=/devices/pci0000:00/0000:00:01.0/0000:01:00.0/net/ens3f0 E: ID_BUS=pci E: ID_MODEL_FROM_DATABASE=OneConnect NIC (Skyhawk) E: ID_MODEL_ID=0x0720 E: ID_NET_DRIVER=be2net E: ID_NET_NAME_MAC=enx98be9410e830 E: ID_NET_NAME_PATH=enp1s0f0 E: ID_NET_NAME_SLOT=ens3f0 E: ID_OUI_FROM_DATABASE=IBM E: ID_PATH=pci-0000:01:00.0 E: ID_PATH_TAG=pci-0000_01_00_0 E: ID_PCI_CLASS_FROM_DATABASE=Network controller E: ID_PCI_SUBCLASS_FROM_DATABASE=Ethernet controller E: ID_VENDOR_FROM_DATABASE=Emulex Corporation E: ID_VENDOR_ID=0x10df E: IFINDEX=4 E: INTERFACE=ens3f0 E: SUBSYSTEM=net E: SYSTEMD_ALIAS=/sys/subsystem/net/devices/ens3f0 E: TAGS=:systemd: E: USEC_INITIALIZED=460971
|