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);
Doxygen introspection did not find any typical Config paths.
smart pointer class similar to boost::intrusive_ptr
Doxygen introspection did not find any typical Config paths.
ServiceFlow * GetServiceFlow(uint32_t sfid) const
void SetConnection(Ptr< WimaxConnection > connection)
Doxygen introspection did not find any typical Config paths.
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
BsServiceFlowManager(Ptr< BaseStationNetDevice > device)
uint8_t GetMaxDsaRspRetries(void) const
uint32_t GetSfid(void) const
~BsServiceFlowManager(void)
static void Cancel(const EventId &id)
Set the cancel bit on this event: the event's associated function will not be invoked when it expires...
bool IsRunning(void) const
This method is syntactic sugar for the ns3::Simulator::isExpired method.
static EventId Schedule(Time const &time, MEM mem_ptr, OBJ obj)
Schedule an event to expire at the relative time "time" is reached.
void DoDispose(void)
This method is called by Object::Dispose or by the object's destructor, whichever comes first...
Ptr< WimaxNetDevice > m_device
void ScheduleDsaRsp(ServiceFlow *serviceFlow, Cid cid)
void SetTransactionId(uint16_t transactionId)
NS_LOG_COMPONENT_DEFINE("BsServiceFlowManager")
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 DoDispose(void)
This method is called by Object::Dispose or by the object's destructor, whichever comes first...
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
This class implements service flows as described by the IEEE-802.16 standard.
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
Doxygen introspection did not find any typical Config paths.
DsaRsp CreateDsaRsp(const ServiceFlow *serviceFlow, uint16_t transactionId)
void AddHeader(const Header &header)
Add header to this packet.
uint16_t GetTransactionId(void) const
uint16_t GetCid(void) const
std::vector< ServiceFlow * > GetServiceFlows(ServiceFlow::SchedulingType schedulingType) const