class GreTapBridge(CoreNetwork): """ A network consisting of a bridge with a gretap device for tunneling to another system. """ def __init__( self, session, remoteip=None, _id=None, name=None, policy="ACCEPT", localip=None, ttl=255, key=None, start=True, ): """ Create a GreTapBridge instance. :param core.emulator.session.Session session: core session instance :param str remoteip: remote address :param int _id: object id :param str name: object name :param policy: network policy :param str localip: local address :param ttl: ttl value :param key: gre tap key :param bool start: start flag """ CoreNetwork.__init__(self, session=session, _id=_id, name=name, policy=policy, start=False) self.grekey = key if self.grekey is None: self.grekey = self.session.id ^ self.id self.localnum = None self.remotenum = None self.remoteip = remoteip self.localip = localip self.ttl = ttl if remoteip is None: self.gretap = None else: self.gretap = GreTap( node=self, session=session, remoteip=remoteip, localip=localip, ttl=ttl, key=self.grekey, ) if start: self.startup() def startup(self): """ Creates a bridge and adds the gretap device to it. :return: nothing """ CoreNetwork.startup(self) if self.gretap: self.attach(self.gretap) def shutdown(self): """ Detach the gretap device and remove the bridge. :return: nothing """ if self.gretap: self.detach(self.gretap) self.gretap.shutdown() self.gretap = None CoreNetwork.shutdown(self) def addrconfig(self, addrlist): """ Set the remote tunnel endpoint. This is a one-time method for creating the GreTap device, which requires the remoteip at startup. The 1st address in the provided list is remoteip, 2nd optionally specifies localip. :param list addrlist: address list :return: nothing """ if self.gretap: raise ValueError("gretap already exists for %s" % self.name) remoteip = addrlist[0].split("/")[0] localip = None if len(addrlist) > 1: localip = addrlist[1].split("/")[0] self.gretap = GreTap( session=self.session, remoteip=remoteip, localip=localip, ttl=self.ttl, key=self.grekey, ) self.attach(self.gretap) def setkey(self, key): """ Set the GRE key used for the GreTap device. This needs to be set prior to instantiating the GreTap device (before addrconfig). :param key: gre key :return: nothing """ self.grekey = key
class GreTapBridge(CoreNetwork): """ A network consisting of a bridge with a gretap device for tunneling to another system. """ def __init__( self, session: "Session", remoteip: str = None, _id: int = None, name: str = None, policy: NetworkPolicy = NetworkPolicy.ACCEPT, localip: str = None, ttl: int = 255, key: int = None, server: "DistributedServer" = None, ) -> None: """ Create a GreTapBridge instance. :param session: core session instance :param remoteip: remote address :param _id: object id :param name: object name :param policy: network policy :param localip: local address :param ttl: ttl value :param key: gre tap key :param server: remote server node will run on, default is None for localhost """ CoreNetwork.__init__(self, session, _id, name, server, policy) if key is None: key = self.session.id ^ self.id self.grekey: int = key self.localnum: Optional[int] = None self.remotenum: Optional[int] = None self.remoteip: Optional[str] = remoteip self.localip: Optional[str] = localip self.ttl: int = ttl self.gretap: Optional[GreTap] = None if remoteip is not None: self.gretap = GreTap( node=self, session=session, remoteip=remoteip, localip=localip, ttl=ttl, key=self.grekey, ) def startup(self) -> None: """ Creates a bridge and adds the gretap device to it. :return: nothing """ super().startup() if self.gretap: self.attach(self.gretap) def shutdown(self) -> None: """ Detach the gretap device and remove the bridge. :return: nothing """ if self.gretap: self.detach(self.gretap) self.gretap.shutdown() self.gretap = None super().shutdown() def add_ips(self, ips: List[str]) -> None: """ Set the remote tunnel endpoint. This is a one-time method for creating the GreTap device, which requires the remoteip at startup. The 1st address in the provided list is remoteip, 2nd optionally specifies localip. :param ips: address list :return: nothing """ if self.gretap: raise ValueError(f"gretap already exists for {self.name}") remoteip = ips[0].split("/")[0] localip = None if len(ips) > 1: localip = ips[1].split("/")[0] self.gretap = GreTap( session=self.session, remoteip=remoteip, localip=localip, ttl=self.ttl, key=self.grekey, ) self.attach(self.gretap) def setkey(self, key: int, iface_data: InterfaceData) -> None: """ Set the GRE key used for the GreTap device. This needs to be set prior to instantiating the GreTap device (before addrconfig). :param key: gre key :param iface_data: interface data for setting up tunnel key :return: nothing """ self.grekey = key ips = iface_data.get_ips() if ips: self.add_ips(ips)
class OvsGreTapBridge(OvsNet): """ A network consisting of a bridge with a gretap device for tunneling to another system. """ def __init__(self, session, remoteip=None, _id=None, name=None, policy="ACCEPT", localip=None, ttl=255, key=None, start=True): OvsNet.__init__(self, session=session, _id=_id, name=name, policy=policy, start=False) self.grekey = key if self.grekey is None: self.grekey = self.session.id ^ self.id self.localnum = None self.remotenum = None self.remoteip = remoteip self.localip = localip self.ttl = ttl if remoteip is None: self.gretap = None else: self.gretap = GreTap(node=self, session=session, remoteip=remoteip, localip=localip, ttl=ttl, key=self.grekey) if start: self.startup() def startup(self): """ Creates a bridge and adds the gretap device to it. """ OvsNet.startup(self) if self.gretap: self.attach(self.gretap) def shutdown(self): """ Detach the gretap device and remove the bridge. """ if self.gretap: self.detach(self.gretap) self.gretap.shutdown() self.gretap = None OvsNet.shutdown(self) def addrconfig(self, addresses): """ Set the remote tunnel endpoint. This is a one-time method for creating the GreTap device, which requires the remoteip at startup. The 1st address in the provided list is remoteip, 2nd optionally specifies localip. """ if self.gretap: raise ValueError("gretap already exists for %s" % self.name) remoteip = addresses[0].split("/")[0] localip = None if len(addresses) > 1: localip = addresses[1].split("/")[0] self.gretap = GreTap(session=self.session, remoteip=remoteip, localip=localip, ttl=self.ttl, key=self.grekey) self.attach(self.gretap) def setkey(self, key): """ Set the GRE key used for the GreTap device. This needs to be set prior to instantiating the GreTap device (before addrconfig). """ self.grekey = key