RINASim  October 2016
Documentation of framework for OMNeT++
TOR_Routing.cc
Go to the documentation of this file.
1 #include "TOR_Routing.h"
2 
3 
4 
5 namespace NSPSimpleDC {
6 
7  Register_Class(TOR_Routing);
8 
9  void TOR_Routing::activeNeigh(const DCAddr &dst) {
10  if(dst.type != 1 || dst.a != Im.a) {
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 != 1 || dst.a != Im.a) {
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 < fabricXpod; i++) {
53  linkId l = linkId(Im, DCAddr(1, Im.a, i));
54  myLinks [l] = linkInfo(l, false, 0);
55  linksKo[l] = linkInfo(l, false, 0);
56  }
57  }
58 
59  set<DCAddr> TOR_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(dst.a == Im.a) {
69  if(tn.d > 2 || (int)tn.L.size() != fabricXpod) {
70  ret.insert(dst);
71  }
72  } else {
73  if(tn.d > 4 || (int)tn.L.size() != fabricXpod) {
74  ret.insert(dst);
75  }
76  }
77  }break;
78  case 1: {
79  if(dst.a == Im.a) {
80  if(tn.d > 1 || (int)tn.L.size() != 1) {
81  ret.insert(dst);
82  } else {
83  const linkId & li = **(tn.L.begin());
84  if(li.dst != dst) {
85  ret.insert(dst);
86  }
87  }
88  } else {
89  if(tn.d > 3 || (int)tn.L.size() != 1) {
90  ret.insert(dst);
91  } else {
92  const linkId & li = **(tn.L.begin());
93  if(li.dst.b != dst.b) {
94  ret.insert(dst);
95  }
96  }
97  }
98  }break;
99  case 2: {
100  if(tn.d > 2 || (int)tn.L.size() != 1) {
101  ret.insert(dst);
102  } else {
103  const linkId & li = **(tn.L.begin());
104  if(li.dst.b != dst.a) {
105  ret.insert(dst);
106  }
107  }
108  }break;
109  case 3: {
110  if(tn.d > 3 || (int)tn.L.size() != 1) {
111  ret.insert(dst);
112  }
113  }break;
114 
115  }
116  }
117 
118  return ret;
119  }
120 
122  }
123 }
Register_Class(SimpleDCGenerator)
void activeNeigh(const DCAddr &dst)
Definition: TOR_Routing.cc:9
map< linkId, linkInfo > linksKo
Definition: IntDCRouting.h:112
set< const linkId * > L
Definition: IntDCRouting.h:73
set< DCAddr > getNotOptimalDst(map< DCAddr, tableNode > *table)
Definition: TOR_Routing.cc:59
void inactiveNeigh(const DCAddr &dst)
Definition: TOR_Routing.cc:34
map< linkId, linkInfo > myLinks
Definition: IntDCRouting.h:112
void insert(set< const linkId * > Ls)
Definition: IntDCRouting.cc:76