コード例 #1
0
    def set_session_location(
        self,
        session_id: int,
        x: float = None,
        y: float = None,
        z: float = None,
        lat: float = None,
        lon: float = None,
        alt: float = None,
        scale: float = None,
    ) -> core_pb2.SetSessionLocationResponse:
        """
        Set session location.

        :param session_id: id of session
        :param x: x position
        :param y: y position
        :param z: z position
        :param lat: latitude position
        :param lon: longitude  position
        :param alt: altitude position
        :param scale: geo scale
        :return: response with result of success or failure
        :raises grpc.RpcError: when session doesn't exist
        """
        location = core_pb2.SessionLocation(x=x,
                                            y=y,
                                            z=z,
                                            lat=lat,
                                            lon=lon,
                                            alt=alt,
                                            scale=scale)
        request = core_pb2.SetSessionLocationRequest(session_id=session_id,
                                                     location=location)
        return self.stub.SetSessionLocation(request)
コード例 #2
0
 def to_proto(self) -> core_pb2.SessionLocation:
     return core_pb2.SessionLocation(
         x=self.x,
         y=self.y,
         z=self.z,
         lat=self.lat,
         lon=self.lon,
         alt=self.alt,
         scale=self.scale,
     )
コード例 #3
0
def convert_session(session: Session) -> wrappers.Session:
    links = []
    nodes = []
    emane_configs = get_emane_model_configs_dict(session)
    for _id in session.nodes:
        node = session.nodes[_id]
        if not isinstance(node, (PtpNet, CtrlNet)):
            node_emane_configs = emane_configs.get(node.id, [])
            node_proto = get_node_proto(session, node, node_emane_configs)
            nodes.append(node_proto)
        node_links = get_links(node)
        links.extend(node_links)
    default_services = get_default_services(session)
    x, y, z = session.location.refxyz
    lat, lon, alt = session.location.refgeo
    location = core_pb2.SessionLocation(x=x,
                                        y=y,
                                        z=z,
                                        lat=lat,
                                        lon=lon,
                                        alt=alt,
                                        scale=session.location.refscale)
    hooks = get_hooks(session)
    session_file = str(session.file_path) if session.file_path else None
    options = get_config_options(session.options.get_configs(),
                                 session.options)
    servers = [
        core_pb2.Server(name=x.name, host=x.host)
        for x in session.distributed.servers.values()
    ]
    return core_pb2.Session(
        id=session.id,
        state=session.state.value,
        nodes=nodes,
        links=links,
        dir=str(session.directory),
        user=session.user,
        default_services=default_services,
        location=location,
        hooks=hooks,
        metadata=session.metadata,
        file=session_file,
        options=options,
        servers=servers,
    )
コード例 #4
0
 def create_new_session(self):
     """
     Create a new session
     """
     try:
         response = self.client.create_session()
         logging.info("created session: %s", response)
         location_config = self.app.guiconfig.location
         self.location = core_pb2.SessionLocation(
             x=location_config.x,
             y=location_config.y,
             z=location_config.z,
             lat=location_config.lat,
             lon=location_config.lon,
             alt=location_config.alt,
             scale=location_config.scale,
         )
         self.join_session(response.session_id, query_location=False)
     except grpc.RpcError as e:
         self.app.show_grpc_exception("New Session Error", e)
コード例 #5
0
ファイル: coreclient.py プロジェクト: montag451/core
 def create_new_session(self):
     """
     Create a new session
     """
     try:
         response = self.client.create_session()
         logging.info("created session: %s", response)
         location_config = self.app.guiconfig["location"]
         self.location = core_pb2.SessionLocation(
             x=location_config["x"],
             y=location_config["y"],
             z=location_config["z"],
             lat=location_config["lat"],
             lon=location_config["lon"],
             alt=location_config["alt"],
             scale=location_config["scale"],
         )
         self.join_session(response.session_id, query_location=False)
     except grpc.RpcError as e:
         self.app.after(0, show_grpc_error, e, self.app, self.app)
コード例 #6
0
ファイル: test_grpc.py プロジェクト: tinchoa/core
    def test_start_session(self, grpc_server):
        # given
        client = CoreGrpcClient()
        session = grpc_server.coreemu.create_session()
        position = core_pb2.Position(x=50, y=100)
        node_one = core_pb2.Node(id=1, position=position, model="PC")
        position = core_pb2.Position(x=100, y=100)
        node_two = core_pb2.Node(id=2, position=position, model="PC")
        position = core_pb2.Position(x=200, y=200)
        wlan_node = core_pb2.Node(id=3,
                                  type=NodeTypes.WIRELESS_LAN.value,
                                  position=position)
        nodes = [node_one, node_two, wlan_node]
        interface_helper = InterfaceHelper(ip4_prefix="10.83.0.0/16")
        interface_one = interface_helper.create_interface(node_one.id, 0)
        interface_two = interface_helper.create_interface(node_two.id, 0)
        link = core_pb2.Link(
            type=core_pb2.LinkType.WIRED,
            node_one_id=node_one.id,
            node_two_id=node_two.id,
            interface_one=interface_one,
            interface_two=interface_two,
        )
        links = [link]
        hook = core_pb2.Hook(state=core_pb2.SessionState.RUNTIME,
                             file="echo.sh",
                             data="echo hello")
        hooks = [hook]
        location_x = 5
        location_y = 10
        location_z = 15
        location_lat = 20
        location_lon = 30
        location_alt = 40
        location_scale = 5
        location = core_pb2.SessionLocation(
            x=location_x,
            y=location_y,
            z=location_z,
            lat=location_lat,
            lon=location_lon,
            alt=location_alt,
            scale=location_scale,
        )
        emane_config_key = "platform_id_start"
        emane_config_value = "2"
        emane_config = {emane_config_key: emane_config_value}
        model_node_id = 20
        model_config_key = "bandwidth"
        model_config_value = "500000"
        model_config = core_pb2.EmaneModelConfig(
            node_id=model_node_id,
            interface_id=-1,
            model=EmaneIeee80211abgModel.name,
            config={model_config_key: model_config_value},
        )
        model_configs = [model_config]
        wlan_config_key = "range"
        wlan_config_value = "333"
        wlan_config = core_pb2.WlanConfig(
            node_id=wlan_node.id, config={wlan_config_key: wlan_config_value})
        wlan_configs = [wlan_config]
        mobility_config_key = "refresh_ms"
        mobility_config_value = "60"
        mobility_config = core_pb2.MobilityConfig(
            node_id=wlan_node.id,
            config={mobility_config_key: mobility_config_value})
        mobility_configs = [mobility_config]
        service_config = core_pb2.ServiceConfig(node_id=node_one.id,
                                                service="DefaultRoute",
                                                validate=["echo hello"])
        service_configs = [service_config]
        service_file_config = core_pb2.ServiceFileConfig(
            node_id=node_one.id,
            service="DefaultRoute",
            file="defaultroute.sh",
            data="echo hello",
        )
        service_file_configs = [service_file_config]

        # when
        with patch.object(CoreXmlWriter, "write"):
            with client.context_connect():
                client.start_session(
                    session.id,
                    nodes,
                    links,
                    location,
                    hooks,
                    emane_config,
                    model_configs,
                    wlan_configs,
                    mobility_configs,
                    service_configs,
                    service_file_configs,
                )

        # then
        assert node_one.id in session.nodes
        assert node_two.id in session.nodes
        assert wlan_node.id in session.nodes
        assert session.nodes[node_one.id].netif(0) is not None
        assert session.nodes[node_two.id].netif(0) is not None
        hook_file, hook_data = session._hooks[core_pb2.SessionState.RUNTIME][0]
        assert hook_file == hook.file
        assert hook_data == hook.data
        assert session.location.refxyz == (location_x, location_y, location_z)
        assert session.location.refgeo == (location_lat, location_lon,
                                           location_alt)
        assert session.location.refscale == location_scale
        assert session.emane.get_config(emane_config_key) == emane_config_value
        set_wlan_config = session.mobility.get_model_config(
            wlan_node.id, BasicRangeModel.name)
        assert set_wlan_config[wlan_config_key] == wlan_config_value
        set_mobility_config = session.mobility.get_model_config(
            wlan_node.id, Ns2ScriptedMobility.name)
        assert set_mobility_config[
            mobility_config_key] == mobility_config_value
        set_model_config = session.emane.get_model_config(
            model_node_id, EmaneIeee80211abgModel.name)
        assert set_model_config[model_config_key] == model_config_value
        service = session.services.get_service(node_one.id,
                                               service_config.service,
                                               default_service=True)
        assert service.validate == tuple(service_config.validate)
        service_file = session.services.get_service_file(
            node_one, service_file_config.service, service_file_config.file)
        assert service_file.data == service_file_config.data