[libvirt] virDomainNetGetActualBridgeName doesn't return the actual bridge

Laine Stump laine at laine.org
Tue Jan 31 17:06:53 UTC 2012


On 01/31/2012 11:55 AM, Laine Stump wrote:
> On 01/30/2012 08:15 AM, Hendrik Schwartke wrote:
>> Hi,
>>
>> calling virDomainNetGetActualBridgeName on a bridge with type 
>> VIR_DOMAIN_NET_TYPE_NETWORK seems to return NULL in any case, because 
>> iface->data.network.actual is NULL. Is that intented?
>
> Yes, that's how it was intended to work. It has a very narrow purpose, 
> only to be used for interfaces that end up being connected to host 
> bridges not managed by libvirt (i.e., either the interface type is 
> VIR_DOMAIN_NET_TYPE_BRIDGE, or the type is NETWORK, and the network 
> has <forward mode='bridge'>). It's an internal API, so that purpose 
> could change, but I would need to look and see if that would have any 
> adverse side effect.
>
>>
>> What is the best way to determine the bridge the interface is 
>> connected to?
>
> I'm guessing you're writing the packet sniffing code you asked about 
> the other day. Do you really want the bridge device that the guest is 
> connecting to?

Heh. I just made the connection that you were also doing a patch to 
hot-switch the bridge that a guest is connected to, so you actually *do* 
want the bridge (as well as the tap device). In that case, the 2nd part 
of my earlier response applies.




> I think the device you actually want to watch is the tap device that 
> connects the guest to the bridge. That is in net->ifname ("net" being 
> the virDomainNetDef containing the configuration for the interface); 
> qemu uses that value directly when setting up the guests' interfaces.
>
> If you really do need to get the device that the guest tap is 
> connected to (which might be a bridge, or might be a physical 
> ethernet, or might be ???), where that is depends on the type of 
> interface:
>
> 1) for interface "actualType"=VIR_DOMAIN_NET_TYPE_NETWORK, currently 
> you would need to call the public API virNetworkGetBridgeName (that 
> requires you to first call virNetworkLookupByName).
>
> 2) for interface actualType=VIR_DOMAIN_NET_TYPE_DIRECT you would want 
> to call virDomainNetGetActualDirectDev() - this gives you a physical 
> interface which the guest connects to in one of the mavctap modes.
>
> 3) for interface actualType=VIR_DOMAIN_NET_TYPE_BRIDGE you would call 
> virDomainNetGetActualBridgeName().
>
> Note that in all cases, I'm talking about using the result of 
> virDomainNetGetActualType(net), *not* just looking at net->type. (the 
> latter is what's in the config, the former is what is figured out at 
> runtime based on the config).
>
> (Still, I'm guessing what you really want is just net->ifname).
>
> -- 
> libvir-list mailing list
> libvir-list at redhat.com
> https://www.redhat.com/mailman/listinfo/libvir-list
>




More information about the libvir-list mailing list