def _ensure_vrf(self, vrf, vrf_ip, cidr): """Ensure vrf interface return: vrf_table """ if self.vrf_tables: vrf_table = max(list(self.vrf_tables.values())) + 1 else: vrf_table = VRF_TABLE_NAMBER_BASE if vrf not in list(self.vrf_tables): privileged.create_interface(vrf, None, "vrf", vrf_table=vrf_table) privileged.set_link_attribute(vrf, None, state="up") LOG.debug("VRF %s is created" % vrf) self.vrf_tables[vrf] = vrf_table # TODO(hichihara): Refactor to use ip_lib instead of command ip = vrf_ip + '/' + cidr self._setup_interface_ip(ip, vrf) cmd = ["ip", "route", "replace", vrf_ip, "dev", vrf] utils.execute(cmd, run_as_root=True, check_exit_code=False) vrf_sid = ("%(node_id)s:%(vrf_ip)s/128" % { "node_id": self.node_id, "vrf_ip": vrf_ip }) self._setup_interface_ip(vrf_sid, vrf) self._setup_interface_ip("169.254.169.254/32", vrf) # Create encap rules for encap_info in self.encap_info: if vrf == encap_info['vrf']: self.add_encap_rules([encap_info], add_flag=False) break else: vrf_table = self.vrf_tables[vrf] return vrf_table
def set_mtu(self, mtu_size): try: privileged.set_link_attribute( self.name, self._parent.namespace, mtu=mtu_size) except NetlinkError as e: if e.code == errno.EINVAL: raise InvalidArgument(parameter="MTU", value=mtu_size) raise
def set_mtu(self, mtu_size): try: privileged.set_link_attribute(self.name, self._parent.namespace, mtu=mtu_size) except NetlinkError as e: if e.code == errno.EINVAL: raise InvalidArgument(parameter="MTU", value=mtu_size) raise
def set_netns(self, namespace): privileged.set_link_attribute( self.name, self._parent.namespace, net_ns_fd=namespace) self._parent.namespace = namespace
def set_down(self): privileged.set_link_attribute( self.name, self._parent.namespace, state='down')
def set_up(self): privileged.set_link_attribute( self.name, self._parent.namespace, state='up')
def set_address(self, mac_address): privileged.set_link_attribute( self.name, self._parent.namespace, address=mac_address)
def set_alias(self, alias_name): privileged.set_link_attribute(self.name, self._parent.namespace, ifalias=alias_name)
def _add_avr_to_vrf(self, vrf, qvr): vrf_idx = privileged.get_link_id(vrf, None) privileged.set_link_attribute(qvr, None, master=vrf_idx)
def set_netns(self, namespace): privileged.set_link_attribute(self.name, self._parent.namespace, net_ns_fd=namespace) self._parent.namespace = namespace
def set_down(self): privileged.set_link_attribute(self.name, self._parent.namespace, state='down')
def set_up(self): privileged.set_link_attribute(self.name, self._parent.namespace, state='up')
def set_address(self, mac_address): privileged.set_link_attribute(self.name, self._parent.namespace, address=mac_address)
def set_mtu(self, mtu_size): privileged.set_link_attribute(self.name, self._parent.namespace, mtu=mtu_size)
def remove_vrf(self, vrf): if self.vrf_tables.get(vrf): privileged.set_link_attribute(vrf, None, state="down") privileged.delete_interface(vrf, None) self.vrf_tables.pop(vrf) LOG.debug("Removed vrf %s", vrf)
def set_name(self, name): privileged.set_link_attribute( self.name, self._parent.namespace, ifname=name) self._parent.name = name
def set_alias(self, alias_name): privileged.set_link_attribute( self.name, self._parent.namespace, ifalias=alias_name)
def set_name(self, name): privileged.set_link_attribute(self.name, self._parent.namespace, ifname=name) self._parent.name = name