tunctl 抱怨如果在 /etc/qemu-ifup 脚本中使用设备或资源正忙

tunctl 抱怨如果在 /etc/qemu-ifup 脚本中使用设备或资源正忙

我有一个/etc/qemu-ifup在启动/usr/bin/qemu-system-i386二进制文件时执行的以下脚本:

#!/bin/sh

set -x

switch=br0

if [ -n "$1" ];then
        /usr/sbin/tunctl -u `whoami` -t $1
        /sbin/ip link set dev $1 up
        sleep 0.5s
        /sbin/brctl addif $switch $1
        exit 0
else
        echo "Error: no interface specified"
        exit 1
fi

问题是,tunctl抱怨设备或资源正忙:

root@VM-host:~# qemu -hda /root/1.raw -device e1000,netdev=net0,mac=DE:AD:BE:EF:69:01 -netdev tap,id=net0 -display vnc=:1
+ switch=br0
+ [ -n tap0 ]
+ whoami
+ /usr/sbin/tunctl -u root -t tap0
TUNSETIFF: Device or resource busy
+ /sbin/ip link set dev tap0 up sleep 0.5s
Error: either "dev" is duplicate, or "sleep" is a garbage.
+ /sbin/brctl addif br0 tap0
+ exit 0

当我简单地执行/usr/sbin/tunctl -u root -t tap0, thentap0就被创建了,没有任何问题:

root@VM-host:~# /usr/sbin/tunctl -u root -t tap0
Set 'tap0' persistent and owned by uid 0
root@VM-host:~# 

有什么想法导致这种行为吗?

答案1

(我不知道从什么时候开始),qemu将首先创建tap,然后调用你的/etc/qemu-ifup脚本。所以您会看到错误报告,只是因为相同的水龙头已经存在。

参考:qemu源码:(net/tap-linux.c查看函数:)tap_open()

答案2

错误消息"Error: either "dev" is duplicate, or "sleep" is a garbage"告诉您问题的原因。

应使用以下命令调出 Tap 界面:

/sbin/ip link set $1 up

相关内容