Linux网卡命名enp3s0说明

3880阅读 0评论2017-12-15 可怜的猪头
分类:LINUX

命名分为两块:

第一

总的方向是在系统识别到网卡时,即通过修改drvier的方法进行命名的修改。

内核发现一个网卡设备,调用网卡驱动的probe函数。

probe函数在做完一定的初始化之后,会调用内核接口register_netdev向内核注册一个新的net_device设备。

这个设备的名字,网卡驱动程序往往只决定其中一部分。
就像下面这种方式,网卡驱动提供一个“eth%d”这样的名称,然后调用内核接口register_netdev。
strcpy(netdev->name, "eth%d");
register_netdev(netdev);

register_netdev流程中,会根据系统中已有的接口情况,找出一个最小的还没有使用的数字编号,分给新注册的网卡。
比如,系统中当前有,eth0, eth2, eth3三块网卡。
那么新注册的网卡,名字就是eth1了。

第二

总的方向是通过udev进行命名个更换,该方法不仅仅可以修改网卡名称。

修改/etc/udev/rules.d/70-persistent-net.rules.

如下图第一和第二红框为同一地址,第三红框是你想命名的网卡名字。

 



用了很多年Linux的我在升级Ubuntu 16.04之后竟然发现我的以太网卡的名字竟然不是eth0,变成了enp3s0,每次想要修改什么配置,都要先ifconfig查一下网卡名,真是让我很郁闷!

去网上搜索一下才知道,这次的Ubuntu 16的更新幅度很大,当属systemd替换掉了initd来引导系统这个动作给用户带来的影响最大,
原来习惯service什么的来控制系统服务什么的,现在竟然被systemctl这个命令替换了(虽然service依旧可用)。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                             — BCMA bus core number
 *   c                             — CCW bus group name, without leading zeros [s390]
 *   o[d]                 — on-board device index number
 *   s[f][d]     — hotplug slot index number
 *   x                                — MAC address
 *   [P]ps[f][d]
 *                                         — PCI geographical location
 *   [P]ps[f][u][..][c][i]
 *                                         — USB port number chain */
复制代码

上面一段是systemd源码的注释,意思是:

  1. en代表以太网卡

  2. p3s0代表PCI接口的物理位置为(3, 0), 其中横座标代表bus,纵座标代表slot

更加详细的历史及优缺点可以参考

上一篇:linux OOM-killer机制(杀掉进程,释放内存)
下一篇:接口bus的含义