Merge pull request #305 from coreemu/develop

5.5.2 release
This commit is contained in:
bharnden 2019-10-12 14:26:38 -07:00 committed by GitHub
commit d871615ae8
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 84 additions and 7 deletions

View file

@ -2,7 +2,7 @@
# Process this file with autoconf to produce a configure script. # Process this file with autoconf to produce a configure script.
# this defines the CORE version number, must be static for AC_INIT # this defines the CORE version number, must be static for AC_INIT
AC_INIT(core, 5.5.1) AC_INIT(core, 5.5.2)
# autoconf and automake initialization # autoconf and automake initialization
AC_CONFIG_SRCDIR([netns/version.h.in]) AC_CONFIG_SRCDIR([netns/version.h.in])

View file

@ -864,6 +864,21 @@ class CoreGrpcClient(object):
request = core_pb2.OpenXmlRequest(data=data) request = core_pb2.OpenXmlRequest(data=data)
return self.stub.OpenXml(request) return self.stub.OpenXml(request)
def emane_link(self, session_id, nem_one, nem_two, linked):
"""
Helps broadcast wireless link/unlink between EMANE nodes.
:param int session_id: session id
:param int nem_one:
:param int nem_two:
:param bool linked: True to link, False to unlink
:return: core_pb2.EmaneLinkResponse
"""
request = core_pb2.EmaneLinkRequest(
session_id=session_id, nem_one=nem_one, nem_two=nem_two, linked=linked
)
return self.stub.EmaneLink(request)
def connect(self): def connect(self):
""" """
Open connection to server, must be closed manually. Open connection to server, must be closed manually.

View file

@ -21,7 +21,7 @@ from core.emulator.data import (
NodeData, NodeData,
) )
from core.emulator.emudata import InterfaceData, LinkOptions, NodeOptions from core.emulator.emudata import InterfaceData, LinkOptions, NodeOptions
from core.emulator.enumerations import EventTypes, LinkTypes, NodeTypes from core.emulator.enumerations import EventTypes, LinkTypes, MessageFlags, NodeTypes
from core.errors import CoreError from core.errors import CoreError
from core.location.mobility import BasicRangeModel, Ns2ScriptedMobility from core.location.mobility import BasicRangeModel, Ns2ScriptedMobility
from core.nodes.base import CoreNetworkBase from core.nodes.base import CoreNetworkBase
@ -1557,3 +1557,47 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
continue continue
interfaces.append(interface) interfaces.append(interface)
return core_pb2.GetInterfacesResponse(interfaces=interfaces) return core_pb2.GetInterfacesResponse(interfaces=interfaces)
def EmaneLink(self, request, context):
"""
Helps broadcast wireless link/unlink between EMANE nodes.
:param core.api.grpc.core_pb2.EmaneLinkRequest request: get-interfaces request
:param grpc.ServicerContext context: context object
:return: emane link response with success status
:rtype: core.api.grpc.core_pb2.EmaneLinkResponse
"""
logging.debug("emane link: %s", request)
session = self.get_session(request.session_id, context)
nem_one = request.nem_one
emane_one, netif = session.emane.nemlookup(nem_one)
if not emane_one or not netif:
context.abort(
grpc.StatusCode.NOT_FOUND, "nem one {} not found".format(nem_one)
)
node_one = netif.node
nem_two = request.nem_two
emane_two, netif = session.emane.nemlookup(nem_two)
if not emane_two or not netif:
context.abort(
grpc.StatusCode.NOT_FOUND, "nem two {} not found".format(nem_two)
)
node_two = netif.node
if emane_one.id == emane_two.id:
if request.linked:
flag = MessageFlags.ADD.value
else:
flag = MessageFlags.DELETE.value
link = LinkData(
message_type=flag,
link_type=LinkTypes.WIRELESS.value,
node1_id=node_one.id,
node2_id=node_two.id,
network_id=emane_one.id,
)
session.broadcast_link(link)
return core_pb2.EmaneLinkResponse(result=True)
else:
return core_pb2.EmaneLinkResponse(result=False)

View file

@ -1416,7 +1416,7 @@ class CoreHandler(socketserver.BaseRequestHandler):
parsed_config = ConfigShim.str_to_dict(values_str) parsed_config = ConfigShim.str_to_dict(values_str)
self.session.mobility.set_model_config(node_id, object_name, parsed_config) self.session.mobility.set_model_config(node_id, object_name, parsed_config)
if self.session.state == EventTypes.RUNTIME_STATE.value: if self.session.state == EventTypes.RUNTIME_STATE.value and parsed_config:
try: try:
node = self.session.get_node(node_id) node = self.session.get_node(node_id)
if object_name == BasicRangeModel.name: if object_name == BasicRangeModel.name:
@ -2042,6 +2042,7 @@ class CoreUdpHandler(CoreHandler):
} }
self.master = False self.master = False
self.session = None self.session = None
self.coreemu = server.mainserver.coreemu
socketserver.BaseRequestHandler.__init__(self, request, client_address, server) socketserver.BaseRequestHandler.__init__(self, request, client_address, server)
def setup(self): def setup(self):

View file

@ -426,7 +426,7 @@ class BasicRangeModel(WirelessModel):
self.delay = int(config["delay"]) self.delay = int(config["delay"])
if self.delay == 0: if self.delay == 0:
self.delay = None self.delay = None
self.loss = int(config["error"]) self.loss = int(float(config["error"]))
if self.loss == 0: if self.loss == 0:
self.loss = None self.loss = None
self.jitter = int(config["jitter"]) self.jitter = int(config["jitter"])

View file

@ -460,9 +460,13 @@ class GreTap(CoreInterface):
if remoteip is None: if remoteip is None:
raise ValueError("missing remote IP required for GRE TAP device") raise ValueError("missing remote IP required for GRE TAP device")
self.net_client.create_gretap( if localip is not None:
self.localname, str(remoteip), str(localip), str(ttl), str(key) localip = str(localip)
) if ttl is not None:
ttl = str(ttl)
if key is not None:
key = str(key)
self.net_client.create_gretap(self.localname, str(remoteip), localip, ttl, key)
self.net_client.device_up(self.localname) self.net_client.device_up(self.localname)
self.up = True self.up = True

View file

@ -119,6 +119,8 @@ service CoreApi {
// utilities // utilities
rpc GetInterfaces (GetInterfacesRequest) returns (GetInterfacesResponse) { rpc GetInterfaces (GetInterfacesRequest) returns (GetInterfacesResponse) {
} }
rpc EmaneLink (EmaneLinkRequest) returns (EmaneLinkResponse) {
}
} }
// rpc request/response messages // rpc request/response messages
@ -633,6 +635,17 @@ message GetInterfacesResponse {
repeated string interfaces = 1; repeated string interfaces = 1;
} }
message EmaneLinkRequest {
int32 session_id = 1;
int32 nem_one = 2;
int32 nem_two = 3;
bool linked = 4;
}
message EmaneLinkResponse {
bool result = 1;
}
// data structures for messages below // data structures for messages below
message MessageType { message MessageType {
enum Enum { enum Enum {