39 neighbours[dst].insert(port);
40 if(neighbours[dst].size() == 1){
41 pAddr parsedA = parseAddr(dst);
43 rt->addFlow(addr,
"", parsedA.
domain, 1);
44 rt->addFlow(addr, parsedA.
domain, parsedA.
addr,1);
46 rt->addFlow(addr, parsedA.
domain, parsedA.
addr,1);
54 neighbours[dst].erase(port);
55 if(neighbours[dst].size() <= 0){
56 pAddr parsedA = parseAddr(dst);
59 rt->removeFlow(addr,
"", parsedA.
domain);
60 rt->removeFlow(addr, parsedA.
domain, parsedA.
addr);
62 rt->removeFlow(addr, parsedA.
domain, parsedA.
addr);
65 neighbours.erase(dst);
75 for(
DMRnms::s2AIt eIt = it->entries.begin(); eIt != it->entries.end(); eIt++){
77 std::string dst = eIt->first;
78 std::string nextHop = eIt->second.getIpcAddress().getName();
80 EV <<
"Entry ::: \""<< it->domain <<
"\"/\""<< dst <<
"\" -> " << nextHop <<
" ("<< eIt->second<<
")" <<endl;
83 NTableIt n = neighbours.find(nextHop);
84 if(nextHop !=
"" && n != neighbours.end()){
85 p = *(n->second.begin());
89 fwd->remove(it->domain, dst);
91 fwd->insert(it->domain, dst, p);
105 string myAddr = getModuleByPath(
"^.^")->par(
"ipcAddress").stringValue();
107 vector<string> parsStr =
split(myAddr,
'.');
108 if(parsStr.size() != 2) {
109 error(
"BiDomainGenerator own address must be on the form A.B");
111 myPrefix = parsStr[0];
112 mySufix = parsStr[1];
114 string alg0 = par(
"alg0").stdstringValue();
115 string alg1 = par(
"alg1").stdstringValue();
117 fwd->addDomain(myPrefix);
137 vector<string> sep =
split(addr,
'.');
140 return pAddr(myPrefix, sep[1]);
142 return pAddr(myPrefix,
"");
145 return pAddr(
"", sep[0]);
const char * MOD_POL_ROUTING
const char * MOD_DIFALLOC
virtual void removedFlow(const Address &addr, const QoSCube &qos, RMTPort *port)
const APN & getIpcAddress() const
Getter of IPC Process address which should be unambiguous within DIF.
bool isPrefix(std::string prefix, std::string s)
std::vector< std::string > & split(const std::string &s, char delim, std::vector< std::string > &elems)
Register_Class(BiDomainGenerator)
virtual void insertedFlow(const Address &addr, const QoSCube &qos, RMTPort *port)
pAddr parseAddr(const std::string &addr)
virtual void onPolicyInit()
NTable::iterator NTableIt
const char * MOD_RELAYANDMUX
dmUpdateM::iterator dmUpdateMIt
virtual void routingUpdated()
Class representing QoSCube with all its properties that is primarily used by FA, RMT and RA Specifica...
std::vector< dmNxt > dmUpdateM
const std::string & getName() const
Gets APN string name representation.
const char * MOD_POL_RMT_PDUFWD
Address class holds IPC Process identification.