理解网卡命名规则

理解网卡命名规则

命令的规则

  1. 如果固件或BIOS中的信息适用且可用,则使用包含固件或BIOS提供的板载设备(on-board devices)索引号的名称;(例如: eno1)
  2. 如果固件或BIOS中的信息适用且可用,则使用包含固件或BIOS提供的名称的PCI Express热插拔插槽索引号(slot index numbers);(例如:ens1)
    biosdevname=1
  3. 包括硬件连接器物理位置的名称(例如:enp2s0),如果适用,则使用其他名称;
    net.ifnames=1
  4. 如果上面的方法均失败,则使用传统的不可预测的内核命名方案(例如:eth0)
enp0s10:
| | |
v | |
en| |   --> ethernet
  v |
  p0|   --> bus number (0)
    v
    s10 --> slot number (10)

代码分析rename过程

src/udev/udevd.c 代码中 int main(int argc, char *argv[])

1492 if (!udev_list_node_is_empty(&event_list) && !udev_exit && !stop_exec_queue) {
1493     udev_builtin_init(udev);
1494     if (rules == NULL)
1495     rules = udev_rules_new(udev, arg_resolve_names);
1496     if (rules != NULL)
1497         event_queue_start(udev);
1498 }

流程

udev_builtin_init
     --> builtin_net_id
        --> names_pci
            --> dev_pci_onboard(dev, names);
            -->  dev_pci_slot(dev, names);

dev_pci_slot

 299                 if (get_proc_cmdline_key("net.ifnames", NULL) > 0)
 300                         do_virtio = 1;
 301                 else if (get_proc_cmdline_key("net.ifnames=", &value) > 0) {
 302                         safe_atoi(value, &n);
 303                         if (n > 0)
 304                                 do_virtio = 1;
 305                 }
..........
 502         /* handle only ARPHRD_ETHER and ARPHRD_SLIP devices */
 503         s = udev_device_get_sysattr_value(dev, "type");
 504         if (!s)
 505                 return EXIT_FAILURE;
 506         i = strtoul(s, NULL, 0);
 507         switch (i) {
 508         case ARPHRD_ETHER:
 509                 prefix = "en";
 510                 break;
 511         case ARPHRD_SLIP:
 512                 prefix = "sl";
 513                 break;
 514         default:
 515                 return 0;
 516         }
.......
 223         /* compose a name based on the raw kernel's PCI bus, slot numbers */
 224         s = names->pci_path;
 225         l = sizeof(names->pci_path);
 226         if (domain > 0)
 227                 l = strpcpyf(&s, l, "P%u", domain);
 228         l = strpcpyf(&s, l, "p%us%u", bus, slot);
 229         if (func > 0 || is_pci_multifunction(names->pcidev))
 230                 l = strpcpyf(&s, l, "f%d", func);
 231         if (dev_id > 0)
 232                 l = strpcpyf(&s, l, "d%d", dev_id);
 233         if (l == 0)
 234                 names->pci_path[0] = '\0';
.......
 273         if (hotplug_slot > 0) {
 274                 s = names->pci_slot;
 275                 l = sizeof(names->pci_slot);
 276                 if (domain > 0)
 277                         l = strpcpyf(&s, l, "P%d", domain);
 278                 l = strpcpyf(&s, l, "s%d", hotplug_slot);
 279                 if (func > 0 || is_pci_multifunction(names->pcidev))
 280                         l = strpcpyf(&s, l, "f%d", func);
 281                 if (dev_id > 0)
 282                         l = strpcpyf(&s, l, "d%d", dev_id);
 283                 if (l == 0)
 284                         names->pci_slot[0] = '\0';
 285         }

cmdline 配置 biosdevname=0 net.ifnames=1

环境测试

Jan  6 06:39:35 localhost NetworkManager[733]: <info>  (ens3): DHCPv4 state changed unknown -> bound
Jan  6 06:39:35 localhost NetworkManager[733]: <info>  (ens3): device state change: ip-config -> ip-check (reason 'none') [70 80 0]                                                                               
Jan  6 06:39:35 localhost NetworkManager[733]: <info>  (ens3): device state change: ip-check -> secondaries (reason 'none') [80 90 0]                                                                             
Jan  6 06:39:35 localhost NetworkManager[733]: <info>  (ens3): device state change: secondaries -> activated (reason 'none') [90 100 0]                                                                           
Jan  6 06:39:35 localhost NetworkManager[733]: <info>  NetworkManager state is now CONNECTED_LOCAL
Jan  6 06:39:35 localhost dhclient[1058]: bound to 192.168.122.97 -- renewal in 1489 seconds.
Jan  6 06:39:35 localhost NetworkManager[733]: <info>  NetworkManager state is now CONNECTED_GLOBAL
Jan  6 06:39:35 localhost NetworkManager[733]: <info>  Policy set 'Wired connection 1' (ens3) as default for IPv4 routing and DNS.                                                                                
Jan  6 06:39:35 localhost NetworkManager[733]: <info>  (ens3): Activation: successful, device activated.

修改xml文件,经bus的号修改bus='0x00'->bus='0x03'

<interface type='bridge'>
   <mac address='52:54:00:89:61:3c'/>
   <source bridge='virbr0'/>
   <target dev='tap4'/>
   <model type='virtio'/>
   <alias name='net0'/>
   <address type='pci' domain='0x0000' bus='0x03' slot='0x03' function='0x0'/>
 </interface>
Jan  6 06:43:32 localhost NetworkManager[736]: <info>  (enp3s3): DHCPv4 state changed unknown -> bound
Jan  6 06:43:32 localhost NetworkManager[736]: <info>  (enp3s3): device state change: ip-config -> ip-check (reason 'none') [70 80 0]                                                                             
Jan  6 06:43:32 localhost NetworkManager[736]: <info>  (enp3s3): device state change: ip-check -> secondaries (reason 'none') [80 90 0]                                                                           
Jan  6 06:43:32 localhost dhclient[1060]: bound to 192.168.122.97 -- renewal in 1664 seconds.
Jan  6 06:43:32 localhost NetworkManager[736]: <info>  (enp3s3): device state change: secondaries -> activated (reason 'none') [90 100 0]  

网卡名字是 enp63s0f0---> enp61s0f0,可以推出pci的地址应该为 3f:00.0--> 3d:00.0

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇