23 #include "ns3/simulator.h"
24 #include "ns3/drop-tail-queue.h"
26 #include "ss-net-device.h"
27 #include "wimax-phy.h"
28 #include "ns3/packet-burst.h"
30 #include "dl-mac-messages.h"
31 #include "ul-mac-messages.h"
32 #include "ss-scheduler.h"
33 #include "wimax-mac-queue.h"
34 #include "ns3/trace-source-accessor.h"
35 #include "ns3/pointer.h"
37 #include "service-flow.h"
38 #include "service-flow-record.h"
39 #include "service-flow-manager.h"
40 #include "connection-manager.h"
41 #include "burst-profile-manager.h"
42 #include "ss-link-manager.h"
43 #include "bandwidth-manager.h"
49 NS_OBJECT_ENSURE_REGISTERED (SubscriberStationNetDevice);
51 Time SubscriberStationNetDevice::GetDefaultLostDlMapInterval ()
57 SubscriberStationNetDevice::GetTypeId (
void)
61 TypeId (
"ns3::SubscriberStationNetDevice")
63 .SetParent<WimaxNetDevice> ()
65 .AddConstructor<SubscriberStationNetDevice> ()
67 .AddAttribute (
"BasicConnection",
70 MakePointerAccessor (&SubscriberStationNetDevice::m_basicConnection),
71 MakePointerChecker<WimaxConnection> ())
73 .AddAttribute (
"PrimaryConnection",
76 MakePointerAccessor (&SubscriberStationNetDevice::m_primaryConnection),
77 MakePointerChecker<WimaxConnection> ())
79 .AddAttribute (
"LostDlMapInterval",
80 "Time since last received DL-MAP message before downlink synchronization is considered lost. Maximum is 600ms",
82 MakeTimeAccessor (&SubscriberStationNetDevice::GetLostDlMapInterval,
86 .AddAttribute (
"LostUlMapInterval",
87 "Time since last received UL-MAP before uplink synchronization is considered lost, maximum is 600.",
93 .AddAttribute (
"MaxDcdInterval",
94 "Maximum time between transmission of DCD messages. Maximum is 10s",
100 .AddAttribute (
"MaxUcdInterval",
101 "Maximum time between transmission of UCD messages. Maximum is 10s",
107 .AddAttribute (
"IntervalT1",
108 "Wait for DCD timeout. Maximum is 5*maxDcdInterval",
114 .AddAttribute (
"IntervalT2",
115 "Wait for broadcast ranging timeout, i.e., wait for initial ranging opportunity. Maximum is 5*Ranging interval",
121 .AddAttribute (
"IntervalT3",
122 "ranging Response reception timeout following the transmission of a ranging request. Maximum is 200ms",
128 .AddAttribute (
"IntervalT7",
129 "wait for DSA/DSC/DSD Response timeout. Maximum is 1s",
135 .AddAttribute (
"IntervalT12",
136 "Wait for UCD descriptor.Maximum is 5*MaxUcdInterval",
142 .AddAttribute (
"IntervalT20",
143 "Time the SS searches for preambles on a given channel. Minimum is 2 MAC frames",
149 .AddAttribute (
"IntervalT21",
150 "time the SS searches for (decodable) DL-MAP on a given channel",
156 .AddAttribute (
"MaxContentionRangingRetries",
157 "Number of retries on contention Ranging Requests",
161 MakeUintegerChecker<uint8_t> (1, 16))
163 .AddAttribute (
"SSScheduler",
164 "The ss scheduler attached to this device.",
168 MakePointerChecker<SSScheduler> ())
170 .AddAttribute (
"LinkManager",
171 "The ss link manager attached to this device.",
175 MakePointerChecker<SSLinkManager> ())
177 .AddAttribute (
"Classifier",
178 "The ss classifier attached to this device.",
182 MakePointerChecker<IpcsClassifier> ())
184 .AddTraceSource (
"SSTxDrop",
185 "A packet has been dropped in the MAC layer before being queued for transmission.",
188 .AddTraceSource (
"SSPromiscRx",
189 "A packet has been received by this device, has been passed up from the physical layer "
190 "and is being forwarded up the local protocol stack. This is a promiscuous trace,",
193 .AddTraceSource (
"SSRx",
194 "A packet has been received by this device, has been passed up from the physical layer "
195 "and is being forwarded up the local protocol stack. This is a non-promiscuous trace,",
198 .AddTraceSource (
"SSRxDrop",
199 "A packet has been dropped in the MAC layer after it has been passed up from the physical "
205 SubscriberStationNetDevice::SubscriberStationNetDevice (
void)
217 m_maxDcdInterval =
Seconds (10);
218 m_maxUcdInterval =
Seconds (10);
220 m_intervalT2 =
Seconds (5 * 2);
225 m_maxContentionRangingRetries = 16;
229 m_allocationStartTime = 0;
230 m_nrDlMapElements = 0;
231 m_nrUlMapElements = 0;
236 m_modulationType = WimaxPhy::MODULATION_TYPE_BPSK_12;
237 m_areManagementConnectionsAllocated =
false;
238 m_areServiceFlowsAllocated =
false;
240 m_basicConnection = 0;
241 m_primaryConnection = 0;
245 m_classifier = CreateObject<IpcsClassifier> ();
246 m_linkManager = CreateObject<SSLinkManager> (
this);
247 m_scheduler = CreateObject<SSScheduler> (
this);
248 m_serviceFlowManager = CreateObject<SsServiceFlowManager> (
this);
258 SubscriberStationNetDevice::~SubscriberStationNetDevice (
void)
265 delete m_dlBurstProfile;
266 delete m_ulBurstProfile;
268 m_serviceFlowManager = 0;
269 m_basicConnection = 0;
270 m_primaryConnection = 0;
272 m_dlBurstProfile = 0;
273 m_ulBurstProfile = 0;
283 m_lostDlMapInterval = lostDlMapInterval;
287 SubscriberStationNetDevice::GetLostDlMapInterval (
void)
const
289 return m_lostDlMapInterval;
295 m_lostUlMapInterval = lostUlMapInterval;
301 return m_lostUlMapInterval;
307 m_maxDcdInterval = maxDcdInterval;
313 return m_maxDcdInterval;
319 m_maxUcdInterval = maxUcdInterval;
325 return m_maxUcdInterval;
331 m_intervalT1 = interval;
343 m_intervalT2 = interval;
355 m_intervalT3 = interval;
367 m_intervalT7 = interval;
379 m_intervalT12 = interval;
385 return m_intervalT12;
391 m_intervalT20 = interval;
397 return m_intervalT20;
403 m_intervalT21 = interval;
409 return m_intervalT21;
415 m_maxContentionRangingRetries = maxContentionRangingRetries;
421 return m_maxContentionRangingRetries;
427 m_basicConnection = basicConnection;
433 return m_basicConnection;
439 m_primaryConnection = primaryConnection;
445 return m_primaryConnection;
451 return m_basicConnection->GetCid ();
457 return m_primaryConnection->GetCid ();
463 m_modulationType = modulationType;
466 WimaxPhy::ModulationType
469 return m_modulationType;
475 m_areManagementConnectionsAllocated = areManagementConnectionsAllocated;
481 return m_areManagementConnectionsAllocated;
487 m_areServiceFlowsAllocated = areServiceFlowsAllocated;
493 return m_areServiceFlowsAllocated;
505 m_scheduler = scheduler;
524 m_classifier = classifier;
530 return m_linkManager;
536 m_linkManager = linkManager;
542 return m_serviceFlowManager;
548 m_serviceFlowManager = sfm;
552 SubscriberStationNetDevice::Start (
void)
554 SetReceiveCallback ();
556 GetPhy ()->SetPhyParameters ();
557 GetPhy ()->SetDataRates ();
558 m_intervalT20 =
Seconds (4 *
GetPhy ()->GetFrameDuration ().GetSeconds ());
560 CreateDefaultConnections ();
565 SubscriberStationNetDevice::Stop (
void)
567 SetState (SS_STATE_STOPPED);
583 SubscriberStationNetDevice::DoSend (
Ptr<Packet> packet,
586 uint16_t protocolNumber)
598 NS_LOG_DEBUG (
"SS (Basic CID: " << m_basicConnection->GetCid () <<
")");
603 NS_LOG_INFO (
"\tCan't send packet! (NotRegitered with the network)");
607 NS_LOG_DEBUG (
"packet to send, size : " << packet->
GetSize () <<
", destination : " << dest);
611 NS_LOG_INFO (
"\tCan't send packet! (No service Flow)");
615 if (protocolNumber == 2048)
617 serviceFlow = m_classifier->Classify (packet,
GetServiceFlowManager (), ServiceFlow::SF_DIRECTION_UP);
620 if ((protocolNumber != 2048) || (serviceFlow == NULL))
623 NS_LOG_INFO (
"\tNo service flows matches...using the default one.");
626 NS_LOG_INFO (
"\tPacket classified in the service flow SFID = " << serviceFlow->GetSfid () <<
" CID = "
627 << serviceFlow->GetCid ());
628 if (serviceFlow->GetIsEnabled ())
630 if (!
Enqueue (packet, MacHeaderType (), serviceFlow->GetConnection ()))
643 NS_LOG_INFO (
"Error!! The Service Flow is not enabled" );
656 NS_ASSERT_MSG (connection != 0,
"SS: Can not enqueue the packet: the selected connection is nor initialized");
660 if (hdrType.GetType () == MacHeaderType::HEADER_TYPE_GENERIC)
663 hdr.SetCid (connection->GetCid ());
667 if (connection->GetType () == Cid::TRANSPORT)
670 if (connection->GetSchedulingType () == ServiceFlow::SF_TYPE_UGS && m_scheduler->GetPollMe ())
672 NS_ASSERT_MSG (hdrType.GetType () != MacHeaderType::HEADER_TYPE_BANDWIDTH,
673 "Error while equeuing packet: incorrect header type");
676 grantMgmntSubhdr.SetPm (
true);
680 NS_LOG_INFO (
"ServiceFlowManager: enqueuing packet" );
681 return connection->Enqueue (packet, hdrType, hdr);
690 WimaxPhy::ModulationType modulationType;
692 if (uiuc == OfdmUlBurstProfile::UIUC_INITIAL_RANGING || uiuc == OfdmUlBurstProfile::UIUC_REQ_REGION_FULL)
694 modulationType = WimaxPhy::MODULATION_TYPE_BPSK_12;
700 Ptr<PacketBurst> burst = m_scheduler->Schedule (nrSymbols, modulationType, packetType, connection);
702 if (burst->GetNPackets () == 0)
709 NS_LOG_DEBUG (
"SS (Basic CID: " << m_basicConnection->GetCid () <<
")");
716 if (connection->GetType () == Cid::TRANSPORT)
722 NS_LOG_DEBUG (
" sending burst" <<
", SFID: " << connection->GetServiceFlow ()->GetSfid () <<
", pkts sent: "
731 ForwardDown (burst, modulationType);
735 SubscriberStationNetDevice::DoReceive (
Ptr<Packet> packet)
741 uint32_t pktSize = packet->
GetSize ();
744 bool fragmentation =
false;
746 if (gnrcMacHdr.GetHt () == MacHeaderType::HEADER_TYPE_GENERIC)
748 if (gnrcMacHdr.check_hcs () ==
false)
756 cid = gnrcMacHdr.GetCid ();
759 uint8_t type = gnrcMacHdr.GetType ();
763 uint8_t tmpType = type;
764 if (((tmpType >> 2) & 1) == 1)
767 fragmentation =
true;
768 NS_LOG_INFO (
"SS DoReceive -> the packet is a fragment" << std::endl);
775 switch (msgType.GetType ())
777 case ManagementMessageType::MESSAGE_TYPE_DL_MAP:
779 if (GetState () == SS_STATE_SYNCHRONIZING)
789 m_linkManager->ScheduleScanningRestart (m_lostDlMapInterval, EVENT_LOST_DL_MAP,
false, m_lostDlMapEvent);
796 m_linkManager->ScheduleScanningRestart (m_intervalT1,
797 EVENT_DCD_WAIT_TIMEOUT,
799 m_dcdWaitTimeoutEvent);
806 m_linkManager->ScheduleScanningRestart (m_intervalT12,
807 EVENT_UCD_WAIT_TIMEOUT,
809 m_ucdWaitTimeoutEvent);
813 ProcessDlMap (dlmap);
816 case ManagementMessageType::MESSAGE_TYPE_UL_MAP:
821 m_linkManager->ScheduleScanningRestart (m_lostUlMapInterval,
830 ProcessUlMap (ulmap);
832 if (GetState () == SS_STATE_WAITING_REG_RANG_INTRVL)
834 if (m_linkManager->GetRangingIntervalFound ())
836 if (m_rangOppWaitTimeoutEvent.
IsRunning ())
840 m_linkManager->PerformBackoff ();
845 case ManagementMessageType::MESSAGE_TYPE_DCD:
847 if (GetState () == SS_STATE_SYNCHRONIZING)
849 SetState (SS_STATE_ACQUIRING_PARAMETERS);
855 m_linkManager->ScheduleScanningRestart (m_intervalT1,
856 EVENT_DCD_WAIT_TIMEOUT,
858 m_dcdWaitTimeoutEvent);
864 dcd.SetNrDlBurstProfiles (7);
870 case ManagementMessageType::MESSAGE_TYPE_UCD:
875 ucd.SetNrUlBurstProfiles (7);
883 m_linkManager->ScheduleScanningRestart (m_intervalT12,
884 EVENT_UCD_WAIT_TIMEOUT,
886 m_ucdWaitTimeoutEvent);
889 if (GetState () == SS_STATE_ACQUIRING_PARAMETERS)
893 SetState (SS_STATE_WAITING_REG_RANG_INTRVL);
895 m_linkManager->ScheduleScanningRestart (m_intervalT2,
896 EVENT_RANG_OPP_WAIT_TIMEOUT,
898 m_rangOppWaitTimeoutEvent);
899 m_linkManager->ScheduleScanningRestart (m_lostUlMapInterval,
914 switch (msgType.GetType ())
916 case ManagementMessageType::MESSAGE_TYPE_RNG_REQ:
919 case ManagementMessageType::MESSAGE_TYPE_RNG_RSP:
921 "SS: Error while receiving a ranging response message: SS state should be SS_STATE_WAITING_RNG_RSP");
923 m_linkManager->PerformRanging (cid, rngrsp);
929 else if (m_basicConnection != 0 && cid == m_basicConnection->GetCid () && !fragmentation)
933 switch (msgType.GetType ())
935 case ManagementMessageType::MESSAGE_TYPE_RNG_REQ:
938 case ManagementMessageType::MESSAGE_TYPE_RNG_RSP:
940 "SS: Error while receiving a ranging response message: SS state should be SS_STATE_WAITING_RNG_RSP");
942 m_linkManager->PerformRanging (cid, rngrsp);
948 else if (m_primaryConnection != 0 && cid == m_primaryConnection->GetCid () && !fragmentation)
952 switch (msgType.GetType ())
954 case ManagementMessageType::MESSAGE_TYPE_REG_REQ:
957 case ManagementMessageType::MESSAGE_TYPE_REG_RSP:
960 case ManagementMessageType::MESSAGE_TYPE_DSA_REQ:
964 case ManagementMessageType::MESSAGE_TYPE_DSA_RSP:
972 case ManagementMessageType::MESSAGE_TYPE_DSA_ACK:
983 ServiceFlowRecord *record = serviceFlow->GetRecord ();
985 record->UpdatePktsRcvd (1);
986 record->UpdateBytesRcvd (pktSize);
996 NS_LOG_INFO (
"FRAG_DEBUG: SS DoReceive, the Packet is a fragment" << std::endl);
998 uint32_t fc = fragSubhdr.GetFc ();
1005 NS_LOG_INFO (
"\t Received the latest fragment" << std::endl);
1007 ->FragmentEnqueue (packet);
1010 GetConnection (cid)->GetFragmentsQueue ();
1012 Ptr<Packet> fullPacket = Create<Packet> ();
1015 NS_LOG_INFO (
"\t SS PACKET DEFRAGMENTATION" << std::endl);
1016 for (std::list<Ptr<const Packet> >::const_iterator iter = fragmentsQueue.begin ();
1017 iter != fragmentsQueue.end (); ++iter)
1020 fullPacket->AddAtEnd (*iter);
1023 ->ClearFragmentsQueue ();
1024 NS_LOG_INFO (
"\t fullPacket size = " << fullPacket->GetSize () << std::endl);
1033 NS_LOG_INFO (
"\t Received the first or the middle fragment" << std::endl);
1043 else if (IsPromisc ())
1045 NotifyPromiscTrace (packet);
1062 SubscriberStationNetDevice::ProcessDlMap (
const DlMap &dlmap)
1065 m_dcdCount = dlmap.GetDcdCount ();
1066 m_baseStationId = dlmap.GetBaseStationId ();
1067 std::list<OfdmDlMapIe> dlMapElements = dlmap.GetDlMapElements ();
1069 for (std::list<OfdmDlMapIe>::iterator iter = dlMapElements.begin (); iter != dlMapElements.end (); ++iter)
1071 if (iter->GetDiuc () == OfdmDlBurstProfile::DIUC_END_OF_MAP)
1076 if (iter->GetCid () == m_basicConnection->GetCid ())
1085 uint8_t temp = iter->GetDiuc ();
1086 temp = iter->GetPreamblePresent ();
1087 temp = iter->GetStartTime ();
1093 SubscriberStationNetDevice::ProcessUlMap (
const UlMap &ulmap)
1096 m_ucdCount = ulmap.GetUcdCount ();
1097 m_allocationStartTime = ulmap.GetAllocationStartTime ();
1098 std::list<OfdmUlMapIe> ulMapElements = ulmap.GetUlMapElements ();
1099 m_linkManager->SetRangingIntervalFound (
false);
1101 for (std::list<OfdmUlMapIe>::iterator iter = ulMapElements.begin (); iter != ulMapElements.end (); ++iter)
1103 OfdmUlMapIe ulMapIe = *iter;
1105 if (ulMapIe.GetUiuc () == OfdmUlBurstProfile::UIUC_END_OF_MAP)
1110 Cid cid = ulMapIe.GetCid ();
1112 if (ulMapIe.GetUiuc () == OfdmUlBurstProfile::UIUC_INITIAL_RANGING && cid ==
GetBroadcastConnection ()->GetCid ())
1114 m_linkManager->SetRangingIntervalFound (
true);
1117 if (m_areManagementConnectionsAllocated && cid == m_basicConnection->GetCid ())
1120 Time timeToAllocation = GetTimeToAllocation (
Seconds (ulMapIe.GetStartTime ()
1121 *
GetPhy ()->GetSymbolDuration ().GetSeconds ()));
1123 if (ulMapIe.GetUiuc () == OfdmUlBurstProfile::UIUC_INITIAL_RANGING)
1127 m_linkManager->IncrementNrInvitedPollsRecvd ();
1128 NS_ASSERT_MSG (GetState () == SS_STATE_WAITING_INV_RANG_INTRVL,
1129 "SS: Error while processing UL MAP: SS state should be SS_STATE_WAITING_INV_RANG_INTRVL");
1131 &SSLinkManager::SendRangingRequest,
1134 ulMapIe.GetDuration ());
1136 else if (ulMapIe.GetUiuc () == OfdmUlBurstProfile::UIUC_REQ_REGION_FULL)
1141 &BandwidthManager::SendBandwidthRequest,
1144 ulMapIe.GetDuration ());
1150 Ptr<WimaxConnection> connection = NULL;
1155 ulMapIe.GetDuration (),
1157 MacHeaderType::HEADER_TYPE_GENERIC);
1162 if (ulMapIe.GetUiuc () == OfdmUlBurstProfile::UIUC_INITIAL_RANGING && cid
1166 if (GetCurrentUcd ().GetChannelEncodings ().GetRangReqOppSize () != 0)
1168 m_linkManager->SetNrRangingTransOpps ((ulMapIe.GetDuration () *
GetPhy ()->GetPsPerSymbol ())
1169 / GetCurrentUcd ().GetChannelEncodings ().GetRangReqOppSize ());
1173 if (GetState () == SS_STATE_WAITING_REG_RANG_INTRVL || GetState () == SS_STATE_ADJUSTING_PARAMETERS)
1175 m_linkManager->StartContentionResolution ();
1184 SubscriberStationNetDevice::ProcessDcd (
const Dcd &dcd)
1187 if (dcd.GetConfigurationChangeCount () == GetCurrentDcd ().GetConfigurationChangeCount ())
1192 SetCurrentDcd (dcd);
1193 OfdmDcdChannelEncodings dcdChnlEncodings = dcd.GetChannelEncodings ();
1196 m_linkManager->SetBsEirp (dcdChnlEncodings.GetBsEirp ());
1197 m_linkManager->SetEirXPIrMax (dcdChnlEncodings.GetEirxPIrMax ());
1199 GetPhy ()->GetFrameDuration (dcdChnlEncodings.GetFrameDurationCode ());
1201 std::vector<OfdmDlBurstProfile> dlBurstProfiles = dcd.GetDlBurstProfiles ();
1203 for (std::vector<OfdmDlBurstProfile>::iterator iter = dlBurstProfiles.begin (); iter != dlBurstProfiles.end (); ++iter)
1205 OfdmDlBurstProfile brstProfile = *iter;
1209 if (brstProfile.GetFecCodeType () == m_modulationType)
1211 m_dlBurstProfile->SetFecCodeType (brstProfile.GetFecCodeType ());
1212 m_dlBurstProfile->SetDiuc (brstProfile.GetDiuc ());
1218 SubscriberStationNetDevice::ProcessUcd (
const Ucd &ucd)
1221 if (!m_linkManager->IsUlChannelUsable ())
1223 m_linkManager->StartScanning (EVENT_NONE,
false);
1227 if (ucd.GetConfigurationChangeCount () == GetCurrentUcd ().GetConfigurationChangeCount ())
1232 SetCurrentUcd (ucd);
1233 m_linkManager->SetRangingCW ((uint8_t) std::pow ((
double) 2, (
double) ucd.GetRangingBackoffStart ()) - 1);
1234 OfdmUcdChannelEncodings ucdChnlEncodings = ucd.GetChannelEncodings ();
1236 std::vector<OfdmUlBurstProfile> ulBurstProfiles = ucd.GetUlBurstProfiles ();
1238 for (std::vector<OfdmUlBurstProfile>::iterator iter = ulBurstProfiles.begin (); iter != ulBurstProfiles.end (); ++iter)
1240 OfdmUlBurstProfile brstProfile = *iter;
1244 if (brstProfile.GetFecCodeType () == m_modulationType)
1246 m_ulBurstProfile->SetFecCodeType (brstProfile.GetFecCodeType ());
1247 m_ulBurstProfile->SetUiuc (brstProfile.GetUiuc ());
1257 return GetState () >= SS_STATE_REGISTERED;
1261 SubscriberStationNetDevice::GetTimeToAllocation (
Time defferTime)
1264 Time timeToUlSubframe =
Seconds (m_allocationStartTime *
GetPhy ()->GetPsDuration ().GetSeconds ())
1265 - timeAlreadyElapsed;
1266 return timeToUlSubframe + defferTime;
1270 SubscriberStationNetDevice::SetTimer (EventId eventId, EventId &event)
1272 if (GetState () == SS_STATE_STOPPED)
uint32_t RemoveHeader(Header &header)
void SetIntervalT3(Time interval3)
Cid GetBasicCid(void) const
void SetIntervalT1(Time interval1)
Time GetIntervalT2(void) const
void SetLostDlMapInterval(Time lostDlMapInterval)
Time GetMaxUcdInterval(void) const
void SetIntervalT21(Time interval21)
bool HasServiceFlows(void) const
this class implements a structure to manage some parameters and statistics related to a service flow ...
void SetIntervalT2(Time interval2)
void SetModulationType(WimaxPhy::ModulationType modulationType)
Set the most efficient modulation and coding scheme (MCS) supported by the device.
bool GetAreManagementConnectionsAllocated(void) const
uint32_t GetBytesRcvd(void) const
bool IsMulticast(void) const
#define NS_LOG_COMPONENT_DEFINE(name)
void SetMaxDcdInterval(Time maxDcdInterval)
void SetAreManagementConnectionsAllocated(bool areManagementConnectionsAllocated)
Ptr< WimaxConnection > GetBroadcastConnection(void) const
uint32_t GetSize(void) const
Time GetIntervalT7(void) const
void SetLostUlMapInterval(Time lostUlMapInterval)
Time GetLostUlMapInterval(void) const
static void Cancel(const EventId &id)
void SetScheduler(Ptr< SSScheduler > ssScheduler)
bool IsRunning(void) const
void SetMaxUcdInterval(Time maxUcdInterval)
Ptr< ConnectionManager > GetConnectionManager(void) const
Time GetIntervalT12(void) const
Ptr< IpcsClassifier > GetIpcsClassifier() const
static EventId Schedule(Time const &time, MEM mem_ptr, OBJ obj)
TracedCallback< Ptr< const Packet > > m_ssPromiscRxTrace
#define NS_FATAL_ERROR(msg)
fatal error handling
bool IsRegistered(void) const
Cid GetPrimaryCid(void) const
Ptr< SSScheduler > GetScheduler(void) const
TracedCallback< Ptr< const Packet > > m_ssRxTrace
double GetSeconds(void) const
void SetIntervalT20(Time interval20)
void SetMaxContentionRangingRetries(uint8_t maxContentionRangingRetries)
void SetIntervalT12(Time interval12)
bool Enqueue(Ptr< Packet > packet, const MacHeaderType &hdrType, Ptr< WimaxConnection > connection)
Enqueue a packet into a connection queue.
TracedCallback< Ptr< const Packet > > m_ssTxDropTrace
Ptr< WimaxConnection > GetInitialRangingConnection(void) const
Ptr< BandwidthManager > GetBandwidthManager(void) const
Ptr< SSLinkManager > GetLinkManager(void) const
TracedCallback< Ptr< const Packet > > m_ssTxTrace
void SendBurst(uint8_t uiuc, uint16_t nrSymbols, Ptr< WimaxConnection > connection, MacHeaderType::HeaderType packetType=MacHeaderType::HEADER_TYPE_GENERIC)
Sends a burst on the uplink frame.
Mac48Address GetMacAddress(void) const
TracedCallback< Ptr< const Packet > > m_ssRxDropTrace
virtual void DoDispose(void)
Ptr< const TraceSourceAccessor > MakeTraceSourceAccessor(T a)
WimaxPhy::ModulationType GetModulationType(void) const
uint32_t GetPktsRcvd(void) const
static EventId ScheduleNow(MEM mem_ptr, OBJ obj)
void SetBasicConnection(Ptr< WimaxConnection > basicConnection)
void SetPhy(Ptr< WimaxPhy > phy)
Ptr< WimaxConnection > GetBasicConnection(void) const
void SetAreServiceFlowsAllocated(bool areServiceFlowsAllocated)
#define NS_ASSERT_MSG(condition, message)
Ptr< BurstProfileManager > GetBurstProfileManager(void) const
Time GetIntervalT21(void) const
Time Seconds(double seconds)
create ns3::Time instances in units of seconds.
void SetLinkManager(Ptr< SSLinkManager >)
sets the link manager to be used
Time GetIntervalT1(void) const
Ptr< WimaxPhy > GetPhy(void) const
Time GetMaxDcdInterval(void) const
#define NS_LOG_DEBUG(msg)
void SetIntervalT7(Time interval7)
uint32_t GetBytesSent(void) const
Time GetIntervalT20(void) const
Time MilliSeconds(uint64_t ms)
create ns3::Time instances in units of milliseconds.
void SetServiceFlowManager(Ptr< SsServiceFlowManager >)
Sets the service flow manager to be installed on the device.
#define NS_LOG_ERROR(msg)
void InitSubscriberStationNetDevice(void)
initializes the net device and sets the parameters to the default values
void UpdateBytesSent(uint32_t bytesSent)
update the number of sent bytes by adding bytesSent
virtual void SetNode(Ptr< Node > node)
void SetIpcsPacketClassifier(Ptr< IpcsClassifier >)
Sets the packet classifier to be used.
Ptr< SsServiceFlowManager > GetServiceFlowManager(void) const
void AddServiceFlow(ServiceFlow *sf)
adds a new service flow
void SetPrimaryConnection(Ptr< WimaxConnection > primaryConnection)
Time MicroSeconds(uint64_t us)
create ns3::Time instances in units of microseconds.
uint8_t GetMaxContentionRangingRetries(void) const
void AddHeader(const Header &header)
Ptr< WimaxConnection > GetPrimaryConnection(void) const
bool GetAreServiceFlowsAllocated(void) const
void UpdatePktsSent(uint32_t pktsSent)
update the number of sent packets by adding pktsSent
Time GetIntervalT3(void) const
uint32_t GetPktsSent(void) const