PageRenderTime 51ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 1ms

/Documentation/doxy/class_r_s_v_p.html

https://github.com/vonami/inet-flc
HTML | 5023 lines | 4838 code | 184 blank | 1 comment | 0 complexity | bbe00edb5ed2599208e419813274e645 MD5 | raw file
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  2. <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
  3. <title>INET Framework for OMNeT++/OMNEST: RSVP Class Reference</title>
  4. <link href="opp.css" rel="stylesheet" type="text/css">
  5. </head><body>
  6. <!-- Generated by Doxygen 1.4.0 -->
  7. <div class="qindex"><a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="namespacemembers.html">Namespace&nbsp;Members</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="globals.html">File&nbsp;Members</a> | <a class="qindex" href="pages.html">Related&nbsp;Pages</a></div>
  8. <h1>RSVP Class Reference</h1><code>#include &lt;RSVP.h&gt;</code>
  9. <p>
  10. <p>Inheritance diagram for RSVP:
  11. <p><center><img src="class_r_s_v_p.png" usemap="#RSVP_map" border="0" alt=""></center>
  12. <map name="RSVP_map">
  13. <area href="class_i_scriptable.html" alt="IScriptable" shape="rect" coords="0,0,72,24">
  14. </map>
  15. <a href="class_r_s_v_p-members.html">List of all members.</a><hr><a name="_details"></a><h2>Detailed Description</h2>
  16. TODO documentation
  17. <p>
  18. <table border="0" cellpadding="0" cellspacing="0">
  19. <tr><td></td></tr>
  20. <tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
  21. <tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#a0">RSVP</a> ()</td></tr>
  22. <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#a1">~RSVP</a> ()</td></tr>
  23. <tr><td colspan="2"><br><h2>Protected Member Functions</h2></td></tr>
  24. <tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b0">processSignallingMessage</a> (<a class="el" href="class_signalling_msg.html">SignallingMsg</a> *msg)</td></tr>
  25. <tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b1">processPSB_TIMER</a> (<a class="el" href="class_psb_timer_msg.html">PsbTimerMsg</a> *msg)</td></tr>
  26. <tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b2">processPSB_TIMEOUT</a> (<a class="el" href="class_psb_timeout_msg.html">PsbTimeoutMsg</a> *msg)</td></tr>
  27. <tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b3">processRSB_REFRESH_TIMER</a> (<a class="el" href="class_rsb_refresh_timer_msg.html">RsbRefreshTimerMsg</a> *msg)</td></tr>
  28. <tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b4">processRSB_COMMIT_TIMER</a> (<a class="el" href="class_rsb_commit_timer_msg.html">RsbCommitTimerMsg</a> *msg)</td></tr>
  29. <tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b5">processRSB_TIMEOUT</a> (<a class="el" href="class_rsb_timeout_msg.html">RsbTimeoutMsg</a> *msg)</td></tr>
  30. <tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b6">processHELLO_TIMER</a> (<a class="el" href="class_hello_timer_msg.html">HelloTimerMsg</a> *msg)</td></tr>
  31. <tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b7">processHELLO_TIMEOUT</a> (<a class="el" href="class_hello_timeout_msg.html">HelloTimeoutMsg</a> *msg)</td></tr>
  32. <tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b8">processPATH_NOTIFY</a> (<a class="el" href="class_path_notify_msg.html">PathNotifyMsg</a> *msg)</td></tr>
  33. <tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b9">processRSVPMessage</a> (<a class="el" href="class_r_s_v_p_message.html">RSVPMessage</a> *msg)</td></tr>
  34. <tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b10">processHelloMsg</a> (<a class="el" href="class_r_s_v_p_hello_msg.html">RSVPHelloMsg</a> *msg)</td></tr>
  35. <tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b11">processPathMsg</a> (<a class="el" href="class_r_s_v_p_path_msg.html">RSVPPathMsg</a> *msg)</td></tr>
  36. <tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b12">processResvMsg</a> (<a class="el" href="class_r_s_v_p_resv_msg.html">RSVPResvMsg</a> *msg)</td></tr>
  37. <tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b13">processPathTearMsg</a> (<a class="el" href="class_r_s_v_p_path_tear.html">RSVPPathTear</a> *msg)</td></tr>
  38. <tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b14">processPathErrMsg</a> (<a class="el" href="class_r_s_v_p_path_error.html">RSVPPathError</a> *msg)</td></tr>
  39. <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="struct_r_s_v_p_1_1_path_state_block__t.html">PathStateBlock_t</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b15">createPSB</a> (<a class="el" href="class_r_s_v_p_path_msg.html">RSVPPathMsg</a> *msg)</td></tr>
  40. <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="struct_r_s_v_p_1_1_path_state_block__t.html">PathStateBlock_t</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b16">createIngressPSB</a> (const <a class="el" href="struct_r_s_v_p_1_1traffic__session__t.html">traffic_session_t</a> &amp;session, const <a class="el" href="struct_r_s_v_p_1_1traffic__path__t.html">traffic_path_t</a> &amp;path)</td></tr>
  41. <tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b17">removePSB</a> (<a class="el" href="struct_r_s_v_p_1_1_path_state_block__t.html">PathStateBlock_t</a> *psb)</td></tr>
  42. <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="struct_r_s_v_p_1_1_resv_state_block__t.html">ResvStateBlock_t</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b18">createRSB</a> (<a class="el" href="class_r_s_v_p_resv_msg.html">RSVPResvMsg</a> *msg)</td></tr>
  43. <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="struct_r_s_v_p_1_1_resv_state_block__t.html">ResvStateBlock_t</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b19">createEgressRSB</a> (<a class="el" href="struct_r_s_v_p_1_1_path_state_block__t.html">PathStateBlock_t</a> *psb)</td></tr>
  44. <tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b20">updateRSB</a> (<a class="el" href="struct_r_s_v_p_1_1_resv_state_block__t.html">ResvStateBlock_t</a> *rsb, <a class="el" href="class_r_s_v_p_resv_msg.html">RSVPResvMsg</a> *msg)</td></tr>
  45. <tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b21">removeRSB</a> (<a class="el" href="struct_r_s_v_p_1_1_resv_state_block__t.html">ResvStateBlock_t</a> *rsb)</td></tr>
  46. <tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b22">removeRsbFilter</a> (<a class="el" href="struct_r_s_v_p_1_1_resv_state_block__t.html">ResvStateBlock_t</a> *rsb, unsigned int index)</td></tr>
  47. <tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b23">refreshPath</a> (<a class="el" href="struct_r_s_v_p_1_1_path_state_block__t.html">PathStateBlock_t</a> *psbEle)</td></tr>
  48. <tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b24">refreshResv</a> (<a class="el" href="struct_r_s_v_p_1_1_resv_state_block__t.html">ResvStateBlock_t</a> *rsbEle)</td></tr>
  49. <tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b25">refreshResv</a> (<a class="el" href="struct_r_s_v_p_1_1_resv_state_block__t.html">ResvStateBlock_t</a> *rsbEle, <a class="el" href="class_i_p_address.html">IPAddress</a> PHOP)</td></tr>
  50. <tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b26">commitResv</a> (<a class="el" href="struct_r_s_v_p_1_1_resv_state_block__t.html">ResvStateBlock_t</a> *rsb)</td></tr>
  51. <tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b27">scheduleRefreshTimer</a> (<a class="el" href="struct_r_s_v_p_1_1_path_state_block__t.html">PathStateBlock_t</a> *psbEle, double delay)</td></tr>
  52. <tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b28">scheduleTimeout</a> (<a class="el" href="struct_r_s_v_p_1_1_path_state_block__t.html">PathStateBlock_t</a> *psbEle)</td></tr>
  53. <tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b29">scheduleRefreshTimer</a> (<a class="el" href="struct_r_s_v_p_1_1_resv_state_block__t.html">ResvStateBlock_t</a> *rsbEle, double delay)</td></tr>
  54. <tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b30">scheduleCommitTimer</a> (<a class="el" href="struct_r_s_v_p_1_1_resv_state_block__t.html">ResvStateBlock_t</a> *rsbEle)</td></tr>
  55. <tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b31">scheduleTimeout</a> (<a class="el" href="struct_r_s_v_p_1_1_resv_state_block__t.html">ResvStateBlock_t</a> *rsbEle)</td></tr>
  56. <tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b32">sendPathErrorMessage</a> (<a class="el" href="struct_r_s_v_p_1_1_path_state_block__t.html">PathStateBlock_t</a> *psb, int errCode)</td></tr>
  57. <tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b33">sendPathErrorMessage</a> (<a class="el" href="struct_session_obj__t.html">SessionObj_t</a> session, <a class="el" href="struct_sender_template_obj__t.html">SenderTemplateObj_t</a> sender, <a class="el" href="struct_sender_tspec_obj__t.html">SenderTspecObj_t</a> tspec, <a class="el" href="class_i_p_address.html">IPAddress</a> nextHop, int errCode)</td></tr>
  58. <tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b34">sendPathTearMessage</a> (<a class="el" href="class_i_p_address.html">IPAddress</a> peerIP, const <a class="el" href="struct_session_obj__t.html">SessionObj_t</a> &amp;session, const <a class="el" href="struct_sender_template_obj__t.html">SenderTemplateObj_t</a> &amp;sender, <a class="el" href="class_i_p_address.html">IPAddress</a> LIH, <a class="el" href="class_i_p_address.html">IPAddress</a> NHOP, bool force)</td></tr>
  59. <tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b35">sendPathNotify</a> (int handler, const <a class="el" href="struct_session_obj__t.html">SessionObj_t</a> &amp;session, const <a class="el" href="struct_sender_template_obj__t.html">SenderTemplateObj_t</a> &amp;sender, int status, double delay)</td></tr>
  60. <tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b36">setupHello</a> ()</td></tr>
  61. <tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b37">startHello</a> (<a class="el" href="class_i_p_address.html">IPAddress</a> peer, double delay)</td></tr>
  62. <tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b38">recoveryEvent</a> (<a class="el" href="class_i_p_address.html">IPAddress</a> peer)</td></tr>
  63. <tr><td class="memItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b39">allocateResource</a> (<a class="el" href="class_i_p_address.html">IPAddress</a> OI, const <a class="el" href="struct_session_obj__t.html">SessionObj_t</a> &amp;session, double bandwidth)</td></tr>
  64. <tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b40">preempt</a> (<a class="el" href="class_i_p_address.html">IPAddress</a> OI, int priority, double bandwidth)</td></tr>
  65. <tr><td class="memItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b41">doCACCheck</a> (const <a class="el" href="struct_session_obj__t.html">SessionObj_t</a> &amp;session, const <a class="el" href="struct_sender_tspec_obj__t.html">SenderTspecObj_t</a> &amp;tspec, <a class="el" href="class_i_p_address.html">IPAddress</a> OI)</td></tr>
  66. <tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b42">announceLinkChange</a> (int tedlinkindex)</td></tr>
  67. <tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b43">sendToIP</a> (cMessage *msg, <a class="el" href="class_i_p_address.html">IPAddress</a> destAddr)</td></tr>
  68. <tr><td class="memItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b44">evalNextHopInterface</a> (<a class="el" href="class_i_p_address.html">IPAddress</a> destAddr, const <a class="el" href="_int_serv__m_8h.html#a2">EroVector</a> &amp;ERO, <a class="el" href="class_i_p_address.html">IPAddress</a> &amp;OI)</td></tr>
  69. <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="struct_r_s_v_p_1_1_path_state_block__t.html">PathStateBlock_t</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b45">findPSB</a> (const <a class="el" href="struct_session_obj__t.html">SessionObj_t</a> &amp;session, const <a class="el" href="struct_sender_template_obj__t.html">SenderTemplateObj_t</a> &amp;sender)</td></tr>
  70. <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="struct_r_s_v_p_1_1_resv_state_block__t.html">ResvStateBlock_t</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b46">findRSB</a> (const <a class="el" href="struct_session_obj__t.html">SessionObj_t</a> &amp;session, const <a class="el" href="struct_sender_template_obj__t.html">SenderTemplateObj_t</a> &amp;sender, unsigned int &amp;index)</td></tr>
  71. <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="struct_r_s_v_p_1_1_path_state_block__t.html">PathStateBlock_t</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b47">findPsbById</a> (int id)</td></tr>
  72. <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="struct_r_s_v_p_1_1_resv_state_block__t.html">ResvStateBlock_t</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b48">findRsbById</a> (int id)</td></tr>
  73. <tr><td class="memItemLeft" nowrap align="right" valign="top">std::vector&lt; <a class="el" href="struct_r_s_v_p_1_1traffic__session__t.html">traffic_session_t</a> <br>
  74. &gt;::iterator&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b49">findSession</a> (const <a class="el" href="struct_session_obj__t.html">SessionObj_t</a> &amp;session)</td></tr>
  75. <tr><td class="memItemLeft" nowrap align="right" valign="top">std::vector&lt; <a class="el" href="struct_r_s_v_p_1_1traffic__path__t.html">traffic_path_t</a> <br>
  76. &gt;::iterator&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b50">findPath</a> (<a class="el" href="struct_r_s_v_p_1_1traffic__session__t.html">traffic_session_t</a> *session, const <a class="el" href="struct_sender_template_obj__t.html">SenderTemplateObj_t</a> &amp;sender)</td></tr>
  77. <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="struct_r_s_v_p_1_1_hello_state__t.html">HelloState_t</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b51">findHello</a> (<a class="el" href="class_i_p_address.html">IPAddress</a> peer)</td></tr>
  78. <tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b52">print</a> (<a class="el" href="class_r_s_v_p_path_msg.html">RSVPPathMsg</a> *p)</td></tr>
  79. <tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b53">print</a> (<a class="el" href="class_r_s_v_p_resv_msg.html">RSVPResvMsg</a> *r)</td></tr>
  80. <tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b54">readTrafficFromXML</a> (const cXMLElement *<a class="el" href="class_r_s_v_p.html#r0">traffic</a>)</td></tr>
  81. <tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b55">readTrafficSessionFromXML</a> (const cXMLElement *session)</td></tr>
  82. <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="_int_serv__m_8h.html#a2">EroVector</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b56">readTrafficRouteFromXML</a> (const cXMLElement *route)</td></tr>
  83. <tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b57">createPath</a> (const <a class="el" href="struct_session_obj__t.html">SessionObj_t</a> &amp;session, const <a class="el" href="struct_sender_template_obj__t.html">SenderTemplateObj_t</a> &amp;sender)</td></tr>
  84. <tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b58">pathProblem</a> (<a class="el" href="struct_r_s_v_p_1_1_path_state_block__t.html">PathStateBlock_t</a> *psb)</td></tr>
  85. <tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b59">addSession</a> (const cXMLElement &amp;node)</td></tr>
  86. <tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b60">delSession</a> (const cXMLElement &amp;node)</td></tr>
  87. <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b61">numInitStages</a> () const </td></tr>
  88. <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b62">initialize</a> (int stage)</td></tr>
  89. <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b63">handleMessage</a> (cMessage *msg)</td></tr>
  90. <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b64">processCommand</a> (const cXMLElement &amp;node)</td></tr>
  91. <tr><td colspan="2"><br><h2>Private Types</h2></td></tr>
  92. <tr><td class="memItemLeft" nowrap align="right" valign="top">typedef std::vector&lt; <a class="el" href="struct_r_s_v_p_1_1_path_state_block__t.html">PathStateBlock_t</a> &gt;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#y0">PSBVector</a></td></tr>
  93. <tr><td class="memItemLeft" nowrap align="right" valign="top">typedef std::vector&lt; <a class="el" href="struct_r_s_v_p_1_1_resv_state_block__t.html">ResvStateBlock_t</a> &gt;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#y1">RSBVector</a></td></tr>
  94. <tr><td class="memItemLeft" nowrap align="right" valign="top">typedef std::vector&lt; <a class="el" href="struct_r_s_v_p_1_1_hello_state__t.html">HelloState_t</a> &gt;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#y2">HelloVector</a></td></tr>
  95. <tr><td colspan="2"><br><h2>Private Member Functions</h2></td></tr>
  96. <tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#d0">getInLabel</a> (const <a class="el" href="struct_session_obj__t.html">SessionObj_t</a> &amp;session, const <a class="el" href="struct_sender_template_obj__t.html">SenderTemplateObj_t</a> &amp;sender)</td></tr>
  97. <tr><td colspan="2"><br><h2>Private Attributes</h2></td></tr>
  98. <tr><td class="memItemLeft" nowrap align="right" valign="top">std::vector&lt; <a class="el" href="struct_r_s_v_p_1_1traffic__session__t.html">traffic_session_t</a> &gt;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#r0">traffic</a></td></tr>
  99. <tr><td class="memItemLeft" nowrap align="right" valign="top">double&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#r1">helloInterval</a></td></tr>
  100. <tr><td class="memItemLeft" nowrap align="right" valign="top">double&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#r2">helloTimeout</a></td></tr>
  101. <tr><td class="memItemLeft" nowrap align="right" valign="top">double&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#r3">retryInterval</a></td></tr>
  102. <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="class_t_e_d.html">TED</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#r4">tedmod</a></td></tr>
  103. <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="class_routing_table.html">RoutingTable</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#r5">rt</a></td></tr>
  104. <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="class_interface_table.html">InterfaceTable</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#r6">ift</a></td></tr>
  105. <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="class_l_i_b_table.html">LIBTable</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#r7">lt</a></td></tr>
  106. <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="class_notification_board.html">NotificationBoard</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#r8">nb</a></td></tr>
  107. <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="class_i_r_s_v_p_classifier.html">IRSVPClassifier</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#r9">rpct</a></td></tr>
  108. <tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#r10">maxPsbId</a></td></tr>
  109. <tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#r11">maxRsbId</a></td></tr>
  110. <tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#r12">maxSrcInstance</a></td></tr>
  111. <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="class_i_p_address.html">IPAddress</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#r13">routerId</a></td></tr>
  112. <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="class_r_s_v_p.html#y0">PSBVector</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#r14">PSBList</a></td></tr>
  113. <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="class_r_s_v_p.html#y1">RSBVector</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#r15">RSBList</a></td></tr>
  114. <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="class_r_s_v_p.html#y2">HelloVector</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#r16">HelloList</a></td></tr>
  115. <tr><td colspan="2"><br><h2>Friends</h2></td></tr>
  116. <tr><td class="memItemLeft" nowrap align="right" valign="top">class&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#n0">SimpleClassifier</a></td></tr>
  117. <tr><td colspan="2"><br><h2>Classes</h2></td></tr>
  118. <tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_r_s_v_p_1_1_hello_state__t.html">HelloState_t</a></td></tr>
  119. <tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_r_s_v_p_1_1_path_state_block__t.html">PathStateBlock_t</a></td></tr>
  120. <tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_r_s_v_p_1_1_resv_state_block__t.html">ResvStateBlock_t</a></td></tr>
  121. <tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_r_s_v_p_1_1traffic__path__t.html">traffic_path_t</a></td></tr>
  122. <tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_r_s_v_p_1_1traffic__session__t.html">traffic_session_t</a></td></tr>
  123. </table>
  124. <hr><h2>Member Typedef Documentation</h2>
  125. <a class="anchor" name="y2" doxytag="RSVP::HelloVector"></a><p>
  126. <table class="mdTable" cellpadding="2" cellspacing="0">
  127. <tr>
  128. <td class="mdRow">
  129. <table cellpadding="0" cellspacing="0" border="0">
  130. <tr>
  131. <td class="md" nowrap valign="top">typedef std::vector&lt;<a class="el" href="struct_r_s_v_p_1_1_hello_state__t.html">HelloState_t</a>&gt; <a class="el" href="class_r_s_v_p.html#y2">RSVP::HelloVector</a><code> [private]</code> </td>
  132. </tr>
  133. </table>
  134. </td>
  135. </tr>
  136. </table>
  137. <table cellspacing="5" cellpadding="0" border="0">
  138. <tr>
  139. <td>
  140. &nbsp;
  141. </td>
  142. <td>
  143. <p>
  144. </td>
  145. </tr>
  146. </table>
  147. <a class="anchor" name="y0" doxytag="RSVP::PSBVector"></a><p>
  148. <table class="mdTable" cellpadding="2" cellspacing="0">
  149. <tr>
  150. <td class="mdRow">
  151. <table cellpadding="0" cellspacing="0" border="0">
  152. <tr>
  153. <td class="md" nowrap valign="top">typedef std::vector&lt;<a class="el" href="struct_r_s_v_p_1_1_path_state_block__t.html">PathStateBlock_t</a>&gt; <a class="el" href="class_r_s_v_p.html#y0">RSVP::PSBVector</a><code> [private]</code> </td>
  154. </tr>
  155. </table>
  156. </td>
  157. </tr>
  158. </table>
  159. <table cellspacing="5" cellpadding="0" border="0">
  160. <tr>
  161. <td>
  162. &nbsp;
  163. </td>
  164. <td>
  165. <p>
  166. </td>
  167. </tr>
  168. </table>
  169. <a class="anchor" name="y1" doxytag="RSVP::RSBVector"></a><p>
  170. <table class="mdTable" cellpadding="2" cellspacing="0">
  171. <tr>
  172. <td class="mdRow">
  173. <table cellpadding="0" cellspacing="0" border="0">
  174. <tr>
  175. <td class="md" nowrap valign="top">typedef std::vector&lt;<a class="el" href="struct_r_s_v_p_1_1_resv_state_block__t.html">ResvStateBlock_t</a>&gt; <a class="el" href="class_r_s_v_p.html#y1">RSVP::RSBVector</a><code> [private]</code> </td>
  176. </tr>
  177. </table>
  178. </td>
  179. </tr>
  180. </table>
  181. <table cellspacing="5" cellpadding="0" border="0">
  182. <tr>
  183. <td>
  184. &nbsp;
  185. </td>
  186. <td>
  187. <p>
  188. </td>
  189. </tr>
  190. </table>
  191. <hr><h2>Constructor &amp; Destructor Documentation</h2>
  192. <a class="anchor" name="a0" doxytag="RSVP::RSVP"></a><p>
  193. <table class="mdTable" cellpadding="2" cellspacing="0">
  194. <tr>
  195. <td class="mdRow">
  196. <table cellpadding="0" cellspacing="0" border="0">
  197. <tr>
  198. <td class="md" nowrap valign="top">RSVP::RSVP </td>
  199. <td class="md" valign="top">(&nbsp;</td>
  200. <td class="mdname1" valign="top" nowrap> </td>
  201. <td class="md" valign="top">&nbsp;)&nbsp;</td>
  202. <td class="md" nowrap></td>
  203. </tr>
  204. </table>
  205. </td>
  206. </tr>
  207. </table>
  208. <table cellspacing="5" cellpadding="0" border="0">
  209. <tr>
  210. <td>
  211. &nbsp;
  212. </td>
  213. <td>
  214. <p>
  215. <div class="fragment"><pre class="fragment">00042 {
  216. 00043 }
  217. </pre></div>
  218. <p>
  219. </td>
  220. </tr>
  221. </table>
  222. <a class="anchor" name="a1" doxytag="RSVP::~RSVP"></a><p>
  223. <table class="mdTable" cellpadding="2" cellspacing="0">
  224. <tr>
  225. <td class="mdRow">
  226. <table cellpadding="0" cellspacing="0" border="0">
  227. <tr>
  228. <td class="md" nowrap valign="top">RSVP::~<a class="el" href="class_r_s_v_p.html">RSVP</a> </td>
  229. <td class="md" valign="top">(&nbsp;</td>
  230. <td class="mdname1" valign="top" nowrap> </td>
  231. <td class="md" valign="top">&nbsp;)&nbsp;</td>
  232. <td class="md" nowrap><code> [virtual]</code></td>
  233. </tr>
  234. </table>
  235. </td>
  236. </tr>
  237. </table>
  238. <table cellspacing="5" cellpadding="0" border="0">
  239. <tr>
  240. <td>
  241. &nbsp;
  242. </td>
  243. <td>
  244. <p>
  245. <div class="fragment"><pre class="fragment">00046 {
  246. 00047 <span class="comment">// TODO cancelAndDelete timers in all data structures</span>
  247. 00048 }
  248. </pre></div>
  249. <p>
  250. </td>
  251. </tr>
  252. </table>
  253. <hr><h2>Member Function Documentation</h2>
  254. <a class="anchor" name="b59" doxytag="RSVP::addSession"></a><p>
  255. <table class="mdTable" cellpadding="2" cellspacing="0">
  256. <tr>
  257. <td class="mdRow">
  258. <table cellpadding="0" cellspacing="0" border="0">
  259. <tr>
  260. <td class="md" nowrap valign="top">void RSVP::addSession </td>
  261. <td class="md" valign="top">(&nbsp;</td>
  262. <td class="md" nowrap valign="top">const cXMLElement &amp;&nbsp;</td>
  263. <td class="mdname1" valign="top" nowrap> <em>node</em> </td>
  264. <td class="md" valign="top">&nbsp;)&nbsp;</td>
  265. <td class="md" nowrap><code> [protected]</code></td>
  266. </tr>
  267. </table>
  268. </td>
  269. </tr>
  270. </table>
  271. <table cellspacing="5" cellpadding="0" border="0">
  272. <tr>
  273. <td>
  274. &nbsp;
  275. </td>
  276. <td>
  277. <p>
  278. <div class="fragment"><pre class="fragment">01855 {
  279. 01856 Enter_Method_Silent();
  280. 01857
  281. 01858 <a class="code" href="class_r_s_v_p.html#b55">readTrafficSessionFromXML</a>(&amp;node);
  282. 01859 }
  283. </pre></div>
  284. <p>
  285. </td>
  286. </tr>
  287. </table>
  288. <a class="anchor" name="b39" doxytag="RSVP::allocateResource"></a><p>
  289. <table class="mdTable" cellpadding="2" cellspacing="0">
  290. <tr>
  291. <td class="mdRow">
  292. <table cellpadding="0" cellspacing="0" border="0">
  293. <tr>
  294. <td class="md" nowrap valign="top">bool RSVP::allocateResource </td>
  295. <td class="md" valign="top">(&nbsp;</td>
  296. <td class="md" nowrap valign="top"><a class="el" href="class_i_p_address.html">IPAddress</a>&nbsp;</td>
  297. <td class="mdname" nowrap> <em>OI</em>, </td>
  298. </tr>
  299. <tr>
  300. <td class="md" nowrap align="right"></td>
  301. <td class="md"></td>
  302. <td class="md" nowrap>const <a class="el" href="struct_session_obj__t.html">SessionObj_t</a> &amp;&nbsp;</td>
  303. <td class="mdname" nowrap> <em>session</em>, </td>
  304. </tr>
  305. <tr>
  306. <td class="md" nowrap align="right"></td>
  307. <td class="md"></td>
  308. <td class="md" nowrap>double&nbsp;</td>
  309. <td class="mdname" nowrap> <em>bandwidth</em></td>
  310. </tr>
  311. <tr>
  312. <td class="md"></td>
  313. <td class="md">)&nbsp;</td>
  314. <td class="md" colspan="2"><code> [protected]</code></td>
  315. </tr>
  316. </table>
  317. </td>
  318. </tr>
  319. </table>
  320. <table cellspacing="5" cellpadding="0" border="0">
  321. <tr>
  322. <td>
  323. &nbsp;
  324. </td>
  325. <td>
  326. <p>
  327. <div class="fragment"><pre class="fragment">00721 {
  328. 00722 <span class="keywordflow">if</span> (OI.<a class="code" href="class_i_p_address.html#a1">isUnspecified</a>())
  329. 00723 <span class="keywordflow">return</span> <span class="keyword">true</span>;
  330. 00724
  331. 00725 <span class="keywordflow">if</span> (!<a class="code" href="class_r_s_v_p.html#r4">tedmod</a>-&gt;<a class="code" href="class_t_e_d.html#z61_5">isLocalAddress</a>(OI))
  332. 00726 <span class="keywordflow">return</span> <span class="keyword">true</span>;
  333. 00727
  334. 00728 <span class="keywordflow">if</span> (bandwidth == 0.0)
  335. 00729 return true;
  336. 00730
  337. 00731 <span class="keywordtype">int</span> setupPri = session.setupPri;
  338. 00732 <span class="keywordtype">int</span> holdingPri = session.holdingPri;
  339. 00733
  340. 00734 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index = tedmod-&gt;linkIndex(OI);
  341. 00735
  342. 00736 <span class="comment">// Note: UnRB[7] &lt;= UnRW[setupPri] &lt;= UnRW[holdingPri] &lt;= BW[0]</span>
  343. 00737 <span class="comment">// UnRW[7] is the actual BW left on the link</span>
  344. 00738
  345. 00739 if (tedmod-&gt;ted[index].UnResvBandwidth[setupPri] &lt; bandwidth)
  346. 00740 return false;
  347. 00741
  348. 00742 for (<span class="keywordtype">int</span> p = holdingPri; p &lt; 8; p++)
  349. 00743 {
  350. 00744 <a class="code" href="class_r_s_v_p.html#r4">tedmod</a>-&gt;<a class="code" href="class_t_e_d.html#o0">ted</a>[index].UnResvBandwidth[p] -= bandwidth;
  351. 00745
  352. 00746 <span class="keywordflow">if</span> (<a class="code" href="class_r_s_v_p.html#r4">tedmod</a>-&gt;<a class="code" href="class_t_e_d.html#o0">ted</a>[index].UnResvBandwidth[p] &lt; 0.0)
  353. 00747 preempt(OI, p, -tedmod-&gt;ted[index].UnResvBandwidth[p]);
  354. 00748 }
  355. 00749
  356. 00750 <span class="comment">// announce changes</span>
  357. 00751
  358. 00752 announceLinkChange(index);
  359. 00753
  360. 00754 return true;
  361. 00755 }
  362. </pre></div>
  363. <p>
  364. </td>
  365. </tr>
  366. </table>
  367. <a class="anchor" name="b42" doxytag="RSVP::announceLinkChange"></a><p>
  368. <table class="mdTable" cellpadding="2" cellspacing="0">
  369. <tr>
  370. <td class="mdRow">
  371. <table cellpadding="0" cellspacing="0" border="0">
  372. <tr>
  373. <td class="md" nowrap valign="top">void RSVP::announceLinkChange </td>
  374. <td class="md" valign="top">(&nbsp;</td>
  375. <td class="md" nowrap valign="top">int&nbsp;</td>
  376. <td class="mdname1" valign="top" nowrap> <em>tedlinkindex</em> </td>
  377. <td class="md" valign="top">&nbsp;)&nbsp;</td>
  378. <td class="md" nowrap><code> [protected]</code></td>
  379. </tr>
  380. </table>
  381. </td>
  382. </tr>
  383. </table>
  384. <table cellspacing="5" cellpadding="0" border="0">
  385. <tr>
  386. <td>
  387. &nbsp;
  388. </td>
  389. <td>
  390. <p>
  391. <div class="fragment"><pre class="fragment">00758 {
  392. 00759 <a class="code" href="class_t_e_d_change_info.html">TEDChangeInfo</a> d;
  393. 00760 d.<a class="code" href="class_t_e_d_change_info.html#a6">setTedLinkIndicesArraySize</a>(1);
  394. 00761 d.<a class="code" href="class_t_e_d_change_info.html#a9">setTedLinkIndices</a>(0, tedlinkindex);
  395. 00762 <a class="code" href="class_r_s_v_p.html#r8">nb</a>-&gt;<a class="code" href="class_notification_board.html#z24_0">fireChangeNotification</a>(NF_TED_CHANGED, &amp;d);
  396. 00763 }
  397. </pre></div>
  398. <p>
  399. </td>
  400. </tr>
  401. </table>
  402. <a class="anchor" name="b26" doxytag="RSVP::commitResv"></a><p>
  403. <table class="mdTable" cellpadding="2" cellspacing="0">
  404. <tr>
  405. <td class="mdRow">
  406. <table cellpadding="0" cellspacing="0" border="0">
  407. <tr>
  408. <td class="md" nowrap valign="top">void RSVP::commitResv </td>
  409. <td class="md" valign="top">(&nbsp;</td>
  410. <td class="md" nowrap valign="top"><a class="el" href="struct_r_s_v_p_1_1_resv_state_block__t.html">ResvStateBlock_t</a> *&nbsp;</td>
  411. <td class="mdname1" valign="top" nowrap> <em>rsb</em> </td>
  412. <td class="md" valign="top">&nbsp;)&nbsp;</td>
  413. <td class="md" nowrap><code> [protected]</code></td>
  414. </tr>
  415. </table>
  416. </td>
  417. </tr>
  418. </table>
  419. <table cellspacing="5" cellpadding="0" border="0">
  420. <tr>
  421. <td>
  422. &nbsp;
  423. </td>
  424. <td>
  425. <p>
  426. <div class="fragment"><pre class="fragment">00766 {
  427. 00767 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> &lt;&lt; <span class="stringliteral">"commit reservation (RSB "</span> &lt;&lt; rsb-&gt;id &lt;&lt; <span class="stringliteral">")"</span> &lt;&lt; endl;
  428. 00768
  429. 00769 <span class="comment">// allocate bandwidth as needed</span>
  430. 00770
  431. 00771 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> &lt;&lt; <span class="stringliteral">"currently allocated: "</span> &lt;&lt; rsb-&gt;Flowspec_Object &lt;&lt; endl;
  432. 00772
  433. 00773 <span class="keywordflow">while</span>(<span class="keyword">true</span>)
  434. 00774 {
  435. 00775 <span class="comment">// remove RSB if empty</span>
  436. 00776
  437. 00777 <span class="keywordflow">if</span> (rsb-&gt;FlowDescriptor.size() == 0)
  438. 00778 {
  439. 00779 <a class="code" href="class_r_s_v_p.html#b21">removeRSB</a>(rsb);
  440. 00780 <span class="keywordflow">return</span>;
  441. 00781 }
  442. 00782
  443. 00783 <a class="code" href="struct_flow_spec_obj__t.html">FlowSpecObj_t</a> req;
  444. 00784 req.<a class="code" href="struct_sender_tspec_obj__t.html#o0">req_bandwidth</a> = 0.0;
  445. 00785
  446. 00786 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> maxFlowIndex;
  447. 00787 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; rsb-&gt;FlowDescriptor.size(); i++)
  448. 00788 {
  449. 00789 <span class="keywordflow">if</span> (rsb-&gt;FlowDescriptor[i].Flowspec_Object.req_bandwidth &gt; req.<a class="code" href="struct_sender_tspec_obj__t.html#o0">req_bandwidth</a>)
  450. 00790 {
  451. 00791 req.<a class="code" href="struct_sender_tspec_obj__t.html#o0">req_bandwidth</a> = rsb-&gt;FlowDescriptor[i].Flowspec_Object.<a class="code" href="struct_sender_tspec_obj__t.html#o0">req_bandwidth</a>;
  452. 00792 maxFlowIndex = i;
  453. 00793 }
  454. 00794 }
  455. 00795
  456. 00796 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> &lt;&lt; <span class="stringliteral">"currently required: "</span> &lt;&lt; req &lt;&lt; endl;
  457. 00797
  458. 00798 <span class="keywordtype">double</span> needed = req.<a class="code" href="struct_sender_tspec_obj__t.html#o0">req_bandwidth</a> - rsb-&gt;Flowspec_Object.<a class="code" href="struct_sender_tspec_obj__t.html#o0">req_bandwidth</a>;
  459. 00799
  460. 00800 <span class="keywordflow">if</span> (needed != 0.0)
  461. 00801 {
  462. 00802 <span class="keywordflow">if</span> (<a class="code" href="class_r_s_v_p.html#b39">allocateResource</a>(rsb-&gt;OI, rsb-&gt;Session_Object, needed))
  463. 00803 {
  464. 00804 <span class="comment">// allocated (deallocated) successfully</span>
  465. 00805
  466. 00806 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> &lt;&lt; <span class="stringliteral">"additional bandwidth of "</span> &lt;&lt; needed &lt;&lt; <span class="stringliteral">" allocated sucessfully"</span> &lt;&lt; endl;
  467. 00807
  468. 00808 rsb-&gt;Flowspec_Object.<a class="code" href="struct_sender_tspec_obj__t.html#o0">req_bandwidth</a> += needed;
  469. 00809 }
  470. 00810 <span class="keywordflow">else</span>
  471. 00811 {
  472. 00812 <span class="comment">// bandwidth not available</span>
  473. 00813
  474. 00814 ASSERT(rsb-&gt;inLabelVector.size() == rsb-&gt;FlowDescriptor.size());
  475. 00815
  476. 00816 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> &lt;&lt; <span class="stringliteral">"not enough bandwidth to accommodate this RSB"</span> &lt;&lt; endl;
  477. 00817
  478. 00818 <span class="keywordtype">int</span> lspid = rsb-&gt;FlowDescriptor[maxFlowIndex].Filter_Spec_Object.Lsp_Id;
  479. 00819 <span class="keywordtype">int</span> oldInLabel = rsb-&gt;inLabelVector[maxFlowIndex];
  480. 00820 PathStateBlock_t *psb = <a class="code" href="class_r_s_v_p.html#b45">findPSB</a>(rsb-&gt;Session_Object, (<a class="code" href="struct_sender_template_obj__t.html">SenderTemplateObj_t</a>&amp;)rsb-&gt;FlowDescriptor[maxFlowIndex].Filter_Spec_Object);
  481. 00821
  482. 00822 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> &lt;&lt; <span class="stringliteral">"removing filter lspid="</span> &lt;&lt; lspid &lt;&lt; <span class="stringliteral">" (max. flow)"</span> &lt;&lt; endl;
  483. 00823
  484. 00824 rsb-&gt;FlowDescriptor.erase(rsb-&gt;FlowDescriptor.begin() + maxFlowIndex);
  485. 00825 rsb-&gt;inLabelVector.erase(rsb-&gt;inLabelVector.begin() + maxFlowIndex);
  486. 00826
  487. 00827 <span class="keywordflow">if</span> (oldInLabel != -1)
  488. 00828 {
  489. 00829 <span class="comment">// path already existed, this must be preemption</span>
  490. 00830
  491. 00831 <a class="code" href="class_r_s_v_p.html#b32">sendPathErrorMessage</a>(psb, PATH_ERR_PREEMPTED);
  492. 00832
  493. 00833 <a class="code" href="class_r_s_v_p.html#r7">lt</a>-&gt;<a class="code" href="class_l_i_b_table.html#a2">removeLibEntry</a>(oldInLabel);
  494. 00834 }
  495. 00835 <span class="keywordflow">else</span>
  496. 00836 {
  497. 00837 <span class="comment">// path not established yet, report as unfeasible</span>
  498. 00838
  499. 00839 <a class="code" href="class_r_s_v_p.html#b32">sendPathErrorMessage</a>(psb, PATH_ERR_UNFEASIBLE);
  500. 00840 }
  501. 00841
  502. 00842 <span class="keywordflow">continue</span>;
  503. 00843 }
  504. 00844
  505. 00845 }
  506. 00846
  507. 00847 <span class="keywordflow">break</span>;
  508. 00848 }
  509. 00849
  510. 00850 <span class="comment">// install labels into lib</span>
  511. 00851
  512. 00852 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; rsb-&gt;FlowDescriptor.size(); i++)
  513. 00853 {
  514. 00854 <span class="keywordtype">int</span> lspid = rsb-&gt;FlowDescriptor[i].Filter_Spec_Object.Lsp_Id;
  515. 00855
  516. 00856 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> &lt;&lt; <span class="stringliteral">"processing lspid="</span> &lt;&lt; lspid &lt;&lt; endl;
  517. 00857
  518. 00858 PathStateBlock_t *psb = <a class="code" href="class_r_s_v_p.html#b45">findPSB</a>(rsb-&gt;Session_Object, rsb-&gt;FlowDescriptor[i].Filter_Spec_Object);
  519. 00859
  520. 00860 <a class="code" href="_l_i_b_table_8h.html#a3">LabelOpVector</a> outLabel;
  521. 00861 std::string inInterface, outInterface;
  522. 00862
  523. 00863 <span class="keywordtype">bool</span> IR = (psb-&gt;Previous_Hop_Address == <a class="code" href="class_r_s_v_p.html#r13">routerId</a>);
  524. 00864 <span class="comment">//bool ER = psb-&gt;OutInterface.isUnspecified();</span>
  525. 00865 <span class="keywordflow">if</span> (!IR)
  526. 00866 {
  527. 00867 <a class="code" href="class_i_p_address.html">IPAddress</a> localInf = <a class="code" href="class_r_s_v_p.html#r4">tedmod</a>-&gt;<a class="code" href="class_t_e_d.html#z61_0">interfaceAddrByPeerAddress</a>(psb-&gt;Previous_Hop_Address);
  528. 00868 inInterface = <a class="code" href="class_r_s_v_p.html#r5">rt</a>-&gt;<a class="code" href="class_routing_table.html#z40_1">interfaceByAddress</a>(localInf)-&gt;<a class="code" href="class_interface_entry.html#a5">name</a>();
  529. 00869 }
  530. 00870 <span class="keywordflow">else</span>
  531. 00871 inInterface = <span class="stringliteral">"any"</span>;
  532. 00872
  533. 00873 <span class="comment">// outlabel and outgoing interface</span>
  534. 00874
  535. 00875 <a class="code" href="struct_label_op.html">LabelOp</a> lop;
  536. 00876
  537. 00877 <span class="keywordflow">if</span> (<a class="code" href="class_r_s_v_p.html#r4">tedmod</a>-&gt;<a class="code" href="class_t_e_d.html#z61_5">isLocalAddress</a>(psb-&gt;OutInterface))
  538. 00878 {
  539. 00879 <span class="comment">// regular next hop</span>
  540. 00880
  541. 00881 lop.<a class="code" href="struct_label_op.html#o1">optcode</a> = IR? <a class="code" href="_l_i_b_table_8h.html#a0">PUSH_OPER</a>: <a class="code" href="_l_i_b_table_8h.html#a1">SWAP_OPER</a>;
  542. 00882 lop.<a class="code" href="struct_label_op.html#o0">label</a> = rsb-&gt;FlowDescriptor[i].<a class="code" href="struct_label_op.html#o0">label</a>;
  543. 00883 outLabel.push_back(lop);
  544. 00884
  545. 00885 outInterface = <a class="code" href="class_r_s_v_p.html#r5">rt</a>-&gt;<a class="code" href="class_routing_table.html#z40_1">interfaceByAddress</a>(psb-&gt;OutInterface)-&gt;<a class="code" href="class_interface_entry.html#a5">name</a>();
  546. 00886 }
  547. 00887 <span class="keywordflow">else</span>
  548. 00888 {
  549. 00889 <span class="comment">// egress router</span>
  550. 00890
  551. 00891 lop.<a class="code" href="struct_label_op.html#o0">label</a> = 0;
  552. 00892 lop.<a class="code" href="struct_label_op.html#o1">optcode</a> = <a class="code" href="_l_i_b_table_8h.html#a2">POP_OPER</a>;
  553. 00893 outLabel.push_back(lop);
  554. 00894
  555. 00895 outInterface = <span class="stringliteral">"lo0"</span>;
  556. 00896
  557. 00897 <span class="keywordflow">if</span> (!<a class="code" href="class_r_s_v_p.html#r4">tedmod</a>-&gt;<a class="code" href="class_t_e_d.html#z61_5">isLocalAddress</a>(psb-&gt;Session_Object.DestAddress))
  558. 00898 {
  559. 00899 <a class="code" href="class_interface_entry.html">InterfaceEntry</a> *ie = <a class="code" href="class_r_s_v_p.html#r5">rt</a>-&gt;<a class="code" href="class_routing_table.html#z42_2">interfaceForDestAddr</a>(psb-&gt;Session_Object.DestAddress);
  560. 00900 <span class="keywordflow">if</span> (ie)
  561. 00901 outInterface = ie-&gt;name(); <span class="comment">// FIXME why use name to identify an interface?</span>
  562. 00902 }
  563. 00903 }
  564. 00904
  565. 00905 EV &lt;&lt; "installing label for " &lt;&lt; lspid &lt;&lt; " outLabel=" &lt;&lt; outLabel &lt;&lt;
  566. 00906 " outInterface=" &lt;&lt; outInterface &lt;&lt; endl;
  567. 00907
  568. 00908 ASSERT(rsb-&gt;inLabelVector.size() == rsb-&gt;FlowDescriptor.size());
  569. 00909
  570. 00910 <span class="keywordtype">int</span> inLabel = lt-&gt;installLibEntry(rsb-&gt;inLabelVector[i], inInterface,
  571. 00911 outLabel, outInterface, psb-&gt;color);
  572. 00912
  573. 00913 ASSERT(inLabel &gt;= 0);
  574. 00914
  575. 00915 if (IR &amp;&amp; rsb-&gt;inLabelVector[i] == -1)
  576. 00916 {
  577. 00917 <span class="comment">// path established</span>
  578. 00918 <a class="code" href="class_r_s_v_p.html#b35">sendPathNotify</a>(psb-&gt;handler, psb-&gt;Session_Object, psb-&gt;Sender_Template_Object, PATH_CREATED, 0.0);
  579. 00919 }
  580. 00920
  581. 00921 <span class="keywordflow">if</span> (rsb-&gt;inLabelVector[i] != inLabel)
  582. 00922 {
  583. 00923 <span class="comment">// remember our current label</span>
  584. 00924 rsb-&gt;inLabelVector[i] = inLabel;
  585. 00925
  586. 00926 <span class="comment">// bind fec</span>
  587. 00927 <a class="code" href="class_r_s_v_p.html#r9">rpct</a>-&gt;<a class="code" href="class_i_r_s_v_p_classifier.html#a1">bind</a>(psb-&gt;Session_Object, psb-&gt;Sender_Template_Object, inLabel);
  588. 00928 }
  589. 00929
  590. 00930 <span class="comment">// schedule commit of merging backups too...</span>
  591. 00931 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> j = 0; j &lt; <a class="code" href="class_r_s_v_p.html#r15">RSBList</a>.size(); j++)
  592. 00932 {
  593. 00933 <span class="keywordflow">if</span> (RSBList[j].OI != lspid)
  594. 00934 continue;
  595. 00935
  596. 00936 scheduleCommitTimer(&amp;RSBList[j]);
  597. 00937 }
  598. 00938 }
  599. 00939 }
  600. </pre></div>
  601. <p>
  602. </td>
  603. </tr>
  604. </table>
  605. <a class="anchor" name="b19" doxytag="RSVP::createEgressRSB"></a><p>
  606. <table class="mdTable" cellpadding="2" cellspacing="0">
  607. <tr>
  608. <td class="mdRow">
  609. <table cellpadding="0" cellspacing="0" border="0">
  610. <tr>
  611. <td class="md" nowrap valign="top"><a class="el" href="struct_r_s_v_p_1_1_resv_state_block__t.html">RSVP::ResvStateBlock_t</a> * RSVP::createEgressRSB </td>
  612. <td class="md" valign="top">(&nbsp;</td>
  613. <td class="md" nowrap valign="top"><a class="el" href="struct_r_s_v_p_1_1_path_state_block__t.html">PathStateBlock_t</a> *&nbsp;</td>
  614. <td class="mdname1" valign="top" nowrap> <em>psb</em> </td>
  615. <td class="md" valign="top">&nbsp;)&nbsp;</td>
  616. <td class="md" nowrap><code> [protected]</code></td>
  617. </tr>
  618. </table>
  619. </td>
  620. </tr>
  621. </table>
  622. <table cellspacing="5" cellpadding="0" border="0">
  623. <tr>
  624. <td>
  625. &nbsp;
  626. </td>
  627. <td>
  628. <p>
  629. <div class="fragment"><pre class="fragment">01284 {
  630. 01285 ResvStateBlock_t rsbEle;
  631. 01286
  632. 01287 rsbEle.id = ++<a class="code" href="class_r_s_v_p.html#r11">maxRsbId</a>;
  633. 01288
  634. 01289 rsbEle.timeoutMsg = <span class="keyword">new</span> <a class="code" href="class_rsb_timeout_msg.html">RsbTimeoutMsg</a>(<span class="stringliteral">"rsb timeout"</span>);
  635. 01290 rsbEle.timeoutMsg-&gt;setId(rsbEle.id);
  636. 01291
  637. 01292 rsbEle.refreshTimerMsg = <span class="keyword">new</span> <a class="code" href="class_rsb_refresh_timer_msg.html">RsbRefreshTimerMsg</a>(<span class="stringliteral">"rsb timer"</span>);
  638. 01293 rsbEle.refreshTimerMsg-&gt;setId(rsbEle.id);
  639. 01294
  640. 01295 rsbEle.commitTimerMsg = <span class="keyword">new</span> <a class="code" href="class_rsb_commit_timer_msg.html">RsbCommitTimerMsg</a>(<span class="stringliteral">"rsb commit"</span>);
  641. 01296 rsbEle.commitTimerMsg-&gt;setId(rsbEle.id);
  642. 01297
  643. 01298 rsbEle.Session_Object = psb-&gt;Session_Object;
  644. 01299 rsbEle.Next_Hop_Address = psb-&gt;Previous_Hop_Address;
  645. 01300
  646. 01301 rsbEle.OI = psb-&gt;OutInterface;
  647. 01302
  648. 01303 <a class="code" href="struct_flow_descriptor__t.html">FlowDescriptor_t</a> flow;
  649. 01304 flow.<a class="code" href="struct_flow_descriptor__t.html#o0">Flowspec_Object</a> = (<a class="code" href="struct_flow_spec_obj__t.html">FlowSpecObj_t</a>&amp;)psb-&gt;Sender_Tspec_Object;
  650. 01305 flow.<a class="code" href="struct_flow_descriptor__t.html#o1">Filter_Spec_Object</a> = (<a class="code" href="struct_filter_spec_obj__t.html">FilterSpecObj_t</a>&amp;)psb-&gt;Sender_Template_Object;
  651. 01306 flow.<a class="code" href="struct_flow_descriptor__t.html#o3">label</a> = -1;
  652. 01307
  653. 01308 rsbEle.FlowDescriptor.push_back(flow);
  654. 01309 rsbEle.inLabelVector.push_back(-1);
  655. 01310
  656. 01311 <a class="code" href="class_r_s_v_p.html#r15">RSBList</a>.push_back(rsbEle);
  657. 01312 ResvStateBlock_t *rsb = &amp;(*(<a class="code" href="class_r_s_v_p.html#r15">RSBList</a>.end() - 1));
  658. 01313
  659. 01314 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> &lt;&lt; <span class="stringliteral">"created new (egress) RSB "</span> &lt;&lt; rsb-&gt;id &lt;&lt; endl;
  660. 01315
  661. 01316 <span class="keywordflow">return</span> rsb;
  662. 01317 }
  663. </pre></div>
  664. <p>
  665. </td>
  666. </tr>
  667. </table>
  668. <a class="anchor" name="b16" doxytag="RSVP::createIngressPSB"></a><p>
  669. <table class="mdTable" cellpadding="2" cellspacing="0">
  670. <tr>
  671. <td class="mdRow">
  672. <table cellpadding="0" cellspacing="0" border="0">
  673. <tr>
  674. <td class="md" nowrap valign="top"><a class="el" href="struct_r_s_v_p_1_1_path_state_block__t.html">RSVP::PathStateBlock_t</a> * RSVP::createIngressPSB </td>
  675. <td class="md" valign="top">(&nbsp;</td>
  676. <td class="md" nowrap valign="top">const <a class="el" href="struct_r_s_v_p_1_1traffic__session__t.html">traffic_session_t</a> &amp;&nbsp;</td>
  677. <td class="mdname" nowrap> <em>session</em>, </td>
  678. </tr>
  679. <tr>
  680. <td class="md" nowrap align="right"></td>
  681. <td class="md"></td>
  682. <td class="md" nowrap>const <a class="el" href="struct_r_s_v_p_1_1traffic__path__t.html">traffic_path_t</a> &amp;&nbsp;</td>
  683. <td class="mdname" nowrap> <em>path</em></td>
  684. </tr>
  685. <tr>
  686. <td class="md"></td>
  687. <td class="md">)&nbsp;</td>
  688. <td class="md" colspan="2"><code> [protected]</code></td>
  689. </tr>
  690. </table>
  691. </td>
  692. </tr>
  693. </table>
  694. <table cellspacing="5" cellpadding="0" border="0">
  695. <tr>
  696. <td>
  697. &nbsp;
  698. </td>
  699. <td>
  700. <p>
  701. <div class="fragment"><pre class="fragment">01236 {
  702. 01237 <a class="code" href="_int_serv__m_8h.html#a2">EroVector</a> ERO = path.ERO;
  703. 01238
  704. 01239 <span class="keywordflow">while</span>(ERO.size() &gt; 0 &amp;&amp; ERO[0].node == <a class="code" href="class_r_s_v_p.html#r13">routerId</a>)
  705. 01240 {
  706. 01241 <span class="comment">// remove ourselves from the beginning of the hop list</span>
  707. 01242 ERO.erase(ERO.begin());
  708. 01243 }
  709. 01244
  710. 01245 <a class="code" href="class_i_p_address.html">IPAddress</a> OI;
  711. 01246
  712. 01247 <span class="keywordflow">if</span> (!<a class="code" href="class_r_s_v_p.html#b44">evalNextHopInterface</a>(session.sobj.DestAddress, ERO, OI))
  713. 01248 return NULL;
  714. 01249
  715. 01250 if (!doCACCheck(session.sobj, path.tspec, OI))
  716. 01251 return NULL;
  717. 01252
  718. 01253 EV &lt;&lt; "CACCheck passed, creating PSB" &lt;&lt; endl;
  719. 01254
  720. 01255 PathStateBlock_t psbEle;
  721. 01256 psbEle.<span class="keywordtype">id</span> = ++maxPsbId;
  722. 01257
  723. 01258 psbEle.timeoutMsg = new <a class="code" href="class_psb_timeout_msg.html">PsbTimeoutMsg</a>("psb timeout");
  724. 01259 psbEle.timeoutMsg-&gt;setId(psbEle.<span class="keywordtype">id</span>);
  725. 01260
  726. 01261 psbEle.timerMsg = new <a class="code" href="class_psb_timer_msg.html">PsbTimerMsg</a>("psb timer");
  727. 01262 psbEle.timerMsg-&gt;setId(psbEle.<span class="keywordtype">id</span>);
  728. 01263
  729. 01264 psbEle.Session_Object = session.sobj;
  730. 01265 psbEle.Sender_Template_Object = path.sender;
  731. 01266 psbEle.Sender_Tspec_Object = path.tspec;
  732. 01267
  733. 01268 psbEle.Previous_Hop_Address = routerId;
  734. 01269
  735. 01270 psbEle.OutInterface = OI;
  736. 01271 psbEle.ERO = ERO;
  737. 01272 psbEle.color = path.color;
  738. 01273
  739. 01274 psbEle.handler = path.owner;
  740. 01275
  741. 01276 PSBList.push_back(psbEle);
  742. 01277 PathStateBlock_t *cPSB = &amp;(*(PSBList.end() - 1));
  743. 01278
  744. 01279 return cPSB;
  745. 01280 }
  746. </pre></div>
  747. <p>
  748. </td>
  749. </tr>
  750. </table>
  751. <a class="anchor" name="b57" doxytag="RSVP::createPath"></a><p>
  752. <table class="mdTable" cellpadding="2" cellspacing="0">
  753. <tr>
  754. <td class="mdRow">
  755. <table cellpadding="0" cellspacing="0" border="0">
  756. <tr>
  757. <td class="md" nowrap valign="top">void RSVP::createPath </td>
  758. <td class="md" valign="top">(&nbsp;</td>
  759. <td class="md" nowrap valign="top">const <a class="el" href="struct_session_obj__t.html">SessionObj_t</a> &amp;&nbsp;</td>
  760. <td class="mdname" nowrap> <em>session</em>, </td>
  761. </tr>
  762. <tr>
  763. <td class="md" nowrap align="right"></td>
  764. <td class="md"></td>
  765. <td class="md" nowrap>const <a class="el" href="struct_sender_template_obj__t.html">SenderTemplateObj_t</a> &amp;&nbsp;</td>
  766. <td class="mdname" nowrap> <em>sender</em></td>
  767. </tr>
  768. <tr>
  769. <td class="md"></td>
  770. <td class="md">)&nbsp;</td>
  771. <td class="md" colspan="2"><code> [protected]</code></td>
  772. </tr>
  773. </table>
  774. </td>
  775. </tr>
  776. </table>
  777. <table cellspacing="5" cellpadding="0" border="0">
  778. <tr>
  779. <td>
  780. &nbsp;
  781. </td>
  782. <td>
  783. <p>
  784. <div class="fragment"><pre class="fragment">00091 {
  785. 00092 <span class="keywordflow">if</span> (<a class="code" href="class_r_s_v_p.html#b45">findPSB</a>(session, sender))
  786. 00093 {
  787. 00094 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> &lt;&lt; <span class="stringliteral">"path (PSB) already exists, doing nothing"</span> &lt;&lt; endl;
  788. 00095 <span class="keywordflow">return</span>;
  789. 00096 }
  790. 00097
  791. 00098 <span class="comment">// find entry in traffic database</span>
  792. 00099
  793. 00100 std::vector&lt;traffic_session_t&gt;::iterator sit;
  794. 00101 sit = <a class="code" href="class_r_s_v_p.html#b49">findSession</a>(session);
  795. 00102
  796. 00103 <span class="keywordflow">if</span> (sit == <a class="code" href="class_r_s_v_p.html#r0">traffic</a>.end())
  797. 00104 {
  798. 00105 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> &lt;&lt; <span class="stringliteral">"session not found in traffic database, path won't be created"</span> &lt;&lt; endl;
  799. 00106 <span class="keywordflow">return</span>;
  800. 00107 }
  801. 00108
  802. 00109 std::vector&lt;traffic_path_t&gt;::iterator pit;
  803. 00110 pit = <a class="code" href="class_r_s_v_p.html#b50">findPath</a>(&amp;(*sit), sender);
  804. 00111
  805. 00112 <span class="keywordflow">if</span> (pit == sit-&gt;paths.end())
  806. 00113 {
  807. 00114 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> &lt;&lt; <span class="stringliteral">"path doesn't belong to this session according to our database, doing nothing"</span> &lt;&lt; endl;
  808. 00115 <span class="keywordflow">return</span>;
  809. 00116 }
  810. 00117
  811. 00118 PathStateBlock_t *psb = <a class="code" href="class_r_s_v_p.html#b16">createIngressPSB</a>(*sit, *pit);
  812. 00119 <span class="keywordflow">if</span> (psb)
  813. 00120 {
  814. 00121 <span class="comment">// PSB successfully created, send path message downstream</span>
  815. 00122 <a class="code" href="class_r_s_v_p.html#b27">scheduleRefreshTimer</a>(psb, 0.0);
  816. 00123 }
  817. 00124 <span class="keywordflow">else</span>
  818. 00125 {
  819. 00126 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> &lt;&lt; <span class="stringliteral">"ingress PSB couln't be created"</span> &lt;&lt; endl;
  820. 00127
  821. 00128 <span class="comment">// inform the owner of this path</span>
  822. 00129 <a class="code" href="class_r_s_v_p.html#b35">sendPathNotify</a>(pit-&gt;owner, sit-&gt;sobj, pit-&gt;sender, PATH_UNFEASIBLE, 0.0);
  823. 00130
  824. 00131 <span class="comment">// remove non-permanent path</span>
  825. 00132 <span class="keywordflow">if</span> (!pit-&gt;permanent)
  826. 00133 {
  827. 00134 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> &lt;&lt; <span class="stringliteral">"removing path from traffic database"</span> &lt;&lt; endl;
  828. 00135
  829. 00136 sit-&gt;paths.erase(pit--);
  830. 00137 }
  831. 00138 <span class="keywordflow">else</span>
  832. 00139 {
  833. 00140 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> &lt;&lt; <span class="stringliteral">"path is permanent, we will try again later"</span> &lt;&lt; endl;
  834. 00141
  835. 00142 <a class="code" href="class_r_s_v_p.html#b35">sendPathNotify</a>(<span class="keywordtype">id</span>(), sit-&gt;sobj, pit-&gt;sender, PATH_RETRY, retryInterval);
  836. 00143 }
  837. 00144 }
  838. 00145 }
  839. </pre></div>
  840. <p>
  841. </td>
  842. </tr>
  843. </table>
  844. <a class="anchor" name="b15" doxytag="RSVP::createPSB"></a><p>
  845. <table class="mdTable" cellpadding="2" cellspacing="0">
  846. <tr>
  847. <td class="mdRow">
  848. <table cellpadding="0" cellspacing="0" border="0">
  849. <tr>
  850. <td class="md" nowrap valign="top"><a class="el" href="struct_r_s_v_p_1_1_path_state_block__t.html">RSVP::PathStateBlock_t</a> * RSVP::createPSB </td>
  851. <td class="md" valign="top">(&nbsp;</td>
  852. <td class="md" nowrap valign="top"><a class="el" href="class_r_s_v_p_path_msg.html">RSVPPathMsg</a> *&nbsp;</td>
  853. <td class="mdname1" valign="top" nowrap> <em>msg</em> </td>
  854. <td class="md" valign="top">&nbsp;)&nbsp;</td>
  855. <td class="md" nowrap><code> [protected]</code></td>
  856. </tr>
  857. </table>
  858. </td>
  859. </tr>
  860. </table>
  861. <table cellspacing="5" cellpadding="0" border="0">
  862. <tr>
  863. <td>
  864. &nbsp;
  865. </td>
  866. <td>
  867. <p>
  868. <div class="fragment"><pre class="fragment">01190 {
  869. 01191 <span class="keyword">const</span> <a class="code" href="_int_serv__m_8h.html#a2">EroVector</a>&amp; ERO = msg-&gt;<a class="code" href="class_r_s_v_p_path_msg___base.html#a13">getERO</a>();
  870. 01192 <a class="code" href="class_i_p_address.html">IPAddress</a> destAddr = msg-&gt;<a class="code" href="class_r_s_v_p_packet.html#a4">getDestAddress</a>();
  871. 01193
  872. 01194 <span class="comment">//</span>
  873. 01195
  874. 01196 <a class="code" href="class_i_p_address.html">IPAddress</a> OI;
  875. 01197
  876. 01198 <span class="keywordflow">if</span> (!<a class="code" href="class_r_s_v_p.html#b44">evalNextHopInterface</a>(destAddr, ERO, OI))
  877. 01199 return NULL;
  878. 01200
  879. 01201 if (tedmod-&gt;isLocalAddress(OI) &amp;&amp; !doCACCheck(msg-&gt;getSession(), msg-&gt;getSenderTspec(), OI))
  880. 01202 return NULL; <span class="comment">// not enough resources</span>
  881. 01203
  882. 01204 PathStateBlock_t psbEle;
  883. 01205
  884. 01206 psbEle.<span class="keywordtype">id</span> = ++maxPsbId;
  885. 01207
  886. 01208 psbEle.timeoutMsg = new <a class="code" href="class_psb_timeout_msg.html">PsbTimeoutMsg</a>("psb timeout");
  887. 01209 psbEle.timeoutMsg-&gt;setId(psbEle.<span class="keywordtype">id</span>);
  888. 01210
  889. 01211 psbEle.timerMsg = new <a class="code" href="class_psb_timer_msg.html">PsbTimerMsg</a>("psb timer");
  890. 01212 psbEle.timerMsg-&gt;setId(psbEle.<span class="keywordtype">id</span>);
  891. 01213
  892. 01214 psbEle.Session_Object = msg-&gt;getSession();
  893. 01215 psbEle.Sender_Template_Object = msg-&gt;getSenderTemplate();
  894. 01216 psbEle.Sender_Tspec_Object = msg-&gt;getSenderTspec();
  895. 01217
  896. 01218 psbEle.Previous_Hop_Address = msg-&gt;getNHOP();
  897. 01219 <span class="comment">//psbEle.LIH = msg-&gt;getLIH();</span>
  898. 01220
  899. 01221 psbEle.OutInterface = OI;
  900. 01222 psbEle.ERO = ERO;
  901. 01223
  902. 01224 psbEle.color = msg-&gt;getColor();
  903. 01225 psbEle.handler = -1;
  904. 01226
  905. 01227 PSBList.push_back(psbEle);
  906. 01228 PathStateBlock_t *cPSB = &amp;(*(PSBList.end() - 1));
  907. 01229
  908. 01230 EV &lt;&lt; "created new PSB " &lt;&lt; cPSB-&gt;<span class="keywordtype">id</span> &lt;&lt; endl;
  909. 01231
  910. 01232 return cPSB;
  911. 01233 }
  912. </pre></div>
  913. <p>
  914. </td>
  915. </tr>
  916. </table>
  917. <a class="anchor" name="b18" doxytag="RSVP::createRSB"></a><p>
  918. <table class="mdTable" cellpadding="2" cellspacing="0">
  919. <tr>
  920. <td class="mdRow">
  921. <table cellpadding="0" cellspacing="0" border="0">
  922. <tr>
  923. <td class="md" nowrap valign="top"><a class="el" href="struct_r_s_v_p_1_1_resv_state_block__t.html">RSVP::ResvStateBlock_t</a> * RSVP::createRSB </td>
  924. <td class="md" valign="top">(&nbsp;</td>
  925. <td class="md" nowrap valign="top"><a class="el" href="class_r_s_v_p_resv_msg.html">RSVPResvMsg</a> *&nbsp;</td>
  926. <td class="mdname1" valign="top" nowrap> <em>msg</em> </td>
  927. <td class="md" valign="top">&nbsp;)&nbsp;</td>
  928. <td class="md" nowrap><code> [protected]</code></td>
  929. </tr>
  930. </table>
  931. </td>
  932. </tr>
  933. </table>
  934. <table cellspacing="5" cellpadding="0" border="0">
  935. <tr>
  936. <td>
  937. &nbsp;
  938. </td>
  939. <td>
  940. <p>
  941. <div class="fragment"><pre class="fragment">00942 {
  942. 00943 ResvStateBlock_t rsbEle;
  943. 00944
  944. 00945 rsbEle.id = ++<a class="code" href="class_r_s_v_p.html#r11">maxRsbId</a>;
  945. 00946
  946. 00947 rsbEle.timeoutMsg = <span class="keyword">new</span> <a class="code" href="class_rsb_timeout_msg.html">RsbTimeoutMsg</a>(<span class="stringliteral">"rsb timeout"</span>);
  947. 00948 rsbEle.timeoutMsg-&gt;setId(rsbEle.id);
  948. 00949
  949. 00950 rsbEle.refreshTimerMsg = <span class="keyword">new</span> <a class="code" href="class_rsb_refresh_timer_msg.html">RsbRefreshTimerMsg</a>(<span class="stringliteral">"rsb timer"</span>);
  950. 00951 rsbEle.refreshTimerMsg-&gt;setId(rsbEle.id);
  951. 00952
  952. 00953 rsbEle.commitTimerMsg = <span class="keyword">new</span> <a class="code" href="class_rsb_commit_timer_msg.html">RsbCommitTimerMsg</a>(<span class="stringliteral">"rsb commit"</span>);
  953. 00954 rsbEle.commitTimerMsg-&gt;setId(rsbEle.id);
  954. 00955
  955. 00956 rsbEle.Session_Object = msg-&gt;<a class="code" href="class_r_s_v_p_packet___base.html#a4">getSession</a>();
  956. 00957 rsbEle.Next_Hop_Address = msg-&gt;<a class="code" href="class_r_s_v_p_resv_msg.html#a4">getNHOP</a>();
  957. 00958 rsbEle.OI = msg-&gt;<a class="code" href="class_r_s_v_p_resv_msg.html#a5">getLIH</a>();
  958. 00959
  959. 00960 ASSERT(rsbEle.inLabelVector.size() == rsbEle.FlowDescriptor.size());
  960. 00961
  961. 00962 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; msg-&gt;getFlowDescriptor().size(); i++)
  962. 00963 {
  963. 00964 <a class="code" href="struct_flow_descriptor__t.html">FlowDescriptor_t</a> flow = msg-&gt;<a class="code" href="class_r_s_v_p_resv_msg___base.html#a7">getFlowDescriptor</a>()[i];
  964. 00965 rsbEle.FlowDescriptor.push_back(flow);
  965. 00966 rsbEle.inLabelVector.push_back(-1);
  966. 00967 }
  967. 00968
  968. 00969 <a class="code" href="class_r_s_v_p.html#r15">RSBList</a>.push_back(rsbEle);
  969. 00970 ResvStateBlock_t *rsb = &amp;(*(<a class="code" href="class_r_s_v_p.html#r15">RSBList</a>.end() - 1));
  970. 00971
  971. 00972 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> &lt;&lt; <span class="stringliteral">"created new RSB "</span> &lt;&lt; rsb-&gt;id &lt;&lt; endl;
  972. 00973
  973. 00974 <span class="keywordflow">return</span> rsb;
  974. 00975 }
  975. </pre></div>
  976. <p>
  977. </td>
  978. </tr>
  979. </table>
  980. <a class="anchor" name="b60" doxytag="RSVP::delSession"></a><p>
  981. <table class="mdTable" cellpadding="2" cellspacing="0">
  982. <tr>
  983. <td class="mdRow">
  984. <table cellpadding="0" cellspacing="0" border="0">
  985. <tr>
  986. <td class="md" nowrap valign="top">void RSVP::delSession </td>
  987. <td class="md" valign="top">(&nbsp;</td>
  988. <td class="md" nowrap valign="top">const cXMLElement &amp;&nbsp;</td>
  989. <td class="mdname1" valign="top" nowrap> <em>node</em> </td>
  990. <td class="md" valign="top">&nbsp;)&nbsp;</td>
  991. <td class="md" nowrap><code> [protected]</code></td>
  992. </tr>
  993. </table>
  994. </td>
  995. </tr>
  996. </table>
  997. <table cellspacing="5" cellpadding="0" border="0">
  998. <tr>
  999. <td>
  1000. &nbsp;
  1001. </td>
  1002. <td>
  1003. <p>
  1004. <div class="fragment"><pre class="fragment">01862 {
  1005. 01863 Enter_Method_Silent();
  1006. 01864
  1007. 01865 <a class="code" href="_x_m_l_utils_8cc.html#a3">checkTags</a>(&amp;node, <span class="stringliteral">"tunnel_id extended_tunnel_id endpoint paths"</span>);
  1008. 01866
  1009. 01867 <a class="code" href="struct_session_obj__t.html">SessionObj_t</a> sobj;
  1010. 01868
  1011. 01869 sobj.<a class="code" href="struct_session_obj__t.html#o0">Tunnel_Id</a> = <a class="code" href="_x_m_l_utils_8cc.html#a8">getParameterIntValue</a>(&amp;node, <span class="stringliteral">"tunnel_id"</span>);
  1012. 01870 sobj.<a class="code" href="struct_session_obj__t.html#o1">Extended_Tunnel_Id</a> = <a class="code" href="_x_m_l_utils_8cc.html#a10">getParameterIPAddressValue</a>(&amp;node, <span class="stringliteral">"extended_tunnel_id"</span>, routerId).<a class="code" href="class_i_p_address.html#a5">getInt</a>();
  1013. 01871 sobj.<a class="code" href="struct_session_obj__t.html#o2">DestAddress</a> = <a class="code" href="_x_m_l_utils_8cc.html#a10">getParameterIPAddressValue</a>(&amp;node, <span class="stringliteral">"endpoint"</span>);
  1014. 01872
  1015. 01873 std::vector&lt;traffic_session_t&gt;::iterator sit = <a class="code" href="class_r_s_v_p.html#b49">findSession</a>(sobj);
  1016. 01874 ASSERT(sit != <a class="code" href="class_r_s_v_p.html#r0">traffic</a>.end());
  1017. 01875 traffic_session_t *session = &amp;(*sit);
  1018. 01876
  1019. 01877 <span class="keyword">const</span> cXMLElement *paths = <a class="code" href="_x_m_l_utils_8cc.html#a1">getUniqueChildIfExists</a>(&amp;node, <span class="stringliteral">"paths"</span>);
  1020. 01878 cXMLElementList pathList;
  1021. 01879 <span class="keywordflow">if</span> (paths)
  1022. 01880 {
  1023. 01881 <span class="comment">// only specified paths will be removed, session remains</span>
  1024. 01882
  1025. 01883 <a class="code" href="_x_m_l_utils_8cc.html#a3">checkTags</a>(paths, <span class="stringliteral">"path"</span>);
  1026. 01884 pathList = paths-&gt;getChildrenByTagName(<span class="stringliteral">"path"</span>);
  1027. 01885 }
  1028. 01886
  1029. 01887 std::vector&lt;traffic_path_t&gt;::iterator it;
  1030. 01888 <span class="keywordflow">for</span> (it = session-&gt;paths.begin(); it != session-&gt;paths.end(); it++)
  1031. 01889 {
  1032. 01890 <span class="keywordtype">bool</span> remove;
  1033. 01891
  1034. 01892 <span class="keywordflow">if</span> (paths)
  1035. 01893 {
  1036. 01894 remove = <span class="keyword">false</span>;
  1037. 01895
  1038. 01896 <span class="keywordflow">for</span> (cXMLElementList::iterator p=pathList.begin(); p != pathList.end(); p++)
  1039. 01897 {
  1040. 01898 <span class="keywordflow">if</span> (it-&gt;sender.Lsp_Id != <a class="code" href="_x_m_l_utils_8cc.html#a8">getParameterIntValue</a>(*p, <span class="stringliteral">"lspid"</span>))
  1041. 01899 continue;
  1042. 01900
  1043. 01901 <span class="comment">// remove path from session</span>
  1044. 01902
  1045. 01903 remove = true;
  1046. 01904 break;
  1047. 01905 }
  1048. 01906 }
  1049. 01907 else
  1050. 01908 {
  1051. 01909 <span class="comment">// remove all paths</span>
  1052. 01910
  1053. 01911 remove = <span class="keyword">true</span>;
  1054. 01912 }
  1055. 01913
  1056. 01914 <span class="keywordflow">if</span> (remove)
  1057. 01915 {
  1058. 01916 PathStateBlock_t *psb = <a class="code" href="class_r_s_v_p.html#b45">findPSB</a>(session-&gt;sobj, it-&gt;sender);
  1059. 01917 <span class="keywordflow">if</span> (psb)
  1060. 01918 {
  1061. 01919 ASSERT(psb-&gt;ERO.size() &gt; 0);
  1062. 01920
  1063. 01921 <a class="code" href="class_r_s_v_p.html#b34">sendPathTearMessage</a>(psb-&gt;ERO[0].node, psb-&gt;Session_Object, psb-&gt;Sender_Template_Object,
  1064. 01922 <a class="code" href="class_r_s_v_p.html#r4">tedmod</a>-&gt;<a class="code" href="class_t_e_d.html#z61_0">interfaceAddrByPeerAddress</a>(psb-&gt;ERO[0].node), <a class="code" href="class_r_s_v_p.html#r13">routerId</a>, <span class="keyword">true</span>);
  1065. 01923
  1066. 01924 <a class="code" href="class_r_s_v_p.html#b17">removePSB</a>(psb);
  1067. 01925 }
  1068. 01926
  1069. 01927 session-&gt;paths.erase(it--);
  1070. 01928 }
  1071. 01929 }
  1072. 01930
  1073. 01931 <span class="keywordflow">if</span> (!paths)
  1074. 01932 {
  1075. 01933 <a class="code" href="class_r_s_v_p.html#r0">traffic</a>.erase(sit);
  1076. 01934 }
  1077. 01935 }
  1078. </pre></div>
  1079. <p>
  1080. </td>
  1081. </tr>
  1082. </table>
  1083. <a class="anchor" name="b41" doxytag="RSVP::doCACCheck"></a><p>
  1084. <table class="mdTable" cellpadding="2" cellspacing="0">
  1085. <tr>
  1086. <td class="mdRow">
  1087. <table cellpadding="0" cellspacing="0" border="0">
  1088. <tr>
  1089. <td class="md" nowrap valign="top">bool RSVP::doCACCheck </td>
  1090. <td class="md" valign="top">(&nbsp;</td>
  1091. <td class="md" nowrap valign="top">const <a class="el" href="struct_session_obj__t.html">SessionObj_t</a> &amp;&nbsp;</td>
  1092. <td class="mdname" nowrap> <em>session</em>, </td>
  1093. </tr>
  1094. <tr>
  1095. <td class="md" nowrap align="right"></td>
  1096. <td class="md"></td>
  1097. <td class="md" nowrap>const <a class="el" href="struct_sender_tspec_obj__t.html">SenderTspecObj_t</a> &amp;&nbsp;</td>
  1098. <td class="mdname" nowrap> <em>tspec</em>, </td>
  1099. </tr>
  1100. <tr>
  1101. <td class="md" nowrap align="right"></td>
  1102. <td class="md"></td>
  1103. <td class="md" nowrap><a class="el" href="class_i_p_address.html">IPAddress</a>&nbsp;</td>
  1104. <td class="mdname" nowrap> <em>OI</em></td>
  1105. </tr>
  1106. <tr>
  1107. <td class="md"></td>
  1108. <td class="md">)&nbsp;</td>
  1109. <td class="md" colspan="2"><code> [protected]</code></td>
  1110. </tr>
  1111. </table>
  1112. </td>
  1113. </tr>
  1114. </table>
  1115. <table cellspacing="5" cellpadding="0" border="0">
  1116. <tr>
  1117. <td>
  1118. &nbsp;
  1119. </td>
  1120. <td>
  1121. <p>
  1122. <div class="fragment"><pre class="fragment">00535 {
  1123. 00536 ASSERT(<a class="code" href="class_r_s_v_p.html#r4">tedmod</a>-&gt;<a class="code" href="class_t_e_d.html#z61_5">isLocalAddress</a>(OI));
  1124. 00537
  1125. 00538 <span class="keywordtype">int</span> k = <a class="code" href="class_r_s_v_p.html#r4">tedmod</a>-&gt;<a class="code" href="class_t_e_d.html#z61_6">linkIndex</a>(OI);
  1126. 00539
  1127. 00540 <span class="keywordtype">double</span> sharedBW = 0.0;
  1128. 00541
  1129. 00542 <span class="keywordflow">for</span> (RSBVector::iterator it = <a class="code" href="class_r_s_v_p.html#r15">RSBList</a>.begin(); it != <a class="code" href="class_r_s_v_p.html#r15">RSBList</a>.end(); it++)
  1130. 00543 {
  1131. 00544 <span class="keywordflow">if</span> (it-&gt;Session_Object != session)
  1132. 00545 continue;
  1133. 00546
  1134. 00547 if (it-&gt;Flowspec_Object.req_bandwidth &lt;= sharedBW)
  1135. 00548 continue;
  1136. 00549
  1137. 00550 sharedBW = it-&gt;Flowspec_Object.req_bandwidth;
  1138. 00551 }
  1139. 00552
  1140. 00553 EV &lt;&lt; "CACCheck: link=" &lt;&lt; OI &lt;&lt;
  1141. 00554 " requested=" &lt;&lt; tspec.req_bandwidth &lt;&lt;
  1142. 00555 " shared=" &lt;&lt; sharedBW &lt;&lt;
  1143. 00556 " available (immediately)=" &lt;&lt; tedmod-&gt;ted[k].UnResvBandwidth[7] &lt;&lt;
  1144. 00557 " available (preemptible)=" &lt;&lt; tedmod-&gt;ted[k].UnResvBandwidth[session.setupPri] &lt;&lt; endl;
  1145. 00558
  1146. 00559 return (tedmod-&gt;ted[k].UnResvBandwidth[session.setupPri] + sharedBW &gt;= tspec.req_bandwidth);
  1147. 00560 }
  1148. </pre></div>
  1149. <p>
  1150. </td>
  1151. </tr>
  1152. </table>
  1153. <a class="anchor" name="b44" doxytag="RSVP::evalNextHopInterface"></a><p>
  1154. <table class="mdTable" cellpadding="2" cellspacing="0">
  1155. <tr>
  1156. <td class="mdRow">
  1157. <table cellpadding="0" cellspacing="0" border="0">
  1158. <tr>
  1159. <td class="md" nowrap valign="top">bool RSVP::evalNextHopInterface </td>
  1160. <td class="md" valign="top">(&nbsp;</td>
  1161. <td class="md" nowrap valign="top"><a class="el" href="class_i_p_address.html">IPAddress</a>&nbsp;</td>
  1162. <td class="mdname" nowrap> <em>destAddr</em>, </td>
  1163. </tr>
  1164. <tr>
  1165. <td class="md" nowrap align="right"></td>
  1166. <td class="md"></td>
  1167. <td class="md" nowrap>const <a class="el" href="_int_serv__m_8h.html#a2">EroVector</a> &amp;&nbsp;</td>
  1168. <td class="mdname" nowrap> <em>ERO</em>, </td>
  1169. </tr>
  1170. <tr>
  1171. <td class="md" nowrap align="right"></td>
  1172. <td class="md"></td>
  1173. <td class="md" nowrap><a class="el" href="class_i_p_address.html">IPAddress</a> &amp;&nbsp;</td>
  1174. <td class="mdname" nowrap> <em>OI</em></td>
  1175. </tr>
  1176. <tr>
  1177. <td class="md"></td>
  1178. <td class="md">)&nbsp;</td>
  1179. <td class="md" colspan="2"><code> [protected]</code></td>
  1180. </tr>
  1181. </table>
  1182. </td>
  1183. </tr>
  1184. </table>
  1185. <table cellspacing="5" cellpadding="0" border="0">
  1186. <tr>
  1187. <td>
  1188. &nbsp;
  1189. </td>
  1190. <td>
  1191. <p>
  1192. <div class="fragment"><pre class="fragment">01114 {
  1193. 01115 <span class="keywordflow">if</span> (ERO.size() &gt; 0)
  1194. 01116 {
  1195. 01117 <span class="comment">// explicit routing</span>
  1196. 01118
  1197. 01119 <span class="keywordflow">if</span> (ERO[0].L)
  1198. 01120 {
  1199. 01121 <a class="code" href="class_interface_entry.html">InterfaceEntry</a> *ie = <a class="code" href="class_r_s_v_p.html#r5">rt</a>-&gt;<a class="code" href="class_routing_table.html#z42_2">interfaceForDestAddr</a>(ERO[0].node);
  1200. 01122
  1201. 01123 <span class="keywordflow">if</span> (!ie)
  1202. 01124 {
  1203. 01125 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> &lt;&lt; <span class="stringliteral">"next (loose) hop address "</span> &lt;&lt; ERO[0].node &lt;&lt; <span class="stringliteral">" is currently unroutable"</span> &lt;&lt; endl;
  1204. 01126 <span class="keywordflow">return</span> <span class="keyword">false</span>;
  1205. 01127 }
  1206. 01128
  1207. 01129 OI = ie-&gt;<a class="code" href="class_interface_entry.html#a33">ipv4</a>()-&gt;<a class="code" href="class_i_pv4_interface_data.html#a4">inetAddress</a>();
  1208. 01130
  1209. 01131 }
  1210. 01132 <span class="keywordflow">else</span>
  1211. 01133 {
  1212. 01134 OI = <a class="code" href="class_r_s_v_p.html#r4">tedmod</a>-&gt;<a class="code" href="class_t_e_d.html#z61_0">interfaceAddrByPeerAddress</a>(ERO[0].node);
  1213. 01135 }
  1214. 01136
  1215. 01137 <a class="code" href="class_i_p_address.html">IPAddress</a> peer = <a class="code" href="class_r_s_v_p.html#r4">tedmod</a>-&gt;<a class="code" href="class_t_e_d.html#z61_2">peerByLocalAddress</a>(OI);
  1216. 01138 HelloState_t *h = <a class="code" href="class_r_s_v_p.html#b51">findHello</a>(peer);
  1217. 01139 <span class="keywordflow">if</span> (!h)
  1218. 01140 error("Peer %s on interface %s is not an <a class="code" href="class_r_s_v_p.html">RSVP</a> peer", peer.str().c_str(), OI.str().c_str());
  1219. 01141
  1220. 01142 <span class="comment">// ok, only if next hop is up and running</span>
  1221. 01143
  1222. 01144 return h-&gt;ok;
  1223. 01145 }
  1224. 01146 else
  1225. 01147 {
  1226. 01148 <span class="comment">// hop-by-hop routing</span>
  1227. 01149
  1228. 01150 <span class="keywordflow">if</span> (!<a class="code" href="class_r_s_v_p.html#r4">tedmod</a>-&gt;<a class="code" href="class_t_e_d.html#z61_5">isLocalAddress</a>(destAddr))
  1229. 01151 {
  1230. 01152 <a class="code" href="class_interface_entry.html">InterfaceEntry</a> *ie = <a class="code" href="class_r_s_v_p.html#r5">rt</a>-&gt;<a class="code" href="class_routing_table.html#z42_2">interfaceForDestAddr</a>(destAddr);
  1231. 01153
  1232. 01154 <span class="keywordflow">if</span> (!ie)
  1233. 01155 {
  1234. 01156 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> &lt;&lt; <span class="stringliteral">"destination address "</span> &lt;&lt; destAddr &lt;&lt; <span class="stringliteral">" is currently unroutable"</span> &lt;&lt; endl;
  1235. 01157 <span class="keywordflow">return</span> <span class="keyword">false</span>;
  1236. 01158 }
  1237. 01159
  1238. 01160 OI = ie-&gt;<a class="code" href="class_interface_entry.html#a33">ipv4</a>()-&gt;<a class="code" href="class_i_pv4_interface_data.html#a4">inetAddress</a>();
  1239. 01161
  1240. 01162 HelloState_t *h = <a class="code" href="class_r_s_v_p.html#b51">findHello</a>(<a class="code" href="class_r_s_v_p.html#r4">tedmod</a>-&gt;<a class="code" href="class_t_e_d.html#z61_2">peerByLocalAddress</a>(OI));
  1241. 01163 <span class="keywordflow">if</span> (!h)
  1242. 01164 {
  1243. 01165 <span class="comment">// outgoing interface is not LSR, we are egress router</span>
  1244. 01166
  1245. 01167 OI = <a class="code" href="class_i_p_address.html">IPAddress</a>();
  1246. 01168
  1247. 01169 <span class="keywordflow">return</span> <span class="keyword">true</span>;
  1248. 01170 }
  1249. 01171 <span class="keywordflow">else</span>
  1250. 01172 {
  1251. 01173 <span class="comment">// outgoing interface is LSR</span>
  1252. 01174
  1253. 01175 ASSERT(h-&gt;ok); <span class="comment">// rt-&gt;interfaceForDestAddr() wouldn't choose this entry</span>
  1254. 01176
  1255. 01177 <span class="keywordflow">return</span> h-&gt;ok;
  1256. 01178 }
  1257. 01179 }
  1258. 01180 <span class="keywordflow">else</span>
  1259. 01181 {
  1260. 01182 <span class="comment">// destAddress is ours, we're egress</span>
  1261. 01183
  1262. 01184 <span class="keywordflow">return</span> <span class="keyword">true</span>;
  1263. 01185 }
  1264. 01186 }
  1265. 01187 }
  1266. </pre></div>
  1267. <p>
  1268. </td>
  1269. </tr>
  1270. </table>
  1271. <a class="anchor" name="b51" doxytag="RSVP::findHello"></a><p>
  1272. <table class="mdTable" cellpadding="2" cellspacing="0">
  1273. <tr>
  1274. <td class="mdRow">
  1275. <table cellpadding="0" cellspacing="0" border="0">
  1276. <tr>
  1277. <td class="md" nowrap valign="top"><a class="el" href="struct_r_s_v_p_1_1_hello_state__t.html">RSVP::HelloState_t</a> * RSVP::findHello </td>
  1278. <td class="md" valign="top">(&nbsp;</td>
  1279. <td class="md" nowrap valign="top"><a class="el" href="class_i_p_address.html">IPAddress</a>&nbsp;</td>
  1280. <td class="mdname1" valign="top" nowrap> <em>peer</em> </td>
  1281. <td class="md" valign="top">&nbsp;)&nbsp;</td>
  1282. <td class="md" nowrap><code> [protected]</code></td>
  1283. </tr>
  1284. </table>
  1285. </td>
  1286. </tr>
  1287. </table>
  1288. <table cellspacing="5" cellpadding="0" border="0">
  1289. <tr>
  1290. <td>
  1291. &nbsp;
  1292. </td>
  1293. <td>
  1294. <p>
  1295. <div class="fragment"><pre class="fragment">02136 {
  1296. 02137 <span class="keywordflow">for</span> (HelloVector::iterator it = <a class="code" href="class_r_s_v_p.html#r16">HelloList</a>.begin(); it != <a class="code" href="class_r_s_v_p.html#r16">HelloList</a>.end(); it++)
  1297. 02138 {
  1298. 02139 <span class="keywordflow">if</span> (it-&gt;peer != peer)
  1299. 02140 continue;
  1300. 02141
  1301. 02142 return &amp;(*it);
  1302. 02143 }
  1303. 02144 return NULL;
  1304. 02145 }
  1305. </pre></div>
  1306. <p>
  1307. </td>
  1308. </tr>
  1309. </table>
  1310. <a class="anchor" name="b50" doxytag="RSVP::findPath"></a><p>
  1311. <table class="mdTable" cellpadding="2" cellspacing="0">
  1312. <tr>
  1313. <td class="mdRow">
  1314. <table cellpadding="0" cellspacing="0" border="0">
  1315. <tr>
  1316. <td class="md" nowrap valign="top">std::vector&lt; <a class="el" href="struct_r_s_v_p_1_1traffic__path__t.html">RSVP::traffic_path_t</a> &gt;::iterator RSVP::findPath </td>
  1317. <td class="md" valign="top">(&nbsp;</td>
  1318. <td class="md" nowrap valign="top"><a class="el" href="struct_r_s_v_p_1_1traffic__session__t.html">traffic_session_t</a> *&nbsp;</td>
  1319. <td class="mdname" nowrap> <em>session</em>, </td>
  1320. </tr>
  1321. <tr>
  1322. <td class="md" nowrap align="right"></td>
  1323. <td class="md"></td>
  1324. <td class="md" nowrap>const <a class="el" href="struct_sender_template_obj__t.html">SenderTemplateObj_t</a> &amp;&nbsp;</td>
  1325. <td class="mdname" nowrap> <em>sender</em></td>
  1326. </tr>
  1327. <tr>
  1328. <td class="md"></td>
  1329. <td class="md">)&nbsp;</td>
  1330. <td class="md" colspan="2"><code> [protected]</code></td>
  1331. </tr>
  1332. </table>
  1333. </td>
  1334. </tr>
  1335. </table>
  1336. <table cellspacing="5" cellpadding="0" border="0">
  1337. <tr>
  1338. <td>
  1339. &nbsp;
  1340. </td>
  1341. <td>
  1342. <p>
  1343. <div class="fragment"><pre class="fragment">00311 {
  1344. 00312 std::vector&lt;traffic_path_t&gt;::iterator it;
  1345. 00313 <span class="keywordflow">for</span> (it = session-&gt;paths.begin(); it != session-&gt;paths.end(); it++)
  1346. 00314 {
  1347. 00315 <span class="keywordflow">if</span> (it-&gt;sender != sender)
  1348. 00316 continue;
  1349. 00317
  1350. 00318 break;
  1351. 00319 }
  1352. 00320 return it;
  1353. 00321 }
  1354. </pre></div>
  1355. <p>
  1356. </td>
  1357. </tr>
  1358. </table>
  1359. <a class="anchor" name="b45" doxytag="RSVP::findPSB"></a><p>
  1360. <table class="mdTable" cellpadding="2" cellspacing="0">
  1361. <tr>
  1362. <td class="mdRow">
  1363. <table cellpadding="0" cellspacing="0" border="0">
  1364. <tr>
  1365. <td class="md" nowrap valign="top"><a class="el" href="struct_r_s_v_p_1_1_path_state_block__t.html">RSVP::PathStateBlock_t</a> * RSVP::findPSB </td>
  1366. <td class="md" valign="top">(&nbsp;</td>
  1367. <td class="md" nowrap valign="top">const <a class="el" href="struct_session_obj__t.html">SessionObj_t</a> &amp;&nbsp;</td>
  1368. <td class="mdname" nowrap> <em>session</em>, </td>
  1369. </tr>
  1370. <tr>
  1371. <td class="md" nowrap align="right"></td>
  1372. <td class="md"></td>
  1373. <td class="md" nowrap>const <a class="el" href="struct_sender_template_obj__t.html">SenderTemplateObj_t</a> &amp;&nbsp;</td>
  1374. <td class="mdname" nowrap> <em>sender</em></td>
  1375. </tr>
  1376. <tr>
  1377. <td class="md"></td>
  1378. <td class="md">)&nbsp;</td>
  1379. <td class="md" colspan="2"><code> [protected]</code></td>
  1380. </tr>
  1381. </table>
  1382. </td>
  1383. </tr>
  1384. </table>
  1385. <table cellspacing="5" cellpadding="0" border="0">
  1386. <tr>
  1387. <td>
  1388. &nbsp;
  1389. </td>
  1390. <td>
  1391. <p>
  1392. <div class="fragment"><pre class="fragment">02092 {
  1393. 02093 PSBVector::iterator it;
  1394. 02094 <span class="keywordflow">for</span> (it = <a class="code" href="class_r_s_v_p.html#r14">PSBList</a>.begin(); it != <a class="code" href="class_r_s_v_p.html#r14">PSBList</a>.end(); it++)
  1395. 02095 {
  1396. 02096 <span class="keywordflow">if</span> (it-&gt;Session_Object != session)
  1397. 02097 continue;
  1398. 02098
  1399. 02099 if (it-&gt;Sender_Template_Object != sender)
  1400. 02100 continue;
  1401. 02101
  1402. 02102 return &amp;(*it);
  1403. 02103 }
  1404. 02104
  1405. 02105 return NULL;
  1406. 02106 }
  1407. </pre></div>
  1408. <p>
  1409. </td>
  1410. </tr>
  1411. </table>
  1412. <a class="anchor" name="b47" doxytag="RSVP::findPsbById"></a><p>
  1413. <table class="mdTable" cellpadding="2" cellspacing="0">
  1414. <tr>
  1415. <td class="mdRow">
  1416. <table cellpadding="0" cellspacing="0" border="0">
  1417. <tr>
  1418. <td class="md" nowrap valign="top"><a class="el" href="struct_r_s_v_p_1_1_path_state_block__t.html">RSVP::PathStateBlock_t</a> * RSVP::findPsbById </td>
  1419. <td class="md" valign="top">(&nbsp;</td>
  1420. <td class="md" nowrap valign="top">int&nbsp;</td>
  1421. <td class="mdname1" valign="top" nowrap> <em>id</em> </td>
  1422. <td class="md" valign="top">&nbsp;)&nbsp;</td>
  1423. <td class="md" nowrap><code> [protected]</code></td>
  1424. </tr>
  1425. </table>
  1426. </td>
  1427. </tr>
  1428. </table>
  1429. <table cellspacing="5" cellpadding="0" border="0">
  1430. <tr>
  1431. <td>
  1432. &nbsp;
  1433. </td>
  1434. <td>
  1435. <p>
  1436. <div class="fragment"><pre class="fragment">02109 {
  1437. 02110 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; <a class="code" href="class_r_s_v_p.html#r14">PSBList</a>.size(); i++)
  1438. 02111 {
  1439. 02112 <span class="keywordflow">if</span> (PSBList[i].<span class="keywordtype">id</span> != <span class="keywordtype">id</span>)
  1440. 02113 continue;
  1441. 02114
  1442. 02115 return &amp;PSBList[i];
  1443. 02116 }
  1444. 02117 ASSERT(false);
  1445. 02118 return NULL; <span class="comment">// prevent warning</span>
  1446. 02119 }
  1447. </pre></div>
  1448. <p>
  1449. </td>
  1450. </tr>
  1451. </table>
  1452. <a class="anchor" name="b46" doxytag="RSVP::findRSB"></a><p>
  1453. <table class="mdTable" cellpadding="2" cellspacing="0">
  1454. <tr>
  1455. <td class="mdRow">
  1456. <table cellpadding="0" cellspacing="0" border="0">
  1457. <tr>
  1458. <td class="md" nowrap valign="top"><a class="el" href="struct_r_s_v_p_1_1_resv_state_block__t.html">RSVP::ResvStateBlock_t</a> * RSVP::findRSB </td>
  1459. <td class="md" valign="top">(&nbsp;</td>
  1460. <td class="md" nowrap valign="top">const <a class="el" href="struct_session_obj__t.html">SessionObj_t</a> &amp;&nbsp;</td>
  1461. <td class="mdname" nowrap> <em>session</em>, </td>
  1462. </tr>
  1463. <tr>
  1464. <td class="md" nowrap align="right"></td>
  1465. <td class="md"></td>
  1466. <td class="md" nowrap>const <a class="el" href="struct_sender_template_obj__t.html">SenderTemplateObj_t</a> &amp;&nbsp;</td>
  1467. <td class="mdname" nowrap> <em>sender</em>, </td>
  1468. </tr>
  1469. <tr>
  1470. <td class="md" nowrap align="right"></td>
  1471. <td class="md"></td>
  1472. <td class="md" nowrap>unsigned int &amp;&nbsp;</td>
  1473. <td class="mdname" nowrap> <em>index</em></td>
  1474. </tr>
  1475. <tr>
  1476. <td class="md"></td>
  1477. <td class="md">)&nbsp;</td>
  1478. <td class="md" colspan="2"><code> [protected]</code></td>
  1479. </tr>
  1480. </table>
  1481. </td>
  1482. </tr>
  1483. </table>
  1484. <table cellspacing="5" cellpadding="0" border="0">
  1485. <tr>
  1486. <td>
  1487. &nbsp;
  1488. </td>
  1489. <td>
  1490. <p>
  1491. <div class="fragment"><pre class="fragment">02065 {
  1492. 02066 RSBVector::iterator it;
  1493. 02067
  1494. 02068 <span class="keywordflow">for</span> (it = <a class="code" href="class_r_s_v_p.html#r15">RSBList</a>.begin(); it != <a class="code" href="class_r_s_v_p.html#r15">RSBList</a>.end(); it++)
  1495. 02069 {
  1496. 02070 <span class="keywordflow">if</span> (it-&gt;Session_Object != session)
  1497. 02071 continue;
  1498. 02072
  1499. 02073 FlowDescriptorVector::iterator fit;
  1500. 02074 index = 0;
  1501. 02075 for (fit = it-&gt;FlowDescriptor.begin(); fit != it-&gt;FlowDescriptor.end(); fit++)
  1502. 02076 {
  1503. 02077 <span class="keywordflow">if</span> ((<a class="code" href="struct_sender_template_obj__t.html">SenderTemplateObj_t</a>&amp;)fit-&gt;Filter_Spec_Object != sender)
  1504. 02078 {
  1505. 02079 ++index;
  1506. 02080 <span class="keywordflow">continue</span>;
  1507. 02081 }
  1508. 02082
  1509. 02083 <span class="keywordflow">return</span> &amp;(*it);
  1510. 02084 }
  1511. 02085
  1512. 02086 <span class="comment">// don't break here, may be in different (if outInterface is different)</span>
  1513. 02087 }
  1514. 02088 <span class="keywordflow">return</span> NULL;
  1515. 02089 }
  1516. </pre></div>
  1517. <p>
  1518. </td>
  1519. </tr>
  1520. </table>
  1521. <a class="anchor" name="b48" doxytag="RSVP::findRsbById"></a><p>
  1522. <table class="mdTable" cellpadding="2" cellspacing="0">
  1523. <tr>
  1524. <td class="mdRow">
  1525. <table cellpadding="0" cellspacing="0" border="0">
  1526. <tr>
  1527. <td class="md" nowrap valign="top"><a class="el" href="struct_r_s_v_p_1_1_resv_state_block__t.html">RSVP::ResvStateBlock_t</a> * RSVP::findRsbById </td>
  1528. <td class="md" valign="top">(&nbsp;</td>
  1529. <td class="md" nowrap valign="top">int&nbsp;</td>
  1530. <td class="mdname1" valign="top" nowrap> <em>id</em> </td>
  1531. <td class="md" valign="top">&nbsp;)&nbsp;</td>
  1532. <td class="md" nowrap><code> [protected]</code></td>
  1533. </tr>
  1534. </table>
  1535. </td>
  1536. </tr>
  1537. </table>
  1538. <table cellspacing="5" cellpadding="0" border="0">
  1539. <tr>
  1540. <td>
  1541. &nbsp;
  1542. </td>
  1543. <td>
  1544. <p>
  1545. <div class="fragment"><pre class="fragment">02123 {
  1546. 02124 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; <a class="code" href="class_r_s_v_p.html#r15">RSBList</a>.size(); i++)
  1547. 02125 {
  1548. 02126 <span class="keywordflow">if</span> (RSBList[i].<span class="keywordtype">id</span> != <span class="keywordtype">id</span>)
  1549. 02127 continue;
  1550. 02128
  1551. 02129 return &amp;RSBList[i];
  1552. 02130 }
  1553. 02131 ASSERT(false);
  1554. 02132 return NULL; <span class="comment">// prevent warning</span>
  1555. 02133 }
  1556. </pre></div>
  1557. <p>
  1558. </td>
  1559. </tr>
  1560. </table>
  1561. <a class="anchor" name="b49" doxytag="RSVP::findSession"></a><p>
  1562. <table class="mdTable" cellpadding="2" cellspacing="0">
  1563. <tr>
  1564. <td class="mdRow">
  1565. <table cellpadding="0" cellspacing="0" border="0">
  1566. <tr>
  1567. <td class="md" nowrap valign="top">std::vector&lt; <a class="el" href="struct_r_s_v_p_1_1traffic__session__t.html">RSVP::traffic_session_t</a> &gt;::iterator RSVP::findSession </td>
  1568. <td class="md" valign="top">(&nbsp;</td>
  1569. <td class="md" nowrap valign="top">const <a class="el" href="struct_session_obj__t.html">SessionObj_t</a> &amp;&nbsp;</td>
  1570. <td class="mdname1" valign="top" nowrap> <em>session</em> </td>
  1571. <td class="md" valign="top">&nbsp;)&nbsp;</td>
  1572. <td class="md" nowrap><code> [protected]</code></td>
  1573. </tr>
  1574. </table>
  1575. </td>
  1576. </tr>
  1577. </table>
  1578. <table cellspacing="5" cellpadding="0" border="0">
  1579. <tr>
  1580. <td>
  1581. &nbsp;
  1582. </td>
  1583. <td>
  1584. <p>
  1585. <div class="fragment"><pre class="fragment">01841 {
  1586. 01842 std::vector&lt;traffic_session_t&gt;::iterator it;
  1587. 01843 <span class="keywordflow">for</span> (it = <a class="code" href="class_r_s_v_p.html#r0">traffic</a>.begin(); it != <a class="code" href="class_r_s_v_p.html#r0">traffic</a>.end(); it++)
  1588. 01844 {
  1589. 01845 <span class="keywordflow">if</span> (it-&gt;sobj != session)
  1590. 01846 continue;
  1591. 01847
  1592. 01848 break;
  1593. 01849 }
  1594. 01850
  1595. 01851 return it;
  1596. 01852 }
  1597. </pre></div>
  1598. <p>
  1599. </td>
  1600. </tr>
  1601. </table>
  1602. <a class="anchor" name="d0" doxytag="RSVP::getInLabel"></a><p>
  1603. <table class="mdTable" cellpadding="2" cellspacing="0">
  1604. <tr>
  1605. <td class="mdRow">
  1606. <table cellpadding="0" cellspacing="0" border="0">
  1607. <tr>
  1608. <td class="md" nowrap valign="top">int RSVP::getInLabel </td>
  1609. <td class="md" valign="top">(&nbsp;</td>
  1610. <td class="md" nowrap valign="top">const <a class="el" href="struct_session_obj__t.html">SessionObj_t</a> &amp;&nbsp;</td>
  1611. <td class="mdname" nowrap> <em>session</em>, </td>
  1612. </tr>
  1613. <tr>
  1614. <td class="md" nowrap align="right"></td>
  1615. <td class="md"></td>
  1616. <td class="md" nowrap>const <a class="el" href="struct_sender_template_obj__t.html">SenderTemplateObj_t</a> &amp;&nbsp;</td>
  1617. <td class="mdname" nowrap> <em>sender</em></td>
  1618. </tr>
  1619. <tr>
  1620. <td class="md"></td>
  1621. <td class="md">)&nbsp;</td>
  1622. <td class="md" colspan="2"><code> [private]</code></td>
  1623. </tr>
  1624. </table>
  1625. </td>
  1626. </tr>
  1627. </table>
  1628. <table cellspacing="5" cellpadding="0" border="0">
  1629. <tr>
  1630. <td>
  1631. &nbsp;
  1632. </td>
  1633. <td>
  1634. <p>
  1635. <div class="fragment"><pre class="fragment">00081 {
  1636. 00082 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index;
  1637. 00083 ResvStateBlock_t *rsb = <a class="code" href="class_r_s_v_p.html#b46">findRSB</a>(session, sender, index);
  1638. 00084 <span class="keywordflow">if</span> (!rsb)
  1639. 00085 return -1;
  1640. 00086
  1641. 00087 return rsb-&gt;inLabelVector[index];
  1642. 00088 }
  1643. </pre></div>
  1644. <p>
  1645. </td>
  1646. </tr>
  1647. </table>
  1648. <a class="anchor" name="b63" doxytag="RSVP::handleMessage"></a><p>
  1649. <table class="mdTable" cellpadding="2" cellspacing="0">
  1650. <tr>
  1651. <td class="mdRow">
  1652. <table cellpadding="0" cellspacing="0" border="0">
  1653. <tr>
  1654. <td class="md" nowrap valign="top">void RSVP::handleMessage </td>
  1655. <td class="md" valign="top">(&nbsp;</td>
  1656. <td class="md" nowrap valign="top">cMessage *&nbsp;</td>
  1657. <td class="mdname1" valign="top" nowrap> <em>msg</em> </td>
  1658. <td class="md" valign="top">&nbsp;)&nbsp;</td>
  1659. <td class="md" nowrap><code> [protected, virtual]</code></td>
  1660. </tr>
  1661. </table>
  1662. </td>
  1663. </tr>
  1664. </table>
  1665. <table cellspacing="5" cellpadding="0" border="0">
  1666. <tr>
  1667. <td>
  1668. &nbsp;
  1669. </td>
  1670. <td>
  1671. <p>
  1672. <div class="fragment"><pre class="fragment">01320 {
  1673. 01321 <a class="code" href="class_signalling_msg.html">SignallingMsg</a> *sMsg = dynamic_cast&lt;SignallingMsg*&gt;(msg);
  1674. 01322 <a class="code" href="class_r_s_v_p_message.html">RSVPMessage</a> *rMsg = dynamic_cast&lt;RSVPMessage*&gt;(msg);
  1675. 01323
  1676. 01324 <span class="keywordflow">if</span> (sMsg)
  1677. 01325 {
  1678. 01326 <a class="code" href="class_r_s_v_p.html#b0">processSignallingMessage</a>(sMsg);
  1679. 01327 <span class="keywordflow">return</span>;
  1680. 01328 }
  1681. 01329 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (rMsg)
  1682. 01330 {
  1683. 01331 <a class="code" href="class_r_s_v_p.html#b9">processRSVPMessage</a>(rMsg);
  1684. 01332 <span class="keywordflow">return</span>;
  1685. 01333 }
  1686. 01334 <span class="keywordflow">else</span>
  1687. 01335 ASSERT(<span class="keyword">false</span>);
  1688. 01336 }
  1689. </pre></div>
  1690. <p>
  1691. </td>
  1692. </tr>
  1693. </table>
  1694. <a class="anchor" name="b62" doxytag="RSVP::initialize"></a><p>
  1695. <table class="mdTable" cellpadding="2" cellspacing="0">
  1696. <tr>
  1697. <td class="mdRow">
  1698. <table cellpadding="0" cellspacing="0" border="0">
  1699. <tr>
  1700. <td class="md" nowrap valign="top">void RSVP::initialize </td>
  1701. <td class="md" valign="top">(&nbsp;</td>
  1702. <td class="md" nowrap valign="top">int&nbsp;</td>
  1703. <td class="mdname1" valign="top" nowrap> <em>stage</em> </td>
  1704. <td class="md" valign="top">&nbsp;)&nbsp;</td>
  1705. <td class="md" nowrap><code> [protected, virtual]</code></td>
  1706. </tr>
  1707. </table>
  1708. </td>
  1709. </tr>
  1710. </table>
  1711. <table cellspacing="5" cellpadding="0" border="0">
  1712. <tr>
  1713. <td>
  1714. &nbsp;
  1715. </td>
  1716. <td>
  1717. <p>
  1718. <div class="fragment"><pre class="fragment">00051 {
  1719. 00052 <span class="comment">// we have to wait for stage 2 until interfaces get registered (stage 0)</span>
  1720. 00053 <span class="comment">// and get their auto-assigned IP addresses (stage 2); routerId gets</span>
  1721. 00054 <span class="comment">// assigned in state 3</span>
  1722. 00055 <span class="keywordflow">if</span> (stage==4)
  1723. 00056 {
  1724. 00057 <a class="code" href="class_r_s_v_p.html#r4">tedmod</a> = <a class="code" href="class_t_e_d_access.html">TEDAccess</a>().get();
  1725. 00058 <a class="code" href="class_r_s_v_p.html#r5">rt</a> = <a class="code" href="class_routing_table_access.html">RoutingTableAccess</a>().get();
  1726. 00059 <a class="code" href="class_r_s_v_p.html#r6">ift</a> = <a class="code" href="class_interface_table_access.html">InterfaceTableAccess</a>().get();
  1727. 00060 <a class="code" href="class_r_s_v_p.html#r13">routerId</a> = <a class="code" href="class_r_s_v_p.html#r5">rt</a>-&gt;<a class="code" href="class_routing_table.html#a4">routerId</a>();
  1728. 00061 <a class="code" href="class_r_s_v_p.html#r7">lt</a> = <a class="code" href="class_l_i_b_table_access.html">LIBTableAccess</a>().get();
  1729. 00062 <a class="code" href="class_r_s_v_p.html#r8">nb</a> = <a class="code" href="class_notification_board_access.html">NotificationBoardAccess</a>().get();
  1730. 00063
  1731. 00064 <a class="code" href="class_r_s_v_p.html#r9">rpct</a> = check_and_cast&lt;IRSVPClassifier*&gt;(parentModule()-&gt;submodule(<span class="stringliteral">"classifier"</span>));
  1732. 00065
  1733. 00066 <a class="code" href="class_r_s_v_p.html#r10">maxPsbId</a> = 0;
  1734. 00067 <a class="code" href="class_r_s_v_p.html#r11">maxRsbId</a> = 0;
  1735. 00068 <a class="code" href="class_r_s_v_p.html#r12">maxSrcInstance</a> = 0;
  1736. 00069
  1737. 00070 <a class="code" href="class_r_s_v_p.html#r3">retryInterval</a> = 1.0;
  1738. 00071
  1739. 00072 <span class="comment">// setup hello</span>
  1740. 00073 <a class="code" href="class_r_s_v_p.html#b36">setupHello</a>();
  1741. 00074
  1742. 00075 <span class="comment">// process traffic configuration</span>
  1743. 00076 <a class="code" href="class_r_s_v_p.html#b54">readTrafficFromXML</a>(par(<span class="stringliteral">"traffic"</span>).xmlValue());
  1744. 00077 }
  1745. 00078 }
  1746. </pre></div>
  1747. <p>
  1748. </td>
  1749. </tr>
  1750. </table>
  1751. <a class="anchor" name="b61" doxytag="RSVP::numInitStages"></a><p>
  1752. <table class="mdTable" cellpadding="2" cellspacing="0">
  1753. <tr>
  1754. <td class="mdRow">
  1755. <table cellpadding="0" cellspacing="0" border="0">
  1756. <tr>
  1757. <td class="md" nowrap valign="top">virtual int RSVP::numInitStages </td>
  1758. <td class="md" valign="top">(&nbsp;</td>
  1759. <td class="mdname1" valign="top" nowrap> </td>
  1760. <td class="md" valign="top">&nbsp;)&nbsp;</td>
  1761. <td class="md" nowrap> const<code> [inline, protected, virtual]</code></td>
  1762. </tr>
  1763. </table>
  1764. </td>
  1765. </tr>
  1766. </table>
  1767. <table cellspacing="5" cellpadding="0" border="0">
  1768. <tr>
  1769. <td>
  1770. &nbsp;
  1771. </td>
  1772. <td>
  1773. <p>
  1774. <div class="fragment"><pre class="fragment">00284 {<span class="keywordflow">return</span> 5;}
  1775. </pre></div>
  1776. <p>
  1777. </td>
  1778. </tr>
  1779. </table>
  1780. <a class="anchor" name="b58" doxytag="RSVP::pathProblem"></a><p>
  1781. <table class="mdTable" cellpadding="2" cellspacing="0">
  1782. <tr>
  1783. <td class="mdRow">
  1784. <table cellpadding="0" cellspacing="0" border="0">
  1785. <tr>
  1786. <td class="md" nowrap valign="top">void RSVP::pathProblem </td>
  1787. <td class="md" valign="top">(&nbsp;</td>
  1788. <td class="md" nowrap valign="top"><a class="el" href="struct_r_s_v_p_1_1_path_state_block__t.html">PathStateBlock_t</a> *&nbsp;</td>
  1789. <td class="mdname1" valign="top" nowrap> <em>psb</em> </td>
  1790. <td class="md" valign="top">&nbsp;)&nbsp;</td>
  1791. <td class="md" nowrap><code> [protected]</code></td>
  1792. </tr>
  1793. </table>
  1794. </td>
  1795. </tr>
  1796. </table>
  1797. <table cellspacing="5" cellpadding="0" border="0">
  1798. <tr>
  1799. <td>
  1800. &nbsp;
  1801. </td>
  1802. <td>
  1803. <p>
  1804. <div class="fragment"><pre class="fragment">01767 {
  1805. 01768 ASSERT(psb);
  1806. 01769 ASSERT(!psb-&gt;OutInterface.isUnspecified());
  1807. 01770
  1808. 01771 <a class="code" href="class_i_p_address.html">IPAddress</a> nextHop = <a class="code" href="class_r_s_v_p.html#r4">tedmod</a>-&gt;<a class="code" href="class_t_e_d.html#z61_2">peerByLocalAddress</a>(psb-&gt;OutInterface);
  1809. 01772
  1810. 01773 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> &lt;&lt; <span class="stringliteral">"sending PathTear to "</span> &lt;&lt; nextHop &lt;&lt; endl;
  1811. 01774
  1812. 01775 <a class="code" href="class_r_s_v_p.html#b34">sendPathTearMessage</a>(nextHop, psb-&gt;Session_Object, psb-&gt;Sender_Template_Object,
  1813. 01776 <a class="code" href="class_r_s_v_p.html#r4">tedmod</a>-&gt;<a class="code" href="class_t_e_d.html#z61_0">interfaceAddrByPeerAddress</a>(nextHop), <a class="code" href="class_r_s_v_p.html#r13">routerId</a>, <span class="keyword">true</span>);
  1814. 01777
  1815. 01778 <span class="comment">// schedule re-creation if path is permanent</span>
  1816. 01779
  1817. 01780 std::vector&lt;traffic_session_t&gt;::iterator sit = <a class="code" href="class_r_s_v_p.html#b49">findSession</a>(psb-&gt;Session_Object);
  1818. 01781 ASSERT(sit != <a class="code" href="class_r_s_v_p.html#r0">traffic</a>.end());
  1819. 01782 traffic_session_t *s = &amp;(*sit);
  1820. 01783
  1821. 01784 std::vector&lt;traffic_path_t&gt;::iterator pit = <a class="code" href="class_r_s_v_p.html#b50">findPath</a>(s, psb-&gt;Sender_Template_Object);
  1822. 01785 ASSERT(pit != s-&gt;paths.end());
  1823. 01786 traffic_path_t *p = &amp;(*pit);
  1824. 01787
  1825. 01788 <span class="keywordflow">if</span> (p-&gt;permanent)
  1826. 01789 {
  1827. 01790 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> &lt;&lt; <span class="stringliteral">"this path is permanent, we will try to re-create it later"</span> &lt;&lt; endl;
  1828. 01791
  1829. 01792 <a class="code" href="class_r_s_v_p.html#b35">sendPathNotify</a>(<span class="keywordtype">id</span>(), psb-&gt;Session_Object, psb-&gt;Sender_Template_Object, PATH_RETRY, retryInterval);
  1830. 01793
  1831. 01794 }
  1832. 01795 <span class="keywordflow">else</span>
  1833. 01796 {
  1834. 01797 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> &lt;&lt; <span class="stringliteral">"removing path from traffic database"</span> &lt;&lt; endl;
  1835. 01798
  1836. 01799 sit-&gt;paths.erase(pit);
  1837. 01800 }
  1838. 01801
  1839. 01802 <span class="comment">// remove path</span>
  1840. 01803
  1841. 01804 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> &lt;&lt; <span class="stringliteral">"removing PSB"</span> &lt;&lt; endl;
  1842. 01805
  1843. 01806 <a class="code" href="class_r_s_v_p.html#b17">removePSB</a>(psb);
  1844. 01807 }
  1845. </pre></div>
  1846. <p>
  1847. </td>
  1848. </tr>
  1849. </table>
  1850. <a class="anchor" name="b40" doxytag="RSVP::preempt"></a><p>
  1851. <table class="mdTable" cellpadding="2" cellspacing="0">
  1852. <tr>
  1853. <td class="mdRow">
  1854. <table cellpadding="0" cellspacing="0" border="0">
  1855. <tr>
  1856. <td class="md" nowrap valign="top">void RSVP::preempt </td>
  1857. <td class="md" valign="top">(&nbsp;</td>
  1858. <td class="md" nowrap valign="top"><a class="el" href="class_i_p_address.html">IPAddress</a>&nbsp;</td>
  1859. <td class="mdname" nowrap> <em>OI</em>, </td>
  1860. </tr>
  1861. <tr>
  1862. <td class="md" nowrap align="right"></td>
  1863. <td class="md"></td>
  1864. <td class="md" nowrap>int&nbsp;</td>
  1865. <td class="mdname" nowrap> <em>priority</em>, </td>
  1866. </tr>
  1867. <tr>
  1868. <td class="md" nowrap align="right"></td>
  1869. <td class="md"></td>
  1870. <td class="md" nowrap>double&nbsp;</td>
  1871. <td class="mdname" nowrap> <em>bandwidth</em></td>
  1872. </tr>
  1873. <tr>
  1874. <td class="md"></td>
  1875. <td class="md">)&nbsp;</td>
  1876. <td class="md" colspan="2"><code> [protected]</code></td>
  1877. </tr>
  1878. </table>
  1879. </td>
  1880. </tr>
  1881. </table>
  1882. <table cellspacing="5" cellpadding="0" border="0">
  1883. <tr>
  1884. <td>
  1885. &nbsp;
  1886. </td>
  1887. <td>
  1888. <p>
  1889. <div class="fragment"><pre class="fragment">00687 {
  1890. 00688 ASSERT(<a class="code" href="class_r_s_v_p.html#r4">tedmod</a>-&gt;<a class="code" href="class_t_e_d.html#z61_5">isLocalAddress</a>(OI));
  1891. 00689
  1892. 00690 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index = <a class="code" href="class_r_s_v_p.html#r4">tedmod</a>-&gt;<a class="code" href="class_t_e_d.html#z61_6">linkIndex</a>(OI);
  1893. 00691
  1894. 00692 <span class="keywordflow">for</span> (RSBVector::iterator it = <a class="code" href="class_r_s_v_p.html#r15">RSBList</a>.begin(); it != <a class="code" href="class_r_s_v_p.html#r15">RSBList</a>.end(); it++)
  1895. 00693 {
  1896. 00694 <span class="keywordflow">if</span> (it-&gt;OI != OI)
  1897. 00695 continue;
  1898. 00696
  1899. 00697 if (it-&gt;Session_Object.holdingPri != priority)
  1900. 00698 continue;
  1901. 00699
  1902. 00700 if (it-&gt;Flowspec_Object.req_bandwidth == 0.0)
  1903. 00701 continue;
  1904. 00702
  1905. 00703 <span class="comment">// preempt RSB</span>
  1906. 00704
  1907. 00705 for (<span class="keywordtype">int</span> i = priority; i &lt; 8; i++)
  1908. 00706 tedmod-&gt;ted[index].UnResvBandwidth[i] += it-&gt;Flowspec_Object.req_bandwidth;
  1909. 00707
  1910. 00708 bandwidth -= it-&gt;Flowspec_Object.req_bandwidth;
  1911. 00709 it-&gt;Flowspec_Object.req_bandwidth = 0.0;
  1912. 00710
  1913. 00711 scheduleCommitTimer(&amp;(*it));
  1914. 00712
  1915. 00713 <span class="comment">//</span>
  1916. 00714
  1917. 00715 if (bandwidth &lt;= 0.0)
  1918. 00716 break;
  1919. 00717 }
  1920. 00718 }
  1921. </pre></div>
  1922. <p>
  1923. </td>
  1924. </tr>
  1925. </table>
  1926. <a class="anchor" name="b53" doxytag="RSVP::print"></a><p>
  1927. <table class="mdTable" cellpadding="2" cellspacing="0">
  1928. <tr>
  1929. <td class="mdRow">
  1930. <table cellpadding="0" cellspacing="0" border="0">
  1931. <tr>
  1932. <td class="md" nowrap valign="top">void RSVP::print </td>
  1933. <td class="md" valign="top">(&nbsp;</td>
  1934. <td class="md" nowrap valign="top"><a class="el" href="class_r_s_v_p_resv_msg.html">RSVPResvMsg</a> *&nbsp;</td>
  1935. <td class="mdname1" valign="top" nowrap> <em>r</em> </td>
  1936. <td class="md" valign="top">&nbsp;)&nbsp;</td>
  1937. <td class="md" nowrap><code> [protected]</code></td>
  1938. </tr>
  1939. </table>
  1940. </td>
  1941. </tr>
  1942. </table>
  1943. <table cellspacing="5" cellpadding="0" border="0">
  1944. <tr>
  1945. <td>
  1946. &nbsp;
  1947. </td>
  1948. <td>
  1949. <p>
  1950. <div class="fragment"><pre class="fragment">02206 {
  1951. 02207 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> &lt;&lt; <span class="stringliteral">"RESV_MESSAGE: "</span> &lt;&lt; endl;
  1952. 02208 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; r-&gt;getFlowDescriptor().size(); i++)
  1953. 02209 {
  1954. 02210 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> &lt;&lt; <span class="stringliteral">" lspid "</span> &lt;&lt; r-&gt;<a class="code" href="class_r_s_v_p_resv_msg___base.html#a7">getFlowDescriptor</a>()[i].Filter_Spec_Object.Lsp_Id &lt;&lt;
  1955. 02211 <span class="stringliteral">" label "</span> &lt;&lt; r-&gt;<a class="code" href="class_r_s_v_p_resv_msg___base.html#a7">getFlowDescriptor</a>()[i].label &lt;&lt; endl;
  1956. 02212 }
  1957. 02213 }
  1958. </pre></div>
  1959. <p>
  1960. </td>
  1961. </tr>
  1962. </table>
  1963. <a class="anchor" name="b52" doxytag="RSVP::print"></a><p>
  1964. <table class="mdTable" cellpadding="2" cellspacing="0">
  1965. <tr>
  1966. <td class="mdRow">
  1967. <table cellpadding="0" cellspacing="0" border="0">
  1968. <tr>
  1969. <td class="md" nowrap valign="top">void RSVP::print </td>
  1970. <td class="md" valign="top">(&nbsp;</td>
  1971. <td class="md" nowrap valign="top"><a class="el" href="class_r_s_v_p_path_msg.html">RSVPPathMsg</a> *&nbsp;</td>
  1972. <td class="mdname1" valign="top" nowrap> <em>p</em> </td>
  1973. <td class="md" valign="top">&nbsp;)&nbsp;</td>
  1974. <td class="md" nowrap><code> [protected]</code></td>
  1975. </tr>
  1976. </table>
  1977. </td>
  1978. </tr>
  1979. </table>
  1980. <table cellspacing="5" cellpadding="0" border="0">
  1981. <tr>
  1982. <td>
  1983. &nbsp;
  1984. </td>
  1985. <td>
  1986. <p>
  1987. <div class="fragment"><pre class="fragment">02201 {
  1988. 02202 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> &lt;&lt; <span class="stringliteral">"PATH_MESSAGE: lspid "</span> &lt;&lt; p-&gt;<a class="code" href="class_r_s_v_p_path_msg.html#a5">getLspId</a>() &lt;&lt; <span class="stringliteral">" ERO "</span> &lt;&lt; <a class="code" href="common_8cc.html#a1">vectorToString</a>(p-&gt;<a class="code" href="class_r_s_v_p_path_msg___base.html#a13">getERO</a>()) &lt;&lt; endl;
  1989. 02203 }
  1990. </pre></div>
  1991. <p>
  1992. </td>
  1993. </tr>
  1994. </table>
  1995. <a class="anchor" name="b64" doxytag="RSVP::processCommand"></a><p>
  1996. <table class="mdTable" cellpadding="2" cellspacing="0">
  1997. <tr>
  1998. <td class="mdRow">
  1999. <table cellpadding="0" cellspacing="0" border="0">
  2000. <tr>
  2001. <td class="md" nowrap valign="top">void RSVP::processCommand </td>
  2002. <td class="md" valign="top">(&nbsp;</td>
  2003. <td class="md" nowrap valign="top">const cXMLElement &amp;&nbsp;</td>
  2004. <td class="mdname1" valign="top" nowrap> <em>node</em> </td>
  2005. <td class="md" valign="top">&nbsp;)&nbsp;</td>
  2006. <td class="md" nowrap><code> [protected, virtual]</code></td>
  2007. </tr>
  2008. </table>
  2009. </td>
  2010. </tr>
  2011. </table>
  2012. <table cellspacing="5" cellpadding="0" border="0">
  2013. <tr>
  2014. <td>
  2015. &nbsp;
  2016. </td>
  2017. <td>
  2018. <p>
  2019. Called by <a class="el" href="class_scenario_manager.html">ScenarioManager</a> whenever a script command needs to be carried out by the module.<p>
  2020. The command is represented by the XML element or element tree. The command name can be obtained as:<p>
  2021. <pre>
  2022. const char *command = node-&gt;getTagName()
  2023. </pre><p>
  2024. Parameters are XML attributes, e.g. a "neighbour" parameter can be retrieved as:<p>
  2025. <pre>
  2026. const char *attr = node-&gt;getAttribute("neighbour")
  2027. </pre><p>
  2028. More complex input can be passed in child elements.<p>
  2029. <dl compact><dt><b>See also:</b></dt><dd>cXMLElement </dd></dl>
  2030. <p>
  2031. Implements <a class="el" href="class_i_scriptable.html#a1">IScriptable</a>.<div class="fragment"><pre class="fragment">01938 {
  2032. 01939 <span class="keywordflow">if</span> (!strcmp(node.getTagName(), <span class="stringliteral">"add-session"</span>))
  2033. 01940 {
  2034. 01941 <a class="code" href="class_r_s_v_p.html#b59">addSession</a>(node);
  2035. 01942 }
  2036. 01943 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!strcmp(node.getTagName(), <span class="stringliteral">"del-session"</span>))
  2037. 01944 {
  2038. 01945 <a class="code" href="class_r_s_v_p.html#b60">delSession</a>(node);
  2039. 01946 }
  2040. 01947 <span class="keywordflow">else</span>
  2041. 01948 ASSERT(<span class="keyword">false</span>);
  2042. 01949 }
  2043. </pre></div>
  2044. <p>
  2045. </td>
  2046. </tr>
  2047. </table>
  2048. <a class="anchor" name="b7" doxytag="RSVP::processHELLO_TIMEOUT"></a><p>
  2049. <table class="mdTable" cellpadding="2" cellspacing="0">
  2050. <tr>
  2051. <td class="mdRow">
  2052. <table cellpadding="0" cellspacing="0" border="0">
  2053. <tr>
  2054. <td class="md" nowrap valign="top">void RSVP::processHELLO_TIMEOUT </td>
  2055. <td class="md" valign="top">(&nbsp;</td>
  2056. <td class="md" nowrap valign="top"><a class="el" href="class_hello_timeout_msg.html">HelloTimeoutMsg</a> *&nbsp;</td>
  2057. <td class="mdname1" valign="top" nowrap> <em>msg</em> </td>
  2058. <td class="md" valign="top">&nbsp;)&nbsp;</td>
  2059. <td class="md" nowrap><code> [protected]</code></td>
  2060. </tr>
  2061. </table>
  2062. </td>
  2063. </tr>
  2064. </table>
  2065. <table cellspacing="5" cellpadding="0" border="0">
  2066. <tr>
  2067. <td>
  2068. &nbsp;
  2069. </td>
  2070. <td>
  2071. <p>
  2072. <div class="fragment"><pre class="fragment">00410 {
  2073. 00411 <a class="code" href="class_i_p_address.html">IPAddress</a> peer = msg-&gt;<a class="code" href="class_hello_timeout_msg.html#a7">getPeer</a>();
  2074. 00412
  2075. 00413 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> &lt;&lt; <span class="stringliteral">"hello timeout, considering "</span> &lt;&lt; peer &lt;&lt; <span class="stringliteral">" failed"</span> &lt;&lt; endl;
  2076. 00414
  2077. 00415 <span class="comment">// update hello state (set to failed and turn hello off)</span>
  2078. 00416
  2079. 00417 HelloState_t *hello = <a class="code" href="class_r_s_v_p.html#b51">findHello</a>(peer);
  2080. 00418 ASSERT(hello);
  2081. 00419 hello-&gt;<a class="code" href="struct_r_s_v_p_1_1_hello_state__t.html#o7">ok</a> = <span class="keyword">false</span>;
  2082. 00420 ASSERT(!hello-&gt;timeout-&gt;isScheduled());
  2083. 00421 cancelEvent(hello-&gt;timer);
  2084. 00422
  2085. 00423 <span class="comment">// update TED and routing table</span>
  2086. 00424
  2087. 00425 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index = <a class="code" href="class_r_s_v_p.html#r4">tedmod</a>-&gt;<a class="code" href="class_t_e_d.html#z61_6">linkIndex</a>(routerId, peer);
  2088. 00426 <a class="code" href="class_r_s_v_p.html#r4">tedmod</a>-&gt;<a class="code" href="class_t_e_d.html#o0">ted</a>[index].state = <span class="keyword">false</span>;
  2089. 00427 <a class="code" href="class_r_s_v_p.html#b42">announceLinkChange</a>(index);
  2090. 00428 <a class="code" href="class_r_s_v_p.html#r4">tedmod</a>-&gt;<a class="code" href="class_t_e_d.html#z61_9">rebuildRoutingTable</a>();
  2091. 00429
  2092. 00430 <span class="comment">// send PATH_ERROR for existing paths</span>
  2093. 00431
  2094. 00432 <span class="keywordflow">for</span> (PSBVector::iterator it = <a class="code" href="class_r_s_v_p.html#r14">PSBList</a>.begin(); it != <a class="code" href="class_r_s_v_p.html#r14">PSBList</a>.end(); it++)
  2095. 00433 {
  2096. 00434 <span class="keywordflow">if</span> (it-&gt;OutInterface != <a class="code" href="class_r_s_v_p.html#r4">tedmod</a>-&gt;<a class="code" href="class_t_e_d.html#o0">ted</a>[index].local)
  2097. 00435 continue;
  2098. 00436
  2099. 00437 sendPathErrorMessage(&amp;(*it), PATH_ERR_NEXTHOP_FAILED);
  2100. 00438 }
  2101. 00439 }
  2102. </pre></div>
  2103. <p>
  2104. </td>
  2105. </tr>
  2106. </table>
  2107. <a class="anchor" name="b6" doxytag="RSVP::processHELLO_TIMER"></a><p>
  2108. <table class="mdTable" cellpadding="2" cellspacing="0">
  2109. <tr>
  2110. <td class="mdRow">
  2111. <table cellpadding="0" cellspacing="0" border="0">
  2112. <tr>
  2113. <td class="md" nowrap valign="top">void RSVP::processHELLO_TIMER </td>
  2114. <td class="md" valign="top">(&nbsp;</td>
  2115. <td class="md" nowrap valign="top"><a class="el" href="class_hello_timer_msg.html">HelloTimerMsg</a> *&nbsp;</td>
  2116. <td class="mdname1" valign="top" nowrap> <em>msg</em> </td>
  2117. <td class="md" valign="top">&nbsp;)&nbsp;</td>
  2118. <td class="md" nowrap><code> [protected]</code></td>
  2119. </tr>
  2120. </table>
  2121. </td>
  2122. </tr>
  2123. </table>
  2124. <table cellspacing="5" cellpadding="0" border="0">
  2125. <tr>
  2126. <td>
  2127. &nbsp;
  2128. </td>
  2129. <td>
  2130. <p>
  2131. <div class="fragment"><pre class="fragment">00442 {
  2132. 00443 <a class="code" href="class_i_p_address.html">IPAddress</a> peer = msg-&gt;<a class="code" href="class_hello_timer_msg.html#a7">getPeer</a>();
  2133. 00444
  2134. 00445 HelloState_t *h = <a class="code" href="class_r_s_v_p.html#b51">findHello</a>(peer);
  2135. 00446 ASSERT(h);
  2136. 00447
  2137. 00448 <a class="code" href="class_r_s_v_p_hello_msg.html">RSVPHelloMsg</a> *hMsg = <span class="keyword">new</span> <a class="code" href="class_r_s_v_p_hello_msg.html">RSVPHelloMsg</a>(<span class="stringliteral">"hello message"</span>);
  2138. 00449
  2139. 00450 hMsg-&gt;<a class="code" href="class_r_s_v_p_hello_msg___base.html#a9">setSrcInstance</a>(h-&gt;srcInstance);
  2140. 00451 hMsg-&gt;<a class="code" href="class_r_s_v_p_hello_msg___base.html#a11">setDstInstance</a>(h-&gt;dstInstance);
  2141. 00452
  2142. 00453 hMsg-&gt;<a class="code" href="class_r_s_v_p_hello_msg___base.html#a5">setRequest</a>(h-&gt;request);
  2143. 00454 hMsg-&gt;<a class="code" href="class_r_s_v_p_hello_msg___base.html#a7">setAck</a>(h-&gt;ack);
  2144. 00455
  2145. 00456 <span class="keywordtype">int</span> length = 10;
  2146. 00457
  2147. 00458 <span class="comment">// see comment elsewhere (in TED.cc)</span>
  2148. 00459 length /= 10;
  2149. 00460
  2150. 00461 hMsg-&gt;setByteLength(length);
  2151. 00462
  2152. 00463 <a class="code" href="class_r_s_v_p.html#b43">sendToIP</a>(hMsg, peer);
  2153. 00464
  2154. 00465 h-&gt;ack = <span class="keyword">false</span>;
  2155. 00466
  2156. 00467 scheduleAt(simTime() + helloInterval, msg);
  2157. 00468 }
  2158. </pre></div>
  2159. <p>
  2160. </td>
  2161. </tr>
  2162. </table>
  2163. <a class="anchor" name="b10" doxytag="RSVP::processHelloMsg"></a><p>
  2164. <table class="mdTable" cellpadding="2" cellspacing="0">
  2165. <tr>
  2166. <td class="mdRow">
  2167. <table cellpadding="0" cellspacing="0" border="0">
  2168. <tr>
  2169. <td class="md" nowrap valign="top">void RSVP::processHelloMsg </td>
  2170. <td class="md" valign="top">(&nbsp;</td>
  2171. <td class="md" nowrap valign="top"><a class="el" href="class_r_s_v_p_hello_msg.html">RSVPHelloMsg</a> *&nbsp;</td>
  2172. <td class="mdname1" valign="top" nowrap> <em>msg</em> </td>
  2173. <td class="md" valign="top">&nbsp;)&nbsp;</td>
  2174. <td class="md" nowrap><code> [protected]</code></td>
  2175. </tr>
  2176. </table>
  2177. </td>
  2178. </tr>
  2179. </table>
  2180. <table cellspacing="5" cellpadding="0" border="0">
  2181. <tr>
  2182. <td>
  2183. &nbsp;
  2184. </td>
  2185. <td>
  2186. <p>
  2187. <div class="fragment"><pre class="fragment">01369 {
  2188. 01370 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> &lt;&lt; <span class="stringliteral">"Received RSVP_HELLO"</span> &lt;&lt; endl;
  2189. 01371 <span class="comment">//print(msg);</span>
  2190. 01372
  2191. 01373 <a class="code" href="class_i_p_control_info.html">IPControlInfo</a> *controlInfo = check_and_cast&lt;IPControlInfo*&gt;(msg-&gt;controlInfo());
  2192. 01374 <a class="code" href="class_i_p_address.html">IPAddress</a> sender = controlInfo-&gt;<a class="code" href="class_i_p_control_info___base.html#a6">srcAddr</a>();
  2193. 01375 <a class="code" href="class_i_p_address.html">IPAddress</a> peer = <a class="code" href="class_r_s_v_p.html#r4">tedmod</a>-&gt;<a class="code" href="class_t_e_d.html#z61_3">primaryAddress</a>(sender);
  2194. 01376
  2195. 01377 <span class="keywordtype">bool</span> request = msg-&gt;<a class="code" href="class_r_s_v_p_hello_msg___base.html#a4">getRequest</a>();
  2196. 01378 <span class="keywordtype">bool</span> ack = msg-&gt;<a class="code" href="class_r_s_v_p_hello_msg___base.html#a6">getAck</a>();
  2197. 01379
  2198. 01380 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> &lt;&lt; <span class="stringliteral">"hello sender "</span> &lt;&lt; peer;
  2199. 01381 <span class="keywordflow">if</span> (request) EV &lt;&lt; " REQ";
  2200. 01382 if (ack) EV &lt;&lt; " ACK";
  2201. 01383 EV &lt;&lt; endl;
  2202. 01384
  2203. 01385 <span class="keywordtype">int</span> rcvSrcInstance = msg-&gt;getSrcInstance();
  2204. 01386 <span class="keywordtype">int</span> rcvDstInstance = msg-&gt;getDstInstance();
  2205. 01387
  2206. 01388 delete msg;
  2207. 01389
  2208. 01390 HelloState_t *h = findHello(peer);
  2209. 01391 ASSERT(h);
  2210. 01392
  2211. 01393 ASSERT(h-&gt;srcInstance);
  2212. 01394 ASSERT(rcvSrcInstance);
  2213. 01395
  2214. 01396 <span class="keywordtype">bool</span> failure = false;
  2215. 01397
  2216. 01398 if (h-&gt;srcInstance != rcvDstInstance)
  2217. 01399 {
  2218. 01400 <span class="keywordflow">if</span> (rcvDstInstance != 0)
  2219. 01401 {
  2220. 01402 failure = <span class="keyword">true</span>;
  2221. 01403 }
  2222. 01404 <span class="keywordflow">else</span>
  2223. 01405 {
  2224. 01406 ASSERT(request);
  2225. 01407 }
  2226. 01408 }
  2227. 01409
  2228. 01410 <span class="keywordflow">if</span> (h-&gt;dstInstance != rcvSrcInstance)
  2229. 01411 {
  2230. 01412 <span class="keywordflow">if</span> (h-&gt;dstInstance != 0)
  2231. 01413 {
  2232. 01414 failure = <span class="keyword">true</span>;
  2233. 01415 }
  2234. 01416 h-&gt;dstInstance = rcvSrcInstance;
  2235. 01417 }
  2236. 01418
  2237. 01419 <span class="keywordflow">if</span> (failure)
  2238. 01420 {
  2239. 01421 <span class="comment">// mismatch encountered</span>
  2240. 01422 h-&gt;srcInstance = ++<a class="code" href="class_r_s_v_p.html#r12">maxSrcInstance</a>;
  2241. 01423 }
  2242. 01424
  2243. 01425 <span class="keywordflow">if</span> (failure || !h-&gt;ok)
  2244. 01426 {
  2245. 01427 h-&gt;ok = <span class="keyword">true</span>;
  2246. 01428
  2247. 01429 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> &lt;&lt; <span class="stringliteral">"local peer "</span> &lt;&lt; peer &lt;&lt; <span class="stringliteral">" is now considered up and running"</span> &lt;&lt; endl;
  2248. 01430
  2249. 01431 <a class="code" href="class_r_s_v_p.html#b38">recoveryEvent</a>(peer);
  2250. 01432
  2251. 01433 <span class="comment">// if peer was considered down, we have stopped sending hellos: resume now</span>
  2252. 01434 <span class="keywordflow">if</span> (!h-&gt;timer-&gt;isScheduled())
  2253. 01435 scheduleAt(simTime(), h-&gt;timer);
  2254. 01436 }
  2255. 01437
  2256. 01438 <span class="keywordflow">if</span> (request)
  2257. 01439 {
  2258. 01440 <span class="comment">// immediately respond to a request with an ack</span>
  2259. 01441 h-&gt;ack = <span class="keyword">true</span>;
  2260. 01442 h-&gt;request = <span class="keyword">false</span>;
  2261. 01443
  2262. 01444 cancelEvent(h-&gt;timer);
  2263. 01445 scheduleAt(simTime(), h-&gt;timer);
  2264. 01446 }
  2265. 01447 <span class="keywordflow">else</span>
  2266. 01448 {
  2267. 01449 <span class="comment">// next message will be regular</span>
  2268. 01450
  2269. 01451 h-&gt;ack = <span class="keyword">false</span>;
  2270. 01452 h-&gt;request = <span class="keyword">false</span>;
  2271. 01453
  2272. 01454 ASSERT(h-&gt;timer-&gt;isScheduled());
  2273. 01455 }
  2274. 01456
  2275. 01457 cancelEvent(h-&gt;timeout);
  2276. 01458 scheduleAt(simTime() + helloTimeout, h-&gt;timeout);
  2277. 01459 }
  2278. </pre></div>
  2279. <p>
  2280. </td>
  2281. </tr>
  2282. </table>
  2283. <a class="anchor" name="b8" doxytag="RSVP::processPATH_NOTIFY"></a><p>
  2284. <table class="mdTable" cellpadding="2" cellspacing="0">
  2285. <tr>
  2286. <td class="mdRow">
  2287. <table cellpadding="0" cellspacing="0" border="0">
  2288. <tr>
  2289. <td class="md" nowrap valign="top">void RSVP::processPATH_NOTIFY </td>
  2290. <td class="md" valign="top">(&nbsp;</td>
  2291. <td class="md" nowrap valign="top"><a class="el" href="class_path_notify_msg.html">PathNotifyMsg</a> *&nbsp;</td>
  2292. <td class="mdname1" valign="top" nowrap> <em>msg</em> </td>
  2293. <td class="md" valign="top">&nbsp;)&nbsp;</td>
  2294. <td class="md" nowrap><code> [protected]</code></td>
  2295. </tr>
  2296. </table>
  2297. </td>
  2298. </tr>
  2299. </table>
  2300. <table cellspacing="5" cellpadding="0" border="0">
  2301. <tr>
  2302. <td>
  2303. &nbsp;
  2304. </td>
  2305. <td>
  2306. <p>
  2307. <div class="fragment"><pre class="fragment">01810 {
  2308. 01811 PathStateBlock_t *psb;
  2309. 01812
  2310. 01813 <span class="keywordflow">switch</span>(msg-&gt;<a class="code" href="class_path_notify_msg.html#a13">getStatus</a>())
  2311. 01814 {
  2312. 01815 <span class="keywordflow">case</span> <a class="code" href="_signalling_msg__m_8h.html#a13">PATH_RETRY</a>:
  2313. 01816 <a class="code" href="class_r_s_v_p.html#b57">createPath</a>(msg-&gt;<a class="code" href="class_path_notify_msg.html#a7">getSession</a>(), msg-&gt;<a class="code" href="class_path_notify_msg.html#a10">getSender</a>());
  2314. 01817 <span class="keywordflow">break</span>;
  2315. 01818
  2316. 01819 <span class="keywordflow">case</span> <a class="code" href="_signalling_msg__m_8h.html#a10">PATH_UNFEASIBLE</a>:
  2317. 01820 <span class="keywordflow">case</span> <a class="code" href="_signalling_msg__m_8h.html#a12">PATH_PREEMPTED</a>:
  2318. 01821 <span class="keywordflow">case</span> <a class="code" href="_signalling_msg__m_8h.html#a11">PATH_FAILED</a>:
  2319. 01822 psb = <a class="code" href="class_r_s_v_p.html#b45">findPSB</a>(msg-&gt;<a class="code" href="class_path_notify_msg.html#a7">getSession</a>(), msg-&gt;<a class="code" href="class_path_notify_msg.html#a10">getSender</a>());
  2320. 01823 <span class="keywordflow">if</span> (psb)
  2321. 01824 pathProblem(psb);
  2322. 01825 break;
  2323. 01826
  2324. 01827 case PATH_CREATED:
  2325. 01828 EV &lt;&lt; "Path successfully established" &lt;&lt; endl;
  2326. 01829 break;
  2327. 01830
  2328. 01831
  2329. 01832 default:
  2330. 01833 ASSERT(false);
  2331. 01834 }
  2332. 01835
  2333. 01836 delete msg;
  2334. 01837 }
  2335. </pre></div>
  2336. <p>
  2337. </td>
  2338. </tr>
  2339. </table>
  2340. <a class="anchor" name="b14" doxytag="RSVP::processPathErrMsg"></a><p>
  2341. <table class="mdTable" cellpadding="2" cellspacing="0">
  2342. <tr>
  2343. <td class="mdRow">
  2344. <table cellpadding="0" cellspacing="0" border="0">
  2345. <tr>
  2346. <td class="md" nowrap valign="top">void RSVP::processPathErrMsg </td>
  2347. <td class="md" valign="top">(&nbsp;</td>
  2348. <td class="md" nowrap valign="top"><a class="el" href="class_r_s_v_p_path_error.html">RSVPPathError</a> *&nbsp;</td>
  2349. <td class="mdname1" valign="top" nowrap> <em>msg</em> </td>
  2350. <td class="md" valign="top">&nbsp;)&nbsp;</td>
  2351. <td class="md" nowrap><code> [protected]</code></td>
  2352. </tr>
  2353. </table>
  2354. </td>
  2355. </tr>
  2356. </table>
  2357. <table cellspacing="5" cellpadding="0" border="0">
  2358. <tr>
  2359. <td>
  2360. &nbsp;
  2361. </td>
  2362. <td>
  2363. <p>
  2364. <div class="fragment"><pre class="fragment">01462 {
  2365. 01463 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> &lt;&lt; <span class="stringliteral">"Received PATH_ERROR"</span> &lt;&lt; endl;
  2366. 01464 <span class="comment">//print(msg);</span>
  2367. 01465
  2368. 01466 <span class="comment">//int lspid = msg-&gt;getLspId();</span>
  2369. 01467 <span class="keywordtype">int</span> errCode = msg-&gt;<a class="code" href="class_r_s_v_p_path_error___base.html#a7">getErrorCode</a>();
  2370. 01468
  2371. 01469 PathStateBlock_t *psb = <a class="code" href="class_r_s_v_p.html#b45">findPSB</a>(msg-&gt;<a class="code" href="class_r_s_v_p_packet___base.html#a4">getSession</a>(), msg-&gt;<a class="code" href="class_r_s_v_p_path_error.html#a7">getSenderTemplate</a>());
  2372. 01470 <span class="keywordflow">if</span> (!psb)
  2373. 01471 {
  2374. 01472 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> &lt;&lt; <span class="stringliteral">"matching PSB not found, ignoring error message"</span> &lt;&lt; endl;
  2375. 01473 <span class="keyword">delete</span> msg;
  2376. 01474 <span class="keywordflow">return</span>;
  2377. 01475 }
  2378. 01476
  2379. 01477 <span class="keywordflow">if</span> (psb-&gt;Previous_Hop_Address != routerId)
  2380. 01478 {
  2381. 01479 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> &lt;&lt; <span class="stringliteral">"forwarding error message to PHOP ("</span> &lt;&lt; psb-&gt;Previous_Hop_Address &lt;&lt; <span class="stringliteral">")"</span> &lt;&lt; endl;
  2382. 01480
  2383. 01481 msg-&gt;removeControlInfo();
  2384. 01482 <a class="code" href="class_r_s_v_p.html#b43">sendToIP</a>(msg, psb-&gt;Previous_Hop_Address);
  2385. 01483 }
  2386. 01484 <span class="keywordflow">else</span>
  2387. 01485 {
  2388. 01486 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> &lt;&lt; <span class="stringliteral">"error reached ingress router"</span> &lt;&lt; endl;
  2389. 01487
  2390. 01488 <span class="keywordflow">switch</span>(errCode)
  2391. 01489 {
  2392. 01490 <span class="keywordflow">case</span> <a class="code" href="_r_s_v_p_8cc.html#a5">PATH_ERR_PREEMPTED</a>:
  2393. 01491 <a class="code" href="class_r_s_v_p.html#b35">sendPathNotify</a>(psb-&gt;handler, psb-&gt;Session_Object, psb-&gt;Sender_Template_Object, PATH_PREEMPTED, 0.0);
  2394. 01492 <span class="keywordflow">break</span>;
  2395. 01493
  2396. 01494 <span class="keywordflow">case</span> <a class="code" href="_r_s_v_p_8cc.html#a4">PATH_ERR_UNFEASIBLE</a>:
  2397. 01495 <a class="code" href="class_r_s_v_p.html#b35">sendPathNotify</a>(psb-&gt;handler, psb-&gt;Session_Object, psb-&gt;Sender_Template_Object, PATH_UNFEASIBLE, 0.0);
  2398. 01496 <span class="keywordflow">break</span>;
  2399. 01497
  2400. 01498 <span class="keywordflow">case</span> <a class="code" href="_r_s_v_p_8cc.html#a6">PATH_ERR_NEXTHOP_FAILED</a>:
  2401. 01499 <a class="code" href="class_r_s_v_p.html#b35">sendPathNotify</a>(psb-&gt;handler, psb-&gt;Session_Object, psb-&gt;Sender_Template_Object, PATH_FAILED, 0.0);
  2402. 01500 <span class="keywordflow">break</span>;
  2403. 01501
  2404. 01502 <span class="keywordflow">default</span>:
  2405. 01503 ASSERT(<span class="keyword">false</span>);
  2406. 01504 }
  2407. 01505
  2408. 01506 <span class="keyword">delete</span> msg;
  2409. 01507 }
  2410. 01508 }
  2411. </pre></div>
  2412. <p>
  2413. </td>
  2414. </tr>
  2415. </table>
  2416. <a class="anchor" name="b11" doxytag="RSVP::processPathMsg"></a><p>
  2417. <table class="mdTable" cellpadding="2" cellspacing="0">
  2418. <tr>
  2419. <td class="mdRow">
  2420. <table cellpadding="0" cellspacing="0" border="0">
  2421. <tr>
  2422. <td class="md" nowrap valign="top">void RSVP::processPathMsg </td>
  2423. <td class="md" valign="top">(&nbsp;</td>
  2424. <td class="md" nowrap valign="top"><a class="el" href="class_r_s_v_p_path_msg.html">RSVPPathMsg</a> *&nbsp;</td>
  2425. <td class="mdname1" valign="top" nowrap> <em>msg</em> </td>
  2426. <td class="md" valign="top">&nbsp;)&nbsp;</td>
  2427. <td class="md" nowrap><code> [protected]</code></td>
  2428. </tr>
  2429. </table>
  2430. </td>
  2431. </tr>
  2432. </table>
  2433. <table cellspacing="5" cellpadding="0" border="0">
  2434. <tr>
  2435. <td>
  2436. &nbsp;
  2437. </td>
  2438. <td>
  2439. <p>
  2440. <div class="fragment"><pre class="fragment">01572 {
  2441. 01573 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> &lt;&lt; <span class="stringliteral">"Received PATH_MESSAGE"</span> &lt;&lt; endl;
  2442. 01574 <a class="code" href="class_r_s_v_p.html#b52">print</a>(msg);
  2443. 01575
  2444. 01576 <span class="comment">// process ERO *************************************************************</span>
  2445. 01577
  2446. 01578 <a class="code" href="_int_serv__m_8h.html#a2">EroVector</a> ERO = msg-&gt;<a class="code" href="class_r_s_v_p_path_msg___base.html#a13">getERO</a>();
  2447. 01579
  2448. 01580 <span class="keywordflow">while</span>(ERO.size() &gt; 0 &amp;&amp; ERO[0].node == <a class="code" href="class_r_s_v_p.html#r13">routerId</a>)
  2449. 01581 {
  2450. 01582 ERO.erase(ERO.begin());
  2451. 01583 }
  2452. 01584
  2453. 01585 msg-&gt;<a class="code" href="class_r_s_v_p_path_msg___base.html#a15">setERO</a>(ERO);
  2454. 01586
  2455. 01587 <span class="comment">// create PSB if doesn't exist yet *****************************************</span>
  2456. 01588
  2457. 01589 PathStateBlock_t *psb = <a class="code" href="class_r_s_v_p.html#b45">findPSB</a>(msg-&gt;<a class="code" href="class_r_s_v_p_packet___base.html#a4">getSession</a>(), msg-&gt;<a class="code" href="class_r_s_v_p_path_msg.html#a9">getSenderTemplate</a>());
  2458. 01590
  2459. 01591 <span class="keywordflow">if</span> (!psb)
  2460. 01592 {
  2461. 01593 psb = <a class="code" href="class_r_s_v_p.html#b15">createPSB</a>(msg);
  2462. 01594 <span class="keywordflow">if</span> (!psb)
  2463. 01595 {
  2464. 01596 <a class="code" href="class_r_s_v_p.html#b32">sendPathErrorMessage</a>(msg-&gt;<a class="code" href="class_r_s_v_p_packet___base.html#a4">getSession</a>(), msg-&gt;<a class="code" href="class_r_s_v_p_path_msg.html#a9">getSenderTemplate</a>(),
  2465. 01597 msg-&gt;<a class="code" href="class_r_s_v_p_path_msg.html#a11">getSenderTspec</a>(), msg-&gt;<a class="code" href="class_r_s_v_p_path_msg.html#a6">getNHOP</a>(), <a class="code" href="_r_s_v_p_8cc.html#a4">PATH_ERR_UNFEASIBLE</a>);
  2466. 01598 <span class="keyword">delete</span> msg;
  2467. 01599 <span class="keywordflow">return</span>;
  2468. 01600 }
  2469. 01601 <a class="code" href="class_r_s_v_p.html#b27">scheduleRefreshTimer</a>(psb, 0.0);
  2470. 01602
  2471. 01603 <span class="keywordflow">if</span> (<a class="code" href="class_r_s_v_p.html#r4">tedmod</a>-&gt;<a class="code" href="class_t_e_d.html#z61_5">isLocalAddress</a>(psb-&gt;OutInterface))
  2472. 01604 {
  2473. 01605 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index = <a class="code" href="class_r_s_v_p.html#r4">tedmod</a>-&gt;<a class="code" href="class_t_e_d.html#z61_6">linkIndex</a>(psb-&gt;OutInterface);
  2474. 01606 <span class="keywordflow">if</span> (!<a class="code" href="class_r_s_v_p.html#r4">tedmod</a>-&gt;<a class="code" href="class_t_e_d.html#o0">ted</a>[index].state)
  2475. 01607 {
  2476. 01608 <a class="code" href="class_r_s_v_p.html#b32">sendPathErrorMessage</a>(psb, PATH_ERR_NEXTHOP_FAILED);
  2477. 01609 }
  2478. 01610 }
  2479. 01611 }
  2480. 01612
  2481. 01613 <span class="comment">// schedule timer&amp;timeout **************************************************</span>
  2482. 01614
  2483. 01615 <a class="code" href="class_r_s_v_p.html#b28">scheduleTimeout</a>(psb);
  2484. 01616
  2485. 01617 <span class="comment">// create RSB if we're egress and doesn't exist yet ************************</span>
  2486. 01618
  2487. 01619 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index;
  2488. 01620 ResvStateBlock_t *rsb = <a class="code" href="class_r_s_v_p.html#b46">findRSB</a>(msg-&gt;<a class="code" href="class_r_s_v_p_packet___base.html#a4">getSession</a>(), msg-&gt;<a class="code" href="class_r_s_v_p_path_msg.html#a9">getSenderTemplate</a>(), index);
  2489. 01621
  2490. 01622 <span class="keywordflow">if</span> (!rsb &amp;&amp; psb-&gt;OutInterface.isUnspecified())
  2491. 01623 {
  2492. 01624 ASSERT(ERO.size() == 0);
  2493. 01625 rsb = <a class="code" href="class_r_s_v_p.html#b19">createEgressRSB</a>(psb);
  2494. 01626 ASSERT(rsb);
  2495. 01627 <a class="code" href="class_r_s_v_p.html#b30">scheduleCommitTimer</a>(rsb);
  2496. 01628 }
  2497. 01629
  2498. 01630 <span class="keywordflow">if</span> (rsb)
  2499. 01631 scheduleRefreshTimer(rsb, 0.0);
  2500. 01632
  2501. 01633 delete msg;
  2502. 01634 }
  2503. </pre></div>
  2504. <p>
  2505. </td>
  2506. </tr>
  2507. </table>
  2508. <a class="anchor" name="b13" doxytag="RSVP::processPathTearMsg"></a><p>
  2509. <table class="mdTable" cellpadding="2" cellspacing="0">
  2510. <tr>
  2511. <td class="mdRow">
  2512. <table cellpadding="0" cellspacing="0" border="0">
  2513. <tr>
  2514. <td class="md" nowrap valign="top">void RSVP::processPathTearMsg </td>
  2515. <td class="md" valign="top">(&nbsp;</td>
  2516. <td class="md" nowrap valign="top"><a class="el" href="class_r_s_v_p_path_tear.html">RSVPPathTear</a> *&nbsp;</td>
  2517. <td class="mdname1" valign="top" nowrap> <em>msg</em> </td>
  2518. <td class="md" valign="top">&nbsp;)&nbsp;</td>
  2519. <td class="md" nowrap><code> [protected]</code></td>
  2520. </tr>
  2521. </table>
  2522. </td>
  2523. </tr>
  2524. </table>
  2525. <table cellspacing="5" cellpadding="0" border="0">
  2526. <tr>
  2527. <td>
  2528. &nbsp;
  2529. </td>
  2530. <td>
  2531. <p>
  2532. <div class="fragment"><pre class="fragment">01511 {
  2533. 01512 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> &lt;&lt; <span class="stringliteral">"Received PATH_TEAR"</span> &lt;&lt; endl;
  2534. 01513 <span class="comment">//print(msg);</span>
  2535. 01514
  2536. 01515 <span class="keywordtype">int</span> lspid = msg-&gt;<a class="code" href="class_r_s_v_p_path_tear.html#a7">getLspId</a>();
  2537. 01516
  2538. 01517 PathStateBlock_t *psb = <a class="code" href="class_r_s_v_p.html#b45">findPSB</a>(msg-&gt;<a class="code" href="class_r_s_v_p_packet___base.html#a4">getSession</a>(), msg-&gt;<a class="code" href="class_r_s_v_p_path_tear___base.html#a7">getSenderTemplate</a>());
  2539. 01518 <span class="keywordflow">if</span> (!psb)
  2540. 01519 {
  2541. 01520 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> &lt;&lt; <span class="stringliteral">"received PATH_TEAR for nonexisting lspid="</span> &lt;&lt; lspid &lt;&lt; endl;
  2542. 01521 <span class="keyword">delete</span> msg;
  2543. 01522 <span class="keywordflow">return</span>;
  2544. 01523 }
  2545. 01524
  2546. 01525 <span class="comment">// ignore message if backup exists and force flag is not set</span>
  2547. 01526
  2548. 01527 <span class="keywordtype">bool</span> modified = <span class="keyword">false</span>;
  2549. 01528
  2550. 01529 <span class="keywordflow">for</span> (PSBVector::iterator it = <a class="code" href="class_r_s_v_p.html#r14">PSBList</a>.begin(); it != <a class="code" href="class_r_s_v_p.html#r14">PSBList</a>.end(); it++)
  2551. 01530 {
  2552. 01531 <span class="keywordflow">if</span> (it-&gt;OutInterface.getInt() != lspid)
  2553. 01532 <span class="keywordflow">continue</span>;
  2554. 01533
  2555. 01534 <span class="comment">// merging backup exists</span>
  2556. 01535
  2557. 01536 <span class="keywordflow">if</span> (!msg-&gt;<a class="code" href="class_r_s_v_p_path_tear___base.html#a10">getForce</a>())
  2558. 01537 {
  2559. 01538 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> &lt;&lt; <span class="stringliteral">"merging backup tunnel exists and force flag is not set, ignoring teardown"</span> &lt;&lt; endl;
  2560. 01539 <span class="keyword">delete</span> msg;
  2561. 01540 <span class="keywordflow">return</span>;
  2562. 01541 }
  2563. 01542
  2564. 01543 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> &lt;&lt; <span class="stringliteral">"merging backup must be removed too"</span> &lt;&lt; endl;
  2565. 01544
  2566. 01545 <a class="code" href="class_r_s_v_p.html#b17">removePSB</a>(&amp;(*it));
  2567. 01546 --it;
  2568. 01547
  2569. 01548 modified = <span class="keyword">true</span>;
  2570. 01549 }
  2571. 01550
  2572. 01551 <span class="keywordflow">if</span> (modified)
  2573. 01552 psb = findPSB(msg-&gt;getSession(), msg-&gt;getSenderTemplate());
  2574. 01553
  2575. 01554 <span class="comment">// forward path teardown downstream</span>
  2576. 01555
  2577. 01556 if (psb-&gt;ERO.size() &gt; 0)
  2578. 01557 {
  2579. 01558 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> &lt;&lt; <span class="stringliteral">"forward teardown downstream"</span> &lt;&lt; endl;
  2580. 01559
  2581. 01560 <a class="code" href="class_r_s_v_p.html#b34">sendPathTearMessage</a>(psb-&gt;ERO[0].node, psb-&gt;Session_Object, psb-&gt;Sender_Template_Object,
  2582. 01561 <a class="code" href="class_r_s_v_p.html#r4">tedmod</a>-&gt;<a class="code" href="class_t_e_d.html#z61_0">interfaceAddrByPeerAddress</a>(psb-&gt;ERO[0].node), <a class="code" href="class_r_s_v_p.html#r13">routerId</a>, msg-&gt;<a class="code" href="class_r_s_v_p_path_tear___base.html#a10">getForce</a>());
  2583. 01562 }
  2584. 01563
  2585. 01564 <span class="comment">// remove path state block</span>
  2586. 01565
  2587. 01566 <a class="code" href="class_r_s_v_p.html#b17">removePSB</a>(psb);
  2588. 01567
  2589. 01568 <span class="keyword">delete</span> msg;
  2590. 01569 }
  2591. </pre></div>
  2592. <p>
  2593. </td>
  2594. </tr>
  2595. </table>
  2596. <a class="anchor" name="b2" doxytag="RSVP::processPSB_TIMEOUT"></a><p>
  2597. <table class="mdTable" cellpadding="2" cellspacing="0">
  2598. <tr>
  2599. <td class="mdRow">
  2600. <table cellpadding="0" cellspacing="0" border="0">
  2601. <tr>
  2602. <td class="md" nowrap valign="top">void RSVP::processPSB_TIMEOUT </td>
  2603. <td class="md" valign="top">(&nbsp;</td>
  2604. <td class="md" nowrap valign="top"><a class="el" href="class_psb_timeout_msg.html">PsbTimeoutMsg</a> *&nbsp;</td>
  2605. <td class="mdname1" valign="top" nowrap> <em>msg</em> </td>
  2606. <td class="md" valign="top">&nbsp;)&nbsp;</td>
  2607. <td class="md" nowrap><code> [protected]</code></td>
  2608. </tr>
  2609. </table>
  2610. </td>
  2611. </tr>
  2612. </table>
  2613. <table cellspacing="5" cellpadding="0" border="0">
  2614. <tr>
  2615. <td>
  2616. &nbsp;
  2617. </td>
  2618. <td>
  2619. <p>
  2620. <div class="fragment"><pre class="fragment">00480 {
  2621. 00481 PathStateBlock_t *psb = <a class="code" href="class_r_s_v_p.html#b47">findPsbById</a>(msg-&gt;<a class="code" href="class_psb_timeout_msg.html#a7">getId</a>());
  2622. 00482 ASSERT(psb);
  2623. 00483
  2624. 00484 <span class="keywordflow">if</span> (<a class="code" href="class_r_s_v_p.html#r4">tedmod</a>-&gt;<a class="code" href="class_t_e_d.html#z61_5">isLocalAddress</a>(psb-&gt;OutInterface))
  2625. 00485 {
  2626. 00486 ASSERT(psb-&gt;OutInterface == <a class="code" href="class_r_s_v_p.html#r4">tedmod</a>-&gt;<a class="code" href="class_t_e_d.html#z61_0">interfaceAddrByPeerAddress</a>(psb-&gt;ERO[0].node));
  2627. 00487
  2628. 00488 <a class="code" href="class_r_s_v_p.html#b34">sendPathTearMessage</a>(psb-&gt;ERO[0].node, psb-&gt;Session_Object,
  2629. 00489 psb-&gt;Sender_Template_Object, psb-&gt;OutInterface, routerId, <span class="keyword">false</span>);
  2630. 00490 }
  2631. 00491
  2632. 00492 <a class="code" href="class_r_s_v_p.html#b17">removePSB</a>(psb);
  2633. 00493 }
  2634. </pre></div>
  2635. <p>
  2636. </td>
  2637. </tr>
  2638. </table>
  2639. <a class="anchor" name="b1" doxytag="RSVP::processPSB_TIMER"></a><p>
  2640. <table class="mdTable" cellpadding="2" cellspacing="0">
  2641. <tr>
  2642. <td class="mdRow">
  2643. <table cellpadding="0" cellspacing="0" border="0">
  2644. <tr>
  2645. <td class="md" nowrap valign="top">void RSVP::processPSB_TIMER </td>
  2646. <td class="md" valign="top">(&nbsp;</td>
  2647. <td class="md" nowrap valign="top"><a class="el" href="class_psb_timer_msg.html">PsbTimerMsg</a> *&nbsp;</td>
  2648. <td class="mdname1" valign="top" nowrap> <em>msg</em> </td>
  2649. <td class="md" valign="top">&nbsp;)&nbsp;</td>
  2650. <td class="md" nowrap><code> [protected]</code></td>
  2651. </tr>
  2652. </table>
  2653. </td>
  2654. </tr>
  2655. </table>
  2656. <table cellspacing="5" cellpadding="0" border="0">
  2657. <tr>
  2658. <td>
  2659. &nbsp;
  2660. </td>
  2661. <td>
  2662. <p>
  2663. <div class="fragment"><pre class="fragment">00471 {
  2664. 00472 PathStateBlock_t *psb = <a class="code" href="class_r_s_v_p.html#b47">findPsbById</a>(msg-&gt;<a class="code" href="class_psb_timer_msg.html#a7">getId</a>());
  2665. 00473 ASSERT(psb);
  2666. 00474
  2667. 00475 <a class="code" href="class_r_s_v_p.html#b23">refreshPath</a>(psb);
  2668. 00476 <a class="code" href="class_r_s_v_p.html#b27">scheduleRefreshTimer</a>(psb, PSB_REFRESH_INTERVAL);
  2669. 00477 }
  2670. </pre></div>
  2671. <p>
  2672. </td>
  2673. </tr>
  2674. </table>
  2675. <a class="anchor" name="b12" doxytag="RSVP::processResvMsg"></a><p>
  2676. <table class="mdTable" cellpadding="2" cellspacing="0">
  2677. <tr>
  2678. <td class="mdRow">
  2679. <table cellpadding="0" cellspacing="0" border="0">
  2680. <tr>
  2681. <td class="md" nowrap valign="top">void RSVP::processResvMsg </td>
  2682. <td class="md" valign="top">(&nbsp;</td>
  2683. <td class="md" nowrap valign="top"><a class="el" href="class_r_s_v_p_resv_msg.html">RSVPResvMsg</a> *&nbsp;</td>
  2684. <td class="mdname1" valign="top" nowrap> <em>msg</em> </td>
  2685. <td class="md" valign="top">&nbsp;)&nbsp;</td>
  2686. <td class="md" nowrap><code> [protected]</code></td>
  2687. </tr>
  2688. </table>
  2689. </td>
  2690. </tr>
  2691. </table>
  2692. <table cellspacing="5" cellpadding="0" border="0">
  2693. <tr>
  2694. <td>
  2695. &nbsp;
  2696. </td>
  2697. <td>
  2698. <p>
  2699. <div class="fragment"><pre class="fragment">01637 {
  2700. 01638 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> &lt;&lt; <span class="stringliteral">"Received RESV_MESSAGE"</span> &lt;&lt; endl;
  2701. 01639 <a class="code" href="class_r_s_v_p.html#b52">print</a>(msg);
  2702. 01640
  2703. 01641 <a class="code" href="class_i_p_address.html">IPAddress</a> OI = msg-&gt;<a class="code" href="class_r_s_v_p_resv_msg.html#a5">getLIH</a>();
  2704. 01642
  2705. 01643 <span class="comment">// find matching PSB for every flow ****************************************</span>
  2706. 01644
  2707. 01645 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> m = 0; m &lt; msg-&gt;getFlowDescriptor().size(); m++)
  2708. 01646 {
  2709. 01647
  2710. 01648 PathStateBlock_t *psb = <a class="code" href="class_r_s_v_p.html#b45">findPSB</a>(msg-&gt;<a class="code" href="class_r_s_v_p_packet___base.html#a4">getSession</a>(), (<a class="code" href="struct_sender_template_obj__t.html">SenderTemplateObj_t</a>&amp;)msg-&gt;<a class="code" href="class_r_s_v_p_resv_msg___base.html#a7">getFlowDescriptor</a>()[m].Filter_Spec_Object);
  2711. 01649 <span class="keywordflow">if</span> (!psb)
  2712. 01650 {
  2713. 01651 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> &lt;&lt; <span class="stringliteral">"matching PSB not found for lspid="</span> &lt;&lt; msg-&gt;<a class="code" href="class_r_s_v_p_resv_msg___base.html#a7">getFlowDescriptor</a>()[m].Filter_Spec_Object.Lsp_Id &lt;&lt; endl;
  2714. 01652
  2715. 01653 <span class="comment">// remove descriptor from message</span>
  2716. 01654 msg-&gt;<a class="code" href="class_r_s_v_p_resv_msg___base.html#a7">getFlowDescriptor</a>().erase(msg-&gt;<a class="code" href="class_r_s_v_p_resv_msg___base.html#a7">getFlowDescriptor</a>().begin() + m);
  2717. 01655 --m;
  2718. 01656 }
  2719. 01657 }
  2720. 01658
  2721. 01659 <span class="keywordflow">if</span> (msg-&gt;<a class="code" href="class_r_s_v_p_resv_msg___base.html#a7">getFlowDescriptor</a>().size() == 0)
  2722. 01660 {
  2723. 01661 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> &lt;&lt; <span class="stringliteral">"no matching PSB found"</span> &lt;&lt; endl;
  2724. 01662 <span class="keyword">delete</span> msg;
  2725. 01663 <span class="keywordflow">return</span>;
  2726. 01664 }
  2727. 01665
  2728. 01666 <span class="comment">// find matching RSB *******************************************************</span>
  2729. 01667
  2730. 01668 ResvStateBlock_t *rsb = NULL;
  2731. 01669 <span class="keywordflow">for</span> (RSBVector::iterator it = <a class="code" href="class_r_s_v_p.html#r15">RSBList</a>.begin(); it != <a class="code" href="class_r_s_v_p.html#r15">RSBList</a>.end(); it++)
  2732. 01670 {
  2733. 01671 <span class="keywordflow">if</span> (!(msg-&gt;<a class="code" href="class_r_s_v_p_packet.html#a9">isInSession</a>(&amp;it-&gt;Session_Object)))
  2734. 01672 <span class="keywordflow">continue</span>;
  2735. 01673
  2736. 01674 <span class="keywordflow">if</span> (it-&gt;Next_Hop_Address != msg-&gt;<a class="code" href="class_r_s_v_p_resv_msg.html#a4">getNHOP</a>())
  2737. 01675 <span class="keywordflow">continue</span>;
  2738. 01676
  2739. 01677 <span class="keywordflow">if</span> (it-&gt;OI != msg-&gt;<a class="code" href="class_r_s_v_p_resv_msg.html#a5">getLIH</a>())
  2740. 01678 <span class="keywordflow">continue</span>;
  2741. 01679
  2742. 01680 rsb = &amp;(*it);
  2743. 01681 <span class="keywordflow">break</span>;
  2744. 01682 }
  2745. 01683
  2746. 01684 <span class="keywordflow">if</span> (!rsb)
  2747. 01685 {
  2748. 01686 rsb = <a class="code" href="class_r_s_v_p.html#b18">createRSB</a>(msg);
  2749. 01687
  2750. 01688 <a class="code" href="class_r_s_v_p.html#b30">scheduleCommitTimer</a>(rsb);
  2751. 01689
  2752. 01690 <span class="comment">// reservation is new, propagate upstream immediately</span>
  2753. 01691 <a class="code" href="class_r_s_v_p.html#b27">scheduleRefreshTimer</a>(rsb, 0.0);
  2754. 01692 }
  2755. 01693 <span class="keywordflow">else</span>
  2756. 01694 <a class="code" href="class_r_s_v_p.html#b20">updateRSB</a>(rsb, msg);
  2757. 01695
  2758. 01696 <a class="code" href="class_r_s_v_p.html#b28">scheduleTimeout</a>(rsb);
  2759. 01697
  2760. 01698 <span class="keyword">delete</span> msg;
  2761. 01699 }
  2762. </pre></div>
  2763. <p>
  2764. </td>
  2765. </tr>
  2766. </table>
  2767. <a class="anchor" name="b4" doxytag="RSVP::processRSB_COMMIT_TIMER"></a><p>
  2768. <table class="mdTable" cellpadding="2" cellspacing="0">
  2769. <tr>
  2770. <td class="mdRow">
  2771. <table cellpadding="0" cellspacing="0" border="0">
  2772. <tr>
  2773. <td class="md" nowrap valign="top">void RSVP::processRSB_COMMIT_TIMER </td>
  2774. <td class="md" valign="top">(&nbsp;</td>
  2775. <td class="md" nowrap valign="top"><a class="el" href="class_rsb_commit_timer_msg.html">RsbCommitTimerMsg</a> *&nbsp;</td>
  2776. <td class="mdname1" valign="top" nowrap> <em>msg</em> </td>
  2777. <td class="md" valign="top">&nbsp;)&nbsp;</td>
  2778. <td class="md" nowrap><code> [protected]</code></td>
  2779. </tr>
  2780. </table>
  2781. </td>
  2782. </tr>
  2783. </table>
  2784. <table cellspacing="5" cellpadding="0" border="0">
  2785. <tr>
  2786. <td>
  2787. &nbsp;
  2788. </td>
  2789. <td>
  2790. <p>
  2791. <div class="fragment"><pre class="fragment">00513 {
  2792. 00514 ResvStateBlock_t *rsb = <a class="code" href="class_r_s_v_p.html#b48">findRsbById</a>(msg-&gt;<a class="code" href="class_rsb_commit_timer_msg.html#a7">getId</a>());
  2793. 00515 <a class="code" href="class_r_s_v_p.html#b26">commitResv</a>(rsb);
  2794. 00516 }
  2795. </pre></div>
  2796. <p>
  2797. </td>
  2798. </tr>
  2799. </table>
  2800. <a class="anchor" name="b3" doxytag="RSVP::processRSB_REFRESH_TIMER"></a><p>
  2801. <table class="mdTable" cellpadding="2" cellspacing="0">
  2802. <tr>
  2803. <td class="mdRow">
  2804. <table cellpadding="0" cellspacing="0" border="0">
  2805. <tr>
  2806. <td class="md" nowrap valign="top">void RSVP::processRSB_REFRESH_TIMER </td>
  2807. <td class="md" valign="top">(&nbsp;</td>
  2808. <td class="md" nowrap valign="top"><a class="el" href="class_rsb_refresh_timer_msg.html">RsbRefreshTimerMsg</a> *&nbsp;</td>
  2809. <td class="mdname1" valign="top" nowrap> <em>msg</em> </td>
  2810. <td class="md" valign="top">&nbsp;)&nbsp;</td>
  2811. <td class="md" nowrap><code> [protected]</code></td>
  2812. </tr>
  2813. </table>
  2814. </td>
  2815. </tr>
  2816. </table>
  2817. <table cellspacing="5" cellpadding="0" border="0">
  2818. <tr>
  2819. <td>
  2820. &nbsp;
  2821. </td>
  2822. <td>
  2823. <p>
  2824. <div class="fragment"><pre class="fragment">00497 {
  2825. 00498 ResvStateBlock_t *rsb = <a class="code" href="class_r_s_v_p.html#b48">findRsbById</a>(msg-&gt;<a class="code" href="class_rsb_refresh_timer_msg.html#a7">getId</a>());
  2826. 00499 <span class="keywordflow">if</span> (rsb-&gt;commitTimerMsg-&gt;isScheduled())
  2827. 00500 {
  2828. 00501 <span class="comment">// reschedule after commit</span>
  2829. 00502 <a class="code" href="class_r_s_v_p.html#b27">scheduleRefreshTimer</a>(rsb, 0.0);
  2830. 00503 }
  2831. 00504 <span class="keywordflow">else</span>
  2832. 00505 {
  2833. 00506 <a class="code" href="class_r_s_v_p.html#b24">refreshResv</a>(rsb);
  2834. 00507
  2835. 00508 <a class="code" href="class_r_s_v_p.html#b27">scheduleRefreshTimer</a>(rsb, RSB_REFRESH_INTERVAL);
  2836. 00509 }
  2837. 00510 }
  2838. </pre></div>
  2839. <p>
  2840. </td>
  2841. </tr>
  2842. </table>
  2843. <a class="anchor" name="b5" doxytag="RSVP::processRSB_TIMEOUT"></a><p>
  2844. <table class="mdTable" cellpadding="2" cellspacing="0">
  2845. <tr>
  2846. <td class="mdRow">
  2847. <table cellpadding="0" cellspacing="0" border="0">
  2848. <tr>
  2849. <td class="md" nowrap valign="top">void RSVP::processRSB_TIMEOUT </td>
  2850. <td class="md" valign="top">(&nbsp;</td>
  2851. <td class="md" nowrap valign="top"><a class="el" href="class_rsb_timeout_msg.html">RsbTimeoutMsg</a> *&nbsp;</td>
  2852. <td class="mdname1" valign="top" nowrap> <em>msg</em> </td>
  2853. <td class="md" valign="top">&nbsp;)&nbsp;</td>
  2854. <td class="md" nowrap><code> [protected]</code></td>
  2855. </tr>
  2856. </table>
  2857. </td>
  2858. </tr>
  2859. </table>
  2860. <table cellspacing="5" cellpadding="0" border="0">
  2861. <tr>
  2862. <td>
  2863. &nbsp;
  2864. </td>
  2865. <td>
  2866. <p>
  2867. <div class="fragment"><pre class="fragment">00519 {
  2868. 00520 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> &lt;&lt; <span class="stringliteral">"RSB TIMEOUT RSB "</span> &lt;&lt; msg-&gt;<a class="code" href="class_rsb_timeout_msg.html#a7">getId</a>() &lt;&lt; endl;
  2869. 00521
  2870. 00522 ResvStateBlock_t *rsb = <a class="code" href="class_r_s_v_p.html#b48">findRsbById</a>(msg-&gt;<a class="code" href="class_rsb_timeout_msg.html#a7">getId</a>());
  2871. 00523
  2872. 00524 ASSERT(rsb);
  2873. 00525 ASSERT(<a class="code" href="class_r_s_v_p.html#r4">tedmod</a>-&gt;<a class="code" href="class_t_e_d.html#z61_5">isLocalAddress</a>(rsb-&gt;OI));
  2874. 00526
  2875. 00527 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; rsb-&gt;FlowDescriptor.size(); i++)
  2876. 00528 {
  2877. 00529 <a class="code" href="class_r_s_v_p.html#b22">removeRsbFilter</a>(rsb, 0);
  2878. 00530 }
  2879. 00531 <a class="code" href="class_r_s_v_p.html#b21">removeRSB</a>(rsb);
  2880. 00532 }
  2881. </pre></div>
  2882. <p>
  2883. </td>
  2884. </tr>
  2885. </table>
  2886. <a class="anchor" name="b9" doxytag="RSVP::processRSVPMessage"></a><p>
  2887. <table class="mdTable" cellpadding="2" cellspacing="0">
  2888. <tr>
  2889. <td class="mdRow">
  2890. <table cellpadding="0" cellspacing="0" border="0">
  2891. <tr>
  2892. <td class="md" nowrap valign="top">void RSVP::processRSVPMessage </td>
  2893. <td class="md" valign="top">(&nbsp;</td>
  2894. <td class="md" nowrap valign="top"><a class="el" href="class_r_s_v_p_message.html">RSVPMessage</a> *&nbsp;</td>
  2895. <td class="mdname1" valign="top" nowrap> <em>msg</em> </td>
  2896. <td class="md" valign="top">&nbsp;)&nbsp;</td>
  2897. <td class="md" nowrap><code> [protected]</code></td>
  2898. </tr>
  2899. </table>
  2900. </td>
  2901. </tr>
  2902. </table>
  2903. <table cellspacing="5" cellpadding="0" border="0">
  2904. <tr>
  2905. <td>
  2906. &nbsp;
  2907. </td>
  2908. <td>
  2909. <p>
  2910. <div class="fragment"><pre class="fragment">01339 {
  2911. 01340 <span class="keywordtype">int</span> kind = msg-&gt;<a class="code" href="class_r_s_v_p_message.html#a7">getRsvpKind</a>();
  2912. 01341 <span class="keywordflow">switch</span>(kind)
  2913. 01342 {
  2914. 01343 <span class="keywordflow">case</span> <a class="code" href="_r_s_v_p_packet__m_8h.html#a1">PATH_MESSAGE</a>:
  2915. 01344 <a class="code" href="class_r_s_v_p.html#b11">processPathMsg</a>(check_and_cast&lt;RSVPPathMsg*&gt;(msg));
  2916. 01345 <span class="keywordflow">break</span>;
  2917. 01346
  2918. 01347 <span class="keywordflow">case</span> <a class="code" href="_r_s_v_p_packet__m_8h.html#a2">RESV_MESSAGE</a>:
  2919. 01348 <a class="code" href="class_r_s_v_p.html#b12">processResvMsg</a>(check_and_cast&lt;RSVPResvMsg*&gt;(msg));
  2920. 01349 <span class="keywordflow">break</span>;
  2921. 01350
  2922. 01351 <span class="keywordflow">case</span> <a class="code" href="_r_s_v_p_packet__m_8h.html#a3">PTEAR_MESSAGE</a>:
  2923. 01352 <a class="code" href="class_r_s_v_p.html#b13">processPathTearMsg</a>(check_and_cast&lt;RSVPPathTear*&gt;(msg));
  2924. 01353 <span class="keywordflow">break</span>;
  2925. 01354
  2926. 01355 <span class="keywordflow">case</span> <a class="code" href="_r_s_v_p_packet__m_8h.html#a7">HELLO_MESSAGE</a>:
  2927. 01356 <a class="code" href="class_r_s_v_p.html#b10">processHelloMsg</a>(check_and_cast&lt;RSVPHelloMsg*&gt;(msg));
  2928. 01357 <span class="keywordflow">break</span>;
  2929. 01358
  2930. 01359 <span class="keywordflow">case</span> <a class="code" href="_r_s_v_p_packet__m_8h.html#a5">PERROR_MESSAGE</a>:
  2931. 01360 <a class="code" href="class_r_s_v_p.html#b14">processPathErrMsg</a>(check_and_cast&lt;RSVPPathError*&gt;(msg));
  2932. 01361 <span class="keywordflow">break</span>;
  2933. 01362
  2934. 01363 <span class="keywordflow">default</span>:
  2935. 01364 ASSERT(<span class="keyword">false</span>);
  2936. 01365 }
  2937. 01366 }
  2938. </pre></div>
  2939. <p>
  2940. </td>
  2941. </tr>
  2942. </table>
  2943. <a class="anchor" name="b0" doxytag="RSVP::processSignallingMessage"></a><p>
  2944. <table class="mdTable" cellpadding="2" cellspacing="0">
  2945. <tr>
  2946. <td class="mdRow">
  2947. <table cellpadding="0" cellspacing="0" border="0">
  2948. <tr>
  2949. <td class="md" nowrap valign="top">void RSVP::processSignallingMessage </td>
  2950. <td class="md" valign="top">(&nbsp;</td>
  2951. <td class="md" nowrap valign="top"><a class="el" href="class_signalling_msg.html">SignallingMsg</a> *&nbsp;</td>
  2952. <td class="mdname1" valign="top" nowrap> <em>msg</em> </td>
  2953. <td class="md" valign="top">&nbsp;)&nbsp;</td>
  2954. <td class="md" nowrap><code> [protected]</code></td>
  2955. </tr>
  2956. </table>
  2957. </td>
  2958. </tr>
  2959. </table>
  2960. <table cellspacing="5" cellpadding="0" border="0">
  2961. <tr>
  2962. <td>
  2963. &nbsp;
  2964. </td>
  2965. <td>
  2966. <p>
  2967. <div class="fragment"><pre class="fragment">01725 {
  2968. 01726 <span class="keywordtype">int</span> command = msg-&gt;<a class="code" href="class_signalling_msg.html#a7">getCommand</a>();
  2969. 01727 <span class="keywordflow">switch</span>(command)
  2970. 01728 {
  2971. 01729 <span class="keywordflow">case</span> <a class="code" href="_signalling_msg__m_8h.html#a1">MSG_PSB_TIMER</a>:
  2972. 01730 <a class="code" href="class_r_s_v_p.html#b1">processPSB_TIMER</a>(check_and_cast&lt;PsbTimerMsg*&gt;(msg));
  2973. 01731 <span class="keywordflow">break</span>;
  2974. 01732
  2975. 01733 <span class="keywordflow">case</span> <a class="code" href="_signalling_msg__m_8h.html#a2">MSG_PSB_TIMEOUT</a>:
  2976. 01734 <a class="code" href="class_r_s_v_p.html#b2">processPSB_TIMEOUT</a>(check_and_cast&lt;PsbTimeoutMsg*&gt;(msg));
  2977. 01735 <span class="keywordflow">break</span>;
  2978. 01736
  2979. 01737 <span class="keywordflow">case</span> <a class="code" href="_signalling_msg__m_8h.html#a3">MSG_RSB_REFRESH_TIMER</a>:
  2980. 01738 <a class="code" href="class_r_s_v_p.html#b3">processRSB_REFRESH_TIMER</a>(check_and_cast&lt;RsbRefreshTimerMsg*&gt;(msg));
  2981. 01739 <span class="keywordflow">break</span>;
  2982. 01740
  2983. 01741 <span class="keywordflow">case</span> <a class="code" href="_signalling_msg__m_8h.html#a4">MSG_RSB_COMMIT_TIMER</a>:
  2984. 01742 <a class="code" href="class_r_s_v_p.html#b4">processRSB_COMMIT_TIMER</a>(check_and_cast&lt;RsbCommitTimerMsg*&gt;(msg));
  2985. 01743 <span class="keywordflow">break</span>;
  2986. 01744
  2987. 01745 <span class="keywordflow">case</span> <a class="code" href="_signalling_msg__m_8h.html#a5">MSG_RSB_TIMEOUT</a>:
  2988. 01746 <a class="code" href="class_r_s_v_p.html#b5">processRSB_TIMEOUT</a>(check_and_cast&lt;RsbTimeoutMsg*&gt;(msg));
  2989. 01747 <span class="keywordflow">break</span>;
  2990. 01748
  2991. 01749 <span class="keywordflow">case</span> <a class="code" href="_signalling_msg__m_8h.html#a6">MSG_HELLO_TIMER</a>:
  2992. 01750 <a class="code" href="class_r_s_v_p.html#b6">processHELLO_TIMER</a>(check_and_cast&lt;HelloTimerMsg*&gt;(msg));
  2993. 01751 <span class="keywordflow">break</span>;
  2994. 01752
  2995. 01753 <span class="keywordflow">case</span> <a class="code" href="_signalling_msg__m_8h.html#a7">MSG_HELLO_TIMEOUT</a>:
  2996. 01754 <a class="code" href="class_r_s_v_p.html#b7">processHELLO_TIMEOUT</a>(check_and_cast&lt;HelloTimeoutMsg*&gt;(msg));
  2997. 01755 <span class="keywordflow">break</span>;
  2998. 01756
  2999. 01757 <span class="keywordflow">case</span> <a class="code" href="_signalling_msg__m_8h.html#a8">MSG_PATH_NOTIFY</a>:
  3000. 01758 <a class="code" href="class_r_s_v_p.html#b8">processPATH_NOTIFY</a>(check_and_cast&lt;PathNotifyMsg*&gt;(msg));
  3001. 01759 <span class="keywordflow">break</span>;
  3002. 01760
  3003. 01761 <span class="keywordflow">default</span>:
  3004. 01762 ASSERT(<span class="keyword">false</span>);
  3005. 01763 }
  3006. 01764 }
  3007. </pre></div>
  3008. <p>
  3009. </td>
  3010. </tr>
  3011. </table>
  3012. <a class="anchor" name="b54" doxytag="RSVP::readTrafficFromXML"></a><p>
  3013. <table class="mdTable" cellpadding="2" cellspacing="0">
  3014. <tr>
  3015. <td class="mdRow">
  3016. <table cellpadding="0" cellspacing="0" border="0">
  3017. <tr>
  3018. <td class="md" nowrap valign="top">void RSVP::readTrafficFromXML </td>
  3019. <td class="md" valign="top">(&nbsp;</td>
  3020. <td class="md" nowrap valign="top">const cXMLElement *&nbsp;</td>
  3021. <td class="mdname1" valign="top" nowrap> <em>traffic</em> </td>
  3022. <td class="md" valign="top">&nbsp;)&nbsp;</td>
  3023. <td class="md" nowrap><code> [protected]</code></td>
  3024. </tr>
  3025. </table>
  3026. </td>
  3027. </tr>
  3028. </table>
  3029. <table cellspacing="5" cellpadding="0" border="0">
  3030. <tr>
  3031. <td>
  3032. &nbsp;
  3033. </td>
  3034. <td>
  3035. <p>
  3036. <div class="fragment"><pre class="fragment">00148 {
  3037. 00149 ASSERT(traffic);
  3038. 00150 ASSERT(!strcmp(traffic-&gt;getTagName(), <span class="stringliteral">"sessions"</span>));
  3039. 00151 <a class="code" href="_x_m_l_utils_8cc.html#a3">checkTags</a>(traffic, <span class="stringliteral">"session"</span>);
  3040. 00152 cXMLElementList list = traffic-&gt;getChildrenByTagName(<span class="stringliteral">"session"</span>);
  3041. 00153 <span class="keywordflow">for</span> (cXMLElementList::iterator it=list.begin(); it != list.end(); it++)
  3042. 00154 <a class="code" href="class_r_s_v_p.html#b55">readTrafficSessionFromXML</a>(*it);
  3043. 00155 }
  3044. </pre></div>
  3045. <p>
  3046. </td>
  3047. </tr>
  3048. </table>
  3049. <a class="anchor" name="b56" doxytag="RSVP::readTrafficRouteFromXML"></a><p>
  3050. <table class="mdTable" cellpadding="2" cellspacing="0">
  3051. <tr>
  3052. <td class="mdRow">
  3053. <table cellpadding="0" cellspacing="0" border="0">
  3054. <tr>
  3055. <td class="md" nowrap valign="top"><a class="el" href="_int_serv__m_8h.html#a2">EroVector</a> RSVP::readTrafficRouteFromXML </td>
  3056. <td class="md" valign="top">(&nbsp;</td>
  3057. <td class="md" nowrap valign="top">const cXMLElement *&nbsp;</td>
  3058. <td class="mdname1" valign="top" nowrap> <em>route</em> </td>
  3059. <td class="md" valign="top">&nbsp;)&nbsp;</td>
  3060. <td class="md" nowrap><code> [protected]</code></td>
  3061. </tr>
  3062. </table>
  3063. </td>
  3064. </tr>
  3065. </table>
  3066. <table cellspacing="5" cellpadding="0" border="0">
  3067. <tr>
  3068. <td>
  3069. &nbsp;
  3070. </td>
  3071. <td>
  3072. <p>
  3073. <div class="fragment"><pre class="fragment">00158 {
  3074. 00159 <a class="code" href="_x_m_l_utils_8cc.html#a3">checkTags</a>(route, <span class="stringliteral">"node lnode"</span>);
  3075. 00160
  3076. 00161 <a class="code" href="_int_serv__m_8h.html#a2">EroVector</a> ERO;
  3077. 00162
  3078. 00163 <span class="keywordflow">for</span> (cXMLElement *hop = route-&gt;getFirstChild(); hop; hop = hop-&gt;getNextSibling())
  3079. 00164 {
  3080. 00165 <a class="code" href="struct_ero_obj__t.html">EroObj_t</a> h;
  3081. 00166 <span class="keywordflow">if</span> (!strcmp(hop-&gt;getTagName(), <span class="stringliteral">"node"</span>))
  3082. 00167 {
  3083. 00168 h.<a class="code" href="struct_ero_obj__t.html#o0">L</a> = <span class="keyword">false</span>;
  3084. 00169 h.<a class="code" href="struct_ero_obj__t.html#o1">node</a> = <a class="code" href="class_i_p_address_resolver.html">IPAddressResolver</a>().resolve(hop-&gt;getNodeValue()).get4();
  3085. 00170 }
  3086. 00171 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!strcmp(hop-&gt;getTagName(), <span class="stringliteral">"lnode"</span>))
  3087. 00172 {
  3088. 00173 h.<a class="code" href="struct_ero_obj__t.html#o0">L</a> = <span class="keyword">true</span>;
  3089. 00174 h.<a class="code" href="struct_ero_obj__t.html#o1">node</a> = <a class="code" href="class_i_p_address_resolver.html">IPAddressResolver</a>().resolve(hop-&gt;getNodeValue()).get4();
  3090. 00175 }
  3091. 00176 <span class="keywordflow">else</span>
  3092. 00177 {
  3093. 00178 ASSERT(<span class="keyword">false</span>);
  3094. 00179 }
  3095. 00180 ERO.push_back(h);
  3096. 00181 }
  3097. 00182
  3098. 00183 <span class="keywordflow">return</span> ERO;
  3099. 00184 }
  3100. </pre></div>
  3101. <p>
  3102. </td>
  3103. </tr>
  3104. </table>
  3105. <a class="anchor" name="b55" doxytag="RSVP::readTrafficSessionFromXML"></a><p>
  3106. <table class="mdTable" cellpadding="2" cellspacing="0">
  3107. <tr>
  3108. <td class="mdRow">
  3109. <table cellpadding="0" cellspacing="0" border="0">
  3110. <tr>
  3111. <td class="md" nowrap valign="top">void RSVP::readTrafficSessionFromXML </td>
  3112. <td class="md" valign="top">(&nbsp;</td>
  3113. <td class="md" nowrap valign="top">const cXMLElement *&nbsp;</td>
  3114. <td class="mdname1" valign="top" nowrap> <em>session</em> </td>
  3115. <td class="md" valign="top">&nbsp;)&nbsp;</td>
  3116. <td class="md" nowrap><code> [protected]</code></td>
  3117. </tr>
  3118. </table>
  3119. </td>
  3120. </tr>
  3121. </table>
  3122. <table cellspacing="5" cellpadding="0" border="0">
  3123. <tr>
  3124. <td>
  3125. &nbsp;
  3126. </td>
  3127. <td>
  3128. <p>
  3129. <div class="fragment"><pre class="fragment">00187 {
  3130. 00188 <a class="code" href="_x_m_l_utils_8cc.html#a3">checkTags</a>(session, <span class="stringliteral">"tunnel_id endpoint setup_pri holding_pri paths"</span>);
  3131. 00189
  3132. 00190 traffic_session_t newSession;
  3133. 00191
  3134. 00192 newSession.sobj.Tunnel_Id = <a class="code" href="_x_m_l_utils_8cc.html#a8">getParameterIntValue</a>(session, <span class="stringliteral">"tunnel_id"</span>);
  3135. 00193 newSession.sobj.Extended_Tunnel_Id = <a class="code" href="class_r_s_v_p.html#r13">routerId</a>.<a class="code" href="class_i_p_address.html#a5">getInt</a>();
  3136. 00194 newSession.sobj.DestAddress = <a class="code" href="_x_m_l_utils_8cc.html#a10">getParameterIPAddressValue</a>(session, <span class="stringliteral">"endpoint"</span>);
  3137. 00195
  3138. 00196 std::vector&lt;traffic_session_t&gt;::iterator sit = <a class="code" href="class_r_s_v_p.html#b49">findSession</a>(newSession.sobj);
  3139. 00197
  3140. 00198 <span class="keywordtype">bool</span> merge;
  3141. 00199
  3142. 00200 <span class="keywordflow">if</span> (sit != <a class="code" href="class_r_s_v_p.html#r0">traffic</a>.end())
  3143. 00201 {
  3144. 00202 <span class="comment">// session already exits, add new paths</span>
  3145. 00203
  3146. 00204 merge = <span class="keyword">true</span>;
  3147. 00205
  3148. 00206 ASSERT(!<a class="code" href="_x_m_l_utils_8cc.html#a1">getUniqueChildIfExists</a>(session, <span class="stringliteral">"holding_pri"</span>) || <a class="code" href="_x_m_l_utils_8cc.html#a8">getParameterIntValue</a>(session, <span class="stringliteral">"holding_pri"</span>) == sit-&gt;sobj.holdingPri);
  3149. 00207 ASSERT(!<a class="code" href="_x_m_l_utils_8cc.html#a1">getUniqueChildIfExists</a>(session, <span class="stringliteral">"setup_pri"</span>) || <a class="code" href="_x_m_l_utils_8cc.html#a8">getParameterIntValue</a>(session, <span class="stringliteral">"setup_pri"</span>) == sit-&gt;sobj.setupPri);
  3150. 00208
  3151. 00209 newSession.sobj.setupPri = sit-&gt;sobj.setupPri;
  3152. 00210 newSession.sobj.holdingPri = sit-&gt;sobj.holdingPri;
  3153. 00211
  3154. 00212 sit-&gt;sobj = newSession.sobj;
  3155. 00213 }
  3156. 00214 <span class="keywordflow">else</span>
  3157. 00215 {
  3158. 00216 <span class="comment">// session not found, create new</span>
  3159. 00217
  3160. 00218 merge = <span class="keyword">false</span>;
  3161. 00219
  3162. 00220 newSession.sobj.setupPri = <a class="code" href="_x_m_l_utils_8cc.html#a8">getParameterIntValue</a>(session, <span class="stringliteral">"setup_pri"</span>, 7);
  3163. 00221 newSession.sobj.holdingPri = <a class="code" href="_x_m_l_utils_8cc.html#a8">getParameterIntValue</a>(session, <span class="stringliteral">"holding_pri"</span>, 7);
  3164. 00222 }
  3165. 00223
  3166. 00224 <span class="keyword">const</span> cXMLElement *paths = <a class="code" href="_x_m_l_utils_8cc.html#a0">getUniqueChild</a>(session, <span class="stringliteral">"paths"</span>);
  3167. 00225 <a class="code" href="_x_m_l_utils_8cc.html#a3">checkTags</a>(paths, <span class="stringliteral">"path"</span>);
  3168. 00226
  3169. 00227 cXMLElementList list = paths-&gt;getChildrenByTagName(<span class="stringliteral">"path"</span>);
  3170. 00228 <span class="keywordflow">for</span> (cXMLElementList::iterator it=list.begin(); it != list.end(); it++)
  3171. 00229 {
  3172. 00230 cXMLElement *path = *it;
  3173. 00231 <a class="code" href="_x_m_l_utils_8cc.html#a3">checkTags</a>(path, <span class="stringliteral">"sender lspid bandwidth max_delay route permanent owner color"</span>);
  3174. 00232
  3175. 00233 <span class="keywordtype">int</span> lspid = <a class="code" href="_x_m_l_utils_8cc.html#a8">getParameterIntValue</a>(path, <span class="stringliteral">"lspid"</span>);;
  3176. 00234
  3177. 00235 std::vector&lt;traffic_path_t&gt;::iterator pit;
  3178. 00236
  3179. 00237 traffic_path_t newPath;
  3180. 00238
  3181. 00239 newPath.sender.SrcAddress = <a class="code" href="_x_m_l_utils_8cc.html#a10">getParameterIPAddressValue</a>(path, <span class="stringliteral">"sender"</span>, routerId);
  3182. 00240 newPath.sender.Lsp_Id = lspid;
  3183. 00241
  3184. 00242 <span class="comment">// make sure path doesn't exist yet</span>
  3185. 00243
  3186. 00244 <span class="keywordflow">if</span> (merge)
  3187. 00245 {
  3188. 00246 pit = <a class="code" href="class_r_s_v_p.html#b50">findPath</a>(&amp;(*sit), newPath.sender);
  3189. 00247 <span class="keywordflow">if</span> (pit != sit-&gt;paths.end())
  3190. 00248 {
  3191. 00249 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> &lt;&lt; <span class="stringliteral">"path "</span> &lt;&lt; lspid &lt;&lt; <span class="stringliteral">" already exists in this session, doing nothing"</span> &lt;&lt; endl;
  3192. 00250 <span class="keywordflow">continue</span>;
  3193. 00251 }
  3194. 00252 }
  3195. 00253 <span class="keywordflow">else</span>
  3196. 00254 {
  3197. 00255 pit = <a class="code" href="class_r_s_v_p.html#b50">findPath</a>(&amp;newSession, newPath.sender);
  3198. 00256 <span class="keywordflow">if</span> (pit != newSession.paths.end())
  3199. 00257 {
  3200. 00258 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> &lt;&lt; <span class="stringliteral">"path "</span> &lt;&lt; lspid &lt;&lt; <span class="stringliteral">" already exists in this session, doing nothing"</span> &lt;&lt; endl;
  3201. 00259 <span class="keywordflow">continue</span>;
  3202. 00260 }
  3203. 00261 }
  3204. 00262
  3205. 00263 <span class="keyword">const</span> <span class="keywordtype">char</span> *str = <a class="code" href="_x_m_l_utils_8cc.html#a4">getParameterStrValue</a>(path, <span class="stringliteral">"owner"</span>, <span class="stringliteral">""</span>);
  3206. 00264 <span class="keywordflow">if</span> (strlen(str))
  3207. 00265 {
  3208. 00266 cModule *mod = simulation.moduleByPath(str);
  3209. 00267 newPath.owner = mod-&gt;id();
  3210. 00268 }
  3211. 00269 <span class="keywordflow">else</span>
  3212. 00270 {
  3213. 00271 newPath.owner = id();
  3214. 00272 }
  3215. 00273
  3216. 00274 newPath.permanent = <a class="code" href="_x_m_l_utils_8cc.html#a5">getParameterBoolValue</a>(path, <span class="stringliteral">"permanent"</span>, <span class="keyword">true</span>);
  3217. 00275 newPath.color = <a class="code" href="_x_m_l_utils_8cc.html#a8">getParameterIntValue</a>(path, <span class="stringliteral">"color"</span>, 0);
  3218. 00276
  3219. 00277 newPath.tspec.req_bandwidth = <a class="code" href="_x_m_l_utils_8cc.html#a12">getParameterDoubleValue</a>(path, <span class="stringliteral">"bandwidth"</span>, 0.0);
  3220. 00278 newPath.max_delay = <a class="code" href="_x_m_l_utils_8cc.html#a12">getParameterDoubleValue</a>(path, <span class="stringliteral">"max_delay"</span>, 0.0);
  3221. 00279
  3222. 00280 <span class="keyword">const</span> cXMLElement *route = <a class="code" href="_x_m_l_utils_8cc.html#a1">getUniqueChildIfExists</a>(path, <span class="stringliteral">"route"</span>);
  3223. 00281 <span class="keywordflow">if</span> (route)
  3224. 00282 newPath.ERO = readTrafficRouteFromXML(route);
  3225. 00283
  3226. 00284 if (merge)
  3227. 00285 {
  3228. 00286 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> &lt;&lt; <span class="stringliteral">"adding new path into an existing session"</span> &lt;&lt; endl;
  3229. 00287
  3230. 00288 sit-&gt;paths.push_back(newPath);
  3231. 00289 }
  3232. 00290 <span class="keywordflow">else</span>
  3233. 00291 {
  3234. 00292 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> &lt;&lt; <span class="stringliteral">"adding new path into new session"</span> &lt;&lt; endl;
  3235. 00293
  3236. 00294 newSession.paths.push_back(newPath);
  3237. 00295 }
  3238. 00296
  3239. 00297 <span class="comment">// schedule path creation</span>
  3240. 00298
  3241. 00299 <a class="code" href="class_r_s_v_p.html#b35">sendPathNotify</a>(<span class="keywordtype">id</span>(), newSession.sobj, newPath.sender, PATH_RETRY, 0.0);
  3242. 00300 }
  3243. 00301
  3244. 00302 <span class="keywordflow">if</span> (!merge)
  3245. 00303 {
  3246. 00304 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> &lt;&lt; <span class="stringliteral">"adding new session into database"</span> &lt;&lt; endl;
  3247. 00305
  3248. 00306 <a class="code" href="class_r_s_v_p.html#r0">traffic</a>.push_back(newSession);
  3249. 00307 }
  3250. 00308 }
  3251. </pre></div>
  3252. <p>
  3253. </td>
  3254. </tr>
  3255. </table>
  3256. <a class="anchor" name="b38" doxytag="RSVP::recoveryEvent"></a><p>
  3257. <table class="mdTable" cellpadding="2" cellspacing="0">
  3258. <tr>
  3259. <td class="mdRow">
  3260. <table cellpadding="0" cellspacing="0" border="0">
  3261. <tr>
  3262. <td class="md" nowrap valign="top">void RSVP::recoveryEvent </td>
  3263. <td class="md" valign="top">(&nbsp;</td>
  3264. <td class="md" nowrap valign="top"><a class="el" href="class_i_p_address.html">IPAddress</a>&nbsp;</td>
  3265. <td class="mdname1" valign="top" nowrap> <em>peer</em> </td>
  3266. <td class="md" valign="top">&nbsp;)&nbsp;</td>
  3267. <td class="md" nowrap><code> [protected]</code></td>
  3268. </tr>
  3269. </table>
  3270. </td>
  3271. </tr>
  3272. </table>
  3273. <table cellspacing="5" cellpadding="0" border="0">
  3274. <tr>
  3275. <td>
  3276. &nbsp;
  3277. </td>
  3278. <td>
  3279. <p>
  3280. <div class="fragment"><pre class="fragment">01702 {
  3281. 01703 <span class="comment">// called when peer's operation is restored</span>
  3282. 01704
  3283. 01705 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index = <a class="code" href="class_r_s_v_p.html#r4">tedmod</a>-&gt;<a class="code" href="class_t_e_d.html#z61_6">linkIndex</a>(routerId, peer);
  3284. 01706 <span class="keywordtype">bool</span> rtmodified = !<a class="code" href="class_r_s_v_p.html#r4">tedmod</a>-&gt;<a class="code" href="class_t_e_d.html#o0">ted</a>[index].state;
  3285. 01707 <a class="code" href="class_r_s_v_p.html#r4">tedmod</a>-&gt;<a class="code" href="class_t_e_d.html#o0">ted</a>[index].state = <span class="keyword">true</span>;
  3286. 01708 <a class="code" href="class_r_s_v_p.html#b42">announceLinkChange</a>(index);
  3287. 01709
  3288. 01710 <span class="comment">// rebuild routing table if link state changed</span>
  3289. 01711 <span class="keywordflow">if</span> (rtmodified)
  3290. 01712 tedmod-&gt;rebuildRoutingTable();
  3291. 01713
  3292. 01714 <span class="comment">// refresh all paths towards this neighbour</span>
  3293. 01715 for (PSBVector::iterator it = PSBList.begin(); it != PSBList.end(); it++)
  3294. 01716 {
  3295. 01717 <span class="keywordflow">if</span> (it-&gt;OutInterface != <a class="code" href="class_r_s_v_p.html#r4">tedmod</a>-&gt;<a class="code" href="class_t_e_d.html#o0">ted</a>[index].local)
  3296. 01718 continue;
  3297. 01719
  3298. 01720 scheduleRefreshTimer(&amp;(*it), 0.0);
  3299. 01721 }
  3300. 01722 }
  3301. </pre></div>
  3302. <p>
  3303. </td>
  3304. </tr>
  3305. </table>
  3306. <a class="anchor" name="b23" doxytag="RSVP::refreshPath"></a><p>
  3307. <table class="mdTable" cellpadding="2" cellspacing="0">
  3308. <tr>
  3309. <td class="mdRow">
  3310. <table cellpadding="0" cellspacing="0" border="0">
  3311. <tr>
  3312. <td class="md" nowrap valign="top">void RSVP::refreshPath </td>
  3313. <td class="md" valign="top">(&nbsp;</td>
  3314. <td class="md" nowrap valign="top"><a class="el" href="struct_r_s_v_p_1_1_path_state_block__t.html">PathStateBlock_t</a> *&nbsp;</td>
  3315. <td class="mdname1" valign="top" nowrap> <em>psbEle</em> </td>
  3316. <td class="md" valign="top">&nbsp;)&nbsp;</td>
  3317. <td class="md" nowrap><code> [protected]</code></td>
  3318. </tr>
  3319. </table>
  3320. </td>
  3321. </tr>
  3322. </table>
  3323. <table cellspacing="5" cellpadding="0" border="0">
  3324. <tr>
  3325. <td>
  3326. &nbsp;
  3327. </td>
  3328. <td>
  3329. <p>
  3330. <div class="fragment"><pre class="fragment">00563 {
  3331. 00564 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> &lt;&lt; <span class="stringliteral">"refresh path (PSB "</span> &lt;&lt; psbEle-&gt;id &lt;&lt; <span class="stringliteral">")"</span> &lt;&lt; endl;
  3332. 00565
  3333. 00566 <a class="code" href="class_i_p_address.html">IPAddress</a>&amp; OI = psbEle-&gt;OutInterface;
  3334. 00567 <a class="code" href="_int_serv__m_8h.html#a2">EroVector</a>&amp; ERO = psbEle-&gt;ERO;
  3335. 00568
  3336. 00569 ASSERT(!OI.<a class="code" href="class_i_p_address.html#a1">isUnspecified</a>());
  3337. 00570 ASSERT(<a class="code" href="class_r_s_v_p.html#r4">tedmod</a>-&gt;<a class="code" href="class_t_e_d.html#z61_5">isLocalAddress</a>(OI));
  3338. 00571
  3339. 00572 <a class="code" href="class_r_s_v_p_path_msg.html">RSVPPathMsg</a> *pm = <span class="keyword">new</span> <a class="code" href="class_r_s_v_p_path_msg.html">RSVPPathMsg</a>(<span class="stringliteral">"Path"</span>);
  3340. 00573
  3341. 00574 pm-&gt;<a class="code" href="class_r_s_v_p_packet___base.html#a6">setSession</a>(psbEle-&gt;Session_Object);
  3342. 00575 pm-&gt;<a class="code" href="class_r_s_v_p_path_msg.html#a10">setSenderTemplate</a>(psbEle-&gt;Sender_Template_Object);
  3343. 00576 pm-&gt;<a class="code" href="class_r_s_v_p_path_msg.html#a12">setSenderTspec</a>(psbEle-&gt;Sender_Tspec_Object);
  3344. 00577
  3345. 00578 <a class="code" href="struct_rsvp_hop_obj__t.html">RsvpHopObj_t</a> hop;
  3346. 00579 hop.<a class="code" href="struct_rsvp_hop_obj__t.html#o1">Logical_Interface_Handle</a> = OI;
  3347. 00580 hop.<a class="code" href="struct_rsvp_hop_obj__t.html#o0">Next_Hop_Address</a> = <a class="code" href="class_r_s_v_p.html#r13">routerId</a>;
  3348. 00581 pm-&gt;<a class="code" href="class_r_s_v_p_path_msg___base.html#a6">setHop</a>(hop);
  3349. 00582
  3350. 00583 pm-&gt;<a class="code" href="class_r_s_v_p_path_msg___base.html#a15">setERO</a>(ERO);
  3351. 00584 pm-&gt;<a class="code" href="class_r_s_v_p_path_msg___base.html#a17">setColor</a>(psbEle-&gt;color);
  3352. 00585
  3353. 00586 <span class="keywordtype">int</span> length = 85 + (ERO.size() * 5);
  3354. 00587
  3355. 00588 pm-&gt;setByteLength(length);
  3356. 00589
  3357. 00590 <a class="code" href="class_i_p_address.html">IPAddress</a> nextHop = <a class="code" href="class_r_s_v_p.html#r4">tedmod</a>-&gt;<a class="code" href="class_t_e_d.html#z61_2">peerByLocalAddress</a>(OI);
  3358. 00591
  3359. 00592 ASSERT(ERO.size() == 0 ||ERO[0].node.equals(nextHop) || ERO[0].L);
  3360. 00593
  3361. 00594 <a class="code" href="class_r_s_v_p.html#b43">sendToIP</a>(pm, nextHop);
  3362. 00595 }
  3363. </pre></div>
  3364. <p>
  3365. </td>
  3366. </tr>
  3367. </table>
  3368. <a class="anchor" name="b25" doxytag="RSVP::refreshResv"></a><p>
  3369. <table class="mdTable" cellpadding="2" cellspacing="0">
  3370. <tr>
  3371. <td class="mdRow">
  3372. <table cellpadding="0" cellspacing="0" border="0">
  3373. <tr>
  3374. <td class="md" nowrap valign="top">void RSVP::refreshResv </td>
  3375. <td class="md" valign="top">(&nbsp;</td>
  3376. <td class="md" nowrap valign="top"><a class="el" href="struct_r_s_v_p_1_1_resv_state_block__t.html">ResvStateBlock_t</a> *&nbsp;</td>
  3377. <td class="mdname" nowrap> <em>rsbEle</em>, </td>
  3378. </tr>
  3379. <tr>
  3380. <td class="md" nowrap align="right"></td>
  3381. <td class="md"></td>
  3382. <td class="md" nowrap><a class="el" href="class_i_p_address.html">IPAddress</a>&nbsp;</td>
  3383. <td class="mdname" nowrap> <em>PHOP</em></td>
  3384. </tr>
  3385. <tr>
  3386. <td class="md"></td>
  3387. <td class="md">)&nbsp;</td>
  3388. <td class="md" colspan="2"><code> [protected]</code></td>
  3389. </tr>
  3390. </table>
  3391. </td>
  3392. </tr>
  3393. </table>
  3394. <table cellspacing="5" cellpadding="0" border="0">
  3395. <tr>
  3396. <td>
  3397. &nbsp;
  3398. </td>
  3399. <td>
  3400. <p>
  3401. <div class="fragment"><pre class="fragment">00626 {
  3402. 00627 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> &lt;&lt; <span class="stringliteral">"refresh reservation (RSB "</span> &lt;&lt; rsbEle-&gt;id &lt;&lt; <span class="stringliteral">") PHOP "</span> &lt;&lt; PHOP &lt;&lt; endl;
  3403. 00628
  3404. 00629 <a class="code" href="class_r_s_v_p_resv_msg.html">RSVPResvMsg</a> *msg = <span class="keyword">new</span> <a class="code" href="class_r_s_v_p_resv_msg.html">RSVPResvMsg</a>(<span class="stringliteral">" Resv"</span>);
  3405. 00630
  3406. 00631 <a class="code" href="_int_serv__m_8h.html#a3">FlowDescriptorVector</a> flows;
  3407. 00632
  3408. 00633 msg-&gt;<a class="code" href="class_r_s_v_p_packet___base.html#a6">setSession</a>(rsbEle-&gt;Session_Object);
  3409. 00634
  3410. 00635 <a class="code" href="struct_rsvp_hop_obj__t.html">RsvpHopObj_t</a> hop;
  3411. 00636 hop.<a class="code" href="struct_rsvp_hop_obj__t.html#o1">Logical_Interface_Handle</a> = <a class="code" href="class_r_s_v_p.html#r4">tedmod</a>-&gt;<a class="code" href="class_t_e_d.html#z61_1">peerRemoteInterface</a>(PHOP);
  3412. 00637 hop.<a class="code" href="struct_rsvp_hop_obj__t.html#o0">Next_Hop_Address</a> = PHOP;
  3413. 00638 msg-&gt;<a class="code" href="class_r_s_v_p_resv_msg___base.html#a6">setHop</a>(hop);
  3414. 00639
  3415. 00640 <span class="keywordflow">for</span> (PSBVector::iterator it = <a class="code" href="class_r_s_v_p.html#r14">PSBList</a>.begin(); it != <a class="code" href="class_r_s_v_p.html#r14">PSBList</a>.end(); it++)
  3416. 00641 {
  3417. 00642 <span class="keywordflow">if</span> (it-&gt;Previous_Hop_Address != PHOP)
  3418. 00643 continue;
  3419. 00644
  3420. 00645 <span class="comment">//if (it-&gt;LIH != LIH)</span>
  3421. 00646 <span class="comment">// continue;</span>
  3422. 00647
  3423. 00648 if (it-&gt;Session_Object != rsbEle-&gt;Session_Object)
  3424. 00649 continue;
  3425. 00650
  3426. 00651 for (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> c = 0; c &lt; rsbEle-&gt;FlowDescriptor.size(); c++)
  3427. 00652 {
  3428. 00653 <span class="keywordflow">if</span> ((<a class="code" href="struct_filter_spec_obj__t.html">FilterSpecObj_t</a>&amp;)it-&gt;Sender_Template_Object != rsbEle-&gt;FlowDescriptor[c].Filter_Spec_Object)
  3429. 00654 continue;
  3430. 00655
  3431. 00656 ASSERT(rsbEle-&gt;inLabelVector.size() == rsbEle-&gt;FlowDescriptor.size());
  3432. 00657
  3433. 00658 <a class="code" href="struct_flow_descriptor__t.html">FlowDescriptor_t</a> flow;
  3434. 00659 flow.Filter_Spec_Object = (<a class="code" href="struct_filter_spec_obj__t.html">FilterSpecObj_t</a>&amp;)it-&gt;Sender_Template_Object;
  3435. 00660 flow.Flowspec_Object = (<a class="code" href="struct_flow_spec_obj__t.html">FlowSpecObj_t</a>&amp;)it-&gt;Sender_Tspec_Object;
  3436. 00661 flow.RRO = rsbEle-&gt;FlowDescriptor[c].RRO;
  3437. 00662 flow.RRO.push_back(routerId);
  3438. 00663 flow.label = rsbEle-&gt;inLabelVector[c];
  3439. 00664 flows.push_back(flow);
  3440. 00665
  3441. 00666 break;
  3442. 00667 }
  3443. 00668 }
  3444. 00669
  3445. 00670 msg-&gt;setFlowDescriptor(flows);
  3446. 00671
  3447. 00672 <span class="keywordtype">int</span> fd_length = 0;
  3448. 00673 for (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; flows.size(); i++)
  3449. 00674 fd_length += 28 + (flows[i].RRO.size() * 4);
  3450. 00675
  3451. 00676 <span class="keywordtype">int</span> length = 34 + fd_length;
  3452. 00677
  3453. 00678 <span class="comment">// see comment elsewhere (in TED.cc)</span>
  3454. 00679 length /= 10;
  3455. 00680
  3456. 00681 msg-&gt;setByteLength(length);
  3457. 00682
  3458. 00683 sendToIP(msg, PHOP);
  3459. 00684 }
  3460. </pre></div>
  3461. <p>
  3462. </td>
  3463. </tr>
  3464. </table>
  3465. <a class="anchor" name="b24" doxytag="RSVP::refreshResv"></a><p>
  3466. <table class="mdTable" cellpadding="2" cellspacing="0">
  3467. <tr>
  3468. <td class="mdRow">
  3469. <table cellpadding="0" cellspacing="0" border="0">
  3470. <tr>
  3471. <td class="md" nowrap valign="top">void RSVP::refreshResv </td>
  3472. <td class="md" valign="top">(&nbsp;</td>
  3473. <td class="md" nowrap valign="top"><a class="el" href="struct_r_s_v_p_1_1_resv_state_block__t.html">ResvStateBlock_t</a> *&nbsp;</td>
  3474. <td class="mdname1" valign="top" nowrap> <em>rsbEle</em> </td>
  3475. <td class="md" valign="top">&nbsp;)&nbsp;</td>
  3476. <td class="md" nowrap><code> [protected]</code></td>
  3477. </tr>
  3478. </table>
  3479. </td>
  3480. </tr>
  3481. </table>
  3482. <table cellspacing="5" cellpadding="0" border="0">
  3483. <tr>
  3484. <td>
  3485. &nbsp;
  3486. </td>
  3487. <td>
  3488. <p>
  3489. <div class="fragment"><pre class="fragment">00598 {
  3490. 00599 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> &lt;&lt; <span class="stringliteral">"refresh reservation (RSB "</span> &lt;&lt; rsbEle-&gt;id &lt;&lt; <span class="stringliteral">")"</span> &lt;&lt; endl;
  3491. 00600
  3492. 00601 <a class="code" href="_int_serv__m_8h.html#a1">IPAddressVector</a> phops;
  3493. 00602
  3494. 00603 <span class="keywordflow">for</span> (PSBVector::iterator it = <a class="code" href="class_r_s_v_p.html#r14">PSBList</a>.begin(); it != <a class="code" href="class_r_s_v_p.html#r14">PSBList</a>.end(); it++)
  3495. 00604 {
  3496. 00605 <span class="keywordflow">if</span> (it-&gt;OutInterface != rsbEle-&gt;OI)
  3497. 00606 continue;
  3498. 00607
  3499. 00608 for (<span class="keywordtype">int</span> i = 0; i &lt; rsbEle-&gt;FlowDescriptor.size(); i++)
  3500. 00609 {
  3501. 00610 <span class="keywordflow">if</span> ((<a class="code" href="struct_filter_spec_obj__t.html">FilterSpecObj_t</a>&amp;)it-&gt;Sender_Template_Object != rsbEle-&gt;FlowDescriptor[i].Filter_Spec_Object)
  3502. 00611 continue;
  3503. 00612
  3504. 00613 if (tedmod-&gt;isLocalAddress(it-&gt;Previous_Hop_Address))
  3505. 00614 continue; <span class="comment">// IR nothing to refresh</span>
  3506. 00615
  3507. 00616 if (!find(phops, it-&gt;Previous_Hop_Address))
  3508. 00617 phops.push_back(it-&gt;Previous_Hop_Address);
  3509. 00618 }
  3510. 00619
  3511. 00620 for (IPAddressVector::iterator it = phops.begin(); it != phops.end(); it++)
  3512. 00621 refreshResv(rsbEle, *it);
  3513. 00622 }
  3514. 00623 }
  3515. </pre></div>
  3516. <p>
  3517. </td>
  3518. </tr>
  3519. </table>
  3520. <a class="anchor" name="b17" doxytag="RSVP::removePSB"></a><p>
  3521. <table class="mdTable" cellpadding="2" cellspacing="0">
  3522. <tr>
  3523. <td class="mdRow">
  3524. <table cellpadding="0" cellspacing="0" border="0">
  3525. <tr>
  3526. <td class="md" nowrap valign="top">void RSVP::removePSB </td>
  3527. <td class="md" valign="top">(&nbsp;</td>
  3528. <td class="md" nowrap valign="top"><a class="el" href="struct_r_s_v_p_1_1_path_state_block__t.html">PathStateBlock_t</a> *&nbsp;</td>
  3529. <td class="mdname1" valign="top" nowrap> <em>psb</em> </td>
  3530. <td class="md" valign="top">&nbsp;)&nbsp;</td>
  3531. <td class="md" nowrap><code> [protected]</code></td>
  3532. </tr>
  3533. </table>
  3534. </td>
  3535. </tr>
  3536. </table>
  3537. <table cellspacing="5" cellpadding="0" border="0">
  3538. <tr>
  3539. <td>
  3540. &nbsp;
  3541. </td>
  3542. <td>
  3543. <p>
  3544. <div class="fragment"><pre class="fragment">01076 {
  3545. 01077 ASSERT(psb);
  3546. 01078
  3547. 01079 <span class="keywordtype">int</span> lspid = psb-&gt;Sender_Template_Object.Lsp_Id;
  3548. 01080
  3549. 01081 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> &lt;&lt; <span class="stringliteral">"removing PSB "</span> &lt;&lt; psb-&gt;id &lt;&lt; <span class="stringliteral">" (lspid "</span> &lt;&lt; lspid &lt;&lt; <span class="stringliteral">")"</span> &lt;&lt; endl;
  3550. 01082
  3551. 01083 <span class="comment">// remove reservation state if exists **************************************</span>
  3552. 01084
  3553. 01085 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> filterIndex;
  3554. 01086 ResvStateBlock_t *rsb = <a class="code" href="class_r_s_v_p.html#b46">findRSB</a>(psb-&gt;Session_Object, psb-&gt;Sender_Template_Object, filterIndex);
  3555. 01087 <span class="keywordflow">if</span> (rsb)
  3556. 01088 {
  3557. 01089 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> &lt;&lt; <span class="stringliteral">"reservation state present, will be removed too"</span> &lt;&lt; endl;
  3558. 01090
  3559. 01091 <a class="code" href="class_r_s_v_p.html#b22">removeRsbFilter</a>(rsb, filterIndex);
  3560. 01092 }
  3561. 01093
  3562. 01094 <span class="comment">// proceed with actual removal *********************************************</span>
  3563. 01095
  3564. 01096 cancelEvent(psb-&gt;timerMsg);
  3565. 01097 cancelEvent(psb-&gt;timeoutMsg);
  3566. 01098
  3567. 01099 <span class="keyword">delete</span> psb-&gt;timerMsg;
  3568. 01100 <span class="keyword">delete</span> psb-&gt;<a class="code" href="struct_r_s_v_p_1_1_resv_state_block__t.html#o9">timeoutMsg</a>;
  3569. 01101
  3570. 01102 <span class="keywordflow">for</span> (PSBVector::iterator it = <a class="code" href="class_r_s_v_p.html#r14">PSBList</a>.begin(); it != <a class="code" href="class_r_s_v_p.html#r14">PSBList</a>.end(); it++)
  3571. 01103 {
  3572. 01104 <span class="keywordflow">if</span> (it-&gt;id != psb-&gt;id)
  3573. 01105 continue;
  3574. 01106
  3575. 01107 PSBList.erase(it);
  3576. 01108 return;
  3577. 01109 }
  3578. 01110 ASSERT(false);
  3579. 01111 }
  3580. </pre></div>
  3581. <p>
  3582. </td>
  3583. </tr>
  3584. </table>
  3585. <a class="anchor" name="b21" doxytag="RSVP::removeRSB"></a><p>
  3586. <table class="mdTable" cellpadding="2" cellspacing="0">
  3587. <tr>
  3588. <td class="mdRow">
  3589. <table cellpadding="0" cellspacing="0" border="0">
  3590. <tr>
  3591. <td class="md" nowrap valign="top">void RSVP::removeRSB </td>
  3592. <td class="md" valign="top">(&nbsp;</td>
  3593. <td class="md" nowrap valign="top"><a class="el" href="struct_r_s_v_p_1_1_resv_state_block__t.html">ResvStateBlock_t</a> *&nbsp;</td>
  3594. <td class="mdname1" valign="top" nowrap> <em>rsb</em> </td>
  3595. <td class="md" valign="top">&nbsp;)&nbsp;</td>
  3596. <td class="md" nowrap><code> [protected]</code></td>
  3597. </tr>
  3598. </table>
  3599. </td>
  3600. </tr>
  3601. </table>
  3602. <table cellspacing="5" cellpadding="0" border="0">
  3603. <tr>
  3604. <td>
  3605. &nbsp;
  3606. </td>
  3607. <td>
  3608. <p>
  3609. <div class="fragment"><pre class="fragment">01044 {
  3610. 01045 ASSERT(rsb);
  3611. 01046 ASSERT(rsb-&gt;FlowDescriptor.size() == 0);
  3612. 01047
  3613. 01048 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> &lt;&lt; <span class="stringliteral">"removing empty RSB "</span> &lt;&lt; rsb-&gt;id &lt;&lt; endl;
  3614. 01049
  3615. 01050 cancelEvent(rsb-&gt;refreshTimerMsg);
  3616. 01051 cancelEvent(rsb-&gt;commitTimerMsg);
  3617. 01052 cancelEvent(rsb-&gt;timeoutMsg);
  3618. 01053
  3619. 01054 <span class="keyword">delete</span> rsb-&gt;refreshTimerMsg;
  3620. 01055 <span class="keyword">delete</span> rsb-&gt;commitTimerMsg;
  3621. 01056 <span class="keyword">delete</span> rsb-&gt;timeoutMsg;
  3622. 01057
  3623. 01058 <span class="keywordflow">if</span> (rsb-&gt;Flowspec_Object.req_bandwidth &gt; 0)
  3624. 01059 {
  3625. 01060 <span class="comment">// deallocate resources</span>
  3626. 01061 <a class="code" href="class_r_s_v_p.html#b39">allocateResource</a>(rsb-&gt;OI, rsb-&gt;Session_Object, -rsb-&gt;Flowspec_Object.req_bandwidth);
  3627. 01062 }
  3628. 01063
  3629. 01064 <span class="keywordflow">for</span> (RSBVector::iterator it = <a class="code" href="class_r_s_v_p.html#r15">RSBList</a>.begin(); it != <a class="code" href="class_r_s_v_p.html#r15">RSBList</a>.end(); it++)
  3630. 01065 {
  3631. 01066 <span class="keywordflow">if</span> (it-&gt;id != rsb-&gt;id)
  3632. 01067 continue;
  3633. 01068
  3634. 01069 RSBList.erase(it);
  3635. 01070 return;
  3636. 01071 }
  3637. 01072 ASSERT(false);
  3638. 01073 }
  3639. </pre></div>
  3640. <p>
  3641. </td>
  3642. </tr>
  3643. </table>
  3644. <a class="anchor" name="b22" doxytag="RSVP::removeRsbFilter"></a><p>
  3645. <table class="mdTable" cellpadding="2" cellspacing="0">
  3646. <tr>
  3647. <td class="mdRow">
  3648. <table cellpadding="0" cellspacing="0" border="0">
  3649. <tr>
  3650. <td class="md" nowrap valign="top">void RSVP::removeRsbFilter </td>
  3651. <td class="md" valign="top">(&nbsp;</td>
  3652. <td class="md" nowrap valign="top"><a class="el" href="struct_r_s_v_p_1_1_resv_state_block__t.html">ResvStateBlock_t</a> *&nbsp;</td>
  3653. <td class="mdname" nowrap> <em>rsb</em>, </td>
  3654. </tr>
  3655. <tr>
  3656. <td class="md" nowrap align="right"></td>
  3657. <td class="md"></td>
  3658. <td class="md" nowrap>unsigned int&nbsp;</td>
  3659. <td class="mdname" nowrap> <em>index</em></td>
  3660. </tr>
  3661. <tr>
  3662. <td class="md"></td>
  3663. <td class="md">)&nbsp;</td>
  3664. <td class="md" colspan="2"><code> [protected]</code></td>
  3665. </tr>
  3666. </table>
  3667. </td>
  3668. </tr>
  3669. </table>
  3670. <table cellspacing="5" cellpadding="0" border="0">
  3671. <tr>
  3672. <td>
  3673. &nbsp;
  3674. </td>
  3675. <td>
  3676. <p>
  3677. <div class="fragment"><pre class="fragment">01024 {
  3678. 01025 ASSERT(rsb);
  3679. 01026 ASSERT(index &lt; rsb-&gt;FlowDescriptor.size());
  3680. 01027 ASSERT(rsb-&gt;inLabelVector.size() == rsb-&gt;FlowDescriptor.size());
  3681. 01028
  3682. 01029 <span class="keywordtype">int</span> lspid = rsb-&gt;FlowDescriptor[index].Filter_Spec_Object.Lsp_Id;
  3683. 01030 <span class="keywordtype">int</span> inLabel = rsb-&gt;inLabelVector[index];
  3684. 01031
  3685. 01032 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> &lt;&lt; <span class="stringliteral">"removing filter (lspid="</span> &lt;&lt; lspid &lt;&lt; <span class="stringliteral">")"</span> &lt;&lt; endl;
  3686. 01033
  3687. 01034 <span class="keywordflow">if</span> (inLabel != -1)
  3688. 01035 lt-&gt;removeLibEntry(inLabel);
  3689. 01036
  3690. 01037 rsb-&gt;FlowDescriptor.erase(rsb-&gt;FlowDescriptor.begin() + index);
  3691. 01038 rsb-&gt;inLabelVector.erase(rsb-&gt;inLabelVector.begin() + index);
  3692. 01039
  3693. 01040 scheduleCommitTimer(rsb);
  3694. 01041 }
  3695. </pre></div>
  3696. <p>
  3697. </td>
  3698. </tr>
  3699. </table>
  3700. <a class="anchor" name="b30" doxytag="RSVP::scheduleCommitTimer"></a><p>
  3701. <table class="mdTable" cellpadding="2" cellspacing="0">
  3702. <tr>
  3703. <td class="mdRow">
  3704. <table cellpadding="0" cellspacing="0" border="0">
  3705. <tr>
  3706. <td class="md" nowrap valign="top">void RSVP::scheduleCommitTimer </td>
  3707. <td class="md" valign="top">(&nbsp;</td>
  3708. <td class="md" nowrap valign="top"><a class="el" href="struct_r_s_v_p_1_1_resv_state_block__t.html">ResvStateBlock_t</a> *&nbsp;</td>
  3709. <td class="mdname1" valign="top" nowrap> <em>rsbEle</em> </td>
  3710. <td class="md" valign="top">&nbsp;)&nbsp;</td>
  3711. <td class="md" nowrap><code> [protected]</code></td>
  3712. </tr>
  3713. </table>
  3714. </td>
  3715. </tr>
  3716. </table>
  3717. <table cellspacing="5" cellpadding="0" border="0">
  3718. <tr>
  3719. <td>
  3720. &nbsp;
  3721. </td>
  3722. <td>
  3723. <p>
  3724. <div class="fragment"><pre class="fragment">02055 {
  3725. 02056 ASSERT(rsbEle);
  3726. 02057
  3727. 02058 <span class="keywordflow">if</span> (rsbEle-&gt;commitTimerMsg-&gt;isScheduled())
  3728. 02059 cancelEvent(rsbEle-&gt;commitTimerMsg);
  3729. 02060
  3730. 02061 scheduleAt(simTime(), rsbEle-&gt;commitTimerMsg);
  3731. 02062 }
  3732. </pre></div>
  3733. <p>
  3734. </td>
  3735. </tr>
  3736. </table>
  3737. <a class="anchor" name="b29" doxytag="RSVP::scheduleRefreshTimer"></a><p>
  3738. <table class="mdTable" cellpadding="2" cellspacing="0">
  3739. <tr>
  3740. <td class="mdRow">
  3741. <table cellpadding="0" cellspacing="0" border="0">
  3742. <tr>
  3743. <td class="md" nowrap valign="top">void RSVP::scheduleRefreshTimer </td>
  3744. <td class="md" valign="top">(&nbsp;</td>
  3745. <td class="md" nowrap valign="top"><a class="el" href="struct_r_s_v_p_1_1_resv_state_block__t.html">ResvStateBlock_t</a> *&nbsp;</td>
  3746. <td class="mdname" nowrap> <em>rsbEle</em>, </td>
  3747. </tr>
  3748. <tr>
  3749. <td class="md" nowrap align="right"></td>
  3750. <td class="md"></td>
  3751. <td class="md" nowrap>double&nbsp;</td>
  3752. <td class="mdname" nowrap> <em>delay</em></td>
  3753. </tr>
  3754. <tr>
  3755. <td class="md"></td>
  3756. <td class="md">)&nbsp;</td>
  3757. <td class="md" colspan="2"><code> [protected]</code></td>
  3758. </tr>
  3759. </table>
  3760. </td>
  3761. </tr>
  3762. </table>
  3763. <table cellspacing="5" cellpadding="0" border="0">
  3764. <tr>
  3765. <td>
  3766. &nbsp;
  3767. </td>
  3768. <td>
  3769. <p>
  3770. <div class="fragment"><pre class="fragment">02045 {
  3771. 02046 ASSERT(rsbEle);
  3772. 02047
  3773. 02048 <span class="keywordflow">if</span> (rsbEle-&gt;refreshTimerMsg-&gt;isScheduled())
  3774. 02049 cancelEvent(rsbEle-&gt;refreshTimerMsg);
  3775. 02050
  3776. 02051 scheduleAt(simTime() + delay, rsbEle-&gt;refreshTimerMsg);
  3777. 02052 }
  3778. </pre></div>
  3779. <p>
  3780. </td>
  3781. </tr>
  3782. </table>
  3783. <a class="anchor" name="b27" doxytag="RSVP::scheduleRefreshTimer"></a><p>
  3784. <table class="mdTable" cellpadding="2" cellspacing="0">
  3785. <tr>
  3786. <td class="mdRow">
  3787. <table cellpadding="0" cellspacing="0" border="0">
  3788. <tr>
  3789. <td class="md" nowrap valign="top">void RSVP::scheduleRefreshTimer </td>
  3790. <td class="md" valign="top">(&nbsp;</td>
  3791. <td class="md" nowrap valign="top"><a class="el" href="struct_r_s_v_p_1_1_path_state_block__t.html">PathStateBlock_t</a> *&nbsp;</td>
  3792. <td class="mdname" nowrap> <em>psbEle</em>, </td>
  3793. </tr>
  3794. <tr>
  3795. <td class="md" nowrap align="right"></td>
  3796. <td class="md"></td>
  3797. <td class="md" nowrap>double&nbsp;</td>
  3798. <td class="mdname" nowrap> <em>delay</em></td>
  3799. </tr>
  3800. <tr>
  3801. <td class="md"></td>
  3802. <td class="md">)&nbsp;</td>
  3803. <td class="md" colspan="2"><code> [protected]</code></td>
  3804. </tr>
  3805. </table>
  3806. </td>
  3807. </tr>
  3808. </table>
  3809. <table cellspacing="5" cellpadding="0" border="0">
  3810. <tr>
  3811. <td>
  3812. &nbsp;
  3813. </td>
  3814. <td>
  3815. <p>
  3816. <div class="fragment"><pre class="fragment">02017 {
  3817. 02018 ASSERT(psbEle);
  3818. 02019
  3819. 02020 <span class="keywordflow">if</span> (psbEle-&gt;OutInterface.isUnspecified())
  3820. 02021 <span class="keywordflow">return</span>;
  3821. 02022
  3822. 02023 <span class="keywordflow">if</span> (!<a class="code" href="class_r_s_v_p.html#r4">tedmod</a>-&gt;<a class="code" href="class_t_e_d.html#z61_5">isLocalAddress</a>(psbEle-&gt;OutInterface))
  3823. 02024 <span class="keywordflow">return</span>;
  3824. 02025
  3825. 02026 <span class="keywordflow">if</span> (psbEle-&gt;timerMsg-&gt;isScheduled())
  3826. 02027 cancelEvent(psbEle-&gt;timerMsg);
  3827. 02028
  3828. 02029 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> &lt;&lt; <span class="stringliteral">"scheduling PSB "</span> &lt;&lt; psbEle-&gt;id &lt;&lt; <span class="stringliteral">" refresh "</span> &lt;&lt; (simTime() + delay) &lt;&lt; endl;
  3829. 02030
  3830. 02031 scheduleAt(simTime() + delay, psbEle-&gt;timerMsg);
  3831. 02032 }
  3832. </pre></div>
  3833. <p>
  3834. </td>
  3835. </tr>
  3836. </table>
  3837. <a class="anchor" name="b31" doxytag="RSVP::scheduleTimeout"></a><p>
  3838. <table class="mdTable" cellpadding="2" cellspacing="0">
  3839. <tr>
  3840. <td class="mdRow">
  3841. <table cellpadding="0" cellspacing="0" border="0">
  3842. <tr>
  3843. <td class="md" nowrap valign="top">void RSVP::scheduleTimeout </td>
  3844. <td class="md" valign="top">(&nbsp;</td>
  3845. <td class="md" nowrap valign="top"><a class="el" href="struct_r_s_v_p_1_1_resv_state_block__t.html">ResvStateBlock_t</a> *&nbsp;</td>
  3846. <td class="mdname1" valign="top" nowrap> <em>rsbEle</em> </td>
  3847. <td class="md" valign="top">&nbsp;)&nbsp;</td>
  3848. <td class="md" nowrap><code> [protected]</code></td>
  3849. </tr>
  3850. </table>
  3851. </td>
  3852. </tr>
  3853. </table>
  3854. <table cellspacing="5" cellpadding="0" border="0">
  3855. <tr>
  3856. <td>
  3857. &nbsp;
  3858. </td>
  3859. <td>
  3860. <p>
  3861. <div class="fragment"><pre class="fragment">02035 {
  3862. 02036 ASSERT(rsbEle);
  3863. 02037
  3864. 02038 <span class="keywordflow">if</span> (rsbEle-&gt;timeoutMsg-&gt;isScheduled())
  3865. 02039 cancelEvent(rsbEle-&gt;timeoutMsg);
  3866. 02040
  3867. 02041 scheduleAt(simTime() + RSB_TIMEOUT_INTERVAL, rsbEle-&gt;timeoutMsg);
  3868. 02042 }
  3869. </pre></div>
  3870. <p>
  3871. </td>
  3872. </tr>
  3873. </table>
  3874. <a class="anchor" name="b28" doxytag="RSVP::scheduleTimeout"></a><p>
  3875. <table class="mdTable" cellpadding="2" cellspacing="0">
  3876. <tr>
  3877. <td class="mdRow">
  3878. <table cellpadding="0" cellspacing="0" border="0">
  3879. <tr>
  3880. <td class="md" nowrap valign="top">void RSVP::scheduleTimeout </td>
  3881. <td class="md" valign="top">(&nbsp;</td>
  3882. <td class="md" nowrap valign="top"><a class="el" href="struct_r_s_v_p_1_1_path_state_block__t.html">PathStateBlock_t</a> *&nbsp;</td>
  3883. <td class="mdname1" valign="top" nowrap> <em>psbEle</em> </td>
  3884. <td class="md" valign="top">&nbsp;)&nbsp;</td>
  3885. <td class="md" nowrap><code> [protected]</code></td>
  3886. </tr>
  3887. </table>
  3888. </td>
  3889. </tr>
  3890. </table>
  3891. <table cellspacing="5" cellpadding="0" border="0">
  3892. <tr>
  3893. <td>
  3894. &nbsp;
  3895. </td>
  3896. <td>
  3897. <p>
  3898. <div class="fragment"><pre class="fragment">02007 {
  3899. 02008 ASSERT(psbEle);
  3900. 02009
  3901. 02010 <span class="keywordflow">if</span> (psbEle-&gt;timeoutMsg-&gt;isScheduled())
  3902. 02011 cancelEvent(psbEle-&gt;timeoutMsg);
  3903. 02012
  3904. 02013 scheduleAt(simTime() + PSB_TIMEOUT_INTERVAL, psbEle-&gt;timeoutMsg);
  3905. 02014 }
  3906. </pre></div>
  3907. <p>
  3908. </td>
  3909. </tr>
  3910. </table>
  3911. <a class="anchor" name="b33" doxytag="RSVP::sendPathErrorMessage"></a><p>
  3912. <table class="mdTable" cellpadding="2" cellspacing="0">
  3913. <tr>
  3914. <td class="mdRow">
  3915. <table cellpadding="0" cellspacing="0" border="0">
  3916. <tr>
  3917. <td class="md" nowrap valign="top">void RSVP::sendPathErrorMessage </td>
  3918. <td class="md" valign="top">(&nbsp;</td>
  3919. <td class="md" nowrap valign="top"><a class="el" href="struct_session_obj__t.html">SessionObj_t</a>&nbsp;</td>
  3920. <td class="mdname" nowrap> <em>session</em>, </td>
  3921. </tr>
  3922. <tr>
  3923. <td class="md" nowrap align="right"></td>
  3924. <td class="md"></td>
  3925. <td class="md" nowrap><a class="el" href="struct_sender_template_obj__t.html">SenderTemplateObj_t</a>&nbsp;</td>
  3926. <td class="mdname" nowrap> <em>sender</em>, </td>
  3927. </tr>
  3928. <tr>
  3929. <td class="md" nowrap align="right"></td>
  3930. <td class="md"></td>
  3931. <td class="md" nowrap><a class="el" href="struct_sender_tspec_obj__t.html">SenderTspecObj_t</a>&nbsp;</td>
  3932. <td class="mdname" nowrap> <em>tspec</em>, </td>
  3933. </tr>
  3934. <tr>
  3935. <td class="md" nowrap align="right"></td>
  3936. <td class="md"></td>
  3937. <td class="md" nowrap><a class="el" href="class_i_p_address.html">IPAddress</a>&nbsp;</td>
  3938. <td class="mdname" nowrap> <em>nextHop</em>, </td>
  3939. </tr>
  3940. <tr>
  3941. <td class="md" nowrap align="right"></td>
  3942. <td class="md"></td>
  3943. <td class="md" nowrap>int&nbsp;</td>
  3944. <td class="mdname" nowrap> <em>errCode</em></td>
  3945. </tr>
  3946. <tr>
  3947. <td class="md"></td>
  3948. <td class="md">)&nbsp;</td>
  3949. <td class="md" colspan="2"><code> [protected]</code></td>
  3950. </tr>
  3951. </table>
  3952. </td>
  3953. </tr>
  3954. </table>
  3955. <table cellspacing="5" cellpadding="0" border="0">
  3956. <tr>
  3957. <td>
  3958. &nbsp;
  3959. </td>
  3960. <td>
  3961. <p>
  3962. <div class="fragment"><pre class="fragment">01975 {
  3963. 01976 <a class="code" href="class_r_s_v_p_path_error.html">RSVPPathError</a> *msg = <span class="keyword">new</span> <a class="code" href="class_r_s_v_p_path_error.html">RSVPPathError</a>(<span class="stringliteral">"PathErr"</span>);
  3964. 01977 msg-&gt;<a class="code" href="class_r_s_v_p_path_error___base.html#a8">setErrorCode</a>(errCode);
  3965. 01978 msg-&gt;<a class="code" href="class_r_s_v_p_path_error___base.html#a6">setErrorNode</a>(routerId);
  3966. 01979 msg-&gt;<a class="code" href="class_r_s_v_p_packet___base.html#a6">setSession</a>(session);
  3967. 01980 msg-&gt;<a class="code" href="class_r_s_v_p_path_error.html#a8">setSenderTemplate</a>(sender);
  3968. 01981 msg-&gt;<a class="code" href="class_r_s_v_p_path_error.html#a10">setSenderTspec</a>(tspec);
  3969. 01982
  3970. 01983 <span class="keywordtype">int</span> length = 52;
  3971. 01984
  3972. 01985 <span class="comment">// see comment elsewhere (in TED.cc)</span>
  3973. 01986 length /= 10;
  3974. 01987
  3975. 01988 msg-&gt;setByteLength(length);
  3976. 01989
  3977. 01990 <a class="code" href="class_r_s_v_p.html#b43">sendToIP</a>(msg, nextHop);
  3978. 01991 }
  3979. </pre></div>
  3980. <p>
  3981. </td>
  3982. </tr>
  3983. </table>
  3984. <a class="anchor" name="b32" doxytag="RSVP::sendPathErrorMessage"></a><p>
  3985. <table class="mdTable" cellpadding="2" cellspacing="0">
  3986. <tr>
  3987. <td class="mdRow">
  3988. <table cellpadding="0" cellspacing="0" border="0">
  3989. <tr>
  3990. <td class="md" nowrap valign="top">void RSVP::sendPathErrorMessage </td>
  3991. <td class="md" valign="top">(&nbsp;</td>
  3992. <td class="md" nowrap valign="top"><a class="el" href="struct_r_s_v_p_1_1_path_state_block__t.html">PathStateBlock_t</a> *&nbsp;</td>
  3993. <td class="mdname" nowrap> <em>psb</em>, </td>
  3994. </tr>
  3995. <tr>
  3996. <td class="md" nowrap align="right"></td>
  3997. <td class="md"></td>
  3998. <td class="md" nowrap>int&nbsp;</td>
  3999. <td class="mdname" nowrap> <em>errCode</em></td>
  4000. </tr>
  4001. <tr>
  4002. <td class="md"></td>
  4003. <td class="md">)&nbsp;</td>
  4004. <td class="md" colspan="2"><code> [protected]</code></td>
  4005. </tr>
  4006. </table>
  4007. </td>
  4008. </tr>
  4009. </table>
  4010. <table cellspacing="5" cellpadding="0" border="0">
  4011. <tr>
  4012. <td>
  4013. &nbsp;
  4014. </td>
  4015. <td>
  4016. <p>
  4017. <div class="fragment"><pre class="fragment">01970 {
  4018. 01971 <a class="code" href="class_r_s_v_p.html#b32">sendPathErrorMessage</a>(psb-&gt;Session_Object, psb-&gt;Sender_Template_Object, psb-&gt;Sender_Tspec_Object, psb-&gt;Previous_Hop_Address, errCode);
  4019. 01972 }
  4020. </pre></div>
  4021. <p>
  4022. </td>
  4023. </tr>
  4024. </table>
  4025. <a class="anchor" name="b35" doxytag="RSVP::sendPathNotify"></a><p>
  4026. <table class="mdTable" cellpadding="2" cellspacing="0">
  4027. <tr>
  4028. <td class="mdRow">
  4029. <table cellpadding="0" cellspacing="0" border="0">
  4030. <tr>
  4031. <td class="md" nowrap valign="top">void RSVP::sendPathNotify </td>
  4032. <td class="md" valign="top">(&nbsp;</td>
  4033. <td class="md" nowrap valign="top">int&nbsp;</td>
  4034. <td class="mdname" nowrap> <em>handler</em>, </td>
  4035. </tr>
  4036. <tr>
  4037. <td class="md" nowrap align="right"></td>
  4038. <td class="md"></td>
  4039. <td class="md" nowrap>const <a class="el" href="struct_session_obj__t.html">SessionObj_t</a> &amp;&nbsp;</td>
  4040. <td class="mdname" nowrap> <em>session</em>, </td>
  4041. </tr>
  4042. <tr>
  4043. <td class="md" nowrap align="right"></td>
  4044. <td class="md"></td>
  4045. <td class="md" nowrap>const <a class="el" href="struct_sender_template_obj__t.html">SenderTemplateObj_t</a> &amp;&nbsp;</td>
  4046. <td class="mdname" nowrap> <em>sender</em>, </td>
  4047. </tr>
  4048. <tr>
  4049. <td class="md" nowrap align="right"></td>
  4050. <td class="md"></td>
  4051. <td class="md" nowrap>int&nbsp;</td>
  4052. <td class="mdname" nowrap> <em>status</em>, </td>
  4053. </tr>
  4054. <tr>
  4055. <td class="md" nowrap align="right"></td>
  4056. <td class="md"></td>
  4057. <td class="md" nowrap>double&nbsp;</td>
  4058. <td class="mdname" nowrap> <em>delay</em></td>
  4059. </tr>
  4060. <tr>
  4061. <td class="md"></td>
  4062. <td class="md">)&nbsp;</td>
  4063. <td class="md" colspan="2"><code> [protected]</code></td>
  4064. </tr>
  4065. </table>
  4066. </td>
  4067. </tr>
  4068. </table>
  4069. <table cellspacing="5" cellpadding="0" border="0">
  4070. <tr>
  4071. <td>
  4072. &nbsp;
  4073. </td>
  4074. <td>
  4075. <p>
  4076. <div class="fragment"><pre class="fragment">00388 {
  4077. 00389 <span class="keywordflow">if</span> (handler &lt; 0)
  4078. 00390 return; <span class="comment">// handler not specified</span>
  4079. 00391
  4080. 00392 cModule *mod = simulation.module(handler);
  4081. 00393
  4082. 00394 if (!mod)
  4083. 00395 return; <span class="comment">// handler no longer exists</span>
  4084. 00396
  4085. 00397 <a class="code" href="class_path_notify_msg.html">PathNotifyMsg</a> *msg = new <a class="code" href="class_path_notify_msg.html">PathNotifyMsg</a>("path notify");
  4086. 00398
  4087. 00399 msg-&gt;setSession(session);
  4088. 00400 msg-&gt;setSender(sender);
  4089. 00401 msg-&gt;setStatus(status);
  4090. 00402
  4091. 00403 if (handler == <span class="keywordtype">id</span>())
  4092. 00404 scheduleAt(simTime() + delay, msg);
  4093. 00405 else
  4094. 00406 sendDirect(msg, delay, mod, "from_rsvp");
  4095. 00407 }
  4096. </pre></div>
  4097. <p>
  4098. </td>
  4099. </tr>
  4100. </table>
  4101. <a class="anchor" name="b34" doxytag="RSVP::sendPathTearMessage"></a><p>
  4102. <table class="mdTable" cellpadding="2" cellspacing="0">
  4103. <tr>
  4104. <td class="mdRow">
  4105. <table cellpadding="0" cellspacing="0" border="0">
  4106. <tr>
  4107. <td class="md" nowrap valign="top">void RSVP::sendPathTearMessage </td>
  4108. <td class="md" valign="top">(&nbsp;</td>
  4109. <td class="md" nowrap valign="top"><a class="el" href="class_i_p_address.html">IPAddress</a>&nbsp;</td>
  4110. <td class="mdname" nowrap> <em>peerIP</em>, </td>
  4111. </tr>
  4112. <tr>
  4113. <td class="md" nowrap align="right"></td>
  4114. <td class="md"></td>
  4115. <td class="md" nowrap>const <a class="el" href="struct_session_obj__t.html">SessionObj_t</a> &amp;&nbsp;</td>
  4116. <td class="mdname" nowrap> <em>session</em>, </td>
  4117. </tr>
  4118. <tr>
  4119. <td class="md" nowrap align="right"></td>
  4120. <td class="md"></td>
  4121. <td class="md" nowrap>const <a class="el" href="struct_sender_template_obj__t.html">SenderTemplateObj_t</a> &amp;&nbsp;</td>
  4122. <td class="mdname" nowrap> <em>sender</em>, </td>
  4123. </tr>
  4124. <tr>
  4125. <td class="md" nowrap align="right"></td>
  4126. <td class="md"></td>
  4127. <td class="md" nowrap><a class="el" href="class_i_p_address.html">IPAddress</a>&nbsp;</td>
  4128. <td class="mdname" nowrap> <em>LIH</em>, </td>
  4129. </tr>
  4130. <tr>
  4131. <td class="md" nowrap align="right"></td>
  4132. <td class="md"></td>
  4133. <td class="md" nowrap><a class="el" href="class_i_p_address.html">IPAddress</a>&nbsp;</td>
  4134. <td class="mdname" nowrap> <em>NHOP</em>, </td>
  4135. </tr>
  4136. <tr>
  4137. <td class="md" nowrap align="right"></td>
  4138. <td class="md"></td>
  4139. <td class="md" nowrap>bool&nbsp;</td>
  4140. <td class="mdname" nowrap> <em>force</em></td>
  4141. </tr>
  4142. <tr>
  4143. <td class="md"></td>
  4144. <td class="md">)&nbsp;</td>
  4145. <td class="md" colspan="2"><code> [protected]</code></td>
  4146. </tr>
  4147. </table>
  4148. </td>
  4149. </tr>
  4150. </table>
  4151. <table cellspacing="5" cellpadding="0" border="0">
  4152. <tr>
  4153. <td>
  4154. &nbsp;
  4155. </td>
  4156. <td>
  4157. <p>
  4158. <div class="fragment"><pre class="fragment">01952 {
  4159. 01953 <a class="code" href="class_r_s_v_p_path_tear.html">RSVPPathTear</a> *msg = <span class="keyword">new</span> <a class="code" href="class_r_s_v_p_path_tear.html">RSVPPathTear</a>(<span class="stringliteral">"PathTear"</span>);
  4160. 01954 msg-&gt;<a class="code" href="class_r_s_v_p_path_tear___base.html#a9">setSenderTemplate</a>(sender);
  4161. 01955 msg-&gt;<a class="code" href="class_r_s_v_p_packet___base.html#a6">setSession</a>(session);
  4162. 01956 <a class="code" href="struct_rsvp_hop_obj__t.html">RsvpHopObj_t</a> hop;
  4163. 01957 hop.<a class="code" href="struct_rsvp_hop_obj__t.html#o1">Logical_Interface_Handle</a> = LIH;
  4164. 01958 hop.<a class="code" href="struct_rsvp_hop_obj__t.html#o0">Next_Hop_Address</a> = NHOP;
  4165. 01959 msg-&gt;<a class="code" href="class_r_s_v_p_path_tear___base.html#a6">setHop</a>(hop);
  4166. 01960 msg-&gt;<a class="code" href="class_r_s_v_p_path_tear___base.html#a11">setForce</a>(force);
  4167. 01961
  4168. 01962 <span class="keywordtype">int</span> length = 44;
  4169. 01963
  4170. 01964 msg-&gt;setByteLength(length);
  4171. 01965
  4172. 01966 <a class="code" href="class_r_s_v_p.html#b43">sendToIP</a>(msg, peerIP);
  4173. 01967 }
  4174. </pre></div>
  4175. <p>
  4176. </td>
  4177. </tr>
  4178. </table>
  4179. <a class="anchor" name="b43" doxytag="RSVP::sendToIP"></a><p>
  4180. <table class="mdTable" cellpadding="2" cellspacing="0">
  4181. <tr>
  4182. <td class="mdRow">
  4183. <table cellpadding="0" cellspacing="0" border="0">
  4184. <tr>
  4185. <td class="md" nowrap valign="top">void RSVP::sendToIP </td>
  4186. <td class="md" valign="top">(&nbsp;</td>
  4187. <td class="md" nowrap valign="top">cMessage *&nbsp;</td>
  4188. <td class="mdname" nowrap> <em>msg</em>, </td>
  4189. </tr>
  4190. <tr>
  4191. <td class="md" nowrap align="right"></td>
  4192. <td class="md"></td>
  4193. <td class="md" nowrap><a class="el" href="class_i_p_address.html">IPAddress</a>&nbsp;</td>
  4194. <td class="mdname" nowrap> <em>destAddr</em></td>
  4195. </tr>
  4196. <tr>
  4197. <td class="md"></td>
  4198. <td class="md">)&nbsp;</td>
  4199. <td class="md" colspan="2"><code> [protected]</code></td>
  4200. </tr>
  4201. </table>
  4202. </td>
  4203. </tr>
  4204. </table>
  4205. <table cellspacing="5" cellpadding="0" border="0">
  4206. <tr>
  4207. <td>
  4208. &nbsp;
  4209. </td>
  4210. <td>
  4211. <p>
  4212. <div class="fragment"><pre class="fragment">01995 {
  4213. 01996 <a class="code" href="class_i_p_control_info.html">IPControlInfo</a> *controlInfo = <span class="keyword">new</span> <a class="code" href="class_i_p_control_info.html">IPControlInfo</a>();
  4214. 01997 controlInfo-&gt;<a class="code" href="class_i_p_control_info___base.html#a5">setDestAddr</a>(destAddr);
  4215. 01998 controlInfo-&gt;<a class="code" href="class_i_p_control_info___base.html#a12">setProtocol</a>(IP_PROT_RSVP);
  4216. 01999 msg-&gt;setControlInfo(controlInfo);
  4217. 02000
  4218. 02001 msg-&gt;addPar(<span class="stringliteral">"color"</span>) = <a class="code" href="_r_s_v_p_packet_8h.html#a0">RSVP_TRAFFIC</a>;
  4219. 02002
  4220. 02003 send(msg, <span class="stringliteral">"to_ip"</span>);
  4221. 02004 }
  4222. </pre></div>
  4223. <p>
  4224. </td>
  4225. </tr>
  4226. </table>
  4227. <a class="anchor" name="b36" doxytag="RSVP::setupHello"></a><p>
  4228. <table class="mdTable" cellpadding="2" cellspacing="0">
  4229. <tr>
  4230. <td class="mdRow">
  4231. <table cellpadding="0" cellspacing="0" border="0">
  4232. <tr>
  4233. <td class="md" nowrap valign="top">void RSVP::setupHello </td>
  4234. <td class="md" valign="top">(&nbsp;</td>
  4235. <td class="mdname1" valign="top" nowrap> </td>
  4236. <td class="md" valign="top">&nbsp;)&nbsp;</td>
  4237. <td class="md" nowrap><code> [protected]</code></td>
  4238. </tr>
  4239. </table>
  4240. </td>
  4241. </tr>
  4242. </table>
  4243. <table cellspacing="5" cellpadding="0" border="0">
  4244. <tr>
  4245. <td>
  4246. &nbsp;
  4247. </td>
  4248. <td>
  4249. <p>
  4250. <div class="fragment"><pre class="fragment">00324 {
  4251. 00325 <a class="code" href="class_r_s_v_p.html#r1">helloInterval</a> = par(<span class="stringliteral">"helloInterval"</span>).doubleValue();
  4252. 00326 <a class="code" href="class_r_s_v_p.html#r2">helloTimeout</a> = par(<span class="stringliteral">"helloTimeout"</span>).doubleValue();
  4253. 00327
  4254. 00328 cStringTokenizer tokenizer(par(<span class="stringliteral">"peers"</span>));
  4255. 00329 <span class="keyword">const</span> <span class="keywordtype">char</span> *token;
  4256. 00330 <span class="keywordflow">while</span> ((token = tokenizer.nextToken())!=NULL)
  4257. 00331 {
  4258. 00332 ASSERT(<a class="code" href="class_r_s_v_p.html#r6">ift</a>-&gt;<a class="code" href="class_interface_table.html#a9">interfaceByName</a>(token));
  4259. 00333
  4260. 00334 <a class="code" href="class_i_p_address.html">IPAddress</a> peer = <a class="code" href="class_r_s_v_p.html#r4">tedmod</a>-&gt;<a class="code" href="class_t_e_d.html#z61_2">peerByLocalAddress</a>(<a class="code" href="class_r_s_v_p.html#r6">ift</a>-&gt;<a class="code" href="class_interface_table.html#a9">interfaceByName</a>(token)-&gt;<a class="code" href="class_interface_entry.html#a33">ipv4</a>()-&gt;<a class="code" href="class_i_pv4_interface_data.html#a4">inetAddress</a>());
  4261. 00335
  4262. 00336 HelloState_t h;
  4263. 00337
  4264. 00338 h.timer = <span class="keyword">new</span> <a class="code" href="class_hello_timer_msg.html">HelloTimerMsg</a>(<span class="stringliteral">"hello timer"</span>);
  4265. 00339 h.timer-&gt;setPeer(peer);
  4266. 00340
  4267. 00341 h.timeout = <span class="keyword">new</span> <a class="code" href="class_hello_timeout_msg.html">HelloTimeoutMsg</a>(<span class="stringliteral">"hello timeout"</span>);
  4268. 00342 h.timeout-&gt;setPeer(peer);
  4269. 00343
  4270. 00344 h.peer = peer;
  4271. 00345
  4272. 00346 <span class="keywordflow">if</span> (helloInterval &gt; 0.0)
  4273. 00347 {
  4274. 00348 <span class="comment">// peer is down until we know he is ok</span>
  4275. 00349
  4276. 00350 h.ok = <span class="keyword">false</span>;
  4277. 00351 }
  4278. 00352 <span class="keywordflow">else</span>
  4279. 00353 {
  4280. 00354 <span class="comment">// don't use HELLO at all, consider all peers running all the time</span>
  4281. 00355
  4282. 00356 h.ok = <span class="keyword">true</span>;
  4283. 00357 }
  4284. 00358
  4285. 00359 <a class="code" href="class_r_s_v_p.html#r16">HelloList</a>.push_back(h);
  4286. 00360
  4287. 00361 <span class="keywordflow">if</span> (helloInterval &gt; 0.0)
  4288. 00362 {
  4289. 00363 <a class="code" href="class_r_s_v_p.html#b37">startHello</a>(peer, exponential(helloInterval));
  4290. 00364 }
  4291. 00365 }
  4292. 00366 }
  4293. </pre></div>
  4294. <p>
  4295. </td>
  4296. </tr>
  4297. </table>
  4298. <a class="anchor" name="b37" doxytag="RSVP::startHello"></a><p>
  4299. <table class="mdTable" cellpadding="2" cellspacing="0">
  4300. <tr>
  4301. <td class="mdRow">
  4302. <table cellpadding="0" cellspacing="0" border="0">
  4303. <tr>
  4304. <td class="md" nowrap valign="top">void RSVP::startHello </td>
  4305. <td class="md" valign="top">(&nbsp;</td>
  4306. <td class="md" nowrap valign="top"><a class="el" href="class_i_p_address.html">IPAddress</a>&nbsp;</td>
  4307. <td class="mdname" nowrap> <em>peer</em>, </td>
  4308. </tr>
  4309. <tr>
  4310. <td class="md" nowrap align="right"></td>
  4311. <td class="md"></td>
  4312. <td class="md" nowrap>double&nbsp;</td>
  4313. <td class="mdname" nowrap> <em>delay</em></td>
  4314. </tr>
  4315. <tr>
  4316. <td class="md"></td>
  4317. <td class="md">)&nbsp;</td>
  4318. <td class="md" colspan="2"><code> [protected]</code></td>
  4319. </tr>
  4320. </table>
  4321. </td>
  4322. </tr>
  4323. </table>
  4324. <table cellspacing="5" cellpadding="0" border="0">
  4325. <tr>
  4326. <td>
  4327. &nbsp;
  4328. </td>
  4329. <td>
  4330. <p>
  4331. <div class="fragment"><pre class="fragment">00369 {
  4332. 00370 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> &lt;&lt; <span class="stringliteral">"scheduling hello start in "</span> &lt;&lt; delay &lt;&lt; <span class="stringliteral">" seconds"</span> &lt;&lt; endl;
  4333. 00371
  4334. 00372 HelloState_t *h = <a class="code" href="class_r_s_v_p.html#b51">findHello</a>(peer);
  4335. 00373 ASSERT(h);
  4336. 00374
  4337. 00375 ASSERT(!h-&gt;timer-&gt;isScheduled());
  4338. 00376 ASSERT(!h-&gt;timeout-&gt;isScheduled());
  4339. 00377 ASSERT(!h-&gt;ok);
  4340. 00378
  4341. 00379 h-&gt;<a class="code" href="struct_r_s_v_p_1_1_hello_state__t.html#o1">srcInstance</a> = ++<a class="code" href="class_r_s_v_p.html#r12">maxSrcInstance</a>;
  4342. 00380 h-&gt;<a class="code" href="struct_r_s_v_p_1_1_hello_state__t.html#o2">dstInstance</a> = 0;
  4343. 00381 h-&gt;<a class="code" href="struct_r_s_v_p_1_1_hello_state__t.html#o5">request</a> = <span class="keyword">true</span>;
  4344. 00382 h-&gt;<a class="code" href="struct_r_s_v_p_1_1_hello_state__t.html#o6">ack</a> = <span class="keyword">false</span>;
  4345. 00383
  4346. 00384 scheduleAt(simTime() + delay, h-&gt;timer);
  4347. 00385 }
  4348. </pre></div>
  4349. <p>
  4350. </td>
  4351. </tr>
  4352. </table>
  4353. <a class="anchor" name="b20" doxytag="RSVP::updateRSB"></a><p>
  4354. <table class="mdTable" cellpadding="2" cellspacing="0">
  4355. <tr>
  4356. <td class="mdRow">
  4357. <table cellpadding="0" cellspacing="0" border="0">
  4358. <tr>
  4359. <td class="md" nowrap valign="top">void RSVP::updateRSB </td>
  4360. <td class="md" valign="top">(&nbsp;</td>
  4361. <td class="md" nowrap valign="top"><a class="el" href="struct_r_s_v_p_1_1_resv_state_block__t.html">ResvStateBlock_t</a> *&nbsp;</td>
  4362. <td class="mdname" nowrap> <em>rsb</em>, </td>
  4363. </tr>
  4364. <tr>
  4365. <td class="md" nowrap align="right"></td>
  4366. <td class="md"></td>
  4367. <td class="md" nowrap><a class="el" href="class_r_s_v_p_resv_msg.html">RSVPResvMsg</a> *&nbsp;</td>
  4368. <td class="mdname" nowrap> <em>msg</em></td>
  4369. </tr>
  4370. <tr>
  4371. <td class="md"></td>
  4372. <td class="md">)&nbsp;</td>
  4373. <td class="md" colspan="2"><code> [protected]</code></td>
  4374. </tr>
  4375. </table>
  4376. </td>
  4377. </tr>
  4378. </table>
  4379. <table cellspacing="5" cellpadding="0" border="0">
  4380. <tr>
  4381. <td>
  4382. &nbsp;
  4383. </td>
  4384. <td>
  4385. <p>
  4386. <div class="fragment"><pre class="fragment">00978 {
  4387. 00979 ASSERT(rsb);
  4388. 00980
  4389. 00981 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> k = 0; k &lt; msg-&gt;getFlowDescriptor().size(); k++)
  4390. 00982 {
  4391. 00983 <a class="code" href="struct_flow_descriptor__t.html">FlowDescriptor_t</a> flow = msg-&gt;<a class="code" href="class_r_s_v_p_resv_msg___base.html#a7">getFlowDescriptor</a>()[k];
  4392. 00984
  4393. 00985 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> m;
  4394. 00986 <span class="keywordflow">for</span> (m = 0; m &lt; rsb-&gt;FlowDescriptor.size(); m++)
  4395. 00987 {
  4396. 00988 <span class="keywordflow">if</span> (rsb-&gt;FlowDescriptor[m].Filter_Spec_Object == flow.<a class="code" href="struct_flow_descriptor__t.html#o1">Filter_Spec_Object</a>)
  4397. 00989 {
  4398. 00990 <span class="comment">// sender found</span>
  4399. 00991 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> &lt;&lt; <span class="stringliteral">"sender (lspid="</span> &lt;&lt; flow.<a class="code" href="struct_flow_descriptor__t.html#o1">Filter_Spec_Object</a>.<a class="code" href="struct_sender_template_obj__t.html#o1">Lsp_Id</a> &lt;&lt; <span class="stringliteral">") found in RSB"</span> &lt;&lt; endl;
  4400. 00992
  4401. 00993 <span class="keywordflow">if</span> (rsb-&gt;FlowDescriptor[m].label != flow.<a class="code" href="struct_flow_descriptor__t.html#o3">label</a>)
  4402. 00994 {
  4403. 00995 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> &lt;&lt; <span class="stringliteral">"label modified (new label="</span> &lt;&lt; flow.<a class="code" href="struct_flow_descriptor__t.html#o3">label</a> &lt;&lt; <span class="stringliteral">")"</span> &lt;&lt; endl;
  4404. 00996
  4405. 00997 rsb-&gt;FlowDescriptor[m].<a class="code" href="struct_flow_descriptor__t.html#o3">label</a> = flow.<a class="code" href="struct_flow_descriptor__t.html#o3">label</a>;
  4406. 00998
  4407. 00999 <span class="comment">// label must be updated in lib table</span>
  4408. 01000
  4409. 01001 <a class="code" href="class_r_s_v_p.html#b30">scheduleCommitTimer</a>(rsb);
  4410. 01002 }
  4411. 01003
  4412. 01004 <span class="keywordflow">break</span>;
  4413. 01005 }
  4414. 01006 }
  4415. 01007 <span class="keywordflow">if</span> (m == rsb-&gt;FlowDescriptor.size())
  4416. 01008 {
  4417. 01009 <span class="comment">// sender not found</span>
  4418. 01010 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> &lt;&lt; <span class="stringliteral">"sender (lspid="</span> &lt;&lt; flow.<a class="code" href="struct_flow_descriptor__t.html#o1">Filter_Spec_Object</a>.<a class="code" href="struct_sender_template_obj__t.html#o1">Lsp_Id</a> &lt;&lt; <span class="stringliteral">") not found in RSB, adding..."</span> &lt;&lt; endl;
  4419. 01011
  4420. 01012 rsb-&gt;FlowDescriptor.push_back(flow);
  4421. 01013 rsb-&gt;inLabelVector.push_back(-1);
  4422. 01014
  4423. 01015 <span class="comment">// resv is new and must be forwarded</span>
  4424. 01016
  4425. 01017 <a class="code" href="class_r_s_v_p.html#b30">scheduleCommitTimer</a>(rsb);
  4426. 01018 <a class="code" href="class_r_s_v_p.html#b27">scheduleRefreshTimer</a>(rsb, 0.0);
  4427. 01019 }
  4428. 01020 }
  4429. 01021 }
  4430. </pre></div>
  4431. <p>
  4432. </td>
  4433. </tr>
  4434. </table>
  4435. <hr><h2>Friends And Related Function Documentation</h2>
  4436. <a class="anchor" name="n0" doxytag="RSVP::SimpleClassifier"></a><p>
  4437. <table class="mdTable" cellpadding="2" cellspacing="0">
  4438. <tr>
  4439. <td class="mdRow">
  4440. <table cellpadding="0" cellspacing="0" border="0">
  4441. <tr>
  4442. <td class="md" nowrap valign="top">friend class <a class="el" href="class_simple_classifier.html">SimpleClassifier</a><code> [friend]</code> </td>
  4443. </tr>
  4444. </table>
  4445. </td>
  4446. </tr>
  4447. </table>
  4448. <table cellspacing="5" cellpadding="0" border="0">
  4449. <tr>
  4450. <td>
  4451. &nbsp;
  4452. </td>
  4453. <td>
  4454. <p>
  4455. </td>
  4456. </tr>
  4457. </table>
  4458. <hr><h2>Member Data Documentation</h2>
  4459. <a class="anchor" name="r1" doxytag="RSVP::helloInterval"></a><p>
  4460. <table class="mdTable" cellpadding="2" cellspacing="0">
  4461. <tr>
  4462. <td class="mdRow">
  4463. <table cellpadding="0" cellspacing="0" border="0">
  4464. <tr>
  4465. <td class="md" nowrap valign="top">double <a class="el" href="class_r_s_v_p.html#r1">RSVP::helloInterval</a><code> [private]</code> </td>
  4466. </tr>
  4467. </table>
  4468. </td>
  4469. </tr>
  4470. </table>
  4471. <table cellspacing="5" cellpadding="0" border="0">
  4472. <tr>
  4473. <td>
  4474. &nbsp;
  4475. </td>
  4476. <td>
  4477. <p>
  4478. </td>
  4479. </tr>
  4480. </table>
  4481. <a class="anchor" name="r16" doxytag="RSVP::HelloList"></a><p>
  4482. <table class="mdTable" cellpadding="2" cellspacing="0">
  4483. <tr>
  4484. <td class="mdRow">
  4485. <table cellpadding="0" cellspacing="0" border="0">
  4486. <tr>
  4487. <td class="md" nowrap valign="top"><a class="el" href="class_r_s_v_p.html#y2">HelloVector</a> <a class="el" href="class_r_s_v_p.html#r16">RSVP::HelloList</a><code> [private]</code> </td>
  4488. </tr>
  4489. </table>
  4490. </td>
  4491. </tr>
  4492. </table>
  4493. <table cellspacing="5" cellpadding="0" border="0">
  4494. <tr>
  4495. <td>
  4496. &nbsp;
  4497. </td>
  4498. <td>
  4499. <p>
  4500. </td>
  4501. </tr>
  4502. </table>
  4503. <a class="anchor" name="r2" doxytag="RSVP::helloTimeout"></a><p>
  4504. <table class="mdTable" cellpadding="2" cellspacing="0">
  4505. <tr>
  4506. <td class="mdRow">
  4507. <table cellpadding="0" cellspacing="0" border="0">
  4508. <tr>
  4509. <td class="md" nowrap valign="top">double <a class="el" href="class_r_s_v_p.html#r2">RSVP::helloTimeout</a><code> [private]</code> </td>
  4510. </tr>
  4511. </table>
  4512. </td>
  4513. </tr>
  4514. </table>
  4515. <table cellspacing="5" cellpadding="0" border="0">
  4516. <tr>
  4517. <td>
  4518. &nbsp;
  4519. </td>
  4520. <td>
  4521. <p>
  4522. </td>
  4523. </tr>
  4524. </table>
  4525. <a class="anchor" name="r6" doxytag="RSVP::ift"></a><p>
  4526. <table class="mdTable" cellpadding="2" cellspacing="0">
  4527. <tr>
  4528. <td class="mdRow">
  4529. <table cellpadding="0" cellspacing="0" border="0">
  4530. <tr>
  4531. <td class="md" nowrap valign="top"><a class="el" href="class_interface_table.html">InterfaceTable</a>* <a class="el" href="class_r_s_v_p.html#r6">RSVP::ift</a><code> [private]</code> </td>
  4532. </tr>
  4533. </table>
  4534. </td>
  4535. </tr>
  4536. </table>
  4537. <table cellspacing="5" cellpadding="0" border="0">
  4538. <tr>
  4539. <td>
  4540. &nbsp;
  4541. </td>
  4542. <td>
  4543. <p>
  4544. </td>
  4545. </tr>
  4546. </table>
  4547. <a class="anchor" name="r7" doxytag="RSVP::lt"></a><p>
  4548. <table class="mdTable" cellpadding="2" cellspacing="0">
  4549. <tr>
  4550. <td class="mdRow">
  4551. <table cellpadding="0" cellspacing="0" border="0">
  4552. <tr>
  4553. <td class="md" nowrap valign="top"><a class="el" href="class_l_i_b_table.html">LIBTable</a>* <a class="el" href="class_r_s_v_p.html#r7">RSVP::lt</a><code> [private]</code> </td>
  4554. </tr>
  4555. </table>
  4556. </td>
  4557. </tr>
  4558. </table>
  4559. <table cellspacing="5" cellpadding="0" border="0">
  4560. <tr>
  4561. <td>
  4562. &nbsp;
  4563. </td>
  4564. <td>
  4565. <p>
  4566. </td>
  4567. </tr>
  4568. </table>
  4569. <a class="anchor" name="r10" doxytag="RSVP::maxPsbId"></a><p>
  4570. <table class="mdTable" cellpadding="2" cellspacing="0">
  4571. <tr>
  4572. <td class="mdRow">
  4573. <table cellpadding="0" cellspacing="0" border="0">
  4574. <tr>
  4575. <td class="md" nowrap valign="top">int <a class="el" href="class_r_s_v_p.html#r10">RSVP::maxPsbId</a><code> [private]</code> </td>
  4576. </tr>
  4577. </table>
  4578. </td>
  4579. </tr>
  4580. </table>
  4581. <table cellspacing="5" cellpadding="0" border="0">
  4582. <tr>
  4583. <td>
  4584. &nbsp;
  4585. </td>
  4586. <td>
  4587. <p>
  4588. </td>
  4589. </tr>
  4590. </table>
  4591. <a class="anchor" name="r11" doxytag="RSVP::maxRsbId"></a><p>
  4592. <table class="mdTable" cellpadding="2" cellspacing="0">
  4593. <tr>
  4594. <td class="mdRow">
  4595. <table cellpadding="0" cellspacing="0" border="0">
  4596. <tr>
  4597. <td class="md" nowrap valign="top">int <a class="el" href="class_r_s_v_p.html#r11">RSVP::maxRsbId</a><code> [private]</code> </td>
  4598. </tr>
  4599. </table>
  4600. </td>
  4601. </tr>
  4602. </table>
  4603. <table cellspacing="5" cellpadding="0" border="0">
  4604. <tr>
  4605. <td>
  4606. &nbsp;
  4607. </td>
  4608. <td>
  4609. <p>
  4610. </td>
  4611. </tr>
  4612. </table>
  4613. <a class="anchor" name="r12" doxytag="RSVP::maxSrcInstance"></a><p>
  4614. <table class="mdTable" cellpadding="2" cellspacing="0">
  4615. <tr>
  4616. <td class="mdRow">
  4617. <table cellpadding="0" cellspacing="0" border="0">
  4618. <tr>
  4619. <td class="md" nowrap valign="top">int <a class="el" href="class_r_s_v_p.html#r12">RSVP::maxSrcInstance</a><code> [private]</code> </td>
  4620. </tr>
  4621. </table>
  4622. </td>
  4623. </tr>
  4624. </table>
  4625. <table cellspacing="5" cellpadding="0" border="0">
  4626. <tr>
  4627. <td>
  4628. &nbsp;
  4629. </td>
  4630. <td>
  4631. <p>
  4632. </td>
  4633. </tr>
  4634. </table>
  4635. <a class="anchor" name="r8" doxytag="RSVP::nb"></a><p>
  4636. <table class="mdTable" cellpadding="2" cellspacing="0">
  4637. <tr>
  4638. <td class="mdRow">
  4639. <table cellpadding="0" cellspacing="0" border="0">
  4640. <tr>
  4641. <td class="md" nowrap valign="top"><a class="el" href="class_notification_board.html">NotificationBoard</a>* <a class="el" href="class_r_s_v_p.html#r8">RSVP::nb</a><code> [private]</code> </td>
  4642. </tr>
  4643. </table>
  4644. </td>
  4645. </tr>
  4646. </table>
  4647. <table cellspacing="5" cellpadding="0" border="0">
  4648. <tr>
  4649. <td>
  4650. &nbsp;
  4651. </td>
  4652. <td>
  4653. <p>
  4654. </td>
  4655. </tr>
  4656. </table>
  4657. <a class="anchor" name="r14" doxytag="RSVP::PSBList"></a><p>
  4658. <table class="mdTable" cellpadding="2" cellspacing="0">
  4659. <tr>
  4660. <td class="mdRow">
  4661. <table cellpadding="0" cellspacing="0" border="0">
  4662. <tr>
  4663. <td class="md" nowrap valign="top"><a class="el" href="class_r_s_v_p.html#y0">PSBVector</a> <a class="el" href="class_r_s_v_p.html#r14">RSVP::PSBList</a><code> [private]</code> </td>
  4664. </tr>
  4665. </table>
  4666. </td>
  4667. </tr>
  4668. </table>
  4669. <table cellspacing="5" cellpadding="0" border="0">
  4670. <tr>
  4671. <td>
  4672. &nbsp;
  4673. </td>
  4674. <td>
  4675. <p>
  4676. </td>
  4677. </tr>
  4678. </table>
  4679. <a class="anchor" name="r3" doxytag="RSVP::retryInterval"></a><p>
  4680. <table class="mdTable" cellpadding="2" cellspacing="0">
  4681. <tr>
  4682. <td class="mdRow">
  4683. <table cellpadding="0" cellspacing="0" border="0">
  4684. <tr>
  4685. <td class="md" nowrap valign="top">double <a class="el" href="class_r_s_v_p.html#r3">RSVP::retryInterval</a><code> [private]</code> </td>
  4686. </tr>
  4687. </table>
  4688. </td>
  4689. </tr>
  4690. </table>
  4691. <table cellspacing="5" cellpadding="0" border="0">
  4692. <tr>
  4693. <td>
  4694. &nbsp;
  4695. </td>
  4696. <td>
  4697. <p>
  4698. </td>
  4699. </tr>
  4700. </table>
  4701. <a class="anchor" name="r13" doxytag="RSVP::routerId"></a><p>
  4702. <table class="mdTable" cellpadding="2" cellspacing="0">
  4703. <tr>
  4704. <td class="mdRow">
  4705. <table cellpadding="0" cellspacing="0" border="0">
  4706. <tr>
  4707. <td class="md" nowrap valign="top"><a class="el" href="class_i_p_address.html">IPAddress</a> <a class="el" href="class_r_s_v_p.html#r13">RSVP::routerId</a><code> [private]</code> </td>
  4708. </tr>
  4709. </table>
  4710. </td>
  4711. </tr>
  4712. </table>
  4713. <table cellspacing="5" cellpadding="0" border="0">
  4714. <tr>
  4715. <td>
  4716. &nbsp;
  4717. </td>
  4718. <td>
  4719. <p>
  4720. </td>
  4721. </tr>
  4722. </table>
  4723. <a class="anchor" name="r9" doxytag="RSVP::rpct"></a><p>
  4724. <table class="mdTable" cellpadding="2" cellspacing="0">
  4725. <tr>
  4726. <td class="mdRow">
  4727. <table cellpadding="0" cellspacing="0" border="0">
  4728. <tr>
  4729. <td class="md" nowrap valign="top"><a class="el" href="class_i_r_s_v_p_classifier.html">IRSVPClassifier</a>* <a class="el" href="class_r_s_v_p.html#r9">RSVP::rpct</a><code> [private]</code> </td>
  4730. </tr>
  4731. </table>
  4732. </td>
  4733. </tr>
  4734. </table>
  4735. <table cellspacing="5" cellpadding="0" border="0">
  4736. <tr>
  4737. <td>
  4738. &nbsp;
  4739. </td>
  4740. <td>
  4741. <p>
  4742. </td>
  4743. </tr>
  4744. </table>
  4745. <a class="anchor" name="r15" doxytag="RSVP::RSBList"></a><p>
  4746. <table class="mdTable" cellpadding="2" cellspacing="0">
  4747. <tr>
  4748. <td class="mdRow">
  4749. <table cellpadding="0" cellspacing="0" border="0">
  4750. <tr>
  4751. <td class="md" nowrap valign="top"><a class="el" href="class_r_s_v_p.html#y1">RSBVector</a> <a class="el" href="class_r_s_v_p.html#r15">RSVP::RSBList</a><code> [private]</code> </td>
  4752. </tr>
  4753. </table>
  4754. </td>
  4755. </tr>
  4756. </table>
  4757. <table cellspacing="5" cellpadding="0" border="0">
  4758. <tr>
  4759. <td>
  4760. &nbsp;
  4761. </td>
  4762. <td>
  4763. <p>
  4764. </td>
  4765. </tr>
  4766. </table>
  4767. <a class="anchor" name="r5" doxytag="RSVP::rt"></a><p>
  4768. <table class="mdTable" cellpadding="2" cellspacing="0">
  4769. <tr>
  4770. <td class="mdRow">
  4771. <table cellpadding="0" cellspacing="0" border="0">
  4772. <tr>
  4773. <td class="md" nowrap valign="top"><a class="el" href="class_routing_table.html">RoutingTable</a>* <a class="el" href="class_r_s_v_p.html#r5">RSVP::rt</a><code> [private]</code> </td>
  4774. </tr>
  4775. </table>
  4776. </td>
  4777. </tr>
  4778. </table>
  4779. <table cellspacing="5" cellpadding="0" border="0">
  4780. <tr>
  4781. <td>
  4782. &nbsp;
  4783. </td>
  4784. <td>
  4785. <p>
  4786. </td>
  4787. </tr>
  4788. </table>
  4789. <a class="anchor" name="r4" doxytag="RSVP::tedmod"></a><p>
  4790. <table class="mdTable" cellpadding="2" cellspacing="0">
  4791. <tr>
  4792. <td class="mdRow">
  4793. <table cellpadding="0" cellspacing="0" border="0">
  4794. <tr>
  4795. <td class="md" nowrap valign="top"><a class="el" href="class_t_e_d.html">TED</a>* <a class="el" href="class_r_s_v_p.html#r4">RSVP::tedmod</a><code> [private]</code> </td>
  4796. </tr>
  4797. </table>
  4798. </td>
  4799. </tr>
  4800. </table>
  4801. <table cellspacing="5" cellpadding="0" border="0">
  4802. <tr>
  4803. <td>
  4804. &nbsp;
  4805. </td>
  4806. <td>
  4807. <p>
  4808. </td>
  4809. </tr>
  4810. </table>
  4811. <a class="anchor" name="r0" doxytag="RSVP::traffic"></a><p>
  4812. <table class="mdTable" cellpadding="2" cellspacing="0">
  4813. <tr>
  4814. <td class="mdRow">
  4815. <table cellpadding="0" cellspacing="0" border="0">
  4816. <tr>
  4817. <td class="md" nowrap valign="top">std::vector&lt;<a class="el" href="struct_r_s_v_p_1_1traffic__session__t.html">traffic_session_t</a>&gt; <a class="el" href="class_r_s_v_p.html#r0">RSVP::traffic</a><code> [private]</code> </td>
  4818. </tr>
  4819. </table>
  4820. </td>
  4821. </tr>
  4822. </table>
  4823. <table cellspacing="5" cellpadding="0" border="0">
  4824. <tr>
  4825. <td>
  4826. &nbsp;
  4827. </td>
  4828. <td>
  4829. <p>
  4830. </td>
  4831. </tr>
  4832. </table>
  4833. <hr>The documentation for this class was generated from the following files:<ul>
  4834. <li><a class="el" href="_r_s_v_p_8h.html">RSVP.h</a><li><a class="el" href="_r_s_v_p_8cc.html">RSVP.cc</a></ul>
  4835. <hr size="1"><address style="align: right;"><small>Generated on Thu Oct 19 18:22:28 2006 for INET Framework for OMNeT++/OMNEST by&nbsp;
  4836. <a href="http://www.doxygen.org/index.html">
  4837. <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.0 </small></address>
  4838. </body>
  4839. </html>