def main(): logging.basicConfig(format='%(asctime)s - %(levelname)s - %(message)s', level=logging.DEBUG) ns = OTNS() ns.set_title("Ping Example") ns.set_network_info(version="Latest", commit="master", real=False) ns.web() ns.speed = 4 def add_node(*args, **kwargs): return ns.add(*args, **kwargs, radio_range=RADIO_RANGE) add_node("fed", 100, 100) add_node("fed", 100, 300) add_node("fed", 100, 500) add_node("fed", 100, 700) add_node("fed", 100, 900) add_node("router", 450, 100) add_node("router", 550, 300) add_node("router", 450, 500) add_node("router", 550, 700) add_node("router", 450, 900) add_node("fed", 1800, 100) add_node("fed", 1800, 300) add_node("fed", 1800, 500) add_node("fed", 1800, 700) add_node("fed", 1800, 900) add_node("router", 1450, 100) add_node("router", 1350, 300) add_node("router", 1450, 500) add_node("router", 1350, 700) add_node("router", 1450, 900) C1 = add_node("router", 950, 300) C2 = add_node("router", 800, 700) C3 = add_node("router", 1100, 700) def ping(src: int, dst: int, duration: float): while duration > 0: ns.ping(src, dst) ns.go(1) duration -= 1 while True: ping(1, 11, 30) c1_rlocs = ns.get_ipaddrs(C1, "rloc") if c1_rlocs: for i in range(4): for id in (6, 7, 8, 9, 16, 17, 18, 19, C2, C3): ns.ping(id, c1_rlocs[0]) ns.delete(C1) ping(1, 11, 30) ns.delete(C2) ns.delete(C3) ns.go(130) add_node("router", 950, 300, id=C1) add_node("router", 800, 700, id=C2) add_node("router", 1100, 700, id=C3) ns.go(10)
C1 = add_node("router", 950, 300) C2 = add_node("router", 800, 700) C3 = add_node("router", 1100, 700) def ping(src: int, dst: int, duration: float): while duration > 0: ns.ping(src, dst) ns.go(1) duration -= 1 while True: ping(1, 11, 30) c1_rlocs = ns.get_ipaddrs(C1, "rloc") if c1_rlocs: for i in range(4): for id in (6, 7, 8, 9, 16, 17, 18, 19, C2, C3): ns.ping(id, c1_rlocs[0]) ns.delete(C1) ping(1, 11, 30) ns.delete(C2) ns.delete(C3) ns.go(130) add_node("router", 950, 300, id=C1) add_node("router", 800, 700, id=C2) add_node("router", 1100, 700, id=C3) ns.go(10)
def main(): ns = OTNS(otns_args=['-log', 'info']) ns.speed = 1 ns.web() gateway = ns.add("router", FARM_RECT[0], FARM_RECT[1], radio_range=RECEIVER_RADIO_RANGE) ns.add("router", FARM_RECT[0], FARM_RECT[3], radio_range=RECEIVER_RADIO_RANGE) ns.add("router", FARM_RECT[2], FARM_RECT[1], radio_range=RECEIVER_RADIO_RANGE) ns.add("router", FARM_RECT[2], FARM_RECT[3], radio_range=RECEIVER_RADIO_RANGE) ns.add("router", (FARM_RECT[0] + FARM_RECT[2]) // 2, FARM_RECT[1], radio_range=RECEIVER_RADIO_RANGE) ns.add("router", (FARM_RECT[0] + FARM_RECT[2]) // 2, FARM_RECT[3], radio_range=RECEIVER_RADIO_RANGE) horse_pos = {} horse_move_dir = {} for i in range(HORSE_NUM): rx = random.randint(FARM_RECT[0] + 20, FARM_RECT[2] - 20) ry = random.randint(FARM_RECT[1] + 20, FARM_RECT[3] - 20) sid = ns.add("sed", rx, ry, radio_range=HORSE_RADIO_RANGE) horse_pos[sid] = (rx, ry) horse_move_dir[sid] = random.uniform(0, math.pi * 2) def blocked(sid, x, y): if not (FARM_RECT[0] + 20 < x < FARM_RECT[2] - 20) or not ( FARM_RECT[1] + 20 < y < FARM_RECT[3] - 20): return True for oid, (ox, oy) in horse_pos.items(): if oid == sid: continue dist2 = (x - ox)**2 + (y - oy)**2 if dist2 <= 1600: return True return False time_accum = 0 while True: dt = 1 ns.go(dt) time_accum += dt for sid, (sx, sy) in horse_pos.items(): for i in range(10): mdist = random.uniform(0, 2 * R * dt) sx = int(sx + mdist * math.cos(horse_move_dir[sid])) sy = int(sy + mdist * math.sin(horse_move_dir[sid])) if blocked(sid, sx, sy): horse_move_dir[sid] += random.uniform(0, math.pi * 2) continue sx = min(max(sx, FARM_RECT[0]), FARM_RECT[2]) sy = min(max(sy, FARM_RECT[1]), FARM_RECT[3]) ns.move(sid, sx, sy) horse_pos[sid] = (sx, sy) break if time_accum >= 10: for sid in horse_pos: ns.ping(sid, gateway) time_accum -= 10