tunctl reclama que o dispositivo ou recurso está ocupado se usado no script / etc / qemu-ifup

3

Eu tenho um seguinte script /etc/qemu-ifup que é executado quando eu inicio /usr/bin/qemu-system-i386 binary:

#!/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

O problema é que tunctl reclama que o dispositivo ou recurso está ocupado:

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

Quando executo simplesmente o /usr/sbin/tunctl -u root -t tap0 , o tap0 é criado sem problemas:

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

Alguma idéia do que causa tal comportamento?

    
por Martin 09.03.2015 / 15:11

2 respostas

2

(eu não sei de quando), O qemu criará o primeiro toque e depois chamará seu script /etc/qemu-ifup . Então você vê o relatório de erro, só porque o mesmo toque já existe.

Referência: qemu source: net/tap-linux.c (verifique a função: tap_open() ).

    
por 30.03.2015 / 04:54
0

A mensagem de erro "Error: either "dev" is duplicate, or "sleep" is a garbage" informa a causa do seu problema.

Deve usar o seguinte comando para abrir a interface de toque:

/sbin/ip link set $1 up
    
por 13.08.2016 / 16:25

Tags