最近给客户调试 macvlan network时,遇到了Linux kernel
报错
SIOCSIFFKAGS: Device or resource busy.
无法创建网络device。
结果长时间的debug分析,
发现问题是高并发压测 创建和释放macvlan device
的时候,设备的mac address
出现了重复。
ps:这个问题只出现在 macvlan
network 的设备中。
可以用下面的shell脚本来复现macvlan Device or resource busy
的错误:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| #!/bin/bash
function setup
{
i=$1
ip l a m$i address 00:40:2F:4D:5E:6F link eth0 type macvlan mode bridge
ip netns add ns$i
ip l set m$i netns ns$i
sleep 1
ip netns exec ns$i ifconfig m$i 10.0.0.$((i+1))/24 up
echo $?
}
echo cleaning up
ip -all netns d
echo creating netsnses
for i in `seq $1`; do
echo $i....
#setup $i &
setup $i
done
|
如果把 macvlan 类型改为 dummy (上面脚本第5行 type macvlan 改为 type dummy
) ,即使 MAC address 重复也不会引发kernel 报错。