22 #include "ns3/simulator.h"
23 #include "ns3/dcf-manager.h"
33 void QueueTx (uint64_t txTime, uint64_t expectedGrantTime);
38 virtual void DoNotifyAccessGranted (
void);
39 virtual void DoNotifyInternalCollision (
void);
40 virtual void DoNotifyCollision (
void);
41 virtual void DoNotifyChannelSwitching (
void);
42 virtual void DoNotifySleep (
void);
43 virtual void DoNotifyWakeUp (
void);
66 virtual void DoRun (
void);
68 void NotifyAccessGranted (uint32_t i);
69 void NotifyInternalCollision (uint32_t i);
70 void NotifyCollision (uint32_t i);
71 void NotifyChannelSwitching (uint32_t i);
75 void StartTest (uint64_t slotTime, uint64_t sifs, uint64_t eifsNoDifsNoSifs, uint32_t ackTimeoutValue = 20);
76 void AddDcfState (uint32_t aifsn);
78 void ExpectInternalCollision (uint64_t time, uint32_t from, uint32_t nSlots);
79 void ExpectCollision (uint64_t time, uint32_t from, uint32_t nSlots);
80 void AddRxOkEvt (uint64_t at, uint64_t duration);
81 void AddRxErrorEvt (uint64_t at, uint64_t duration);
82 void AddRxInsideSifsEvt (uint64_t at, uint64_t duration);
83 void AddTxEvt (uint64_t at, uint64_t duration);
84 void AddNavReset (uint64_t at, uint64_t duration);
85 void AddNavStart (uint64_t at, uint64_t duration);
86 void AddAckTimeoutReset (uint64_t at);
87 void AddAccessRequest (uint64_t at, uint64_t txTime,
88 uint64_t expectedGrantTime, uint32_t from);
89 void AddAccessRequestWithAckTimeout (uint64_t at, uint64_t txTime,
90 uint64_t expectedGrantTime, uint32_t from);
96 void AddAccessRequestWithSuccessfullAck (uint64_t at, uint64_t txTime,
97 uint64_t expectedGrantTime, uint32_t ackDelay, uint32_t from);
98 void DoAccessRequest (uint64_t txTime, uint64_t expectedGrantTime,
DcfStateTest *state);
99 void AddCcaBusyEvt (uint64_t at, uint64_t duration);
100 void AddSwitchingEvt (uint64_t at, uint64_t duration);
101 void AddRxStartEvt (uint64_t at, uint64_t duration);
258 Simulator::Destroy ();
324 uint64_t expectedGrantTime, uint32_t from)
331 uint64_t expectedGrantTime, uint32_t from)
340 uint64_t expectedGrantTime, uint32_t ackDelay, uint32_t from)
352 state->
QueueTx (txTime, expectedGrantTime);
std::pair< uint64_t, uint64_t > ExpectedGrant
DcfManager * m_dcfManager
virtual void DoNotifyAccessGranted(void)
Called by DcfManager to notify a DcfState subclass that access to the medium is granted and can start...
static DcfTestSuite g_dcfTestSuite
void RequestAccess(DcfState *state)
ExpectedCollisions m_expectedInternalCollision
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file...
void AddRxOkEvt(uint64_t at, uint64_t duration)
void AddAccessRequestWithAckTimeout(uint64_t at, uint64_t txTime, uint64_t expectedGrantTime, uint32_t from)
DcfStateTest(DcfManagerTest *test, uint32_t i)
void AddSwitchingEvt(uint64_t at, uint64_t duration)
#define NS_TEST_EXPECT_MSG_EQ(actual, limit, msg)
Test that an actual and expected (limit) value are equal and report if not.
void SetAifsn(uint32_t aifsn)
std::list< ExpectedGrant > ExpectedGrants
void AddTxEvt(uint64_t at, uint64_t duration)
void ExpectInternalCollision(uint64_t time, uint32_t from, uint32_t nSlots)
virtual void DoNotifyCollision(void)
Called by DcfManager to notify a DcfState subclass that a normal collision occured, that is, that the medium was busy when access was requested.
void DoAccessRequest(uint64_t txTime, uint64_t expectedGrantTime, DcfStateTest *state)
void AddRxInsideSifsEvt(uint64_t at, uint64_t duration)
void NotifyChannelSwitching(uint32_t i)
void StartTest(uint64_t slotTime, uint64_t sifs, uint64_t eifsNoDifsNoSifs, uint32_t ackTimeoutValue=20)
ExpectedCollisions m_expectedCollision
void AddAckTimeoutReset(uint64_t at)
virtual void DoNotifySleep(void)
Called by DcfManager to notify a DcfState subclass that the device has begun to sleep.
void AddTestCase(TestCase *testCase, enum TestDuration duration)
Add an individual child TestCase to this test suite.
void NotifyTxStartNow(Time duration)
void NotifyAckTimeoutStartNow(Time duration)
Notify that ACK timer has started for the given duration.
Manage a set of ns3::DcfStateHandle a set of independent ns3::DcfState, each of which represents a si...
void NotifyCollision(uint32_t i)
keep track of the state needed for a single DCF function.
void AddNavReset(uint64_t at, uint64_t duration)
void AddCcaBusyEvt(uint64_t at, uint64_t duration)
virtual void DoNotifyWakeUp(void)
Called by DcfManager to notify a DcfState subclass that the device has begun to wake up...
void StartBackoffNow(uint32_t nSlots)
Every class exported by the ns3 library is enclosed in the ns3 namespace.
ExpectedGrants m_expectedGrants
void SetEifsNoDifs(Time eifsNoDifs)
uint32_t m_ackTimeoutValue
void AddRxStartEvt(uint64_t at, uint64_t duration)
std::list< struct ExpectedCollision > ExpectedCollisions
void SetSlot(Time slotTime)
void ExpectCollision(uint64_t time, uint32_t from, uint32_t nSlots)
void NotifyAccessGranted(uint32_t i)
virtual void DoNotifyChannelSwitching(void)
Called by DcfManager to notify a DcfState subclass that a channel switching occured.
void NotifyInternalCollision(uint32_t i)
void AddNavStart(uint64_t at, uint64_t duration)
void AddAccessRequest(uint64_t at, uint64_t txTime, uint64_t expectedGrantTime, uint32_t from)
Time MicroSeconds(uint64_t value)
Construct a Time in the indicated unit.
Time Now(void)
create an ns3::Time instance which contains the current simulation time.
virtual void DoNotifyInternalCollision(void)
Called by DcfManager to notify a DcfState subclass that an 'internal' collision occured, that is, that the backoff timer of a higher priority DcfState expired at the same time and that access was granted to this higher priority DcfState.
void AddDcfState(uint32_t aifsn)
void AddAccessRequestWithSuccessfullAck(uint64_t at, uint64_t txTime, uint64_t expectedGrantTime, uint32_t ackDelay, uint32_t from)
std::vector< DcfStateTest * > DcfStates
void AddRxErrorEvt(uint64_t at, uint64_t duration)
void test(void)
Example use of ns3::SystemThread.
void QueueTx(uint64_t txTime, uint64_t expectedGrantTime)
virtual void DoRun(void)
Implementation to actually run this TestCase.