Linuxのネットワークインターフェース名って何を基準に決めてるのかを確認してみる

そういえば何を基準にインターフェース名を決めてんだっけ?というのを確認してみる。名前をつけているのはudevというか今ならsystemdですかね。とにかくそのルールが知りたかったのです。

うちのデスクトップのイーサネットカードだとこんな感じのインターフェース名になっている。

masami@saga:~$ ip addr
2: enp101s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000

そこでググってみるとArch LinuxのMLからudev-builtin-net_id.cというものに辿り着く。 これがインターフェース名を決めているコードっぽいけど、コメントにルールが書かれているのでそちらを見てみると以下のような記述が。

 * 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>                              -- on-board device index number
 *   s<slot>[f<function>][d<dev_id>]       -- hotplug slot index number
 *   x<MAC>                                -- MAC address
 *   [P<domain>]p<bus>s<slot>[f<function>][d<dev_id>]
 *                                         -- PCI geographical location
 *   [P<domain>]p<bus>s<slot>[f<function>][u<port>][..][c<config>][i<interface>]
 *                                         -- USB port number chain

まず、最初の2文字はインターフェースの種類で、enp101s0はイーサネットカードなのでenから始まっているというのが分かる。 次のpはbusのことらしいのでlspciでPCIの情報を確認。

65:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 06)

これの65:00:0がbus:slot:funcとなっていて、busの65は16進数なので10進数に戻すと101ということでp101、次のslotは0なのでs0。 そして、これらの結果からインターフェース名がenp101s0となることが分かった。

lspciしないとわからないけど確かにpredictableではありますね。