From: Alina Quereilhac Date: Sat, 20 Sep 2014 12:57:32 +0000 (+0200) Subject: Improving DCE examples X-Git-Tag: nepi-3.2.0~76 X-Git-Url: http://git.onelab.eu/?p=nepi.git;a=commitdiff_plain;h=f8f93f1014d7720481b0e9770b8014e1d5659f7d Improving DCE examples --- diff --git a/examples/dce/custom_local_csma_ping.py b/examples/dce/custom_local_csma_ping.py new file mode 100644 index 00000000..f9f40af9 --- /dev/null +++ b/examples/dce/custom_local_csma_ping.py @@ -0,0 +1,102 @@ +#!/usr/bin/env python +# +# NEPI, a framework to manage network experiments +# Copyright (C) 2013 INRIA +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +# Author: Alina Quereilhac + +from nepi.execution.ec import ExperimentController + +def add_ns3_node(ec, simu): + node = ec.register_resource("ns3::Node") + ec.register_connection(node, simu) + + ipv4 = ec.register_resource("ns3::Ipv4L3Protocol") + ec.register_connection(node, ipv4) + + arp = ec.register_resource("ns3::ArpL3Protocol") + ec.register_connection(node, arp) + + icmp = ec.register_resource("ns3::Icmpv4L4Protocol") + ec.register_connection(node, icmp) + + udp = ec.register_resource("ns3::UdpL4Protocol") + ec.register_connection(node, udp) + + tcp = ec.register_resource("ns3::TcpL4Protocol") + ec.register_connection(node, tcp) + + return node + +def add_device(ec, node, ip, prefix): + dev = ec.register_resource("ns3::CsmaNetDevice") + ec.set(dev, "ip", ip) + ec.set(dev, "prefix", prefix) + ec.register_connection(node, dev) + + queue = ec.register_resource("ns3::DropTailQueue") + ec.register_connection(dev, queue) + + return dev + +ec = ExperimentController(exp_id = "dce-custom-csma-ping") + +node = ec.register_resource("LinuxNode") +ec.set(node, "hostname", "localhost") +ec.set(node, "cleanProcesses", True) + +simu = ec.register_resource("LinuxNS3Simulation") +ec.set(simu, "verbose", True) +ec.register_connection(simu, node) + +nsnode1 = add_ns3_node(ec, simu) +dev1 = add_device(ec, nsnode1, "10.0.0.1", "30") + +nsnode2 = add_ns3_node(ec, simu) +dev2 = add_device(ec, nsnode2, "10.0.0.2", "30") + +# Create channel +chan = ec.register_resource("ns3::CsmaChannel") +ec.set(chan, "Delay", "2ms") + +ec.register_connection(chan, dev1) +ec.register_connection(chan, dev2) + +### create applications +ping = ec.register_resource("ns3::LinuxDceApplication") +ec.set (ping, "sources", "http://www.skbuff.net/iputils/iputils-s20101006.tar.bz2") +ec.set (ping, "build", "tar xvjf ${SRC}/iputils-s20101006.tar.bz2 && " + "cd iputils-s20101006/ && " + "sed -i 's/CFLAGS=/CFLAGS+=/g' Makefile && " + "make CFLAGS=-fPIC LDFLAGS='-pie -rdynamic' ping && " + "cp ping ${BIN_DCE} && cd - ") +ec.set (ping, "binary", "ping") +ec.set (ping, "stackSize", 1<<20) +ec.set (ping, "arguments", "-c 10;-s 1000;10.0.0.2") +ec.set (ping, "StartTime", "1s") +ec.set (ping, "StopTime", "20s") +ec.register_connection(ping, nsnode1) + +ec.deploy() + +ec.wait_finished([ping]) + +stdout = ec.trace(ping, "stdout") + +ec.shutdown() + +print "PING OUTPUT", stdout + diff --git a/examples/dce/custom_dce_ccn.py b/examples/dce/custom_local_p2p_ccn.py similarity index 91% rename from examples/dce/custom_dce_ccn.py rename to examples/dce/custom_local_p2p_ccn.py index b22d6680..3ba901a5 100644 --- a/examples/dce/custom_dce_ccn.py +++ b/examples/dce/custom_local_p2p_ccn.py @@ -43,7 +43,7 @@ def add_ns3_node(ec, simu): return node -def add_point2point_device(ec, node, ip, prefix): +def add_device(ec, node, ip, prefix): dev = ec.register_resource("ns3::PointToPointNetDevice") ec.set(dev, "ip", ip) ec.set(dev, "prefix", prefix) @@ -59,28 +59,25 @@ ec = ExperimentController(exp_id = "dce-custom-ccn") node = ec.register_resource("LinuxNode") ec.set(node, "hostname", "localhost") ec.set(node, "cleanProcesses", True) -#ec.set(node, "cleanHome", True) simu = ec.register_resource("LinuxNS3Simulation") ec.set(simu, "verbose", True) -ec.set(simu, "nsLog", "DceApplication") -ec.set(simu, "enableDump", True) ec.register_connection(simu, node) nsnode1 = add_ns3_node(ec, simu) -p2p1 = add_point2point_device(ec, nsnode1, "10.0.0.1", "30") -ec.set(p2p1, "DataRate", "5Mbps") +dev1 = add_device(ec, nsnode1, "10.0.0.1", "30") +ec.set(dev1, "DataRate", "5Mbps") nsnode2 = add_ns3_node(ec, simu) -p2p2 = add_point2point_device(ec, nsnode2, "10.0.0.2", "30") -ec.set(p2p2, "DataRate", "5Mbps") +dev2 = add_device(ec, nsnode2, "10.0.0.2", "30") +ec.set(dev2, "DataRate", "5Mbps") # Create channel chan = ec.register_resource("ns3::PointToPointChannel") ec.set(chan, "Delay", "2ms") -ec.register_connection(chan, p2p1) -ec.register_connection(chan, p2p2) +ec.register_connection(chan, dev1) +ec.register_connection(chan, dev2) ### create applications @@ -110,8 +107,8 @@ ec.register_connection(ccnd1, nsnode1) # parameters repofile = os.path.join( os.path.dirname(os.path.realpath(__file__)), - "..", "..", "..", - "test", "resources", "linux", "ns3", "ccn", "repoFile1") + "..", "..", "test", "resources", "linux", + "ns3", "ccn", "repoFile1") ccnr = ec.register_resource("ns3::LinuxCCNDceApplication") ec.set (ccnr, "binary", "ccnr") @@ -172,4 +169,3 @@ print "%0.2f MBytes received" % (len(stdout) / 1024.0 / 1024.0 ) ec.shutdown() - diff --git a/examples/dce/custom_dce_ping.py b/examples/dce/custom_local_p2p_ping.py similarity index 86% rename from examples/dce/custom_dce_ping.py rename to examples/dce/custom_local_p2p_ping.py index 5210d637..153b3812 100644 --- a/examples/dce/custom_dce_ping.py +++ b/examples/dce/custom_local_p2p_ping.py @@ -41,7 +41,7 @@ def add_ns3_node(ec, simu): return node -def add_point2point_device(ec, node, ip, prefix): +def add_device(ec, node, ip, prefix): dev = ec.register_resource("ns3::PointToPointNetDevice") ec.set(dev, "ip", ip) ec.set(dev, "prefix", prefix) @@ -52,33 +52,30 @@ def add_point2point_device(ec, node, ip, prefix): return dev -ec = ExperimentController(exp_id = "dce-custom-ping") +ec = ExperimentController(exp_id = "dce-custom-p2p-ping") node = ec.register_resource("LinuxNode") ec.set(node, "hostname", "localhost") ec.set(node, "cleanProcesses", True) -#ec.set(node, "cleanHome", True) simu = ec.register_resource("LinuxNS3Simulation") ec.set(simu, "verbose", True) -ec.set(simu, "nsLog", "DceApplication") -ec.set(simu, "enableDump", True) ec.register_connection(simu, node) nsnode1 = add_ns3_node(ec, simu) -p2p1 = add_point2point_device(ec, nsnode1, "10.0.0.1", "30") -ec.set(p2p1, "DataRate", "5Mbps") +dev1 = add_device(ec, nsnode1, "10.0.0.1", "30") +ec.set(dev1, "DataRate", "5Mbps") nsnode2 = add_ns3_node(ec, simu) -p2p2 = add_point2point_device(ec, nsnode2, "10.0.0.2", "30") -ec.set(p2p2, "DataRate", "5Mbps") +dev2 = add_device(ec, nsnode2, "10.0.0.2", "30") +ec.set(dev2, "DataRate", "5Mbps") # Create channel chan = ec.register_resource("ns3::PointToPointChannel") ec.set(chan, "Delay", "2ms") -ec.register_connection(chan, p2p1) -ec.register_connection(chan, p2p2) +ec.register_connection(chan, dev1) +ec.register_connection(chan, dev2) ### create applications ping = ec.register_resource("ns3::LinuxDceApplication") @@ -104,3 +101,4 @@ stdout = ec.trace(ping, "stdout") ec.shutdown() print "PING OUTPUT", stdout + diff --git a/examples/dce/custom_local_wifi_ping.py b/examples/dce/custom_local_wifi_ping.py new file mode 100644 index 00000000..7c61df39 --- /dev/null +++ b/examples/dce/custom_local_wifi_ping.py @@ -0,0 +1,134 @@ +#!/usr/bin/env python +# +# NEPI, a framework to manage network experiments +# Copyright (C) 2013 INRIA +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +# Author: Alina Quereilhac + +from nepi.execution.ec import ExperimentController + +def add_ns3_node(ec, simu): + node = ec.register_resource("ns3::Node") + ec.register_connection(node, simu) + + ipv4 = ec.register_resource("ns3::Ipv4L3Protocol") + ec.register_connection(node, ipv4) + + arp = ec.register_resource("ns3::ArpL3Protocol") + ec.register_connection(node, arp) + + icmp = ec.register_resource("ns3::Icmpv4L4Protocol") + ec.register_connection(node, icmp) + + udp = ec.register_resource("ns3::UdpL4Protocol") + ec.register_connection(node, udp) + + tcp = ec.register_resource("ns3::TcpL4Protocol") + ec.register_connection(node, tcp) + + return node + +def add_device(ec, node, ip, prefix, access_point = False): + dev = ec.register_resource("ns3::WifiNetDevice") + ec.set(dev, "ip", ip) + ec.set(dev, "prefix", prefix) + ec.register_connection(node, dev) + + phy = ec.register_resource("ns3::YansWifiPhy") + ec.set(phy, "Standard", "WIFI_PHY_STANDARD_80211a") + ec.register_connection(dev, phy) + + error = ec.register_resource("ns3::NistErrorRateModel") + ec.register_connection(phy, error) + + manager = ec.register_resource("ns3::ArfWifiManager") + ec.register_connection(dev, manager) + + if access_point: + mac = ec.register_resource("ns3::ApWifiMac") + else: + mac = ec.register_resource("ns3::StaWifiMac") + + ec.set(mac, "Standard", "WIFI_PHY_STANDARD_80211a") + ec.register_connection(dev, mac) + + return dev, phy + +def add_constant_mobility(ec, node, x, y, z): + mobility = ec.register_resource("ns3::ConstantPositionMobilityModel") + position = "%d:%d:%d" % (x, y, z) + ec.set(mobility, "Position", position) + ec.register_connection(node, mobility) + return mobility + +def add_wifi_channel(ec): + channel = ec.register_resource("ns3::YansWifiChannel") + delay = ec.register_resource("ns3::ConstantSpeedPropagationDelayModel") + ec.register_connection(channel, delay) + + loss = ec.register_resource("ns3::LogDistancePropagationLossModel") + ec.register_connection(channel, loss) + + return channel + +ec = ExperimentController(exp_id = "dce-custom-wifi-ping") + +node = ec.register_resource("LinuxNode") +ec.set(node, "hostname", "localhost") +ec.set(node, "cleanProcesses", True) + +simu = ec.register_resource("LinuxNS3Simulation") +ec.set(simu, "verbose", True) +ec.register_connection(simu, node) + +nsnode1 = add_ns3_node(ec, simu) +add_constant_mobility(ec, nsnode1, 0, 0, 0) +dev1, phy1 = add_device(ec, nsnode1, "10.0.0.1", "30") + +nsnode2 = add_ns3_node(ec, simu) +add_constant_mobility(ec, nsnode2, 50, 50, 0) +dev2, phy2 = add_device(ec, nsnode2, "10.0.0.2", "30", access_point = True) + +# Create channel +chan = add_wifi_channel(ec) +ec.register_connection(chan, phy1) +ec.register_connection(chan, phy2) + +### create applications +ping = ec.register_resource("ns3::LinuxDceApplication") +ec.set (ping, "sources", "http://www.skbuff.net/iputils/iputils-s20101006.tar.bz2") +ec.set (ping, "build", "tar xvjf ${SRC}/iputils-s20101006.tar.bz2 && " + "cd iputils-s20101006/ && " + "sed -i 's/CFLAGS=/CFLAGS+=/g' Makefile && " + "make CFLAGS=-fPIC LDFLAGS='-pie -rdynamic' ping && " + "cp ping ${BIN_DCE} && cd - ") +ec.set (ping, "binary", "ping") +ec.set (ping, "stackSize", 1<<20) +ec.set (ping, "arguments", "-c 10;-s 1000;10.0.0.2") +ec.set (ping, "StartTime", "1s") +ec.set (ping, "StopTime", "20s") +ec.register_connection(ping, nsnode1) + +ec.deploy() + +ec.wait_finished([ping]) + +stdout = ec.trace(ping, "stdout") + +ec.shutdown() + +print "PING OUTPUT", stdout + diff --git a/examples/dce/dce_ccn_application.py b/examples/dce/wrapped_local_p2p_ccncat.py similarity index 89% rename from examples/dce/dce_ccn_application.py rename to examples/dce/wrapped_local_p2p_ccncat.py index b4c15441..94f69c20 100644 --- a/examples/dce/dce_ccn_application.py +++ b/examples/dce/wrapped_local_p2p_ccncat.py @@ -43,7 +43,7 @@ def add_ns3_node(ec, simu): return node -def add_point2point_device(ec, node, ip, prefix): +def add_device(ec, node, ip, prefix): dev = ec.register_resource("ns3::PointToPointNetDevice") ec.set(dev, "ip", ip) ec.set(dev, "prefix", prefix) @@ -54,30 +54,29 @@ def add_point2point_device(ec, node, ip, prefix): return dev -ec = ExperimentController(exp_id = "dce-ccn-app") +ec = ExperimentController(exp_id = "dce-ccncat") node = ec.register_resource("LinuxNode") ec.set(node, "hostname", "localhost") ec.set(node, "cleanProcesses", True) -#ec.set(node, "cleanHome", True) simu = ec.register_resource("LinuxNS3Simulation") ec.register_connection(simu, node) nsnode1 = add_ns3_node(ec, simu) -p2p1 = add_point2point_device(ec, nsnode1, "10.0.0.1", "30") -ec.set(p2p1, "DataRate", "5Mbps") +dev1 = add_device(ec, nsnode1, "10.0.0.1", "30") +ec.set(dev1, "DataRate", "5Mbps") nsnode2 = add_ns3_node(ec, simu) -p2p2 = add_point2point_device(ec, nsnode2, "10.0.0.2", "30") -ec.set(p2p2, "DataRate", "5Mbps") +dev2 = add_device(ec, nsnode2, "10.0.0.2", "30") +ec.set(dev2, "DataRate", "5Mbps") # Create channel chan = ec.register_resource("ns3::PointToPointChannel") ec.set(chan, "Delay", "2ms") -ec.register_connection(chan, p2p1) -ec.register_connection(chan, p2p2) +ec.register_connection(chan, dev1) +ec.register_connection(chan, dev2) ### create applications # Add ccnd to ns-3 node1 @@ -92,8 +91,8 @@ ec.register_connection(ccnd1, nsnode1) # Add CCN repository with content to ns-3 node1 repofile = os.path.join( os.path.dirname(os.path.realpath(__file__)), - "..", "..", "..", - "test", "resources", "linux", "ns3", "ccn", "repoFile1") + "..", "..", "test", "resources", "linux", + "ns3", "ccn", "repoFile1") ccnr = ec.register_resource("ns3::LinuxDceCCNR") ec.set (ccnr, "repoFile1", repofile) diff --git a/examples/dce/dce_ccnpeek_application.py b/examples/dce/wrapped_local_p2p_ccnpeek.py similarity index 96% rename from examples/dce/dce_ccnpeek_application.py rename to examples/dce/wrapped_local_p2p_ccnpeek.py index 014eb6e8..f1ca9e6d 100644 --- a/examples/dce/dce_ccnpeek_application.py +++ b/examples/dce/wrapped_local_p2p_ccnpeek.py @@ -41,12 +41,11 @@ def add_ns3_node(ec, simu): return node -ec = ExperimentController(exp_id = "dce-ccnpeek-app") +ec = ExperimentController(exp_id = "dce-local-ccnpeek") node = ec.register_resource("LinuxNode") ec.set(node, "hostname", "localhost") ec.set(node, "cleanProcesses", True) -#ec.set(node, "cleanHome", True) simu = ec.register_resource("LinuxNS3Simulation") ec.register_connection(simu, node) @@ -82,3 +81,4 @@ stdout = ec.trace(ccnpeek, "stdout") ec.shutdown() print "PEEK received", stdout + diff --git a/examples/dce/dce_ping_application.py b/examples/dce/wrapped_local_p2p_ping.py similarity index 88% rename from examples/dce/dce_ping_application.py rename to examples/dce/wrapped_local_p2p_ping.py index c4d137af..e94c349b 100644 --- a/examples/dce/dce_ping_application.py +++ b/examples/dce/wrapped_local_p2p_ping.py @@ -41,7 +41,7 @@ def add_ns3_node(ec, simu): return node -def add_point2point_device(ec, node, ip, prefix): +def add_device(ec, node, ip, prefix): dev = ec.register_resource("ns3::PointToPointNetDevice") ec.set(dev, "ip", ip) ec.set(dev, "prefix", prefix) @@ -57,25 +57,24 @@ ec = ExperimentController(exp_id = "dce-ping-app") node = ec.register_resource("LinuxNode") ec.set(node, "hostname", "localhost") ec.set(node, "cleanProcesses", True) -#ec.set(node, "cleanHome", True) simu = ec.register_resource("LinuxNS3Simulation") ec.register_connection(simu, node) nsnode1 = add_ns3_node(ec, simu) -p2p1 = add_point2point_device(ec, nsnode1, "10.0.0.1", "30") -ec.set(p2p1, "DataRate", "5Mbps") +dev1 = add_device(ec, nsnode1, "10.0.0.1", "30") +ec.set(dev1, "DataRate", "5Mbps") nsnode2 = add_ns3_node(ec, simu) -p2p2 = add_point2point_device(ec, nsnode2, "10.0.0.2", "30") -ec.set(p2p2, "DataRate", "5Mbps") +dev2 = add_device(ec, nsnode2, "10.0.0.2", "30") +ec.set(dev2, "DataRate", "5Mbps") # Create channel chan = ec.register_resource("ns3::PointToPointChannel") ec.set(chan, "Delay", "2ms") -ec.register_connection(chan, p2p1) -ec.register_connection(chan, p2p2) +ec.register_connection(chan, dev1) +ec.register_connection(chan, dev2) ### create applications ping = ec.register_resource("ns3::LinuxDcePing") @@ -96,3 +95,4 @@ stdout = ec.trace(ping, "stdout") ec.shutdown() print "PING OUTPUT", stdout +