Linux 机器上以太网和 Wi-Fi 接口的命名约定标准

Linux 机器上以太网和 Wi-Fi 接口的命名约定标准

是什么以太网和 Wi-Fi 接口的命名约定标准在 Linux 机器上?

我们正在开发一种工具,应该只显示Linux 机器的以太网和 Wi-Fi 接口及其当前状态。

例如,下面是我的 Linux (Ubuntu) 计算机上的网络接口(物理和虚拟)列表:

docker0, enp0s25, lo,wlp3s0

当我运行该工具时,我得到的结果如下:

enp0s25,wlp3s0

我们编写代码的逻辑是所有以太网接口始终以字母 开头e,Wi-Fi 接口始终以字母 开头w

逻辑对吗?如果没有,我们该如何解决这个问题?

答案1

网络接口可以任意命名,因此无论您做什么,都会遇到以下情况:(1)有一个“物理”网络接口的名称与您的模式不匹配,或(2)有一个“物理”网络接口与您的模式匹配。

最重要的是,如果我是你的工具的用户,那么你的工具不允许我做我想做的事情,因为我有一个“虚拟”的网络接口,尽管出于实际目的,它应该被视为“物理”在我的设置中,我会开始大声而有力地咒骂你的应用程序,并且永远不会再使用它。

物理和虚拟网络接口都共享一个通用的 API,这使得 Linux 非常灵活。请不要试图照顾你的用户,并将其从他或她身上夺走。您的用户会感谢您。

答案2

对于 systemd 来说可预测的接口名称,前缀可以在udev-builtin-net_id.c。它们是基于接口类型的两个字符的前缀:

  • en→ 以太网
  • ib无限带宽
  • sl→ 串行线 IP (
  • wl→ 无线局域网
  • ww→ 无线广域网

对于传统的命名方式和新的 systemd 命名方式的含义ethX,首字母e对于任何自动生成的接口名称都应该是以太网接口。所有 Wi-Fi 接口均应以w在这两种方案中,尽管并非所有接口都以w将是Wi-Fi。

如果此工具必须在任意环境中工作(而不仅仅是在您控制的内部环境中),请注意,用户可以使用任意名称重命名 Linux 系统上的接口,例如wan0, lan0, lan1dmz0这将打破有关首字母的任何假设。

答案3

命名约定是 LAN 接口命名为eth0, eth1, ... ,WLAN 接口命名为wlan0, wlan1, ...

您看到的是 systemd 引入的所谓“可预测名称”。在实践中,它们是不可预测的,甚至当硬件改变时它们也会改变,这正是它们应该避免的问题。

作为猜测,起始字母可能就足够了。某些接口,特别是 WLAN,有以下提示/sys/class/net/*/uevent

DEVTYPE=wlan

DEVTYPE不幸的是, LAN 接口没有这样的接口。

答案4

您是否明确排除绑定或组合接口?我们这里的默认设置是使用bond0team0作为我们服务器的主要接口。

我觉得你需要重新思考一下你的逻辑。也许尝试迭代给定系统上所有定义的网络接口,将它们划分为以太网、wifi、infiband、串行等,然后发挥你的魔力。

相关内容