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(a)redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list