24 #include "ns3/simulator.h"
25 #include "ns3/packet.h"
31 #include "ns3/pointer.h"
38 #include "ns3/buffer.h"
47 m_maxDsaRspRetries (100)
98 std::vector<ServiceFlow*>
121 SSRecord *ssRecord = bs->GetSSManager ()->GetSSRecord (cid);
124 NS_LOG_INFO (
"SS not registered with the BS CID:" << cid);
130 ssRecord->AddServiceFlow (serviceFlow);
133 bs->GetUplinkScheduler ()->SetupServiceFlow (ssRecord, serviceFlow);
138 if (ssRecord->GetDsaRspRetries () == 0)
140 dsaRsp =
CreateDsaRsp (serviceFlow, ssRecord->GetSfTransactionId ());
142 ssRecord->SetDsaRsp (dsaRsp);
152 NS_LOG_DEBUG (
"Service flows could not be initialized!");
156 ssRecord->IncrementDsaRspRetries ();
179 SSRecord *ssRecord = bs->GetSSManager ()->GetSSRecord (cid);
181 NS_LOG_INFO (
"BsServiceFlowManager: Processing DSA-REQ...");
182 if (ssRecord->GetSfTransactionId () != 0)
186 "Error while processing DSA request:the received transaction ID is not expected");
194 transportConnection = BsConManager->CreateConnection (
Cid::TRANSPORT);
196 transportConnection->SetServiceFlow (serviceFlow);
203 NS_LOG_INFO (
"BsServiceFlowManager: Creating a new Service flow: SFID = " << serviceFlow->
GetSfid () <<
" CID = "
204 << serviceFlow->
GetCid ());
222 bs->GetUplinkScheduler ()->SetupServiceFlow (0, serviceFlow);
232 NS_LOG_INFO (
"No service Flow. Could not connect.");
240 SSRecord *ssRecord = bs->GetSSManager ()->GetSSRecord (cid);
247 ssRecord->SetDsaRspRetries (0);
248 ssRecord->SetSfTransactionId (0);
253 ssRecord->SetAreServiceFlowsAllocated (
true);
smart pointer class similar to boost::intrusive_ptr
ServiceFlow * GetServiceFlow(uint32_t sfid) const
void SetConnection(Ptr< WimaxConnection > connection)
void SetServiceFlow(ServiceFlow sf)
specify a service flow to be requested by this message
void AllocateServiceFlows(const DsaReq &dsaReq, Cid cid)
ServiceFlow GetServiceFlow(void) const
#define NS_LOG_COMPONENT_DEFINE(name)
BsServiceFlowManager(Ptr< BaseStationNetDevice > device)
uint8_t GetMaxDsaRspRetries(void) const
uint32_t GetSfid(void) const
~BsServiceFlowManager(void)
static void Cancel(const EventId &id)
bool IsRunning(void) const
static EventId Schedule(Time const &time, MEM mem_ptr, OBJ obj)
Ptr< WimaxNetDevice > m_device
void ScheduleDsaRsp(ServiceFlow *serviceFlow, Cid cid)
void SetTransactionId(uint16_t transactionId)
EventId m_dsaAckTimeoutEvent
static Cid InitialRanging(void)
void SetUnsolicitedPollingInterval(uint16_t)
bool AreServiceFlowsAllocated()
void CopyParametersFrom(ServiceFlow sf)
ServiceFlow * GetServiceFlow(uint32_t sfid) const
uint8_t m_maxDsaRspRetries
void SetUnsolicitedGrantInterval(uint16_t)
EventId GetDsaAckTimeoutEvent(void) const
void SetConvergenceSublayerParam(CsParameters)
std::vector< ServiceFlow * > GetServiceFlows(enum ServiceFlow::SchedulingType schedulingType) const
Cid m_inuseScheduleDsaRspCid
ServiceFlow * ProcessDsaReq(const DsaReq &dsaReq, Cid cid)
process a DSA-Req message
void SetConfirmationCode(uint16_t confirmationCode)
#define NS_ASSERT_MSG(condition, message)
void SetModulation(enum WimaxPhy::ModulationType modulationType)
void SetMaxDsaRspRetries(uint8_t maxDsaRspRetries)
set the maximum Dynamic ServiceFlow Add (DSA) retries
void ProcessDsaAck(const DsaAck &dsaAck, Cid cid)
process a DSA-ACK message
enum Direction GetDirection(void) const
void SetIsEnabled(bool isEnabled)
void SetType(enum Type type)
an identifier for simulation events.
void AddServiceFlow(ServiceFlow *serviceFlow)
#define NS_LOG_DEBUG(msg)
uint16_t GetTransactionId(void) const
void AddServiceFlow(ServiceFlow *serviceFlow)
Add a new service flow.
void AddMulticastServiceFlow(ServiceFlow sf, enum WimaxPhy::ModulationType modulation)
add a multicast service flow
This class is used by the base station to store some information related to subscriber station in the...
void SetIsMulticast(bool isMulticast)
CsParameters GetConvergenceSublayerParam(void) const
DsaRsp CreateDsaRsp(const ServiceFlow *serviceFlow, uint16_t transactionId)
void AddHeader(const Header &header)
uint16_t GetTransactionId(void) const
uint16_t GetCid(void) const
std::vector< ServiceFlow * > GetServiceFlows(ServiceFlow::SchedulingType schedulingType) const