22 #include "ns3/simulator.h"
23 #include "ns3/dcf-state.h"
24 #include "ns3/dcf-manager.h"
25 #include "ns3/dca-txop.h"
51 void QueueTx (uint64_t txTime, uint64_t expectedGrantTime);
93 void NotifyAccessGranted (
void);
94 void NotifyInternalCollision (
void);
95 void NotifyCollision (
void);
96 void NotifyChannelSwitching (
void);
97 void NotifySleep (
void);
98 void NotifyWakeUp (
void);
99 void DoDispose (
void);
116 virtual void DoRun (
void);
122 void NotifyAccessGranted (uint32_t i);
127 void NotifyInternalCollision (uint32_t i);
132 void NotifyCollision (uint32_t i);
137 void NotifyChannelSwitching (uint32_t i);
148 void StartTest (uint64_t slotTime, uint64_t sifs, uint64_t eifsNoDifsNoSifs, uint32_t ackTimeoutValue = 20);
153 void AddDcfState (uint32_t aifsn);
162 void ExpectInternalCollision (uint64_t time, uint32_t nSlots, uint32_t from);
169 void ExpectCollision (uint64_t time, uint32_t nSlots, uint32_t from);
175 void AddRxOkEvt (uint64_t at, uint64_t duration);
181 void AddRxErrorEvt (uint64_t at, uint64_t duration);
187 void AddRxInsideSifsEvt (uint64_t at, uint64_t duration);
193 void AddTxEvt (uint64_t at, uint64_t duration);
199 void AddNavReset (uint64_t at, uint64_t duration);
205 void AddNavStart (uint64_t at, uint64_t duration);
210 void AddAckTimeoutReset (uint64_t at);
218 void AddAccessRequest (uint64_t at, uint64_t txTime,
219 uint64_t expectedGrantTime, uint32_t from);
227 void AddAccessRequestWithAckTimeout (uint64_t at, uint64_t txTime,
228 uint64_t expectedGrantTime, uint32_t from);
237 void AddAccessRequestWithSuccessfullAck (uint64_t at, uint64_t txTime,
238 uint64_t expectedGrantTime, uint32_t ackDelay, uint32_t from);
245 void DoAccessRequest (uint64_t txTime, uint64_t expectedGrantTime,
Ptr<DcfStateTest> state);
251 void AddCcaBusyEvt (uint64_t at, uint64_t duration);
257 void AddSwitchingEvt (uint64_t at, uint64_t duration);
263 void AddRxStartEvt (uint64_t at, uint64_t duration);
266 typedef std::vector<Ptr<DcaTxopTest> >
Dca;
295 DcaTxop::DoDispose ();
434 m_dca.push_back (dca);
445 Simulator::Destroy ();
457 for (Dca::const_iterator i =
m_dca.begin (); i !=
m_dca.end (); i++)
521 uint64_t expectedGrantTime, uint32_t from)
528 uint64_t expectedGrantTime, uint32_t from)
537 uint64_t expectedGrantTime, uint32_t ackDelay, uint32_t from)
549 state->
QueueTx (txTime, expectedGrantTime);
DcaTxopTest(DcfManagerTest *test, uint32_t i)
Constructor.
void Dispose(void)
Dispose of this Object.
std::vector< Ptr< DcaTxopTest > > Dca
the DCA TXOP tests typedef
std::pair< uint64_t, uint64_t > ExpectedGrant
the expected grant typedef
Smart pointer class similar to boost::intrusive_ptr.
void NotifySleep(void)
When sleep operation occurs, if there is a pending packet transmission, it will be reinserted to the ...
static DcfTestSuite g_dcfTestSuite
ExpectedCollision structure.
ExpectedCollisions m_expectedInternalCollision
expected internal collisions
#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)
Add expect collision function.
void AddAccessRequestWithAckTimeout(uint64_t at, uint64_t txTime, uint64_t expectedGrantTime, uint32_t from)
Add access request with ack timeout.
void AddSwitchingEvt(uint64_t at, uint64_t duration)
Add switching event function.
void EndTest(void)
End test function.
#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
the collection of expected grants typedef
void AddTxEvt(uint64_t at, uint64_t duration)
Add transmit event function.
void NotifyInternalCollision(void)
Notify the DCF that internal collision has occurred.
void DoDispose(void)
Destructor implementation.
void AddRxInsideSifsEvt(uint64_t at, uint64_t duration)
Add receive inside SIFS event function.
void NotifyChannelSwitching(uint32_t i)
Notify channel switching function.
void NotifyAccessGranted(void)
Notify the DCF that access has been granted.
void StartTest(uint64_t slotTime, uint64_t sifs, uint64_t eifsNoDifsNoSifs, uint32_t ackTimeoutValue=20)
Start test function.
ExpectedCollisions m_expectedCollision
expected collision
void AddAckTimeoutReset(uint64_t at)
Add ack timeout reset function.
uint32_t m_i
the DCF state
void AddTestCase(TestCase *testCase, TestDuration duration=QUICK)
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.
void NotifyCollision(uint32_t i)
Notify collision function.
keep track of the state needed for a single DCF function.
void NotifyChannelSwitching(void)
When a channel switching occurs, enqueued packets are removed.
void AddNavReset(uint64_t at, uint64_t duration)
Add NAV reset function.
void ExpectCollision(uint64_t time, uint32_t nSlots, uint32_t from)
Expect internal collision function.
void AddCcaBusyEvt(uint64_t at, uint64_t duration)
Add CCA busy event function.
void NotifyCollision(void)
Notify the DCF that collision has occurred.
void ExpectInternalCollision(uint64_t time, uint32_t nSlots, uint32_t from)
Expect internal collision function.
uint32_t nSlots
number of slots
void StartBackoffNow(uint32_t nSlots)
DcfStates m_dcfStates
the DCF states
Every class exported by the ns3 library is enclosed in the ns3 namespace.
ExpectedGrants m_expectedGrants
expected grants
std::vector< Ptr< DcfStateTest > > DcfStates
the DCF test states typedef
void DoAccessRequest(uint64_t txTime, uint64_t expectedGrantTime, Ptr< DcfStateTest > state)
Add access request with successful ack.
void Add(Ptr< DcfState > dcf)
DcfStateTest(Ptr< DcaTxop > dca)
Constructor.
void NotifyWakeUp(void)
When wake up operation occurs, channel access will be restarted.
void SetEifsNoDifs(Time eifsNoDifs)
uint32_t m_ackTimeoutValue
the ack timeout value
void AddRxStartEvt(uint64_t at, uint64_t duration)
Add receive start event function.
std::list< struct ExpectedCollision > ExpectedCollisions
expected collisions typedef
void SetSlot(Time slotTime)
void NotifyAccessGranted(uint32_t i)
Notify access granted function.
void NotifyInternalCollision(uint32_t i)
Notify internal collision function.
void RequestAccess(Ptr< DcfState > state)
void AddNavStart(uint64_t at, uint64_t duration)
Add NAV start function.
DcfManagerTest * m_test
the test DCF manager
void AddAccessRequest(uint64_t at, uint64_t txTime, uint64_t expectedGrantTime, uint32_t from)
Add access function.
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.
void AddDcfState(uint32_t aifsn)
Add DCF state function.
void AddAccessRequestWithSuccessfullAck(uint64_t at, uint64_t txTime, uint64_t expectedGrantTime, uint32_t ackDelay, uint32_t from)
Add access request with successful ack.
handle packet fragmentation and retransmissions.
void AddRxErrorEvt(uint64_t at, uint64_t duration)
Add receive error event function.
Ptr< DcfManager > m_dcfManager
the DCF manager
void QueueTx(uint64_t txTime, uint64_t expectedGrantTime)
Queue transmit function.
virtual void DoRun(void)
Implementation to actually run this TestCase.