[systemd-devel] Proposal: Add biosdevname naming scheme to systemd

Jordan Hargrave jharg93 at gmail.com
Thu Feb 4 11:24:15 PST 2016


On Tue, Oct 20, 2015 at 10:04 PM, Jordan Hargrave <jharg93 at gmail.com> wrote:

> On Tue, Oct 20, 2015 at 3:02 PM, Andrei Borzenkov <arvidjaar at gmail.com>
> wrote:
> > 20.10.2015 17:30, Jordan Hargrave пишет:
> >
> >> On Tue, Oct 20, 2015 at 1:15 AM, Andrei Borzenkov <arvidjaar at gmail.com>
> >> wrote:
> >>>
> >>> On Tue, Oct 20, 2015 at 7:46 AM, Jordan Hargrave <jharg93 at gmail.com>
> >>> wrote:
> >>>>
> >>>> On Mon, Mar 2, 2015 at 1:17 PM, Tom Gundersen <teg at jklm.no> wrote:
> >>>>>
> >>>>> Hi Jordan,
> >>>>>
> >>>>> On Mon, Mar 2, 2015 at 4:45 PM, Jordan Hargrave <jharg93 at gmail.com>
> >>>>> wrote:
> >>>>>>
> >>>>>> There are currently two competing naming mechanisms for network
> cards,
> >>>>>> biosdevname and systemd.  Systemd currently has some limitations on
> >>>>>> naming
> >>>>>> cards that use network partitioning or support SR-IOV.
> >>>>>
> >>>>>
> >>>>> Could you point to an example so we can fix it? I thought all bug
> >>>>> reports had been handled, but maybe I lost track of something.
> >>>>>
> >>>>
> >>>> I have a quad-port NIC:
> >>>> 0000:40:00.0 = PCIE bridge (SMBIOS Slot 2)
> >>>> 0000:41:00.0 = Ethernet Device (port1)
> >>>> 0000:41:00.1 = Ethernet Device (port2)
> >>>> 0000:42:00.0 = Ethernet Device (port3)
> >>>> 0000:42:00.1 = Ethernet Device (port4)
> >>>>
> >>>> biosdevname would name these p2p1, p2p2, p2p3, p2p4 respectively.
> >>>>
> >>>
> >>> How does it determine that 41 and 42 are the same device? I.e. how
> >>> does it differ from real bridge with two independent two-port cards
> >>> behind? Could you explain what information it is using? Is it exported
> >>> in sysfs?
> >>>
> >>> ...
> >>
> >>
> >> It knows they are on the same slot as the parent device has SMBIOS
> >> Slot#2 (Type 9).  So all child devices of a physical slot are on the
> >> same card.  I'm currently using a patch to systemd that reads SMBIOS
> >> type 9.  There isn't a kernel sysfs variable that displays this.
> >>
> >
> > This gives us slot ID, but how do we know which of function 0 on this
> slot
> > ID is port 0 and which is port 2? There is nothing in SMBIOS description
> of
> > Type 9 that answers it.
>
> Looking for a resolution for this.. adding port numbers to systemd
enumeration of devices in PCI slots.

Systemd still doesn't have the concept of a 'Port' number, so multi-port
NICs get named with enp<BUS>s<DEV>f<FUNC> instead of ens<SLOT>p<PORT>.

There needs to be a way to generate systemd names that have the following
variables for add-in cards:
  Slot Number
  Port Number
  Instance Number (for SR-IOV or Network Partitioned devices)

It is possible to calculate the port number without any knowledge of
sibling devices.  Requires knowledge of device PCI ID, parent tree and
'dev_port' attribute (for mellanox cards). Then the devices could be named
ensSLOTpPORT

Network cards I've noticed have the following PCI bus topology:

dual port cards:
bus:00.0 = port 1
bus:00.1 = port 2

quad port cards have two different layouts:  top level bus (upstream port)
with two downstream ports, or all devices as multifunction

Broadcom cards seem to follow this style
bus:00.0 = port 1
bus:00.1 = port 2
bus:00.2 = port 3
bus:00.3 = port 4

Intel cards seem to follow this style
bus:00.0 = upstream port.  sbus is secondary bus
sbus:xx.y = bridge 1
sbus:xx.z = bridge 2
sbus+1:00.0 = port 1
sbus+1:00.1 = port 2
sbus+2:00.0 = port 3
sbus+2:00.1 = port 4

Walking up the /sys/bus/pci/devices heirarchy from the network 'device'
link until the 'acpi_index' field is found/  Then read sysfs 'label'
field.  On Dell systems this is the form "SLOT x" so the slot ID can be
determined.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/systemd-devel/attachments/20160204/00eb34c9/attachment.html>


More information about the systemd-devel mailing list