RINASim  October 2016
Documentation of framework for OMNeT++
Edge_Routing.cc
Go to the documentation of this file.
1 #include "Edge_Routing.h"
2 
3 
4 
5 namespace NSPSimpleDC {
6 
7  Register_Class(Edge_Routing);
8 
9  void Edge_Routing::activeNeigh(const DCAddr &dst) {
10  if(dst.type != 2 || dst.a != Im.b) {
11  cerr << "I'm " << Im
12  << " -- "
13  << "Invalid neighbour "<< dst
14  << endl;
15  return;
16  }
17 
18  linkId lid = linkId(Im, dst);
19  linkInfo & li = myLinks [lid];
20 
21  if(!li.status) {
22  li.status = true;
23  if(start == nullptr) {
24  li.timestamp = simTime();
25  } else {
26  li.timestamp = 0;
27  }
28 
29  linksKo.erase(lid);
31  }
32  }
33 
35  if(dst.type != 2 || dst.a != Im.b) {
36  cerr << "Invalid neighbour" << endl;
37  return;
38  }
39 
40  linkId lid = linkId(Im, dst);
41  linkInfo & li = myLinks [linkId(Im, dst)];
42 
43  if(li.status) {
44  li.status = false;
45  li.timestamp = simTime();
46  linksKo[lid] = li;
48  }
49  }
50 
52  for(int i = 0; i < spineXfabric; i++) {
53  linkId l = linkId(Im, DCAddr(2, Im.b, i));
54  myLinks [l] = linkInfo(l, false, 0);
55  linksKo[l] = linkInfo(l, false, 0);
56  }
57  }
58 
59  set<DCAddr> Edge_Routing::getNotOptimalDst(map<DCAddr, tableNode> * table) {
60  set<DCAddr> ret;
61 
62  for(auto & e : *table) {
63  const DCAddr & dst = e.first;
64  tableNode & tn = e.second;
65  if(dst == Im) { continue; }
66  switch(dst.type) {
67  case 0: {
68  if(tn.d > 3 || (int)tn.L.size() != edgeSets) {
69  ret.insert(dst);
70  }
71  }break;
72  case 1:{
73  if((dst.b == Im.b && tn.d > 2)
74  || (dst.b != Im.b && tn.d > 4)
75  || (int)tn.L.size() != spineXfabric) {
76  ret.insert(dst);
77  }
78  }break;
79  case 2: {
80  if(dst.a == Im.b) {
81  if(tn.d > 1 || (int)tn.L.size() != 1) {
82  ret.insert(dst);
83  }
84  } else if ((dst.a != Im.a && tn.d > 5)
85  || (int)tn.L.size() != edgeSets) {
86  ret.insert(dst);
87  }
88  }break;
89  case 3: {
90  if((dst.b == Im.b && tn.d > 2)
91  || (dst.a != Im.a && tn.d > 6)
92  || (int)tn.L.size() != edgeSets) {
93  ret.insert(dst);
94  }
95  }break;
96  }
97  }
98 
99  return ret;
100  }
101 
103  }
104 }
set< DCAddr > getNotOptimalDst(map< DCAddr, tableNode > *table)
Definition: Edge_Routing.cc:59
Register_Class(SimpleDCGenerator)
map< linkId, linkInfo > linksKo
Definition: IntDCRouting.h:112
set< const linkId * > L
Definition: IntDCRouting.h:73
map< linkId, linkInfo > myLinks
Definition: IntDCRouting.h:112
void insert(set< const linkId * > Ls)
Definition: IntDCRouting.cc:76
void inactiveNeigh(const DCAddr &dst)
Definition: Edge_Routing.cc:34
void activeNeigh(const DCAddr &dst)
Definition: Edge_Routing.cc:9