RINASim  October 2016
Documentation of framework for OMNeT++
RA.h
Go to the documentation of this file.
1 // The MIT License (MIT)
2 //
3 // Copyright (c) 2014-2016 Brno University of Technology, PRISTINE project
4 //
5 // Permission is hereby granted, free of charge, to any person obtaining a copy
6 // of this software and associated documentation files (the "Software"), to deal
7 // in the Software without restriction, including without limitation the rights
8 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 // copies of the Software, and to permit persons to whom the Software is
10 // furnished to do so, subject to the following conditions:
11 //
12 // The above copyright notice and this permission notice shall be included in
13 // all copies or substantial portions of the Software.
14 //
15 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21 // THE SOFTWARE.
22 
30 #ifndef __RINA_RA_H_
31 #define __RINA_RA_H_
32 
33 #include <omnetpp.h>
34 #include "Utils.h"
35 #include "ExternConsts.h"
36 #include "RINASignals.h"
37 #include "DA.h"
38 #include "FABase.h"
39 #include "RMT.h"
40 #include "RMTPort.h"
41 
42 #include "RABase.h"
43 #include "RAListeners.h"
44 #include "NM1FlowTable.h"
45 #include "QueueAllocBase.h"
46 #include "CongestionDescriptor.h"
47 
48 /* Forwarding and routing stuff... */
49 #include "IntPDUFG.h"
50 
51 
52 
53 //Consts
54 extern const char* PAR_QOSDATA;
55 extern const char* ELEM_QOSCUBE;
56 extern const char* PAR_QOSREQ;
57 extern const char* ELEM_QOSREQ;
58 extern const char* ATTR_ID;
59 
60 
61 class RA : public RABase
62 {
63  public:
64  virtual void createNM1Flow(Flow* flow);
65  virtual void createNM1FlowWithoutAllocate(Flow* flow);
66  virtual void removeNM1Flow(Flow* flow);
67  virtual void removeNM1FlowBindings(NM1FlowTableItem* ftItem);
68  virtual void createNFlow(Flow *flow);
69  virtual bool bindNFlowToNM1Flow(Flow* flow);
70  virtual void blockNM1PortOutput(NM1FlowTableItem* ftItem);
71  virtual void unblockNM1PortOutput(NM1FlowTableItem* ftItem);
72  virtual NM1FlowTable* getFlowTable();
73  virtual bool hasFlow(std::string addr, std::string qosId);
74 
75  virtual bool sleepFlow(Flow * flow, simtime_t wakeUp);
76 
77  // event hook handlers
78  virtual void postNFlowAllocation(Flow* flow);
79  virtual void postNM1FlowAllocation(NM1FlowTableItem* ftItem);
80 
81  protected:
82  virtual void initialize(int stage);
83  int numInitStages() const { return 2; };
84  virtual void handleMessage(cMessage *msg);
85 
86  private:
88  cModule* thisIPC;
89  cModule* rmtModule;
90  RMT* rmt;
95 
96  // Forwarding and routing stuff...
98 
99  std::string processName;
100  std::map<simtime_t, std::list<Flow*>*> preAllocs;
101  std::map<simtime_t, std::list<Flow*>*> preDeallocs;
102  std::map<std::string, std::list<Flow*>*> pendingFlows;
104 
105  void initQoSCubes();
106  QoSReq* initQoSReqById(const char* id);
108  void initFlowAlloc();
109  void setRMTMode();
110  void bindMediumToRMT();
111  RMTPort* bindNM1FlowToRMT(cModule* ipc, FABase* fab, Flow* flow);
112  std::string normalizePortID(std::string ipcName, int flowPortID);
113 
114  simsignal_t sigRACreFloPosi;
115  simsignal_t sigRACreFloNega;
116  simsignal_t sigRASDReqFromRMT;
117  simsignal_t sigRASDReqFromRIB;
118  simsignal_t sigRAMgmtAllocd;
119  simsignal_t sigRAMgmtDeallocd;
120 
128 
131 
134  void signalizeSlowdownRequestToRIBd(cPacket* pdu);
135  void signalizeSlowdownRequestToEFCP(cObject* obj);
138 
139 };
140 
141 
142 #endif
NM1FlowTable * flowTable
Definition: RA.h:93
void initSignalsAndListeners()
Definition: RA.cc:141
void signalizeCreateFlowPositiveToRIBd(Flow *flow)
Definition: RA.cc:808
void signalizeSlowdownRequestToRIBd(cPacket *pdu)
Definition: RA.cc:818
Class representing flow object with attributes from specs.
Definition: Flow.h:45
virtual void postNFlowAllocation(Flow *flow)
Definition: RA.cc:637
virtual void handleMessage(cMessage *msg)
Definition: RA.cc:81
virtual void unblockNM1PortOutput(NM1FlowTableItem *ftItem)
Definition: RA.cc:802
LisRIBCongNotif * lisRIBCongNotif
Definition: RA.h:130
void signalizeMgmtDeallocToEnrollment(Flow *flow)
Definition: RA.cc:837
std::string normalizePortID(std::string ipcName, int flowPortID)
Definition: RA.cc:465
std::string processName
Definition: RA.h:99
virtual bool hasFlow(std::string addr, std::string qosId)
Definition: RA.cc:848
QoSReq * initQoSReqById(const char *id)
Definition: RA.cc:361
void signalizeSlowdownRequestToEFCP(cObject *obj)
Definition: RA.cc:824
virtual void removeNM1Flow(Flow *flow)
Definition: RA.cc:714
virtual void postNM1FlowAllocation(NM1FlowTableItem *ftItem)
Definition: RA.cc:663
void setRMTMode()
Definition: RA.cc:277
simsignal_t sigRAMgmtAllocd
Definition: RA.h:118
QueueAllocBase * qAllocPolicy
Definition: RA.h:94
const char * PAR_QOSREQ
Definition: RA.cc:38
virtual bool sleepFlow(Flow *flow, simtime_t wakeUp)
Definition: RA.cc:852
simsignal_t sigRACreFloNega
Definition: RA.h:115
LisRACreResPosi * lisRACreResPosi
Definition: RA.h:124
LisRMTSlowdownRequest * lisRMTSDReq
Definition: RA.h:129
FABase * fa
Definition: RA.h:92
virtual void initialize(int stage)
Definition: RA.cc:43
virtual void createNM1FlowWithoutAllocate(Flow *flow)
Definition: RA.cc:564
const char * ATTR_ID
Definition: RA.cc:40
std::map< simtime_t, std::list< Flow * > * > preAllocs
Definition: RA.h:100
void initFlowAlloc()
Definition: RA.cc:182
simsignal_t sigRASDReqFromRIB
Definition: RA.h:117
const char * PAR_QOSDATA
Definition: RA.cc:36
Definition: DA.h:43
virtual void createNFlow(Flow *flow)
Definition: RA.cc:477
simsignal_t sigRASDReqFromRMT
Definition: RA.h:116
Relaying and Multiplexing Task .
RMTModuleAllocator * rmtAllocator
Definition: RA.h:91
Definition: RA.h:61
void signalizeCreateFlowNegativeToRIBd(Flow *flow)
Definition: RA.cc:813
Definition: RMT.h:60
int numInitStages() const
Definition: RA.h:83
virtual void blockNM1PortOutput(NM1FlowTableItem *ftItem)
Definition: RA.cc:796
void signalizeMgmtAllocToEnrollment(APNIPair *apnip)
Definition: RA.cc:831
virtual NM1FlowTable * getFlowTable()
Definition: RA.cc:843
Definition: RABase.h:36
void bindMediumToRMT()
Definition: RA.cc:389
virtual bool bindNFlowToNM1Flow(Flow *flow)
Definition: RA.cc:732
LisEFCPStartSending * lisEFCPStartSending
Definition: RA.h:127
RMT * rmt
Definition: RA.h:90
std::map< simtime_t, std::list< Flow * > * > preDeallocs
Definition: RA.h:101
void initQoSCubes()
Definition: RA.cc:303
simsignal_t sigRACreFloPosi
Definition: RA.h:114
QoSReq mgmtReqs
Definition: RA.h:103
LisRADelFlow * lisRADelFlow
Definition: RA.h:125
LisRAAllocResPos * lisRAAllocResPos
Definition: RA.h:122
virtual void removeNM1FlowBindings(NM1FlowTableItem *ftItem)
Definition: RA.cc:681
Class representing QoSReq with all its properties that is primarily used by FA, RMT and RA Specificat...
Definition: QoSReq.h:44
const char * ELEM_QOSREQ
Definition: RA.cc:39
cModule * thisIPC
Definition: RA.h:88
DA * difAllocator
Definition: RA.h:87
Definition: FABase.h:33
LisEFCPStopSending * lisEFCPStopSending
Definition: RA.h:126
LisRACreAllocResPos * lisRACreAllocResPos
Definition: RA.h:123
LisRACreFlow * lisRACreFlow
Definition: RA.h:121
RMTPort * bindNM1FlowToRMT(cModule *ipc, FABase *fab, Flow *flow)
Definition: RA.cc:427
virtual void createNM1Flow(Flow *flow)
Definition: RA.cc:487
simsignal_t sigRAMgmtDeallocd
Definition: RA.h:119
std::map< std::string, std::list< Flow * > * > pendingFlows
Definition: RA.h:102
IntPDUFG * fwdtg
Definition: RA.h:97
cModule * rmtModule
Definition: RA.h:89
const char * ELEM_QOSCUBE
Definition: RA.cc:37