- cfg = {}
- rx = re.compile('([-._@$:+a-zA-Z0-9]+)(?:[ \t\r\n\v]*)=(?:[ \t\r\n\v]*)(.*)$')
- for line in f:
- line = line.strip()
- if len(line) == 0 or line[0] == '#':
- continue
-
- match = rx.match(line)
- if match == None:
- continue
-
- key, value = match.groups()
- if key not in cfg:
- cfg[key] = []
- cfg[key].append(value)
- return cfg
-
-# Returns a set of the immediate subsections of 'section' within 'cfg'. For
-# example, if 'section' is "bridge" and keys bridge.a, bridge.b, bridge.b.c,
-# and bridge.c.x.y.z exist, returns set(['a', 'b', 'c']).
-def cfg_get_subsections(cfg, section):
- subsections = set()
- for key in cfg:
- if key.startswith(section + "."):
- dot = key.find(".", len(section) + 1)
- if dot == -1:
- dot = len(key)
- subsections.add(key[len(section) + 1:dot])
- return subsections
-
-# Returns True if 'cfg' contains a key whose single value is 'true'. Otherwise
-# returns False.
-def cfg_get_bool(cfg, name):
- return name in cfg and cfg[name] == ['true']
-
-# If 'cfg' has a port named 'port' configured with an implicit VLAN, returns
-# that VLAN number. Otherwise, returns 0.
-def get_port_vlan(cfg, port):
- try:
- return int(cfg["vlan.%s.tag" % port][0])
- except (ValueError, KeyError):
- return 0
-
-# Returns all the ports within 'bridge' in 'cfg'. If 'vlan' is nonnegative,
-# the ports returned are only those configured with implicit VLAN 'vlan'.
-def get_bridge_ports(cfg, bridge, vlan):
- ports = []
- for port in cfg["bridge.%s.port" % bridge]:
- if vlan < 0 or get_port_vlan(cfg, port) == vlan:
- ports.append(port)
- return ports
-
-# Returns all the interfaces within 'bridge' in 'cfg'. If 'vlan' is
-# nonnegative, the interfaces returned are only those whose ports are
-# configured with implicit VLAN 'vlan'.
-def get_bridge_ifaces(cfg, bridge, vlan):
- ifaces = []
- for port in get_bridge_ports(cfg, bridge, vlan):
- ifaces.extend(cfg.get("bonding.%s.slave" % port, [port]))
- return ifaces
+# Returns a list of all the bridges
+def get_bridges():
+ return call_vsctl('list-br')
+
+# Returns a list of all ports on 'bridge'
+def get_bridge_ports(bridge):
+ return call_vsctl('list-ports', bridge)
+
+# Returns a list of all interfaces on 'bridge'
+def get_bridge_ifaces(bridge):
+ return call_vsctl('list-ifaces', bridge)
+
+# Returns the parent of 'bridge'. If 'bridge' does not have a parent,
+# 'bridge' is returned.
+def get_bridge_parent(bridge):
+ return call_vsctl('br-to-parent', bridge)