RINASim  October 2016
Documentation of framework for OMNeT++
RIBd.cc
Go to the documentation of this file.
1 //
2 // The MIT License (MIT)
3 //
4 // Copyright (c) 2014-2016 Brno University of Technology, PRISTINE project
5 //
6 // Permission is hereby granted, free of charge, to any person obtaining a copy
7 // of this software and associated documentation files (the "Software"), to deal
8 // in the Software without restriction, including without limitation the rights
9 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 // copies of the Software, and to permit persons to whom the Software is
11 // furnished to do so, subject to the following conditions:
12 //
13 // The above copyright notice and this permission notice shall be included in
14 // all copies or substantial portions of the Software.
15 //
16 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 // THE SOFTWARE.
31 #include "RIBd.h"
32 
33 const char* MSG_CONGEST = "Congestion";
34 //const char* MSG_ROUTINGUPDATE = "RoutingUpdate";
35 //const char* MSG_ENROLLMENT = "Enrollment";
36 
37 const char* PAR_USEFANOTIF = "useFANotifier";
38 const char* PAR_USEENROLLNOTIF = "useEnrollmentNotifier";
39 const char* PAR_USEROUTINGNOTIF = "useRoutingNotifier";
40 
42 
44 
45  useFANotifier = false;
46  useEnrollmentNotifier = false;
47  useRoutingNotifier = false;
48 
49  //Init signals and listeners
51 
52  //Init MyAddress
53  initMyAddress();
54 
55  //Pointers
56  initPointers();
57 }
58 
60  FANotif = getRINAModule<FANotifierBase*>(this, 1, {"faNotifier"}, false);
61  if (FANotif) {
62  useFANotifier = true;
63  this->par(PAR_USEFANOTIF) = true;
64  }
65  EnrollNotif = getRINAModule<EnrollmentNotifierBase*>(this, 1, {"enrollmentNotifier"}, false);
66  if (EnrollNotif) {
67  useEnrollmentNotifier = true;
68  this->par(PAR_USEENROLLNOTIF) = true;
69  }
70  RoutingNotif = getRINAModule<RoutingNotifierBase*>(this, 1, {"routingNotifier"}, false);
71  if (RoutingNotif) {
72  useRoutingNotifier = true;
73  this->par(PAR_USEROUTINGNOTIF) = true;
74  }
75 }
76 
77 void RIBd::handleMessage(cMessage *msg) {
78 
79 }
80 
81 /*
82 void RIBd::receiveAllocationRequestFromFai(Flow* flow) {
83  Enter_Method("receiveAllocationRequestFromFai()");
84  if (flow->isManagementFlowLocalToIPCP())
85  {
86  receiveCreateFlowPositiveFromRa(flow);
87  }
88  else {
89  //Execute flow allocate
90  signalizeCreateFlow(flow);
91  }
92 }
93 
94 void RIBd::receiveCreateFlowPositiveFromRa(Flow* flow) {
95  signalizeAllocateResponsePositive(flow);
96 }
97 
98 void RIBd::receiveCreateFlowNegativeFromRa(Flow* flow) {
99  signalizeAllocateResponseNegative(flow);
100 }
101 
102 void RIBd::sendCreateRequestFlow(Flow* flow) {
103  Enter_Method("sendCreateRequestFlow()");
104 
105  //Prepare M_CREATE Flow
106  CDAP_M_Create* mcref = new CDAP_M_Create(MSG_FLO);
107 
108  //Prepare object
109  std::ostringstream os;
110  os << flow->getFlowName();
111  object_t flowobj;
112  flowobj.objectClass = flow->getClassName();
113  flowobj.objectName = os.str();
114  flowobj.objectVal = flow;
115  //TODO: Vesely - Assign appropriate values
116  flowobj.objectInstance = VAL_DEFINSTANCE;
117  mcref->setObjectItem(flowobj);
118 
119  //Append src/dst address for RMT "routing"
120  mcref->setSrcAddr(flow->getSrcNeighbor());
121  mcref->setDstAddr(flow->getDstNeighbor());
122 
123  //Generate InvokeId
124  if (!flow->getAllocInvokeId())
125  flow->setAllocInvokeId(getNewInvokeId());
126  mcref->setInvokeID(flow->getAllocInvokeId());
127 
128  //Send it
129  signalizeSendData(mcref);
130 }
131 
132 void RIBd::sendDeleteRequestFlow(Flow* flow) {
133  Enter_Method("sendDeleteRequestFlow()");
134 
135  //Prepare M_CREATE Flow
136  CDAP_M_Delete* mdereqf = new CDAP_M_Delete(MSG_FLO);
137 
138  //Prepare object
139  std::ostringstream os;
140  os << flow->getFlowName();
141  object_t flowobj;
142  flowobj.objectClass = flow->getClassName();
143  flowobj.objectName = os.str();
144  flowobj.objectVal = flow;
145  //TODO: Vesely - Assign appropriate values
146  flowobj.objectInstance = VAL_DEFINSTANCE;
147  mdereqf->setObjectItem(flowobj);
148 
149  //Append src/dst address for RMT "routing"
150  mdereqf->setSrcAddr(flow->getSrcNeighbor());
151  mdereqf->setDstAddr(flow->getDstAddr());
152 
153  //Generate InvokeId
154  if (!flow->getDeallocInvokeId())
155  flow->setDeallocInvokeId(getNewInvokeId());
156  mdereqf->setInvokeID(flow->getDeallocInvokeId());
157 
158  //Send it
159  signalizeSendData(mdereqf);
160 }
161 
162 void RIBd::sendCreateResponseNegative(Flow* flow) {
163  Enter_Method("sendCreateResponseFlowNegative()");
164 
165  //Prepare M_CREATE_R Flow-
166  CDAP_M_Create_R* mcref = new CDAP_M_Create_R(MSG_FLONEGA);
167 
168  //Prepare object
169  std::ostringstream os;
170  os << flow->getFlowName();
171  object_t flowobj;
172  flowobj.objectClass = flow->getClassName();
173  flowobj.objectName = os.str();
174  flowobj.objectVal = flow;
175  //TODO: Vesely - Assign appropriate values
176  flowobj.objectInstance = VAL_DEFINSTANCE;
177  mcref->setObjectItem(flowobj);
178 
179  //Prepare result object
180  result_t resultobj;
181  resultobj.resultValue = R_FAIL;
182  mcref->setResult(resultobj);
183 
184  //Generate InvokeId
185  mcref->setInvokeID(flow->getAllocInvokeId());
186 
187  //Append src/dst address for RMT "routing"
188  mcref->setSrcAddr(flow->getSrcNeighbor());
189  mcref->setDstAddr(flow->getDstAddr());
190 
191  //Send it
192  signalizeSendData(mcref);
193 }
194 
195 void RIBd::sendCreateResponsePostive(Flow* flow) {
196  Enter_Method("sendCreateResponseFlowPositive()");
197 
198  //Prepare M_CREATE_R Flow+
199  CDAP_M_Create_R* mcref = new CDAP_M_Create_R(MSG_FLOPOSI);
200 
201  //Prepare object
202  std::ostringstream os;
203  os << flow->getFlowName();
204  object_t flowobj;
205  flowobj.objectClass = flow->getClassName();
206  flowobj.objectName = os.str();
207  flowobj.objectVal = flow;
208  //TODO: Vesely - Assign appropriate values
209  flowobj.objectInstance = VAL_DEFINSTANCE;
210  mcref->setObjectItem(flowobj);
211 
212  //Prepare result object
213  result_t resultobj;
214  resultobj.resultValue = R_SUCCESS;
215  mcref->setResult(resultobj);
216 
217  //Generate InvokeId
218  mcref->setInvokeID(flow->getAllocInvokeId());
219 
220  //Append src/dst address for RMT "routing"
221  mcref->setSrcAddr(flow->getSrcNeighbor());
222  mcref->setDstAddr(flow->getDstAddr());
223 
224  //Send it
225  signalizeSendData(mcref);
226 }
227 
228 void RIBd::sendDeleteResponseFlow(Flow* flow) {
229  Enter_Method("sendDeleteResponseFlow()");
230 
231  //Prepare M_CREATE_R Flow+
232  CDAP_M_Delete_R* mderesf = new CDAP_M_Delete_R(MSG_FLOPOSI);
233 
234  //Prepare object
235  std::ostringstream os;
236  os << flow->getFlowName();
237  object_t flowobj;
238  flowobj.objectClass = flow->getClassName();
239  flowobj.objectName = os.str();
240  flowobj.objectVal = flow;
241  //TODO: Vesely - Assign appropriate values
242  flowobj.objectInstance = VAL_DEFINSTANCE;
243  mderesf->setObjectItem(flowobj);
244 
245  //Prepare result object
246  result_t resultobj;
247  resultobj.resultValue = R_SUCCESS;
248  mderesf->setResult(resultobj);
249 
250  //Generate InvokeId
251  mderesf->setInvokeID(flow->getDeallocInvokeId());
252 
253  //Append src/dst address for RMT "routing"
254  mderesf->setSrcAddr(flow->getSrcNeighbor());
255  mderesf->setDstAddr(flow->getDstAddr());
256 
257  //Send it
258  signalizeSendData(mderesf);
259 }
260 
261 void RIBd::signalizeAllocateResponsePositive(Flow* flow) {
262  EV << "Emits AllocateResponsePositive signal for flow" << endl;
263  emit(sigRIBDAllocResPosi, flow);
264 }
265 
266 void RIBd::signalizeCreateRequestFlow(Flow* flow) {
267  EV << "Emits CreateRequestFlow signal for flow" << endl;
268  emit(sigRIBDCreReqFlo, flow);
269 }
270 
271 void RIBd::signalizeCreateResponseFlowPositive(Flow* flow) {
272  EV << "Emits CreateResponsetFlowPositive signal for flow" << endl;
273  emit(sigRIBDCreResFloPosi, flow);
274 }
275 
276 void RIBd::signalizeCreateResponseFlowNegative(Flow* flow) {
277  EV << "Emits CreateResponsetFlowNegative signal for flow" << endl;
278  emit(sigRIBDCreResFloNega, flow);
279 }
280 
281 void RIBd::signalizeCreateFlow(Flow* flow) {
282  EV << "Emits CreateFlow signal for flow" << endl;
283  emit(sigRIBDCreFlow, flow);
284 }
285 
286 void RIBd::signalizeDeleteRequestFlow(Flow* flow) {
287  EV << "Emits DeleteRequestFlow signal for flow" << endl;
288  emit(sigRIBDDelReqFlo, flow);
289 }
290 
291 void RIBd::signalizeAllocateResponseNegative(Flow* flow) {
292  EV << "Emits AllocateResponseNegative signal for flow" << endl;
293  emit(sigRIBDAllocResNega, flow);
294 }
295 
296 void RIBd::signalizeDeleteResponseFlow(Flow* flow) {
297  EV << "Emits DeleteResponseFlow signal for flow" << endl;
298  emit(sigRIBDDelResFlo, flow);
299 }
300 */
302  Enter_Method("receiveData()");
303  //std::string xxx = FANotif->getFullPath();
304 
305  //EnrollmentNotifier processing
308  }
309  //FANotifier processing
310  else if (useFANotifier && FANotif->isMessageProcessable(msg)) {
311  FANotif->receiveMessage(msg);
312  }
313  //RoutingNotifier processing
316  }
317 
318  //TODO: Vesely - Hardcoded message processing should be removed!
319  //M_WRITE_Request
320 // else if (dynamic_cast<CDAP_M_Write*>(msg)) {
321 // processMWrite(msg);
322 // }
323  //M_START_Request
324  else if (dynamic_cast<CDAP_M_Start*>(msg)) {
325  processMStart(msg);
326  }
327  /*
328  //M_START_Response
329  else if (dynamic_cast<CDAP_M_Start_R*>(msg)) {
330  processMStartR(msg);
331  }
332  //M_Stop_Request
333  else if (dynamic_cast<CDAP_M_Stop*>(msg)) {
334  processMStop(msg);
335  }
336  //M_Stop_Response
337  else if (dynamic_cast<CDAP_M_Stop_R*>(msg)) {
338  processMStopR(msg);
339  }
340  */
341  //delete msg;
342 }
343 
345  cModule* catcher1 = this->getParentModule();
346  cModule* catcher2 = this->getModuleByPath("^.^");
347  //cModule* catcher3 = this->getModuleByPath("^.^.^");
348 
349  //Signals that this module is emitting
350  sigRIBDSendData = registerSignal(SIG_RIBD_DataSend);
351  /*
352  sigRIBDCreReqFlo = registerSignal(SIG_RIBD_CreateRequestFlow);
353  sigRIBDDelReqFlo = registerSignal(SIG_RIBD_DeleteRequestFlow);
354  sigRIBDDelResFlo = registerSignal(SIG_RIBD_DeleteResponseFlow);
355  sigRIBDAllocResPosi = registerSignal(SIG_AERIBD_AllocateResponsePositive);
356  sigRIBDAllocResNega = registerSignal(SIG_AERIBD_AllocateResponseNegative);
357  sigRIBDCreFlow = registerSignal(SIG_RIBD_CreateFlow);
358  sigRIBDCreResFloPosi = registerSignal(SIG_RIBD_CreateFlowResponsePositive);
359  sigRIBDCreResFloNega = registerSignal(SIG_RIBD_CreateFlowResponseNegative);
360  */
361  // sigRIBDFwdUpdateRecv = registerSignal(SIG_RIBD_ForwardingUpdateReceived);
362  //sigRIBDRoutingUpdateRecv = registerSignal(SIG_RIBD_RoutingUpdateReceived);
364 
365  /*
366  sigRIBDStartEnrollReq = registerSignal(SIG_RIBD_StartEnrollmentRequest);
367  sigRIBDStartEnrollRes = registerSignal(SIG_RIBD_StartEnrollmentResponse);
368  sigRIBDStopEnrollReq = registerSignal(SIG_RIBD_StopEnrollmentRequest);
369  sigRIBDStopEnrollRes = registerSignal(SIG_RIBD_StopEnrollmentResponse);
370  sigRIBDStartOperationReq = registerSignal(SIG_RIBD_StartOperationRequest);
371  sigRIBDStartOperationRes = registerSignal(SIG_RIBD_StartOperationResponse);
372  sigRIBDConResPosi = registerSignal(SIG_RIBD_ConnectionResponsePositive);
373  sigRIBDConResNega = registerSignal(SIG_RIBD_ConnectionResponseNegative);
374  sigRIBDConReq = registerSignal(SIG_RIBD_ConnectionRequest);
375  sigRIBDCACESend = registerSignal(SIG_RIBD_CACESend);
376  */
377 
378  //Signals that this module is processing
379  /*
380  lisRIBDCreReqByForward = new LisRIBDCreReq(this);
381  catcher2->subscribe(SIG_FA_CreateFlowRequestForward, lisRIBDCreReqByForward);
382  lisRIBDCreReq = new LisRIBDCreReq(this);
383  catcher2->subscribe(SIG_FAI_CreateFlowRequest, lisRIBDCreReq);
384 
385  lisRIBDDelReq = new LisRIBDDelReq(this);
386  catcher2->subscribe(SIG_FAI_DeleteFlowRequest, lisRIBDDelReq);
387  lisRIBDDelRes = new LisRIBDDelRes(this);
388  catcher2->subscribe(SIG_FAI_DeleteFlowResponse, lisRIBDDelRes);
389 
390  lisRIBDCreResNegaFromFa = new LisRIBDCreResNega(this);
391  catcher2->subscribe(SIG_FA_CreateFlowResponseNegative, lisRIBDCreResNegaFromFa);
392  lisRIBDCreResNega = new LisRIBDCreResNega(this);
393  catcher2->subscribe(SIG_FAI_CreateFlowResponseNegative, lisRIBDCreResNega);
394 
395  lisRIBDCreResPosi = new LisRIBDCreResPosi(this);
396  catcher2->subscribe(SIG_FAI_CreateFlowResponsePositive, lisRIBDCreResPosi);
397  lisRIBDCreResPosiForward = new LisRIBDCreResPosi(this);
398  catcher2->subscribe(SIG_FA_CreateFlowResponseForward, lisRIBDCreResPosiForward);
399 
400  lisRIBDAllReqFromFai = new LisRIBDAllReqFromFai(this);
401  catcher3->subscribe(SIG_FAI_AllocateRequest, lisRIBDAllReqFromFai);
402 
403  lisRIBDCreFloPosi = new LisRIBDCreFloPosi(this);
404  catcher2->subscribe(SIG_RA_CreateFlowPositive, lisRIBDCreFloPosi);
405  lisRIBDCreFloNega = new LisRIBDCreFloNega(this);
406  catcher2->subscribe(SIG_RA_CreateFlowNegative, lisRIBDCreFloNega);
407  */
408  lisRIBDRcvData = new LisRIBDRcvData(this);
409  catcher1->subscribe(SIG_CDAP_DateReceive, lisRIBDRcvData);
410 
411 // lisRIBDRoutingUpdate = new LisRIBDRoutingUpdate(this);
412 // catcher2->subscribe(SIG_RIBD_RoutingUpdate, lisRIBDRoutingUpdate);
413 
415  catcher2->subscribe(SIG_RA_InvokeSlowdown, lisRIBDCongNotif);
416 
417  /*
418  lisRIBDRcvCACE = new LisRIBDRcvCACE(this);
419  catcher1->subscribe(SIG_CACE_DataReceive, lisRIBDRcvCACE);
420 
421  lisRIBDRcvEnrollCACE = new LisRIBDRcvEnrollCACE(this);
422  catcher2->subscribe(SIG_ENROLLMENT_CACEDataSend, lisRIBDRcvEnrollCACE);
423 
424  lisRIBDStaEnrolReq = new LisRIBDStaEnrolReq(this);
425  catcher2->subscribe(SIG_ENROLLMENT_StartEnrollmentRequest, lisRIBDStaEnrolReq);
426 
427  lisRIBDStaEnrolRes = new LisRIBDStaEnrolRes(this);
428  catcher2->subscribe(SIG_ENROLLMENT_StartEnrollmentResponse, lisRIBDStaEnrolRes);
429 
430  lisRIBDStoEnrolReq = new LisRIBDStoEnrolReq(this);
431  catcher2->subscribe(SIG_ENROLLMENT_StopEnrollmentRequest, lisRIBDStoEnrolReq);
432 
433  lisRIBDStoEnrolRes = new LisRIBDStoEnrolRes(this);
434  catcher2->subscribe(SIG_ENROLLMENT_StopEnrollmentResponse, lisRIBDStoEnrolRes);
435 
436  lisRIBDStaOperReq = new LisRIBDStaOperReq(this);
437  catcher2->subscribe(SIG_ENROLLMENT_StartOperationRequest, lisRIBDStaOperReq);
438 
439  lisRIBDStaOperRes = new LisRIBDStaOperRes(this);
440  catcher2->subscribe(SIG_ENROLLMENT_StartOperationResponse, lisRIBDStaOperRes);
441  */
442 }
443 
445  Enter_Method("signalizeSendData()");
446 
447  //Check dstAddress
449  EV << "Destination address cannot be UNSPECIFIED!" << endl;
450  return;
451  }
452 
453  msg->setBitLength(msg->getBitLength() + msg->getHeaderBitLength());
454  //Pass message to CDAP
455  EV << "Emits SendData signal for message " << msg->getName() << endl;
456  emit(sigRIBDSendData, msg);
457 }
458 
460  Enter_Method("sendCongestionNotification()");
461 
462  //Prepare M_START ConDescr
463  CDAP_M_Start* mstarcon = new CDAP_M_Start(MSG_CONGEST);
465  //Prepare object
466  std::ostringstream os;
467  os << conDesc->getCongesDescrName();
468  object_t condesobj;
469  condesobj.objectClass = conDesc->getClassName();
470  condesobj.objectName = os.str();
471  condesobj.objectVal = conDesc;
472  //TODO: Vesely - Assign appropriate values
473  condesobj.objectInstance = VAL_DEFINSTANCE;
474  mstarcon->setObjectItem(condesobj);
475 
476  //Generate InvokeId
477  mstarcon->setInvokeID(DONTCARE_INVOKEID);
478 
479  //Append src/dst address for RMT "routing"
480  mstarcon->setSrcAddr(pdu->getDstAddr());
481  mstarcon->setDstAddr(pdu->getSrcAddr());
482 
483  //Send it
484  signalizeSendData(mstarcon);
485 }
486 
487 //void RIBd::receiveRoutingUpdateFromRouting(IntRoutingUpdate * info)
488 //{
489 // EV << getFullPath() << " Forwarding update to send to " << info->getDestination();
490 //
491 // /* Emits the CDAP message. */
492 //
493 // CDAP_M_Write * cdapm = new CDAP_M_Write(MSG_ROUTINGUPDATE);
494 // std::ostringstream os;
495 // object_t flowobj;
496 //
497 // /* Prepare the object to send. */
498 //
499 // os << "RoutingUpdateTo" << info->getDestination();
500 //
501 // flowobj.objectClass = info->getClassName();
502 // flowobj.objectName = os.str();
503 // flowobj.objectVal = info;
504 // //TODO: Vesely - Assign appropriate values
505 // flowobj.objectInstance = VAL_DEFINSTANCE;
506 //
507 // cdapm->setObjectItem(flowobj);
508 //
509 // //TODO: Vesely - Work more on InvokeId
510 //
511 // /* This message will be sent to... */
512 // cdapm->setDstAddr(info->getDestination());
513 //
514 // /* Finally order to send the data... */
515 // signalizeSendData(cdapm);
516 //}
517 
519  EV << "Emits CongestionNotification" << endl;
520  emit(sigRIBDCongNotif, congDesc);
521 }
522 /*
523 void RIBd::signalizeConnectResponsePositive(CDAPMessage* msg) {
524  EV << "Emits ConnectResponsePositive to enrollment" << endl;
525  emit(sigRIBDConResPosi, msg);
526 }
527 
528 void RIBd::signalizeConnectResponseNegative(CDAPMessage* msg) {
529  EV << "Emits ConnectResponseNegative to enrollment" << endl;
530  emit(sigRIBDConResNega, msg);
531 }
532 
533 void RIBd::signalizeConnectRequest(CDAPMessage* msg) {
534  EV << "Emits ConnectRequest to enrollment" << endl;
535  emit(sigRIBDConReq, msg);
536 }
537 
538 void RIBd::signalizeSendCACE(CDAPMessage* msg) {
539  EV << "Emits CACE data to CACE module" << endl;
540  emit(sigRIBDCACESend, msg);
541 }
542 
543 void RIBd::signalizeStartEnrollmentRequest(CDAPMessage* msg) {
544  EV << "Emits StartEnrollmentRequest to enrollment" << endl;
545  emit(sigRIBDStartEnrollReq, msg);
546 }
547 
548 void RIBd::signalizeStartEnrollmentResponse(CDAPMessage* msg) {
549  EV << "Emits StartEnrollmentResponse to enrollment" << endl;
550  emit(sigRIBDStartEnrollRes, msg);
551 }
552 
553 void RIBd::signalizeStopEnrollmentRequest(CDAPMessage* msg) {
554  EV << "Emits StopEnrollmentRequest to enrollment" << endl;
555  emit(sigRIBDStopEnrollReq, msg);
556 }
557 
558 void RIBd::signalizeStopEnrollmentResponse(CDAPMessage* msg) {
559  EV << "Emits StopEnrollmentResponse to enrollment" << endl;
560  emit(sigRIBDStopEnrollRes, msg);
561 }
562 
563 void RIBd::signalizeStartOperationRequest(CDAPMessage* msg) {
564  EV << "Emits StartOperationRequest to enrollment" << endl;
565  emit(sigRIBDStartOperationReq, msg);
566 }
567 
568 void RIBd::signalizeStartOperationResponse(CDAPMessage* msg) {
569  EV << "Emits StartOperationResponse to enrollment" << endl;
570  emit(sigRIBDStartOperationRes, msg);
571 }
572 */
573 /*
574 void RIBd::sendStartEnrollmentRequest(EnrollmentObj* obj) {
575  Enter_Method("sendStartEnrollmentRequest()");
576 
577  CDAP_M_Start* msg = new CDAP_M_Start(MSG_ENROLLMENT);
578 
579  //TODO: assign appropriate values
580  std::ostringstream os;
581  os << "Enrollment";
582  object_t enrollobj;
583  enrollobj.objectClass = obj->getClassName();
584  enrollobj.objectName = os.str();
585  enrollobj.objectVal = obj;
586  enrollobj.objectInstance = VAL_DEFINSTANCE;
587  msg->setObjectItem(enrollobj);
588 
589  //TODO: check and rework generate invoke id
590  //msg->setInvokeID(getNewInvokeId());
591 
592  //Append src/dst address for RMT "routing"
593  msg->setSrcAddr(obj->getSrcAddress());
594  msg->setDstAddr(obj->getDstAddress());
595 
596  signalizeSendData(msg);
597 }
598 
599 void RIBd::sendStartEnrollmentResponse(EnrollmentObj* obj) {
600  Enter_Method("sendStartEnrollmentResponse()");
601 
602  CDAP_M_Start_R* msg = new CDAP_M_Start_R(MSG_ENROLLMENT);
603 
604  //TODO: assign appropriate values
605  std::ostringstream os;
606  os << "Enrollment";
607  object_t enrollobj;
608  enrollobj.objectClass = obj->getClassName();
609  enrollobj.objectName = os.str();
610  enrollobj.objectVal = obj;
611  enrollobj.objectInstance = VAL_DEFINSTANCE;
612  msg->setObjectItem(enrollobj);
613 
614  //TODO: check and rework generate invoke id
615  //msg->setInvokeID(getNewInvokeId());
616 
617  //Append src/dst address for RMT "routing"
618  msg->setSrcAddr(obj->getSrcAddress());
619  msg->setDstAddr(obj->getDstAddress());
620 
621 
622  signalizeSendData(msg);
623 }
624 
625 void RIBd::sendStopEnrollmentRequest(EnrollmentObj* obj) {
626  Enter_Method("sendStopEnrollmentRequest()");
627 
628  CDAP_M_Stop* msg = new CDAP_M_Stop(MSG_ENROLLMENT);
629 
630  //TODO: assign appropriate values
631  std::ostringstream os;
632  os << "Enrollment";
633  object_t enrollobj;
634  enrollobj.objectClass = obj->getClassName();
635  enrollobj.objectName = os.str();
636  enrollobj.objectVal = obj;
637  enrollobj.objectInstance = VAL_DEFINSTANCE;
638  msg->setObjectItem(enrollobj);
639 
640  //TODO: check and rework generate invoke id
641  //msg->setInvokeID(getNewInvokeId());
642 
643  //Append src/dst address for RMT "routing"
644  msg->setSrcAddr(obj->getSrcAddress());
645  msg->setDstAddr(obj->getDstAddress());
646 
647  signalizeSendData(msg);
648 }
649 
650 void RIBd::sendStopEnrollmentResponse(EnrollmentObj* obj) {
651  Enter_Method("sendStopEnrollmentResponse()");
652 
653  CDAP_M_Stop_R* msg = new CDAP_M_Stop_R(MSG_ENROLLMENT);
654 
655  //TODO: assign appropriate values
656  std::ostringstream os;
657  os << "Enrollment";
658  object_t enrollobj;
659  enrollobj.objectClass = obj->getClassName();
660  enrollobj.objectName = os.str();
661  enrollobj.objectVal = obj;
662  enrollobj.objectInstance = VAL_DEFINSTANCE;
663  msg->setObjectItem(enrollobj);
664 
665  //TODO: check and rework generate invoke id
666  //msg->setInvokeID(getNewInvokeId());
667 
668  //Append src/dst address for RMT "routing"
669  msg->setSrcAddr(obj->getSrcAddress());
670  msg->setDstAddr(obj->getDstAddress());
671 
672  signalizeSendData(msg);
673 }
674 
675 void RIBd::sendStartOperationRequest(OperationObj* obj) {
676  Enter_Method("sendStartOperationRequest()");
677 }
678 
679 void RIBd::sendStartOperationResponse(OperationObj* obj) {
680  Enter_Method("sendStartOperationResponse()");
681 }
682 
683 void RIBd::sendCACE(CDAPMessage* msg) {
684  Enter_Method("sendCACE()");
685 
686  //TODO: add invoke id
687 
688  signalizeSendCACE(msg);
689 }
690 void RIBd::receiveCACE(CDAPMessage* msg) {
691  Enter_Method("receiveCACE()");
692 
693  //M_CONNECT_Request
694  if (dynamic_cast<CDAP_M_Connect*>(msg)) {
695  processMConnect(msg);
696  }
697  //M_CONNECT_Response
698  else if (dynamic_cast<CDAP_M_Connect_R*>(msg)) {
699  processMConnectR(msg);
700  }
701 
702  delete msg;
703 }
704 */
705 /*
706 void RIBd::processMCreate(CDAPMessage* msg) {
707  CDAP_M_Create* msg1 = check_and_cast<CDAP_M_Create*>(msg);
708 
709  EV << "Received M_Create";
710  object_t object = msg1->getObjectItem();
711  EV << " with object '" << object.objectClass << "'" << endl;
712 
713 // //CreateRequest Flow
714 // if (dynamic_cast<Flow*>(object.objectVal)) {
715 // Flow* fl = (check_and_cast<Flow*>(object.objectVal))->dup();
716 // //EV << fl->info();
717 // fl->swapFlow();
718 // //EV << "\n===========\n" << fl->info();
719 // signalizeCreateRequestFlow(fl);
720 // }
721 }
722 
723 void RIBd::processMCreateR(CDAPMessage* msg) {
724  CDAP_M_Create_R* msg1 = check_and_cast<CDAP_M_Create_R*>(msg);
725 
726  EV << "Received M_Create_R";
727  object_t object = msg1->getObjectItem();
728  EV << " with object '" << object.objectClass << "'" << endl;
729 
730 // //CreateResponseFlow
731 // if (dynamic_cast<Flow*>(object.objectVal)) {
732 // Flow* flow = (check_and_cast<Flow*>(object.objectVal))->dup();
733 // flow->swapFlow();
734 // //Positive response
735 // if (!msg1->getResult().resultValue) {
736 // signalizeCreateResponseFlowPositive(flow);
737 // }
738 // //Negative response
739 // else
740 // signalizeCreateResponseFlowNegative(flow);
741 // }
742 }
743 
744 void RIBd::processMDelete(CDAPMessage* msg) {
745  //CDAP_M_Delete* msg1 = check_and_cast<CDAP_M_Delete*>(msg);
746 
747  EV << "Received M_Delete";
748 
749  //DeleteRequest Flow
750  if (dynamic_cast<Flow*>(object.objectVal)) {
751  Flow* fl = (check_and_cast<Flow*>(object.objectVal))->dup();
752  fl->swapFlow();
753  signalizeDeleteRequestFlow(fl);
754  }
755 
756 }
757 
758 void RIBd::processMDeleteR(CDAPMessage* msg) {
759  CDAP_M_Delete_R* msg1 = check_and_cast<CDAP_M_Delete_R*>(msg);
760 
761  EV << "Received M_Delete_R";
762  object_t object = msg1->getObjectItem();
763  EV << " with object '" << object.objectClass << "'" << endl;
764 
765 // //DeleteResponseFlow
766 // if (dynamic_cast<Flow*>(object.objectVal)) {
767 // Flow* flow = (check_and_cast<Flow*>(object.objectVal))->dup();
768 // flow->swapFlow();
769 // signalizeDeleteResponseFlow(flow);
770 // }
771 
772 }
773 */
774 
775 /*
776 void RIBd::processMConnect(CDAPMessage* msg) {
777  CDAP_M_Connect* msg1 = check_and_cast<CDAP_M_Connect*>(msg);
778 
779  EV << "Received M_Connect";
780 
781  if (msg1) {
782  signalizeConnectRequest(msg);
783  }
784 }
785 
786 void RIBd::processMConnectR(CDAPMessage* msg) {
787  CDAP_M_Connect_R* msg1 = check_and_cast<CDAP_M_Connect_R*>(msg);
788 
789  EV << "Received M_Connect_R";
790 
791  if (msg1) {
792  if (!msg1->getResult().resultValue) {
793  signalizeConnectResponsePositive(msg);
794  }
795  else {
796  signalizeConnectResponseNegative(msg);
797  }
798  }
799 }
800 */
802  CDAP_M_Start* msg1 = check_and_cast<CDAP_M_Start*>(msg);
803 
804  EV << "Received M_Start";
805  object_t object = msg1->getObjectItem();
806  EV << " with object '" << object.objectClass << "'" << endl;
807 
808  //CongestionNotification CongestDescr
809  if (dynamic_cast<CongestionDescriptor*>(object.objectVal)) {
810  CongestionDescriptor* congdesc = (check_and_cast<CongestionDescriptor*>(object.objectVal))->dup();
811  congdesc->getConnectionId().swapCepIds();
812  EV << "\n===========\n" << congdesc->getConnectionId().info();
814  }
815  /*
816  //Enrollment
817  if (dynamic_cast<EnrollmentObj*>(object.objectVal)) {
818  signalizeStartEnrollmentRequest(msg);
819  }
820  */
821 }
822 /*
823 void RIBd::processMStartR(CDAPMessage* msg) {
824  CDAP_M_Start_R* msg1 = check_and_cast<CDAP_M_Start_R*>(msg);
825 
826  EV << "Received M_Start_R";
827  object_t object = msg1->getObjectItem();
828  EV << " with object '" << object.objectClass << "'" << endl;
829 
830  //Enrollment
831  if (dynamic_cast<EnrollmentObj*>(object.objectVal)) {
832  signalizeStartEnrollmentResponse(msg);
833  }
834 }
835 
836 void RIBd::processMStop(CDAPMessage* msg) {
837  CDAP_M_Stop* msg1 = check_and_cast<CDAP_M_Stop*>(msg);
838 
839  EV << "Received M_Stop";
840  object_t object = msg1->getObjectItem();
841  EV << " with object '" << object.objectClass << "'" << endl;
842 
843  //Enrollment
844  if (dynamic_cast<EnrollmentObj*>(object.objectVal)) {
845  signalizeStopEnrollmentRequest(msg);
846  }
847 }
848 
849 void RIBd::processMStopR(CDAPMessage* msg) {
850  CDAP_M_Stop_R* msg1 = check_and_cast<CDAP_M_Stop_R*>(msg);
851 
852  EV << "Received M_Stop_R";
853  object_t object = msg1->getObjectItem();
854  EV << " with object '" << object.objectClass << "'" << endl;
855 
856  //Enrollment
857  if (dynamic_cast<EnrollmentObj*>(object.objectVal)) {
858  signalizeStopEnrollmentResponse(msg);
859  }
860 }
861 */
862 //void RIBd::processMWrite(CDAPMessage* msg)
863 //{
864 // CDAP_M_Write * msg1 = check_and_cast<CDAP_M_Write *>(msg);
865 //
866 // EV << "Received M_Write";
867 // object_t object = msg1->getObjectItem();
868 // EV << " with object '" << object.objectClass << "'" << endl;
869 //
870 // if (dynamic_cast<IntRoutingUpdate *>(object.objectVal))
871 // {
872 // IntRoutingUpdate * update = (check_and_cast<IntRoutingUpdate *>(object.objectVal));
873 //
874 // /* Signal that an update obj has been received. */
875 // emit(sigRIBDRoutingUpdateRecv, update);
876 // }
877 //}
878 
::omnetpp::opp_string objectClass
LisRIBDRcvData * lisRIBDRcvData
Definition: RIBd.h:92
const int VAL_DEFINSTANCE
virtual void receiveMessage(CDAPMessage *msg)
Function checks the type of CDAP message and passes it to appropriate processing method.
Definition: RIBd.h:54
int objectInstance
ConnectionId & swapCepIds()
Exchanges source and destination CEP identifiers.
virtual void receiveData(CDAPMessage *cimsg)
Definition: RIBd.cc:301
FANotifierBase * FANotif
Definition: RIBd.h:67
void initMyAddress()
Definition: RIBdBase.cc:41
bool useRoutingNotifier
Definition: RIBd.h:73
virtual void signalizeSendData(CDAPMessage *msg)
Definition: RIBd.cc:444
std::string getQoSId() const
Getter of selected QoS-cube identifier.
Definition: ConnectionId.cc:44
virtual unsigned int getHeaderBitLength() const
virtual void setSrcAddr(const Address &srcAddr)
static const Address UNSPECIFIED_ADDRESS
Definition: Address.h:44
virtual Address & getDstAddr()
const char * SIG_RIBD_CongestionNotification
Definition: RINASignals.cc:55
Define_Module(RIBd)
virtual void receiveMessage(CDAPMessage *msg)
Function checks the type of CDAP message and passes it to appropriate processing method.
int getSrcCepId() const
Getter of source Connection-Endpoint identifier.
Definition: ConnectionId.cc:54
void processMStart(CDAPMessage *msg)
Definition: RIBd.cc:801
bool useFANotifier
Definition: RIBd.h:71
virtual ConnectionId & getConnId()
Definition: PDU_m.cc:336
virtual void initialize()
Definition: RIBd.cc:43
virtual bool isMessageProcessable(CDAPMessage *msg)
Function checks whether CDAP message can be processed by notifier.
const char * PAR_USEFANOTIF
Definition: RIBd.cc:37
Definition: PDU.h:42
virtual void sendCongestionNotification(PDU *pdu)
Definition: RIBd.cc:459
void initSignalsAndListeners()
Definition: RIBd.cc:344
virtual void handleMessage(cMessage *msg)
Definition: RIBd.cc:77
simsignal_t sigRIBDSendData
Definition: RIBd.h:83
ConnectionId & getConnectionId()
EnrollmentNotifierBase * EnrollNotif
Definition: RIBd.h:68
virtual Address & getDstAddr()
Definition: PDU_m.cc:306
const char * PAR_USEENROLLNOTIF
Definition: RIBd.cc:38
virtual void receiveMessage(CDAPMessage *msg)
Function checks the type of CDAP message and passes it to appropriate processing method.
int getDstCepId() const
Getter of destination Connection-Endpoint identifier.
Definition: ConnectionId.cc:34
virtual Address & getSrcAddr()
Definition: PDU_m.cc:296
virtual void setInvokeID(int32_t invokeID)
std::string info() const
Info text outpu suitable for << strinng streams and WATCH.
const char * PAR_USEROUTINGNOTIF
Definition: RIBd.cc:39
LisRIBDCongesNotif * lisRIBDCongNotif
Definition: RIBd.h:93
void initPointers()
Definition: RIBd.cc:59
std::string getCongesDescrName() const
virtual bool isMessageProcessable(CDAPMessage *msg)
Function checks whether CDAP message can be processed by notifier.
virtual CongestionDescriptor * dup() const
RoutingNotifierBase * RoutingNotif
Definition: RIBd.h:69
ObjectPtr objectVal
virtual void setDstAddr(const Address &dstAddr)
const char * MSG_CONGEST
Definition: RIBd.cc:33
simsignal_t sigRIBDCongNotif
Definition: RIBd.h:84
const char * SIG_RA_InvokeSlowdown
Definition: RINASignals.cc:118
const char * SIG_RIBD_DataSend
Definition: RINASignals.cc:45
virtual void setObjectItem(const object_t &objectItem)
virtual object_t & getObjectItem()
::omnetpp::opp_string objectName
virtual bool isMessageProcessable(CDAPMessage *msg)
Function checks whether CDAP message can be processed by notifier.
const char * SIG_CDAP_DateReceive
Definition: RINASignals.cc:81
bool useEnrollmentNotifier
Definition: RIBd.h:72
void signalizeCongestionNotification(CongestionDescriptor *congDesc)
Definition: RIBd.cc:518
const int DONTCARE_INVOKEID