24 #include "ns3/simulator.h"
25 #include "ns3/packet.h"
26 #include "service-flow.h"
27 #include "service-flow-manager.h"
29 #include "wimax-net-device.h"
30 #include "bs-net-device.h"
31 #include "ss-net-device.h"
32 #include "ss-record.h"
33 #include "ns3/pointer.h"
35 #include "wimax-connection.h"
36 #include "ss-manager.h"
37 #include "connection-manager.h"
38 #include "bs-uplink-scheduler.h"
39 #include "ss-scheduler.h"
40 #include "ns3/buffer.h"
41 #include "service-flow-record.h"
46 NS_OBJECT_ENSURE_REGISTERED (ServiceFlowManager);
48 TypeId ServiceFlowManager::GetTypeId (
void)
50 static TypeId tid = TypeId (
"ns3::ServiceFlowManager")
51 .SetParent<Object> ();
55 ServiceFlowManager::ServiceFlowManager ()
57 m_serviceFlows =
new std::vector<ServiceFlow*>;
60 ServiceFlowManager::~ServiceFlowManager (
void)
67 for (std::vector<ServiceFlow*>::iterator iter = m_serviceFlows->begin (); iter != m_serviceFlows->end (); ++iter)
71 m_serviceFlows->clear ();
72 delete m_serviceFlows;
76 ServiceFlowManager::AddServiceFlow (
ServiceFlow *serviceFlow)
78 m_serviceFlows->push_back (serviceFlow);
86 ServiceFlow::Direction dir)
const
88 for (std::vector<ServiceFlow*>::iterator iter = m_serviceFlows->begin (); iter != m_serviceFlows->end (); ++iter)
90 if ((*iter)->GetDirection () == dir)
92 if ((*iter)->CheckClassifierMatch (srcAddress, dstAddress, srcPort, dstPort, proto))
102 ServiceFlowManager::GetServiceFlow (uint32_t sfid)
const
104 for (std::vector<ServiceFlow*>::iterator iter = m_serviceFlows->begin (); iter != m_serviceFlows->end (); ++iter)
106 if ((*iter)->GetSfid () == sfid)
112 NS_LOG_DEBUG (
"GetServiceFlow: service flow not found!");
117 ServiceFlowManager::GetServiceFlow (Cid cid)
const
119 for (std::vector<ServiceFlow*>::iterator iter = m_serviceFlows->begin (); iter != m_serviceFlows->end (); ++iter)
121 if ((*iter)->GetCid () == cid.GetIdentifier ())
127 NS_LOG_DEBUG (
"GetServiceFlow: service flow not found!");
131 std::vector<ServiceFlow*>
132 ServiceFlowManager::GetServiceFlows (
enum ServiceFlow::SchedulingType schedulingType)
const
134 std::vector<ServiceFlow*> tmpServiceFlows;
135 for (std::vector<ServiceFlow*>::iterator iter = m_serviceFlows->begin (); iter != m_serviceFlows->end (); ++iter)
137 if (((*iter)->GetSchedulingType () == schedulingType) || (schedulingType == ServiceFlow::SF_TYPE_ALL))
139 tmpServiceFlows.push_back ((*iter));
142 return tmpServiceFlows;
160 for (std::vector<ServiceFlow*>::const_iterator iter = serviceFlowVector.begin (); iter != serviceFlowVector.end (); ++iter)
162 if (!(*iter)->GetIsEnabled ())
173 std::vector<ServiceFlow*>::iterator iter;
174 for (iter = m_serviceFlows->begin (); iter != m_serviceFlows->end (); ++iter)
176 if (!(*iter)->GetIsEnabled ())
187 return m_serviceFlows->size ();
#define NS_LOG_COMPONENT_DEFINE(name)
ServiceFlow * GetNextServiceFlowToAllocate()
bool AreServiceFlowsAllocated()
uint32_t GetNrServiceFlows(void) const
ServiceFlow * DoClassify(Ipv4Address SrcAddress, Ipv4Address DstAddress, uint16_t SrcPort, uint16_t DstPort, uint8_t Proto, ServiceFlow::Direction dir) const
Ipv4 addresses are stored in host order in this class.
#define NS_LOG_DEBUG(msg)