Unit test for rqueue added
This commit is contained in:
325
examples/wscript
325
examples/wscript
@@ -1,165 +1,166 @@
|
||||
## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
|
||||
|
||||
def build(bld):
|
||||
obj = bld.create_ns3_program('hello-simulator')
|
||||
obj.source = 'hello-simulator.cc'
|
||||
|
||||
obj = bld.create_ns3_program('first',
|
||||
['core', 'simulator', 'point-to-point', 'internet-stack'])
|
||||
obj.source = 'first.cc'
|
||||
|
||||
obj = bld.create_ns3_program('second',
|
||||
['core', 'simulator', 'point-to-point', 'csma', 'internet-stack'])
|
||||
obj.source = 'second.cc'
|
||||
|
||||
obj = bld.create_ns3_program('third',
|
||||
['core', 'simulator', 'point-to-point', 'csma', 'wifi', 'internet-stack'])
|
||||
obj.source = 'third.cc'
|
||||
|
||||
obj = bld.create_ns3_program('object-names',
|
||||
['core', 'simulator', 'csma', 'internet-stack'])
|
||||
obj.source = 'object-names.cc'
|
||||
|
||||
obj = bld.create_ns3_program('mixed-wireless',
|
||||
['core', 'simulator', 'mobility', 'wifi', 'point-to-point', 'internet-stack'])
|
||||
obj.source = 'mixed-wireless.cc'
|
||||
|
||||
obj = bld.create_ns3_program('dynamic-global-routing',
|
||||
['point-to-point', 'csma', 'internet-stack', 'global-routing'])
|
||||
obj.source = 'dynamic-global-routing.cc'
|
||||
|
||||
obj = bld.create_ns3_program('static-routing-slash32',
|
||||
['point-to-point', 'internet-stack', 'global-routing'])
|
||||
obj.source = 'static-routing-slash32.cc'
|
||||
|
||||
obj = bld.create_ns3_program('global-routing-slash32',
|
||||
['point-to-point', 'internet-stack', 'global-routing'])
|
||||
obj.source = 'global-routing-slash32.cc'
|
||||
|
||||
obj = bld.create_ns3_program('simple-global-routing',
|
||||
['point-to-point', 'internet-stack', 'global-routing'])
|
||||
obj.source = 'simple-global-routing.cc'
|
||||
|
||||
obj = bld.create_ns3_program('virtual-net-device',
|
||||
['point-to-point', 'internet-stack', 'global-routing', 'virtual-net-device'])
|
||||
obj.source = 'virtual-net-device.cc'
|
||||
|
||||
obj = bld.create_ns3_program('simple-alternate-routing',
|
||||
['point-to-point', 'internet-stack', 'global-routing'])
|
||||
obj.source = 'simple-alternate-routing.cc'
|
||||
|
||||
obj = bld.create_ns3_program('simple-error-model',
|
||||
['point-to-point', 'internet-stack'])
|
||||
obj.source = 'simple-error-model.cc'
|
||||
|
||||
obj = bld.create_ns3_program('csma-one-subnet',
|
||||
['csma', 'internet-stack'])
|
||||
obj.source = 'csma-one-subnet.cc'
|
||||
|
||||
obj = bld.create_ns3_program('csma-bridge',
|
||||
['bridge', 'csma', 'internet-stack'])
|
||||
obj.source = 'csma-bridge.cc'
|
||||
|
||||
obj = bld.create_ns3_program('csma-bridge-one-hop',
|
||||
['bridge', 'csma', 'internet-stack'])
|
||||
obj.source = 'csma-bridge-one-hop.cc'
|
||||
|
||||
obj = bld.create_ns3_program('udp-echo',
|
||||
['csma', 'internet-stack'])
|
||||
obj.source = 'udp-echo.cc'
|
||||
|
||||
obj = bld.create_ns3_program('realtime-udp-echo',
|
||||
['csma', 'internet-stack'])
|
||||
obj.source = 'realtime-udp-echo.cc'
|
||||
|
||||
obj = bld.create_ns3_program('csma-broadcast',
|
||||
['csma', 'internet-stack'])
|
||||
obj.source = 'csma-broadcast.cc'
|
||||
|
||||
obj = bld.create_ns3_program('csma-packet-socket',
|
||||
['csma', 'internet-stack'])
|
||||
obj.source = 'csma-packet-socket.cc'
|
||||
|
||||
obj = bld.create_ns3_program('csma-multicast',
|
||||
['csma', 'internet-stack'])
|
||||
obj.source = 'csma-multicast.cc'
|
||||
|
||||
obj = bld.create_ns3_program( 'mixed-global-routing',
|
||||
['point-to-point', 'internet-stack', 'global-routing' , 'csma-cd'])
|
||||
obj.source = 'mixed-global-routing.cc'
|
||||
|
||||
obj = bld.create_ns3_program('simple-point-to-point-olsr',
|
||||
['point-to-point', 'internet-stack', 'olsr'])
|
||||
obj.source = 'simple-point-to-point-olsr.cc'
|
||||
|
||||
obj = bld.create_ns3_program('tcp-large-transfer',
|
||||
['point-to-point', 'internet-stack'])
|
||||
obj.source = 'tcp-large-transfer.cc'
|
||||
|
||||
obj = bld.create_ns3_program('tcp-nsc-lfn',
|
||||
['point-to-point', 'internet-stack'])
|
||||
obj.source = 'tcp-nsc-lfn.cc'
|
||||
|
||||
obj = bld.create_ns3_program('tcp-nsc-zoo',
|
||||
['csma', 'internet-stack'])
|
||||
obj.source = 'tcp-nsc-zoo.cc'
|
||||
|
||||
obj = bld.create_ns3_program('tcp-star-server',
|
||||
['point-to-point', 'internet-stack'])
|
||||
obj.source = 'tcp-star-server.cc'
|
||||
|
||||
obj = bld.create_ns3_program('star',
|
||||
['point-to-point', 'internet-stack'])
|
||||
obj.source = 'star.cc'
|
||||
|
||||
obj = bld.create_ns3_program('csma-star',
|
||||
['csma', 'internet-stack'])
|
||||
obj.source = 'csma-star.cc'
|
||||
|
||||
obj = bld.create_ns3_program('wifi-adhoc',
|
||||
['core', 'simulator', 'mobility', 'wifi'])
|
||||
obj.source = 'wifi-adhoc.cc'
|
||||
|
||||
obj = bld.create_ns3_program('wifi-clear-channel-cmu',
|
||||
['core', 'simulator', 'mobility', 'wifi'])
|
||||
obj.source = 'wifi-clear-channel-cmu.cc'
|
||||
|
||||
obj = bld.create_ns3_program('wifi-ap',
|
||||
['core', 'simulator', 'mobility', 'wifi'])
|
||||
obj.source = 'wifi-ap.cc'
|
||||
|
||||
bld.add_subdirs('stats')
|
||||
|
||||
obj = bld.create_ns3_program('wifi-wired-bridging',
|
||||
['core', 'simulator', 'mobility', 'wifi',
|
||||
'csma', 'helper', 'bridge'])
|
||||
obj.source = 'wifi-wired-bridging.cc'
|
||||
|
||||
obj = bld.create_ns3_program('csma-raw-ip-socket',
|
||||
['csma', 'internet-stack'])
|
||||
obj.source = 'csma-raw-ip-socket.cc'
|
||||
|
||||
obj = bld.create_ns3_program('csma-ping',
|
||||
['csma', 'internet-stack', 'v4ping'])
|
||||
obj.source = 'csma-ping.cc'
|
||||
|
||||
obj = bld.create_ns3_program('test-ipv6',
|
||||
['point-to-point', 'internet-stack'])
|
||||
obj.source = 'test-ipv6.cc'
|
||||
|
||||
env = bld.env_of_name('default')
|
||||
if env['ENABLE_EMU']:
|
||||
obj = bld.create_ns3_program('emu-udp-echo', ['emu', 'internet-stack'])
|
||||
obj.source = 'emu-udp-echo.cc'
|
||||
|
||||
obj = bld.create_ns3_program('emu-ping', ['emu', 'internet-stack'])
|
||||
obj.source = 'emu-ping.cc'
|
||||
|
||||
if env['ENABLE_TAP']:
|
||||
obj = bld.create_ns3_program('tap-wifi-dumbbell',
|
||||
['wifi', 'csma', 'point-to-point', 'tap-bridge', 'internet-stack'])
|
||||
obj.source = 'tap-wifi-dumbbell.cc'
|
||||
|
||||
obj = bld.create_ns3_program('simple-wifi-frame-aggregation',
|
||||
['core', 'simulator', 'mobility', 'wifi'])
|
||||
obj.source = 'simple-wifi-frame-aggregation.cc'
|
||||
print "Don't want to build examples"
|
||||
# obj = bld.create_ns3_program('hello-simulator')
|
||||
# obj.source = 'hello-simulator.cc'
|
||||
#
|
||||
# obj = bld.create_ns3_program('first',
|
||||
# ['core', 'simulator', 'point-to-point', 'internet-stack'])
|
||||
# obj.source = 'first.cc'
|
||||
#
|
||||
# obj = bld.create_ns3_program('second',
|
||||
# ['core', 'simulator', 'point-to-point', 'csma', 'internet-stack'])
|
||||
# obj.source = 'second.cc'
|
||||
#
|
||||
# obj = bld.create_ns3_program('third',
|
||||
# ['core', 'simulator', 'point-to-point', 'csma', 'wifi', 'internet-stack'])
|
||||
# obj.source = 'third.cc'
|
||||
#
|
||||
# obj = bld.create_ns3_program('object-names',
|
||||
# ['core', 'simulator', 'csma', 'internet-stack'])
|
||||
# obj.source = 'object-names.cc'
|
||||
#
|
||||
# obj = bld.create_ns3_program('mixed-wireless',
|
||||
# ['core', 'simulator', 'mobility', 'wifi', 'point-to-point', 'internet-stack'])
|
||||
# obj.source = 'mixed-wireless.cc'
|
||||
#
|
||||
# obj = bld.create_ns3_program('dynamic-global-routing',
|
||||
# ['point-to-point', 'csma', 'internet-stack', 'global-routing'])
|
||||
# obj.source = 'dynamic-global-routing.cc'
|
||||
#
|
||||
# obj = bld.create_ns3_program('static-routing-slash32',
|
||||
# ['point-to-point', 'internet-stack', 'global-routing'])
|
||||
# obj.source = 'static-routing-slash32.cc'
|
||||
#
|
||||
# obj = bld.create_ns3_program('global-routing-slash32',
|
||||
# ['point-to-point', 'internet-stack', 'global-routing'])
|
||||
# obj.source = 'global-routing-slash32.cc'
|
||||
#
|
||||
# obj = bld.create_ns3_program('simple-global-routing',
|
||||
# ['point-to-point', 'internet-stack', 'global-routing'])
|
||||
# obj.source = 'simple-global-routing.cc'
|
||||
#
|
||||
# obj = bld.create_ns3_program('virtual-net-device',
|
||||
# ['point-to-point', 'internet-stack', 'global-routing', 'virtual-net-device'])
|
||||
# obj.source = 'virtual-net-device.cc'
|
||||
#
|
||||
# obj = bld.create_ns3_program('simple-alternate-routing',
|
||||
# ['point-to-point', 'internet-stack', 'global-routing'])
|
||||
# obj.source = 'simple-alternate-routing.cc'
|
||||
#
|
||||
# obj = bld.create_ns3_program('simple-error-model',
|
||||
# ['point-to-point', 'internet-stack'])
|
||||
# obj.source = 'simple-error-model.cc'
|
||||
#
|
||||
# obj = bld.create_ns3_program('csma-one-subnet',
|
||||
# ['csma', 'internet-stack'])
|
||||
# obj.source = 'csma-one-subnet.cc'
|
||||
#
|
||||
# obj = bld.create_ns3_program('csma-bridge',
|
||||
# ['bridge', 'csma', 'internet-stack'])
|
||||
# obj.source = 'csma-bridge.cc'
|
||||
#
|
||||
# obj = bld.create_ns3_program('csma-bridge-one-hop',
|
||||
# ['bridge', 'csma', 'internet-stack'])
|
||||
# obj.source = 'csma-bridge-one-hop.cc'
|
||||
#
|
||||
# obj = bld.create_ns3_program('udp-echo',
|
||||
# ['csma', 'internet-stack'])
|
||||
# obj.source = 'udp-echo.cc'
|
||||
#
|
||||
# obj = bld.create_ns3_program('realtime-udp-echo',
|
||||
# ['csma', 'internet-stack'])
|
||||
# obj.source = 'realtime-udp-echo.cc'
|
||||
#
|
||||
# obj = bld.create_ns3_program('csma-broadcast',
|
||||
# ['csma', 'internet-stack'])
|
||||
# obj.source = 'csma-broadcast.cc'
|
||||
#
|
||||
# obj = bld.create_ns3_program('csma-packet-socket',
|
||||
# ['csma', 'internet-stack'])
|
||||
# obj.source = 'csma-packet-socket.cc'
|
||||
#
|
||||
# obj = bld.create_ns3_program('csma-multicast',
|
||||
# ['csma', 'internet-stack'])
|
||||
# obj.source = 'csma-multicast.cc'
|
||||
#
|
||||
# obj = bld.create_ns3_program( 'mixed-global-routing',
|
||||
# ['point-to-point', 'internet-stack', 'global-routing' , 'csma-cd'])
|
||||
# obj.source = 'mixed-global-routing.cc'
|
||||
#
|
||||
# obj = bld.create_ns3_program('simple-point-to-point-olsr',
|
||||
# ['point-to-point', 'internet-stack', 'olsr'])
|
||||
# obj.source = 'simple-point-to-point-olsr.cc'
|
||||
#
|
||||
# obj = bld.create_ns3_program('tcp-large-transfer',
|
||||
# ['point-to-point', 'internet-stack'])
|
||||
# obj.source = 'tcp-large-transfer.cc'
|
||||
#
|
||||
# obj = bld.create_ns3_program('tcp-nsc-lfn',
|
||||
# ['point-to-point', 'internet-stack'])
|
||||
# obj.source = 'tcp-nsc-lfn.cc'
|
||||
#
|
||||
# obj = bld.create_ns3_program('tcp-nsc-zoo',
|
||||
# ['csma', 'internet-stack'])
|
||||
# obj.source = 'tcp-nsc-zoo.cc'
|
||||
#
|
||||
# obj = bld.create_ns3_program('tcp-star-server',
|
||||
# ['point-to-point', 'internet-stack'])
|
||||
# obj.source = 'tcp-star-server.cc'
|
||||
#
|
||||
# obj = bld.create_ns3_program('star',
|
||||
# ['point-to-point', 'internet-stack'])
|
||||
# obj.source = 'star.cc'
|
||||
#
|
||||
# obj = bld.create_ns3_program('csma-star',
|
||||
# ['csma', 'internet-stack'])
|
||||
# obj.source = 'csma-star.cc'
|
||||
#
|
||||
# obj = bld.create_ns3_program('wifi-adhoc',
|
||||
# ['core', 'simulator', 'mobility', 'wifi'])
|
||||
# obj.source = 'wifi-adhoc.cc'
|
||||
#
|
||||
# obj = bld.create_ns3_program('wifi-clear-channel-cmu',
|
||||
# ['core', 'simulator', 'mobility', 'wifi'])
|
||||
# obj.source = 'wifi-clear-channel-cmu.cc'
|
||||
#
|
||||
# obj = bld.create_ns3_program('wifi-ap',
|
||||
# ['core', 'simulator', 'mobility', 'wifi'])
|
||||
# obj.source = 'wifi-ap.cc'
|
||||
#
|
||||
# bld.add_subdirs('stats')
|
||||
#
|
||||
# obj = bld.create_ns3_program('wifi-wired-bridging',
|
||||
# ['core', 'simulator', 'mobility', 'wifi',
|
||||
# 'csma', 'helper', 'bridge'])
|
||||
# obj.source = 'wifi-wired-bridging.cc'
|
||||
#
|
||||
# obj = bld.create_ns3_program('csma-raw-ip-socket',
|
||||
# ['csma', 'internet-stack'])
|
||||
# obj.source = 'csma-raw-ip-socket.cc'
|
||||
#
|
||||
# obj = bld.create_ns3_program('csma-ping',
|
||||
# ['csma', 'internet-stack', 'v4ping'])
|
||||
# obj.source = 'csma-ping.cc'
|
||||
#
|
||||
# obj = bld.create_ns3_program('test-ipv6',
|
||||
# ['point-to-point', 'internet-stack'])
|
||||
# obj.source = 'test-ipv6.cc'
|
||||
#
|
||||
# env = bld.env_of_name('default')
|
||||
# if env['ENABLE_EMU']:
|
||||
# obj = bld.create_ns3_program('emu-udp-echo', ['emu', 'internet-stack'])
|
||||
# obj.source = 'emu-udp-echo.cc'
|
||||
#
|
||||
# obj = bld.create_ns3_program('emu-ping', ['emu', 'internet-stack'])
|
||||
# obj.source = 'emu-ping.cc'
|
||||
#
|
||||
# if env['ENABLE_TAP']:
|
||||
# obj = bld.create_ns3_program('tap-wifi-dumbbell',
|
||||
# ['wifi', 'csma', 'point-to-point', 'tap-bridge', 'internet-stack'])
|
||||
# obj.source = 'tap-wifi-dumbbell.cc'
|
||||
#
|
||||
# obj = bld.create_ns3_program('simple-wifi-frame-aggregation',
|
||||
# ['core', 'simulator', 'mobility', 'wifi'])
|
||||
# obj.source = 'simple-wifi-frame-aggregation.cc'
|
||||
|
||||
103
samples/wscript
103
samples/wscript
@@ -1,56 +1,57 @@
|
||||
## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
|
||||
|
||||
def build(bld):
|
||||
obj = bld.create_ns3_program('main-attribute-value')
|
||||
obj.source = 'main-attribute-value.cc'
|
||||
|
||||
obj = bld.create_ns3_program('main-callback')
|
||||
obj.source = 'main-callback.cc'
|
||||
|
||||
obj = bld.create_ns3_program('main-simulator')
|
||||
obj.source = 'main-simulator.cc'
|
||||
|
||||
obj = bld.create_ns3_program('main-ptr')
|
||||
obj.source = 'main-ptr.cc'
|
||||
|
||||
obj = bld.create_ns3_program('main-random-variable')
|
||||
obj.source = 'main-random-variable.cc'
|
||||
|
||||
obj = bld.create_ns3_program('main-packet-header', ['common', 'simulator'])
|
||||
obj.source = 'main-packet-header.cc'
|
||||
|
||||
obj = bld.create_ns3_program('main-packet-tag', ['common', 'simulator'])
|
||||
obj.source = 'main-packet-tag.cc'
|
||||
|
||||
obj = bld.create_ns3_program('main-test')
|
||||
obj.source = 'main-test.cc'
|
||||
|
||||
if bld.env['ENABLE_THREADING'] and bld.env["ENABLE_REAL_TIME"]:
|
||||
obj = bld.create_ns3_program('main-test-sync')
|
||||
obj.source = 'main-test-sync.cc'
|
||||
|
||||
obj = bld.create_ns3_program('main-simple',
|
||||
['node', 'internet-stack', 'onoff'])
|
||||
obj.source = 'main-simple.cc'
|
||||
|
||||
obj = bld.create_ns3_program('main-grid-topology',
|
||||
['core', 'simulator', 'mobility', 'internet-stack'])
|
||||
obj.source = 'main-grid-topology.cc'
|
||||
|
||||
obj = bld.create_ns3_program('main-random-topology',
|
||||
['core', 'simulator', 'mobility'])
|
||||
obj.source = 'main-random-topology.cc'
|
||||
|
||||
obj = bld.create_ns3_program('main-random-walk',
|
||||
['core', 'simulator', 'mobility'])
|
||||
obj.source = 'main-random-walk.cc'
|
||||
|
||||
obj = bld.create_ns3_program('main-propagation-loss',
|
||||
['core', 'simulator', 'mobility', 'wifi'])
|
||||
obj.source = 'main-propagation-loss.cc'
|
||||
|
||||
obj = bld.create_ns3_program('main-ns2-mob',
|
||||
['core', 'simulator', 'mobility', 'wifi'])
|
||||
obj.source = 'main-ns2-mob.cc'
|
||||
print "Don't want to build samples"
|
||||
# obj = bld.create_ns3_program('main-attribute-value')
|
||||
# obj.source = 'main-attribute-value.cc'
|
||||
#
|
||||
# obj = bld.create_ns3_program('main-callback')
|
||||
# obj.source = 'main-callback.cc'
|
||||
#
|
||||
# obj = bld.create_ns3_program('main-simulator')
|
||||
# obj.source = 'main-simulator.cc'
|
||||
#
|
||||
# obj = bld.create_ns3_program('main-ptr')
|
||||
# obj.source = 'main-ptr.cc'
|
||||
#
|
||||
# obj = bld.create_ns3_program('main-random-variable')
|
||||
# obj.source = 'main-random-variable.cc'
|
||||
#
|
||||
# obj = bld.create_ns3_program('main-packet-header', ['common', 'simulator'])
|
||||
# obj.source = 'main-packet-header.cc'
|
||||
#
|
||||
# obj = bld.create_ns3_program('main-packet-tag', ['common', 'simulator'])
|
||||
# obj.source = 'main-packet-tag.cc'
|
||||
#
|
||||
# obj = bld.create_ns3_program('main-test')
|
||||
# obj.source = 'main-test.cc'
|
||||
#
|
||||
# if bld.env['ENABLE_THREADING'] and bld.env["ENABLE_REAL_TIME"]:
|
||||
# obj = bld.create_ns3_program('main-test-sync')
|
||||
# obj.source = 'main-test-sync.cc'
|
||||
#
|
||||
# obj = bld.create_ns3_program('main-simple',
|
||||
# ['node', 'internet-stack', 'onoff'])
|
||||
# obj.source = 'main-simple.cc'
|
||||
#
|
||||
# obj = bld.create_ns3_program('main-grid-topology',
|
||||
# ['core', 'simulator', 'mobility', 'internet-stack'])
|
||||
# obj.source = 'main-grid-topology.cc'
|
||||
#
|
||||
# obj = bld.create_ns3_program('main-random-topology',
|
||||
# ['core', 'simulator', 'mobility'])
|
||||
# obj.source = 'main-random-topology.cc'
|
||||
#
|
||||
# obj = bld.create_ns3_program('main-random-walk',
|
||||
# ['core', 'simulator', 'mobility'])
|
||||
# obj.source = 'main-random-walk.cc'
|
||||
#
|
||||
# obj = bld.create_ns3_program('main-propagation-loss',
|
||||
# ['core', 'simulator', 'mobility', 'wifi'])
|
||||
# obj.source = 'main-propagation-loss.cc'
|
||||
#
|
||||
# obj = bld.create_ns3_program('main-ns2-mob',
|
||||
# ['core', 'simulator', 'mobility', 'wifi'])
|
||||
# obj.source = 'main-ns2-mob.cc'
|
||||
|
||||
|
||||
|
||||
@@ -24,17 +24,25 @@
|
||||
|
||||
#include "aodv-rqueue.h"
|
||||
#include "ns3/simulator.h"
|
||||
#include "ns3/test.h"
|
||||
#include <algorithm>
|
||||
|
||||
namespace ns3 {
|
||||
namespace aodv {
|
||||
|
||||
aodv_rqueue::aodv_rqueue() : limit_(AODV_RTQ_MAX_LEN), timeout_(AODV_RTQ_TIMEOUT)
|
||||
aodv_rqueue::aodv_rqueue() : limit_(AODV_RTQ_MAX_LEN), timeout_(Seconds(AODV_RTQ_TIMEOUT))
|
||||
{
|
||||
}
|
||||
|
||||
uint32_t
|
||||
aodv_rqueue::size ()
|
||||
{
|
||||
purge();
|
||||
return queue.size();
|
||||
}
|
||||
|
||||
void
|
||||
aodv_rqueue::enque(QueueEntry entry)
|
||||
aodv_rqueue::enque(QueueEntry & entry)
|
||||
{
|
||||
// Purge any packets that have timed out.
|
||||
purge();
|
||||
@@ -78,7 +86,7 @@ QueueEntry
|
||||
aodv_rqueue::remove_head()
|
||||
{
|
||||
QueueEntry entry = queue.front();
|
||||
queue.erase(queue.begin());
|
||||
queue.erase(queue.begin());
|
||||
return entry;
|
||||
}
|
||||
|
||||
@@ -86,7 +94,7 @@ struct IsExpired
|
||||
{
|
||||
bool operator() (QueueEntry const & e) const
|
||||
{
|
||||
return (e.enExpire > Simulator::Now());
|
||||
return (e.enExpire < Simulator::Now());
|
||||
}
|
||||
};
|
||||
|
||||
@@ -105,4 +113,75 @@ aodv_rqueue::drop(QueueEntry)
|
||||
// TODO do nothing now.
|
||||
}
|
||||
|
||||
#ifdef RUN_SELF_TESTS
|
||||
/// Unit test for aodv_rqueue
|
||||
struct AodvRqueueTest : public Test
|
||||
{
|
||||
AodvRqueueTest () : Test ("AODV/Rqueue"), result(true) {}
|
||||
virtual bool RunTests();
|
||||
|
||||
void CheckSizeLimit ();
|
||||
void CheckTimeout ();
|
||||
|
||||
aodv_rqueue q;
|
||||
bool result;
|
||||
};
|
||||
|
||||
/// Test instance
|
||||
static AodvRqueueTest g_AodvRqueueTest;
|
||||
|
||||
bool
|
||||
AodvRqueueTest::RunTests ()
|
||||
{
|
||||
Ptr<Packet> packet = Create<Packet>();
|
||||
Ipv4Header header;
|
||||
QueueEntry e1 (packet, header);
|
||||
q.enque (e1);
|
||||
QueueEntry e2 = q.deque ();
|
||||
NS_TEST_ASSERT (e1 == e2);
|
||||
|
||||
Ipv4Address dst("1.2.3.4");
|
||||
header.SetDestination (dst);
|
||||
e1 = QueueEntry (packet, header);
|
||||
q.enque (e1);
|
||||
|
||||
bool ok = q.deque (dst, e2);
|
||||
NS_TEST_ASSERT (ok);
|
||||
NS_TEST_ASSERT (e1 == e2);
|
||||
NS_TEST_ASSERT (! q.find(dst));
|
||||
q.enque (e1);
|
||||
NS_TEST_ASSERT (q.find(dst));
|
||||
|
||||
CheckSizeLimit ();
|
||||
|
||||
Simulator::Schedule (Seconds(AODV_RTQ_TIMEOUT+1), & AodvRqueueTest::CheckTimeout, this);
|
||||
|
||||
Simulator::Run ();
|
||||
Simulator::Destroy ();
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
void
|
||||
AodvRqueueTest::CheckSizeLimit ()
|
||||
{
|
||||
Ptr<Packet> packet = Create<Packet>();
|
||||
Ipv4Header header;
|
||||
QueueEntry e1 (packet, header);
|
||||
|
||||
for (uint32_t i = 0; i < AODV_RTQ_MAX_LEN; ++i)
|
||||
q.enque (e1);
|
||||
NS_TEST_ASSERT (q.size() == AODV_RTQ_MAX_LEN);
|
||||
|
||||
for (uint32_t i = 0; i < AODV_RTQ_MAX_LEN; ++i)
|
||||
q.enque (e1);
|
||||
NS_TEST_ASSERT (q.size() == AODV_RTQ_MAX_LEN);
|
||||
}
|
||||
|
||||
void
|
||||
AodvRqueueTest::CheckTimeout ()
|
||||
{
|
||||
NS_TEST_ASSERT (q.size() == 0);
|
||||
}
|
||||
#endif
|
||||
}}
|
||||
|
||||
@@ -33,15 +33,22 @@ namespace ns3 {
|
||||
namespace aodv {
|
||||
|
||||
/// The maximum number of packets that we allow a routing protocol to buffer.
|
||||
#define AODV_RTQ_MAX_LEN 64
|
||||
#define AODV_RTQ_MAX_LEN 64
|
||||
/// The maximum period of time that a routing protocol is allowed to buffer a packet for, seconds.
|
||||
#define AODV_RTQ_TIMEOUT 30
|
||||
#define AODV_RTQ_TIMEOUT 30
|
||||
|
||||
struct QueueEntry
|
||||
{
|
||||
Ptr<Packet> p;
|
||||
Ipv4Header header;
|
||||
Time enExpire;
|
||||
|
||||
QueueEntry(Ptr<Packet> pa, Ipv4Header const & h, Time exp = Seconds(0)) : p(pa), header(h), enExpire(exp) {}
|
||||
|
||||
bool operator==(QueueEntry const & o) const
|
||||
{
|
||||
return ((p == o.p)/*&& header == o.header*/ && (enExpire == o.enExpire));
|
||||
}
|
||||
};
|
||||
|
||||
class aodv_rqueue
|
||||
@@ -50,18 +57,21 @@ public:
|
||||
/// default c-tor
|
||||
aodv_rqueue();
|
||||
/// Push element in queue.
|
||||
void enque(QueueEntry entry);
|
||||
void enque(QueueEntry & entry);
|
||||
/// Returns a element from the head of the queue.
|
||||
QueueEntry deque();
|
||||
/// Return first found (the earliest) entry for given destination
|
||||
bool deque(Ipv4Address dst, QueueEntry & entry);
|
||||
/// Finds whether a packet with destination dst exists in the queue
|
||||
bool find(Ipv4Address dst);
|
||||
/// Number of entries
|
||||
uint32_t size();
|
||||
|
||||
private:
|
||||
std::vector<QueueEntry> queue;
|
||||
/// Remove and return first entry from queue
|
||||
QueueEntry remove_head();
|
||||
/// Remove all expired entries
|
||||
void purge();
|
||||
/// Find packet with destination address dst, return true on success
|
||||
bool findPacketWithDst(Ipv4Address dst, QueueEntry & entry);
|
||||
|
||||
Reference in New Issue
Block a user