CentOS 7のネットワーク名「enp1s0」という文字列の謎に迫る

  • 18
    Like
  • 0
    Comment
More than 1 year has passed since last update.

CentOS 7をインストールして謎だったことの一つとして、ネットワーク名が今までの「eth0」みたいなやつから、「enp1s0」みたいな謎の文字列に変わった事がある。

気になったので調べてみた。

ネットワーク名は新しい命名規則に沿って自動的に作られる

調べていると、以下のブログに丁寧に説明が書いてあった。

Predictable Network Interface Names

ざっくり訳すと以下の通り

v197のsystemd/udevでは自動的に安定的なネットワークインターフェース名を割り当てる。
ローカルエリアネットワークに限らず、WLANやWWANに対しても割り当てる。
伝統的な ("eth0", "eth1", "wlan0", ...)といった命名規則はもうしない。

新しい命名規則では以下の嬉しい事がある。

  • OSが再起動してもインターフェース名が変わらない
  • ハードウェアを追加したり外したりしてもインターフェース名が変わらない
  • カーネルやドライバをアップデートしても変わらない
  • NICが壊れて取り変えてもインターフェース名は変わらない
  • インターフェース名は自動的に付けられてそのまま動く
  • インターフェース名は命名規則に沿っているので完全に予測できる
  • などなど

では「enp1s0」は何を意味するのか?

これはsystemdの中にネットワーク名を命名するソースコードがあり、そこを見ればわかる。
ソースコードはココ

この中に以下のコメントがある

 * 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

これに従うと、「enp1s0」は以下の意味であるとよみとれる。

  • 「en」は「イーサーネット」
  • 「p1」は「1番目のバス」
  • 「s0」は「0番目のスロット」

なーるほど。

そもそも、切れ目すら知らずに「enp」ってなんだろうって思ってたよw

すっきり!