コード例 #1
0
ファイル: ping.py プロジェクト: ctan-g/ot-ns
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)
コード例 #2
0
ファイル: ping.py プロジェクト: sbeyn/ot-ns
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)
コード例 #3
0
ファイル: farm.py プロジェクト: sbeyn/ot-ns
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