Esempio n. 1
0
 def _createBackhaul(self, enbNode, throughput = '1Gbps', delay=0):
     addrHelper = ns.internet.Ipv4AddressHelper()
     # Might not need this one...
     self._ref(addrHelper)
     
     addrHelper.SetBase(Ipv4Address("10.0.0.0"), Ipv4Mask("255.255.255.252"))
     
     p2ph = ns.point_to_point.PointToPointHelper()
     p2ph.SetDeviceAttribute("DataRate", StringValue(throughput))
     p2ph.SetDeviceAttribute("Mtu", UintegerValue(2000))
     p2ph.SetChannelAttribute("Delay", TimeValue(MilliSeconds(delay)))
     sgwEnbDevices = p2ph.Install(self.sgw, enbNode)
     
     sgwEnbIpIfaces = addrHelper.Assign(sgwEnbDevices)
     addrHelper.NewNetwork()
     
     sgwS1uAddress = sgwEnbIpIfaces.GetAddress(0)
     enbS1uAddress = sgwEnbIpIfaces.GetAddress(1)
     
     self.epcHelper.AddS1Interface(enbNode, enbS1uAddress, sgwS1uAddress)
Esempio n. 2
0
def mkPath(name):
    return StringValue(mkPathRaw(name))
Esempio n. 3
0
                  mkPath("DlRlcStats"))
Config.SetDefault("ns3::RadioBearerStatsCalculator::UlRlcOutputFilename",
                  mkPath("UlRlcStats"))
Config.SetDefault("ns3::RadioBearerStatsCalculator::DlPdcpOutputFilename",
                  mkPath("DlPdcpStats"))
Config.SetDefault("ns3::RadioBearerStatsCalculator::UlPdcpOutputFilename",
                  mkPath("UlPdcpStats"))

Config.SetDefault("ns3::PhyStatsCalculator::DlRsrpSinrFilename",
                  mkPath("DlRsrpSinrStats"))
Config.SetDefault("ns3::PhyStatsCalculator::UlSinrFilename",
                  mkPath("UlSinrStats"))

# Heavy and not helpful, for now
Config.SetDefault("ns3::PhyStatsCalculator::UlInterferenceFilename",
                  StringValue("/dev/null"))
Config.SetDefault("ns3::PhyRxStatsCalculator::DlRxOutputFilename",
                  StringValue("/dev/null"))
Config.SetDefault("ns3::PhyRxStatsCalculator::UlRxOutputFilename",
                  StringValue("/dev/null"))
Config.SetDefault("ns3::PhyTxStatsCalculator::DlTxOutputFilename",
                  StringValue("/dev/null"))
Config.SetDefault("ns3::PhyTxStatsCalculator::UlTxOutputFilename",
                  StringValue("/dev/null"))

# Approximately the ms sampling interval for SINR/RSRP
Config.SetDefault("ns3::LteEnbPhy::UeSinrSamplePeriod", UintegerValue(100))
Config.SetDefault("ns3::LteUePhy::RsrpSinrSamplePeriod", UintegerValue(100))

serverStats, clientStats = judge.runNS3Simulation(
    flight,
Esempio n. 4
0
    def runNS3Simulation(self,
                         flight,
                         start='2020-07-01T08',
                         end=None,
                         burstArrivals=1,
                         burstLength=1,
                         upload=True,
                         download=False):
        """
        Runs an NS3 simulation of this flight, one cycle.
        
        Except for short runs, it is better to use the runner*.py files.
        """
        # By default, run a single cycle
        if end is None:
            end = pd.to_datetime(start) + pd.offsets.Second(
                int(flight.cycleTime))

        dt = int((end - pd.to_datetime(start)).total_seconds())

        from ns.core import Vector, MilliSeconds, Seconds, StringValue
        from thesis.simulation import SimulationContext
        import ns.mobility
        from ns.mobility import PathMobilityModelSegments as Seg
        import ns.flow_monitor

        flh = ns.flow_monitor.FlowMonitorHelper()

        with SimulationContext() as sim:
            # Add our entities
            sim.addEnbFlight(flight)
            for user in self._scene.users:
                sim.addUser(*user)
            sim._finalizeNodes()

            # For WS paper, upload
            for idx in range(len(self._scene.users)):
                # Create traffic generators
                ueNode = sim.ueNodes.Get(idx)
                ueNetDev = sim.ueLteDevs.Get(idx)
                ueIp = sim.ueIpIface.GetAddress(idx)

                sinkAddr = ns.network.InetSocketAddress(
                    sim.remoteHostAddr, 9000 + idx)
                packetSinkHelper = ns.applications.PacketSinkHelper(
                    "ns3::UdpSocketFactory", sinkAddr)
                sim.serverApps.Add(packetSinkHelper.Install(sim.remoteHost))

                MbpsTarget = 1

                h = ns.applications.PPBPHelper("ns3::UdpSocketFactory",
                                               sinkAddr)
                # Supposed to be how many active "bursts" we have, but appears to be how many started per second
                h.SetAttribute(
                    "MeanBurstArrivals",
                    StringValue("ns3::ConstantRandomVariable[Constant=%f]" %
                                burstArrivals))
                # Duration in seconds of each burst
                h.SetAttribute(
                    "MeanBurstTimeLength",
                    StringValue("ns3::ConstantRandomVariable[Constant=%f]" %
                                burstLength))
                h.SetAttribute("BurstIntensity", StringValue("1Mb/s"))
                app = h.Install(ueNode)
                sim.clientApps.Add(app)

            # We do a brief look at the download direction too
            for idx in range(len(self._scene.users)):
                # Create traffic generators
                ueNode = sim.ueNodes.Get(idx)
                ueNetDev = sim.ueLteDevs.Get(idx)
                ueIp = sim.ueIpIface.GetAddress(idx)

                sinkAddr = ns.network.InetSocketAddress(ueIp, 8000 + idx)
                packetSinkHelper = ns.applications.PacketSinkHelper(
                    "ns3::UdpSocketFactory", sinkAddr)
                sim.serverApps.Add(packetSinkHelper.Install(ueNode))

                MbpsTarget = 1

                h = ns.applications.PPBPHelper("ns3::UdpSocketFactory",
                                               sinkAddr)
                # Supposed to be how many active "bursts" we have, but appears to be how many started per second
                h.SetAttribute(
                    "MeanBurstArrivals",
                    StringValue("ns3::ConstantRandomVariable[Constant=%f]" %
                                burstArrivals))
                # Duration in seconds of each burst
                h.SetAttribute(
                    "MeanBurstTimeLength",
                    StringValue("ns3::ConstantRandomVariable[Constant=%f]" %
                                burstLength))
                h.SetAttribute("BurstIntensity", StringValue("1Mb/s"))
                app = h.Install(sim.remoteHost)
                sim.clientApps.Add(app)

            # Set up traces

            sim.lteHelper.EnableRlcTraces()
            sim.lteHelper.EnablePhyTraces()

            flh.InstallAll()

            sim.startAndMonitorApps(resolution=10)
            sim.stopAppsAt(dt)

            sim.run(dt + 10)

            return sim.serverAppStats, sim.clientAppStats
Esempio n. 5
0
def mkPathRaw(name):
  return './out/%s_%s_run%d_usr%d_rad%.2f_ul%d_dl%d.txt' % (name, args.trajectory, args.run, args.users, args.radius, args.upload, args.download)

def mkPath(name):
  return StringValue(mkPathRaw(name))

Config.SetDefault("ns3::RadioBearerStatsCalculator::DlRlcOutputFilename", mkPath("DlRlcStats"))
Config.SetDefault("ns3::RadioBearerStatsCalculator::UlRlcOutputFilename", mkPath("UlRlcStats"))
Config.SetDefault("ns3::RadioBearerStatsCalculator::DlPdcpOutputFilename", mkPath("DlPdcpStats"))
Config.SetDefault("ns3::RadioBearerStatsCalculator::UlPdcpOutputFilename", mkPath("UlPdcpStats"))

Config.SetDefault("ns3::PhyStatsCalculator::DlRsrpSinrFilename", mkPath("DlRsrpSinrStats"))
Config.SetDefault("ns3::PhyStatsCalculator::UlSinrFilename", mkPath("UlSinrStats"))

# Heavy and not helpful, for now
Config.SetDefault("ns3::PhyStatsCalculator::UlInterferenceFilename", StringValue("/dev/null"))
Config.SetDefault("ns3::PhyRxStatsCalculator::DlRxOutputFilename", StringValue("/dev/null"))
Config.SetDefault("ns3::PhyRxStatsCalculator::UlRxOutputFilename", StringValue("/dev/null"))
Config.SetDefault("ns3::PhyTxStatsCalculator::DlTxOutputFilename", StringValue("/dev/null"))
Config.SetDefault("ns3::PhyTxStatsCalculator::UlTxOutputFilename", StringValue("/dev/null"))

# Approximately the ms sampling interval for SINR/RSRP
Config.SetDefault("ns3::LteEnbPhy::UeSinrSamplePeriod", UintegerValue(100))
Config.SetDefault("ns3::LteUePhy::RsrpSinrSamplePeriod", UintegerValue(100))


serverStats, clientStats = judge.runNS3Simulation(
  flight,
  # One 24 hour period
  start = pd.to_datetime('2020-11-29T08'),
  # Test time
Esempio n. 6
0
import ns
from ns.point_to_point import PointToPointHelper
from ns.point_to_point_layout import PointToPointDumbbellHelper
from ns.core import Simulator, Seconds, UintegerValue, TimeValue, CommandLine, MilliSeconds, StringValue, PointerValue, ObjectFactory, DoubleValue
from ns.internet import InternetStackHelper
from ns.internet import Ipv4AddressHelper, Ipv4GlobalRoutingHelper
from ns.network import Ipv4Address, Ipv4Mask, Node, RateErrorModel
from ns.applications import UdpEchoServerHelper, UdpEchoClientHelper
import ns.visualizer
import sys

command_line = CommandLine()
command_line.Parse(sys.argv)

point_to_point_helper = PointToPointHelper()
point_to_point_helper.SetDeviceAttribute("DataRate", StringValue("5Mbps"))
point_to_point_helper.SetChannelAttribute("Delay", StringValue("2ms"))
point_to_point_helper_bottleneck = PointToPointHelper()
point_to_point_helper_bottleneck.SetDeviceAttribute("DataRate",
                                                    StringValue("5Mbps"))
point_to_point_helper_bottleneck.SetChannelAttribute("Delay",
                                                     StringValue("2ms"))

object_factory = ns.core.ObjectFactory()
object_factory.SetTypeId("ns3::RateErrorModel")
object_factory.Set("ErrorRate", ns.core.DoubleValue(100))
error_model = object_factory.Create()
point_to_point_helper_bottleneck.SetDeviceAttribute("ReceiveErrorModel",
                                                    PointerValue(error_model))

point_to_point_dumbbell_helper = PointToPointDumbbellHelper(
Esempio n. 7
0
    def __enter__(self):
        # Reset our IP address space when we re-setup the simulation
        # XXX This may be ill-advised...
        ns.internet.Ipv4AddressGenerator.Reset()

        # TODO move a bunch of these we don't care about into _ref instead of naming
        
        # NB These MUST NOT be re-invoked in the same process without resetting IP address space
        self.lteHelper = ns.lte.LteHelper()
        self.epcHelper = ns.lte.NoBackhaulEpcHelper()
        self.ipv4h = ns.internet.Ipv4AddressHelper()
        
        self.lteHelper.SetEpcHelper(self.epcHelper)
        self.pgw = self.epcHelper.GetPgwNode()
        
        # Create our remote host and internet link
        self.remoteHostContainer = ns.network.NodeContainer()
        self.remoteHostContainer.Create(1)
        self.remoteHost = self.remoteHostContainer.Get(0)
        self.internet = ns.internet.InternetStackHelper()
        self.internet.Install(self.remoteHostContainer)
        
        # Create our backhaul
        self.p2ph = ns.point_to_point.PointToPointHelper()

        self.p2ph.SetDeviceAttribute("DataRate", StringValue("1Gbps"))
        self.p2ph.SetDeviceAttribute("Mtu", UintegerValue(int(1500)))
        self.p2ph.SetChannelAttribute("Delay", TimeValue(MilliSeconds(int(20))))

        self.internetDevices = self.p2ph.Install(self.pgw, self.remoteHost)

        self.ipv4h.SetBase(Ipv4Address("1.0.0.0"), Ipv4Mask("255.0.0.0"))
        self.internetIpInterfaces = self.ipv4h.Assign(self.internetDevices)
        # 0 is loopback, 1 is p2p
        self.remoteHostAddr = self.internetIpInterfaces.GetAddress(1)

        self.routingHelper = ns.internet.Ipv4StaticRoutingHelper()
        self.remoteHostIpv4 = self.remoteHost.GetObject(Ipv4.GetTypeId())
        self.remoteHostStaticRouting = self.routingHelper.GetStaticRouting(self.remoteHostIpv4)
        self.remoteHostStaticRouting.AddNetworkRouteTo(Ipv4Address("7.0.0.0"), Ipv4Mask("255.0.0.0"), 1)

        # SGW node
        self.sgw = self.epcHelper.GetSgwNode()

        # Apparently SGW needs a mobility model?
        self.sgwLp = ns.mobility.ListPositionAllocator()
        self.sgwLp.Add(ns.core.Vector(0, 0, 0))
        self.sgwMob = ns.mobility.MobilityHelper()
        self.sgwMob.SetMobilityModel("ns3::ConstantPositionMobilityModel")
        self.sgwMob.SetPositionAllocator(self.sgwLp)
        self.sgwMob.Install(self.sgw)
        
        # UE and ENB Nodes, to be populated
        self.ueNodes = ns.network.NodeContainer()
        self.enbNodes = ns.network.NodeContainer()
        
        self.userPositions = ns.mobility.ListPositionAllocator()
        self.enbMobilities = []

        # Application containers
        self.clientApps = ns.network.ApplicationContainer()
        self.serverApps = ns.network.ApplicationContainer()

        self.dlPort = 1100
        self.ulPort = 2000

        return self
Esempio n. 8
0
import ns
import sys
import ns.visualizer
from ns.core import CommandLine, StringValue, Seconds, Simulator, TimeValue
from ns.point_to_point import PointToPointHelper
from ns.point_to_point_layout import PointToPointStarHelper
from ns.internet import InternetStackHelper, Ipv4AddressHelper, Ipv4GlobalRoutingHelper
from ns.network import Ipv4Address, Ipv4Mask, Address, ApplicationContainer, AddressValue, InetSocketAddress
from ns.applications import OnOffHelper, PacketSinkHelper

commandLine = CommandLine()
commandLine.Parse(sys.argv)

# Build Star Topology
pointToPointHelper = PointToPointHelper()
pointToPointHelper.SetDeviceAttribute("DataRate", StringValue("5Mbps"))
pointToPointHelper.SetChannelAttribute("Delay", StringValue("2ms"))
pointToPointStarHelper = PointToPointStarHelper(5, pointToPointHelper)

# Install Internet Stack On All Nodes
internetStackHelper = InternetStackHelper()
pointToPointStarHelper.InstallStack(internetStackHelper)

# Assign IP Address
pointToPointStarHelper.AssignIpv4Addresses(
    Ipv4AddressHelper(Ipv4Address("10.1.1.0"), Ipv4Mask("255.255.255.0")))

# Create A Packet Sink On The Star "Hub" To Recieve Packets
hubLocalAddress = Address(InetSocketAddress(Ipv4Address.GetAny(), 50000))
packetSinkHelper = PacketSinkHelper("ns3::TcpSocketFactory", hubLocalAddress)
hubApp = ApplicationContainer()
Esempio n. 9
0
net2Nodes = NodeContainer()
net2Nodes.Add(net1Nodes.Get(1))
net2Nodes.Create(1)
print(net2Nodes)

net3Nodes = NodeContainer()
net3Nodes.Add(net1Nodes.Get(1))
net3Nodes.Create(1)
print(net3Nodes)

# source to center link

pointToPointHelperSourceToCenter = PointToPointHelper()
pointToPointHelperSourceToCenter.SetDeviceAttribute("DataRate",
                                                    StringValue("5Mbps"))
pointToPointHelperSourceToCenter.SetChannelAttribute("Delay",
                                                     StringValue("2ms"))

pointToPointHelperSourceToCenter.SetQueue("ns3::DropTailQueue")

devices1 = NetDeviceContainer()
devices1 = pointToPointHelperSourceToCenter.Install(net1Nodes)

devices2 = NetDeviceContainer()
devices2 = pointToPointHelperSourceToCenter.Install(net2Nodes)

# bottleneck link

pointToPointHelperBottleneck = PointToPointHelper()
pointToPointHelperBottleneck.SetDeviceAttribute("DataRate",