core-extra/ns3/examples/ns3lte.py

102 lines
3.1 KiB
Python
Raw Normal View History

"""
ns3lte.py - This script demonstrates using CORE with the ns-3 LTE model.
*** Note that this script is not currently functional, see notes below. ***
- issues connecting TapBridge with LteNetDevice
"""
import optparse
import sys
import ns.core
import ns.mobility
from core import logger
from core.misc import ipaddress
from core.misc import nodemaps
from core.misc import nodeutils
from corens3.obj import Ns3LteNet
from corens3.obj import Ns3Session
def ltesession(opt):
"""
Run a test LTE session.
"""
nodeutils.set_node_map(nodemaps.NODES)
session = Ns3Session(1, persistent=True, duration=opt.duration)
lte = session.add_object(cls=Ns3LteNet, name="wlan1")
lte.setsubchannels(range(25), range(50, 100))
if opt.verbose:
ascii = ns.network.AsciiTraceHelper()
stream = ascii.CreateFileStream('/tmp/ns3lte.tr')
lte.lte.EnableAsciiAll(stream)
# ns.core.LogComponentEnable("EnbNetDevice", ns.core.LOG_LEVEL_INFO)
# ns.core.LogComponentEnable("UeNetDevice", ns.core.LOG_LEVEL_INFO)
# lte.lte.EnableLogComponents()
prefix = ipaddress.Ipv4Prefix("10.0.0.0/16")
mobb = None
nodes = []
for i in xrange(1, opt.numnodes + 1):
node = session.addnode(name="n%d" % i)
mob = ns.mobility.ConstantPositionMobilityModel()
mob.SetPosition(ns.core.Vector3D(10.0 * i, 0.0, 0.0))
if i == 1:
# first node is nodeb
lte.setnodeb(node)
mobb = mob
node.newnetif(lte, ["%s/%s" % (prefix.addr(i), prefix.prefixlen)])
nodes.append(node)
if i == 1:
(tmp, ns3dev) = lte.findns3dev(node)
lte.lte.AddMobility(ns3dev.GetPhy(), mob)
if i > 1:
lte.linknodeb(node, nodes[0], mob, mobb)
session.thread = session.run(vis=opt.visualize)
return session
def main():
"""
Main routine when running from command-line.
"""
usagestr = "usage: %prog [-h] [options] [args]"
parser = optparse.OptionParser(usage=usagestr)
parser.set_defaults(numnodes=4, duration=600, verbose=False, visualize=False)
parser.add_option("-d", "--duration", dest="duration", type=int,
help="number of seconds to run the simulation")
parser.add_option("-n", "--numnodes", dest="numnodes", type=int,
help="number of nodes")
parser.add_option("-z", "--visualize", dest="visualize",
action="store_true", help="enable visualizer")
parser.add_option("-v", "--verbose", dest="verbose",
action="store_true", help="be more verbose")
def usage(msg=None, err=0):
sys.stdout.write("\n")
if msg:
sys.stdout.write(msg + "\n\n")
parser.print_help()
sys.exit(err)
opt, args = parser.parse_args()
if opt.numnodes < 2:
usage("invalid numnodes: %s" % opt.numnodes)
for a in args:
logger.warn("ignoring command line argument: '%s'", a)
return ltesession(opt)
def cleanup():
logger.info("shutting down session")
session.shutdown()
if __name__ == "__main__":
session = main()