On 28 Nov 2009, Ian Woodstock verbalised:
On Sat, Nov 28, 2009 at 5:06 PM, Nix <nix(a)esperi.org.uk>
wrote:
> (hm, the state UNKNOWN is sort of bizarre. It's up...)
It's unknown because you're using the dummy device (which will just
send all bits to a deep dark hole) and we can't do things like check
the status of the interface/link etc.
I just tried that by removing everything from the bridge. Still state
UNKNOWN.
I suspect that's why libvirt won't let you connect to it,
since
libvirt is looking for a "shared physical device" and there's not a
device in the bridge.
Gah. So libvirt won't let me connect a bunch of devices to a bridge
without that bridge being bridged to something already? So you
can't have a pile of bridges with VMs on them *routed* to the rest of
the net?
> It appears in the GUI, all right: as 'host device linux-net
(not bridged)',
> greyed out and unselectable. Calling a bridge 'not bridged' is more than
> slightly bizarre.
Actually I think this is correct. It's not bridged to a physical
device, it's plumbed to nothing.
I don't want it bridged to a physical device. Why should libvirt require
any such thing? It's not necessary to get packets out of it: all you
need for *that* is a routing table entry. (The bridge has an IP address
on the host and everything.)
> There's no iptables at all on this particular box (at least
not yet,
> although it may turn up later on when I put Windows guests on here: I'm
> not having *them* running around free).
>
So it sounds like the root of your issue now is that you're using
dummy network device.
Is that being done temporarily now because you don't have a network
plumbed in or is there some other use case?
It was an emergency hack when I found virt-manager not noticing bridges
that had nothing on them (it said 'not bridged'). I stuck the dummy
device on it and it started working. However, this appears to have
been transient.
... In the code, the only place where it checks if a bridge exists
is in src/network/bridge_driver.c:networkFindActiveConfigs(), and
it only bothers to check *that* if there's a config file in the
NETWORK_STATE_DIR (/var/lib/libvirt/network):
,----
| for (i = 0 ; i < driver->networks.count ; i++) {
| virNetworkObjPtr obj = driver->networks.objs[i];
| virNetworkDefPtr tmp;
| char *config;
|
| virNetworkObjLock(obj);
|
| if ((config = virNetworkConfigFile(NULL,
| NETWORK_STATE_DIR,
| obj->def->name)) == NULL) {
| virNetworkObjUnlock(obj);
| continue;
| }
|
| if (access(config, R_OK) < 0) {
| VIR_FREE(config);
| virNetworkObjUnlock(obj);
| continue;
| }
|
| /* Try and load the live config */
| tmp = virNetworkDefParseFile(NULL, config);
| VIR_FREE(config);
| if (tmp) {
| obj->newDef = obj->def;
| obj->def = tmp;
| }
|
| /* If bridge exists, then mark it active */
| if (obj->def->bridge &&
| brHasBridge(driver->brctl, obj->def->bridge) == 0) {
| obj->active = 1;
`----
So, no, I don't see how this can possibly work without a config file,
and you only get a config file by creating the bridge through libvirt.
I wonder if any of the Dans can tell us what's going on? (It's not
surprising I can't figure it out. My first name is wrong. ;) )