RINASim  October 2016
Documentation of framework for OMNeT++
Routing_Alg.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <string>
4 #include <set>
5 
6 #include <omnetpp.h>
7 
9 #include "common/nhLMetric.h"
10 
11 namespace common_Routing {
12 
13 using namespace std;
14 using namespace common_GraphCL;
15 
16 template<class T>
17 class Routing_Alg : public Routing_Alg_I{
18 
19 protected:
22  string descriptor;
23  string myAddr;
24  set<string> synonyms;
26  simtime_t updateW;
28 
29  map<string, T> nei;
30  map<string, Address> neigTable;
31  map<Address, string> invNeigTable;
32 
33 public:
35  virtual ~Routing_Alg(){};
36 
37  Routing_Alg(Routing_Module * p, const Address &_nAddr, const string &_addr, T inf) :
38  parent(p), myNAddr(_nAddr), myAddr(_addr), infinite(inf), updateW(0.01), scheduledUpdate(false){};
39 
40  virtual void addSynonym(const string syn) { synonyms.insert(syn); }
41  virtual void removeSynonym(const string syn) { synonyms.erase(syn); }
42 
43  virtual void addFlow(const Address &_nAddr, const string &_addr, const T &_metric){
44  nei[_addr] = _metric;
45  neigTable[_addr] = _nAddr;
46  invNeigTable[_nAddr] = _addr;
47  }
48 
49  virtual void removeFlow(const Address &_nAddr, const string &_addr){
50  nei.erase(_addr);
51  neigTable.erase(_addr);
52  invNeigTable.erase(_nAddr);
53  }
54 
55  virtual bool processUpdate(Routing_Update * update) = 0;
56  virtual map<string, nhLMetric<T> > getChanges() = 0;
57  virtual map<string, nhLMetric<T> > getAll() = 0;
58 
59  void setInfMetric(const T & inf) { infinite = inf; }
60 
61  void setUpdateDelay(const simtime_t & t) { updateW = t; }
63  if(!scheduledUpdate){
64  scheduledUpdate = true;
65  parent->chScheduleAt(this, updateW);
66  }
67  }
68  virtual void sendUpdate() { scheduledUpdate = false; }
69 
70  virtual void print() = 0;
71 
72  void setDescriptor(const string & des) { descriptor = des; }
73 };
74 
75 } /* namespace common_Routing */
Routing_Module * parent
Definition: Routing_Alg.h:20
virtual void addSynonym(const string syn)
Definition: Routing_Alg.h:40
void setUpdateDelay(const simtime_t &t)
Definition: Routing_Alg.h:61
map< string, Address > neigTable
Definition: Routing_Alg.h:30
virtual void removeSynonym(const string syn)
Definition: Routing_Alg.h:41
Routing_Alg(Routing_Module *p, const Address &_nAddr, const string &_addr, T inf)
Definition: Routing_Alg.h:37
void setDescriptor(const string &des)
Definition: Routing_Alg.h:72
map< string, T > nei
Definition: Routing_Alg.h:29
map< Address, string > invNeigTable
Definition: Routing_Alg.h:31
virtual void chScheduleAt(Routing_Alg_I *update, const simtime_t &t)=0
void setInfMetric(const T &inf)
Definition: Routing_Alg.h:59
virtual void removeFlow(const Address &_nAddr, const string &_addr)
Definition: Routing_Alg.h:49
Address class holds IPC Process identification.
Definition: Address.h:42
virtual void sendUpdate()
Definition: Routing_Alg.h:68
virtual void addFlow(const Address &_nAddr, const string &_addr, const T &_metric)
Definition: Routing_Alg.h:43