From da08538800dc26aa4655075c1dd9bf494d24fbfb Mon Sep 17 00:00:00 2001 From: Alina Quereilhac Date: Sun, 5 Jun 2011 18:23:55 +0200 Subject: [PATCH] Added WaypointMobilityModel to ns3 backend --- src/nepi/testbeds/netns/metadata_v01.py | 2 +- .../testbeds/ns3/attributes_metadata_v3_9.py | 8 ++ .../testbeds/ns3/connection_metadata_v3_9.py | 6 ++ .../testbeds/ns3/factories_metadata_v3_9.py | 91 +++++++++---------- 4 files changed, 56 insertions(+), 51 deletions(-) diff --git a/src/nepi/testbeds/netns/metadata_v01.py b/src/nepi/testbeds/netns/metadata_v01.py index 62332708..b849482b 100644 --- a/src/nepi/testbeds/netns/metadata_v01.py +++ b/src/nepi/testbeds/netns/metadata_v01.py @@ -91,7 +91,7 @@ def nodepcap_trace(testbed_instance, guid, trace_id): filename = "%d-pcap.stderr" % guid stderr = _follow_trace(testbed_instance, guid, "pcap_stderr", filename) filename = "%d-node.pcap" % guid - filepath = testbed_instance.trace_filenpath(guid, trace_id, filename) + filepath = testbed_instance.trace_filepath(guid, trace_id, filename) command = "tcpdump -i 'any' -w %s" % filepath user = "root" trace = node.Popen(command, shell = True, stdout = stdout, diff --git a/src/nepi/testbeds/ns3/attributes_metadata_v3_9.py b/src/nepi/testbeds/ns3/attributes_metadata_v3_9.py index 4aa38808..d6e95106 100644 --- a/src/nepi/testbeds/ns3/attributes_metadata_v3_9.py +++ b/src/nepi/testbeds/ns3/attributes_metadata_v3_9.py @@ -2527,4 +2527,12 @@ attributes = dict({ "type": Attribute.ENUM, "help": "Service flow scheduling type", }), + "WaypointList": dict({ + "name": "WaypointList", + "validation_function": validation.is_string, # TODO: SPECIAL VALIDATION FUNC + "value": "", + "flags": Attribute.DesignOnly, + "type": Attribute.STRING, + "help": "Comma separated list of waypoints in format t:x:y:z. Ex: 0s:0:0:0, 1s:1:0:0" + }), }) diff --git a/src/nepi/testbeds/ns3/connection_metadata_v3_9.py b/src/nepi/testbeds/ns3/connection_metadata_v3_9.py index 64fcbeb9..f25d9d10 100644 --- a/src/nepi/testbeds/ns3/connection_metadata_v3_9.py +++ b/src/nepi/testbeds/ns3/connection_metadata_v3_9.py @@ -658,6 +658,12 @@ connections = [ "init_code": connect_node_other, "can_cross": False }), + dict({ + "from": ( "ns3", "ns3::Node", "mobility" ), + "to": ( "ns3", "ns3::WaypointMobilityModel", "node" ), + "init_code": connect_node_other, + "can_cross": False + }), dict({ "from": ( "ns3", "ns3::SubscriberStationNetDevice", "sflows" ), "to": ( "ns3", "ns3::ServiceFlow", "dev" ), diff --git a/src/nepi/testbeds/ns3/factories_metadata_v3_9.py b/src/nepi/testbeds/ns3/factories_metadata_v3_9.py index e0364193..c2205933 100644 --- a/src/nepi/testbeds/ns3/factories_metadata_v3_9.py +++ b/src/nepi/testbeds/ns3/factories_metadata_v3_9.py @@ -204,10 +204,24 @@ def create_wifi_standard_model(testbed_instance, guid): create_element(testbed_instance, guid) element = testbed_instance._elements[guid] parameters = testbed_instance._get_parameters(guid) - if "Standard" in parameters: - standard = parameters["Standard"] - if standard: - element.ConfigureStandard(wifi_standards[standard]) + standard = parameters.get("Standard") + if standard: + element.ConfigureStandard(wifi_standards[standard]) + +def create_waypoint_mobility(testbed_instance, guid): + create_element(testbed_instance, guid) + element = testbed_instance._elements[guid] + parameters = testbed_instance._get_parameters(guid) + ns3 = testbed_instance.ns3 + waypoints = parameters.get("WaypointList", "") + waypoints = waypoints.replace(" ","") + for swp in waypoints.split(","): + dwp = swp.split(":") + t = str(dwp[0]) + time = ns3.Time(t) + pos = ns3.Vector(float(dwp[1]), float(dwp[2]), float(dwp[3])) + waypoint = ns3.Waypoint(time, pos) + element.AddWaypoint(waypoint) def create_ipv4protocol(testbed_instance, guid): create_element(testbed_instance, guid) @@ -265,14 +279,10 @@ def create_wimax_phy(testbed_instance, guid): def create_service_flow(testbed_instance, guid): parameters = testbed_instance._get_parameters(guid) - direction = None - if "Direction" in parameters: - direction = parameters["Direction"] + direction = parameters.get("Direction") if direction == None: raise RuntimeError("No SchedulingType was found for service flow %d" % guid) - sched = None - if "SchedulingType" in parameters: - sched = parameters["SchedulingType"] + sched = parameters.get("SchedulingType") if sched == None: raise RuntimeError("No SchedulingType was found for service flow %d" % guid) ServiceFlow = testbed_instance.ns3.ServiceFlow @@ -296,58 +306,38 @@ def create_service_flow(testbed_instance, guid): def create_ipcs_classifier_record(testbed_instance, guid): parameters = testbed_instance._get_parameters(guid) - src_address = None - if "SrcAddress" in parameters: - src_address = parameters["SrcAddress"] + src_address = parameters.get("SrcAddress") if src_address == None: raise RuntimeError("No SrcAddress was found for classifier %d" % guid) src_address = testbed_instance.ns3.Ipv4Address(src_address) - src_mask= None - if "SrcMask" in parameters: - src_mask = parameters["SrcMask"] + src_mask = parameters.get("SrcMask") if src_mask == None: raise RuntimeError("No SrcMask was found for classifier %d" % guid) src_mask = testbed_instance.ns3.Ipv4Mask(src_mask) - dst_address = None - if "DstAddress" in parameters: - dst_address = parameters["DstAddress"] + dst_address = parameters.get("DstAddress") if dst_address == None: raise RuntimeError("No Dstddress was found for classifier %d" % guid) dst_address = testbed_instance.ns3.Ipv4Address(dst_address) - dst_mask= None - if "DstMask" in parameters: - dst_mask = parameters["DstMask"] + dst_mask = parameters.get("DstMask") if dst_mask == None: raise RuntimeError("No DstMask was found for classifier %d" % guid) dst_mask = testbed_instance.ns3.Ipv4Mask(dst_mask) - src_port_low = None - if "SrcPortLow" in parameters: - src_port_low = parameters["SrcPortLow"] + src_port_low = parameters.get("SrcPortLow") if src_port_low == None: raise RuntimeError("No SrcPortLow was found for classifier %d" % guid) - src_port_high= None - if "SrcPortHigh" in parameters: - src_port_high = parameters["SrcPortHigh"] + src_port_high = parameters.get("SrcPortHigh") if src_port_high == None: raise RuntimeError("No SrcPortHigh was found for classifier %d" % guid) - dst_port_low = None - if "DstPortLow" in parameters: - dst_port_low = parameters["DstPortLow"] + dst_port_low = parameters.get("DstPortLow") if dst_port_low == None: raise RuntimeError("No DstPortLow was found for classifier %d" % guid) - dst_port_high = None - if "DstPortHigh" in parameters: - dst_port_high = parameters["DstPortHigh"] + dst_port_high = parameters.get("DstPortHigh") if dst_port_high == None: raise RuntimeError("No DstPortHigh was found for classifier %d" % guid) - protocol = None - if "Protocol" in parameters: - protocol = parameters["Protocol"] + protocol = parameters.get("Protocol") if protocol == None or protocol not in l4_protocols: raise RuntimeError("No Protocol was found for classifier %d" % guid) - priority = None - if "Priority" in parameters: - priority = parameters["Priority"] + priority = parameters.get("Priority") if priority == None: raise RuntimeError("No Priority was found for classifier %d" % guid) element = testbed_instance.ns3.IpcsClassifierRecord(src_address, src_mask, @@ -378,13 +368,13 @@ def status_application(testbed_instance, guid): return STATUS_NOT_STARTED app = testbed_instance.elements[guid] parameters = testbed_instance._get_parameters(guid) - if "StartTime" in parameters and parameters["StartTime"]: - start_value = parameters["StartTime"] + start_value = parameters.get("StartTime") + if start_value != None: start_time = testbed_instance.ns3.Time(start_value) if now.Compare(start_time) < 0: return STATUS_NOT_STARTED - if "StopTime" in parameters and parameters["StopTime"]: - stop_value = parameters["StopTime"] + stop_value = parameters.get("StopTime") + if stop_value != None: stop_time = testbed_instance.ns3.Time(stop_value) if now.Compare(stop_time) < 0: return STATUS_RUNNING @@ -409,8 +399,8 @@ def configure_device(testbed_instance, guid): element = testbed_instance._elements[guid] parameters = testbed_instance._get_parameters(guid) - if "macAddress" in parameters: - address = parameters["macAddress"] + address = parameters.get("macAddress") + if address: macaddr = testbed_instance.ns3.Mac48Address(address) else: macaddr = testbed_instance.ns3.Mac48Address.Allocate() @@ -1029,13 +1019,14 @@ factories_info = dict({ }), "ns3::WaypointMobilityModel": dict({ "category": "Mobility", - "create_function": create_element, + "create_function": create_waypoint_mobility, "configure_function": configure_element, - "help": "", - "connector_types": [], + "help": "Waypoint-based mobility model.", + "connector_types": ["node"], "box_attributes": ["WaypointsLeft", "Position", - "Velocity"], + "Velocity", + "WaypointList"], "tags": [tags.MOBILE], }), "ns3::FileDescriptorNetDevice": dict({ -- 2.47.0