2015-08-18 9 views
1

Как вы «запускаете» неактивную сеть, используя libvirt? С virsh это будет net-start <network>.Как «запустить» или «активировать» сеть с libvirt?

я могу создать сеть с virNetworkDefineXML, которые:

Определить неактивную постоянную виртуальную сеть или изменить существующую упорные один из описания XML.

(что эквивалентно virsh net-deifne), но я не знаю, как «запустить» эту недавно созданную неактивную сеть.

Я использую привязки libvirt-python, но знание правильного C API было бы достаточно.

ответ

0

API-интерфейс является virNetworkCreate():

Создайте определенную сеть. Если вызов преуспевает, сеть переходит из определенного в пулы запущенных сетей.


Чтобы найти это, мы можем смотреть на источник virsh. Команда "нетто-старт" определяется в tools/virsh-network.c:

static bool 
cmdNetworkStart(vshControl *ctl, const vshCmd *cmd) 
{ 
    virNetworkPtr network; 
    bool ret = true; 
    const char *name = NULL; 

    if (!(network = virshCommandOptNetwork(ctl, cmd, &name))) 
     return false; 

    if (virNetworkCreate(network) == 0) { 
     vshPrint(ctl, _("Network %s started\n"), name); 
    } else { 
     vshError(ctl, _("Failed to start network %s"), name); 
     ret = false; 
    } 
    virNetworkFree(network); 
    return ret; 
} 

В libvirt-python, это означает, просто вызвав .create() на объект сети вернулся из .networkDefineXML():

conn = libvirt.open('qemu:///system') 

# Define a new persistent, inactive network 
xml = open('net.xml', 'r').read() 
net = conn.networkDefineXML(xml) 

# Set it to auto-start 
net.setAutostart(True) 

# Start it! 
net.create()