そういえば何を基準にインターフェース名を決めてんだっけ?というのを確認してみる。名前をつけているのは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ではありますね。