[virt-tools-list] Creating a virtual NAT network

Cole Robinson crobinso at redhat.com
Fri Jan 16 18:31:35 UTC 2015


On 01/16/2015 01:26 PM, Charles Arnold wrote:
> We have run across the following problem when creating a Virtual Network.
> On step 4 of 4 select 'Forwarding to physical network' and select the
> 'Destination' pop-down list.  Notice that it includes the libvirt
> internal node device names for the networks on the system.  They are
> typically named 'net_<interface name>_<mac addr>'.  When selecting
> these devices, virt-manager generates XML that uses the nodedev name
> as shown in the following example,
> 
> <network>
>   <name>kvmnet1-natwlan</name>
>   <uuid>1388906a-b513-462c-9cea-0fc415276762</uuid>
>   <forward mode="nat" dev="net_wlp16s0_00_1f_3b_59_61_3d"/>
>   <domain name="kvmnet1natwlan"/>
>   <ip address="192.168.100.1" netmask="255.255.255.0">
>     <dhcp>
>       <range start="192.168.100.128" end="192.168.100.254"/>
>     </dhcp>
>   </ip>
> </network>
> 
> Notice the syntax <forward mode="nat" dev="net_wlp16s0_00_1f_3b_59_61_3d"/>
> The dev used here isn't really a device but rather the name of the libvirt nodedev.
> When passed to libvirt it will give an error something like,
> 
> libvirtError: internal error: Failed to apply firewall rules /usr/sbin/iptables --table filter --insert FORWARD --source 192.168.100.0/24 --in-interface virbr0 --out-interface net_wlp16s0_00_1f_3b_59_61_3d --jump ACCEPT: iptables v1.4.21: interface name `net_wlp16s0_00_1f_3b_59_61_3d' must be shorter than IFNAMSIZ (15)
> Try `iptables -h' or 'iptables --help' for more information.
> 
> My question is shouldn't the 'Destination' list only show real interfaces and not the libvirt nodedev names?
> Assuming this is correct, a fix with a change like this would do it,
> 
> diff --git a/virtManager/createnet.py b/virtManager/createnet.py
> index 6c0634c..18cadf1 100644
> --- a/virtManager/createnet.py
> +++ b/virtManager/createnet.py
> @@ -174,7 +174,7 @@ class vmmCreateNetwork(vmmGObjectUI):
>  
>          devnames = []
>          for nodedev in self.conn.get_nodedevs("net"):
> -            devnames.append(nodedev.name)
> +            devnames.append(nodedev.interface)
>          for iface in self.conn.list_interfaces():
>              if iface.get_name() not in devnames:
>                  devnames.append(iface.get_name())
> 

Indeed, this is a regression introduced when I dropped the netdev abstraction
we used to use here. I've pushed your patch now.

commit 65f7017eaf775af4c817b16d525256cd25aef160
Author: Charles Arnold <carnold at suse.com>
Date:   Fri Jan 16 13:29:09 2015 -0500

    createnet: Fix creating network with forward device

Thanks,
Cole





More information about the virt-tools-list mailing list