updates to layout core module packages in a more logical way, including renaming methods from objects to nodes and nodes.objid to nodes.id
This commit is contained in:
parent
9517740704
commit
66e603906a
100 changed files with 10283 additions and 3489 deletions
0
daemon/core/api/grpc/__init__.py
Normal file
0
daemon/core/api/grpc/__init__.py
Normal file
831
daemon/core/api/grpc/client.py
Normal file
831
daemon/core/api/grpc/client.py
Normal file
|
@ -0,0 +1,831 @@
|
|||
"""
|
||||
gRpc client for interfacing with CORE, when gRPC mode is enabled.
|
||||
"""
|
||||
|
||||
from __future__ import print_function
|
||||
|
||||
import logging
|
||||
import threading
|
||||
from contextlib import contextmanager
|
||||
|
||||
import grpc
|
||||
|
||||
from core.api.grpc import core_pb2
|
||||
from core.api.grpc import core_pb2_grpc
|
||||
from core.nodes.ipaddress import Ipv4Prefix, Ipv6Prefix, MacAddress
|
||||
|
||||
|
||||
class InterfaceHelper(object):
|
||||
"""
|
||||
Convenience class to help generate IP4 and IP6 addresses for gRPC clients.
|
||||
"""
|
||||
|
||||
def __init__(self, ip4_prefix=None, ip6_prefix=None):
|
||||
"""
|
||||
Creates an InterfaceHelper object.
|
||||
|
||||
:param str ip4_prefix: ip4 prefix to use for generation
|
||||
:param str ip6_prefix: ip6 prefix to use for generation
|
||||
:raises ValueError: when both ip4 and ip6 prefixes have not been provided
|
||||
"""
|
||||
if not ip4_prefix and not ip6_prefix:
|
||||
raise ValueError("ip4 or ip6 must be provided")
|
||||
|
||||
self.ip4 = None
|
||||
if ip4_prefix:
|
||||
self.ip4 = Ipv4Prefix(ip4_prefix)
|
||||
self.ip6 = None
|
||||
if ip6_prefix:
|
||||
self.ip6 = Ipv6Prefix(ip6_prefix)
|
||||
|
||||
def ip4_address(self, node_id):
|
||||
"""
|
||||
Convenience method to return the IP4 address for a node.
|
||||
|
||||
:param int node_id: node id to get IP4 address for
|
||||
:return: IP4 address or None
|
||||
:rtype: str
|
||||
"""
|
||||
if not self.ip4:
|
||||
raise ValueError("ip4 prefixes have not been set")
|
||||
return str(self.ip4.addr(node_id))
|
||||
|
||||
def ip6_address(self, node_id):
|
||||
"""
|
||||
Convenience method to return the IP6 address for a node.
|
||||
|
||||
:param int node_id: node id to get IP6 address for
|
||||
:return: IP4 address or None
|
||||
:rtype: str
|
||||
"""
|
||||
if not self.ip6:
|
||||
raise ValueError("ip6 prefixes have not been set")
|
||||
return str(self.ip6.addr(node_id))
|
||||
|
||||
def create_interface(self, node_id, interface_id, name=None, mac=None):
|
||||
"""
|
||||
Creates interface data for linking nodes, using the nodes unique id for generation, along with a random
|
||||
mac address, unless provided.
|
||||
|
||||
:param int node_id: node id to create interface for
|
||||
:param int interface_id: interface id for interface
|
||||
:param str name: name to set for interface, default is eth{id}
|
||||
:param str mac: mac address to use for this interface, default is random generation
|
||||
:return: new interface data for the provided node
|
||||
:rtype: core_pb2.Interface
|
||||
"""
|
||||
# generate ip4 data
|
||||
ip4 = None
|
||||
ip4_mask = None
|
||||
if self.ip4:
|
||||
ip4 = str(self.ip4.addr(node_id))
|
||||
ip4_mask = self.ip4.prefixlen
|
||||
|
||||
# generate ip6 data
|
||||
ip6 = None
|
||||
ip6_mask = None
|
||||
if self.ip6:
|
||||
ip6 = str(self.ip6.addr(node_id))
|
||||
ip6_mask = self.ip6.prefixlen
|
||||
|
||||
# random mac
|
||||
if not mac:
|
||||
mac = MacAddress.random()
|
||||
|
||||
return core_pb2.Interface(
|
||||
id=interface_id,
|
||||
name=name,
|
||||
ip4=ip4,
|
||||
ip4mask=ip4_mask,
|
||||
ip6=ip6,
|
||||
ip6mask=ip6_mask,
|
||||
mac=str(mac)
|
||||
)
|
||||
|
||||
|
||||
def stream_listener(stream, handler):
|
||||
"""
|
||||
Listen for stream events and provide them to the handler.
|
||||
|
||||
:param stream: grpc stream that will provide events
|
||||
:param handler: function that handles an event
|
||||
:return: nothing
|
||||
"""
|
||||
try:
|
||||
for event in stream:
|
||||
handler(event)
|
||||
except grpc.RpcError as e:
|
||||
if e.code() == grpc.StatusCode.CANCELLED:
|
||||
logging.debug("stream closed")
|
||||
else:
|
||||
logging.exception("stream error")
|
||||
|
||||
|
||||
def start_streamer(stream, handler):
|
||||
"""
|
||||
Convenience method for starting a grpc stream thread for handling streamed events.
|
||||
|
||||
:param stream: grpc stream that will provide events
|
||||
:param handler: function that handles an event
|
||||
:return: nothing
|
||||
"""
|
||||
thread = threading.Thread(target=stream_listener, args=(stream, handler))
|
||||
thread.daemon = True
|
||||
thread.start()
|
||||
|
||||
|
||||
class CoreGrpcClient(object):
|
||||
"""
|
||||
Provides convenience methods for interfacing with the CORE grpc server.
|
||||
"""
|
||||
|
||||
def __init__(self, address="localhost:50051"):
|
||||
"""
|
||||
Creates a CoreGrpcClient instance.
|
||||
|
||||
:param str address: grpc server address to connect to
|
||||
"""
|
||||
self.address = address
|
||||
self.stub = None
|
||||
self.channel = None
|
||||
|
||||
def create_session(self, _id=None):
|
||||
"""
|
||||
Create a session.
|
||||
|
||||
:param int _id: id for session, default is None and one will be created for you
|
||||
:return: response with created session id
|
||||
:rtype: core_pb2.CreateSessionResponse
|
||||
"""
|
||||
request = core_pb2.CreateSessionRequest(id=_id)
|
||||
return self.stub.CreateSession(request)
|
||||
|
||||
def delete_session(self, _id):
|
||||
"""
|
||||
Delete a session.
|
||||
|
||||
:param int _id: id of session
|
||||
:return: response with result of deletion success or failure
|
||||
:rtype: core_pb2.DeleteSessionResponse
|
||||
:raises grpc.RpcError: when session doesn't exist
|
||||
"""
|
||||
request = core_pb2.DeleteSessionRequest(id=_id)
|
||||
return self.stub.DeleteSession(request)
|
||||
|
||||
def get_sessions(self):
|
||||
"""
|
||||
Retrieves all currently known sessions.
|
||||
|
||||
:return: response with a list of currently known session, their state and number of nodes
|
||||
:rtype: core_pb2.GetSessionsResponse
|
||||
"""
|
||||
return self.stub.GetSessions(core_pb2.GetSessionsRequest())
|
||||
|
||||
def get_session(self, _id):
|
||||
"""
|
||||
Retrieve a session.
|
||||
|
||||
:param int _id: id of session
|
||||
:return: response with sessions state, nodes, and links
|
||||
:rtype: core_pb2.GetSessionResponse
|
||||
:raises grpc.RpcError: when session doesn't exist
|
||||
"""
|
||||
request = core_pb2.GetSessionRequest(id=_id)
|
||||
return self.stub.GetSession(request)
|
||||
|
||||
def get_session_options(self, _id):
|
||||
"""
|
||||
Retrieve session options.
|
||||
|
||||
:param int _id: id of session
|
||||
:return: response with a list of configuration groups
|
||||
:rtype: core_pb2.GetSessionOptionsResponse
|
||||
:raises grpc.RpcError: when session doesn't exist
|
||||
"""
|
||||
request = core_pb2.GetSessionOptionsRequest(id=_id)
|
||||
return self.stub.GetSessionOptions(request)
|
||||
|
||||
def set_session_options(self, _id, config):
|
||||
"""
|
||||
Set options for a session.
|
||||
|
||||
:param int _id: id of session
|
||||
:param dict[str, str] config: configuration values to set
|
||||
:return: response with result of success or failure
|
||||
:rtype: core_pb2.SetSessionOptionsResponse
|
||||
:raises grpc.RpcError: when session doesn't exist
|
||||
"""
|
||||
request = core_pb2.SetSessionOptionsRequest(id=_id, config=config)
|
||||
return self.stub.SetSessionOptions(request)
|
||||
|
||||
def get_session_location(self, _id):
|
||||
"""
|
||||
Get session location.
|
||||
|
||||
:param int _id: id of session
|
||||
:return: response with session position reference and scale
|
||||
:rtype: core_pb2.GetSessionLocationResponse
|
||||
:raises grpc.RpcError: when session doesn't exist
|
||||
"""
|
||||
request = core_pb2.GetSessionLocationRequest(id=_id)
|
||||
return self.stub.GetSessionLocation(request)
|
||||
|
||||
def set_session_location(self, _id, x=None, y=None, z=None, lat=None, lon=None, alt=None, scale=None):
|
||||
"""
|
||||
Set session location.
|
||||
|
||||
:param int _id: id of session
|
||||
:param float x: x position
|
||||
:param float y: y position
|
||||
:param float z: z position
|
||||
:param float lat: latitude position
|
||||
:param float lon: longitude position
|
||||
:param float alt: altitude position
|
||||
:param float scale: geo scale
|
||||
:return: response with result of success or failure
|
||||
:rtype: core_pb2.SetSessionLocationResponse
|
||||
:raises grpc.RpcError: when session doesn't exist
|
||||
"""
|
||||
position = core_pb2.Position(x=x, y=y, z=z, lat=lat, lon=lon, alt=alt)
|
||||
request = core_pb2.SetSessionLocationRequest(id=_id, position=position, scale=scale)
|
||||
return self.stub.SetSessionLocation(request)
|
||||
|
||||
def set_session_state(self, _id, state):
|
||||
"""
|
||||
Set session state.
|
||||
|
||||
:param int _id: id of session
|
||||
:param core_pb2.SessionState state: session state to transition to
|
||||
:return: response with result of success or failure
|
||||
:rtype: core_pb2.SetSessionStateResponse
|
||||
:raises grpc.RpcError: when session doesn't exist
|
||||
"""
|
||||
request = core_pb2.SetSessionStateRequest(id=_id, state=state)
|
||||
return self.stub.SetSessionState(request)
|
||||
|
||||
def node_events(self, _id, handler):
|
||||
"""
|
||||
Listen for session node events.
|
||||
|
||||
:param int _id: id of session
|
||||
:param handler: handler for every event
|
||||
:return: nothing
|
||||
:raises grpc.RpcError: when session doesn't exist
|
||||
"""
|
||||
request = core_pb2.NodeEventsRequest(id=_id)
|
||||
stream = self.stub.NodeEvents(request)
|
||||
start_streamer(stream, handler)
|
||||
|
||||
def link_events(self, _id, handler):
|
||||
"""
|
||||
Listen for session link events.
|
||||
|
||||
:param int _id: id of session
|
||||
:param handler: handler for every event
|
||||
:return: nothing
|
||||
:raises grpc.RpcError: when session doesn't exist
|
||||
"""
|
||||
request = core_pb2.LinkEventsRequest(id=_id)
|
||||
stream = self.stub.LinkEvents(request)
|
||||
start_streamer(stream, handler)
|
||||
|
||||
def session_events(self, _id, handler):
|
||||
"""
|
||||
Listen for session events.
|
||||
|
||||
:param int _id: id of session
|
||||
:param handler: handler for every event
|
||||
:return: nothing
|
||||
:raises grpc.RpcError: when session doesn't exist
|
||||
"""
|
||||
request = core_pb2.SessionEventsRequest(id=_id)
|
||||
stream = self.stub.SessionEvents(request)
|
||||
start_streamer(stream, handler)
|
||||
|
||||
def config_events(self, _id, handler):
|
||||
"""
|
||||
Listen for session config events.
|
||||
|
||||
:param int _id: id of session
|
||||
:param handler: handler for every event
|
||||
:return: nothing
|
||||
:raises grpc.RpcError: when session doesn't exist
|
||||
"""
|
||||
request = core_pb2.ConfigEventsRequest(id=_id)
|
||||
stream = self.stub.ConfigEvents(request)
|
||||
start_streamer(stream, handler)
|
||||
|
||||
def exception_events(self, _id, handler):
|
||||
"""
|
||||
Listen for session exception events.
|
||||
|
||||
:param int _id: id of session
|
||||
:param handler: handler for every event
|
||||
:return: nothing
|
||||
:raises grpc.RpcError: when session doesn't exist
|
||||
"""
|
||||
request = core_pb2.ExceptionEventsRequest(id=_id)
|
||||
stream = self.stub.ExceptionEvents(request)
|
||||
start_streamer(stream, handler)
|
||||
|
||||
def file_events(self, _id, handler):
|
||||
"""
|
||||
Listen for session file events.
|
||||
|
||||
:param int _id: id of session
|
||||
:param handler: handler for every event
|
||||
:return: nothing
|
||||
:raises grpc.RpcError: when session doesn't exist
|
||||
"""
|
||||
request = core_pb2.FileEventsRequest(id=_id)
|
||||
stream = self.stub.FileEvents(request)
|
||||
start_streamer(stream, handler)
|
||||
|
||||
def add_node(self, session, node):
|
||||
"""
|
||||
Add node to session.
|
||||
|
||||
:param int session: session id
|
||||
:param core_pb2.Node node: node to add
|
||||
:return: response with node id
|
||||
:rtype: core_pb2.AddNodeResponse
|
||||
:raises grpc.RpcError: when session doesn't exist
|
||||
"""
|
||||
request = core_pb2.AddNodeRequest(session=session, node=node)
|
||||
return self.stub.AddNode(request)
|
||||
|
||||
def get_node(self, session, _id):
|
||||
"""
|
||||
Get node details.
|
||||
|
||||
:param int session: session id
|
||||
:param int _id: node id
|
||||
:return: response with node details
|
||||
:rtype: core_pb2.GetNodeResponse
|
||||
:raises grpc.RpcError: when session or node doesn't exist
|
||||
"""
|
||||
request = core_pb2.GetNodeRequest(session=session, id=_id)
|
||||
return self.stub.GetNode(request)
|
||||
|
||||
def edit_node(self, session, _id, position):
|
||||
"""
|
||||
Edit a node, currently only changes position.
|
||||
|
||||
:param int session: session id
|
||||
:param int _id: node id
|
||||
:param core_pb2.Position position: position to set node to
|
||||
:return: response with result of success or failure
|
||||
:rtype: core_pb2.EditNodeResponse
|
||||
:raises grpc.RpcError: when session or node doesn't exist
|
||||
"""
|
||||
request = core_pb2.EditNodeRequest(session=session, id=_id, position=position)
|
||||
return self.stub.EditNode(request)
|
||||
|
||||
def delete_node(self, session, _id):
|
||||
"""
|
||||
Delete node from session.
|
||||
|
||||
:param int session: session id
|
||||
:param int _id: node id
|
||||
:return: response with result of success or failure
|
||||
:rtype: core_pb2.DeleteNodeResponse
|
||||
:raises grpc.RpcError: when session doesn't exist
|
||||
"""
|
||||
request = core_pb2.DeleteNodeRequest(session=session, id=_id)
|
||||
return self.stub.DeleteNode(request)
|
||||
|
||||
def get_node_links(self, session, _id):
|
||||
"""
|
||||
Get current links for a node.
|
||||
|
||||
:param int session: session id
|
||||
:param int _id: node id
|
||||
:return: response with a list of links
|
||||
:rtype: core_pb2.GetNodeLinksResponse
|
||||
:raises grpc.RpcError: when session or node doesn't exist
|
||||
"""
|
||||
request = core_pb2.GetNodeLinksRequest(session=session, id=_id)
|
||||
return self.stub.GetNodeLinks(request)
|
||||
|
||||
def add_link(self, session, node_one, node_two, interface_one=None, interface_two=None, options=None):
|
||||
"""
|
||||
Add a link between nodes.
|
||||
|
||||
:param int session: session id
|
||||
:param int node_one: node one id
|
||||
:param int node_two: node two id
|
||||
:param core_pb2.Interface interface_one: node one interface data
|
||||
:param core_pb2.Interface interface_two: node two interface data
|
||||
:param core_pb2.LinkOptions options: options for link (jitter, bandwidth, etc)
|
||||
:return: response with result of success or failure
|
||||
:rtype: core_pb2.AddLinkResponse
|
||||
:raises grpc.RpcError: when session or one of the nodes don't exist
|
||||
"""
|
||||
link = core_pb2.Link(
|
||||
node_one=node_one, node_two=node_two, type=core_pb2.LINK_WIRED,
|
||||
interface_one=interface_one, interface_two=interface_two, options=options)
|
||||
request = core_pb2.AddLinkRequest(session=session, link=link)
|
||||
return self.stub.AddLink(request)
|
||||
|
||||
def edit_link(self, session, node_one, node_two, options, interface_one=None, interface_two=None):
|
||||
"""
|
||||
Edit a link between nodes.
|
||||
|
||||
:param int session: session id
|
||||
:param int node_one: node one id
|
||||
:param int node_two: node two id
|
||||
:param core_pb2.LinkOptions options: options for link (jitter, bandwidth, etc)
|
||||
:param int interface_one: node one interface id
|
||||
:param int interface_two: node two interface id
|
||||
:return: response with result of success or failure
|
||||
:rtype: core_pb2.EditLinkResponse
|
||||
:raises grpc.RpcError: when session or one of the nodes don't exist
|
||||
"""
|
||||
request = core_pb2.EditLinkRequest(
|
||||
session=session, node_one=node_one, node_two=node_two, options=options,
|
||||
interface_one=interface_one, interface_two=interface_two)
|
||||
return self.stub.EditLink(request)
|
||||
|
||||
def delete_link(self, session, node_one, node_two, interface_one=None, interface_two=None):
|
||||
"""
|
||||
Delete a link between nodes.
|
||||
|
||||
:param int session: session id
|
||||
:param int node_one: node one id
|
||||
:param int node_two: node two id
|
||||
:param int interface_one: node one interface id
|
||||
:param int interface_two: node two interface id
|
||||
:return: response with result of success or failure
|
||||
:rtype: core_pb2.DeleteLinkResponse
|
||||
:raises grpc.RpcError: when session doesn't exist
|
||||
"""
|
||||
request = core_pb2.DeleteLinkRequest(
|
||||
session=session, node_one=node_one, node_two=node_two,
|
||||
interface_one=interface_one, interface_two=interface_two)
|
||||
return self.stub.DeleteLink(request)
|
||||
|
||||
def get_hooks(self, session):
|
||||
"""
|
||||
Get all hook scripts.
|
||||
|
||||
:param int session: session id
|
||||
:return: response with a list of hooks
|
||||
:rtype: core_pb2.GetHooksResponse
|
||||
:raises grpc.RpcError: when session doesn't exist
|
||||
"""
|
||||
request = core_pb2.GetHooksRequest(session=session)
|
||||
return self.stub.GetHooks(request)
|
||||
|
||||
def add_hook(self, session, state, file_name, file_data):
|
||||
"""
|
||||
Add hook scripts.
|
||||
|
||||
:param int session: session id
|
||||
:param core_pb2.SessionState state: state to trigger hook
|
||||
:param str file_name: name of file for hook script
|
||||
:param bytes file_data: hook script contents
|
||||
:return: response with result of success or failure
|
||||
:rtype: core_pb2.AddHookResponse
|
||||
:raises grpc.RpcError: when session doesn't exist
|
||||
"""
|
||||
hook = core_pb2.Hook(state=state, file=file_name, data=file_data)
|
||||
request = core_pb2.AddHookRequest(session=session, hook=hook)
|
||||
return self.stub.AddHook(request)
|
||||
|
||||
def get_mobility_configs(self, session):
|
||||
"""
|
||||
Get all mobility configurations.
|
||||
|
||||
:param int session: session id
|
||||
:return: response with a dict of node ids to mobility configurations
|
||||
:rtype: core_pb2.GetMobilityConfigsResponse
|
||||
:raises grpc.RpcError: when session doesn't exist
|
||||
"""
|
||||
request = core_pb2.GetMobilityConfigsRequest(session=session)
|
||||
return self.stub.GetMobilityConfigs(request)
|
||||
|
||||
def get_mobility_config(self, session, _id):
|
||||
"""
|
||||
Get mobility configuration for a node.
|
||||
|
||||
:param int session: session id
|
||||
:param int _id: node id
|
||||
:return: response with a list of configuration groups
|
||||
:rtype: core_pb2.GetMobilityConfigResponse
|
||||
:raises grpc.RpcError: when session or node doesn't exist
|
||||
"""
|
||||
request = core_pb2.GetMobilityConfigRequest(session=session, id=_id)
|
||||
return self.stub.GetMobilityConfig(request)
|
||||
|
||||
def set_mobility_config(self, session, _id, config):
|
||||
"""
|
||||
Set mobility configuration for a node.
|
||||
|
||||
:param int session: session id
|
||||
:param int _id: node id
|
||||
:param dict[str, str] config: mobility configuration
|
||||
:return: response with result of success or failure
|
||||
:rtype: core_pb2.SetMobilityConfigResponse
|
||||
:raises grpc.RpcError: when session or node doesn't exist
|
||||
"""
|
||||
request = core_pb2.SetMobilityConfigRequest(session=session, id=_id, config=config)
|
||||
return self.stub.SetMobilityConfig(request)
|
||||
|
||||
def mobility_action(self, session, _id, action):
|
||||
"""
|
||||
Send a mobility action for a node.
|
||||
|
||||
:param int session: session id
|
||||
:param int _id: node id
|
||||
:param core_pb2.ServiceAction action: action to take
|
||||
:return: response with result of success or failure
|
||||
:rtype: core_pb2.MobilityActionResponse
|
||||
:raises grpc.RpcError: when session or node doesn't exist
|
||||
"""
|
||||
request = core_pb2.MobilityActionRequest(session=session, id=_id, action=action)
|
||||
return self.stub.MobilityAction(request)
|
||||
|
||||
def get_services(self):
|
||||
"""
|
||||
Get all currently loaded services.
|
||||
|
||||
:return: response with a list of services
|
||||
:rtype: core_pb2.GetServicesResponse
|
||||
"""
|
||||
request = core_pb2.GetServicesRequest()
|
||||
return self.stub.GetServices(request)
|
||||
|
||||
def get_service_defaults(self, session):
|
||||
"""
|
||||
Get default services for different default node models.
|
||||
|
||||
:param int session: session id
|
||||
:return: response with a dict of node model to a list of services
|
||||
:rtype: core_pb2.GetServiceDefaultsResponse
|
||||
:raises grpc.RpcError: when session doesn't exist
|
||||
"""
|
||||
request = core_pb2.GetServiceDefaultsRequest(session=session)
|
||||
return self.stub.GetServiceDefaults(request)
|
||||
|
||||
def set_service_defaults(self, session, service_defaults):
|
||||
"""
|
||||
Set default services for node models.
|
||||
|
||||
:param int session: session id
|
||||
:param dict service_defaults: node models to lists of services
|
||||
:return: response with result of success or failure
|
||||
:rtype: core_pb2.SetServiceDefaultsResponse
|
||||
:raises grpc.RpcError: when session doesn't exist
|
||||
"""
|
||||
defaults = []
|
||||
for node_type in service_defaults:
|
||||
services = service_defaults[node_type]
|
||||
default = core_pb2.ServiceDefaults(node_type=node_type, services=services)
|
||||
defaults.append(default)
|
||||
request = core_pb2.SetServiceDefaultsRequest(session=session, defaults=defaults)
|
||||
return self.stub.SetServiceDefaults(request)
|
||||
|
||||
def get_node_service(self, session, _id, service):
|
||||
"""
|
||||
Get service data for a node.
|
||||
|
||||
:param int session: session id
|
||||
:param int _id: node id
|
||||
:param str service: service name
|
||||
:return: response with node service data
|
||||
:rtype: core_pb2.GetNodeServiceResponse
|
||||
:raises grpc.RpcError: when session or node doesn't exist
|
||||
"""
|
||||
request = core_pb2.GetNodeServiceRequest(session=session, id=_id, service=service)
|
||||
return self.stub.GetNodeService(request)
|
||||
|
||||
def get_node_service_file(self, session, _id, service, file_name):
|
||||
"""
|
||||
Get a service file for a node.
|
||||
|
||||
:param int session: session id
|
||||
:param int _id: node id
|
||||
:param str service: service name
|
||||
:param str file_name: file name to get data for
|
||||
:return: response with file data
|
||||
:rtype: core_pb2.GetNodeServiceFileResponse
|
||||
:raises grpc.RpcError: when session or node doesn't exist
|
||||
"""
|
||||
request = core_pb2.GetNodeServiceFileRequest(session=session, id=_id, service=service, file=file_name)
|
||||
return self.stub.GetNodeServiceFile(request)
|
||||
|
||||
def set_node_service(self, session, _id, service, startup, validate, shutdown):
|
||||
"""
|
||||
Set service data for a node.
|
||||
|
||||
:param int session: session id
|
||||
:param int _id: node id
|
||||
:param str service: service name
|
||||
:param list startup: startup commands
|
||||
:param list validate: validation commands
|
||||
:param list shutdown: shutdown commands
|
||||
:return: response with result of success or failure
|
||||
:rtype: core_pb2.SetNodeServiceResponse
|
||||
:raises grpc.RpcError: when session or node doesn't exist
|
||||
"""
|
||||
request = core_pb2.SetNodeServiceRequest(
|
||||
session=session, id=_id, service=service, startup=startup, validate=validate, shutdown=shutdown)
|
||||
return self.stub.SetNodeService(request)
|
||||
|
||||
def set_node_service_file(self, session, _id, service, file_name, data):
|
||||
"""
|
||||
Set a service file for a node.
|
||||
|
||||
:param int session: session id
|
||||
:param int _id: node id
|
||||
:param str service: service name
|
||||
:param str file_name: file name to save
|
||||
:param bytes data: data to save for file
|
||||
:return: response with result of success or failure
|
||||
:rtype: core_pb2.SetNodeServiceFileResponse
|
||||
:raises grpc.RpcError: when session or node doesn't exist
|
||||
"""
|
||||
request = core_pb2.SetNodeServiceFileRequest(
|
||||
session=session, id=_id, service=service, file=file_name, data=data)
|
||||
return self.stub.SetNodeServiceFile(request)
|
||||
|
||||
def service_action(self, session, _id, service, action):
|
||||
"""
|
||||
Send an action to a service for a node.
|
||||
|
||||
:param int session: session id
|
||||
:param int _id: node id
|
||||
:param str service: service name
|
||||
:param core_pb2.ServiceAction action: action for service (start, stop, restart, validate)
|
||||
:return: response with result of success or failure
|
||||
:rtype: core_pb2.ServiceActionResponse
|
||||
:raises grpc.RpcError: when session or node doesn't exist
|
||||
"""
|
||||
request = core_pb2.ServiceActionRequest(session=session, id=_id, service=service, action=action)
|
||||
return self.stub.ServiceAction(request)
|
||||
|
||||
def get_wlan_config(self, session, _id):
|
||||
"""
|
||||
Get wlan configuration for a node.
|
||||
|
||||
:param int session: session id
|
||||
:param int _id: node id
|
||||
:return: response with a list of configuration groups
|
||||
:rtype: core_pb2.GetWlanConfigResponse
|
||||
:raises grpc.RpcError: when session doesn't exist
|
||||
"""
|
||||
request = core_pb2.GetWlanConfigRequest(session=session, id=_id)
|
||||
return self.stub.GetWlanConfig(request)
|
||||
|
||||
def set_wlan_config(self, session, _id, config):
|
||||
"""
|
||||
Set wlan configuration for a node.
|
||||
|
||||
:param int session: session id
|
||||
:param int _id: node id
|
||||
:param dict[str, str] config: wlan configuration
|
||||
:return: response with result of success or failure
|
||||
:rtype: core_pb2.SetWlanConfigResponse
|
||||
:raises grpc.RpcError: when session doesn't exist
|
||||
"""
|
||||
request = core_pb2.SetWlanConfigRequest(session=session, id=_id, config=config)
|
||||
return self.stub.SetWlanConfig(request)
|
||||
|
||||
def get_emane_config(self, session):
|
||||
"""
|
||||
Get session emane configuration.
|
||||
|
||||
:param int session: session id
|
||||
:return: response with a list of configuration groups
|
||||
:rtype: core_pb2.GetEmaneConfigResponse
|
||||
:raises grpc.RpcError: when session doesn't exist
|
||||
"""
|
||||
request = core_pb2.GetEmaneConfigRequest(session=session)
|
||||
return self.stub.GetEmaneConfig(request)
|
||||
|
||||
def set_emane_config(self, session, config):
|
||||
"""
|
||||
Set session emane configuration.
|
||||
|
||||
:param int session: session id
|
||||
:param dict[str, str] config: emane configuration
|
||||
:return: response with result of success or failure
|
||||
:rtype: core_pb2.SetEmaneConfigResponse
|
||||
:raises grpc.RpcError: when session doesn't exist
|
||||
"""
|
||||
request = core_pb2.SetEmaneConfigRequest(session=session, config=config)
|
||||
return self.stub.SetEmaneConfig(request)
|
||||
|
||||
def get_emane_models(self, session):
|
||||
"""
|
||||
Get session emane models.
|
||||
|
||||
:param int session: session id
|
||||
:return: response with a list of emane models
|
||||
:rtype: core_pb2.GetEmaneModelsResponse
|
||||
:raises grpc.RpcError: when session doesn't exist
|
||||
"""
|
||||
request = core_pb2.GetEmaneModelsRequest(session=session)
|
||||
return self.stub.GetEmaneModels(request)
|
||||
|
||||
def get_emane_model_config(self, session, _id, model, interface_id=-1):
|
||||
"""
|
||||
Get emane model configuration for a node or a node's interface.
|
||||
|
||||
:param int session: session id
|
||||
:param int _id: node id
|
||||
:param str model: emane model name
|
||||
:param int interface_id: node interface id
|
||||
:return: response with a list of configuration groups
|
||||
:rtype: core_pb2.GetEmaneModelConfigResponse
|
||||
:raises grpc.RpcError: when session doesn't exist
|
||||
"""
|
||||
request = core_pb2.GetEmaneModelConfigRequest(session=session, id=_id, model=model, interface=interface_id)
|
||||
return self.stub.GetEmaneModelConfig(request)
|
||||
|
||||
def set_emane_model_config(self, session, _id, model, config, interface_id=-1):
|
||||
"""
|
||||
Set emane model configuration for a node or a node's interface.
|
||||
|
||||
:param int session: session id
|
||||
:param int _id: node id
|
||||
:param str model: emane model name
|
||||
:param dict[str, str] config: emane model configuration
|
||||
:param int interface_id: node interface id
|
||||
:return: response with result of success or failure
|
||||
:rtype: core_pb2.SetEmaneModelConfigResponse
|
||||
:raises grpc.RpcError: when session doesn't exist
|
||||
"""
|
||||
request = core_pb2.SetEmaneModelConfigRequest(
|
||||
session=session, id=_id, model=model, config=config, interface=interface_id)
|
||||
return self.stub.SetEmaneModelConfig(request)
|
||||
|
||||
def get_emane_model_configs(self, session):
|
||||
"""
|
||||
Get all emane model configurations for a session.
|
||||
|
||||
:param int session: session id
|
||||
:return: response with a dictionary of node/interface ids to configurations
|
||||
:rtype: core_pb2.GetEmaneModelConfigsResponse
|
||||
:raises grpc.RpcError: when session doesn't exist
|
||||
"""
|
||||
request = core_pb2.GetEmaneModelConfigsRequest(session=session)
|
||||
return self.stub.GetEmaneModelConfigs(request)
|
||||
|
||||
def save_xml(self, session, file_path):
|
||||
"""
|
||||
Save the current scenario to an XML file.
|
||||
|
||||
:param int session: session id
|
||||
:param str file_path: local path to save scenario XML file to
|
||||
:return: nothing
|
||||
"""
|
||||
request = core_pb2.SaveXmlRequest(session=session)
|
||||
response = self.stub.SaveXml(request)
|
||||
with open(file_path, "wb") as xml_file:
|
||||
xml_file.write(response.data)
|
||||
|
||||
def open_xml(self, file_path):
|
||||
"""
|
||||
Load a local scenario XML file to open as a new session.
|
||||
|
||||
:param str file_path: path of scenario XML file
|
||||
:return: response with opened session id
|
||||
:rtype: core_pb2.OpenXmlResponse
|
||||
"""
|
||||
with open(file_path, "rb") as xml_file:
|
||||
data = xml_file.read()
|
||||
request = core_pb2.OpenXmlRequest(data=data)
|
||||
return self.stub.OpenXml(request)
|
||||
|
||||
def connect(self):
|
||||
"""
|
||||
Open connection to server, must be closed manually.
|
||||
|
||||
:return: nothing
|
||||
"""
|
||||
self.channel = grpc.insecure_channel(self.address)
|
||||
self.stub = core_pb2_grpc.CoreApiStub(self.channel)
|
||||
|
||||
def close(self):
|
||||
"""
|
||||
Close currently opened server channel connection.
|
||||
|
||||
:return: nothing
|
||||
"""
|
||||
if self.channel:
|
||||
self.channel.close()
|
||||
self.channel = None
|
||||
|
||||
@contextmanager
|
||||
def context_connect(self):
|
||||
"""
|
||||
Makes a context manager based connection to the server, will close after context ends.
|
||||
|
||||
:return: nothing
|
||||
"""
|
||||
try:
|
||||
self.connect()
|
||||
yield
|
||||
finally:
|
||||
self.close()
|
6527
daemon/core/api/grpc/core_pb2.py
Normal file
6527
daemon/core/api/grpc/core_pb2.py
Normal file
File diff suppressed because one or more lines are too long
828
daemon/core/api/grpc/core_pb2_grpc.py
Normal file
828
daemon/core/api/grpc/core_pb2_grpc.py
Normal file
|
@ -0,0 +1,828 @@
|
|||
# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
|
||||
import grpc
|
||||
|
||||
import core_pb2 as core__pb2
|
||||
|
||||
|
||||
class CoreApiStub(object):
|
||||
# missing associated documentation comment in .proto file
|
||||
pass
|
||||
|
||||
def __init__(self, channel):
|
||||
"""Constructor.
|
||||
|
||||
Args:
|
||||
channel: A grpc.Channel.
|
||||
"""
|
||||
self.CreateSession = channel.unary_unary(
|
||||
'/core.CoreApi/CreateSession',
|
||||
request_serializer=core__pb2.CreateSessionRequest.SerializeToString,
|
||||
response_deserializer=core__pb2.CreateSessionResponse.FromString,
|
||||
)
|
||||
self.DeleteSession = channel.unary_unary(
|
||||
'/core.CoreApi/DeleteSession',
|
||||
request_serializer=core__pb2.DeleteSessionRequest.SerializeToString,
|
||||
response_deserializer=core__pb2.DeleteSessionResponse.FromString,
|
||||
)
|
||||
self.GetSessions = channel.unary_unary(
|
||||
'/core.CoreApi/GetSessions',
|
||||
request_serializer=core__pb2.GetSessionsRequest.SerializeToString,
|
||||
response_deserializer=core__pb2.GetSessionsResponse.FromString,
|
||||
)
|
||||
self.GetSession = channel.unary_unary(
|
||||
'/core.CoreApi/GetSession',
|
||||
request_serializer=core__pb2.GetSessionRequest.SerializeToString,
|
||||
response_deserializer=core__pb2.GetSessionResponse.FromString,
|
||||
)
|
||||
self.GetSessionOptions = channel.unary_unary(
|
||||
'/core.CoreApi/GetSessionOptions',
|
||||
request_serializer=core__pb2.GetSessionOptionsRequest.SerializeToString,
|
||||
response_deserializer=core__pb2.GetSessionOptionsResponse.FromString,
|
||||
)
|
||||
self.SetSessionOptions = channel.unary_unary(
|
||||
'/core.CoreApi/SetSessionOptions',
|
||||
request_serializer=core__pb2.SetSessionOptionsRequest.SerializeToString,
|
||||
response_deserializer=core__pb2.SetSessionOptionsResponse.FromString,
|
||||
)
|
||||
self.GetSessionLocation = channel.unary_unary(
|
||||
'/core.CoreApi/GetSessionLocation',
|
||||
request_serializer=core__pb2.GetSessionLocationRequest.SerializeToString,
|
||||
response_deserializer=core__pb2.GetSessionLocationResponse.FromString,
|
||||
)
|
||||
self.SetSessionLocation = channel.unary_unary(
|
||||
'/core.CoreApi/SetSessionLocation',
|
||||
request_serializer=core__pb2.SetSessionLocationRequest.SerializeToString,
|
||||
response_deserializer=core__pb2.SetSessionLocationResponse.FromString,
|
||||
)
|
||||
self.SetSessionState = channel.unary_unary(
|
||||
'/core.CoreApi/SetSessionState',
|
||||
request_serializer=core__pb2.SetSessionStateRequest.SerializeToString,
|
||||
response_deserializer=core__pb2.SetSessionStateResponse.FromString,
|
||||
)
|
||||
self.NodeEvents = channel.unary_stream(
|
||||
'/core.CoreApi/NodeEvents',
|
||||
request_serializer=core__pb2.NodeEventsRequest.SerializeToString,
|
||||
response_deserializer=core__pb2.NodeEvent.FromString,
|
||||
)
|
||||
self.LinkEvents = channel.unary_stream(
|
||||
'/core.CoreApi/LinkEvents',
|
||||
request_serializer=core__pb2.LinkEventsRequest.SerializeToString,
|
||||
response_deserializer=core__pb2.LinkEvent.FromString,
|
||||
)
|
||||
self.SessionEvents = channel.unary_stream(
|
||||
'/core.CoreApi/SessionEvents',
|
||||
request_serializer=core__pb2.SessionEventsRequest.SerializeToString,
|
||||
response_deserializer=core__pb2.SessionEvent.FromString,
|
||||
)
|
||||
self.ConfigEvents = channel.unary_stream(
|
||||
'/core.CoreApi/ConfigEvents',
|
||||
request_serializer=core__pb2.ConfigEventsRequest.SerializeToString,
|
||||
response_deserializer=core__pb2.ConfigEvent.FromString,
|
||||
)
|
||||
self.ExceptionEvents = channel.unary_stream(
|
||||
'/core.CoreApi/ExceptionEvents',
|
||||
request_serializer=core__pb2.ExceptionEventsRequest.SerializeToString,
|
||||
response_deserializer=core__pb2.ExceptionEvent.FromString,
|
||||
)
|
||||
self.FileEvents = channel.unary_stream(
|
||||
'/core.CoreApi/FileEvents',
|
||||
request_serializer=core__pb2.FileEventsRequest.SerializeToString,
|
||||
response_deserializer=core__pb2.FileEvent.FromString,
|
||||
)
|
||||
self.AddNode = channel.unary_unary(
|
||||
'/core.CoreApi/AddNode',
|
||||
request_serializer=core__pb2.AddNodeRequest.SerializeToString,
|
||||
response_deserializer=core__pb2.AddNodeResponse.FromString,
|
||||
)
|
||||
self.GetNode = channel.unary_unary(
|
||||
'/core.CoreApi/GetNode',
|
||||
request_serializer=core__pb2.GetNodeRequest.SerializeToString,
|
||||
response_deserializer=core__pb2.GetNodeResponse.FromString,
|
||||
)
|
||||
self.EditNode = channel.unary_unary(
|
||||
'/core.CoreApi/EditNode',
|
||||
request_serializer=core__pb2.EditNodeRequest.SerializeToString,
|
||||
response_deserializer=core__pb2.EditNodeResponse.FromString,
|
||||
)
|
||||
self.DeleteNode = channel.unary_unary(
|
||||
'/core.CoreApi/DeleteNode',
|
||||
request_serializer=core__pb2.DeleteNodeRequest.SerializeToString,
|
||||
response_deserializer=core__pb2.DeleteNodeResponse.FromString,
|
||||
)
|
||||
self.GetNodeLinks = channel.unary_unary(
|
||||
'/core.CoreApi/GetNodeLinks',
|
||||
request_serializer=core__pb2.GetNodeLinksRequest.SerializeToString,
|
||||
response_deserializer=core__pb2.GetNodeLinksResponse.FromString,
|
||||
)
|
||||
self.AddLink = channel.unary_unary(
|
||||
'/core.CoreApi/AddLink',
|
||||
request_serializer=core__pb2.AddLinkRequest.SerializeToString,
|
||||
response_deserializer=core__pb2.AddLinkResponse.FromString,
|
||||
)
|
||||
self.EditLink = channel.unary_unary(
|
||||
'/core.CoreApi/EditLink',
|
||||
request_serializer=core__pb2.EditLinkRequest.SerializeToString,
|
||||
response_deserializer=core__pb2.EditLinkResponse.FromString,
|
||||
)
|
||||
self.DeleteLink = channel.unary_unary(
|
||||
'/core.CoreApi/DeleteLink',
|
||||
request_serializer=core__pb2.DeleteLinkRequest.SerializeToString,
|
||||
response_deserializer=core__pb2.DeleteLinkResponse.FromString,
|
||||
)
|
||||
self.GetHooks = channel.unary_unary(
|
||||
'/core.CoreApi/GetHooks',
|
||||
request_serializer=core__pb2.GetHooksRequest.SerializeToString,
|
||||
response_deserializer=core__pb2.GetHooksResponse.FromString,
|
||||
)
|
||||
self.AddHook = channel.unary_unary(
|
||||
'/core.CoreApi/AddHook',
|
||||
request_serializer=core__pb2.AddHookRequest.SerializeToString,
|
||||
response_deserializer=core__pb2.AddHookResponse.FromString,
|
||||
)
|
||||
self.GetMobilityConfigs = channel.unary_unary(
|
||||
'/core.CoreApi/GetMobilityConfigs',
|
||||
request_serializer=core__pb2.GetMobilityConfigsRequest.SerializeToString,
|
||||
response_deserializer=core__pb2.GetMobilityConfigsResponse.FromString,
|
||||
)
|
||||
self.GetMobilityConfig = channel.unary_unary(
|
||||
'/core.CoreApi/GetMobilityConfig',
|
||||
request_serializer=core__pb2.GetMobilityConfigRequest.SerializeToString,
|
||||
response_deserializer=core__pb2.GetMobilityConfigResponse.FromString,
|
||||
)
|
||||
self.SetMobilityConfig = channel.unary_unary(
|
||||
'/core.CoreApi/SetMobilityConfig',
|
||||
request_serializer=core__pb2.SetMobilityConfigRequest.SerializeToString,
|
||||
response_deserializer=core__pb2.SetMobilityConfigResponse.FromString,
|
||||
)
|
||||
self.MobilityAction = channel.unary_unary(
|
||||
'/core.CoreApi/MobilityAction',
|
||||
request_serializer=core__pb2.MobilityActionRequest.SerializeToString,
|
||||
response_deserializer=core__pb2.MobilityActionResponse.FromString,
|
||||
)
|
||||
self.GetServices = channel.unary_unary(
|
||||
'/core.CoreApi/GetServices',
|
||||
request_serializer=core__pb2.GetServicesRequest.SerializeToString,
|
||||
response_deserializer=core__pb2.GetServicesResponse.FromString,
|
||||
)
|
||||
self.GetServiceDefaults = channel.unary_unary(
|
||||
'/core.CoreApi/GetServiceDefaults',
|
||||
request_serializer=core__pb2.GetServiceDefaultsRequest.SerializeToString,
|
||||
response_deserializer=core__pb2.GetServiceDefaultsResponse.FromString,
|
||||
)
|
||||
self.SetServiceDefaults = channel.unary_unary(
|
||||
'/core.CoreApi/SetServiceDefaults',
|
||||
request_serializer=core__pb2.SetServiceDefaultsRequest.SerializeToString,
|
||||
response_deserializer=core__pb2.SetServiceDefaultsResponse.FromString,
|
||||
)
|
||||
self.GetNodeService = channel.unary_unary(
|
||||
'/core.CoreApi/GetNodeService',
|
||||
request_serializer=core__pb2.GetNodeServiceRequest.SerializeToString,
|
||||
response_deserializer=core__pb2.GetNodeServiceResponse.FromString,
|
||||
)
|
||||
self.GetNodeServiceFile = channel.unary_unary(
|
||||
'/core.CoreApi/GetNodeServiceFile',
|
||||
request_serializer=core__pb2.GetNodeServiceFileRequest.SerializeToString,
|
||||
response_deserializer=core__pb2.GetNodeServiceFileResponse.FromString,
|
||||
)
|
||||
self.SetNodeService = channel.unary_unary(
|
||||
'/core.CoreApi/SetNodeService',
|
||||
request_serializer=core__pb2.SetNodeServiceRequest.SerializeToString,
|
||||
response_deserializer=core__pb2.SetNodeServiceResponse.FromString,
|
||||
)
|
||||
self.SetNodeServiceFile = channel.unary_unary(
|
||||
'/core.CoreApi/SetNodeServiceFile',
|
||||
request_serializer=core__pb2.SetNodeServiceFileRequest.SerializeToString,
|
||||
response_deserializer=core__pb2.SetNodeServiceFileResponse.FromString,
|
||||
)
|
||||
self.ServiceAction = channel.unary_unary(
|
||||
'/core.CoreApi/ServiceAction',
|
||||
request_serializer=core__pb2.ServiceActionRequest.SerializeToString,
|
||||
response_deserializer=core__pb2.ServiceActionResponse.FromString,
|
||||
)
|
||||
self.GetWlanConfig = channel.unary_unary(
|
||||
'/core.CoreApi/GetWlanConfig',
|
||||
request_serializer=core__pb2.GetWlanConfigRequest.SerializeToString,
|
||||
response_deserializer=core__pb2.GetWlanConfigResponse.FromString,
|
||||
)
|
||||
self.SetWlanConfig = channel.unary_unary(
|
||||
'/core.CoreApi/SetWlanConfig',
|
||||
request_serializer=core__pb2.SetWlanConfigRequest.SerializeToString,
|
||||
response_deserializer=core__pb2.SetWlanConfigResponse.FromString,
|
||||
)
|
||||
self.GetEmaneConfig = channel.unary_unary(
|
||||
'/core.CoreApi/GetEmaneConfig',
|
||||
request_serializer=core__pb2.GetEmaneConfigRequest.SerializeToString,
|
||||
response_deserializer=core__pb2.GetEmaneConfigResponse.FromString,
|
||||
)
|
||||
self.SetEmaneConfig = channel.unary_unary(
|
||||
'/core.CoreApi/SetEmaneConfig',
|
||||
request_serializer=core__pb2.SetEmaneConfigRequest.SerializeToString,
|
||||
response_deserializer=core__pb2.SetEmaneConfigResponse.FromString,
|
||||
)
|
||||
self.GetEmaneModels = channel.unary_unary(
|
||||
'/core.CoreApi/GetEmaneModels',
|
||||
request_serializer=core__pb2.GetEmaneModelsRequest.SerializeToString,
|
||||
response_deserializer=core__pb2.GetEmaneModelsResponse.FromString,
|
||||
)
|
||||
self.GetEmaneModelConfig = channel.unary_unary(
|
||||
'/core.CoreApi/GetEmaneModelConfig',
|
||||
request_serializer=core__pb2.GetEmaneModelConfigRequest.SerializeToString,
|
||||
response_deserializer=core__pb2.GetEmaneModelConfigResponse.FromString,
|
||||
)
|
||||
self.SetEmaneModelConfig = channel.unary_unary(
|
||||
'/core.CoreApi/SetEmaneModelConfig',
|
||||
request_serializer=core__pb2.SetEmaneModelConfigRequest.SerializeToString,
|
||||
response_deserializer=core__pb2.SetEmaneModelConfigResponse.FromString,
|
||||
)
|
||||
self.GetEmaneModelConfigs = channel.unary_unary(
|
||||
'/core.CoreApi/GetEmaneModelConfigs',
|
||||
request_serializer=core__pb2.GetEmaneModelConfigsRequest.SerializeToString,
|
||||
response_deserializer=core__pb2.GetEmaneModelConfigsResponse.FromString,
|
||||
)
|
||||
self.SaveXml = channel.unary_unary(
|
||||
'/core.CoreApi/SaveXml',
|
||||
request_serializer=core__pb2.SaveXmlRequest.SerializeToString,
|
||||
response_deserializer=core__pb2.SaveXmlResponse.FromString,
|
||||
)
|
||||
self.OpenXml = channel.unary_unary(
|
||||
'/core.CoreApi/OpenXml',
|
||||
request_serializer=core__pb2.OpenXmlRequest.SerializeToString,
|
||||
response_deserializer=core__pb2.OpenXmlResponse.FromString,
|
||||
)
|
||||
|
||||
|
||||
class CoreApiServicer(object):
|
||||
# missing associated documentation comment in .proto file
|
||||
pass
|
||||
|
||||
def CreateSession(self, request, context):
|
||||
"""session rpc
|
||||
"""
|
||||
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
||||
context.set_details('Method not implemented!')
|
||||
raise NotImplementedError('Method not implemented!')
|
||||
|
||||
def DeleteSession(self, request, context):
|
||||
# missing associated documentation comment in .proto file
|
||||
pass
|
||||
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
||||
context.set_details('Method not implemented!')
|
||||
raise NotImplementedError('Method not implemented!')
|
||||
|
||||
def GetSessions(self, request, context):
|
||||
# missing associated documentation comment in .proto file
|
||||
pass
|
||||
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
||||
context.set_details('Method not implemented!')
|
||||
raise NotImplementedError('Method not implemented!')
|
||||
|
||||
def GetSession(self, request, context):
|
||||
# missing associated documentation comment in .proto file
|
||||
pass
|
||||
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
||||
context.set_details('Method not implemented!')
|
||||
raise NotImplementedError('Method not implemented!')
|
||||
|
||||
def GetSessionOptions(self, request, context):
|
||||
# missing associated documentation comment in .proto file
|
||||
pass
|
||||
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
||||
context.set_details('Method not implemented!')
|
||||
raise NotImplementedError('Method not implemented!')
|
||||
|
||||
def SetSessionOptions(self, request, context):
|
||||
# missing associated documentation comment in .proto file
|
||||
pass
|
||||
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
||||
context.set_details('Method not implemented!')
|
||||
raise NotImplementedError('Method not implemented!')
|
||||
|
||||
def GetSessionLocation(self, request, context):
|
||||
# missing associated documentation comment in .proto file
|
||||
pass
|
||||
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
||||
context.set_details('Method not implemented!')
|
||||
raise NotImplementedError('Method not implemented!')
|
||||
|
||||
def SetSessionLocation(self, request, context):
|
||||
# missing associated documentation comment in .proto file
|
||||
pass
|
||||
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
||||
context.set_details('Method not implemented!')
|
||||
raise NotImplementedError('Method not implemented!')
|
||||
|
||||
def SetSessionState(self, request, context):
|
||||
# missing associated documentation comment in .proto file
|
||||
pass
|
||||
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
||||
context.set_details('Method not implemented!')
|
||||
raise NotImplementedError('Method not implemented!')
|
||||
|
||||
def NodeEvents(self, request, context):
|
||||
"""event streams
|
||||
"""
|
||||
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
||||
context.set_details('Method not implemented!')
|
||||
raise NotImplementedError('Method not implemented!')
|
||||
|
||||
def LinkEvents(self, request, context):
|
||||
# missing associated documentation comment in .proto file
|
||||
pass
|
||||
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
||||
context.set_details('Method not implemented!')
|
||||
raise NotImplementedError('Method not implemented!')
|
||||
|
||||
def SessionEvents(self, request, context):
|
||||
# missing associated documentation comment in .proto file
|
||||
pass
|
||||
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
||||
context.set_details('Method not implemented!')
|
||||
raise NotImplementedError('Method not implemented!')
|
||||
|
||||
def ConfigEvents(self, request, context):
|
||||
# missing associated documentation comment in .proto file
|
||||
pass
|
||||
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
||||
context.set_details('Method not implemented!')
|
||||
raise NotImplementedError('Method not implemented!')
|
||||
|
||||
def ExceptionEvents(self, request, context):
|
||||
# missing associated documentation comment in .proto file
|
||||
pass
|
||||
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
||||
context.set_details('Method not implemented!')
|
||||
raise NotImplementedError('Method not implemented!')
|
||||
|
||||
def FileEvents(self, request, context):
|
||||
# missing associated documentation comment in .proto file
|
||||
pass
|
||||
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
||||
context.set_details('Method not implemented!')
|
||||
raise NotImplementedError('Method not implemented!')
|
||||
|
||||
def AddNode(self, request, context):
|
||||
"""node rpc
|
||||
"""
|
||||
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
||||
context.set_details('Method not implemented!')
|
||||
raise NotImplementedError('Method not implemented!')
|
||||
|
||||
def GetNode(self, request, context):
|
||||
# missing associated documentation comment in .proto file
|
||||
pass
|
||||
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
||||
context.set_details('Method not implemented!')
|
||||
raise NotImplementedError('Method not implemented!')
|
||||
|
||||
def EditNode(self, request, context):
|
||||
# missing associated documentation comment in .proto file
|
||||
pass
|
||||
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
||||
context.set_details('Method not implemented!')
|
||||
raise NotImplementedError('Method not implemented!')
|
||||
|
||||
def DeleteNode(self, request, context):
|
||||
# missing associated documentation comment in .proto file
|
||||
pass
|
||||
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
||||
context.set_details('Method not implemented!')
|
||||
raise NotImplementedError('Method not implemented!')
|
||||
|
||||
def GetNodeLinks(self, request, context):
|
||||
"""link rpc
|
||||
"""
|
||||
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
||||
context.set_details('Method not implemented!')
|
||||
raise NotImplementedError('Method not implemented!')
|
||||
|
||||
def AddLink(self, request, context):
|
||||
# missing associated documentation comment in .proto file
|
||||
pass
|
||||
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
||||
context.set_details('Method not implemented!')
|
||||
raise NotImplementedError('Method not implemented!')
|
||||
|
||||
def EditLink(self, request, context):
|
||||
# missing associated documentation comment in .proto file
|
||||
pass
|
||||
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
||||
context.set_details('Method not implemented!')
|
||||
raise NotImplementedError('Method not implemented!')
|
||||
|
||||
def DeleteLink(self, request, context):
|
||||
# missing associated documentation comment in .proto file
|
||||
pass
|
||||
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
||||
context.set_details('Method not implemented!')
|
||||
raise NotImplementedError('Method not implemented!')
|
||||
|
||||
def GetHooks(self, request, context):
|
||||
"""hook rpc
|
||||
"""
|
||||
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
||||
context.set_details('Method not implemented!')
|
||||
raise NotImplementedError('Method not implemented!')
|
||||
|
||||
def AddHook(self, request, context):
|
||||
# missing associated documentation comment in .proto file
|
||||
pass
|
||||
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
||||
context.set_details('Method not implemented!')
|
||||
raise NotImplementedError('Method not implemented!')
|
||||
|
||||
def GetMobilityConfigs(self, request, context):
|
||||
"""mobility rpc
|
||||
"""
|
||||
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
||||
context.set_details('Method not implemented!')
|
||||
raise NotImplementedError('Method not implemented!')
|
||||
|
||||
def GetMobilityConfig(self, request, context):
|
||||
# missing associated documentation comment in .proto file
|
||||
pass
|
||||
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
||||
context.set_details('Method not implemented!')
|
||||
raise NotImplementedError('Method not implemented!')
|
||||
|
||||
def SetMobilityConfig(self, request, context):
|
||||
# missing associated documentation comment in .proto file
|
||||
pass
|
||||
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
||||
context.set_details('Method not implemented!')
|
||||
raise NotImplementedError('Method not implemented!')
|
||||
|
||||
def MobilityAction(self, request, context):
|
||||
# missing associated documentation comment in .proto file
|
||||
pass
|
||||
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
||||
context.set_details('Method not implemented!')
|
||||
raise NotImplementedError('Method not implemented!')
|
||||
|
||||
def GetServices(self, request, context):
|
||||
"""service rpc
|
||||
"""
|
||||
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
||||
context.set_details('Method not implemented!')
|
||||
raise NotImplementedError('Method not implemented!')
|
||||
|
||||
def GetServiceDefaults(self, request, context):
|
||||
# missing associated documentation comment in .proto file
|
||||
pass
|
||||
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
||||
context.set_details('Method not implemented!')
|
||||
raise NotImplementedError('Method not implemented!')
|
||||
|
||||
def SetServiceDefaults(self, request, context):
|
||||
# missing associated documentation comment in .proto file
|
||||
pass
|
||||
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
||||
context.set_details('Method not implemented!')
|
||||
raise NotImplementedError('Method not implemented!')
|
||||
|
||||
def GetNodeService(self, request, context):
|
||||
# missing associated documentation comment in .proto file
|
||||
pass
|
||||
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
||||
context.set_details('Method not implemented!')
|
||||
raise NotImplementedError('Method not implemented!')
|
||||
|
||||
def GetNodeServiceFile(self, request, context):
|
||||
# missing associated documentation comment in .proto file
|
||||
pass
|
||||
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
||||
context.set_details('Method not implemented!')
|
||||
raise NotImplementedError('Method not implemented!')
|
||||
|
||||
def SetNodeService(self, request, context):
|
||||
# missing associated documentation comment in .proto file
|
||||
pass
|
||||
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
||||
context.set_details('Method not implemented!')
|
||||
raise NotImplementedError('Method not implemented!')
|
||||
|
||||
def SetNodeServiceFile(self, request, context):
|
||||
# missing associated documentation comment in .proto file
|
||||
pass
|
||||
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
||||
context.set_details('Method not implemented!')
|
||||
raise NotImplementedError('Method not implemented!')
|
||||
|
||||
def ServiceAction(self, request, context):
|
||||
# missing associated documentation comment in .proto file
|
||||
pass
|
||||
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
||||
context.set_details('Method not implemented!')
|
||||
raise NotImplementedError('Method not implemented!')
|
||||
|
||||
def GetWlanConfig(self, request, context):
|
||||
"""wlan rpc
|
||||
"""
|
||||
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
||||
context.set_details('Method not implemented!')
|
||||
raise NotImplementedError('Method not implemented!')
|
||||
|
||||
def SetWlanConfig(self, request, context):
|
||||
# missing associated documentation comment in .proto file
|
||||
pass
|
||||
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
||||
context.set_details('Method not implemented!')
|
||||
raise NotImplementedError('Method not implemented!')
|
||||
|
||||
def GetEmaneConfig(self, request, context):
|
||||
"""emane rpc
|
||||
"""
|
||||
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
||||
context.set_details('Method not implemented!')
|
||||
raise NotImplementedError('Method not implemented!')
|
||||
|
||||
def SetEmaneConfig(self, request, context):
|
||||
# missing associated documentation comment in .proto file
|
||||
pass
|
||||
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
||||
context.set_details('Method not implemented!')
|
||||
raise NotImplementedError('Method not implemented!')
|
||||
|
||||
def GetEmaneModels(self, request, context):
|
||||
# missing associated documentation comment in .proto file
|
||||
pass
|
||||
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
||||
context.set_details('Method not implemented!')
|
||||
raise NotImplementedError('Method not implemented!')
|
||||
|
||||
def GetEmaneModelConfig(self, request, context):
|
||||
# missing associated documentation comment in .proto file
|
||||
pass
|
||||
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
||||
context.set_details('Method not implemented!')
|
||||
raise NotImplementedError('Method not implemented!')
|
||||
|
||||
def SetEmaneModelConfig(self, request, context):
|
||||
# missing associated documentation comment in .proto file
|
||||
pass
|
||||
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
||||
context.set_details('Method not implemented!')
|
||||
raise NotImplementedError('Method not implemented!')
|
||||
|
||||
def GetEmaneModelConfigs(self, request, context):
|
||||
# missing associated documentation comment in .proto file
|
||||
pass
|
||||
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
||||
context.set_details('Method not implemented!')
|
||||
raise NotImplementedError('Method not implemented!')
|
||||
|
||||
def SaveXml(self, request, context):
|
||||
"""xml rpc
|
||||
"""
|
||||
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
||||
context.set_details('Method not implemented!')
|
||||
raise NotImplementedError('Method not implemented!')
|
||||
|
||||
def OpenXml(self, request, context):
|
||||
# missing associated documentation comment in .proto file
|
||||
pass
|
||||
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
||||
context.set_details('Method not implemented!')
|
||||
raise NotImplementedError('Method not implemented!')
|
||||
|
||||
|
||||
def add_CoreApiServicer_to_server(servicer, server):
|
||||
rpc_method_handlers = {
|
||||
'CreateSession': grpc.unary_unary_rpc_method_handler(
|
||||
servicer.CreateSession,
|
||||
request_deserializer=core__pb2.CreateSessionRequest.FromString,
|
||||
response_serializer=core__pb2.CreateSessionResponse.SerializeToString,
|
||||
),
|
||||
'DeleteSession': grpc.unary_unary_rpc_method_handler(
|
||||
servicer.DeleteSession,
|
||||
request_deserializer=core__pb2.DeleteSessionRequest.FromString,
|
||||
response_serializer=core__pb2.DeleteSessionResponse.SerializeToString,
|
||||
),
|
||||
'GetSessions': grpc.unary_unary_rpc_method_handler(
|
||||
servicer.GetSessions,
|
||||
request_deserializer=core__pb2.GetSessionsRequest.FromString,
|
||||
response_serializer=core__pb2.GetSessionsResponse.SerializeToString,
|
||||
),
|
||||
'GetSession': grpc.unary_unary_rpc_method_handler(
|
||||
servicer.GetSession,
|
||||
request_deserializer=core__pb2.GetSessionRequest.FromString,
|
||||
response_serializer=core__pb2.GetSessionResponse.SerializeToString,
|
||||
),
|
||||
'GetSessionOptions': grpc.unary_unary_rpc_method_handler(
|
||||
servicer.GetSessionOptions,
|
||||
request_deserializer=core__pb2.GetSessionOptionsRequest.FromString,
|
||||
response_serializer=core__pb2.GetSessionOptionsResponse.SerializeToString,
|
||||
),
|
||||
'SetSessionOptions': grpc.unary_unary_rpc_method_handler(
|
||||
servicer.SetSessionOptions,
|
||||
request_deserializer=core__pb2.SetSessionOptionsRequest.FromString,
|
||||
response_serializer=core__pb2.SetSessionOptionsResponse.SerializeToString,
|
||||
),
|
||||
'GetSessionLocation': grpc.unary_unary_rpc_method_handler(
|
||||
servicer.GetSessionLocation,
|
||||
request_deserializer=core__pb2.GetSessionLocationRequest.FromString,
|
||||
response_serializer=core__pb2.GetSessionLocationResponse.SerializeToString,
|
||||
),
|
||||
'SetSessionLocation': grpc.unary_unary_rpc_method_handler(
|
||||
servicer.SetSessionLocation,
|
||||
request_deserializer=core__pb2.SetSessionLocationRequest.FromString,
|
||||
response_serializer=core__pb2.SetSessionLocationResponse.SerializeToString,
|
||||
),
|
||||
'SetSessionState': grpc.unary_unary_rpc_method_handler(
|
||||
servicer.SetSessionState,
|
||||
request_deserializer=core__pb2.SetSessionStateRequest.FromString,
|
||||
response_serializer=core__pb2.SetSessionStateResponse.SerializeToString,
|
||||
),
|
||||
'NodeEvents': grpc.unary_stream_rpc_method_handler(
|
||||
servicer.NodeEvents,
|
||||
request_deserializer=core__pb2.NodeEventsRequest.FromString,
|
||||
response_serializer=core__pb2.NodeEvent.SerializeToString,
|
||||
),
|
||||
'LinkEvents': grpc.unary_stream_rpc_method_handler(
|
||||
servicer.LinkEvents,
|
||||
request_deserializer=core__pb2.LinkEventsRequest.FromString,
|
||||
response_serializer=core__pb2.LinkEvent.SerializeToString,
|
||||
),
|
||||
'SessionEvents': grpc.unary_stream_rpc_method_handler(
|
||||
servicer.SessionEvents,
|
||||
request_deserializer=core__pb2.SessionEventsRequest.FromString,
|
||||
response_serializer=core__pb2.SessionEvent.SerializeToString,
|
||||
),
|
||||
'ConfigEvents': grpc.unary_stream_rpc_method_handler(
|
||||
servicer.ConfigEvents,
|
||||
request_deserializer=core__pb2.ConfigEventsRequest.FromString,
|
||||
response_serializer=core__pb2.ConfigEvent.SerializeToString,
|
||||
),
|
||||
'ExceptionEvents': grpc.unary_stream_rpc_method_handler(
|
||||
servicer.ExceptionEvents,
|
||||
request_deserializer=core__pb2.ExceptionEventsRequest.FromString,
|
||||
response_serializer=core__pb2.ExceptionEvent.SerializeToString,
|
||||
),
|
||||
'FileEvents': grpc.unary_stream_rpc_method_handler(
|
||||
servicer.FileEvents,
|
||||
request_deserializer=core__pb2.FileEventsRequest.FromString,
|
||||
response_serializer=core__pb2.FileEvent.SerializeToString,
|
||||
),
|
||||
'AddNode': grpc.unary_unary_rpc_method_handler(
|
||||
servicer.AddNode,
|
||||
request_deserializer=core__pb2.AddNodeRequest.FromString,
|
||||
response_serializer=core__pb2.AddNodeResponse.SerializeToString,
|
||||
),
|
||||
'GetNode': grpc.unary_unary_rpc_method_handler(
|
||||
servicer.GetNode,
|
||||
request_deserializer=core__pb2.GetNodeRequest.FromString,
|
||||
response_serializer=core__pb2.GetNodeResponse.SerializeToString,
|
||||
),
|
||||
'EditNode': grpc.unary_unary_rpc_method_handler(
|
||||
servicer.EditNode,
|
||||
request_deserializer=core__pb2.EditNodeRequest.FromString,
|
||||
response_serializer=core__pb2.EditNodeResponse.SerializeToString,
|
||||
),
|
||||
'DeleteNode': grpc.unary_unary_rpc_method_handler(
|
||||
servicer.DeleteNode,
|
||||
request_deserializer=core__pb2.DeleteNodeRequest.FromString,
|
||||
response_serializer=core__pb2.DeleteNodeResponse.SerializeToString,
|
||||
),
|
||||
'GetNodeLinks': grpc.unary_unary_rpc_method_handler(
|
||||
servicer.GetNodeLinks,
|
||||
request_deserializer=core__pb2.GetNodeLinksRequest.FromString,
|
||||
response_serializer=core__pb2.GetNodeLinksResponse.SerializeToString,
|
||||
),
|
||||
'AddLink': grpc.unary_unary_rpc_method_handler(
|
||||
servicer.AddLink,
|
||||
request_deserializer=core__pb2.AddLinkRequest.FromString,
|
||||
response_serializer=core__pb2.AddLinkResponse.SerializeToString,
|
||||
),
|
||||
'EditLink': grpc.unary_unary_rpc_method_handler(
|
||||
servicer.EditLink,
|
||||
request_deserializer=core__pb2.EditLinkRequest.FromString,
|
||||
response_serializer=core__pb2.EditLinkResponse.SerializeToString,
|
||||
),
|
||||
'DeleteLink': grpc.unary_unary_rpc_method_handler(
|
||||
servicer.DeleteLink,
|
||||
request_deserializer=core__pb2.DeleteLinkRequest.FromString,
|
||||
response_serializer=core__pb2.DeleteLinkResponse.SerializeToString,
|
||||
),
|
||||
'GetHooks': grpc.unary_unary_rpc_method_handler(
|
||||
servicer.GetHooks,
|
||||
request_deserializer=core__pb2.GetHooksRequest.FromString,
|
||||
response_serializer=core__pb2.GetHooksResponse.SerializeToString,
|
||||
),
|
||||
'AddHook': grpc.unary_unary_rpc_method_handler(
|
||||
servicer.AddHook,
|
||||
request_deserializer=core__pb2.AddHookRequest.FromString,
|
||||
response_serializer=core__pb2.AddHookResponse.SerializeToString,
|
||||
),
|
||||
'GetMobilityConfigs': grpc.unary_unary_rpc_method_handler(
|
||||
servicer.GetMobilityConfigs,
|
||||
request_deserializer=core__pb2.GetMobilityConfigsRequest.FromString,
|
||||
response_serializer=core__pb2.GetMobilityConfigsResponse.SerializeToString,
|
||||
),
|
||||
'GetMobilityConfig': grpc.unary_unary_rpc_method_handler(
|
||||
servicer.GetMobilityConfig,
|
||||
request_deserializer=core__pb2.GetMobilityConfigRequest.FromString,
|
||||
response_serializer=core__pb2.GetMobilityConfigResponse.SerializeToString,
|
||||
),
|
||||
'SetMobilityConfig': grpc.unary_unary_rpc_method_handler(
|
||||
servicer.SetMobilityConfig,
|
||||
request_deserializer=core__pb2.SetMobilityConfigRequest.FromString,
|
||||
response_serializer=core__pb2.SetMobilityConfigResponse.SerializeToString,
|
||||
),
|
||||
'MobilityAction': grpc.unary_unary_rpc_method_handler(
|
||||
servicer.MobilityAction,
|
||||
request_deserializer=core__pb2.MobilityActionRequest.FromString,
|
||||
response_serializer=core__pb2.MobilityActionResponse.SerializeToString,
|
||||
),
|
||||
'GetServices': grpc.unary_unary_rpc_method_handler(
|
||||
servicer.GetServices,
|
||||
request_deserializer=core__pb2.GetServicesRequest.FromString,
|
||||
response_serializer=core__pb2.GetServicesResponse.SerializeToString,
|
||||
),
|
||||
'GetServiceDefaults': grpc.unary_unary_rpc_method_handler(
|
||||
servicer.GetServiceDefaults,
|
||||
request_deserializer=core__pb2.GetServiceDefaultsRequest.FromString,
|
||||
response_serializer=core__pb2.GetServiceDefaultsResponse.SerializeToString,
|
||||
),
|
||||
'SetServiceDefaults': grpc.unary_unary_rpc_method_handler(
|
||||
servicer.SetServiceDefaults,
|
||||
request_deserializer=core__pb2.SetServiceDefaultsRequest.FromString,
|
||||
response_serializer=core__pb2.SetServiceDefaultsResponse.SerializeToString,
|
||||
),
|
||||
'GetNodeService': grpc.unary_unary_rpc_method_handler(
|
||||
servicer.GetNodeService,
|
||||
request_deserializer=core__pb2.GetNodeServiceRequest.FromString,
|
||||
response_serializer=core__pb2.GetNodeServiceResponse.SerializeToString,
|
||||
),
|
||||
'GetNodeServiceFile': grpc.unary_unary_rpc_method_handler(
|
||||
servicer.GetNodeServiceFile,
|
||||
request_deserializer=core__pb2.GetNodeServiceFileRequest.FromString,
|
||||
response_serializer=core__pb2.GetNodeServiceFileResponse.SerializeToString,
|
||||
),
|
||||
'SetNodeService': grpc.unary_unary_rpc_method_handler(
|
||||
servicer.SetNodeService,
|
||||
request_deserializer=core__pb2.SetNodeServiceRequest.FromString,
|
||||
response_serializer=core__pb2.SetNodeServiceResponse.SerializeToString,
|
||||
),
|
||||
'SetNodeServiceFile': grpc.unary_unary_rpc_method_handler(
|
||||
servicer.SetNodeServiceFile,
|
||||
request_deserializer=core__pb2.SetNodeServiceFileRequest.FromString,
|
||||
response_serializer=core__pb2.SetNodeServiceFileResponse.SerializeToString,
|
||||
),
|
||||
'ServiceAction': grpc.unary_unary_rpc_method_handler(
|
||||
servicer.ServiceAction,
|
||||
request_deserializer=core__pb2.ServiceActionRequest.FromString,
|
||||
response_serializer=core__pb2.ServiceActionResponse.SerializeToString,
|
||||
),
|
||||
'GetWlanConfig': grpc.unary_unary_rpc_method_handler(
|
||||
servicer.GetWlanConfig,
|
||||
request_deserializer=core__pb2.GetWlanConfigRequest.FromString,
|
||||
response_serializer=core__pb2.GetWlanConfigResponse.SerializeToString,
|
||||
),
|
||||
'SetWlanConfig': grpc.unary_unary_rpc_method_handler(
|
||||
servicer.SetWlanConfig,
|
||||
request_deserializer=core__pb2.SetWlanConfigRequest.FromString,
|
||||
response_serializer=core__pb2.SetWlanConfigResponse.SerializeToString,
|
||||
),
|
||||
'GetEmaneConfig': grpc.unary_unary_rpc_method_handler(
|
||||
servicer.GetEmaneConfig,
|
||||
request_deserializer=core__pb2.GetEmaneConfigRequest.FromString,
|
||||
response_serializer=core__pb2.GetEmaneConfigResponse.SerializeToString,
|
||||
),
|
||||
'SetEmaneConfig': grpc.unary_unary_rpc_method_handler(
|
||||
servicer.SetEmaneConfig,
|
||||
request_deserializer=core__pb2.SetEmaneConfigRequest.FromString,
|
||||
response_serializer=core__pb2.SetEmaneConfigResponse.SerializeToString,
|
||||
),
|
||||
'GetEmaneModels': grpc.unary_unary_rpc_method_handler(
|
||||
servicer.GetEmaneModels,
|
||||
request_deserializer=core__pb2.GetEmaneModelsRequest.FromString,
|
||||
response_serializer=core__pb2.GetEmaneModelsResponse.SerializeToString,
|
||||
),
|
||||
'GetEmaneModelConfig': grpc.unary_unary_rpc_method_handler(
|
||||
servicer.GetEmaneModelConfig,
|
||||
request_deserializer=core__pb2.GetEmaneModelConfigRequest.FromString,
|
||||
response_serializer=core__pb2.GetEmaneModelConfigResponse.SerializeToString,
|
||||
),
|
||||
'SetEmaneModelConfig': grpc.unary_unary_rpc_method_handler(
|
||||
servicer.SetEmaneModelConfig,
|
||||
request_deserializer=core__pb2.SetEmaneModelConfigRequest.FromString,
|
||||
response_serializer=core__pb2.SetEmaneModelConfigResponse.SerializeToString,
|
||||
),
|
||||
'GetEmaneModelConfigs': grpc.unary_unary_rpc_method_handler(
|
||||
servicer.GetEmaneModelConfigs,
|
||||
request_deserializer=core__pb2.GetEmaneModelConfigsRequest.FromString,
|
||||
response_serializer=core__pb2.GetEmaneModelConfigsResponse.SerializeToString,
|
||||
),
|
||||
'SaveXml': grpc.unary_unary_rpc_method_handler(
|
||||
servicer.SaveXml,
|
||||
request_deserializer=core__pb2.SaveXmlRequest.FromString,
|
||||
response_serializer=core__pb2.SaveXmlResponse.SerializeToString,
|
||||
),
|
||||
'OpenXml': grpc.unary_unary_rpc_method_handler(
|
||||
servicer.OpenXml,
|
||||
request_deserializer=core__pb2.OpenXmlRequest.FromString,
|
||||
response_serializer=core__pb2.OpenXmlResponse.SerializeToString,
|
||||
),
|
||||
}
|
||||
generic_handler = grpc.method_handlers_generic_handler(
|
||||
'core.CoreApi', rpc_method_handlers)
|
||||
server.add_generic_rpc_handlers((generic_handler,))
|
888
daemon/core/api/grpc/server.py
Normal file
888
daemon/core/api/grpc/server.py
Normal file
|
@ -0,0 +1,888 @@
|
|||
import atexit
|
||||
import logging
|
||||
import os
|
||||
import tempfile
|
||||
import time
|
||||
from Queue import Queue, Empty
|
||||
|
||||
import grpc
|
||||
from concurrent import futures
|
||||
|
||||
from core.emulator.emudata import NodeOptions, InterfaceData, LinkOptions
|
||||
from core.emulator.enumerations import NodeTypes, EventTypes, LinkTypes
|
||||
from core.api.grpc import core_pb2
|
||||
from core.api.grpc import core_pb2_grpc
|
||||
from core.nodes import nodeutils
|
||||
from core.nodes.ipaddress import MacAddress
|
||||
from core.location.mobility import BasicRangeModel, Ns2ScriptedMobility
|
||||
from core.services.coreservices import ServiceManager
|
||||
|
||||
_ONE_DAY_IN_SECONDS = 60 * 60 * 24
|
||||
|
||||
|
||||
def convert_value(value):
|
||||
if value is not None:
|
||||
value = str(value)
|
||||
return value
|
||||
|
||||
|
||||
def get_config_groups(config, configurable_options):
|
||||
groups = []
|
||||
config_options = []
|
||||
|
||||
for configuration in configurable_options.configurations():
|
||||
value = config[configuration.id]
|
||||
config_option = core_pb2.ConfigOption()
|
||||
config_option.label = configuration.label
|
||||
config_option.name = configuration.id
|
||||
config_option.value = value
|
||||
config_option.type = configuration.type.value
|
||||
config_option.select.extend(configuration.options)
|
||||
config_options.append(config_option)
|
||||
|
||||
for config_group in configurable_options.config_groups():
|
||||
start = config_group.start - 1
|
||||
stop = config_group.stop
|
||||
options = config_options[start: stop]
|
||||
config_group_proto = core_pb2.ConfigGroup(name=config_group.name, options=options)
|
||||
groups.append(config_group_proto)
|
||||
|
||||
return groups
|
||||
|
||||
|
||||
def get_links(session, node):
|
||||
links = []
|
||||
for link_data in node.all_link_data(0):
|
||||
link = convert_link(session, link_data)
|
||||
links.append(link)
|
||||
return links
|
||||
|
||||
|
||||
def get_emane_model_id(_id, interface):
|
||||
if interface >= 0:
|
||||
return _id * 1000 + interface
|
||||
else:
|
||||
return _id
|
||||
|
||||
|
||||
def convert_link(session, link_data):
|
||||
interface_one = None
|
||||
if link_data.interface1_id is not None:
|
||||
node = session.get_node(link_data.node1_id)
|
||||
interface = node.netif(link_data.interface1_id)
|
||||
interface_one = core_pb2.Interface(
|
||||
id=link_data.interface1_id, name=interface.name, mac=convert_value(link_data.interface1_mac),
|
||||
ip4=convert_value(link_data.interface1_ip4), ip4mask=link_data.interface1_ip4_mask,
|
||||
ip6=convert_value(link_data.interface1_ip6), ip6mask=link_data.interface1_ip6_mask)
|
||||
|
||||
interface_two = None
|
||||
if link_data.interface2_id is not None:
|
||||
node = session.get_node(link_data.node2_id)
|
||||
interface = node.netif(link_data.interface2_id)
|
||||
interface_two = core_pb2.Interface(
|
||||
id=link_data.interface2_id, name=interface.name, mac=convert_value(link_data.interface2_mac),
|
||||
ip4=convert_value(link_data.interface2_ip4), ip4mask=link_data.interface2_ip4_mask,
|
||||
ip6=convert_value(link_data.interface2_ip6), ip6mask=link_data.interface2_ip6_mask)
|
||||
|
||||
options = core_pb2.LinkOptions(
|
||||
opaque=link_data.opaque,
|
||||
jitter=link_data.jitter,
|
||||
key=link_data.key,
|
||||
mburst=link_data.mburst,
|
||||
mer=link_data.mer,
|
||||
per=link_data.per,
|
||||
bandwidth=link_data.bandwidth,
|
||||
burst=link_data.burst,
|
||||
delay=link_data.delay,
|
||||
dup=link_data.dup,
|
||||
unidirectional=link_data.unidirectional
|
||||
)
|
||||
|
||||
return core_pb2.Link(
|
||||
type=link_data.link_type, node_one=link_data.node1_id, node_two=link_data.node2_id,
|
||||
interface_one=interface_one, interface_two=interface_two, options=options
|
||||
)
|
||||
|
||||
|
||||
class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
||||
def __init__(self, coreemu):
|
||||
super(CoreGrpcServer, self).__init__()
|
||||
self.coreemu = coreemu
|
||||
self.running = True
|
||||
self.server = None
|
||||
atexit.register(self._exit_handler)
|
||||
|
||||
def _exit_handler(self):
|
||||
logging.debug("catching exit, stop running")
|
||||
self.running = False
|
||||
|
||||
def _is_running(self, context):
|
||||
return self.running and context.is_active()
|
||||
|
||||
def _cancel_stream(self, context):
|
||||
context.abort(grpc.StatusCode.CANCELLED, "server stopping")
|
||||
|
||||
def listen(self, address="[::]:50051"):
|
||||
logging.info("starting grpc api: %s", address)
|
||||
self.server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
|
||||
core_pb2_grpc.add_CoreApiServicer_to_server(self, self.server)
|
||||
self.server.add_insecure_port(address)
|
||||
self.server.start()
|
||||
|
||||
try:
|
||||
while True:
|
||||
time.sleep(_ONE_DAY_IN_SECONDS)
|
||||
except KeyboardInterrupt:
|
||||
self.server.stop(None)
|
||||
|
||||
def get_session(self, _id, context):
|
||||
session = self.coreemu.sessions.get(_id)
|
||||
if not session:
|
||||
context.abort(grpc.StatusCode.NOT_FOUND, "session {} not found".format(_id))
|
||||
return session
|
||||
|
||||
def get_node(self, session, _id, context):
|
||||
try:
|
||||
return session.get_node(_id)
|
||||
except KeyError:
|
||||
context.abort(grpc.StatusCode.NOT_FOUND, "node {} not found".format(_id))
|
||||
|
||||
def CreateSession(self, request, context):
|
||||
logging.debug("create session: %s", request)
|
||||
session = self.coreemu.create_session(request.id)
|
||||
session.set_state(EventTypes.DEFINITION_STATE)
|
||||
session.location.setrefgeo(47.57917, -122.13232, 2.0)
|
||||
session.location.refscale = 150000.0
|
||||
return core_pb2.CreateSessionResponse(id=session.id, state=session.state)
|
||||
|
||||
def DeleteSession(self, request, context):
|
||||
logging.debug("delete session: %s", request)
|
||||
result = self.coreemu.delete_session(request.id)
|
||||
return core_pb2.DeleteSessionResponse(result=result)
|
||||
|
||||
def GetSessions(self, request, context):
|
||||
logging.debug("get sessions: %s", request)
|
||||
sessions = []
|
||||
for session_id in self.coreemu.sessions:
|
||||
session = self.coreemu.sessions[session_id]
|
||||
session_summary = core_pb2.SessionSummary(
|
||||
id=session_id, state=session.state, nodes=session.get_node_count())
|
||||
sessions.append(session_summary)
|
||||
return core_pb2.GetSessionsResponse(sessions=sessions)
|
||||
|
||||
def GetSessionLocation(self, request, context):
|
||||
logging.debug("get session location: %s", request)
|
||||
session = self.get_session(request.id, context)
|
||||
x, y, z = session.location.refxyz
|
||||
lat, lon, alt = session.location.refgeo
|
||||
position = core_pb2.Position(x=x, y=y, z=z, lat=lat, lon=lon, alt=alt)
|
||||
return core_pb2.GetSessionLocationResponse(position=position, scale=session.location.refscale)
|
||||
|
||||
def SetSessionLocation(self, request, context):
|
||||
logging.debug("set session location: %s", request)
|
||||
session = self.get_session(request.id, context)
|
||||
session.location.refxyz = (request.position.x, request.position.y, request.position.z)
|
||||
session.location.setrefgeo(request.position.lat, request.position.lon, request.position.alt)
|
||||
session.location.refscale = request.scale
|
||||
return core_pb2.SetSessionLocationResponse(result=True)
|
||||
|
||||
def SetSessionState(self, request, context):
|
||||
logging.debug("set session state: %s", request)
|
||||
session = self.get_session(request.id, context)
|
||||
|
||||
try:
|
||||
state = EventTypes(request.state)
|
||||
session.set_state(state)
|
||||
|
||||
if state == EventTypes.INSTANTIATION_STATE:
|
||||
if not os.path.exists(session.session_dir):
|
||||
os.mkdir(session.session_dir)
|
||||
session.instantiate()
|
||||
elif state == EventTypes.SHUTDOWN_STATE:
|
||||
session.shutdown()
|
||||
elif state == EventTypes.DATACOLLECT_STATE:
|
||||
session.data_collect()
|
||||
elif state == EventTypes.DEFINITION_STATE:
|
||||
session.clear()
|
||||
|
||||
result = True
|
||||
except KeyError:
|
||||
result = False
|
||||
|
||||
return core_pb2.SetSessionStateResponse(result=result)
|
||||
|
||||
def GetSessionOptions(self, request, context):
|
||||
logging.debug("get session options: %s", request)
|
||||
session = self.get_session(request.id, context)
|
||||
config = session.options.get_configs()
|
||||
defaults = session.options.default_values()
|
||||
defaults.update(config)
|
||||
groups = get_config_groups(defaults, session.options)
|
||||
return core_pb2.GetSessionOptionsResponse(groups=groups)
|
||||
|
||||
def SetSessionOptions(self, request, context):
|
||||
logging.debug("set session options: %s", request)
|
||||
session = self.get_session(request.id, context)
|
||||
config = session.options.get_configs()
|
||||
config.update(request.config)
|
||||
return core_pb2.SetSessionOptionsResponse(result=True)
|
||||
|
||||
def GetSession(self, request, context):
|
||||
logging.debug("get session: %s", request)
|
||||
session = self.get_session(request.id, context)
|
||||
|
||||
links = []
|
||||
nodes = []
|
||||
for _id in session.nodes:
|
||||
node = session.nodes[_id]
|
||||
if not isinstance(node.id, int):
|
||||
continue
|
||||
|
||||
node_type = nodeutils.get_node_type(node.__class__).value
|
||||
model = getattr(node, "type", None)
|
||||
position = core_pb2.Position(x=node.position.x, y=node.position.y, z=node.position.z)
|
||||
|
||||
services = getattr(node, "services", [])
|
||||
if services is None:
|
||||
services = []
|
||||
services = [x.name for x in services]
|
||||
|
||||
emane_model = None
|
||||
if nodeutils.is_node(node, NodeTypes.EMANE):
|
||||
emane_model = node.model.name
|
||||
|
||||
node_proto = core_pb2.Node(
|
||||
id=node.id, name=node.name, emane=emane_model, model=model,
|
||||
type=node_type, position=position, services=services)
|
||||
nodes.append(node_proto)
|
||||
|
||||
node_links = get_links(session, node)
|
||||
links.extend(node_links)
|
||||
|
||||
session_proto = core_pb2.Session(state=session.state, nodes=nodes, links=links)
|
||||
return core_pb2.GetSessionResponse(session=session_proto)
|
||||
|
||||
def NodeEvents(self, request, context):
|
||||
session = self.get_session(request.id, context)
|
||||
queue = Queue()
|
||||
session.node_handlers.append(queue.put)
|
||||
|
||||
while self._is_running(context):
|
||||
try:
|
||||
node = queue.get(timeout=1)
|
||||
position = core_pb2.Position(x=node.x_position, y=node.y_position)
|
||||
services = node.services or ""
|
||||
services = services.split("|")
|
||||
node_proto = core_pb2.Node(
|
||||
id=node.id, name=node.name, model=node.model, position=position, services=services)
|
||||
node_event = core_pb2.NodeEvent(node=node_proto)
|
||||
yield node_event
|
||||
except Empty:
|
||||
continue
|
||||
|
||||
self._cancel_stream(context)
|
||||
|
||||
def LinkEvents(self, request, context):
|
||||
session = self.get_session(request.id, context)
|
||||
queue = Queue()
|
||||
session.link_handlers.append(queue.put)
|
||||
|
||||
while self._is_running(context):
|
||||
try:
|
||||
event = queue.get(timeout=1)
|
||||
interface_one = None
|
||||
if event.interface1_id is not None:
|
||||
interface_one = core_pb2.Interface(
|
||||
id=event.interface1_id, name=event.interface1_name, mac=convert_value(event.interface1_mac),
|
||||
ip4=convert_value(event.interface1_ip4), ip4mask=event.interface1_ip4_mask,
|
||||
ip6=convert_value(event.interface1_ip6), ip6mask=event.interface1_ip6_mask)
|
||||
|
||||
interface_two = None
|
||||
if event.interface2_id is not None:
|
||||
interface_two = core_pb2.Interface(
|
||||
id=event.interface2_id, name=event.interface2_name, mac=convert_value(event.interface2_mac),
|
||||
ip4=convert_value(event.interface2_ip4), ip4mask=event.interface2_ip4_mask,
|
||||
ip6=convert_value(event.interface2_ip6), ip6mask=event.interface2_ip6_mask)
|
||||
|
||||
options = core_pb2.LinkOptions(
|
||||
opaque=event.opaque,
|
||||
jitter=event.jitter,
|
||||
key=event.key,
|
||||
mburst=event.mburst,
|
||||
mer=event.mer,
|
||||
per=event.per,
|
||||
bandwidth=event.bandwidth,
|
||||
burst=event.burst,
|
||||
delay=event.delay,
|
||||
dup=event.dup,
|
||||
unidirectional=event.unidirectional
|
||||
)
|
||||
link = core_pb2.Link(
|
||||
type=event.link_type, node_one=event.node1_id, node_two=event.node2_id,
|
||||
interface_one=interface_one, interface_two=interface_two, options=options)
|
||||
link_event = core_pb2.LinkEvent(message_type=event.message_type, link=link)
|
||||
yield link_event
|
||||
except Empty:
|
||||
continue
|
||||
|
||||
self._cancel_stream(context)
|
||||
|
||||
def SessionEvents(self, request, context):
|
||||
session = self.get_session(request.id, context)
|
||||
queue = Queue()
|
||||
session.event_handlers.append(queue.put)
|
||||
|
||||
while self._is_running(context):
|
||||
try:
|
||||
event = queue.get(timeout=1)
|
||||
event_time = event.time
|
||||
if event_time is not None:
|
||||
event_time = float(event_time)
|
||||
session_event = core_pb2.SessionEvent(
|
||||
node=event.node,
|
||||
event=event.event_type,
|
||||
name=event.name,
|
||||
data=event.data,
|
||||
time=event_time,
|
||||
session=session.id
|
||||
)
|
||||
yield session_event
|
||||
except Empty:
|
||||
continue
|
||||
|
||||
self._cancel_stream(context)
|
||||
|
||||
def ConfigEvents(self, request, context):
|
||||
session = self.get_session(request.id, context)
|
||||
queue = Queue()
|
||||
session.config_handlers.append(queue.put)
|
||||
|
||||
while self._is_running(context):
|
||||
try:
|
||||
event = queue.get(timeout=1)
|
||||
config_event = core_pb2.ConfigEvent(
|
||||
message_type=event.message_type,
|
||||
node=event.node,
|
||||
object=event.object,
|
||||
type=event.type,
|
||||
captions=event.captions,
|
||||
bitmap=event.bitmap,
|
||||
data_values=event.data_values,
|
||||
possible_values=event.possible_values,
|
||||
groups=event.groups,
|
||||
session=event.session,
|
||||
interface=event.interface_number,
|
||||
network_id=event.network_id,
|
||||
opaque=event.opaque,
|
||||
data_types=event.data_types
|
||||
)
|
||||
yield config_event
|
||||
except Empty:
|
||||
continue
|
||||
|
||||
self._cancel_stream(context)
|
||||
|
||||
def ExceptionEvents(self, request, context):
|
||||
session = self.get_session(request.id, context)
|
||||
queue = Queue()
|
||||
session.exception_handlers.append(queue.put)
|
||||
|
||||
while self._is_running(context):
|
||||
try:
|
||||
event = queue.get(timeout=1)
|
||||
exception_event = core_pb2.ExceptionEvent(
|
||||
node=event.node,
|
||||
session=int(event.session),
|
||||
level=event.level.value,
|
||||
source=event.source,
|
||||
date=event.date,
|
||||
text=event.text,
|
||||
opaque=event.opaque
|
||||
)
|
||||
yield exception_event
|
||||
except Empty:
|
||||
continue
|
||||
|
||||
self._cancel_stream(context)
|
||||
|
||||
def FileEvents(self, request, context):
|
||||
session = self.get_session(request.id, context)
|
||||
queue = Queue()
|
||||
session.file_handlers.append(queue.put)
|
||||
|
||||
while self._is_running(context):
|
||||
try:
|
||||
event = queue.get(timeout=1)
|
||||
file_event = core_pb2.FileEvent(
|
||||
message_type=event.message_type,
|
||||
node=event.node,
|
||||
name=event.name,
|
||||
mode=event.mode,
|
||||
number=event.number,
|
||||
type=event.type,
|
||||
source=event.source,
|
||||
session=event.session,
|
||||
data=event.data,
|
||||
compressed_data=event.compressed_data
|
||||
)
|
||||
yield file_event
|
||||
except Empty:
|
||||
continue
|
||||
|
||||
self._cancel_stream(context)
|
||||
|
||||
def AddNode(self, request, context):
|
||||
logging.debug("add node: %s", request)
|
||||
session = self.get_session(request.session, context)
|
||||
|
||||
node_proto = request.node
|
||||
node_id = node_proto.id
|
||||
node_type = node_proto.type
|
||||
if node_type is None:
|
||||
node_type = NodeTypes.DEFAULT.value
|
||||
node_type = NodeTypes(node_type)
|
||||
|
||||
node_options = NodeOptions(name=node_proto.name, model=node_proto.model)
|
||||
node_options.icon = node_proto.icon
|
||||
node_options.opaque = node_proto.opaque
|
||||
node_options.services = node_proto.services
|
||||
|
||||
position = node_proto.position
|
||||
node_options.set_position(position.x, position.y)
|
||||
node_options.set_location(position.lat, position.lon, position.alt)
|
||||
node = session.add_node(_type=node_type, _id=node_id, node_options=node_options)
|
||||
|
||||
# configure emane if provided
|
||||
emane_model = node_proto.emane
|
||||
if emane_model:
|
||||
session.emane.set_model_config(node_id, emane_model)
|
||||
|
||||
return core_pb2.AddNodeResponse(id=node.id)
|
||||
|
||||
def GetNode(self, request, context):
|
||||
logging.debug("get node: %s", request)
|
||||
session = self.get_session(request.session, context)
|
||||
node = self.get_node(session, request.id, context)
|
||||
|
||||
interfaces = []
|
||||
for interface_id, interface in node._netif.iteritems():
|
||||
net_id = None
|
||||
if interface.net:
|
||||
net_id = interface.net.id
|
||||
interface_proto = core_pb2.Interface(
|
||||
id=interface_id, netid=net_id, name=interface.name, mac=str(interface.hwaddr),
|
||||
mtu=interface.mtu, flowid=interface.flow_id)
|
||||
interfaces.append(interface_proto)
|
||||
|
||||
emane_model = None
|
||||
if nodeutils.is_node(node, NodeTypes.EMANE):
|
||||
emane_model = node.model.name
|
||||
|
||||
services = [x.name for x in getattr(node, "services", [])]
|
||||
position = core_pb2.Position(x=node.position.x, y=node.position.y, z=node.position.z)
|
||||
node_type = nodeutils.get_node_type(node.__class__).value
|
||||
node = core_pb2.Node(
|
||||
id=node.id, name=node.name, type=node_type, emane=emane_model, model=node.type, position=position,
|
||||
services=services)
|
||||
|
||||
return core_pb2.GetNodeResponse(node=node, interfaces=interfaces)
|
||||
|
||||
def EditNode(self, request, context):
|
||||
logging.debug("edit node: %s", request)
|
||||
session = self.get_session(request.session, context)
|
||||
node_id = request.id
|
||||
node_options = NodeOptions()
|
||||
x = request.position.x
|
||||
y = request.position.y
|
||||
node_options.set_position(x, y)
|
||||
lat = request.position.lat
|
||||
lon = request.position.lon
|
||||
alt = request.position.alt
|
||||
node_options.set_location(lat, lon, alt)
|
||||
result = session.update_node(node_id, node_options)
|
||||
return core_pb2.EditNodeResponse(result=result)
|
||||
|
||||
def DeleteNode(self, request, context):
|
||||
logging.debug("delete node: %s", request)
|
||||
session = self.get_session(request.session, context)
|
||||
result = session.delete_node(request.id)
|
||||
return core_pb2.DeleteNodeResponse(result=result)
|
||||
|
||||
def GetNodeLinks(self, request, context):
|
||||
logging.debug("get node links: %s", request)
|
||||
session = self.get_session(request.session, context)
|
||||
node = self.get_node(session, request.id, context)
|
||||
links = get_links(session, node)
|
||||
return core_pb2.GetNodeLinksResponse(links=links)
|
||||
|
||||
def AddLink(self, request, context):
|
||||
logging.debug("add link: %s", request)
|
||||
session = self.get_session(request.session, context)
|
||||
|
||||
# validate node exist
|
||||
self.get_node(session, request.link.node_one, context)
|
||||
self.get_node(session, request.link.node_two, context)
|
||||
node_one = request.link.node_one
|
||||
node_two = request.link.node_two
|
||||
|
||||
interface_one = None
|
||||
interface_one_data = request.link.interface_one
|
||||
if interface_one_data:
|
||||
name = interface_one_data.name
|
||||
if name == "":
|
||||
name = None
|
||||
mac = interface_one_data.mac
|
||||
if mac == "":
|
||||
mac = None
|
||||
else:
|
||||
mac = MacAddress.from_string(mac)
|
||||
interface_one = InterfaceData(
|
||||
_id=interface_one_data.id,
|
||||
name=name,
|
||||
mac=mac,
|
||||
ip4=interface_one_data.ip4,
|
||||
ip4_mask=interface_one_data.ip4mask,
|
||||
ip6=interface_one_data.ip6,
|
||||
ip6_mask=interface_one_data.ip6mask,
|
||||
)
|
||||
|
||||
interface_two = None
|
||||
interface_two_data = request.link.interface_two
|
||||
if interface_two_data:
|
||||
name = interface_two_data.name
|
||||
if name == "":
|
||||
name = None
|
||||
mac = interface_two_data.mac
|
||||
if mac == "":
|
||||
mac = None
|
||||
else:
|
||||
mac = MacAddress.from_string(mac)
|
||||
interface_two = InterfaceData(
|
||||
_id=interface_two_data.id,
|
||||
name=name,
|
||||
mac=mac,
|
||||
ip4=interface_two_data.ip4,
|
||||
ip4_mask=interface_two_data.ip4mask,
|
||||
ip6=interface_two_data.ip6,
|
||||
ip6_mask=interface_two_data.ip6mask,
|
||||
)
|
||||
|
||||
link_type = None
|
||||
link_type_value = request.link.type
|
||||
if link_type_value is not None:
|
||||
link_type = LinkTypes(link_type_value)
|
||||
|
||||
options_data = request.link.options
|
||||
link_options = LinkOptions(_type=link_type)
|
||||
if options_data:
|
||||
link_options.delay = options_data.delay
|
||||
link_options.bandwidth = options_data.bandwidth
|
||||
link_options.per = options_data.per
|
||||
link_options.dup = options_data.dup
|
||||
link_options.jitter = options_data.jitter
|
||||
link_options.mer = options_data.mer
|
||||
link_options.burst = options_data.burst
|
||||
link_options.mburst = options_data.mburst
|
||||
link_options.unidirectional = options_data.unidirectional
|
||||
link_options.key = options_data.key
|
||||
link_options.opaque = options_data.opaque
|
||||
|
||||
session.add_link(node_one, node_two, interface_one, interface_two, link_options=link_options)
|
||||
return core_pb2.AddLinkResponse(result=True)
|
||||
|
||||
def EditLink(self, request, context):
|
||||
logging.debug("edit link: %s", request)
|
||||
session = self.get_session(request.session, context)
|
||||
node_one = request.node_one
|
||||
node_two = request.node_two
|
||||
interface_one_id = request.interface_one
|
||||
interface_two_id = request.interface_two
|
||||
options_data = request.options
|
||||
link_options = LinkOptions()
|
||||
link_options.delay = options_data.delay
|
||||
link_options.bandwidth = options_data.bandwidth
|
||||
link_options.per = options_data.per
|
||||
link_options.dup = options_data.dup
|
||||
link_options.jitter = options_data.jitter
|
||||
link_options.mer = options_data.mer
|
||||
link_options.burst = options_data.burst
|
||||
link_options.mburst = options_data.mburst
|
||||
link_options.unidirectional = options_data.unidirectional
|
||||
link_options.key = options_data.key
|
||||
link_options.opaque = options_data.opaque
|
||||
session.update_link(node_one, node_two, interface_one_id, interface_two_id, link_options)
|
||||
return core_pb2.EditLinkResponse(result=True)
|
||||
|
||||
def DeleteLink(self, request, context):
|
||||
logging.debug("delete link: %s", request)
|
||||
session = self.get_session(request.session, context)
|
||||
node_one = request.node_one
|
||||
node_two = request.node_two
|
||||
interface_one = request.interface_one
|
||||
interface_two = request.interface_two
|
||||
session.delete_link(node_one, node_two, interface_one, interface_two)
|
||||
return core_pb2.DeleteLinkResponse(result=True)
|
||||
|
||||
def GetHooks(self, request, context):
|
||||
logging.debug("get hooks: %s", request)
|
||||
session = self.get_session(request.session, context)
|
||||
hooks = []
|
||||
for state, state_hooks in session._hooks.iteritems():
|
||||
for file_name, file_data in state_hooks:
|
||||
hook = core_pb2.Hook(state=state, file=file_name, data=file_data)
|
||||
hooks.append(hook)
|
||||
return core_pb2.GetHooksResponse(hooks=hooks)
|
||||
|
||||
def AddHook(self, request, context):
|
||||
logging.debug("add hook: %s", request)
|
||||
session = self.get_session(request.session, context)
|
||||
hook = request.hook
|
||||
session.add_hook(hook.state, hook.file, None, hook.data)
|
||||
return core_pb2.AddHookResponse(result=True)
|
||||
|
||||
def GetMobilityConfigs(self, request, context):
|
||||
logging.debug("get mobility configs: %s", request)
|
||||
session = self.get_session(request.session, context)
|
||||
response = core_pb2.GetMobilityConfigsResponse()
|
||||
for node_id, model_config in session.mobility.node_configurations.iteritems():
|
||||
if node_id == -1:
|
||||
continue
|
||||
for model_name in model_config.iterkeys():
|
||||
if model_name != Ns2ScriptedMobility.name:
|
||||
continue
|
||||
config = session.mobility.get_model_config(node_id, model_name)
|
||||
groups = get_config_groups(config, Ns2ScriptedMobility)
|
||||
response.configs[node_id].groups.extend(groups)
|
||||
return response
|
||||
|
||||
def GetMobilityConfig(self, request, context):
|
||||
logging.debug("get mobility config: %s", request)
|
||||
session = self.get_session(request.session, context)
|
||||
config = session.mobility.get_model_config(request.id, Ns2ScriptedMobility.name)
|
||||
groups = get_config_groups(config, Ns2ScriptedMobility)
|
||||
return core_pb2.GetMobilityConfigResponse(groups=groups)
|
||||
|
||||
def SetMobilityConfig(self, request, context):
|
||||
logging.debug("set mobility config: %s", request)
|
||||
session = self.get_session(request.session, context)
|
||||
session.mobility.set_model_config(request.id, Ns2ScriptedMobility.name, request.config)
|
||||
return core_pb2.SetMobilityConfigResponse(result=True)
|
||||
|
||||
def MobilityAction(self, request, context):
|
||||
logging.debug("mobility action: %s", request)
|
||||
session = self.get_session(request.session, context)
|
||||
node = self.get_node(session, request.id, context)
|
||||
result = True
|
||||
if request.action == core_pb2.MOBILITY_START:
|
||||
node.mobility.start()
|
||||
elif request.action == core_pb2.MOBILITY_PAUSE:
|
||||
node.mobility.pause()
|
||||
elif request.action == core_pb2.MOBILITY_STOP:
|
||||
node.mobility.stop(move_initial=True)
|
||||
else:
|
||||
result = False
|
||||
return core_pb2.MobilityActionResponse(result=result)
|
||||
|
||||
def GetServices(self, request, context):
|
||||
logging.debug("get services: %s", request)
|
||||
services = []
|
||||
for service in ServiceManager.services.itervalues():
|
||||
service_proto = core_pb2.Service(group=service.group, name=service.name)
|
||||
services.append(service_proto)
|
||||
return core_pb2.GetServicesResponse(services=services)
|
||||
|
||||
def GetServiceDefaults(self, request, context):
|
||||
logging.debug("get service defaults: %s", request)
|
||||
session = self.get_session(request.session, context)
|
||||
all_service_defaults = []
|
||||
for node_type in session.services.default_services:
|
||||
services = session.services.default_services[node_type]
|
||||
service_defaults = core_pb2.ServiceDefaults(node_type=node_type, services=services)
|
||||
all_service_defaults.append(service_defaults)
|
||||
return core_pb2.GetServiceDefaultsResponse(defaults=all_service_defaults)
|
||||
|
||||
def SetServiceDefaults(self, request, context):
|
||||
logging.debug("set service defaults: %s", request)
|
||||
session = self.get_session(request.session, context)
|
||||
session.services.default_services.clear()
|
||||
for service_defaults in request.defaults:
|
||||
session.services.default_services[service_defaults.node_type] = service_defaults.services
|
||||
return core_pb2.SetServiceDefaultsResponse(result=True)
|
||||
|
||||
def GetNodeService(self, request, context):
|
||||
logging.debug("get node service: %s", request)
|
||||
session = self.get_session(request.session, context)
|
||||
service = session.services.get_service(request.id, request.service, default_service=True)
|
||||
service_proto = core_pb2.NodeServiceData(
|
||||
executables=service.executables,
|
||||
dependencies=service.dependencies,
|
||||
dirs=service.dirs,
|
||||
configs=service.configs,
|
||||
startup=service.startup,
|
||||
validate=service.validate,
|
||||
validation_mode=service.validation_mode.value,
|
||||
validation_timer=service.validation_timer,
|
||||
shutdown=service.shutdown,
|
||||
meta=service.meta
|
||||
)
|
||||
return core_pb2.GetNodeServiceResponse(service=service_proto)
|
||||
|
||||
def GetNodeServiceFile(self, request, context):
|
||||
logging.debug("get node service file: %s", request)
|
||||
session = self.get_session(request.session, context)
|
||||
node = self.get_node(session, request.id, context)
|
||||
service = None
|
||||
for current_service in node.services:
|
||||
if current_service.name == request.service:
|
||||
service = current_service
|
||||
break
|
||||
if not service:
|
||||
context.abort(grpc.StatusCode.NOT_FOUND, "service not found")
|
||||
file_data = session.services.get_service_file(node, request.service, request.file)
|
||||
return core_pb2.GetNodeServiceFileResponse(data=file_data.data)
|
||||
|
||||
def SetNodeService(self, request, context):
|
||||
logging.debug("set node service: %s", request)
|
||||
session = self.get_session(request.session, context)
|
||||
session.services.set_service(request.id, request.service)
|
||||
service = session.services.get_service(request.id, request.service)
|
||||
service.startup = tuple(request.startup)
|
||||
service.validate = tuple(request.validate)
|
||||
service.shutdown = tuple(request.shutdown)
|
||||
return core_pb2.SetNodeServiceResponse(result=True)
|
||||
|
||||
def SetNodeServiceFile(self, request, context):
|
||||
logging.debug("set node service file: %s", request)
|
||||
session = self.get_session(request.session, context)
|
||||
session.services.set_service_file(request.id, request.service, request.file, request.data)
|
||||
return core_pb2.SetNodeServiceFileResponse(result=True)
|
||||
|
||||
def ServiceAction(self, request, context):
|
||||
logging.debug("service action: %s", request)
|
||||
session = self.get_session(request.session, context)
|
||||
node = self.get_node(session, request.id, context)
|
||||
service = None
|
||||
for current_service in node.services:
|
||||
if current_service.name == request.service:
|
||||
service = current_service
|
||||
break
|
||||
|
||||
if not service:
|
||||
context.abort(grpc.StatusCode.NOT_FOUND, "service not found")
|
||||
|
||||
status = -1
|
||||
if request.action == core_pb2.SERVICE_START:
|
||||
status = session.services.startup_service(node, service, wait=True)
|
||||
elif request.action == core_pb2.SERVICE_STOP:
|
||||
status = session.services.stop_service(node, service)
|
||||
elif request.action == core_pb2.SERVICE_RESTART:
|
||||
status = session.services.stop_service(node, service)
|
||||
if not status:
|
||||
status = session.services.startup_service(node, service, wait=True)
|
||||
elif request.action == core_pb2.SERVICE_VALIDATE:
|
||||
status = session.services.validate_service(node, service)
|
||||
|
||||
result = False
|
||||
if not status:
|
||||
result = True
|
||||
|
||||
return core_pb2.ServiceActionResponse(result=result)
|
||||
|
||||
def GetWlanConfig(self, request, context):
|
||||
logging.debug("get wlan config: %s", request)
|
||||
session = self.get_session(request.session, context)
|
||||
config = session.mobility.get_model_config(request.id, BasicRangeModel.name)
|
||||
groups = get_config_groups(config, BasicRangeModel)
|
||||
return core_pb2.GetWlanConfigResponse(groups=groups)
|
||||
|
||||
def SetWlanConfig(self, request, context):
|
||||
logging.debug("set wlan config: %s", request)
|
||||
session = self.get_session(request.session, context)
|
||||
session.mobility.set_model_config(request.id, BasicRangeModel.name, request.config)
|
||||
return core_pb2.SetWlanConfigResponse(result=True)
|
||||
|
||||
def GetEmaneConfig(self, request, context):
|
||||
logging.debug("get emane config: %s", request)
|
||||
session = self.get_session(request.session, context)
|
||||
config = session.emane.get_configs()
|
||||
groups = get_config_groups(config, session.emane.emane_config)
|
||||
return core_pb2.GetEmaneConfigResponse(groups=groups)
|
||||
|
||||
def SetEmaneConfig(self, request, context):
|
||||
logging.debug("set emane config: %s", request)
|
||||
session = self.get_session(request.session, context)
|
||||
config = session.emane.get_configs()
|
||||
config.update(request.config)
|
||||
return core_pb2.SetEmaneConfigResponse(result=True)
|
||||
|
||||
def GetEmaneModels(self, request, context):
|
||||
logging.debug("get emane models: %s", request)
|
||||
session = self.get_session(request.session, context)
|
||||
models = []
|
||||
for model in session.emane.models.keys():
|
||||
if len(model.split("_")) != 2:
|
||||
continue
|
||||
models.append(model)
|
||||
return core_pb2.GetEmaneModelsResponse(models=models)
|
||||
|
||||
def GetEmaneModelConfig(self, request, context):
|
||||
logging.debug("get emane model config: %s", request)
|
||||
session = self.get_session(request.session, context)
|
||||
model = session.emane.models[request.model]
|
||||
_id = get_emane_model_id(request.id, request.interface)
|
||||
config = session.emane.get_model_config(_id, request.model)
|
||||
groups = get_config_groups(config, model)
|
||||
return core_pb2.GetEmaneModelConfigResponse(groups=groups)
|
||||
|
||||
def SetEmaneModelConfig(self, request, context):
|
||||
logging.debug("set emane model config: %s", request)
|
||||
session = self.get_session(request.session, context)
|
||||
_id = get_emane_model_id(request.id, request.interface)
|
||||
session.emane.set_model_config(_id, request.model, request.config)
|
||||
return core_pb2.SetEmaneModelConfigResponse(result=True)
|
||||
|
||||
def GetEmaneModelConfigs(self, request, context):
|
||||
logging.debug("get emane model configs: %s", request)
|
||||
session = self.get_session(request.session, context)
|
||||
response = core_pb2.GetEmaneModelConfigsResponse()
|
||||
for node_id, model_config in session.emane.node_configurations.iteritems():
|
||||
if node_id == -1:
|
||||
continue
|
||||
|
||||
for model_name in model_config.iterkeys():
|
||||
model = session.emane.models[model_name]
|
||||
config = session.emane.get_model_config(node_id, model_name)
|
||||
config_groups = get_config_groups(config, model)
|
||||
node_configurations = response.configs[node_id]
|
||||
node_configurations.model = model_name
|
||||
node_configurations.groups.extend(config_groups)
|
||||
return response
|
||||
|
||||
def SaveXml(self, request, context):
|
||||
logging.debug("save xml: %s", request)
|
||||
session = self.get_session(request.session, context)
|
||||
|
||||
_, temp_path = tempfile.mkstemp()
|
||||
session.save_xml(temp_path)
|
||||
|
||||
with open(temp_path, "rb") as xml_file:
|
||||
data = xml_file.read()
|
||||
|
||||
return core_pb2.SaveXmlResponse(data=data)
|
||||
|
||||
def OpenXml(self, request, context):
|
||||
logging.debug("open xml: %s", request)
|
||||
session = self.coreemu.create_session()
|
||||
session.set_state(EventTypes.CONFIGURATION_STATE)
|
||||
|
||||
_, temp_path = tempfile.mkstemp()
|
||||
with open(temp_path, "wb") as xml_file:
|
||||
xml_file.write(request.data)
|
||||
|
||||
try:
|
||||
session.open_xml(temp_path, start=True)
|
||||
return core_pb2.OpenXmlResponse(session=session.id, result=True)
|
||||
except IOError:
|
||||
logging.exception("error opening session file")
|
||||
self.coreemu.delete_session(session.id)
|
||||
context.abort(grpc.StatusCode.INVALID_ARGUMENT, "invalid xml file")
|
Loading…
Add table
Add a link
Reference in a new issue