[libvirt] Network not Persistent

Laine Stump laine at laine.org
Tue Feb 21 15:59:05 UTC 2012

On 02/21/2012 07:33 AM, Shradha Shah wrote:
> On 02/20/2012 06:43 PM, Laine Stump wrote:
>> On 02/20/2012 12:37 PM, Shradha Shah wrote:
>>> Hello All,
>>> I am currently working on patches for PCI-passthrough of SRIOV VF's and I am facing an issue with the network definition not being persistent.
>>> I am using a new forward mode = hostdev and the network xml is as follows:
>>> <network>
>>>   <name>pci-passthrough-network</name>
>>>   <uuid>81ff0d90-c91e-6742-64da-4a736edb9a8f</uuid>
>>>   <forward mode="hostdev">
>>>     <pf dev="eth2"/>
>>>   </forward>
>>> </network>
>>> Command line used is:
>>> # virsh net-define pci_passthrough_network.xml
>>> The network is defined successfully and I can use it at this point.
>>> But if I restart libvirt after defining the above network, I lose the network definition.
>>> After restart libvirt does not possess any knowledge of the above network.
>>> This does not happen when I use forward mode="bridge".
>>> I have cross referenced the function call path of networkDefine for both the forwarding modes and I can't seem to find the problem.
>>> Is there some function I am missing?
>> You need to add some logic to networkFindActiveConfigs() to determine if
>> the network is active.
> I am not sure if I am missing something but, networkFindActiveConfigs() is called by networkStartup() only.

Right. And that is called every time libvirtd is restarted. I had read
your post too quickly and assumed the problem was that the new network
was no longer marked active after restarting libvirtd, in which case
this is where you would want to look. But I see from you virsh net-list
output that the real problem is that the network is no longer *defined*
after a restart.

> Currently I am not starting any networks but just defining them and then restarting libvirtd, at which point the pci-passthrough-network dissapears.
> The commands I am using are as follows:
> # virsh net-define pci_passthrough_network.xml
> Network pci-passthrough-network defined from pci_passthrough_network.xml
> # virsh net-define macvtap_bridge_network.xml
> Network macvtap-bridge-network defined from macvtap_bridge_network.xml
> # virsh net-list -all
> Name                          State      Autostart
> --------------------------------------------------
> macvtap-bridge-network       inactive      no        
> pci-passthrough-network      inactive      no
> # service libvirtd restart
> Stopping libvirtd daemon:                                  [  OK  ]
> Starting libvirtd daemon:                                  [  OK  ]
> #  virsh net-list -all
> Name                          State      Autostart
> --------------------------------------------------
> macvtap-bridge-network       inactive      no     

Before you restart libvirtd, is the xml file in place in
/etc/libvirt/qemu/networks/pci-passthrough-network.xml? And is that file
still there after libvirtd restarts? If the file is still there but the
definition doesn't show up in net-list --all, perhaps there is something
in the xml file that is failing the parse - any log messages in libvirtd?

Also, does it behave differently if you start the network before
restarting libvirtd?

Beyond this, it's really not possible to help much more without seeing
the code you're working with.

> I think its got to do something with the persistent flag of the network object, but I am not sure.

Well, the persistent flag is set unconditionally by networkDefine for
all types of networks.

More information about the libvir-list mailing list