Exemplo n.º 1
0
def test(options):
    prefix = ipaddr.IPv4Prefix("10.83.0.0/16")
    session = pycore.Session(persistent = True)
    if options.enablesdt:
        session.location.setrefgeo(47.57917,-122.13232,50.0) # GUI default
        session.location.refscale = 100.0
        session.options.enablesdt = True
        session.options.sdturl = options.sdturl
    wlanid = options.numnodes + 1
    net = session.addobj(cls = pycore.nodes.WlanNode, name = "wlan%d" % wlanid,
                         objid = wlanid, verbose = True)
    values = list(BasicRangeModel.getdefaultvalues())
    #values[0] = 5000000  # 5000km range
    net.setmodel(BasicRangeModel, values)
    for i in xrange(1, options.numnodes + 1):
        tmp = session.addobj(cls = pycore.nodes.LxcNode, name = "n%d" % i,
                             objid = i)
        tmp.newnetif(net, ["%s/%s" % (prefix.addr(i), prefix.prefixlen)])
        # set increasing Z coordinates
        tmp.setposition(10, 10, 100*i)
        n.append(tmp)

    # example setting node n2 to a high altitude
    #n[1].setposition(10, 10, 2000000) # 2000km
    #session.sdt.updatenode(n[1].objid, 0, 10, 10, 2000000)

    n[0].term("bash")
    # wait for rate seconds to allow ebtables commands to commit
    time.sleep(EbtablesQueue.rate)
def test(options):
    prefix = ipaddr.IPv4Prefix("10.83.0.0/16")
    session = pycore.Session(persistent=True)
    if options.enablesdt:
        session.location.setrefgeo(47.57917, -122.13232, 50.0)  # GUI default
        session.location.refscale = 100.0
        session.options.enablesdt = True
        session.options.sdturl = options.sdturl
    wlanid = options.numnodes + 1
    net = session.addobj(cls=pycore.nodes.WlanNode,
                         name="wlan%d" % wlanid,
                         objid=wlanid,
                         verbose=True)
    values = list(BasicRangeModel.getdefaultvalues())
    #values[0] = 5000000  # 5000km range
    net.setmodel(BasicRangeModel, values)
    for i in xrange(1, options.numnodes + 1):
        tmp = session.addobj(cls=pycore.nodes.LxcNode, name="n%d" % i, objid=i)
        tmp.newnetif(net, ["%s/%s" % (prefix.addr(i), prefix.prefixlen)])
        # set increasing Z coordinates
        tmp.setposition(10, 10, 100 * i)
        n.append(tmp)

    # example setting node n2 to a high altitude
    #n[1].setposition(10, 10, 2000000) # 2000km
    #session.sdt.updatenode(n[1].objid, 0, 10, 10, 2000000)

    n[0].term("bash")
    # wait for rate seconds to allow ebtables commands to commit
    time.sleep(EbtablesQueue.rate)
Exemplo n.º 3
0
    def test_mobility(self, core):
        """
        Test basic wlan network.

        :param conftest.Core core: core fixture to test with
        """

        # create wlan
        wlan_node = core.session.add_object(cls=nodes.WlanNode)
        values = BasicRangeModel.getdefaultvalues()
        wlan_node.setmodel(BasicRangeModel, values)

        # create nodes
        core.create_node("n1",
                         objid=1,
                         position=(0, 0),
                         services=EMANE_SERVICES,
                         model="mdr")
        core.create_node("n2",
                         objid=2,
                         position=(0, 0),
                         services=EMANE_SERVICES,
                         model="mdr")

        # add interfaces
        interface_one = core.add_interface(wlan_node, "n1")
        interface_two = core.add_interface(wlan_node, "n2")

        # link nodes in wlan
        core.link(wlan_node, interface_one, interface_two)

        # configure mobility script for session
        config = ConfigData(
            node=wlan_node.objid,
            object="ns2script",
            type=0,
            data_types=(10, 3, 11, 10, 10, 10, 10, 10, 0),
            data_values="file=%s|refresh_ms=50|loop=1|autostart=0.0|"
            "map=|script_start=|script_pause=|script_stop=" % _MOBILITY_FILE)
        core.session.config_object(config)

        # add handler for receiving node updates
        event = threading.Event()

        def node_update(_):
            event.set()

        core.session.node_handlers.append(node_update)

        # instantiate session
        core.session.instantiate()

        # assert node directories created
        core.assert_nodes()

        # validate we receive a node message for updating its location
        assert event.wait(5)
Exemplo n.º 4
0
    def __init__(self, session, batallion_index):
        self.companies = [None]
        self.batallion_index = batallion_index
        self.twlans = []

        dist = MAX_C_DISPL / 2 + MAX_P_DISPL + MAX_P_DISPL / 10
        pos = (dist, dist, 0)
        verts = ngon_verts(COMPANIES_IN_BATALLION + 1, MAX_C_DISPL / 2)
        LOCATIONS = [(pos[0] + verts[i][0], pos[1] + verts[i][1], 0)
                     for i in xrange(COMPANIES_IN_BATALLION + 1)]
        x = LOCATIONS[0][0]
        y = LOCATIONS[0][1]

        r_verts = ngon_verts(COMPANIES_IN_BATALLION * 2, MAX_P_DISPL / 10)

        self.wlan = session.addobj(cls=pycore.nodes.WlanNode,
                                   name='uwlan%d' %
                                   (COMPANIES_IN_BATALLION + 1))
        self.wlan.setposition(x=x, y=y)
        values = list(BasicRangeModel.getdefaultvalues())
        values[0] = str(WLAN_RANGE)
        self.wlan.setmodel(BasicRangeModel, values)

        self.routers = [None]
        for i in xrange(COMPANIES_IN_BATALLION * 2):
            r_index = COMPANIES_IN_BATALLION * COMPANIES_IN_BATALLION * 2 + 1 + i
            router = session.addobj(cls=pycore.nodes.CoreNode,
                                    name='r%d' % r_index)
            router.setposition(x=x + r_verts[i][0], y=y + r_verts[i][1])
            session.services.addservicestonode(router, 'router', None, False)
            index = 1 + i
            router.newnetif(self.wlan, [
                '%d.%d.1.%d/24' %
                (self.batallion_index, COMPANIES_IN_BATALLION + 1, index)
            ])
            self.routers.append(router)

        for i in xrange(1, COMPANIES_IN_BATALLION + 1):
            self.connect_company(session, LOCATIONS[i])

        top_nodes = list(self.companies) + [self]
        index = 1
        for i in xrange(1, len(top_nodes)):
            start_i = i * 2 - 1
            for j in xrange(i + 1, len(top_nodes)):
                self.link(session, index, top_nodes[i].routers[start_i],
                          top_nodes[j].routers[i * 2 - 1], top_nodes[i])
                index = index + 1
                self.link(session, index, top_nodes[i].routers[start_i + 1],
                          top_nodes[j].routers[i * 2], top_nodes[j])
                index = index + 1
                start_i += 2
Exemplo n.º 5
0
 def link(self, session, index, router1, router2, owner):
     wlan = session.addobj(cls=pycore.nodes.WlanNode,
                           name='twlan%d' % index)
     r1_pos = router1.position.get()
     r2_pos = router2.position.get()
     wlan_x = (r1_pos[0] + r2_pos[0]) / 2
     wlan_y = (r1_pos[1] + r2_pos[1]) / 2
     wlan.setposition(x=wlan_x, y=wlan_y)
     values = list(BasicRangeModel.getdefaultvalues())
     values[0] = str(WLAN_RANGE)
     wlan.setmodel(BasicRangeModel, values)
     owner.twlans.append(wlan)
     router1.newnetif(wlan,
                      ['%d.%d.9.1/24' % (self.batallion_index, index)])
     router2.newnetif(wlan,
                      ['%d.%d.9.2/24' % (self.batallion_index, index)])
Exemplo n.º 6
0
    def test_wlan_basic_range_bad(self, core):
        """
        Test basic wlan network with leveraging basic range model.

        :param conftest.Core core: core fixture to test with
        """

        # create wlan
        wlan_node = core.session.add_object(cls=nodes.WlanNode)
        values = BasicRangeModel.getdefaultvalues()
        wlan_node.setmodel(BasicRangeModel, values)

        # create nodes
        core.create_node("n1",
                         position=(0, 0),
                         services=EMANE_SERVICES,
                         model="mdr")
        core.create_node("n2",
                         position=(0, 0),
                         services=EMANE_SERVICES,
                         model="mdr")

        # add interfaces
        interface_one = core.add_interface(wlan_node, "n1")
        interface_two = core.add_interface(wlan_node, "n2")

        # link nodes in wlan
        core.link(wlan_node, interface_one, interface_two)

        # move nodes out of range, default range check is 275
        core.get_node("n1").setposition(0, 0)
        core.get_node("n2").setposition(500, 500)

        # instantiate session
        core.session.instantiate()

        # assert node directories created
        core.assert_nodes()

        # ping n2 from n1 and assert failure        )
        time.sleep(3)
        status = core.ping("n1", "n2")
        assert status
Exemplo n.º 7
0
def test(numnodes):
    # node list
    n = []
    prefix = ipaddr.IPv4Prefix("10.83.0.0/16")
    session = pycore.Session(persistent = True)
    wlanid = numnodes + 1
    net = session.addobj(cls = pycore.nodes.WlanNode, name = "wlan%d" % wlanid,
                         objid = wlanid, verbose = True)
    net.setmodel(BasicRangeModel, BasicRangeModel.getdefaultvalues())
    for i in range(1, numnodes + 1):
        tmp = session.addobj(cls = pycore.nodes.LxcNode, name = "n%d" % i,
                             objid = i)
        tmp.newnetif(net, ["%s/%s" % (prefix.addr(i), prefix.prefixlen)])
        # set increasing Z coordinates
        tmp.setposition(10, 10, 100*i)
        n.append(tmp)

    n[0].term("bash")
    # wait for rate seconds to allow ebtables commands to commit
    time.sleep(EbtablesQueue.rate)
Exemplo n.º 8
0
def test(options):
    prefix = ipaddress.Ipv4Prefix("10.83.0.0/16")
    session = Session(1, persistent=True)
    if options.enablesdt:
        # GUI default
        session.location.setrefgeo(47.57917, -122.13232, 50.0)
        session.location.refscale = 100.0
        session.options.enablesdt = True
        session.options.sdturl = options.sdturl
    wlanid = options.numnodes + 1
    net = session.add_object(cls=WlanNode,
                             name="wlan%d" % wlanid,
                             objid=wlanid)

    values = list(BasicRangeModel.getdefaultvalues())
    # values[0] = 5000000  # 5000km range
    net.setmodel(BasicRangeModel, values)
    for i in xrange(1, options.numnodes + 1):
        node = session.add_object(cls=LxcNode, name="n%d" % i, objid=i)
        address = "%s/%s" % (prefix.addr(i), prefix.prefixlen)
        print "setting node address: %s - %s" % (node.objid, address)
        node.newnetif(net, [address])
        # set increasing Z coordinates
        node.setposition(10, 10, 100)
        n.append(node)

    # example setting node n2 to a high altitude
    # n[1].setposition(10, 10, 2000000) # 2000km
    # session.sdt.updatenode(n[1].objid, 0, 10, 10, 2000000)

    # launches terminal for the first node
    # n[0].term("bash")
    n[0].icmd(["ping", "-c", "5", "127.0.0.1"])

    # wait for rate seconds to allow ebtables commands to commit
    time.sleep(EbtablesQueue.rate)

    raw_input("press enter to exit")
    session.shutdown()
Exemplo n.º 9
0
    def __init__(self, session, pos, batallion_index, company_index):
        self.platoons = [None]
        self.hosts = [None]
        self.batallion_index = batallion_index
        self.company_index = company_index
        self.twlans = []

        p_verts = ngon_verts(PLATOONS_IN_COMPANY, MAX_P_DISPL / 2)
        P_LOCATIONS = [(pos[0] + p_verts[i][0], pos[1] + p_verts[i][1], 0)
                       for i in xrange(PLATOONS_IN_COMPANY)]

        r_verts = ngon_verts(COMPANIES_IN_BATALLION * 2, MAX_P_DISPL / 10)

        self.wlan = session.addobj(cls=pycore.nodes.WlanNode,
                                   name='uwlan%d' % company_index)
        self.wlan.setposition(x=pos[0], y=pos[1])
        values = list(BasicRangeModel.getdefaultvalues())
        values[0] = str(WLAN_RANGE)
        self.wlan.setmodel(BasicRangeModel, values)

        self.routers = [None]
        for i in xrange(COMPANIES_IN_BATALLION * 2):
            r_index = (self.company_index - 1) * \
                (COMPANIES_IN_BATALLION * 2) + 1 + i
            router = session.addobj(cls=pycore.nodes.CoreNode,
                                    name='r%d' % r_index)
            router.setposition(x=pos[0] + r_verts[i][0],
                               y=pos[1] + r_verts[i][1])
            session.services.addservicestonode(router, 'router', None, False)
            index = HOSTS_IN_PLATOON * PLATOONS_IN_COMPANY + 1 + i
            router.newnetif(self.wlan, [
                '%d.%d.1.%d/24' %
                (self.batallion_index, self.company_index, index)
            ])
            self.routers.append(router)

        for i in xrange(PLATOONS_IN_COMPANY):
            self.connect_platoon(session, P_LOCATIONS[i])
Exemplo n.º 10
0
    def test_wlan_basic_range_good(self, core):
        """
        Test basic wlan network.

        :param conftest.Core core: core fixture to test with
        """

        # create wlan
        wlan_node = core.session.add_object(cls=nodes.WlanNode)
        values = BasicRangeModel.getdefaultvalues()
        wlan_node.setmodel(BasicRangeModel, values)

        # create nodes
        core.create_node("n1",
                         position=(0, 0),
                         services=EMANE_SERVICES,
                         model="mdr")
        core.create_node("n2",
                         position=(0, 0),
                         services=EMANE_SERVICES,
                         model="mdr")

        # add interfaces
        interface_one = core.add_interface(wlan_node, "n1")
        interface_two = core.add_interface(wlan_node, "n2")

        # link nodes in wlan
        core.link(wlan_node, interface_one, interface_two)

        # instantiate session
        core.session.instantiate()

        # assert node directories created
        core.assert_nodes()

        # ping n2 from n1 and assert success
        status = core.ping("n1", "n2")
        assert not status
Exemplo n.º 11
0
def main():
    usagestr = "usage: %prog [-h] [options] [args]"
    parser = optparse.OptionParser(usage = usagestr)
    parser.set_defaults(numnodes = 5)

    parser.add_option("-n", "--numnodes", dest = "numnodes", type = int,
                      help = "number of nodes")

    def usage(msg = None, err = 0):
        sys.stdout.write("\n")
        if msg:
            sys.stdout.write(msg + "\n\n")
        parser.print_help()
        sys.exit(err)

    # parse command line options
    (options, args) = parser.parse_args()

    if options.numnodes < 1:
        usage("invalid number of nodes: %s" % options.numnodes)

    for a in args:
        sys.stderr.write("ignoring command line argument: '%s'\n" % a)

    start = datetime.datetime.now()

    prefix = ipaddr.IPv4Prefix("10.83.0.0/16")
    session = pycore.Session(persistent=True)
    wlan = session.addobj(cls = pycore.nodes.WlanNode, name = "wlan")
    values = BasicRangeModel.getdefaultvalues()
    wlan.setmodel(BasicRangeModel, values)
    wlan.setposition(x=80,y=50)
    print "creating %d nodes with addresses from %s" % \
          (options.numnodes, prefix)
    model = "PC"
    for i in xrange(1, options.numnodes + 1):
        n = session.addobj(cls = pycore.nodes.CoreNode, name = "n%d" % i,
                             objid=i)
        n.type = model
        n.newnetif(wlan, ["%s/%s" % (prefix.addr(i), prefix.prefixlen)])
        n.cmd(["sysctl", "net.ipv4.icmp_echo_ignore_broadcasts=0"])
        n.setposition(x=150*i,y=150)
        session.services.addservicestonode(n, model, "DefaultRoute", False)
        session.services.addservicestonode(n, "", "MyHaggleService", True)
        session.services.bootnodeservices(n)        
        nodes.append(n)

    # start a shell on node 1
    nodes[1].term("bash")

    print "elapsed time: %s" % (datetime.datetime.now() - start)

    t = threading.Thread(target = wandering_node, args=(nodes[1],))
    t.start()

    # now we launch cored.py services so GUI can connect to this script
    print "launching cored services"
    # the following lines are from cored.py cored()
    cfg, args = cored.getMergedConfig("%s/core.conf" % CORE_CONF_DIR)
    cored.banner()
    server = cored.CoreServer(("localhost", coreapi.CORE_API_PORT),
                              cored.CoreRequestHandler, cfg)
    print "adding session %s to cored.server" % session.sessionid
    server.addsession(session)
    print "running cored server - you may now connect the GUI"
    try:
        server.serve_forever()
    except KeyboardInterrupt:
        pass