Skip to content

Commit

Permalink
Finish Adding inet topology reader, need to add API for NS3SimNoe
Browse files Browse the repository at this point in the history
  • Loading branch information
Jing Conan Wang committed Jul 8, 2012
1 parent 0bb2d93 commit 6df6567
Show file tree
Hide file tree
Showing 15 changed files with 13,018 additions and 80 deletions.
35 changes: 0 additions & 35 deletions core/ns3/BaseNode.py

This file was deleted.

106 changes: 73 additions & 33 deletions core/ns3/Experiment.py
@@ -1,46 +1,90 @@
from netns3 import *
from Node import *
from csma_ping import *
from core.ns3.netns3 import *
from core.ns3.Node import *
from core.ns3.csma_ping import *

def load_module(scenario):
__import__('scenario.%s'%(scenario))
scen = sys.modules['scenario.%s'%(scenario)]
return scen
from util import load_module, get_scenario_option

# for test, just select the first node as server, the second node as botmaster, all other nodes
# are clients
# class ImalseExperiment(NetnsExperiment):
class ImalseExperiment(PingCsmaExperiment):
# def createnet(self, devhelper, nodecontainer, addrhelper, mask, ifnames = []):
# super(ImalseExperiment, self).createnet(devhelper,
# nodecontainer, addrhelper,
# mask, ifnames )
def initparser(self, parser):
CsmaExperiment.initparser(self, parser)
parser.set_defaults(simtime = 10, pingcount = 3)
parser.add_option("-c", "--pingcount", dest = "pingcount",
help = "ping count; default = %s" %
parser.defaults["pingcount"])
parser.add_option('-s', '--scenario', dest="scenario",
default='None',
# help='specify the scenario you want to execute. Scenearios availiable are: %s'%(scenario_ops),
)
# parser.add_option("-r", '--role', default='None',
# help='specify the role you want to emulate, 1.[server], 2.[client], 3.[botmaster]',
# )
# class ImalseExperiment(PingCsmaExperiment):
class ImalseExperiment(NetnsExperiment):
def get_node(self, i):
return self.nodes[i]
@property
def node_num(self):
return len(self.nodes)

def _install_cmds(self):
scen = load_module(self.options.scenario)
botmaster_id_set = [1]
server_id_set = [0]
for i in xrange(len(self.nodes)):
for i in xrange(self.node_num):
if i in botmaster_id_set:
cmd = scen.ClientCMD()
elif i in server_id_set:
cmd = scen.ServerCMD()
else:
cmd = scen.BotMaster()
cmd.install(self.nodes[i])
cmd.install(self.get_node(i))

def node_run(self, node, *args, **kwargs):
node.cmd_set._trigger(*args, **kwargs)

from Topology import TopologyNet
import os
class ImalseTopoSimExperiment(ImalseExperiment):
"""This is pure ns-3 topology Experiment without emulated node"""

def initparser(self, parser):
super(ImalseTopoSimExperiment, self).initparser(parser)
parser.set_defaults(topology_file="./net_config/Inet_small_toposample.txt",
topology_type = 'Inet',
)
parser.add_option("-f", "--topology_file", dest = "topology_file",
help = "topology file name, default = %s" %(parser.defaults["topology_file"]))
parser.add_option('-p', '--topology_type', dest="topology_type",
help='type of topology file',
)
scenario_ops = get_scenario_option()
parser.add_option('-s', '--scenario', dest="scenario",
default='None',
help='specify the scenario you want to execute. Scenearios availiable are: %s'%(scenario_ops),
)


def get_node(self, i):
return self.net.nodes.Get(i)
@property
def node_num(self):
return self.net.nodes.GetN()

def setup(self):
self.net = TopologyNet(os.path.abspath(self.options.topology_file),
self.options.topology_type,
ImalseNetnsSimNode)
self._install_cmds()
if self.node_num == 0: return
for i in xrange(self.node_num):
print 'node [%i] start at [%f]s'%(i, i)
self.event(i+1, self.node_run, self.get_node(i), 'start') # start server

class ImalsePingCsmaExperiment(PingCsmaExperiment, ImalseExperiment):
def __init__(self, *argv, **kwargv):
PingCsmaExperiment.__init__(self, *argv, **kwargv)
ImalseExperiment.__init__(self)

def initparser(self, parser):
CsmaExperiment.initparser(self, parser)
parser.set_defaults(simtime = 10, pingcount = 3)
parser.add_option("-c", "--pingcount", dest = "pingcount",
help = "ping count; default = %s" %
parser.defaults["pingcount"])
scenario_ops = get_scenario_option()
parser.add_option('-s', '--scenario', dest="scenario",
default='None',
help='specify the scenario you want to execute. Scenearios availiable are: %s'%(scenario_ops),
)

def createnodes(self, numnodes, devhelper, prefix = "10.0.0.0/8",
nodenum = 0):
Expand Down Expand Up @@ -81,10 +125,8 @@ def createnet(self, devhelper, nodecontainer,
rename = ifname)
n.ipaddr = str(addr)



def node_run(self, node, *args, **kwargs):
node.cmd_set._trigger(*args, **kwargs)
def create_topology(self):
pass

def setup(self):
print 'this is setup of experiment'
Expand All @@ -103,5 +145,3 @@ def setup(self):
# if self.nodes:
# self.event(1, self.ping, self.nodes[0],
# "255.255.255.255", self.options.pingcount)


2 changes: 1 addition & 1 deletion core/ns3/Network.py
@@ -1,4 +1,4 @@
from netns3 import *
from core.ns3.netns3 import *
class Network:
def __init__(self, path):
print 'network config file [%s] loading...'%(path)
Expand Down
21 changes: 17 additions & 4 deletions core/ns3/Node.py 100644 → 100755
@@ -1,7 +1,6 @@
from netns3 import *
# import sys
# sys.path.append("..")
from BaseNode import BaseNode
#!/usr/bin/env python
from core.ns3.netns3 import *
from core.BaseNode import BaseNode
from core.real import PhyNode

# class ImalseNetnsNode(NetnsNode, BaseNode):
Expand All @@ -26,4 +25,18 @@ def stop_ping(self, sock):
print 'stop_ping'
# self.node.stop_app(sock, 'ping')

nodenum = 0
from ns.network import Socket
from ns.internet import TcpSocketFactory
from ns.core import TypeId
class ImalseNetnsSimNode(NetnsNode, BaseNode):
def __init__(self, *args, **kwargs):
global nodenum
name = "sim_n%s" %(nodenum)
NetnsNode.__init__(self, name, logfile = "/tmp/%s.log" % name)
nodenum += 1

def create_sock(self, desc):
sock = Socket.CreateSocket(self, TcpSocketFactory.GetTypeId())
print 'sock, ', sock
import pdb;pdb.set_trace()

0 comments on commit 6df6567

Please sign in to comment.