Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3759472
  • 博文数量: 880
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 6155
  • 用 户 组: 普通用户
  • 注册时间: 2016-11-11 09:12
个人简介

To be a better coder

文章分类

全部博文(880)

文章存档

2022年(5)

2021年(60)

2020年(175)

2019年(207)

2018年(210)

2017年(142)

2016年(81)

分类: LINUX

2017-12-15 10:36:06

命名分为两块:

第一

总的方向是在系统识别到网卡时,即通过修改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

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

阅读(3703) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~