%description:
RadioMedium NeighborCache test based on Ping results.

The
  NeighborCache_Grid.test
  NeighborCache_NeighborList.test
  NeighborCache_Off.test
  NeighborCache_QuadTree.test
are same simulations, except the configured radiomedium.neighborcache (choosed in %extraargs).

When NeighborCache_Off.test is FAILED, then should replace ping outputs in %contains from simulation stdout
in all NeighborCache tests, and rerun these.
When NighborCache_Off test is OK, but some other NeighborCache test is FAILED, then you must check:
 - NeighborCache_*.test files should be same except the %extraargs line.
 - verify the used NeighborCache code in failed simulation.
%#--------------------------------------------------------------------------------------------------------------
%extraargs: -c NeighborList
%#--------------------------------------------------------------------------------------------------------------
%file: test.ned

import inet.common.lifecycle.LifecycleController;
import inet.common.scenario.ScenarioManager;
import inet.networklayer.configurator.ipv4.IPv4NetworkConfigurator;
import inet.networklayer.ipv4.RoutingTableRecorder;
import inet.node.aodv.AODVRouter;
import inet.physicallayer.idealradio.IdealRadioMedium;


network NeighborCacheTest
{
    parameters:
        int numHosts;
    submodules:
        radioMedium: IdealRadioMedium {
            parameters:
                @display("p=50,50");
        }
        configurator: IPv4NetworkConfigurator {
            parameters:
                config = xml("<config><interface hosts='*' address='145.236.x.x' netmask='255.255.0.0'/></config>");
                @display("p=50,100");
        }
        routingTableRecorder: RoutingTableRecorder {
            parameters:
                @display("p=50,150");
        }
        lifecycleController: LifecycleController {
            parameters:
                @display("p=50,200");
        }
        scenarioManager: ScenarioManager {
            parameters:
                script = default(xml("<scenario/>"));
                @display("p=50,250");
        }
        host[numHosts]: AODVRouter {
            parameters:
                @display("i=device/pocketpc_s;r=,,#707070");
        }
    connections allowunconnected:
}


%#--------------------------------------------------------------------------------------------------------------
%inifile: omnetpp.ini

[General]
network = NeighborCacheTest
record-eventlog = true
num-rngs = 3
sim-time-limit = 60s
cmdenv-express-mode = true
cmdenv-status-frequency = 1000s

#omnetpp 5.0 - 5.1 compatibility:
eventlog-file = "${resultdir}/${configname}-${runnumber}.elog"
output-scalar-file = "${resultdir}/${configname}-${runnumber}.sca"
output-vector-file = "${resultdir}/${configname}-${runnumber}.vec"
snapshot-file = "${resultdir}/${configname}-${runnumber}.sna"

**.mobility.rng-0 = 1
**.wlan[*].mac.rng-0 = 2
ned-path = .;../../../../src;../../lib

# channel physical parameters
**.wlan[*].typename = "IdealWirelessNic"
**.wlan[*].bitrate = 2Mbps
**.wlan[*].mac.address = "auto"
**.wlan[*].mac.headerLength = 20B
**.wlan[*].radioType = "IdealRadio"
**.wlan[*].radio.transmitter.headerBitLength = 100b
**.wlan[*].radio.transmitter.communicationRange = 250m
**.wlan[*].radio.transmitter.interferenceRange = 0m
**.wlan[*].radio.transmitter.detectionRange = 0m
**.wlan[*].radio.receiver.ignoreInterference = true
*.numHosts = 20

# mobility
**.host[0..1].mobilityType = "StationaryMobility"
**.host[1].mobility.initialX = 600m
**.host[1].mobility.initialY = 600m
**.host[2..20].mobilityType = "LinearMobility"
**.host[2..20].mobility.speed = 8mps
**.mobility.constraintAreaMinZ = 0m
**.mobility.constraintAreaMaxZ = 0m
**.mobility.constraintAreaMinX = 0m
**.mobility.constraintAreaMinY = 0m
**.mobility.constraintAreaMaxX = 600m
**.mobility.constraintAreaMaxY = 600m
**.host[2..20].mobility.changeInterval = normal(5s, 0.1s)
**.host[2..20].mobility.changeAngleBy = normal(0deg, 30deg)

# ping app
*.host[0].numPingApps = 1
*.host[0].pingApp[0].startTime = uniform(1s,5s)
*.host[0].pingApp[0].printPing = true
*.host[0].pingApp[0].destAddr = "host[1](ipv4)"

# lifecycle
**.hasStatus = true

# AODV protocol settings
**.aodv.activeRouteTimeout = 3s

# neighbor cache settigns
**.neighborCache.refillPeriod = 1s

# radio medium
**.radioMedium.mediumLimitCache.communicationRange = 250m
**.radioMedium.rangeFilter = "communicationRange"

[Config NoCache]

[Config Grid]
**.radioMedium.neighborCacheType = "GridNeighborCache"
**.radioMedium.neighborCache.cellSizeX = 100m
**.radioMedium.neighborCache.cellSizeY = 100m
**.radioMedium.neighborCache.cellSizeZ = 100m

[Config NeighborList]
**.radioMedium.neighborCacheType = "NeighborListNeighborCache"
**.radioMedium.neighborCache.range = 250m

[Config QuadTree]
**.radioMedium.neighborCacheType = "QuadTreeNeighborCache"
**.radioMedium.neighborCache.maxNumOfPointsPerQuadrant = 2

%#--------------------------------------------------------------------------------------------------------------
%contains: stdout
NeighborCacheTest.host[0].pingApp[0]: reply of 60 bytes from 145.236.0.2 icmp_seq=0 ttl=28 time=830.477907313 msec (ping0)
NeighborCacheTest.host[0].pingApp[0]: reply of 60 bytes from 145.236.0.2 icmp_seq=1 ttl=28 time=3.732928795 msec (ping1)
NeighborCacheTest.host[0].pingApp[0]: reply of 60 bytes from 145.236.0.2 icmp_seq=2 ttl=28 time=3.732936181 msec (ping2)
NeighborCacheTest.host[0].pingApp[0]: reply of 60 bytes from 145.236.0.2 icmp_seq=3 ttl=28 time=3.732948054 msec (ping3)
NeighborCacheTest.host[0].pingApp[0]: reply of 60 bytes from 145.236.0.2 icmp_seq=4 ttl=28 time=3.732964401 msec (ping4)
NeighborCacheTest.host[0].pingApp[0]: reply of 60 bytes from 145.236.0.2 icmp_seq=6 ttl=27 time=828.477322075 msec (ping6)
NeighborCacheTest.host[0].pingApp[0]: reply of 60 bytes from 145.236.0.2 icmp_seq=7 ttl=27 time=4.665995575 msec (ping7)
NeighborCacheTest.host[0].pingApp[0]: reply of 60 bytes from 145.236.0.2 icmp_seq=8 ttl=27 time=4.666112219 msec (ping8)
NeighborCacheTest.host[0].pingApp[0]: reply of 60 bytes from 145.236.0.2 icmp_seq=9 ttl=27 time=4.666239182 msec (ping9)
NeighborCacheTest.host[0].pingApp[0]: reply of 60 bytes from 145.236.0.2 icmp_seq=10 ttl=27 time=4.666376789 msec (ping10)
NeighborCacheTest.host[0].pingApp[0]: reply of 60 bytes from 145.236.0.2 icmp_seq=11 ttl=27 time=4.666525285 msec (ping11)
NeighborCacheTest.host[0].pingApp[0]: reply of 60 bytes from 145.236.0.2 icmp_seq=12 ttl=27 time=4.666684768 msec (ping12)
NeighborCacheTest.host[0].pingApp[0]: reply of 60 bytes from 145.236.0.2 icmp_seq=13 ttl=27 time=4.666855165 msec (ping13)
NeighborCacheTest.host[0].pingApp[0]: reply of 60 bytes from 145.236.0.2 icmp_seq=14 ttl=27 time=4.667036228 msec (ping14)
NeighborCacheTest.host[0].pingApp[0]: reply of 60 bytes from 145.236.0.2 icmp_seq=15 ttl=27 time=4.667227536 msec (ping15)
NeighborCacheTest.host[0].pingApp[0]: reply of 60 bytes from 145.236.0.2 icmp_seq=16 ttl=27 time=4.667428523 msec (ping16)
NeighborCacheTest.host[0].pingApp[0]: reply of 60 bytes from 145.236.0.2 icmp_seq=18 ttl=28 time=342.820731461 msec (ping18)
NeighborCacheTest.host[0].pingApp[0]: reply of 60 bytes from 145.236.0.2 icmp_seq=19 ttl=28 time=3.733414392 msec (ping19)
NeighborCacheTest.host[0].pingApp[0]: reply of 60 bytes from 145.236.0.2 icmp_seq=20 ttl=28 time=3.733420031 msec (ping20)
NeighborCacheTest.host[0].pingApp[0]: reply of 60 bytes from 145.236.0.2 icmp_seq=21 ttl=28 time=3.733429284 msec (ping21)
NeighborCacheTest.host[0].pingApp[0]: reply of 60 bytes from 145.236.0.2 icmp_seq=22 ttl=28 time=3.733441837 msec (ping22)
NeighborCacheTest.host[0].pingApp[0]: reply of 60 bytes from 145.236.0.2 icmp_seq=23 ttl=28 time=3.733457499 msec (ping23)
NeighborCacheTest.host[0].pingApp[0]: reply of 60 bytes from 145.236.0.2 icmp_seq=25 ttl=27 time=1346.294293068 msec (ping25)
NeighborCacheTest.host[0].pingApp[0]: reply of 60 bytes from 145.236.0.2 icmp_seq=26 ttl=27 time=346.761030782 msec (ping26)
NeighborCacheTest.host[0].pingApp[0]: reply of 60 bytes from 145.236.0.2 icmp_seq=27 ttl=27 time=4.666105924 msec (ping27)
NeighborCacheTest.host[0].pingApp[0]: reply of 60 bytes from 145.236.0.2 icmp_seq=28 ttl=27 time=4.66616123 msec (ping28)
NeighborCacheTest.host[0].pingApp[0]: reply of 60 bytes from 145.236.0.2 icmp_seq=29 ttl=27 time=4.66623032 msec (ping29)
NeighborCacheTest.host[0].pingApp[0]: reply of 60 bytes from 145.236.0.2 icmp_seq=31 ttl=28 time=1339.358890192 msec (ping31)
NeighborCacheTest.host[0].pingApp[0]: reply of 60 bytes from 145.236.0.2 icmp_seq=32 ttl=28 time=339.825604861 msec (ping32)
NeighborCacheTest.host[0].pingApp[0]: reply of 60 bytes from 145.236.0.2 icmp_seq=33 ttl=28 time=3.732977015 msec (ping33)
NeighborCacheTest.host[0].pingApp[0]: reply of 60 bytes from 145.236.0.2 icmp_seq=34 ttl=28 time=3.732946663 msec (ping34)
NeighborCacheTest.host[0].pingApp[0]: reply of 60 bytes from 145.236.0.2 icmp_seq=35 ttl=28 time=3.732919443 msec (ping35)
NeighborCacheTest.host[0].pingApp[0]: reply of 60 bytes from 145.236.0.2 icmp_seq=36 ttl=28 time=3.732895496 msec (ping36)
NeighborCacheTest.host[0].pingApp[0]: reply of 60 bytes from 145.236.0.2 icmp_seq=37 ttl=28 time=3.732875012 msec (ping37)
NeighborCacheTest.host[0].pingApp[0]: reply of 60 bytes from 145.236.0.2 icmp_seq=38 ttl=28 time=3.732858253 msec (ping38)
NeighborCacheTest.host[0].pingApp[0]: reply of 60 bytes from 145.236.0.2 icmp_seq=39 ttl=28 time=3.73284554 msec (ping39)
NeighborCacheTest.host[0].pingApp[0]: reply of 60 bytes from 145.236.0.2 icmp_seq=41 ttl=28 time=350.317796204 msec (ping41)
NeighborCacheTest.host[0].pingApp[0]: reply of 60 bytes from 145.236.0.2 icmp_seq=42 ttl=28 time=3.733861605 msec (ping42)
NeighborCacheTest.host[0].pingApp[0]: reply of 60 bytes from 145.236.0.2 icmp_seq=43 ttl=28 time=3.733809116 msec (ping43)
NeighborCacheTest.host[0].pingApp[0]: reply of 60 bytes from 145.236.0.2 icmp_seq=44 ttl=28 time=3.733760876 msec (ping44)
NeighborCacheTest.host[0].pingApp[0]: reply of 60 bytes from 145.236.0.2 icmp_seq=45 ttl=28 time=3.73371676 msec (ping45)
NeighborCacheTest.host[0].pingApp[0]: reply of 60 bytes from 145.236.0.2 icmp_seq=46 ttl=28 time=3.733676695 msec (ping46)
NeighborCacheTest.host[0].pingApp[0]: reply of 60 bytes from 145.236.0.2 icmp_seq=48 ttl=28 time=346.782655109 msec (ping48)
NeighborCacheTest.host[0].pingApp[0]: reply of 60 bytes from 145.236.0.2 icmp_seq=49 ttl=28 time=3.732708576 msec (ping49)
NeighborCacheTest.host[0].pingApp[0]: reply of 60 bytes from 145.236.0.2 icmp_seq=51 ttl=28 time=826.453462341 msec (ping51)
NeighborCacheTest.host[0].pingApp[0]: reply of 60 bytes from 145.236.0.2 icmp_seq=53 ttl=27 time=567.898037298 msec (ping53)
NeighborCacheTest.host[0].pingApp[0]: reply of 60 bytes from 145.236.0.2 icmp_seq=55 ttl=28 time=342.497844927 msec (ping55)
** Event #
%#--------------------------------------------------------------------------------------------------------------
%not-contains: stdout
-- check module destructor
%#--------------------------------------------------------------------------------------------------------------
