On Tue, 2010-07-27 at 14:43 -0400, Laine Stump wrote:
This is a much simpler way of solving the problem, suggested by David Lutterkort.
Prior to defining a new interface, drv_define() would previously call rm_all_interfaces(), which would look for all nodes called "interface" at every level, and remove the config for any existing interface with the same name. This is necessary when defining a bridge or a bond (since those interfaces will now be slaves of the toplevel bridge/bond, and their config will be created anew along with the toplevel), but is the wrong thing to do for vlans - not only does the physical interface associated with a vlan have an existence of its own, multiple vlans can be associated with the same physical interface, and the act of defining a vlan *does not* re-create the physical interface config. The result of this was dismal failure when attempting to define a vlan interface - the associated physical interface would disappear.
The solution is to beef up the expression used when finding all interfaces inside the XML to exclude any whose parent is a "vlan" node.
ACK
David