def add_node_data( node_proto: core_pb2.Node) -> Tuple[NodeTypes, int, NodeOptions]: """ Convert node protobuf message to data for creating a node. :param node_proto: node proto message :return: node type, id, and options """ _id = node_proto.id _type = NodeTypes(node_proto.type) options = NodeOptions( name=node_proto.name, model=node_proto.model, icon=node_proto.icon, image=node_proto.image, services=node_proto.services, config_services=node_proto.config_services, ) if node_proto.emane: options.emane = node_proto.emane if node_proto.server: options.server = node_proto.server position = node_proto.position options.set_position(position.x, position.y) if node_proto.HasField("geo"): geo = node_proto.geo options.set_location(geo.lat, geo.lon, geo.alt) return _type, _id, options
def read_network(self, network_element: etree.Element) -> None: node_id = get_int(network_element, "id") name = network_element.get("name") node_type = NodeTypes[network_element.get("type")] _class = self.session.get_node_class(node_type) icon = network_element.get("icon") server = network_element.get("server") options = NodeOptions(name=name, icon=icon, server=server) if node_type == NodeTypes.EMANE: model = network_element.get("model") options.emane = model position_element = network_element.find("position") if position_element is not None: x = get_float(position_element, "x") y = get_float(position_element, "y") if all([x, y]): options.set_position(x, y) lat = get_float(position_element, "lat") lon = get_float(position_element, "lon") alt = get_float(position_element, "alt") if all([lat, lon, alt]): options.set_location(lat, lon, alt) logging.info("reading node id(%s) node_type(%s) name(%s)", node_id, node_type, name) self.session.add_node(_class, node_id, options)
def test_two_emane_interfaces(self, session: Session): """ Test nodes running multiple emane interfaces. :param core.emulator.coreemu.EmuSession session: session for test """ # create emane node for networking the core nodes session.set_location(47.57917, -122.13232, 2.00000, 1.0) options = NodeOptions() options.set_position(80, 50) options.emane = EmaneIeee80211abgModel.name emane_net1 = session.add_node(EmaneNet, options=options) options.emane = EmaneRfPipeModel.name emane_net2 = session.add_node(EmaneNet, options=options) # create nodes options = NodeOptions(model="mdr") options.set_position(150, 150) node1 = session.add_node(CoreNode, options=options) options.set_position(300, 150) node2 = session.add_node(CoreNode, options=options) # create interfaces ip_prefix1 = IpPrefixes("10.0.0.0/24") ip_prefix2 = IpPrefixes("10.0.1.0/24") for i, node in enumerate([node1, node2]): node.setposition(x=150 * (i + 1), y=150) iface_data = ip_prefix1.create_iface(node) session.add_link(node.id, emane_net1.id, iface1_data=iface_data) iface_data = ip_prefix2.create_iface(node) session.add_link(node.id, emane_net2.id, iface1_data=iface_data) # instantiate session session.instantiate() # ping node2 from node1 on both interfaces and check success status = ping(node1, node2, ip_prefix1, count=5) assert not status status = ping(node1, node2, ip_prefix2, count=5) assert not status