def run(node_count, csvfile): print(f'run for node_count: {node_count}') state = topology.create_nodes(node_count) for max_range in float_range(0.0, 0.8, 0.01): # calculate every value 100 times for _ in range(0, 100): mobility.randomize_positions(state, xy_range=1.0) mobility.connect_range(state, max_distance=max_range) paths = get_all_paths(node_count) (connected_path_count, connected_median_hop_count, connected_max_hop_count) = get_connectivity(state, paths) mean_geo_distance = get_mean_geo_distance(state, paths) # add data to csv file connectivity_per = 100 * connected_path_count / len(paths) extra = ([ 'node_count', 'max_range', 'mean_geo_distance', 'connectivity_per', 'connected_median_hop_count', 'connected_max_hop_count' ], [ node_count, max_range, mean_geo_distance, connectivity_per, connected_median_hop_count, connected_max_hop_count ]) tools.csv_update(csvfile, '\t', extra)
def run(protocol, csvfile, step_duration, step_distance): shared.seed_random(42) node_count = 50 state = topology.create_nodes(node_count) mobility.randomize_positions(state, xy_range=1000) mobility.connect_range(state, max_links=150) # create network and start routing software network.apply(state, link_command=get_tc_command, remotes=remotes) software.start(protocol) test_beg_ms = shared.millis() for n in range(0, 30): print(f'{protocol}: iteration {n}') #with open(f'graph-{step_duration}-{step_distance}-{n:03d}.json', 'w+') as file: # json.dump(state, file, indent=' ') # connect nodes range wait_beg_ms = shared.millis() # update network representation mobility.move_random(state, distance=step_distance) mobility.connect_range(state, max_links=150) # update network tmp_ms = shared.millis() network.apply(state=state, link_command=get_tc_command, remotes=remotes) #software.apply(protocol=protocol, state=state) # we do not change the node count network_ms = shared.millis() - tmp_ms # Wait until wait seconds are over, else error shared.wait(wait_beg_ms, step_duration) paths = ping.get_random_paths(state, 2 * 400) paths = ping.filter_paths(state, paths, min_hops=2, path_count=200) ping_result = ping.ping(paths=paths, duration_ms=2000, verbosity='verbose', remotes=remotes) # add data to csv file extra = (['node_count', 'time_ms'], [node_count, shared.millis() - test_beg_ms]) shared.csv_update(csvfile, '\t', extra, ping_result.getData()) software.clear(remotes) network.clear(remotes)
def run(protocol, csvfile): tools.seed_random(23) node_count = 50 state = topology.create_nodes(node_count) mobility.randomize_positions(state, xy_range=1000) mobility.connect_range(state, max_links=150) # create network and start routing software network.apply(state=state, link_command=get_tc_command) software.start(protocol) tools.sleep(30) for step_distance in [50, 100, 150, 200, 250, 300, 350, 400]: print(f'{protocol}: step_distance {step_distance}') traffic_beg = tools.traffic() for n in range(0, 6): #with open(f'graph-{step_distance}-{n}.json', 'w+') as file: # json.dump(state, file, indent=' ') # connect nodes range wait_beg_ms = tools.millis() # update network representation mobility.move_random(state, distance=step_distance) mobility.connect_range(state, max_links=150) # update network network.apply(state=state, link_command=get_tc_command) # Wait until wait seconds are over, else error tools.wait(wait_beg_ms, 10) paths = tools.get_random_paths(state, 2 * 200) paths = tools.filter_paths(state, paths, min_hops=2, path_count=200) ping_result = tools.ping_paths(paths=paths, duration_ms=2000, verbosity='verbose') packets_arrived_pc = 100 * (ping_result.received / ping_result.send) traffic_end = tools.traffic() # add data to csv file extra = (['node_count', 'time_ms', 'step_distance_m', 'n', 'packets_arrived_pc'], [node_count, tools.millis() - wait_beg_ms, step_distance, n, packets_arrived_pc]) tools.csv_update(csvfile, '\t', extra, (traffic_end - traffic_beg).getData(), ping_result.getData()) traffic_beg = traffic_end software.clear() network.clear()