def _set_network_bridge(self, params): params['forward'] = {'mode': 'bridge'} # Bridges cannot be the trunk device of a VLAN iface = params['interfaces'][0] if 'vlan_id' in params and netinfo.is_bridge(iface): raise InvalidParameter('KCHNET0019E', {'name': iface}) # User specified bridge interface, simply use it self._ensure_iface_up(iface) params['ovs'] = False if netinfo.is_bridge(iface): params['bridge'] = iface if netinfo.is_ovs_bridge(iface): params['ovs'] = True # connection == macvtap and iface is not bridge elif netinfo.is_bare_nic(iface) or netinfo.is_bonding(iface): # libvirt bridge creation will fail with NetworkManager enabled if self.caps.nm_running: raise InvalidParameter('KCHNET0027E') if 'vlan_id' in params: params['bridge'] = \ self._create_vlan_tagged_bridge(str(iface), str(params['vlan_id'])) else: # create Linux bridge interface and use it as actual iface iface = self._create_linux_bridge(iface) params['bridge'] = iface # unrecognized interface type: fail else: raise InvalidParameter("KCHNET0007E")
def _set_network_bridge(self, params): try: # fails if host interface is already in use by a libvirt network iface = params["interface"] if iface in self.get_all_networks_interfaces(): msg_args = {"iface": iface, "network": params["name"]} raise InvalidParameter("KCHNET0006E", msg_args) except KeyError: raise MissingParameter("KCHNET0004E", {"name": params["name"]}) # Linux bridges cannot be the trunk device of a VLAN if "vlan_id" in params and (netinfo.is_bridge(iface) or params["connection"] == "bridge"): raise InvalidParameter("KCHNET0019E", {"name": iface}) # User specified bridge interface, simply use it self._ensure_iface_up(iface) params["ovs"] = False if netinfo.is_bridge(iface): params["bridge"] = iface if netinfo.is_ovs_bridge(iface): params["ovs"] = True # OVS bridges don't work with macvtap if params["connection"] != "bridge": raise InvalidParameter("KCHNET0026E") # User wants Linux bridge network, but didn't specify bridge interface elif params["connection"] == "bridge": # libvirt will fail to create bridge if NetworkManager is enabled if self.caps.nm_running: raise InvalidParameter("KCHNET0027E") # create Linux bridge interface first and use it as actual iface iface = self._create_linux_bridge(iface) params["bridge"] = iface # connection == macvtap and iface is not bridge elif netinfo.is_bare_nic(iface) or netinfo.is_bonding(iface): if params.get("vlan_id") is None: params["forward"]["dev"] = iface else: params["bridge"] = self._create_vlan_tagged_bridge(str(iface), str(params["vlan_id"])) else: raise InvalidParameter("KCHNET0007E")
def _set_network_bridge(self, params): try: # fails if host interface is already in use by a libvirt network iface = params['interface'] if iface in self.get_all_networks_interfaces(): msg_args = {'iface': iface, 'network': params['name']} raise InvalidParameter("KCHNET0006E", msg_args) except KeyError: raise MissingParameter("KCHNET0004E", {'name': params['name']}) # Linux bridges cannot be the trunk device of a VLAN if 'vlan_id' in params and \ (netinfo.is_bridge(iface) or params['connection'] == "bridge"): raise InvalidParameter('KCHNET0019E', {'name': iface}) # User specified bridge interface, simply use it self._ensure_iface_up(iface) params['ovs'] = False if netinfo.is_bridge(iface): params['bridge'] = iface if netinfo.is_ovs_bridge(iface): params['ovs'] = True # OVS bridges don't work with macvtap if params['connection'] != "bridge": raise InvalidParameter('KCHNET0026E') # User wants Linux bridge network, but didn't specify bridge interface elif params['connection'] == "bridge": # create Linux bridge interface first and use it as actual iface iface = self._create_linux_bridge(iface) params['bridge'] = iface # connection == macvtap and iface is not bridge elif netinfo.is_bare_nic(iface) or netinfo.is_bonding(iface): if params.get('vlan_id') is None: params['forward']['dev'] = iface else: params['bridge'] = \ self._create_vlan_tagged_bridge(str(iface), str(params['vlan_id'])) else: raise InvalidParameter("KCHNET0007E")
def update(self, name, params): info = self.lookup(name) original = copy.deepcopy(info) original['name'] = name # validate update parameters connection = info['connection'] if connection in ['bridge', 'macvtap', 'vepa']: if params.get('subnet'): raise InvalidParameter("KCHNET0031E") elif connection in ['nat', 'isolated']: if params.get('vlan_id') or params.get('interfaces'): raise InvalidParameter("KCHNET0032E") # get target device if bridge was created by Kimchi if connection == 'bridge': iface = info['interfaces'][0] if is_bridge(iface) and iface.startswith(KIMCHI_BRIDGE_PREFIX): port = ports(iface)[0] if is_vlan(port): dev = get_vlan_device(port) info['interfaces'] = original['interfaces'] = [dev] # nic else: info['interfaces'] = original['interfaces'] = [port] # merge parameters info.update(params) # delete original network self.delete(name) try: # create new network network = self.collection.create(info) except: # restore original network self.collection.create(original) raise return network
def _set_network_bridge(self, params): try: iface = params['interface'] if iface in self.get_all_networks_interfaces(): msg_args = {'iface': iface, 'network': params['name']} raise InvalidParameter("KCHNET0006E", msg_args) except KeyError: raise MissingParameter("KCHNET0004E", {'name': params['name']}) self._ensure_iface_up(iface) if netinfo.is_bridge(iface): if 'vlan_id' in params: raise InvalidParameter('KCHNET0019E', {'name': iface}) params['bridge'] = iface elif netinfo.is_bare_nic(iface) or netinfo.is_bonding(iface): if params.get('vlan_id') is None: params['forward']['dev'] = iface else: params['bridge'] = \ self._create_vlan_tagged_bridge(str(iface), str(params['vlan_id'])) else: raise InvalidParameter("KCHNET0007E")