Merge branch 'develop' into coretk
This commit is contained in:
commit
597342248b
13 changed files with 687 additions and 301 deletions
|
@ -35,12 +35,27 @@ _INTERFACE_REGEX = re.compile(r"\d+")
|
|||
|
||||
|
||||
def convert_value(value):
|
||||
"""
|
||||
Convert value into string.
|
||||
|
||||
:param value: value
|
||||
:return: string conversion of the value
|
||||
:rtype: str
|
||||
"""
|
||||
if value is not None:
|
||||
value = str(value)
|
||||
return value
|
||||
|
||||
|
||||
def get_config_groups(config, configurable_options):
|
||||
"""
|
||||
Retrieve configuration groups in a form that is used by the grpc server
|
||||
|
||||
:param core.config.Configuration config: configuration
|
||||
:param core.config.ConfigurableOptions configurable_options: configurable options
|
||||
:return: list of configuration groups
|
||||
:rtype: [core.api.grpc.core_pb2.ConfigGroup]
|
||||
"""
|
||||
groups = []
|
||||
config_options = []
|
||||
|
||||
|
@ -67,6 +82,13 @@ def get_config_groups(config, configurable_options):
|
|||
|
||||
|
||||
def get_links(session, node):
|
||||
"""
|
||||
Retrieve a list of links for grpc to use
|
||||
|
||||
:param core.emulator.Session session: node's section
|
||||
:param core.nodes.base.CoreNode node: node to get links from
|
||||
:return: [core.api.grpc.core_pb2.Link]
|
||||
"""
|
||||
links = []
|
||||
for link_data in node.all_link_data(0):
|
||||
link = convert_link(session, link_data)
|
||||
|
@ -75,6 +97,14 @@ def get_links(session, node):
|
|||
|
||||
|
||||
def get_emane_model_id(node_id, interface_id):
|
||||
"""
|
||||
Get EMANE model id
|
||||
|
||||
:param int node_id: node id
|
||||
:param int interface_id: interface id
|
||||
:return: EMANE model id
|
||||
:rtype: int
|
||||
"""
|
||||
if interface_id >= 0:
|
||||
return node_id * 1000 + interface_id
|
||||
else:
|
||||
|
@ -82,6 +112,14 @@ def get_emane_model_id(node_id, interface_id):
|
|||
|
||||
|
||||
def convert_link(session, link_data):
|
||||
"""
|
||||
Convert link_data into core protobuf Link
|
||||
|
||||
:param core.emulator.session.Session session:
|
||||
:param core.emulator.data.LinkData link_data:
|
||||
:return: core protobuf Link
|
||||
:rtype: core.api.grpc.core_pb2.Link
|
||||
"""
|
||||
interface_one = None
|
||||
if link_data.interface1_id is not None:
|
||||
node = session.get_node(link_data.node1_id)
|
||||
|
@ -141,6 +179,12 @@ def convert_link(session, link_data):
|
|||
|
||||
|
||||
def get_net_stats():
|
||||
"""
|
||||
Retrieve status about the current interfaces in the system
|
||||
|
||||
:return: send and receive status of the interfaces in the system
|
||||
:rtype: dict
|
||||
"""
|
||||
with open("/proc/net/dev", "r") as f:
|
||||
data = f.readlines()[2:]
|
||||
|
||||
|
@ -157,6 +201,12 @@ def get_net_stats():
|
|||
|
||||
|
||||
class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
||||
"""
|
||||
Create CoreGrpcServer instance
|
||||
|
||||
:param core.emulator.coreemu.CoreEmu coreemu: coreemu object
|
||||
"""
|
||||
|
||||
def __init__(self, coreemu):
|
||||
super(CoreGrpcServer, self).__init__()
|
||||
self.coreemu = coreemu
|
||||
|
@ -188,6 +238,14 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
self.server.stop(None)
|
||||
|
||||
def get_session(self, session_id, context):
|
||||
"""
|
||||
Retrieve session given the session id
|
||||
|
||||
:param int session_id: session id
|
||||
:param grpc.ServicerContext context:
|
||||
:return: session object that satisfies. If session not found then raise an exception.
|
||||
:rtype: core.emulator.session.Session
|
||||
"""
|
||||
session = self.coreemu.sessions.get(session_id)
|
||||
if not session:
|
||||
context.abort(
|
||||
|
@ -196,6 +254,15 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
return session
|
||||
|
||||
def get_node(self, session, node_id, context):
|
||||
"""
|
||||
Retrieve node given session and node id
|
||||
|
||||
:param core.emulator.session.Session session: session that has the node
|
||||
:param int node_id: node id
|
||||
:param grpc.ServicerContext context:
|
||||
:return: node object that satisfies. If node not found then raise an exception.
|
||||
:rtype: core.nodes.base.CoreNode
|
||||
"""
|
||||
try:
|
||||
return session.get_node(node_id)
|
||||
except CoreError:
|
||||
|
@ -204,6 +271,14 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
)
|
||||
|
||||
def CreateSession(self, request, context):
|
||||
"""
|
||||
Create a session
|
||||
|
||||
:param core.api.grpc.core_pb2.CreateSessionRequest request: create-session request
|
||||
:param grpc.ServicerContext context:
|
||||
:return: a create-session response
|
||||
:rtype: core.api.grpc.core_pb2.CreateSessionResponse
|
||||
"""
|
||||
logging.debug("create session: %s", request)
|
||||
session = self.coreemu.create_session(request.session_id)
|
||||
session.set_state(EventTypes.DEFINITION_STATE)
|
||||
|
@ -214,11 +289,27 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
)
|
||||
|
||||
def DeleteSession(self, request, context):
|
||||
"""
|
||||
Delete the session
|
||||
|
||||
:param core.api.grpc.core_pb2.DeleteSessionRequest request: delete-session request
|
||||
:param grpc.ServicerContext context: context object
|
||||
:return: a delete-session response
|
||||
:rtype: core.api.grpc.core_pb2.DeleteSessionResponse
|
||||
"""
|
||||
logging.debug("delete session: %s", request)
|
||||
result = self.coreemu.delete_session(request.session_id)
|
||||
return core_pb2.DeleteSessionResponse(result=result)
|
||||
|
||||
def GetSessions(self, request, context):
|
||||
"""
|
||||
Delete the session
|
||||
|
||||
:param core.api.grpc.core_pb2.GetSessionRequest request: get-session request
|
||||
:param grpc.ServicerContext context: context object
|
||||
:return: a delete-session response
|
||||
:rtype: core.api.grpc.core_pb2.DeleteSessionResponse
|
||||
"""
|
||||
logging.debug("get sessions: %s", request)
|
||||
sessions = []
|
||||
for session_id in self.coreemu.sessions:
|
||||
|
@ -230,6 +321,14 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
return core_pb2.GetSessionsResponse(sessions=sessions)
|
||||
|
||||
def GetSessionLocation(self, request, context):
|
||||
"""
|
||||
Retrieve a requested session location
|
||||
|
||||
:param core.api.grpc.core_pb2.GetSessionLocationRequest request: get-session-location request
|
||||
:param grpc.ServicerContext context: context object
|
||||
:return: a get-session-location response
|
||||
:rtype: core.api.grpc.core_pb2.GetSessionLocationResponse
|
||||
"""
|
||||
logging.debug("get session location: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
x, y, z = session.location.refxyz
|
||||
|
@ -240,6 +339,14 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
)
|
||||
|
||||
def SetSessionLocation(self, request, context):
|
||||
"""
|
||||
Set session location
|
||||
|
||||
:param core.api.grpc.core_pb2.SetSessionLocationRequest request: set-session-location request
|
||||
:param grpc.ServicerContext context: context object
|
||||
:return: a set-session-location-response
|
||||
:rtype: core.api.grpc.core_pb2.SetSessionLocationResponse
|
||||
"""
|
||||
logging.debug("set session location: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
session.location.refxyz = (
|
||||
|
@ -254,6 +361,14 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
return core_pb2.SetSessionLocationResponse(result=True)
|
||||
|
||||
def SetSessionState(self, request, context):
|
||||
"""
|
||||
Set session state
|
||||
|
||||
:param core.api.grpc.core_pb2.SetSessionStateRequest request: set-session-state request
|
||||
:param grpc.ServicerContext context:context object
|
||||
:return: set-session-state response
|
||||
:rtype: core.api.grpc.core_pb2.SetSessionStateResponse
|
||||
"""
|
||||
logging.debug("set session state: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
|
||||
|
@ -279,6 +394,14 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
return core_pb2.SetSessionStateResponse(result=result)
|
||||
|
||||
def GetSessionOptions(self, request, context):
|
||||
"""
|
||||
Retrieve session options
|
||||
|
||||
:param core.api.grpc.core_pb2.GetSessionOptions request: get-session-options request
|
||||
:param grpc.ServicerContext context: context object
|
||||
:return: get-session-options response about all session's options
|
||||
:rtype: core.api.grpc.core_pb2.GetSessionOptions
|
||||
"""
|
||||
logging.debug("get session options: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
config = session.options.get_configs()
|
||||
|
@ -288,6 +411,14 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
return core_pb2.GetSessionOptionsResponse(groups=groups)
|
||||
|
||||
def SetSessionOptions(self, request, context):
|
||||
"""
|
||||
Update a session's configuration
|
||||
|
||||
:param core.api.grpc.core_pb2.SetSessionOptions request: set-session-options request
|
||||
:param grpc.ServicerContext context: context object
|
||||
:return: set-session-options response
|
||||
:rtype: core.api.grpc.core_pb2.SetSessionOptionsResponse
|
||||
"""
|
||||
logging.debug("set session options: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
config = session.options.get_configs()
|
||||
|
@ -295,6 +426,14 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
return core_pb2.SetSessionOptionsResponse(result=True)
|
||||
|
||||
def GetSession(self, request, context):
|
||||
"""
|
||||
Retrieve requested session
|
||||
|
||||
:param core.api.grpc.core_pb2.GetSessionRequest request: get-session request
|
||||
:param grpc.ServicerContext context: context object
|
||||
:return: get-session response
|
||||
:rtype: core.api.grpc.core_bp2.GetSessionResponse
|
||||
"""
|
||||
logging.debug("get session: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
|
||||
|
@ -384,6 +523,13 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
self._cancel_stream(context)
|
||||
|
||||
def _handle_node_event(self, event):
|
||||
"""
|
||||
Handle node event when there is a node event
|
||||
|
||||
:param core.emulator.data.NodeData event: node data
|
||||
:return: node event that contains node id, name, model, position, and services
|
||||
:rtype: core.api.grpc.core_pb2.NodeEvent
|
||||
"""
|
||||
position = core_pb2.Position(x=event.x_position, y=event.y_position)
|
||||
services = event.services or ""
|
||||
services = services.split("|")
|
||||
|
@ -397,6 +543,13 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
return core_pb2.NodeEvent(node=node_proto)
|
||||
|
||||
def _handle_link_event(self, event):
|
||||
"""
|
||||
Handle link event when there is a link event
|
||||
|
||||
:param core.emulator.data.LinkData event: link data
|
||||
:return: link event that has message type and link information
|
||||
:rtype: core.api.grpc.core_pb2.LinkEvent
|
||||
"""
|
||||
interface_one = None
|
||||
if event.interface1_id is not None:
|
||||
interface_one = core_pb2.Interface(
|
||||
|
@ -445,6 +598,13 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
return core_pb2.LinkEvent(message_type=event.message_type, link=link)
|
||||
|
||||
def _handle_session_event(self, event):
|
||||
"""
|
||||
Handle session event when there is a session event
|
||||
|
||||
:param core.emulator.data.EventData event: event data
|
||||
:return: session event
|
||||
:rtype: core.api.grpc.core_pb2.SessionEvent
|
||||
"""
|
||||
event_time = event.time
|
||||
if event_time is not None:
|
||||
event_time = float(event_time)
|
||||
|
@ -458,6 +618,13 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
)
|
||||
|
||||
def _handle_config_event(self, event):
|
||||
"""
|
||||
Handle configuration event when there is configuration event
|
||||
|
||||
:param core.emulator.data.ConfigData event: configuration data
|
||||
:return: configuration event
|
||||
:rtype: core.api.grpc.core_pb2.ConfigEvent
|
||||
"""
|
||||
session_id = None
|
||||
if event.session is not None:
|
||||
session_id = int(event.session)
|
||||
|
@ -479,6 +646,13 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
)
|
||||
|
||||
def _handle_exception_event(self, event):
|
||||
"""
|
||||
Handle exception event when there is exception event
|
||||
|
||||
:param core.emulator.data.ExceptionData event: exception data
|
||||
:return: exception event
|
||||
:rtype: core.api.grpc.core_pb2.ExceptionEvent
|
||||
"""
|
||||
return core_pb2.ExceptionEvent(
|
||||
node_id=event.node,
|
||||
session_id=int(event.session),
|
||||
|
@ -490,6 +664,13 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
)
|
||||
|
||||
def _handle_file_event(self, event):
|
||||
"""
|
||||
Handle file event
|
||||
|
||||
:param core.emulator.data.FileData event: file data
|
||||
:return: file event
|
||||
:rtype: core.api.grpc.core_pb2.FileEvent
|
||||
"""
|
||||
return core_pb2.FileEvent(
|
||||
message_type=event.message_type,
|
||||
node_id=event.node,
|
||||
|
@ -504,6 +685,13 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
)
|
||||
|
||||
def Throughputs(self, request, context):
|
||||
"""
|
||||
Calculate average throughput after every certain amount of delay time
|
||||
|
||||
:param core.api.grpc.core_pb2.ThroughputsRequest request: throughputs request
|
||||
:param grpc.SrevicerContext context: context object
|
||||
:return: nothing
|
||||
"""
|
||||
delay = 3
|
||||
last_check = None
|
||||
last_stats = None
|
||||
|
@ -555,6 +743,14 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
time.sleep(delay)
|
||||
|
||||
def AddNode(self, request, context):
|
||||
"""
|
||||
Add node to requested session
|
||||
|
||||
:param core.api.grpc.core_pb2.AddNodeRequest request: add-node request
|
||||
:param grpc.ServicerContext context: context object
|
||||
:return: add-node response
|
||||
:rtype: core.api.grpc.core_pb2.AddNodeResponse
|
||||
"""
|
||||
logging.debug("add node: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
|
||||
|
@ -584,6 +780,14 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
return core_pb2.AddNodeResponse(node_id=node.id)
|
||||
|
||||
def GetNode(self, request, context):
|
||||
"""
|
||||
Retrieve node
|
||||
|
||||
:param core.api.grpc.core_pb2.GetNodeRequest request: get-node request
|
||||
:param grpc.ServicerContext context: context object
|
||||
:return: get-node response
|
||||
:rtype: core.api.grpc.core_pb2.GetNodeResponse
|
||||
"""
|
||||
logging.debug("get node: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
node = self.get_node(session, request.node_id, context)
|
||||
|
@ -628,6 +832,14 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
return core_pb2.GetNodeResponse(node=node_proto, interfaces=interfaces)
|
||||
|
||||
def EditNode(self, request, context):
|
||||
"""
|
||||
Edit node
|
||||
|
||||
:param core.api.grpc.core_bp2.EditNodeRequest request: edit-node request
|
||||
:param grpc.ServicerContext context: context object
|
||||
:return: edit-node response
|
||||
:rtype: core.api.grpc.core_pb2.EditNodeResponse
|
||||
"""
|
||||
logging.debug("edit node: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
node_id = request.node_id
|
||||
|
@ -647,12 +859,26 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
return core_pb2.EditNodeResponse(result=result)
|
||||
|
||||
def DeleteNode(self, request, context):
|
||||
"""
|
||||
Delete node
|
||||
|
||||
:param core.api.grpc.core_pb2.DeleteNodeRequest request: delete-node request
|
||||
:param grpc.ServicerContext context: context object
|
||||
:return: core.api.grpc.core_pb2.DeleteNodeResponse
|
||||
"""
|
||||
logging.debug("delete node: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
result = session.delete_node(request.node_id)
|
||||
return core_pb2.DeleteNodeResponse(result=result)
|
||||
|
||||
def NodeCommand(self, request, context):
|
||||
"""
|
||||
Run command on a node
|
||||
|
||||
:param core.api.grpc.core_pb2.NodeCommandRequest request: node-command request
|
||||
:param grpc.ServicerContext context: context object
|
||||
:return: core.api.grpc.core_pb2.NodeCommandResponse
|
||||
"""
|
||||
logging.debug("sending node command: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
node = self.get_node(session, request.node_id, context)
|
||||
|
@ -660,6 +886,14 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
return core_pb2.NodeCommandResponse(output=output)
|
||||
|
||||
def GetNodeTerminal(self, request, context):
|
||||
"""
|
||||
Retrieve terminal command string of a node
|
||||
|
||||
:param core.api.grpc.core_pb2.GetNodeTerminalRequest request: get-node-terminal request
|
||||
:param grpc.ServicerContext context: context object
|
||||
:return: get-node-terminal response
|
||||
:rtype: core.api.grpc.core_bp2.GetNodeTerminalResponse
|
||||
"""
|
||||
logging.debug("getting node terminal: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
node = self.get_node(session, request.node_id, context)
|
||||
|
@ -667,6 +901,14 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
return core_pb2.GetNodeTerminalResponse(terminal=terminal)
|
||||
|
||||
def GetNodeLinks(self, request, context):
|
||||
"""
|
||||
Retrieve all links form a requested node
|
||||
|
||||
:param core.api.grpc.core_pb2.GetNodeLinksRequest request: get-node-links request
|
||||
:param grpc.ServicerContext context: context object
|
||||
:return: get-node-links response
|
||||
:rtype: core.api.grpc.core_pb2.GetNodeLinksResponse
|
||||
"""
|
||||
logging.debug("get node links: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
node = self.get_node(session, request.node_id, context)
|
||||
|
@ -674,6 +916,14 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
return core_pb2.GetNodeLinksResponse(links=links)
|
||||
|
||||
def AddLink(self, request, context):
|
||||
"""
|
||||
Add link to a session
|
||||
|
||||
:param core.api.grpc.core_pb2.AddLinkRequest request: add-link request
|
||||
:param grpc.ServicerContext context: context object
|
||||
:return: add-link response
|
||||
:rtype: core.api.grpc.AddLinkResponse
|
||||
"""
|
||||
logging.debug("add link: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
|
||||
|
@ -755,6 +1005,14 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
return core_pb2.AddLinkResponse(result=True)
|
||||
|
||||
def EditLink(self, request, context):
|
||||
"""
|
||||
Edit a link
|
||||
|
||||
:param core.api.grpc.core_pb2.EditLinkRequest request: edit-link request
|
||||
:param grpc.ServicerContext context: context object
|
||||
:return: edit-link response
|
||||
:rtype: core.api.grpc.core_pb2.EditLinkResponse
|
||||
"""
|
||||
logging.debug("edit link: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
node_one_id = request.node_one_id
|
||||
|
@ -780,6 +1038,14 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
return core_pb2.EditLinkResponse(result=True)
|
||||
|
||||
def DeleteLink(self, request, context):
|
||||
"""
|
||||
Delete a link
|
||||
|
||||
:param core.api.grpc.core_pb2.DeleteLinkRequest request: delete-link request
|
||||
:param grpc.ServicerContext context: context object
|
||||
:return: delete-link response
|
||||
:rtype: core.api.grpc.core_pb2.DeleteLinkResponse
|
||||
"""
|
||||
logging.debug("delete link: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
node_one_id = request.node_one_id
|
||||
|
@ -792,6 +1058,14 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
return core_pb2.DeleteLinkResponse(result=True)
|
||||
|
||||
def GetHooks(self, request, context):
|
||||
"""
|
||||
Retrieve all hooks from a session
|
||||
|
||||
:param core.api.grpc.core_pb2.GetHooksRequest request: get-hook request
|
||||
:param grpc.ServicerContext context: context object
|
||||
:return: get-hooks response about all the hooks in all session states
|
||||
:rtype: core.api.grpc.core_pb2.GetHooksResponse
|
||||
"""
|
||||
logging.debug("get hooks: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
hooks = []
|
||||
|
@ -803,6 +1077,14 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
return core_pb2.GetHooksResponse(hooks=hooks)
|
||||
|
||||
def AddHook(self, request, context):
|
||||
"""
|
||||
Add hook to a session
|
||||
|
||||
:param core.api.grpc.core_pb2.AddHookRequest request: add-hook request
|
||||
:param grpc.ServicerContext context: context object
|
||||
:return: add-hook response
|
||||
:rtype: core.api.grpc.core_pb2.AddHookResponse
|
||||
"""
|
||||
logging.debug("add hook: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
hook = request.hook
|
||||
|
@ -810,6 +1092,14 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
return core_pb2.AddHookResponse(result=True)
|
||||
|
||||
def GetMobilityConfigs(self, request, context):
|
||||
"""
|
||||
Retrieve all mobility configurations from a session
|
||||
|
||||
:param core.api.grpc.core_pb2.GetMobilityConfigsRequest request: get-mobility-configurations request
|
||||
:param grpc.ServicerContext context: context object
|
||||
:return: get-mobility-configurations response that has a list of configurations
|
||||
:rtype: core.api.grpc.core_pb2.GetMobilityConfigsResponse
|
||||
"""
|
||||
logging.debug("get mobility configs: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
response = core_pb2.GetMobilityConfigsResponse()
|
||||
|
@ -826,6 +1116,14 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
return response
|
||||
|
||||
def GetMobilityConfig(self, request, context):
|
||||
"""
|
||||
Retrieve mobility configuration of a node
|
||||
|
||||
:param core.api.grpc.core_pb2.GetMobilityConfigRequest request: get-mobility-configuration request
|
||||
:param grpc.ServicerContext context: context object
|
||||
:return: get-mobility-configuration response
|
||||
:rtype: core.api.grpc.core_pb2.GetMobilityConfigResponse
|
||||
"""
|
||||
logging.debug("get mobility config: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
config = session.mobility.get_model_config(
|
||||
|
@ -835,6 +1133,14 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
return core_pb2.GetMobilityConfigResponse(groups=groups)
|
||||
|
||||
def SetMobilityConfig(self, request, context):
|
||||
"""
|
||||
Set mobility configuration of a node
|
||||
|
||||
:param core.api.grpc.core_pb2.SetMobilityConfigRequest request: set-mobility-configuration request
|
||||
:param grpc.ServicerContext context: context object
|
||||
:return: set-mobility-configuration response
|
||||
"rtype" core.api.grpc.SetMobilityConfigResponse
|
||||
"""
|
||||
logging.debug("set mobility config: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
session.mobility.set_model_config(
|
||||
|
@ -843,6 +1149,14 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
return core_pb2.SetMobilityConfigResponse(result=True)
|
||||
|
||||
def MobilityAction(self, request, context):
|
||||
"""
|
||||
Take mobility action whether to start, pause, stop or none of those
|
||||
|
||||
:param core.api.grpc.core_pb2.MobilityActionRequest request: mobility-action request
|
||||
:param grpc.ServicerContext context: context object
|
||||
:return: mobility-action response
|
||||
:rtype: core.api.grpc.core_pb2.MobilityActionResponse
|
||||
"""
|
||||
logging.debug("mobility action: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
node = self.get_node(session, request.node_id, context)
|
||||
|
@ -858,6 +1172,14 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
return core_pb2.MobilityActionResponse(result=result)
|
||||
|
||||
def GetServices(self, request, context):
|
||||
"""
|
||||
Retrieve all the services that are running
|
||||
|
||||
:param core.api.grpc.core_pb2.GetServicesRequest request: get-service request
|
||||
:param grpc.ServicerContext context: context object
|
||||
:return: get-services response
|
||||
:rtype: core.api.grpc.core_pb2.GetServicesResponse
|
||||
"""
|
||||
logging.debug("get services: %s", request)
|
||||
services = []
|
||||
for name in ServiceManager.services:
|
||||
|
@ -867,6 +1189,14 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
return core_pb2.GetServicesResponse(services=services)
|
||||
|
||||
def GetServiceDefaults(self, request, context):
|
||||
"""
|
||||
Retrieve all the default services of all node types in a session
|
||||
|
||||
:param core.api.grpc.core_pb2.GetServiceDefaultsRequest request: get-default-service request
|
||||
:param grpc.ServicerContext context: context object
|
||||
:return: get-service-defaults response about all the available default services
|
||||
:rtype: core.api.grpc.core_pb2.GetServiceDefaultsResponse
|
||||
"""
|
||||
logging.debug("get service defaults: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
all_service_defaults = []
|
||||
|
@ -879,6 +1209,13 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
return core_pb2.GetServiceDefaultsResponse(defaults=all_service_defaults)
|
||||
|
||||
def SetServiceDefaults(self, request, context):
|
||||
"""
|
||||
Set new default services to the session after whipping out the old ones
|
||||
:param core.api.grpc.core_pb2.SetServiceDefaults request: set-service-defaults request
|
||||
:param grpc.ServicerContext context: context object
|
||||
:return: set-service-defaults response
|
||||
:rtype: core.api.grpc.core_pb2 SetServiceDefaultsResponse
|
||||
"""
|
||||
logging.debug("set service defaults: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
session.services.default_services.clear()
|
||||
|
@ -889,6 +1226,14 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
return core_pb2.SetServiceDefaultsResponse(result=True)
|
||||
|
||||
def GetNodeService(self, request, context):
|
||||
"""
|
||||
Retrieve a requested service from a node
|
||||
|
||||
:param core.api.grpc.core_pb2.GetNodeServiceRequest request: get-node-service request
|
||||
:param grpc.ServicerContext context: context object
|
||||
:return: get-node-service response about the requested service
|
||||
:rtype: core.api.grpc.core_pb2.GetNodeServiceResponse
|
||||
"""
|
||||
logging.debug("get node service: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
service = session.services.get_service(
|
||||
|
@ -909,6 +1254,14 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
return core_pb2.GetNodeServiceResponse(service=service_proto)
|
||||
|
||||
def GetNodeServiceFile(self, request, context):
|
||||
"""
|
||||
Retrieve a requested service file from a node
|
||||
|
||||
:param core.api.grpc.core_pb2.GetNodeServiceFileRequest request: get-node-service request
|
||||
:param grpc.ServicerContext context: context object
|
||||
:return: get-node-service response about the requested service
|
||||
:rtype: core.api.grpc.core_pb2.GetNodeServiceFileResponse
|
||||
"""
|
||||
logging.debug("get node service file: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
node = self.get_node(session, request.node_id, context)
|
||||
|
@ -925,6 +1278,15 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
return core_pb2.GetNodeServiceFileResponse(data=file_data.data)
|
||||
|
||||
def SetNodeService(self, request, context):
|
||||
"""
|
||||
Set a node service for a node
|
||||
|
||||
:param core.api.grpc.core_pb2.SetNodeServiceRequest request: set-node-service request
|
||||
that has info to set a node service
|
||||
:param grpc.ServicerContext context: context object
|
||||
:return: set-node-service response
|
||||
:rtype: core.api.grpc.core_pb2.SetNodeServiceResponse
|
||||
"""
|
||||
logging.debug("set node service: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
session.services.set_service(request.node_id, request.service)
|
||||
|
@ -935,6 +1297,14 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
return core_pb2.SetNodeServiceResponse(result=True)
|
||||
|
||||
def SetNodeServiceFile(self, request, context):
|
||||
"""
|
||||
Store the customized service file in the service config
|
||||
|
||||
:param core.api.grpc.core_pb2.SetNodeServiceFileRequest request: set-node-service-file request
|
||||
:param grpc.ServicerContext context: context object
|
||||
:return: set-node-service-file response
|
||||
:rtype: core.api.grpc.core_pb2.SetNodeServiceFileResponse
|
||||
"""
|
||||
logging.debug("set node service file: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
session.services.set_service_file(
|
||||
|
@ -943,6 +1313,14 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
return core_pb2.SetNodeServiceFileResponse(result=True)
|
||||
|
||||
def ServiceAction(self, request, context):
|
||||
"""
|
||||
Take action whether to start, stop, restart, validate the service or none of the above
|
||||
|
||||
:param core.api.grpc.core_pb2.ServiceActionRequest request: service-action request
|
||||
:param grpcServicerContext context: context object
|
||||
:return: service-action response about status of action
|
||||
:rtype: core.api.grpc.core_pb2.ServiceActionResponse
|
||||
"""
|
||||
logging.debug("service action: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
node = self.get_node(session, request.node_id, context)
|
||||
|
@ -974,6 +1352,14 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
return core_pb2.ServiceActionResponse(result=result)
|
||||
|
||||
def GetWlanConfig(self, request, context):
|
||||
"""
|
||||
Retrieve wireless-lan configuration of a node
|
||||
|
||||
:param core.api.grpc.core_pb2.GetWlanConfigRequest request: get-wlan-configuration request
|
||||
:param context: core.api.grpc.core_pb2.GetWlanConfigResponse
|
||||
:return: get-wlan-configuration response about the wlan configuration of a node
|
||||
:rtype: core.api.grpc.core_pb2.GetWlanConfigResponse
|
||||
"""
|
||||
logging.debug("get wlan config: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
config = session.mobility.get_model_config(
|
||||
|
@ -983,6 +1369,14 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
return core_pb2.GetWlanConfigResponse(groups=groups)
|
||||
|
||||
def SetWlanConfig(self, request, context):
|
||||
"""
|
||||
Set configuration data for a model
|
||||
|
||||
:param core.api.grpc.core_pb2.SetWlanConfigRequest request: set-wlan-configuration request
|
||||
:param grpc.ServicerContext context: context object
|
||||
:return: set-wlan-configuration response
|
||||
:rtype: core.api.grpc.core_pb2.SetWlanConfigResponse
|
||||
"""
|
||||
logging.debug("set wlan config: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
session.mobility.set_model_config(
|
||||
|
@ -994,6 +1388,14 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
return core_pb2.SetWlanConfigResponse(result=True)
|
||||
|
||||
def GetEmaneConfig(self, request, context):
|
||||
"""
|
||||
Retrieve EMANE configuration of a session
|
||||
|
||||
:param core.api.grpc.core_pb2.GetEmanConfigRequest request: get-EMANE-configuration request
|
||||
:param grpc.ServicerContext context: context object
|
||||
:return: get-EMANE-configuration response
|
||||
:rtype: core.api.grpc.core_pb2.GetEmaneConfigResponse
|
||||
"""
|
||||
logging.debug("get emane config: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
config = session.emane.get_configs()
|
||||
|
@ -1001,6 +1403,14 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
return core_pb2.GetEmaneConfigResponse(groups=groups)
|
||||
|
||||
def SetEmaneConfig(self, request, context):
|
||||
"""
|
||||
Set EMANE configuration of a session
|
||||
|
||||
:param core.api.grpc.core_pb2.SetEmaneConfigRequest request: set-EMANE-configuration request
|
||||
:param grpc.ServicerContext context: context object
|
||||
:return: set-EMANE-configuration response
|
||||
:rtype: core.api.grpc.core_pb2.SetEmaneConfigResponse
|
||||
"""
|
||||
logging.debug("set emane config: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
config = session.emane.get_configs()
|
||||
|
@ -1008,6 +1418,14 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
return core_pb2.SetEmaneConfigResponse(result=True)
|
||||
|
||||
def GetEmaneModels(self, request, context):
|
||||
"""
|
||||
Retrieve all the EMANE models in the session
|
||||
|
||||
:param core.api.grpc.core_pb2.GetEmaneModelRequest request: get-emane-model request
|
||||
:param grpc.ServicerContext context: context object
|
||||
:return: get-EMANE-models response that has all the models
|
||||
:rtype: core.api.grpc.core_pb2.GetEmaneModelsResponse
|
||||
"""
|
||||
logging.debug("get emane models: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
models = []
|
||||
|
@ -1018,6 +1436,14 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
return core_pb2.GetEmaneModelsResponse(models=models)
|
||||
|
||||
def GetEmaneModelConfig(self, request, context):
|
||||
"""
|
||||
Retrieve EMANE model configuration of a node
|
||||
|
||||
:param core.api.grpc.core_pb2.GetEmaneModelConfigRequest request: get-EMANE-model-configuration request
|
||||
:param grpc.ServicerContext context: context object
|
||||
:return: get-EMANE-model-configuration response
|
||||
:rtype: core.api.grpc.core_pb2.GetEmaneModelConfigResponse
|
||||
"""
|
||||
logging.debug("get emane model config: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
model = session.emane.models[request.model]
|
||||
|
@ -1027,6 +1453,14 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
return core_pb2.GetEmaneModelConfigResponse(groups=groups)
|
||||
|
||||
def SetEmaneModelConfig(self, request, context):
|
||||
"""
|
||||
Set EMANE model configuration of a node
|
||||
|
||||
:param core.api.grpc.core_pb2.SetEmaneModelConfigRequest request: set-EMANE-model-configuration request
|
||||
:param grpc.ServicerContext context: context object
|
||||
:return: set-EMANE-model-configuration response
|
||||
:rtype: core.api.grpc.core_pb2.SetEmaneModelConfigResponse
|
||||
"""
|
||||
logging.debug("set emane model config: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
_id = get_emane_model_id(request.node_id, request.interface_id)
|
||||
|
@ -1034,6 +1468,14 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
return core_pb2.SetEmaneModelConfigResponse(result=True)
|
||||
|
||||
def GetEmaneModelConfigs(self, request, context):
|
||||
"""
|
||||
Retrieve all EMANE model configurations of a session
|
||||
|
||||
:param core.api.grpc.core_pb2.GetEmaneModelConfigsRequest request: get-EMANE-model-configurations request
|
||||
:param grpc.ServicerContext context: context object
|
||||
:return: get-EMANE-model-configurations response that has all the EMANE configurations
|
||||
:rtype: core.api.grpc.core_pb2.GetEmaneModelConfigsResponse
|
||||
"""
|
||||
logging.debug("get emane model configs: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
response = core_pb2.GetEmaneModelConfigsResponse()
|
||||
|
@ -1052,6 +1494,14 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
return response
|
||||
|
||||
def SaveXml(self, request, context):
|
||||
"""
|
||||
Export the session nto the EmulationScript XML format
|
||||
|
||||
:param core.api.grpc.core_pb2.SaveXmlRequest request: save xml request
|
||||
:param grpc SrvicerContext context: context object
|
||||
:return: save-xml response
|
||||
:rtype: core.api.grpc.core_pb2.SaveXmlResponse
|
||||
"""
|
||||
logging.debug("save xml: %s", request)
|
||||
session = self.get_session(request.session_id, context)
|
||||
|
||||
|
@ -1064,6 +1514,14 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
return core_pb2.SaveXmlResponse(data=data)
|
||||
|
||||
def OpenXml(self, request, context):
|
||||
"""
|
||||
Import a session from the EmulationScript XML format
|
||||
|
||||
:param core.api.grpc.OpenXmlRequest request: open-xml request
|
||||
:param grpc.ServicerContext context: context object
|
||||
:return: Open-XML response or raise an exception if invalid XML file
|
||||
:rtype: core.api.grpc.core_pb2.OpenXMLResponse
|
||||
"""
|
||||
logging.debug("open xml: %s", request)
|
||||
session = self.coreemu.create_session()
|
||||
session.set_state(EventTypes.CONFIGURATION_STATE)
|
||||
|
@ -1081,6 +1539,14 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
|||
context.abort(grpc.StatusCode.INVALID_ARGUMENT, "invalid xml file")
|
||||
|
||||
def GetInterfaces(self, request, context):
|
||||
"""
|
||||
Retrieve all the interfaces of the system including bridges, virtual ethernet, and loopback
|
||||
|
||||
:param core.api.grpc.core_pb2.GetInterfacesRequest request: get-interfaces request
|
||||
:param grpc.ServicerContext context: context object
|
||||
:return: get-interfaces response that has all the system's interfaces
|
||||
:rtype: core.api.grpc.core_pb2.GetInterfacesResponse
|
||||
"""
|
||||
interfaces = []
|
||||
for interface in os.listdir("/sys/class/net"):
|
||||
if (
|
||||
|
|
|
@ -351,7 +351,7 @@ class ModelManager(ConfigurableManager):
|
|||
|
||||
def get_model_config(self, node_id, model_name):
|
||||
"""
|
||||
Set configuration data for a model.
|
||||
Retrieve configuration data for a model.
|
||||
|
||||
:param int node_id: node id to set model configuration for
|
||||
:param str model_name: model to set configuration for
|
||||
|
|
|
@ -115,7 +115,7 @@ class NodeBase(object):
|
|||
|
||||
:param bool sort: boolean used to determine if interfaces should be sorted
|
||||
:return: network interfaces
|
||||
:rtype: list
|
||||
:rtype: list[core.nodes.interfaces.CoreInterface]
|
||||
"""
|
||||
if sort:
|
||||
return [self._netif[x] for x in sorted(self._netif)]
|
||||
|
@ -168,7 +168,7 @@ class NodeBase(object):
|
|||
:param str lon: longitude
|
||||
:param str alt: altitude
|
||||
:return: node data object
|
||||
:rtype: core.data.NodeData
|
||||
:rtype: core.emulator.data.NodeData
|
||||
"""
|
||||
if self.apitype is None:
|
||||
return None
|
||||
|
@ -210,7 +210,7 @@ class NodeBase(object):
|
|||
|
||||
:param flags: message flags
|
||||
:return: list of link data
|
||||
:rtype: core.data.LinkData
|
||||
:rtype: list[core.data.LinkData]
|
||||
"""
|
||||
return []
|
||||
|
||||
|
@ -308,7 +308,7 @@ class CoreNodeBase(NodeBase):
|
|||
|
||||
:param int ifindex: interface of index to attach
|
||||
:param core.nodes.interface.CoreInterface net: network to attach
|
||||
:return:
|
||||
:return: nothing
|
||||
"""
|
||||
if ifindex not in self._netif:
|
||||
raise ValueError("ifindex %s does not exist" % ifindex)
|
||||
|
@ -707,6 +707,7 @@ class CoreNode(CoreNodeBase):
|
|||
logging.debug("interface mac: %s - %s", veth.name, veth.hwaddr)
|
||||
|
||||
try:
|
||||
# add network interface to the node. If unsuccessful, destroy the network interface and raise exception.
|
||||
self.addnetif(veth, ifindex)
|
||||
except ValueError as e:
|
||||
veth.shutdown()
|
||||
|
@ -1108,6 +1109,11 @@ class CoreNetworkBase(NodeBase):
|
|||
"""
|
||||
Build link data objects for this network. Each link object describes a link
|
||||
between this network and a node.
|
||||
|
||||
:param int flags: message type
|
||||
:return: list of link data
|
||||
:rtype: list[core.data.LinkData]
|
||||
|
||||
"""
|
||||
all_links = []
|
||||
|
||||
|
|
|
@ -1129,6 +1129,10 @@ class WlanNode(CoreNetwork):
|
|||
# mobility model such as scripted
|
||||
self.mobility = None
|
||||
|
||||
# TODO: move to startup method
|
||||
if start:
|
||||
utils.check_cmd([constants.BRCTL_BIN, "setageing", self.brname, "0"])
|
||||
|
||||
def attach(self, netif):
|
||||
"""
|
||||
Attach a network interface.
|
||||
|
|
|
@ -423,7 +423,6 @@ class CoreXmlWriter(object):
|
|||
def write_network(self, node):
|
||||
# ignore p2p and other nodes that are not part of the api
|
||||
if not node.apitype:
|
||||
logging.warning("ignoring node with no apitype: %s", node)
|
||||
return
|
||||
|
||||
network = NetworkElement(self.session, node)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue