예제 #1
0
    def new_obj(value):
        """
        Retrieve Ipv6 address from a string representation.

        :param str value: value to get Ipv4 address from
        :return: Ipv4 address
        :rtype: core.misc.ipaddress.IpAddress
        """
        return IpAddress(af=socket.AF_INET6, address=value)
예제 #2
0
    def new_obj(value):
        """
        Retrieve Ipv4 address from a string representation.

        :param str value: value to get Ipv4 address from
        :return: Ipv4 address
        :rtype: core.misc.ipaddress.IpAddress
        """
        logger.info("getting new ipv4 address for: %s", value)
        return IpAddress(af=socket.AF_INET, address=value)
예제 #3
0
    def test_tunnel(self, cored, distributed_address):
        """
        Test session broker creation.

        :param core.coreserver.CoreServer conftest.Core cored: core daemon server to test with
        :param str distributed_address: distributed server to test against
        """
        # initialize server for testing
        cored.setup(distributed_address)

        # create local node
        message = conftest.node_message(
            objid=1,
            name="n1",
            model="host"
        )
        cored.request_handler.handle_message(message)

        # create distributed node and assign to distributed server
        message = conftest.node_message(
            objid=2,
            name=distributed_address,
            emulation_server=cored.distributed_server,
            node_type=NodeTypes.TUNNEL
        )
        cored.request_handler.handle_message(message)

        # link message one
        ip4_address = cored.prefix.addr(1)
        address_two = IpAddress.from_string(distributed_address)
        message = conftest.link_message(
            n1=1,
            n2=2,
            intf_one=0,
            address_one=ip4_address,
            intf_two=0,
            address_two=address_two,
            key=1
        )
        cored.request_handler.handle_message(message)

        # change session to instantiation state
        message = conftest.state_message(EventTypes.INSTANTIATION_STATE)
        cored.request_handler.handle_message(message)
예제 #4
0
파일: mobility.py 프로젝트: yrs1/core
    def installphysnodes(self, net):
        """
        After installing a mobility model on a net, include any physical
        nodes that we have recorded. Use the GreTap tunnel to the physical node
        as the node's interface.

        :param net: network to install
        :return: nothing
        """
        nodenums = self.physnets.get(net.objid, [])
        for nodenum in nodenums:
            node = self.phys[nodenum]
            # TODO: fix this bad logic, relating to depending on a break to get a valid server
            for server in self.session.broker.getserversbynode(nodenum):
                break
            netif = self.session.broker.gettunnel(net.objid, IpAddress.to_int(server.host))
            node.addnetif(netif, 0)
            netif.node = node
            x, y, z = netif.node.position.get()
            netif.poshook(netif, x, y, z)
예제 #5
0
파일: mobility.py 프로젝트: gsomlo/core
    def installphysnodes(self, net):
        """
        After installing a mobility model on a net, include any physical
        nodes that we have recorded. Use the GreTap tunnel to the physical node
        as the node's interface.

        :param net: network to install
        :return: nothing
        """
        nodenums = self.physnets.get(net.objid, [])
        for nodenum in nodenums:
            node = self.phys[nodenum]
            # TODO: fix this bad logic, relating to depending on a break to get a valid server
            for server in self.session.broker.getserversbynode(nodenum):
                break
            netif = self.session.broker.gettunnel(net.objid, IpAddress.to_int(server.host))
            node.addnetif(netif, 0)
            netif.node = node
            x, y, z = netif.node.position.get()
            netif.poshook(netif, x, y, z)
예제 #6
0
    def test_tunnel(self, cored, distributed_address):
        """
        Test session broker creation.

        :param core.coreserver.CoreServer conftest.Core cored: core daemon server to test with
        :param str distributed_address: distributed server to test against
        """
        # initialize server for testing
        cored.setup(distributed_address)

        # create local node
        message = conftest.node_message(objid=1, name="n1", model="host")
        cored.request_handler.handle_message(message)

        # create distributed node and assign to distributed server
        message = conftest.node_message(
            objid=2,
            name=distributed_address,
            emulation_server=cored.distributed_server,
            node_type=NodeTypes.TUNNEL)
        cored.request_handler.handle_message(message)

        # link message one
        ip4_address = cored.prefix.addr(1)
        address_two = IpAddress.from_string(distributed_address)
        message = conftest.link_message(n1=1,
                                        n2=2,
                                        intf_one=0,
                                        address_one=ip4_address,
                                        intf_two=0,
                                        address_two=address_two,
                                        key=1)
        cored.request_handler.handle_message(message)

        # change session to instantiation state
        message = conftest.state_message(EventTypes.INSTANTIATION_STATE)
        cored.request_handler.handle_message(message)
예제 #7
0
    def addnettunnel(self, node_id):
        """
        Add network tunnel between node and broker.

        :param int node_id: node id of network to add tunnel to
        :return: list of gre taps
        :rtype: list
        """
        try:
            net = self.session.get_object(node_id)
            logger.info("adding net tunnel for: id(%s) %s", node_id, net)
        except KeyError:
            raise KeyError("network node %s not found" % node_id)

        # add other nets here that do not require tunnels
        if nodeutils.is_node(net, NodeTypes.EMANE_NET):
            logger.warn("emane network does not require a tunnel")
            return None

        server_interface = getattr(net, "serverintf", None)
        if nodeutils.is_node(net, NodeTypes.CONTROL_NET) and server_interface is not None:
            logger.warn("control networks with server interfaces do not need a tunnel")
            return None

        servers = self.getserversbynode(node_id)
        if len(servers) < 2:
            logger.warn("not enough servers to create a tunnel: %s", servers)
            return None

        hosts = []
        for server in servers:
            if server.host is None:
                continue
            logger.info("adding server host for net tunnel: %s", server.host)
            hosts.append(server.host)

        if len(hosts) == 0:
            for session_client in self.session_clients:
                # get IP address from API message sender (master)
                if session_client.client_address != "":
                    address = session_client.client_address[0]
                    logger.info("adding session_client host: %s", address)
                    hosts.append(address)

        r = []
        for host in hosts:
            if self.myip:
                # we are the remote emulation server
                myip = self.myip
            else:
                # we are the session master
                myip = host
            key = self.tunnelkey(node_id, IpAddress.to_int(myip))
            if key in self.tunnels.keys():
                logger.info("tunnel already exists, returning existing tunnel: %s", key)
                gt = self.tunnels[key]
                r.append(gt)
                continue
            logger.info("adding tunnel for net %s to %s with key %s", node_id, host, key)
            gt = GreTap(node=None, name=None, session=self.session, remoteip=host, key=key)
            self.tunnels[key] = gt
            r.append(gt)
            # attaching to net will later allow gt to be destroyed
            # during net.shutdown()
            net.attach(gt)

        return r