需求:设备有6个千电口,2个万兆光口。 需要按类型和接口顺序排列后为它们分配网卡名称(请注意不是mac顺序,而是busid号)。
例如:
00-10-f3-ff-ff-80-d1-35 --eth0
00-10-f3-ff-ff-80-d1-36 --eth1
00-10-f3-ff-ff-80-d1-37 --eth2
00-10-f3-ff-ff-80-d1-38 --eth3
00-10-f3-ff-ff-80-d1-39 --eth4
00-10-f3-ff-ff-80-d1-3a --eth5
00-10-f3-ff-ff-77-2b-97 --fb10
00-10-f3-ff-ff-77-2b-97 --fb11
linux版本:centos6.2 32位
起初我是想通过python3的 psutil 模块 可以获得mac地址,然后将mac地址转换成十进制进行排序后对 /etc/udev/rules.d/70-persistent-net.rules 文件修改来实现。也考虑过mac地址不能代表io顺序的问题,最后发现linux命令lspci可以获取对应关系从而放弃这个思路。
#-*-coding:utf8-*-
macs=[]
interface={}
from psutil import net_if_addrs
for k, v in net_if_addrs().items():
for item in v:
address = item[1]
if ":" in address and len(address) == 17:
idkey = address.replace(‘:‘, ‘‘)
interface.update({address:(int(address.replace(‘:‘, ‘‘), 16))})
elif "-" in address and len(address) == 17:
idkey = address.replace(‘-‘, ‘‘)
interface.update({address:(int(address.replace(‘-‘, ‘‘), 16))})
for k in sorted(interface,key=interface.__getitem__):
print(k,interface[k])
lspci -D -n -v |egrep "0200|Device Serial Number"
这里是两个过滤条件,0200代表网卡,包含Device Serial Number行会显示mac地址 。
我的想法是通过busid顺序修改 “/etc/udev/rules.d/70-persistent-net.rules”文件的命名顺序
[root@new-b3 ~]# lspci -D -n -v |egrep "0200|Number"
0000:02:00.0 0200: 8086:150c
Capabilities: [140] Device Serial Number 00-10-f3-ff-ff-80-d1-35
0000:03:00.0 0200: 8086:150c
Capabilities: [140] Device Serial Number 00-10-f3-ff-ff-80-d1-36
0000:04:00.0 0200: 8086:150c
Capabilities: [140] Device Serial Number 00-10-f3-ff-ff-80-d1-37
0000:05:00.0 0200: 8086:150c
Capabilities: [140] Device Serial Number 00-10-f3-ff-ff-80-d1-38
0000:06:00.0 0200: 8086:150c
Capabilities: [140] Device Serial Number 00-10-f3-ff-ff-80-d1-39
0000:07:00.0 0200: 8086:150c
Capabilities: [140] Device Serial Number 00-10-f3-ff-ff-80-d1-3a
0000:09:00.0 0200: 8086:10fb (rev 01)
Capabilities: [140] Device Serial Number 00-10-f3-ff-ff-77-2b-97
0000:09:00.1 0200: 8086:10fb (rev 01)
Capabilities: [140] Device Serial Number 00-10-f3-ff-ff-77-2b-97
原文:https://www.cnblogs.com/bcode/p/10595521.html