/Documentation/doxy/class_r_s_v_p.html
HTML | 5023 lines | 4838 code | 184 blank | 1 comment | 0 complexity | bbe00edb5ed2599208e419813274e645 MD5 | raw file
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
- <title>INET Framework for OMNeT++/OMNEST: RSVP Class Reference</title>
- <link href="opp.css" rel="stylesheet" type="text/css">
- </head><body>
- <!-- Generated by Doxygen 1.4.0 -->
- <div class="qindex"><a class="qindex" href="main.html">Main Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html">Class Members</a> | <a class="qindex" href="globals.html">File Members</a> | <a class="qindex" href="pages.html">Related Pages</a></div>
- <h1>RSVP Class Reference</h1><code>#include <RSVP.h></code>
- <p>
- <p>Inheritance diagram for RSVP:
- <p><center><img src="class_r_s_v_p.png" usemap="#RSVP_map" border="0" alt=""></center>
- <map name="RSVP_map">
- <area href="class_i_scriptable.html" alt="IScriptable" shape="rect" coords="0,0,72,24">
- </map>
- <a href="class_r_s_v_p-members.html">List of all members.</a><hr><a name="_details"></a><h2>Detailed Description</h2>
- TODO documentation
- <p>
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><td></td></tr>
- <tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
- <tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#a0">RSVP</a> ()</td></tr>
- <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual </td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#a1">~RSVP</a> ()</td></tr>
- <tr><td colspan="2"><br><h2>Protected Member Functions</h2></td></tr>
- <tr><td class="memItemLeft" nowrap align="right" valign="top">void </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>
- <tr><td class="memItemLeft" nowrap align="right" valign="top">void </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>
- <tr><td class="memItemLeft" nowrap align="right" valign="top">void </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>
- <tr><td class="memItemLeft" nowrap align="right" valign="top">void </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>
- <tr><td class="memItemLeft" nowrap align="right" valign="top">void </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>
- <tr><td class="memItemLeft" nowrap align="right" valign="top">void </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>
- <tr><td class="memItemLeft" nowrap align="right" valign="top">void </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>
- <tr><td class="memItemLeft" nowrap align="right" valign="top">void </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>
- <tr><td class="memItemLeft" nowrap align="right" valign="top">void </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>
- <tr><td class="memItemLeft" nowrap align="right" valign="top">void </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>
- <tr><td class="memItemLeft" nowrap align="right" valign="top">void </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>
- <tr><td class="memItemLeft" nowrap align="right" valign="top">void </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>
- <tr><td class="memItemLeft" nowrap align="right" valign="top">void </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>
- <tr><td class="memItemLeft" nowrap align="right" valign="top">void </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>
- <tr><td class="memItemLeft" nowrap align="right" valign="top">void </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>
- <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> * </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>
- <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> * </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> &session, const <a class="el" href="struct_r_s_v_p_1_1traffic__path__t.html">traffic_path_t</a> &path)</td></tr>
- <tr><td class="memItemLeft" nowrap align="right" valign="top">void </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>
- <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> * </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>
- <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> * </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>
- <tr><td class="memItemLeft" nowrap align="right" valign="top">void </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>
- <tr><td class="memItemLeft" nowrap align="right" valign="top">void </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>
- <tr><td class="memItemLeft" nowrap align="right" valign="top">void </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>
- <tr><td class="memItemLeft" nowrap align="right" valign="top">void </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>
- <tr><td class="memItemLeft" nowrap align="right" valign="top">void </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>
- <tr><td class="memItemLeft" nowrap align="right" valign="top">void </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>
- <tr><td class="memItemLeft" nowrap align="right" valign="top">void </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>
- <tr><td class="memItemLeft" nowrap align="right" valign="top">void </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>
- <tr><td class="memItemLeft" nowrap align="right" valign="top">void </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>
- <tr><td class="memItemLeft" nowrap align="right" valign="top">void </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>
- <tr><td class="memItemLeft" nowrap align="right" valign="top">void </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>
- <tr><td class="memItemLeft" nowrap align="right" valign="top">void </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>
- <tr><td class="memItemLeft" nowrap align="right" valign="top">void </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>
- <tr><td class="memItemLeft" nowrap align="right" valign="top">void </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>
- <tr><td class="memItemLeft" nowrap align="right" valign="top">void </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> &session, const <a class="el" href="struct_sender_template_obj__t.html">SenderTemplateObj_t</a> &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>
- <tr><td class="memItemLeft" nowrap align="right" valign="top">void </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> &session, const <a class="el" href="struct_sender_template_obj__t.html">SenderTemplateObj_t</a> &sender, int status, double delay)</td></tr>
- <tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b36">setupHello</a> ()</td></tr>
- <tr><td class="memItemLeft" nowrap align="right" valign="top">void </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>
- <tr><td class="memItemLeft" nowrap align="right" valign="top">void </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>
- <tr><td class="memItemLeft" nowrap align="right" valign="top">bool </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> &session, double bandwidth)</td></tr>
- <tr><td class="memItemLeft" nowrap align="right" valign="top">void </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>
- <tr><td class="memItemLeft" nowrap align="right" valign="top">bool </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> &session, const <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> OI)</td></tr>
- <tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b42">announceLinkChange</a> (int tedlinkindex)</td></tr>
- <tr><td class="memItemLeft" nowrap align="right" valign="top">void </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>
- <tr><td class="memItemLeft" nowrap align="right" valign="top">bool </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> &ERO, <a class="el" href="class_i_p_address.html">IPAddress</a> &OI)</td></tr>
- <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> * </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> &session, const <a class="el" href="struct_sender_template_obj__t.html">SenderTemplateObj_t</a> &sender)</td></tr>
- <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> * </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> &session, const <a class="el" href="struct_sender_template_obj__t.html">SenderTemplateObj_t</a> &sender, unsigned int &index)</td></tr>
- <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> * </td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b47">findPsbById</a> (int id)</td></tr>
- <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> * </td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b48">findRsbById</a> (int id)</td></tr>
- <tr><td class="memItemLeft" nowrap align="right" valign="top">std::vector< <a class="el" href="struct_r_s_v_p_1_1traffic__session__t.html">traffic_session_t</a> <br>
- >::iterator </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> &session)</td></tr>
- <tr><td class="memItemLeft" nowrap align="right" valign="top">std::vector< <a class="el" href="struct_r_s_v_p_1_1traffic__path__t.html">traffic_path_t</a> <br>
- >::iterator </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> &sender)</td></tr>
- <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> * </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>
- <tr><td class="memItemLeft" nowrap align="right" valign="top">void </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>
- <tr><td class="memItemLeft" nowrap align="right" valign="top">void </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>
- <tr><td class="memItemLeft" nowrap align="right" valign="top">void </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>
- <tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b55">readTrafficSessionFromXML</a> (const cXMLElement *session)</td></tr>
- <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="_int_serv__m_8h.html#a2">EroVector</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b56">readTrafficRouteFromXML</a> (const cXMLElement *route)</td></tr>
- <tr><td class="memItemLeft" nowrap align="right" valign="top">void </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> &session, const <a class="el" href="struct_sender_template_obj__t.html">SenderTemplateObj_t</a> &sender)</td></tr>
- <tr><td class="memItemLeft" nowrap align="right" valign="top">void </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>
- <tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b59">addSession</a> (const cXMLElement &node)</td></tr>
- <tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b60">delSession</a> (const cXMLElement &node)</td></tr>
- <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual int </td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b61">numInitStages</a> () const </td></tr>
- <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b62">initialize</a> (int stage)</td></tr>
- <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b63">handleMessage</a> (cMessage *msg)</td></tr>
- <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#b64">processCommand</a> (const cXMLElement &node)</td></tr>
- <tr><td colspan="2"><br><h2>Private Types</h2></td></tr>
- <tr><td class="memItemLeft" nowrap align="right" valign="top">typedef std::vector< <a class="el" href="struct_r_s_v_p_1_1_path_state_block__t.html">PathStateBlock_t</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#y0">PSBVector</a></td></tr>
- <tr><td class="memItemLeft" nowrap align="right" valign="top">typedef std::vector< <a class="el" href="struct_r_s_v_p_1_1_resv_state_block__t.html">ResvStateBlock_t</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#y1">RSBVector</a></td></tr>
- <tr><td class="memItemLeft" nowrap align="right" valign="top">typedef std::vector< <a class="el" href="struct_r_s_v_p_1_1_hello_state__t.html">HelloState_t</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#y2">HelloVector</a></td></tr>
- <tr><td colspan="2"><br><h2>Private Member Functions</h2></td></tr>
- <tr><td class="memItemLeft" nowrap align="right" valign="top">int </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> &session, const <a class="el" href="struct_sender_template_obj__t.html">SenderTemplateObj_t</a> &sender)</td></tr>
- <tr><td colspan="2"><br><h2>Private Attributes</h2></td></tr>
- <tr><td class="memItemLeft" nowrap align="right" valign="top">std::vector< <a class="el" href="struct_r_s_v_p_1_1traffic__session__t.html">traffic_session_t</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#r0">traffic</a></td></tr>
- <tr><td class="memItemLeft" nowrap align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#r1">helloInterval</a></td></tr>
- <tr><td class="memItemLeft" nowrap align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#r2">helloTimeout</a></td></tr>
- <tr><td class="memItemLeft" nowrap align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#r3">retryInterval</a></td></tr>
- <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="class_t_e_d.html">TED</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#r4">tedmod</a></td></tr>
- <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="class_routing_table.html">RoutingTable</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#r5">rt</a></td></tr>
- <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="class_interface_table.html">InterfaceTable</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#r6">ift</a></td></tr>
- <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="class_l_i_b_table.html">LIBTable</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#r7">lt</a></td></tr>
- <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="class_notification_board.html">NotificationBoard</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#r8">nb</a></td></tr>
- <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="class_i_r_s_v_p_classifier.html">IRSVPClassifier</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#r9">rpct</a></td></tr>
- <tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#r10">maxPsbId</a></td></tr>
- <tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#r11">maxRsbId</a></td></tr>
- <tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#r12">maxSrcInstance</a></td></tr>
- <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="class_i_p_address.html">IPAddress</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#r13">routerId</a></td></tr>
- <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="class_r_s_v_p.html#y0">PSBVector</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#r14">PSBList</a></td></tr>
- <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="class_r_s_v_p.html#y1">RSBVector</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#r15">RSBList</a></td></tr>
- <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="class_r_s_v_p.html#y2">HelloVector</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#r16">HelloList</a></td></tr>
- <tr><td colspan="2"><br><h2>Friends</h2></td></tr>
- <tr><td class="memItemLeft" nowrap align="right" valign="top">class </td><td class="memItemRight" valign="bottom"><a class="el" href="class_r_s_v_p.html#n0">SimpleClassifier</a></td></tr>
- <tr><td colspan="2"><br><h2>Classes</h2></td></tr>
- <tr><td class="memItemLeft" nowrap align="right" valign="top">struct </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>
- <tr><td class="memItemLeft" nowrap align="right" valign="top">struct </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>
- <tr><td class="memItemLeft" nowrap align="right" valign="top">struct </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>
- <tr><td class="memItemLeft" nowrap align="right" valign="top">struct </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>
- <tr><td class="memItemLeft" nowrap align="right" valign="top">struct </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>
- </table>
- <hr><h2>Member Typedef Documentation</h2>
- <a class="anchor" name="y2" doxytag="RSVP::HelloVector"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">typedef std::vector<<a class="el" href="struct_r_s_v_p_1_1_hello_state__t.html">HelloState_t</a>> <a class="el" href="class_r_s_v_p.html#y2">RSVP::HelloVector</a><code> [private]</code> </td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="y0" doxytag="RSVP::PSBVector"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">typedef std::vector<<a class="el" href="struct_r_s_v_p_1_1_path_state_block__t.html">PathStateBlock_t</a>> <a class="el" href="class_r_s_v_p.html#y0">RSVP::PSBVector</a><code> [private]</code> </td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="y1" doxytag="RSVP::RSBVector"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">typedef std::vector<<a class="el" href="struct_r_s_v_p_1_1_resv_state_block__t.html">ResvStateBlock_t</a>> <a class="el" href="class_r_s_v_p.html#y1">RSVP::RSBVector</a><code> [private]</code> </td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- </td>
- </tr>
- </table>
- <hr><h2>Constructor & Destructor Documentation</h2>
- <a class="anchor" name="a0" doxytag="RSVP::RSVP"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">RSVP::RSVP </td>
- <td class="md" valign="top">( </td>
- <td class="mdname1" valign="top" nowrap> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- <div class="fragment"><pre class="fragment">00042 {
- 00043 }
- </pre></div>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="a1" doxytag="RSVP::~RSVP"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">RSVP::~<a class="el" href="class_r_s_v_p.html">RSVP</a> </td>
- <td class="md" valign="top">( </td>
- <td class="mdname1" valign="top" nowrap> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [virtual]</code></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- <div class="fragment"><pre class="fragment">00046 {
- 00047 <span class="comment">// TODO cancelAndDelete timers in all data structures</span>
- 00048 }
- </pre></div>
- <p>
- </td>
- </tr>
- </table>
- <hr><h2>Member Function Documentation</h2>
- <a class="anchor" name="b59" doxytag="RSVP::addSession"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">void RSVP::addSession </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top">const cXMLElement & </td>
- <td class="mdname1" valign="top" nowrap> <em>node</em> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [protected]</code></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- <div class="fragment"><pre class="fragment">01855 {
- 01856 Enter_Method_Silent();
- 01857
- 01858 <a class="code" href="class_r_s_v_p.html#b55">readTrafficSessionFromXML</a>(&node);
- 01859 }
- </pre></div>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="b39" doxytag="RSVP::allocateResource"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">bool RSVP::allocateResource </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top"><a class="el" href="class_i_p_address.html">IPAddress</a> </td>
- <td class="mdname" nowrap> <em>OI</em>, </td>
- </tr>
- <tr>
- <td class="md" nowrap align="right"></td>
- <td class="md"></td>
- <td class="md" nowrap>const <a class="el" href="struct_session_obj__t.html">SessionObj_t</a> & </td>
- <td class="mdname" nowrap> <em>session</em>, </td>
- </tr>
- <tr>
- <td class="md" nowrap align="right"></td>
- <td class="md"></td>
- <td class="md" nowrap>double </td>
- <td class="mdname" nowrap> <em>bandwidth</em></td>
- </tr>
- <tr>
- <td class="md"></td>
- <td class="md">) </td>
- <td class="md" colspan="2"><code> [protected]</code></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- <div class="fragment"><pre class="fragment">00721 {
- 00722 <span class="keywordflow">if</span> (OI.<a class="code" href="class_i_p_address.html#a1">isUnspecified</a>())
- 00723 <span class="keywordflow">return</span> <span class="keyword">true</span>;
- 00724
- 00725 <span class="keywordflow">if</span> (!<a class="code" href="class_r_s_v_p.html#r4">tedmod</a>-><a class="code" href="class_t_e_d.html#z61_5">isLocalAddress</a>(OI))
- 00726 <span class="keywordflow">return</span> <span class="keyword">true</span>;
- 00727
- 00728 <span class="keywordflow">if</span> (bandwidth == 0.0)
- 00729 return true;
- 00730
- 00731 <span class="keywordtype">int</span> setupPri = session.setupPri;
- 00732 <span class="keywordtype">int</span> holdingPri = session.holdingPri;
- 00733
- 00734 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index = tedmod->linkIndex(OI);
- 00735
- 00736 <span class="comment">// Note: UnRB[7] <= UnRW[setupPri] <= UnRW[holdingPri] <= BW[0]</span>
- 00737 <span class="comment">// UnRW[7] is the actual BW left on the link</span>
- 00738
- 00739 if (tedmod->ted[index].UnResvBandwidth[setupPri] < bandwidth)
- 00740 return false;
- 00741
- 00742 for (<span class="keywordtype">int</span> p = holdingPri; p < 8; p++)
- 00743 {
- 00744 <a class="code" href="class_r_s_v_p.html#r4">tedmod</a>-><a class="code" href="class_t_e_d.html#o0">ted</a>[index].UnResvBandwidth[p] -= bandwidth;
- 00745
- 00746 <span class="keywordflow">if</span> (<a class="code" href="class_r_s_v_p.html#r4">tedmod</a>-><a class="code" href="class_t_e_d.html#o0">ted</a>[index].UnResvBandwidth[p] < 0.0)
- 00747 preempt(OI, p, -tedmod->ted[index].UnResvBandwidth[p]);
- 00748 }
- 00749
- 00750 <span class="comment">// announce changes</span>
- 00751
- 00752 announceLinkChange(index);
- 00753
- 00754 return true;
- 00755 }
- </pre></div>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="b42" doxytag="RSVP::announceLinkChange"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">void RSVP::announceLinkChange </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top">int </td>
- <td class="mdname1" valign="top" nowrap> <em>tedlinkindex</em> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [protected]</code></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- <div class="fragment"><pre class="fragment">00758 {
- 00759 <a class="code" href="class_t_e_d_change_info.html">TEDChangeInfo</a> d;
- 00760 d.<a class="code" href="class_t_e_d_change_info.html#a6">setTedLinkIndicesArraySize</a>(1);
- 00761 d.<a class="code" href="class_t_e_d_change_info.html#a9">setTedLinkIndices</a>(0, tedlinkindex);
- 00762 <a class="code" href="class_r_s_v_p.html#r8">nb</a>-><a class="code" href="class_notification_board.html#z24_0">fireChangeNotification</a>(NF_TED_CHANGED, &d);
- 00763 }
- </pre></div>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="b26" doxytag="RSVP::commitResv"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">void RSVP::commitResv </td>
- <td class="md" valign="top">( </td>
- <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> * </td>
- <td class="mdname1" valign="top" nowrap> <em>rsb</em> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [protected]</code></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- <div class="fragment"><pre class="fragment">00766 {
- 00767 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> << <span class="stringliteral">"commit reservation (RSB "</span> << rsb->id << <span class="stringliteral">")"</span> << endl;
- 00768
- 00769 <span class="comment">// allocate bandwidth as needed</span>
- 00770
- 00771 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> << <span class="stringliteral">"currently allocated: "</span> << rsb->Flowspec_Object << endl;
- 00772
- 00773 <span class="keywordflow">while</span>(<span class="keyword">true</span>)
- 00774 {
- 00775 <span class="comment">// remove RSB if empty</span>
- 00776
- 00777 <span class="keywordflow">if</span> (rsb->FlowDescriptor.size() == 0)
- 00778 {
- 00779 <a class="code" href="class_r_s_v_p.html#b21">removeRSB</a>(rsb);
- 00780 <span class="keywordflow">return</span>;
- 00781 }
- 00782
- 00783 <a class="code" href="struct_flow_spec_obj__t.html">FlowSpecObj_t</a> req;
- 00784 req.<a class="code" href="struct_sender_tspec_obj__t.html#o0">req_bandwidth</a> = 0.0;
- 00785
- 00786 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> maxFlowIndex;
- 00787 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < rsb->FlowDescriptor.size(); i++)
- 00788 {
- 00789 <span class="keywordflow">if</span> (rsb->FlowDescriptor[i].Flowspec_Object.req_bandwidth > req.<a class="code" href="struct_sender_tspec_obj__t.html#o0">req_bandwidth</a>)
- 00790 {
- 00791 req.<a class="code" href="struct_sender_tspec_obj__t.html#o0">req_bandwidth</a> = rsb->FlowDescriptor[i].Flowspec_Object.<a class="code" href="struct_sender_tspec_obj__t.html#o0">req_bandwidth</a>;
- 00792 maxFlowIndex = i;
- 00793 }
- 00794 }
- 00795
- 00796 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> << <span class="stringliteral">"currently required: "</span> << req << endl;
- 00797
- 00798 <span class="keywordtype">double</span> needed = req.<a class="code" href="struct_sender_tspec_obj__t.html#o0">req_bandwidth</a> - rsb->Flowspec_Object.<a class="code" href="struct_sender_tspec_obj__t.html#o0">req_bandwidth</a>;
- 00799
- 00800 <span class="keywordflow">if</span> (needed != 0.0)
- 00801 {
- 00802 <span class="keywordflow">if</span> (<a class="code" href="class_r_s_v_p.html#b39">allocateResource</a>(rsb->OI, rsb->Session_Object, needed))
- 00803 {
- 00804 <span class="comment">// allocated (deallocated) successfully</span>
- 00805
- 00806 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> << <span class="stringliteral">"additional bandwidth of "</span> << needed << <span class="stringliteral">" allocated sucessfully"</span> << endl;
- 00807
- 00808 rsb->Flowspec_Object.<a class="code" href="struct_sender_tspec_obj__t.html#o0">req_bandwidth</a> += needed;
- 00809 }
- 00810 <span class="keywordflow">else</span>
- 00811 {
- 00812 <span class="comment">// bandwidth not available</span>
- 00813
- 00814 ASSERT(rsb->inLabelVector.size() == rsb->FlowDescriptor.size());
- 00815
- 00816 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> << <span class="stringliteral">"not enough bandwidth to accommodate this RSB"</span> << endl;
- 00817
- 00818 <span class="keywordtype">int</span> lspid = rsb->FlowDescriptor[maxFlowIndex].Filter_Spec_Object.Lsp_Id;
- 00819 <span class="keywordtype">int</span> oldInLabel = rsb->inLabelVector[maxFlowIndex];
- 00820 PathStateBlock_t *psb = <a class="code" href="class_r_s_v_p.html#b45">findPSB</a>(rsb->Session_Object, (<a class="code" href="struct_sender_template_obj__t.html">SenderTemplateObj_t</a>&)rsb->FlowDescriptor[maxFlowIndex].Filter_Spec_Object);
- 00821
- 00822 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> << <span class="stringliteral">"removing filter lspid="</span> << lspid << <span class="stringliteral">" (max. flow)"</span> << endl;
- 00823
- 00824 rsb->FlowDescriptor.erase(rsb->FlowDescriptor.begin() + maxFlowIndex);
- 00825 rsb->inLabelVector.erase(rsb->inLabelVector.begin() + maxFlowIndex);
- 00826
- 00827 <span class="keywordflow">if</span> (oldInLabel != -1)
- 00828 {
- 00829 <span class="comment">// path already existed, this must be preemption</span>
- 00830
- 00831 <a class="code" href="class_r_s_v_p.html#b32">sendPathErrorMessage</a>(psb, PATH_ERR_PREEMPTED);
- 00832
- 00833 <a class="code" href="class_r_s_v_p.html#r7">lt</a>-><a class="code" href="class_l_i_b_table.html#a2">removeLibEntry</a>(oldInLabel);
- 00834 }
- 00835 <span class="keywordflow">else</span>
- 00836 {
- 00837 <span class="comment">// path not established yet, report as unfeasible</span>
- 00838
- 00839 <a class="code" href="class_r_s_v_p.html#b32">sendPathErrorMessage</a>(psb, PATH_ERR_UNFEASIBLE);
- 00840 }
- 00841
- 00842 <span class="keywordflow">continue</span>;
- 00843 }
- 00844
- 00845 }
- 00846
- 00847 <span class="keywordflow">break</span>;
- 00848 }
- 00849
- 00850 <span class="comment">// install labels into lib</span>
- 00851
- 00852 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < rsb->FlowDescriptor.size(); i++)
- 00853 {
- 00854 <span class="keywordtype">int</span> lspid = rsb->FlowDescriptor[i].Filter_Spec_Object.Lsp_Id;
- 00855
- 00856 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> << <span class="stringliteral">"processing lspid="</span> << lspid << endl;
- 00857
- 00858 PathStateBlock_t *psb = <a class="code" href="class_r_s_v_p.html#b45">findPSB</a>(rsb->Session_Object, rsb->FlowDescriptor[i].Filter_Spec_Object);
- 00859
- 00860 <a class="code" href="_l_i_b_table_8h.html#a3">LabelOpVector</a> outLabel;
- 00861 std::string inInterface, outInterface;
- 00862
- 00863 <span class="keywordtype">bool</span> IR = (psb->Previous_Hop_Address == <a class="code" href="class_r_s_v_p.html#r13">routerId</a>);
- 00864 <span class="comment">//bool ER = psb->OutInterface.isUnspecified();</span>
- 00865 <span class="keywordflow">if</span> (!IR)
- 00866 {
- 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>-><a class="code" href="class_t_e_d.html#z61_0">interfaceAddrByPeerAddress</a>(psb->Previous_Hop_Address);
- 00868 inInterface = <a class="code" href="class_r_s_v_p.html#r5">rt</a>-><a class="code" href="class_routing_table.html#z40_1">interfaceByAddress</a>(localInf)-><a class="code" href="class_interface_entry.html#a5">name</a>();
- 00869 }
- 00870 <span class="keywordflow">else</span>
- 00871 inInterface = <span class="stringliteral">"any"</span>;
- 00872
- 00873 <span class="comment">// outlabel and outgoing interface</span>
- 00874
- 00875 <a class="code" href="struct_label_op.html">LabelOp</a> lop;
- 00876
- 00877 <span class="keywordflow">if</span> (<a class="code" href="class_r_s_v_p.html#r4">tedmod</a>-><a class="code" href="class_t_e_d.html#z61_5">isLocalAddress</a>(psb->OutInterface))
- 00878 {
- 00879 <span class="comment">// regular next hop</span>
- 00880
- 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>;
- 00882 lop.<a class="code" href="struct_label_op.html#o0">label</a> = rsb->FlowDescriptor[i].<a class="code" href="struct_label_op.html#o0">label</a>;
- 00883 outLabel.push_back(lop);
- 00884
- 00885 outInterface = <a class="code" href="class_r_s_v_p.html#r5">rt</a>-><a class="code" href="class_routing_table.html#z40_1">interfaceByAddress</a>(psb->OutInterface)-><a class="code" href="class_interface_entry.html#a5">name</a>();
- 00886 }
- 00887 <span class="keywordflow">else</span>
- 00888 {
- 00889 <span class="comment">// egress router</span>
- 00890
- 00891 lop.<a class="code" href="struct_label_op.html#o0">label</a> = 0;
- 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>;
- 00893 outLabel.push_back(lop);
- 00894
- 00895 outInterface = <span class="stringliteral">"lo0"</span>;
- 00896
- 00897 <span class="keywordflow">if</span> (!<a class="code" href="class_r_s_v_p.html#r4">tedmod</a>-><a class="code" href="class_t_e_d.html#z61_5">isLocalAddress</a>(psb->Session_Object.DestAddress))
- 00898 {
- 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>-><a class="code" href="class_routing_table.html#z42_2">interfaceForDestAddr</a>(psb->Session_Object.DestAddress);
- 00900 <span class="keywordflow">if</span> (ie)
- 00901 outInterface = ie->name(); <span class="comment">// FIXME why use name to identify an interface?</span>
- 00902 }
- 00903 }
- 00904
- 00905 EV << "installing label for " << lspid << " outLabel=" << outLabel <<
- 00906 " outInterface=" << outInterface << endl;
- 00907
- 00908 ASSERT(rsb->inLabelVector.size() == rsb->FlowDescriptor.size());
- 00909
- 00910 <span class="keywordtype">int</span> inLabel = lt->installLibEntry(rsb->inLabelVector[i], inInterface,
- 00911 outLabel, outInterface, psb->color);
- 00912
- 00913 ASSERT(inLabel >= 0);
- 00914
- 00915 if (IR && rsb->inLabelVector[i] == -1)
- 00916 {
- 00917 <span class="comment">// path established</span>
- 00918 <a class="code" href="class_r_s_v_p.html#b35">sendPathNotify</a>(psb->handler, psb->Session_Object, psb->Sender_Template_Object, PATH_CREATED, 0.0);
- 00919 }
- 00920
- 00921 <span class="keywordflow">if</span> (rsb->inLabelVector[i] != inLabel)
- 00922 {
- 00923 <span class="comment">// remember our current label</span>
- 00924 rsb->inLabelVector[i] = inLabel;
- 00925
- 00926 <span class="comment">// bind fec</span>
- 00927 <a class="code" href="class_r_s_v_p.html#r9">rpct</a>-><a class="code" href="class_i_r_s_v_p_classifier.html#a1">bind</a>(psb->Session_Object, psb->Sender_Template_Object, inLabel);
- 00928 }
- 00929
- 00930 <span class="comment">// schedule commit of merging backups too...</span>
- 00931 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> j = 0; j < <a class="code" href="class_r_s_v_p.html#r15">RSBList</a>.size(); j++)
- 00932 {
- 00933 <span class="keywordflow">if</span> (RSBList[j].OI != lspid)
- 00934 continue;
- 00935
- 00936 scheduleCommitTimer(&RSBList[j]);
- 00937 }
- 00938 }
- 00939 }
- </pre></div>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="b19" doxytag="RSVP::createEgressRSB"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <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>
- <td class="md" valign="top">( </td>
- <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> * </td>
- <td class="mdname1" valign="top" nowrap> <em>psb</em> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [protected]</code></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- <div class="fragment"><pre class="fragment">01284 {
- 01285 ResvStateBlock_t rsbEle;
- 01286
- 01287 rsbEle.id = ++<a class="code" href="class_r_s_v_p.html#r11">maxRsbId</a>;
- 01288
- 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>);
- 01290 rsbEle.timeoutMsg->setId(rsbEle.id);
- 01291
- 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>);
- 01293 rsbEle.refreshTimerMsg->setId(rsbEle.id);
- 01294
- 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>);
- 01296 rsbEle.commitTimerMsg->setId(rsbEle.id);
- 01297
- 01298 rsbEle.Session_Object = psb->Session_Object;
- 01299 rsbEle.Next_Hop_Address = psb->Previous_Hop_Address;
- 01300
- 01301 rsbEle.OI = psb->OutInterface;
- 01302
- 01303 <a class="code" href="struct_flow_descriptor__t.html">FlowDescriptor_t</a> flow;
- 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>&)psb->Sender_Tspec_Object;
- 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>&)psb->Sender_Template_Object;
- 01306 flow.<a class="code" href="struct_flow_descriptor__t.html#o3">label</a> = -1;
- 01307
- 01308 rsbEle.FlowDescriptor.push_back(flow);
- 01309 rsbEle.inLabelVector.push_back(-1);
- 01310
- 01311 <a class="code" href="class_r_s_v_p.html#r15">RSBList</a>.push_back(rsbEle);
- 01312 ResvStateBlock_t *rsb = &(*(<a class="code" href="class_r_s_v_p.html#r15">RSBList</a>.end() - 1));
- 01313
- 01314 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> << <span class="stringliteral">"created new (egress) RSB "</span> << rsb->id << endl;
- 01315
- 01316 <span class="keywordflow">return</span> rsb;
- 01317 }
- </pre></div>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="b16" doxytag="RSVP::createIngressPSB"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <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>
- <td class="md" valign="top">( </td>
- <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> & </td>
- <td class="mdname" nowrap> <em>session</em>, </td>
- </tr>
- <tr>
- <td class="md" nowrap align="right"></td>
- <td class="md"></td>
- <td class="md" nowrap>const <a class="el" href="struct_r_s_v_p_1_1traffic__path__t.html">traffic_path_t</a> & </td>
- <td class="mdname" nowrap> <em>path</em></td>
- </tr>
- <tr>
- <td class="md"></td>
- <td class="md">) </td>
- <td class="md" colspan="2"><code> [protected]</code></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- <div class="fragment"><pre class="fragment">01236 {
- 01237 <a class="code" href="_int_serv__m_8h.html#a2">EroVector</a> ERO = path.ERO;
- 01238
- 01239 <span class="keywordflow">while</span>(ERO.size() > 0 && ERO[0].node == <a class="code" href="class_r_s_v_p.html#r13">routerId</a>)
- 01240 {
- 01241 <span class="comment">// remove ourselves from the beginning of the hop list</span>
- 01242 ERO.erase(ERO.begin());
- 01243 }
- 01244
- 01245 <a class="code" href="class_i_p_address.html">IPAddress</a> OI;
- 01246
- 01247 <span class="keywordflow">if</span> (!<a class="code" href="class_r_s_v_p.html#b44">evalNextHopInterface</a>(session.sobj.DestAddress, ERO, OI))
- 01248 return NULL;
- 01249
- 01250 if (!doCACCheck(session.sobj, path.tspec, OI))
- 01251 return NULL;
- 01252
- 01253 EV << "CACCheck passed, creating PSB" << endl;
- 01254
- 01255 PathStateBlock_t psbEle;
- 01256 psbEle.<span class="keywordtype">id</span> = ++maxPsbId;
- 01257
- 01258 psbEle.timeoutMsg = new <a class="code" href="class_psb_timeout_msg.html">PsbTimeoutMsg</a>("psb timeout");
- 01259 psbEle.timeoutMsg->setId(psbEle.<span class="keywordtype">id</span>);
- 01260
- 01261 psbEle.timerMsg = new <a class="code" href="class_psb_timer_msg.html">PsbTimerMsg</a>("psb timer");
- 01262 psbEle.timerMsg->setId(psbEle.<span class="keywordtype">id</span>);
- 01263
- 01264 psbEle.Session_Object = session.sobj;
- 01265 psbEle.Sender_Template_Object = path.sender;
- 01266 psbEle.Sender_Tspec_Object = path.tspec;
- 01267
- 01268 psbEle.Previous_Hop_Address = routerId;
- 01269
- 01270 psbEle.OutInterface = OI;
- 01271 psbEle.ERO = ERO;
- 01272 psbEle.color = path.color;
- 01273
- 01274 psbEle.handler = path.owner;
- 01275
- 01276 PSBList.push_back(psbEle);
- 01277 PathStateBlock_t *cPSB = &(*(PSBList.end() - 1));
- 01278
- 01279 return cPSB;
- 01280 }
- </pre></div>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="b57" doxytag="RSVP::createPath"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">void RSVP::createPath </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top">const <a class="el" href="struct_session_obj__t.html">SessionObj_t</a> & </td>
- <td class="mdname" nowrap> <em>session</em>, </td>
- </tr>
- <tr>
- <td class="md" nowrap align="right"></td>
- <td class="md"></td>
- <td class="md" nowrap>const <a class="el" href="struct_sender_template_obj__t.html">SenderTemplateObj_t</a> & </td>
- <td class="mdname" nowrap> <em>sender</em></td>
- </tr>
- <tr>
- <td class="md"></td>
- <td class="md">) </td>
- <td class="md" colspan="2"><code> [protected]</code></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- <div class="fragment"><pre class="fragment">00091 {
- 00092 <span class="keywordflow">if</span> (<a class="code" href="class_r_s_v_p.html#b45">findPSB</a>(session, sender))
- 00093 {
- 00094 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> << <span class="stringliteral">"path (PSB) already exists, doing nothing"</span> << endl;
- 00095 <span class="keywordflow">return</span>;
- 00096 }
- 00097
- 00098 <span class="comment">// find entry in traffic database</span>
- 00099
- 00100 std::vector<traffic_session_t>::iterator sit;
- 00101 sit = <a class="code" href="class_r_s_v_p.html#b49">findSession</a>(session);
- 00102
- 00103 <span class="keywordflow">if</span> (sit == <a class="code" href="class_r_s_v_p.html#r0">traffic</a>.end())
- 00104 {
- 00105 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> << <span class="stringliteral">"session not found in traffic database, path won't be created"</span> << endl;
- 00106 <span class="keywordflow">return</span>;
- 00107 }
- 00108
- 00109 std::vector<traffic_path_t>::iterator pit;
- 00110 pit = <a class="code" href="class_r_s_v_p.html#b50">findPath</a>(&(*sit), sender);
- 00111
- 00112 <span class="keywordflow">if</span> (pit == sit->paths.end())
- 00113 {
- 00114 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> << <span class="stringliteral">"path doesn't belong to this session according to our database, doing nothing"</span> << endl;
- 00115 <span class="keywordflow">return</span>;
- 00116 }
- 00117
- 00118 PathStateBlock_t *psb = <a class="code" href="class_r_s_v_p.html#b16">createIngressPSB</a>(*sit, *pit);
- 00119 <span class="keywordflow">if</span> (psb)
- 00120 {
- 00121 <span class="comment">// PSB successfully created, send path message downstream</span>
- 00122 <a class="code" href="class_r_s_v_p.html#b27">scheduleRefreshTimer</a>(psb, 0.0);
- 00123 }
- 00124 <span class="keywordflow">else</span>
- 00125 {
- 00126 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> << <span class="stringliteral">"ingress PSB couln't be created"</span> << endl;
- 00127
- 00128 <span class="comment">// inform the owner of this path</span>
- 00129 <a class="code" href="class_r_s_v_p.html#b35">sendPathNotify</a>(pit->owner, sit->sobj, pit->sender, PATH_UNFEASIBLE, 0.0);
- 00130
- 00131 <span class="comment">// remove non-permanent path</span>
- 00132 <span class="keywordflow">if</span> (!pit->permanent)
- 00133 {
- 00134 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> << <span class="stringliteral">"removing path from traffic database"</span> << endl;
- 00135
- 00136 sit->paths.erase(pit--);
- 00137 }
- 00138 <span class="keywordflow">else</span>
- 00139 {
- 00140 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> << <span class="stringliteral">"path is permanent, we will try again later"</span> << endl;
- 00141
- 00142 <a class="code" href="class_r_s_v_p.html#b35">sendPathNotify</a>(<span class="keywordtype">id</span>(), sit->sobj, pit->sender, PATH_RETRY, retryInterval);
- 00143 }
- 00144 }
- 00145 }
- </pre></div>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="b15" doxytag="RSVP::createPSB"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <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>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top"><a class="el" href="class_r_s_v_p_path_msg.html">RSVPPathMsg</a> * </td>
- <td class="mdname1" valign="top" nowrap> <em>msg</em> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [protected]</code></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- <div class="fragment"><pre class="fragment">01190 {
- 01191 <span class="keyword">const</span> <a class="code" href="_int_serv__m_8h.html#a2">EroVector</a>& ERO = msg-><a class="code" href="class_r_s_v_p_path_msg___base.html#a13">getERO</a>();
- 01192 <a class="code" href="class_i_p_address.html">IPAddress</a> destAddr = msg-><a class="code" href="class_r_s_v_p_packet.html#a4">getDestAddress</a>();
- 01193
- 01194 <span class="comment">//</span>
- 01195
- 01196 <a class="code" href="class_i_p_address.html">IPAddress</a> OI;
- 01197
- 01198 <span class="keywordflow">if</span> (!<a class="code" href="class_r_s_v_p.html#b44">evalNextHopInterface</a>(destAddr, ERO, OI))
- 01199 return NULL;
- 01200
- 01201 if (tedmod->isLocalAddress(OI) && !doCACCheck(msg->getSession(), msg->getSenderTspec(), OI))
- 01202 return NULL; <span class="comment">// not enough resources</span>
- 01203
- 01204 PathStateBlock_t psbEle;
- 01205
- 01206 psbEle.<span class="keywordtype">id</span> = ++maxPsbId;
- 01207
- 01208 psbEle.timeoutMsg = new <a class="code" href="class_psb_timeout_msg.html">PsbTimeoutMsg</a>("psb timeout");
- 01209 psbEle.timeoutMsg->setId(psbEle.<span class="keywordtype">id</span>);
- 01210
- 01211 psbEle.timerMsg = new <a class="code" href="class_psb_timer_msg.html">PsbTimerMsg</a>("psb timer");
- 01212 psbEle.timerMsg->setId(psbEle.<span class="keywordtype">id</span>);
- 01213
- 01214 psbEle.Session_Object = msg->getSession();
- 01215 psbEle.Sender_Template_Object = msg->getSenderTemplate();
- 01216 psbEle.Sender_Tspec_Object = msg->getSenderTspec();
- 01217
- 01218 psbEle.Previous_Hop_Address = msg->getNHOP();
- 01219 <span class="comment">//psbEle.LIH = msg->getLIH();</span>
- 01220
- 01221 psbEle.OutInterface = OI;
- 01222 psbEle.ERO = ERO;
- 01223
- 01224 psbEle.color = msg->getColor();
- 01225 psbEle.handler = -1;
- 01226
- 01227 PSBList.push_back(psbEle);
- 01228 PathStateBlock_t *cPSB = &(*(PSBList.end() - 1));
- 01229
- 01230 EV << "created new PSB " << cPSB-><span class="keywordtype">id</span> << endl;
- 01231
- 01232 return cPSB;
- 01233 }
- </pre></div>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="b18" doxytag="RSVP::createRSB"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <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>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top"><a class="el" href="class_r_s_v_p_resv_msg.html">RSVPResvMsg</a> * </td>
- <td class="mdname1" valign="top" nowrap> <em>msg</em> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [protected]</code></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- <div class="fragment"><pre class="fragment">00942 {
- 00943 ResvStateBlock_t rsbEle;
- 00944
- 00945 rsbEle.id = ++<a class="code" href="class_r_s_v_p.html#r11">maxRsbId</a>;
- 00946
- 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>);
- 00948 rsbEle.timeoutMsg->setId(rsbEle.id);
- 00949
- 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>);
- 00951 rsbEle.refreshTimerMsg->setId(rsbEle.id);
- 00952
- 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>);
- 00954 rsbEle.commitTimerMsg->setId(rsbEle.id);
- 00955
- 00956 rsbEle.Session_Object = msg-><a class="code" href="class_r_s_v_p_packet___base.html#a4">getSession</a>();
- 00957 rsbEle.Next_Hop_Address = msg-><a class="code" href="class_r_s_v_p_resv_msg.html#a4">getNHOP</a>();
- 00958 rsbEle.OI = msg-><a class="code" href="class_r_s_v_p_resv_msg.html#a5">getLIH</a>();
- 00959
- 00960 ASSERT(rsbEle.inLabelVector.size() == rsbEle.FlowDescriptor.size());
- 00961
- 00962 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < msg->getFlowDescriptor().size(); i++)
- 00963 {
- 00964 <a class="code" href="struct_flow_descriptor__t.html">FlowDescriptor_t</a> flow = msg-><a class="code" href="class_r_s_v_p_resv_msg___base.html#a7">getFlowDescriptor</a>()[i];
- 00965 rsbEle.FlowDescriptor.push_back(flow);
- 00966 rsbEle.inLabelVector.push_back(-1);
- 00967 }
- 00968
- 00969 <a class="code" href="class_r_s_v_p.html#r15">RSBList</a>.push_back(rsbEle);
- 00970 ResvStateBlock_t *rsb = &(*(<a class="code" href="class_r_s_v_p.html#r15">RSBList</a>.end() - 1));
- 00971
- 00972 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> << <span class="stringliteral">"created new RSB "</span> << rsb->id << endl;
- 00973
- 00974 <span class="keywordflow">return</span> rsb;
- 00975 }
- </pre></div>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="b60" doxytag="RSVP::delSession"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">void RSVP::delSession </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top">const cXMLElement & </td>
- <td class="mdname1" valign="top" nowrap> <em>node</em> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [protected]</code></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- <div class="fragment"><pre class="fragment">01862 {
- 01863 Enter_Method_Silent();
- 01864
- 01865 <a class="code" href="_x_m_l_utils_8cc.html#a3">checkTags</a>(&node, <span class="stringliteral">"tunnel_id extended_tunnel_id endpoint paths"</span>);
- 01866
- 01867 <a class="code" href="struct_session_obj__t.html">SessionObj_t</a> sobj;
- 01868
- 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>(&node, <span class="stringliteral">"tunnel_id"</span>);
- 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>(&node, <span class="stringliteral">"extended_tunnel_id"</span>, routerId).<a class="code" href="class_i_p_address.html#a5">getInt</a>();
- 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>(&node, <span class="stringliteral">"endpoint"</span>);
- 01872
- 01873 std::vector<traffic_session_t>::iterator sit = <a class="code" href="class_r_s_v_p.html#b49">findSession</a>(sobj);
- 01874 ASSERT(sit != <a class="code" href="class_r_s_v_p.html#r0">traffic</a>.end());
- 01875 traffic_session_t *session = &(*sit);
- 01876
- 01877 <span class="keyword">const</span> cXMLElement *paths = <a class="code" href="_x_m_l_utils_8cc.html#a1">getUniqueChildIfExists</a>(&node, <span class="stringliteral">"paths"</span>);
- 01878 cXMLElementList pathList;
- 01879 <span class="keywordflow">if</span> (paths)
- 01880 {
- 01881 <span class="comment">// only specified paths will be removed, session remains</span>
- 01882
- 01883 <a class="code" href="_x_m_l_utils_8cc.html#a3">checkTags</a>(paths, <span class="stringliteral">"path"</span>);
- 01884 pathList = paths->getChildrenByTagName(<span class="stringliteral">"path"</span>);
- 01885 }
- 01886
- 01887 std::vector<traffic_path_t>::iterator it;
- 01888 <span class="keywordflow">for</span> (it = session->paths.begin(); it != session->paths.end(); it++)
- 01889 {
- 01890 <span class="keywordtype">bool</span> remove;
- 01891
- 01892 <span class="keywordflow">if</span> (paths)
- 01893 {
- 01894 remove = <span class="keyword">false</span>;
- 01895
- 01896 <span class="keywordflow">for</span> (cXMLElementList::iterator p=pathList.begin(); p != pathList.end(); p++)
- 01897 {
- 01898 <span class="keywordflow">if</span> (it->sender.Lsp_Id != <a class="code" href="_x_m_l_utils_8cc.html#a8">getParameterIntValue</a>(*p, <span class="stringliteral">"lspid"</span>))
- 01899 continue;
- 01900
- 01901 <span class="comment">// remove path from session</span>
- 01902
- 01903 remove = true;
- 01904 break;
- 01905 }
- 01906 }
- 01907 else
- 01908 {
- 01909 <span class="comment">// remove all paths</span>
- 01910
- 01911 remove = <span class="keyword">true</span>;
- 01912 }
- 01913
- 01914 <span class="keywordflow">if</span> (remove)
- 01915 {
- 01916 PathStateBlock_t *psb = <a class="code" href="class_r_s_v_p.html#b45">findPSB</a>(session->sobj, it->sender);
- 01917 <span class="keywordflow">if</span> (psb)
- 01918 {
- 01919 ASSERT(psb->ERO.size() > 0);
- 01920
- 01921 <a class="code" href="class_r_s_v_p.html#b34">sendPathTearMessage</a>(psb->ERO[0].node, psb->Session_Object, psb->Sender_Template_Object,
- 01922 <a class="code" href="class_r_s_v_p.html#r4">tedmod</a>-><a class="code" href="class_t_e_d.html#z61_0">interfaceAddrByPeerAddress</a>(psb->ERO[0].node), <a class="code" href="class_r_s_v_p.html#r13">routerId</a>, <span class="keyword">true</span>);
- 01923
- 01924 <a class="code" href="class_r_s_v_p.html#b17">removePSB</a>(psb);
- 01925 }
- 01926
- 01927 session->paths.erase(it--);
- 01928 }
- 01929 }
- 01930
- 01931 <span class="keywordflow">if</span> (!paths)
- 01932 {
- 01933 <a class="code" href="class_r_s_v_p.html#r0">traffic</a>.erase(sit);
- 01934 }
- 01935 }
- </pre></div>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="b41" doxytag="RSVP::doCACCheck"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">bool RSVP::doCACCheck </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top">const <a class="el" href="struct_session_obj__t.html">SessionObj_t</a> & </td>
- <td class="mdname" nowrap> <em>session</em>, </td>
- </tr>
- <tr>
- <td class="md" nowrap align="right"></td>
- <td class="md"></td>
- <td class="md" nowrap>const <a class="el" href="struct_sender_tspec_obj__t.html">SenderTspecObj_t</a> & </td>
- <td class="mdname" nowrap> <em>tspec</em>, </td>
- </tr>
- <tr>
- <td class="md" nowrap align="right"></td>
- <td class="md"></td>
- <td class="md" nowrap><a class="el" href="class_i_p_address.html">IPAddress</a> </td>
- <td class="mdname" nowrap> <em>OI</em></td>
- </tr>
- <tr>
- <td class="md"></td>
- <td class="md">) </td>
- <td class="md" colspan="2"><code> [protected]</code></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- <div class="fragment"><pre class="fragment">00535 {
- 00536 ASSERT(<a class="code" href="class_r_s_v_p.html#r4">tedmod</a>-><a class="code" href="class_t_e_d.html#z61_5">isLocalAddress</a>(OI));
- 00537
- 00538 <span class="keywordtype">int</span> k = <a class="code" href="class_r_s_v_p.html#r4">tedmod</a>-><a class="code" href="class_t_e_d.html#z61_6">linkIndex</a>(OI);
- 00539
- 00540 <span class="keywordtype">double</span> sharedBW = 0.0;
- 00541
- 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++)
- 00543 {
- 00544 <span class="keywordflow">if</span> (it->Session_Object != session)
- 00545 continue;
- 00546
- 00547 if (it->Flowspec_Object.req_bandwidth <= sharedBW)
- 00548 continue;
- 00549
- 00550 sharedBW = it->Flowspec_Object.req_bandwidth;
- 00551 }
- 00552
- 00553 EV << "CACCheck: link=" << OI <<
- 00554 " requested=" << tspec.req_bandwidth <<
- 00555 " shared=" << sharedBW <<
- 00556 " available (immediately)=" << tedmod->ted[k].UnResvBandwidth[7] <<
- 00557 " available (preemptible)=" << tedmod->ted[k].UnResvBandwidth[session.setupPri] << endl;
- 00558
- 00559 return (tedmod->ted[k].UnResvBandwidth[session.setupPri] + sharedBW >= tspec.req_bandwidth);
- 00560 }
- </pre></div>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="b44" doxytag="RSVP::evalNextHopInterface"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">bool RSVP::evalNextHopInterface </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top"><a class="el" href="class_i_p_address.html">IPAddress</a> </td>
- <td class="mdname" nowrap> <em>destAddr</em>, </td>
- </tr>
- <tr>
- <td class="md" nowrap align="right"></td>
- <td class="md"></td>
- <td class="md" nowrap>const <a class="el" href="_int_serv__m_8h.html#a2">EroVector</a> & </td>
- <td class="mdname" nowrap> <em>ERO</em>, </td>
- </tr>
- <tr>
- <td class="md" nowrap align="right"></td>
- <td class="md"></td>
- <td class="md" nowrap><a class="el" href="class_i_p_address.html">IPAddress</a> & </td>
- <td class="mdname" nowrap> <em>OI</em></td>
- </tr>
- <tr>
- <td class="md"></td>
- <td class="md">) </td>
- <td class="md" colspan="2"><code> [protected]</code></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- <div class="fragment"><pre class="fragment">01114 {
- 01115 <span class="keywordflow">if</span> (ERO.size() > 0)
- 01116 {
- 01117 <span class="comment">// explicit routing</span>
- 01118
- 01119 <span class="keywordflow">if</span> (ERO[0].L)
- 01120 {
- 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>-><a class="code" href="class_routing_table.html#z42_2">interfaceForDestAddr</a>(ERO[0].node);
- 01122
- 01123 <span class="keywordflow">if</span> (!ie)
- 01124 {
- 01125 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> << <span class="stringliteral">"next (loose) hop address "</span> << ERO[0].node << <span class="stringliteral">" is currently unroutable"</span> << endl;
- 01126 <span class="keywordflow">return</span> <span class="keyword">false</span>;
- 01127 }
- 01128
- 01129 OI = ie-><a class="code" href="class_interface_entry.html#a33">ipv4</a>()-><a class="code" href="class_i_pv4_interface_data.html#a4">inetAddress</a>();
- 01130
- 01131 }
- 01132 <span class="keywordflow">else</span>
- 01133 {
- 01134 OI = <a class="code" href="class_r_s_v_p.html#r4">tedmod</a>-><a class="code" href="class_t_e_d.html#z61_0">interfaceAddrByPeerAddress</a>(ERO[0].node);
- 01135 }
- 01136
- 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>-><a class="code" href="class_t_e_d.html#z61_2">peerByLocalAddress</a>(OI);
- 01138 HelloState_t *h = <a class="code" href="class_r_s_v_p.html#b51">findHello</a>(peer);
- 01139 <span class="keywordflow">if</span> (!h)
- 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());
- 01141
- 01142 <span class="comment">// ok, only if next hop is up and running</span>
- 01143
- 01144 return h->ok;
- 01145 }
- 01146 else
- 01147 {
- 01148 <span class="comment">// hop-by-hop routing</span>
- 01149
- 01150 <span class="keywordflow">if</span> (!<a class="code" href="class_r_s_v_p.html#r4">tedmod</a>-><a class="code" href="class_t_e_d.html#z61_5">isLocalAddress</a>(destAddr))
- 01151 {
- 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>-><a class="code" href="class_routing_table.html#z42_2">interfaceForDestAddr</a>(destAddr);
- 01153
- 01154 <span class="keywordflow">if</span> (!ie)
- 01155 {
- 01156 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> << <span class="stringliteral">"destination address "</span> << destAddr << <span class="stringliteral">" is currently unroutable"</span> << endl;
- 01157 <span class="keywordflow">return</span> <span class="keyword">false</span>;
- 01158 }
- 01159
- 01160 OI = ie-><a class="code" href="class_interface_entry.html#a33">ipv4</a>()-><a class="code" href="class_i_pv4_interface_data.html#a4">inetAddress</a>();
- 01161
- 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>-><a class="code" href="class_t_e_d.html#z61_2">peerByLocalAddress</a>(OI));
- 01163 <span class="keywordflow">if</span> (!h)
- 01164 {
- 01165 <span class="comment">// outgoing interface is not LSR, we are egress router</span>
- 01166
- 01167 OI = <a class="code" href="class_i_p_address.html">IPAddress</a>();
- 01168
- 01169 <span class="keywordflow">return</span> <span class="keyword">true</span>;
- 01170 }
- 01171 <span class="keywordflow">else</span>
- 01172 {
- 01173 <span class="comment">// outgoing interface is LSR</span>
- 01174
- 01175 ASSERT(h->ok); <span class="comment">// rt->interfaceForDestAddr() wouldn't choose this entry</span>
- 01176
- 01177 <span class="keywordflow">return</span> h->ok;
- 01178 }
- 01179 }
- 01180 <span class="keywordflow">else</span>
- 01181 {
- 01182 <span class="comment">// destAddress is ours, we're egress</span>
- 01183
- 01184 <span class="keywordflow">return</span> <span class="keyword">true</span>;
- 01185 }
- 01186 }
- 01187 }
- </pre></div>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="b51" doxytag="RSVP::findHello"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <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>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top"><a class="el" href="class_i_p_address.html">IPAddress</a> </td>
- <td class="mdname1" valign="top" nowrap> <em>peer</em> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [protected]</code></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- <div class="fragment"><pre class="fragment">02136 {
- 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++)
- 02138 {
- 02139 <span class="keywordflow">if</span> (it->peer != peer)
- 02140 continue;
- 02141
- 02142 return &(*it);
- 02143 }
- 02144 return NULL;
- 02145 }
- </pre></div>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="b50" doxytag="RSVP::findPath"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">std::vector< <a class="el" href="struct_r_s_v_p_1_1traffic__path__t.html">RSVP::traffic_path_t</a> >::iterator RSVP::findPath </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top"><a class="el" href="struct_r_s_v_p_1_1traffic__session__t.html">traffic_session_t</a> * </td>
- <td class="mdname" nowrap> <em>session</em>, </td>
- </tr>
- <tr>
- <td class="md" nowrap align="right"></td>
- <td class="md"></td>
- <td class="md" nowrap>const <a class="el" href="struct_sender_template_obj__t.html">SenderTemplateObj_t</a> & </td>
- <td class="mdname" nowrap> <em>sender</em></td>
- </tr>
- <tr>
- <td class="md"></td>
- <td class="md">) </td>
- <td class="md" colspan="2"><code> [protected]</code></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- <div class="fragment"><pre class="fragment">00311 {
- 00312 std::vector<traffic_path_t>::iterator it;
- 00313 <span class="keywordflow">for</span> (it = session->paths.begin(); it != session->paths.end(); it++)
- 00314 {
- 00315 <span class="keywordflow">if</span> (it->sender != sender)
- 00316 continue;
- 00317
- 00318 break;
- 00319 }
- 00320 return it;
- 00321 }
- </pre></div>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="b45" doxytag="RSVP::findPSB"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <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>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top">const <a class="el" href="struct_session_obj__t.html">SessionObj_t</a> & </td>
- <td class="mdname" nowrap> <em>session</em>, </td>
- </tr>
- <tr>
- <td class="md" nowrap align="right"></td>
- <td class="md"></td>
- <td class="md" nowrap>const <a class="el" href="struct_sender_template_obj__t.html">SenderTemplateObj_t</a> & </td>
- <td class="mdname" nowrap> <em>sender</em></td>
- </tr>
- <tr>
- <td class="md"></td>
- <td class="md">) </td>
- <td class="md" colspan="2"><code> [protected]</code></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- <div class="fragment"><pre class="fragment">02092 {
- 02093 PSBVector::iterator it;
- 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++)
- 02095 {
- 02096 <span class="keywordflow">if</span> (it->Session_Object != session)
- 02097 continue;
- 02098
- 02099 if (it->Sender_Template_Object != sender)
- 02100 continue;
- 02101
- 02102 return &(*it);
- 02103 }
- 02104
- 02105 return NULL;
- 02106 }
- </pre></div>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="b47" doxytag="RSVP::findPsbById"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <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>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top">int </td>
- <td class="mdname1" valign="top" nowrap> <em>id</em> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [protected]</code></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- <div class="fragment"><pre class="fragment">02109 {
- 02110 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < <a class="code" href="class_r_s_v_p.html#r14">PSBList</a>.size(); i++)
- 02111 {
- 02112 <span class="keywordflow">if</span> (PSBList[i].<span class="keywordtype">id</span> != <span class="keywordtype">id</span>)
- 02113 continue;
- 02114
- 02115 return &PSBList[i];
- 02116 }
- 02117 ASSERT(false);
- 02118 return NULL; <span class="comment">// prevent warning</span>
- 02119 }
- </pre></div>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="b46" doxytag="RSVP::findRSB"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <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>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top">const <a class="el" href="struct_session_obj__t.html">SessionObj_t</a> & </td>
- <td class="mdname" nowrap> <em>session</em>, </td>
- </tr>
- <tr>
- <td class="md" nowrap align="right"></td>
- <td class="md"></td>
- <td class="md" nowrap>const <a class="el" href="struct_sender_template_obj__t.html">SenderTemplateObj_t</a> & </td>
- <td class="mdname" nowrap> <em>sender</em>, </td>
- </tr>
- <tr>
- <td class="md" nowrap align="right"></td>
- <td class="md"></td>
- <td class="md" nowrap>unsigned int & </td>
- <td class="mdname" nowrap> <em>index</em></td>
- </tr>
- <tr>
- <td class="md"></td>
- <td class="md">) </td>
- <td class="md" colspan="2"><code> [protected]</code></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- <div class="fragment"><pre class="fragment">02065 {
- 02066 RSBVector::iterator it;
- 02067
- 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++)
- 02069 {
- 02070 <span class="keywordflow">if</span> (it->Session_Object != session)
- 02071 continue;
- 02072
- 02073 FlowDescriptorVector::iterator fit;
- 02074 index = 0;
- 02075 for (fit = it->FlowDescriptor.begin(); fit != it->FlowDescriptor.end(); fit++)
- 02076 {
- 02077 <span class="keywordflow">if</span> ((<a class="code" href="struct_sender_template_obj__t.html">SenderTemplateObj_t</a>&)fit->Filter_Spec_Object != sender)
- 02078 {
- 02079 ++index;
- 02080 <span class="keywordflow">continue</span>;
- 02081 }
- 02082
- 02083 <span class="keywordflow">return</span> &(*it);
- 02084 }
- 02085
- 02086 <span class="comment">// don't break here, may be in different (if outInterface is different)</span>
- 02087 }
- 02088 <span class="keywordflow">return</span> NULL;
- 02089 }
- </pre></div>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="b48" doxytag="RSVP::findRsbById"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <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>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top">int </td>
- <td class="mdname1" valign="top" nowrap> <em>id</em> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [protected]</code></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- <div class="fragment"><pre class="fragment">02123 {
- 02124 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < <a class="code" href="class_r_s_v_p.html#r15">RSBList</a>.size(); i++)
- 02125 {
- 02126 <span class="keywordflow">if</span> (RSBList[i].<span class="keywordtype">id</span> != <span class="keywordtype">id</span>)
- 02127 continue;
- 02128
- 02129 return &RSBList[i];
- 02130 }
- 02131 ASSERT(false);
- 02132 return NULL; <span class="comment">// prevent warning</span>
- 02133 }
- </pre></div>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="b49" doxytag="RSVP::findSession"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">std::vector< <a class="el" href="struct_r_s_v_p_1_1traffic__session__t.html">RSVP::traffic_session_t</a> >::iterator RSVP::findSession </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top">const <a class="el" href="struct_session_obj__t.html">SessionObj_t</a> & </td>
- <td class="mdname1" valign="top" nowrap> <em>session</em> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [protected]</code></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- <div class="fragment"><pre class="fragment">01841 {
- 01842 std::vector<traffic_session_t>::iterator it;
- 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++)
- 01844 {
- 01845 <span class="keywordflow">if</span> (it->sobj != session)
- 01846 continue;
- 01847
- 01848 break;
- 01849 }
- 01850
- 01851 return it;
- 01852 }
- </pre></div>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="d0" doxytag="RSVP::getInLabel"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">int RSVP::getInLabel </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top">const <a class="el" href="struct_session_obj__t.html">SessionObj_t</a> & </td>
- <td class="mdname" nowrap> <em>session</em>, </td>
- </tr>
- <tr>
- <td class="md" nowrap align="right"></td>
- <td class="md"></td>
- <td class="md" nowrap>const <a class="el" href="struct_sender_template_obj__t.html">SenderTemplateObj_t</a> & </td>
- <td class="mdname" nowrap> <em>sender</em></td>
- </tr>
- <tr>
- <td class="md"></td>
- <td class="md">) </td>
- <td class="md" colspan="2"><code> [private]</code></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- <div class="fragment"><pre class="fragment">00081 {
- 00082 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index;
- 00083 ResvStateBlock_t *rsb = <a class="code" href="class_r_s_v_p.html#b46">findRSB</a>(session, sender, index);
- 00084 <span class="keywordflow">if</span> (!rsb)
- 00085 return -1;
- 00086
- 00087 return rsb->inLabelVector[index];
- 00088 }
- </pre></div>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="b63" doxytag="RSVP::handleMessage"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">void RSVP::handleMessage </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top">cMessage * </td>
- <td class="mdname1" valign="top" nowrap> <em>msg</em> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [protected, virtual]</code></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- <div class="fragment"><pre class="fragment">01320 {
- 01321 <a class="code" href="class_signalling_msg.html">SignallingMsg</a> *sMsg = dynamic_cast<SignallingMsg*>(msg);
- 01322 <a class="code" href="class_r_s_v_p_message.html">RSVPMessage</a> *rMsg = dynamic_cast<RSVPMessage*>(msg);
- 01323
- 01324 <span class="keywordflow">if</span> (sMsg)
- 01325 {
- 01326 <a class="code" href="class_r_s_v_p.html#b0">processSignallingMessage</a>(sMsg);
- 01327 <span class="keywordflow">return</span>;
- 01328 }
- 01329 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (rMsg)
- 01330 {
- 01331 <a class="code" href="class_r_s_v_p.html#b9">processRSVPMessage</a>(rMsg);
- 01332 <span class="keywordflow">return</span>;
- 01333 }
- 01334 <span class="keywordflow">else</span>
- 01335 ASSERT(<span class="keyword">false</span>);
- 01336 }
- </pre></div>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="b62" doxytag="RSVP::initialize"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">void RSVP::initialize </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top">int </td>
- <td class="mdname1" valign="top" nowrap> <em>stage</em> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [protected, virtual]</code></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- <div class="fragment"><pre class="fragment">00051 {
- 00052 <span class="comment">// we have to wait for stage 2 until interfaces get registered (stage 0)</span>
- 00053 <span class="comment">// and get their auto-assigned IP addresses (stage 2); routerId gets</span>
- 00054 <span class="comment">// assigned in state 3</span>
- 00055 <span class="keywordflow">if</span> (stage==4)
- 00056 {
- 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();
- 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();
- 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();
- 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>-><a class="code" href="class_routing_table.html#a4">routerId</a>();
- 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();
- 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();
- 00063
- 00064 <a class="code" href="class_r_s_v_p.html#r9">rpct</a> = check_and_cast<IRSVPClassifier*>(parentModule()->submodule(<span class="stringliteral">"classifier"</span>));
- 00065
- 00066 <a class="code" href="class_r_s_v_p.html#r10">maxPsbId</a> = 0;
- 00067 <a class="code" href="class_r_s_v_p.html#r11">maxRsbId</a> = 0;
- 00068 <a class="code" href="class_r_s_v_p.html#r12">maxSrcInstance</a> = 0;
- 00069
- 00070 <a class="code" href="class_r_s_v_p.html#r3">retryInterval</a> = 1.0;
- 00071
- 00072 <span class="comment">// setup hello</span>
- 00073 <a class="code" href="class_r_s_v_p.html#b36">setupHello</a>();
- 00074
- 00075 <span class="comment">// process traffic configuration</span>
- 00076 <a class="code" href="class_r_s_v_p.html#b54">readTrafficFromXML</a>(par(<span class="stringliteral">"traffic"</span>).xmlValue());
- 00077 }
- 00078 }
- </pre></div>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="b61" doxytag="RSVP::numInitStages"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">virtual int RSVP::numInitStages </td>
- <td class="md" valign="top">( </td>
- <td class="mdname1" valign="top" nowrap> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap> const<code> [inline, protected, virtual]</code></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- <div class="fragment"><pre class="fragment">00284 {<span class="keywordflow">return</span> 5;}
- </pre></div>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="b58" doxytag="RSVP::pathProblem"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">void RSVP::pathProblem </td>
- <td class="md" valign="top">( </td>
- <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> * </td>
- <td class="mdname1" valign="top" nowrap> <em>psb</em> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [protected]</code></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- <div class="fragment"><pre class="fragment">01767 {
- 01768 ASSERT(psb);
- 01769 ASSERT(!psb->OutInterface.isUnspecified());
- 01770
- 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>-><a class="code" href="class_t_e_d.html#z61_2">peerByLocalAddress</a>(psb->OutInterface);
- 01772
- 01773 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> << <span class="stringliteral">"sending PathTear to "</span> << nextHop << endl;
- 01774
- 01775 <a class="code" href="class_r_s_v_p.html#b34">sendPathTearMessage</a>(nextHop, psb->Session_Object, psb->Sender_Template_Object,
- 01776 <a class="code" href="class_r_s_v_p.html#r4">tedmod</a>-><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>);
- 01777
- 01778 <span class="comment">// schedule re-creation if path is permanent</span>
- 01779
- 01780 std::vector<traffic_session_t>::iterator sit = <a class="code" href="class_r_s_v_p.html#b49">findSession</a>(psb->Session_Object);
- 01781 ASSERT(sit != <a class="code" href="class_r_s_v_p.html#r0">traffic</a>.end());
- 01782 traffic_session_t *s = &(*sit);
- 01783
- 01784 std::vector<traffic_path_t>::iterator pit = <a class="code" href="class_r_s_v_p.html#b50">findPath</a>(s, psb->Sender_Template_Object);
- 01785 ASSERT(pit != s->paths.end());
- 01786 traffic_path_t *p = &(*pit);
- 01787
- 01788 <span class="keywordflow">if</span> (p->permanent)
- 01789 {
- 01790 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> << <span class="stringliteral">"this path is permanent, we will try to re-create it later"</span> << endl;
- 01791
- 01792 <a class="code" href="class_r_s_v_p.html#b35">sendPathNotify</a>(<span class="keywordtype">id</span>(), psb->Session_Object, psb->Sender_Template_Object, PATH_RETRY, retryInterval);
- 01793
- 01794 }
- 01795 <span class="keywordflow">else</span>
- 01796 {
- 01797 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> << <span class="stringliteral">"removing path from traffic database"</span> << endl;
- 01798
- 01799 sit->paths.erase(pit);
- 01800 }
- 01801
- 01802 <span class="comment">// remove path</span>
- 01803
- 01804 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> << <span class="stringliteral">"removing PSB"</span> << endl;
- 01805
- 01806 <a class="code" href="class_r_s_v_p.html#b17">removePSB</a>(psb);
- 01807 }
- </pre></div>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="b40" doxytag="RSVP::preempt"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">void RSVP::preempt </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top"><a class="el" href="class_i_p_address.html">IPAddress</a> </td>
- <td class="mdname" nowrap> <em>OI</em>, </td>
- </tr>
- <tr>
- <td class="md" nowrap align="right"></td>
- <td class="md"></td>
- <td class="md" nowrap>int </td>
- <td class="mdname" nowrap> <em>priority</em>, </td>
- </tr>
- <tr>
- <td class="md" nowrap align="right"></td>
- <td class="md"></td>
- <td class="md" nowrap>double </td>
- <td class="mdname" nowrap> <em>bandwidth</em></td>
- </tr>
- <tr>
- <td class="md"></td>
- <td class="md">) </td>
- <td class="md" colspan="2"><code> [protected]</code></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- <div class="fragment"><pre class="fragment">00687 {
- 00688 ASSERT(<a class="code" href="class_r_s_v_p.html#r4">tedmod</a>-><a class="code" href="class_t_e_d.html#z61_5">isLocalAddress</a>(OI));
- 00689
- 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>-><a class="code" href="class_t_e_d.html#z61_6">linkIndex</a>(OI);
- 00691
- 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++)
- 00693 {
- 00694 <span class="keywordflow">if</span> (it->OI != OI)
- 00695 continue;
- 00696
- 00697 if (it->Session_Object.holdingPri != priority)
- 00698 continue;
- 00699
- 00700 if (it->Flowspec_Object.req_bandwidth == 0.0)
- 00701 continue;
- 00702
- 00703 <span class="comment">// preempt RSB</span>
- 00704
- 00705 for (<span class="keywordtype">int</span> i = priority; i < 8; i++)
- 00706 tedmod->ted[index].UnResvBandwidth[i] += it->Flowspec_Object.req_bandwidth;
- 00707
- 00708 bandwidth -= it->Flowspec_Object.req_bandwidth;
- 00709 it->Flowspec_Object.req_bandwidth = 0.0;
- 00710
- 00711 scheduleCommitTimer(&(*it));
- 00712
- 00713 <span class="comment">//</span>
- 00714
- 00715 if (bandwidth <= 0.0)
- 00716 break;
- 00717 }
- 00718 }
- </pre></div>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="b53" doxytag="RSVP::print"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">void RSVP::print </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top"><a class="el" href="class_r_s_v_p_resv_msg.html">RSVPResvMsg</a> * </td>
- <td class="mdname1" valign="top" nowrap> <em>r</em> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [protected]</code></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- <div class="fragment"><pre class="fragment">02206 {
- 02207 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> << <span class="stringliteral">"RESV_MESSAGE: "</span> << endl;
- 02208 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < r->getFlowDescriptor().size(); i++)
- 02209 {
- 02210 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> << <span class="stringliteral">" lspid "</span> << r-><a class="code" href="class_r_s_v_p_resv_msg___base.html#a7">getFlowDescriptor</a>()[i].Filter_Spec_Object.Lsp_Id <<
- 02211 <span class="stringliteral">" label "</span> << r-><a class="code" href="class_r_s_v_p_resv_msg___base.html#a7">getFlowDescriptor</a>()[i].label << endl;
- 02212 }
- 02213 }
- </pre></div>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="b52" doxytag="RSVP::print"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">void RSVP::print </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top"><a class="el" href="class_r_s_v_p_path_msg.html">RSVPPathMsg</a> * </td>
- <td class="mdname1" valign="top" nowrap> <em>p</em> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [protected]</code></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- <div class="fragment"><pre class="fragment">02201 {
- 02202 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> << <span class="stringliteral">"PATH_MESSAGE: lspid "</span> << p-><a class="code" href="class_r_s_v_p_path_msg.html#a5">getLspId</a>() << <span class="stringliteral">" ERO "</span> << <a class="code" href="common_8cc.html#a1">vectorToString</a>(p-><a class="code" href="class_r_s_v_p_path_msg___base.html#a13">getERO</a>()) << endl;
- 02203 }
- </pre></div>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="b64" doxytag="RSVP::processCommand"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">void RSVP::processCommand </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top">const cXMLElement & </td>
- <td class="mdname1" valign="top" nowrap> <em>node</em> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [protected, virtual]</code></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- 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>
- The command is represented by the XML element or element tree. The command name can be obtained as:<p>
- <pre>
- const char *command = node->getTagName()
- </pre><p>
- Parameters are XML attributes, e.g. a "neighbour" parameter can be retrieved as:<p>
- <pre>
- const char *attr = node->getAttribute("neighbour")
- </pre><p>
- More complex input can be passed in child elements.<p>
- <dl compact><dt><b>See also:</b></dt><dd>cXMLElement </dd></dl>
- <p>
- Implements <a class="el" href="class_i_scriptable.html#a1">IScriptable</a>.<div class="fragment"><pre class="fragment">01938 {
- 01939 <span class="keywordflow">if</span> (!strcmp(node.getTagName(), <span class="stringliteral">"add-session"</span>))
- 01940 {
- 01941 <a class="code" href="class_r_s_v_p.html#b59">addSession</a>(node);
- 01942 }
- 01943 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!strcmp(node.getTagName(), <span class="stringliteral">"del-session"</span>))
- 01944 {
- 01945 <a class="code" href="class_r_s_v_p.html#b60">delSession</a>(node);
- 01946 }
- 01947 <span class="keywordflow">else</span>
- 01948 ASSERT(<span class="keyword">false</span>);
- 01949 }
- </pre></div>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="b7" doxytag="RSVP::processHELLO_TIMEOUT"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">void RSVP::processHELLO_TIMEOUT </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top"><a class="el" href="class_hello_timeout_msg.html">HelloTimeoutMsg</a> * </td>
- <td class="mdname1" valign="top" nowrap> <em>msg</em> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [protected]</code></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- <div class="fragment"><pre class="fragment">00410 {
- 00411 <a class="code" href="class_i_p_address.html">IPAddress</a> peer = msg-><a class="code" href="class_hello_timeout_msg.html#a7">getPeer</a>();
- 00412
- 00413 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> << <span class="stringliteral">"hello timeout, considering "</span> << peer << <span class="stringliteral">" failed"</span> << endl;
- 00414
- 00415 <span class="comment">// update hello state (set to failed and turn hello off)</span>
- 00416
- 00417 HelloState_t *hello = <a class="code" href="class_r_s_v_p.html#b51">findHello</a>(peer);
- 00418 ASSERT(hello);
- 00419 hello-><a class="code" href="struct_r_s_v_p_1_1_hello_state__t.html#o7">ok</a> = <span class="keyword">false</span>;
- 00420 ASSERT(!hello->timeout->isScheduled());
- 00421 cancelEvent(hello->timer);
- 00422
- 00423 <span class="comment">// update TED and routing table</span>
- 00424
- 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>-><a class="code" href="class_t_e_d.html#z61_6">linkIndex</a>(routerId, peer);
- 00426 <a class="code" href="class_r_s_v_p.html#r4">tedmod</a>-><a class="code" href="class_t_e_d.html#o0">ted</a>[index].state = <span class="keyword">false</span>;
- 00427 <a class="code" href="class_r_s_v_p.html#b42">announceLinkChange</a>(index);
- 00428 <a class="code" href="class_r_s_v_p.html#r4">tedmod</a>-><a class="code" href="class_t_e_d.html#z61_9">rebuildRoutingTable</a>();
- 00429
- 00430 <span class="comment">// send PATH_ERROR for existing paths</span>
- 00431
- 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++)
- 00433 {
- 00434 <span class="keywordflow">if</span> (it->OutInterface != <a class="code" href="class_r_s_v_p.html#r4">tedmod</a>-><a class="code" href="class_t_e_d.html#o0">ted</a>[index].local)
- 00435 continue;
- 00436
- 00437 sendPathErrorMessage(&(*it), PATH_ERR_NEXTHOP_FAILED);
- 00438 }
- 00439 }
- </pre></div>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="b6" doxytag="RSVP::processHELLO_TIMER"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">void RSVP::processHELLO_TIMER </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top"><a class="el" href="class_hello_timer_msg.html">HelloTimerMsg</a> * </td>
- <td class="mdname1" valign="top" nowrap> <em>msg</em> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [protected]</code></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- <div class="fragment"><pre class="fragment">00442 {
- 00443 <a class="code" href="class_i_p_address.html">IPAddress</a> peer = msg-><a class="code" href="class_hello_timer_msg.html#a7">getPeer</a>();
- 00444
- 00445 HelloState_t *h = <a class="code" href="class_r_s_v_p.html#b51">findHello</a>(peer);
- 00446 ASSERT(h);
- 00447
- 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>);
- 00449
- 00450 hMsg-><a class="code" href="class_r_s_v_p_hello_msg___base.html#a9">setSrcInstance</a>(h->srcInstance);
- 00451 hMsg-><a class="code" href="class_r_s_v_p_hello_msg___base.html#a11">setDstInstance</a>(h->dstInstance);
- 00452
- 00453 hMsg-><a class="code" href="class_r_s_v_p_hello_msg___base.html#a5">setRequest</a>(h->request);
- 00454 hMsg-><a class="code" href="class_r_s_v_p_hello_msg___base.html#a7">setAck</a>(h->ack);
- 00455
- 00456 <span class="keywordtype">int</span> length = 10;
- 00457
- 00458 <span class="comment">// see comment elsewhere (in TED.cc)</span>
- 00459 length /= 10;
- 00460
- 00461 hMsg->setByteLength(length);
- 00462
- 00463 <a class="code" href="class_r_s_v_p.html#b43">sendToIP</a>(hMsg, peer);
- 00464
- 00465 h->ack = <span class="keyword">false</span>;
- 00466
- 00467 scheduleAt(simTime() + helloInterval, msg);
- 00468 }
- </pre></div>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="b10" doxytag="RSVP::processHelloMsg"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">void RSVP::processHelloMsg </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top"><a class="el" href="class_r_s_v_p_hello_msg.html">RSVPHelloMsg</a> * </td>
- <td class="mdname1" valign="top" nowrap> <em>msg</em> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [protected]</code></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- <div class="fragment"><pre class="fragment">01369 {
- 01370 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> << <span class="stringliteral">"Received RSVP_HELLO"</span> << endl;
- 01371 <span class="comment">//print(msg);</span>
- 01372
- 01373 <a class="code" href="class_i_p_control_info.html">IPControlInfo</a> *controlInfo = check_and_cast<IPControlInfo*>(msg->controlInfo());
- 01374 <a class="code" href="class_i_p_address.html">IPAddress</a> sender = controlInfo-><a class="code" href="class_i_p_control_info___base.html#a6">srcAddr</a>();
- 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>-><a class="code" href="class_t_e_d.html#z61_3">primaryAddress</a>(sender);
- 01376
- 01377 <span class="keywordtype">bool</span> request = msg-><a class="code" href="class_r_s_v_p_hello_msg___base.html#a4">getRequest</a>();
- 01378 <span class="keywordtype">bool</span> ack = msg-><a class="code" href="class_r_s_v_p_hello_msg___base.html#a6">getAck</a>();
- 01379
- 01380 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> << <span class="stringliteral">"hello sender "</span> << peer;
- 01381 <span class="keywordflow">if</span> (request) EV << " REQ";
- 01382 if (ack) EV << " ACK";
- 01383 EV << endl;
- 01384
- 01385 <span class="keywordtype">int</span> rcvSrcInstance = msg->getSrcInstance();
- 01386 <span class="keywordtype">int</span> rcvDstInstance = msg->getDstInstance();
- 01387
- 01388 delete msg;
- 01389
- 01390 HelloState_t *h = findHello(peer);
- 01391 ASSERT(h);
- 01392
- 01393 ASSERT(h->srcInstance);
- 01394 ASSERT(rcvSrcInstance);
- 01395
- 01396 <span class="keywordtype">bool</span> failure = false;
- 01397
- 01398 if (h->srcInstance != rcvDstInstance)
- 01399 {
- 01400 <span class="keywordflow">if</span> (rcvDstInstance != 0)
- 01401 {
- 01402 failure = <span class="keyword">true</span>;
- 01403 }
- 01404 <span class="keywordflow">else</span>
- 01405 {
- 01406 ASSERT(request);
- 01407 }
- 01408 }
- 01409
- 01410 <span class="keywordflow">if</span> (h->dstInstance != rcvSrcInstance)
- 01411 {
- 01412 <span class="keywordflow">if</span> (h->dstInstance != 0)
- 01413 {
- 01414 failure = <span class="keyword">true</span>;
- 01415 }
- 01416 h->dstInstance = rcvSrcInstance;
- 01417 }
- 01418
- 01419 <span class="keywordflow">if</span> (failure)
- 01420 {
- 01421 <span class="comment">// mismatch encountered</span>
- 01422 h->srcInstance = ++<a class="code" href="class_r_s_v_p.html#r12">maxSrcInstance</a>;
- 01423 }
- 01424
- 01425 <span class="keywordflow">if</span> (failure || !h->ok)
- 01426 {
- 01427 h->ok = <span class="keyword">true</span>;
- 01428
- 01429 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> << <span class="stringliteral">"local peer "</span> << peer << <span class="stringliteral">" is now considered up and running"</span> << endl;
- 01430
- 01431 <a class="code" href="class_r_s_v_p.html#b38">recoveryEvent</a>(peer);
- 01432
- 01433 <span class="comment">// if peer was considered down, we have stopped sending hellos: resume now</span>
- 01434 <span class="keywordflow">if</span> (!h->timer->isScheduled())
- 01435 scheduleAt(simTime(), h->timer);
- 01436 }
- 01437
- 01438 <span class="keywordflow">if</span> (request)
- 01439 {
- 01440 <span class="comment">// immediately respond to a request with an ack</span>
- 01441 h->ack = <span class="keyword">true</span>;
- 01442 h->request = <span class="keyword">false</span>;
- 01443
- 01444 cancelEvent(h->timer);
- 01445 scheduleAt(simTime(), h->timer);
- 01446 }
- 01447 <span class="keywordflow">else</span>
- 01448 {
- 01449 <span class="comment">// next message will be regular</span>
- 01450
- 01451 h->ack = <span class="keyword">false</span>;
- 01452 h->request = <span class="keyword">false</span>;
- 01453
- 01454 ASSERT(h->timer->isScheduled());
- 01455 }
- 01456
- 01457 cancelEvent(h->timeout);
- 01458 scheduleAt(simTime() + helloTimeout, h->timeout);
- 01459 }
- </pre></div>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="b8" doxytag="RSVP::processPATH_NOTIFY"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">void RSVP::processPATH_NOTIFY </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top"><a class="el" href="class_path_notify_msg.html">PathNotifyMsg</a> * </td>
- <td class="mdname1" valign="top" nowrap> <em>msg</em> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [protected]</code></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- <div class="fragment"><pre class="fragment">01810 {
- 01811 PathStateBlock_t *psb;
- 01812
- 01813 <span class="keywordflow">switch</span>(msg-><a class="code" href="class_path_notify_msg.html#a13">getStatus</a>())
- 01814 {
- 01815 <span class="keywordflow">case</span> <a class="code" href="_signalling_msg__m_8h.html#a13">PATH_RETRY</a>:
- 01816 <a class="code" href="class_r_s_v_p.html#b57">createPath</a>(msg-><a class="code" href="class_path_notify_msg.html#a7">getSession</a>(), msg-><a class="code" href="class_path_notify_msg.html#a10">getSender</a>());
- 01817 <span class="keywordflow">break</span>;
- 01818
- 01819 <span class="keywordflow">case</span> <a class="code" href="_signalling_msg__m_8h.html#a10">PATH_UNFEASIBLE</a>:
- 01820 <span class="keywordflow">case</span> <a class="code" href="_signalling_msg__m_8h.html#a12">PATH_PREEMPTED</a>:
- 01821 <span class="keywordflow">case</span> <a class="code" href="_signalling_msg__m_8h.html#a11">PATH_FAILED</a>:
- 01822 psb = <a class="code" href="class_r_s_v_p.html#b45">findPSB</a>(msg-><a class="code" href="class_path_notify_msg.html#a7">getSession</a>(), msg-><a class="code" href="class_path_notify_msg.html#a10">getSender</a>());
- 01823 <span class="keywordflow">if</span> (psb)
- 01824 pathProblem(psb);
- 01825 break;
- 01826
- 01827 case PATH_CREATED:
- 01828 EV << "Path successfully established" << endl;
- 01829 break;
- 01830
- 01831
- 01832 default:
- 01833 ASSERT(false);
- 01834 }
- 01835
- 01836 delete msg;
- 01837 }
- </pre></div>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="b14" doxytag="RSVP::processPathErrMsg"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">void RSVP::processPathErrMsg </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top"><a class="el" href="class_r_s_v_p_path_error.html">RSVPPathError</a> * </td>
- <td class="mdname1" valign="top" nowrap> <em>msg</em> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [protected]</code></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- <div class="fragment"><pre class="fragment">01462 {
- 01463 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> << <span class="stringliteral">"Received PATH_ERROR"</span> << endl;
- 01464 <span class="comment">//print(msg);</span>
- 01465
- 01466 <span class="comment">//int lspid = msg->getLspId();</span>
- 01467 <span class="keywordtype">int</span> errCode = msg-><a class="code" href="class_r_s_v_p_path_error___base.html#a7">getErrorCode</a>();
- 01468
- 01469 PathStateBlock_t *psb = <a class="code" href="class_r_s_v_p.html#b45">findPSB</a>(msg-><a class="code" href="class_r_s_v_p_packet___base.html#a4">getSession</a>(), msg-><a class="code" href="class_r_s_v_p_path_error.html#a7">getSenderTemplate</a>());
- 01470 <span class="keywordflow">if</span> (!psb)
- 01471 {
- 01472 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> << <span class="stringliteral">"matching PSB not found, ignoring error message"</span> << endl;
- 01473 <span class="keyword">delete</span> msg;
- 01474 <span class="keywordflow">return</span>;
- 01475 }
- 01476
- 01477 <span class="keywordflow">if</span> (psb->Previous_Hop_Address != routerId)
- 01478 {
- 01479 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> << <span class="stringliteral">"forwarding error message to PHOP ("</span> << psb->Previous_Hop_Address << <span class="stringliteral">")"</span> << endl;
- 01480
- 01481 msg->removeControlInfo();
- 01482 <a class="code" href="class_r_s_v_p.html#b43">sendToIP</a>(msg, psb->Previous_Hop_Address);
- 01483 }
- 01484 <span class="keywordflow">else</span>
- 01485 {
- 01486 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> << <span class="stringliteral">"error reached ingress router"</span> << endl;
- 01487
- 01488 <span class="keywordflow">switch</span>(errCode)
- 01489 {
- 01490 <span class="keywordflow">case</span> <a class="code" href="_r_s_v_p_8cc.html#a5">PATH_ERR_PREEMPTED</a>:
- 01491 <a class="code" href="class_r_s_v_p.html#b35">sendPathNotify</a>(psb->handler, psb->Session_Object, psb->Sender_Template_Object, PATH_PREEMPTED, 0.0);
- 01492 <span class="keywordflow">break</span>;
- 01493
- 01494 <span class="keywordflow">case</span> <a class="code" href="_r_s_v_p_8cc.html#a4">PATH_ERR_UNFEASIBLE</a>:
- 01495 <a class="code" href="class_r_s_v_p.html#b35">sendPathNotify</a>(psb->handler, psb->Session_Object, psb->Sender_Template_Object, PATH_UNFEASIBLE, 0.0);
- 01496 <span class="keywordflow">break</span>;
- 01497
- 01498 <span class="keywordflow">case</span> <a class="code" href="_r_s_v_p_8cc.html#a6">PATH_ERR_NEXTHOP_FAILED</a>:
- 01499 <a class="code" href="class_r_s_v_p.html#b35">sendPathNotify</a>(psb->handler, psb->Session_Object, psb->Sender_Template_Object, PATH_FAILED, 0.0);
- 01500 <span class="keywordflow">break</span>;
- 01501
- 01502 <span class="keywordflow">default</span>:
- 01503 ASSERT(<span class="keyword">false</span>);
- 01504 }
- 01505
- 01506 <span class="keyword">delete</span> msg;
- 01507 }
- 01508 }
- </pre></div>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="b11" doxytag="RSVP::processPathMsg"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">void RSVP::processPathMsg </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top"><a class="el" href="class_r_s_v_p_path_msg.html">RSVPPathMsg</a> * </td>
- <td class="mdname1" valign="top" nowrap> <em>msg</em> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [protected]</code></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- <div class="fragment"><pre class="fragment">01572 {
- 01573 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> << <span class="stringliteral">"Received PATH_MESSAGE"</span> << endl;
- 01574 <a class="code" href="class_r_s_v_p.html#b52">print</a>(msg);
- 01575
- 01576 <span class="comment">// process ERO *************************************************************</span>
- 01577
- 01578 <a class="code" href="_int_serv__m_8h.html#a2">EroVector</a> ERO = msg-><a class="code" href="class_r_s_v_p_path_msg___base.html#a13">getERO</a>();
- 01579
- 01580 <span class="keywordflow">while</span>(ERO.size() > 0 && ERO[0].node == <a class="code" href="class_r_s_v_p.html#r13">routerId</a>)
- 01581 {
- 01582 ERO.erase(ERO.begin());
- 01583 }
- 01584
- 01585 msg-><a class="code" href="class_r_s_v_p_path_msg___base.html#a15">setERO</a>(ERO);
- 01586
- 01587 <span class="comment">// create PSB if doesn't exist yet *****************************************</span>
- 01588
- 01589 PathStateBlock_t *psb = <a class="code" href="class_r_s_v_p.html#b45">findPSB</a>(msg-><a class="code" href="class_r_s_v_p_packet___base.html#a4">getSession</a>(), msg-><a class="code" href="class_r_s_v_p_path_msg.html#a9">getSenderTemplate</a>());
- 01590
- 01591 <span class="keywordflow">if</span> (!psb)
- 01592 {
- 01593 psb = <a class="code" href="class_r_s_v_p.html#b15">createPSB</a>(msg);
- 01594 <span class="keywordflow">if</span> (!psb)
- 01595 {
- 01596 <a class="code" href="class_r_s_v_p.html#b32">sendPathErrorMessage</a>(msg-><a class="code" href="class_r_s_v_p_packet___base.html#a4">getSession</a>(), msg-><a class="code" href="class_r_s_v_p_path_msg.html#a9">getSenderTemplate</a>(),
- 01597 msg-><a class="code" href="class_r_s_v_p_path_msg.html#a11">getSenderTspec</a>(), msg-><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>);
- 01598 <span class="keyword">delete</span> msg;
- 01599 <span class="keywordflow">return</span>;
- 01600 }
- 01601 <a class="code" href="class_r_s_v_p.html#b27">scheduleRefreshTimer</a>(psb, 0.0);
- 01602
- 01603 <span class="keywordflow">if</span> (<a class="code" href="class_r_s_v_p.html#r4">tedmod</a>-><a class="code" href="class_t_e_d.html#z61_5">isLocalAddress</a>(psb->OutInterface))
- 01604 {
- 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>-><a class="code" href="class_t_e_d.html#z61_6">linkIndex</a>(psb->OutInterface);
- 01606 <span class="keywordflow">if</span> (!<a class="code" href="class_r_s_v_p.html#r4">tedmod</a>-><a class="code" href="class_t_e_d.html#o0">ted</a>[index].state)
- 01607 {
- 01608 <a class="code" href="class_r_s_v_p.html#b32">sendPathErrorMessage</a>(psb, PATH_ERR_NEXTHOP_FAILED);
- 01609 }
- 01610 }
- 01611 }
- 01612
- 01613 <span class="comment">// schedule timer&timeout **************************************************</span>
- 01614
- 01615 <a class="code" href="class_r_s_v_p.html#b28">scheduleTimeout</a>(psb);
- 01616
- 01617 <span class="comment">// create RSB if we're egress and doesn't exist yet ************************</span>
- 01618
- 01619 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index;
- 01620 ResvStateBlock_t *rsb = <a class="code" href="class_r_s_v_p.html#b46">findRSB</a>(msg-><a class="code" href="class_r_s_v_p_packet___base.html#a4">getSession</a>(), msg-><a class="code" href="class_r_s_v_p_path_msg.html#a9">getSenderTemplate</a>(), index);
- 01621
- 01622 <span class="keywordflow">if</span> (!rsb && psb->OutInterface.isUnspecified())
- 01623 {
- 01624 ASSERT(ERO.size() == 0);
- 01625 rsb = <a class="code" href="class_r_s_v_p.html#b19">createEgressRSB</a>(psb);
- 01626 ASSERT(rsb);
- 01627 <a class="code" href="class_r_s_v_p.html#b30">scheduleCommitTimer</a>(rsb);
- 01628 }
- 01629
- 01630 <span class="keywordflow">if</span> (rsb)
- 01631 scheduleRefreshTimer(rsb, 0.0);
- 01632
- 01633 delete msg;
- 01634 }
- </pre></div>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="b13" doxytag="RSVP::processPathTearMsg"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">void RSVP::processPathTearMsg </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top"><a class="el" href="class_r_s_v_p_path_tear.html">RSVPPathTear</a> * </td>
- <td class="mdname1" valign="top" nowrap> <em>msg</em> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [protected]</code></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- <div class="fragment"><pre class="fragment">01511 {
- 01512 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> << <span class="stringliteral">"Received PATH_TEAR"</span> << endl;
- 01513 <span class="comment">//print(msg);</span>
- 01514
- 01515 <span class="keywordtype">int</span> lspid = msg-><a class="code" href="class_r_s_v_p_path_tear.html#a7">getLspId</a>();
- 01516
- 01517 PathStateBlock_t *psb = <a class="code" href="class_r_s_v_p.html#b45">findPSB</a>(msg-><a class="code" href="class_r_s_v_p_packet___base.html#a4">getSession</a>(), msg-><a class="code" href="class_r_s_v_p_path_tear___base.html#a7">getSenderTemplate</a>());
- 01518 <span class="keywordflow">if</span> (!psb)
- 01519 {
- 01520 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> << <span class="stringliteral">"received PATH_TEAR for nonexisting lspid="</span> << lspid << endl;
- 01521 <span class="keyword">delete</span> msg;
- 01522 <span class="keywordflow">return</span>;
- 01523 }
- 01524
- 01525 <span class="comment">// ignore message if backup exists and force flag is not set</span>
- 01526
- 01527 <span class="keywordtype">bool</span> modified = <span class="keyword">false</span>;
- 01528
- 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++)
- 01530 {
- 01531 <span class="keywordflow">if</span> (it->OutInterface.getInt() != lspid)
- 01532 <span class="keywordflow">continue</span>;
- 01533
- 01534 <span class="comment">// merging backup exists</span>
- 01535
- 01536 <span class="keywordflow">if</span> (!msg-><a class="code" href="class_r_s_v_p_path_tear___base.html#a10">getForce</a>())
- 01537 {
- 01538 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> << <span class="stringliteral">"merging backup tunnel exists and force flag is not set, ignoring teardown"</span> << endl;
- 01539 <span class="keyword">delete</span> msg;
- 01540 <span class="keywordflow">return</span>;
- 01541 }
- 01542
- 01543 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> << <span class="stringliteral">"merging backup must be removed too"</span> << endl;
- 01544
- 01545 <a class="code" href="class_r_s_v_p.html#b17">removePSB</a>(&(*it));
- 01546 --it;
- 01547
- 01548 modified = <span class="keyword">true</span>;
- 01549 }
- 01550
- 01551 <span class="keywordflow">if</span> (modified)
- 01552 psb = findPSB(msg->getSession(), msg->getSenderTemplate());
- 01553
- 01554 <span class="comment">// forward path teardown downstream</span>
- 01555
- 01556 if (psb->ERO.size() > 0)
- 01557 {
- 01558 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> << <span class="stringliteral">"forward teardown downstream"</span> << endl;
- 01559
- 01560 <a class="code" href="class_r_s_v_p.html#b34">sendPathTearMessage</a>(psb->ERO[0].node, psb->Session_Object, psb->Sender_Template_Object,
- 01561 <a class="code" href="class_r_s_v_p.html#r4">tedmod</a>-><a class="code" href="class_t_e_d.html#z61_0">interfaceAddrByPeerAddress</a>(psb->ERO[0].node), <a class="code" href="class_r_s_v_p.html#r13">routerId</a>, msg-><a class="code" href="class_r_s_v_p_path_tear___base.html#a10">getForce</a>());
- 01562 }
- 01563
- 01564 <span class="comment">// remove path state block</span>
- 01565
- 01566 <a class="code" href="class_r_s_v_p.html#b17">removePSB</a>(psb);
- 01567
- 01568 <span class="keyword">delete</span> msg;
- 01569 }
- </pre></div>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="b2" doxytag="RSVP::processPSB_TIMEOUT"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">void RSVP::processPSB_TIMEOUT </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top"><a class="el" href="class_psb_timeout_msg.html">PsbTimeoutMsg</a> * </td>
- <td class="mdname1" valign="top" nowrap> <em>msg</em> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [protected]</code></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- <div class="fragment"><pre class="fragment">00480 {
- 00481 PathStateBlock_t *psb = <a class="code" href="class_r_s_v_p.html#b47">findPsbById</a>(msg-><a class="code" href="class_psb_timeout_msg.html#a7">getId</a>());
- 00482 ASSERT(psb);
- 00483
- 00484 <span class="keywordflow">if</span> (<a class="code" href="class_r_s_v_p.html#r4">tedmod</a>-><a class="code" href="class_t_e_d.html#z61_5">isLocalAddress</a>(psb->OutInterface))
- 00485 {
- 00486 ASSERT(psb->OutInterface == <a class="code" href="class_r_s_v_p.html#r4">tedmod</a>-><a class="code" href="class_t_e_d.html#z61_0">interfaceAddrByPeerAddress</a>(psb->ERO[0].node));
- 00487
- 00488 <a class="code" href="class_r_s_v_p.html#b34">sendPathTearMessage</a>(psb->ERO[0].node, psb->Session_Object,
- 00489 psb->Sender_Template_Object, psb->OutInterface, routerId, <span class="keyword">false</span>);
- 00490 }
- 00491
- 00492 <a class="code" href="class_r_s_v_p.html#b17">removePSB</a>(psb);
- 00493 }
- </pre></div>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="b1" doxytag="RSVP::processPSB_TIMER"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">void RSVP::processPSB_TIMER </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top"><a class="el" href="class_psb_timer_msg.html">PsbTimerMsg</a> * </td>
- <td class="mdname1" valign="top" nowrap> <em>msg</em> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [protected]</code></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- <div class="fragment"><pre class="fragment">00471 {
- 00472 PathStateBlock_t *psb = <a class="code" href="class_r_s_v_p.html#b47">findPsbById</a>(msg-><a class="code" href="class_psb_timer_msg.html#a7">getId</a>());
- 00473 ASSERT(psb);
- 00474
- 00475 <a class="code" href="class_r_s_v_p.html#b23">refreshPath</a>(psb);
- 00476 <a class="code" href="class_r_s_v_p.html#b27">scheduleRefreshTimer</a>(psb, PSB_REFRESH_INTERVAL);
- 00477 }
- </pre></div>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="b12" doxytag="RSVP::processResvMsg"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">void RSVP::processResvMsg </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top"><a class="el" href="class_r_s_v_p_resv_msg.html">RSVPResvMsg</a> * </td>
- <td class="mdname1" valign="top" nowrap> <em>msg</em> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [protected]</code></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- <div class="fragment"><pre class="fragment">01637 {
- 01638 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> << <span class="stringliteral">"Received RESV_MESSAGE"</span> << endl;
- 01639 <a class="code" href="class_r_s_v_p.html#b52">print</a>(msg);
- 01640
- 01641 <a class="code" href="class_i_p_address.html">IPAddress</a> OI = msg-><a class="code" href="class_r_s_v_p_resv_msg.html#a5">getLIH</a>();
- 01642
- 01643 <span class="comment">// find matching PSB for every flow ****************************************</span>
- 01644
- 01645 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> m = 0; m < msg->getFlowDescriptor().size(); m++)
- 01646 {
- 01647
- 01648 PathStateBlock_t *psb = <a class="code" href="class_r_s_v_p.html#b45">findPSB</a>(msg-><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>&)msg-><a class="code" href="class_r_s_v_p_resv_msg___base.html#a7">getFlowDescriptor</a>()[m].Filter_Spec_Object);
- 01649 <span class="keywordflow">if</span> (!psb)
- 01650 {
- 01651 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> << <span class="stringliteral">"matching PSB not found for lspid="</span> << msg-><a class="code" href="class_r_s_v_p_resv_msg___base.html#a7">getFlowDescriptor</a>()[m].Filter_Spec_Object.Lsp_Id << endl;
- 01652
- 01653 <span class="comment">// remove descriptor from message</span>
- 01654 msg-><a class="code" href="class_r_s_v_p_resv_msg___base.html#a7">getFlowDescriptor</a>().erase(msg-><a class="code" href="class_r_s_v_p_resv_msg___base.html#a7">getFlowDescriptor</a>().begin() + m);
- 01655 --m;
- 01656 }
- 01657 }
- 01658
- 01659 <span class="keywordflow">if</span> (msg-><a class="code" href="class_r_s_v_p_resv_msg___base.html#a7">getFlowDescriptor</a>().size() == 0)
- 01660 {
- 01661 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> << <span class="stringliteral">"no matching PSB found"</span> << endl;
- 01662 <span class="keyword">delete</span> msg;
- 01663 <span class="keywordflow">return</span>;
- 01664 }
- 01665
- 01666 <span class="comment">// find matching RSB *******************************************************</span>
- 01667
- 01668 ResvStateBlock_t *rsb = NULL;
- 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++)
- 01670 {
- 01671 <span class="keywordflow">if</span> (!(msg-><a class="code" href="class_r_s_v_p_packet.html#a9">isInSession</a>(&it->Session_Object)))
- 01672 <span class="keywordflow">continue</span>;
- 01673
- 01674 <span class="keywordflow">if</span> (it->Next_Hop_Address != msg-><a class="code" href="class_r_s_v_p_resv_msg.html#a4">getNHOP</a>())
- 01675 <span class="keywordflow">continue</span>;
- 01676
- 01677 <span class="keywordflow">if</span> (it->OI != msg-><a class="code" href="class_r_s_v_p_resv_msg.html#a5">getLIH</a>())
- 01678 <span class="keywordflow">continue</span>;
- 01679
- 01680 rsb = &(*it);
- 01681 <span class="keywordflow">break</span>;
- 01682 }
- 01683
- 01684 <span class="keywordflow">if</span> (!rsb)
- 01685 {
- 01686 rsb = <a class="code" href="class_r_s_v_p.html#b18">createRSB</a>(msg);
- 01687
- 01688 <a class="code" href="class_r_s_v_p.html#b30">scheduleCommitTimer</a>(rsb);
- 01689
- 01690 <span class="comment">// reservation is new, propagate upstream immediately</span>
- 01691 <a class="code" href="class_r_s_v_p.html#b27">scheduleRefreshTimer</a>(rsb, 0.0);
- 01692 }
- 01693 <span class="keywordflow">else</span>
- 01694 <a class="code" href="class_r_s_v_p.html#b20">updateRSB</a>(rsb, msg);
- 01695
- 01696 <a class="code" href="class_r_s_v_p.html#b28">scheduleTimeout</a>(rsb);
- 01697
- 01698 <span class="keyword">delete</span> msg;
- 01699 }
- </pre></div>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="b4" doxytag="RSVP::processRSB_COMMIT_TIMER"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">void RSVP::processRSB_COMMIT_TIMER </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top"><a class="el" href="class_rsb_commit_timer_msg.html">RsbCommitTimerMsg</a> * </td>
- <td class="mdname1" valign="top" nowrap> <em>msg</em> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [protected]</code></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- <div class="fragment"><pre class="fragment">00513 {
- 00514 ResvStateBlock_t *rsb = <a class="code" href="class_r_s_v_p.html#b48">findRsbById</a>(msg-><a class="code" href="class_rsb_commit_timer_msg.html#a7">getId</a>());
- 00515 <a class="code" href="class_r_s_v_p.html#b26">commitResv</a>(rsb);
- 00516 }
- </pre></div>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="b3" doxytag="RSVP::processRSB_REFRESH_TIMER"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">void RSVP::processRSB_REFRESH_TIMER </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top"><a class="el" href="class_rsb_refresh_timer_msg.html">RsbRefreshTimerMsg</a> * </td>
- <td class="mdname1" valign="top" nowrap> <em>msg</em> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [protected]</code></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- <div class="fragment"><pre class="fragment">00497 {
- 00498 ResvStateBlock_t *rsb = <a class="code" href="class_r_s_v_p.html#b48">findRsbById</a>(msg-><a class="code" href="class_rsb_refresh_timer_msg.html#a7">getId</a>());
- 00499 <span class="keywordflow">if</span> (rsb->commitTimerMsg->isScheduled())
- 00500 {
- 00501 <span class="comment">// reschedule after commit</span>
- 00502 <a class="code" href="class_r_s_v_p.html#b27">scheduleRefreshTimer</a>(rsb, 0.0);
- 00503 }
- 00504 <span class="keywordflow">else</span>
- 00505 {
- 00506 <a class="code" href="class_r_s_v_p.html#b24">refreshResv</a>(rsb);
- 00507
- 00508 <a class="code" href="class_r_s_v_p.html#b27">scheduleRefreshTimer</a>(rsb, RSB_REFRESH_INTERVAL);
- 00509 }
- 00510 }
- </pre></div>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="b5" doxytag="RSVP::processRSB_TIMEOUT"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">void RSVP::processRSB_TIMEOUT </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top"><a class="el" href="class_rsb_timeout_msg.html">RsbTimeoutMsg</a> * </td>
- <td class="mdname1" valign="top" nowrap> <em>msg</em> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [protected]</code></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- <div class="fragment"><pre class="fragment">00519 {
- 00520 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> << <span class="stringliteral">"RSB TIMEOUT RSB "</span> << msg-><a class="code" href="class_rsb_timeout_msg.html#a7">getId</a>() << endl;
- 00521
- 00522 ResvStateBlock_t *rsb = <a class="code" href="class_r_s_v_p.html#b48">findRsbById</a>(msg-><a class="code" href="class_rsb_timeout_msg.html#a7">getId</a>());
- 00523
- 00524 ASSERT(rsb);
- 00525 ASSERT(<a class="code" href="class_r_s_v_p.html#r4">tedmod</a>-><a class="code" href="class_t_e_d.html#z61_5">isLocalAddress</a>(rsb->OI));
- 00526
- 00527 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < rsb->FlowDescriptor.size(); i++)
- 00528 {
- 00529 <a class="code" href="class_r_s_v_p.html#b22">removeRsbFilter</a>(rsb, 0);
- 00530 }
- 00531 <a class="code" href="class_r_s_v_p.html#b21">removeRSB</a>(rsb);
- 00532 }
- </pre></div>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="b9" doxytag="RSVP::processRSVPMessage"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">void RSVP::processRSVPMessage </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top"><a class="el" href="class_r_s_v_p_message.html">RSVPMessage</a> * </td>
- <td class="mdname1" valign="top" nowrap> <em>msg</em> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [protected]</code></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- <div class="fragment"><pre class="fragment">01339 {
- 01340 <span class="keywordtype">int</span> kind = msg-><a class="code" href="class_r_s_v_p_message.html#a7">getRsvpKind</a>();
- 01341 <span class="keywordflow">switch</span>(kind)
- 01342 {
- 01343 <span class="keywordflow">case</span> <a class="code" href="_r_s_v_p_packet__m_8h.html#a1">PATH_MESSAGE</a>:
- 01344 <a class="code" href="class_r_s_v_p.html#b11">processPathMsg</a>(check_and_cast<RSVPPathMsg*>(msg));
- 01345 <span class="keywordflow">break</span>;
- 01346
- 01347 <span class="keywordflow">case</span> <a class="code" href="_r_s_v_p_packet__m_8h.html#a2">RESV_MESSAGE</a>:
- 01348 <a class="code" href="class_r_s_v_p.html#b12">processResvMsg</a>(check_and_cast<RSVPResvMsg*>(msg));
- 01349 <span class="keywordflow">break</span>;
- 01350
- 01351 <span class="keywordflow">case</span> <a class="code" href="_r_s_v_p_packet__m_8h.html#a3">PTEAR_MESSAGE</a>:
- 01352 <a class="code" href="class_r_s_v_p.html#b13">processPathTearMsg</a>(check_and_cast<RSVPPathTear*>(msg));
- 01353 <span class="keywordflow">break</span>;
- 01354
- 01355 <span class="keywordflow">case</span> <a class="code" href="_r_s_v_p_packet__m_8h.html#a7">HELLO_MESSAGE</a>:
- 01356 <a class="code" href="class_r_s_v_p.html#b10">processHelloMsg</a>(check_and_cast<RSVPHelloMsg*>(msg));
- 01357 <span class="keywordflow">break</span>;
- 01358
- 01359 <span class="keywordflow">case</span> <a class="code" href="_r_s_v_p_packet__m_8h.html#a5">PERROR_MESSAGE</a>:
- 01360 <a class="code" href="class_r_s_v_p.html#b14">processPathErrMsg</a>(check_and_cast<RSVPPathError*>(msg));
- 01361 <span class="keywordflow">break</span>;
- 01362
- 01363 <span class="keywordflow">default</span>:
- 01364 ASSERT(<span class="keyword">false</span>);
- 01365 }
- 01366 }
- </pre></div>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="b0" doxytag="RSVP::processSignallingMessage"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">void RSVP::processSignallingMessage </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top"><a class="el" href="class_signalling_msg.html">SignallingMsg</a> * </td>
- <td class="mdname1" valign="top" nowrap> <em>msg</em> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [protected]</code></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- <div class="fragment"><pre class="fragment">01725 {
- 01726 <span class="keywordtype">int</span> command = msg-><a class="code" href="class_signalling_msg.html#a7">getCommand</a>();
- 01727 <span class="keywordflow">switch</span>(command)
- 01728 {
- 01729 <span class="keywordflow">case</span> <a class="code" href="_signalling_msg__m_8h.html#a1">MSG_PSB_TIMER</a>:
- 01730 <a class="code" href="class_r_s_v_p.html#b1">processPSB_TIMER</a>(check_and_cast<PsbTimerMsg*>(msg));
- 01731 <span class="keywordflow">break</span>;
- 01732
- 01733 <span class="keywordflow">case</span> <a class="code" href="_signalling_msg__m_8h.html#a2">MSG_PSB_TIMEOUT</a>:
- 01734 <a class="code" href="class_r_s_v_p.html#b2">processPSB_TIMEOUT</a>(check_and_cast<PsbTimeoutMsg*>(msg));
- 01735 <span class="keywordflow">break</span>;
- 01736
- 01737 <span class="keywordflow">case</span> <a class="code" href="_signalling_msg__m_8h.html#a3">MSG_RSB_REFRESH_TIMER</a>:
- 01738 <a class="code" href="class_r_s_v_p.html#b3">processRSB_REFRESH_TIMER</a>(check_and_cast<RsbRefreshTimerMsg*>(msg));
- 01739 <span class="keywordflow">break</span>;
- 01740
- 01741 <span class="keywordflow">case</span> <a class="code" href="_signalling_msg__m_8h.html#a4">MSG_RSB_COMMIT_TIMER</a>:
- 01742 <a class="code" href="class_r_s_v_p.html#b4">processRSB_COMMIT_TIMER</a>(check_and_cast<RsbCommitTimerMsg*>(msg));
- 01743 <span class="keywordflow">break</span>;
- 01744
- 01745 <span class="keywordflow">case</span> <a class="code" href="_signalling_msg__m_8h.html#a5">MSG_RSB_TIMEOUT</a>:
- 01746 <a class="code" href="class_r_s_v_p.html#b5">processRSB_TIMEOUT</a>(check_and_cast<RsbTimeoutMsg*>(msg));
- 01747 <span class="keywordflow">break</span>;
- 01748
- 01749 <span class="keywordflow">case</span> <a class="code" href="_signalling_msg__m_8h.html#a6">MSG_HELLO_TIMER</a>:
- 01750 <a class="code" href="class_r_s_v_p.html#b6">processHELLO_TIMER</a>(check_and_cast<HelloTimerMsg*>(msg));
- 01751 <span class="keywordflow">break</span>;
- 01752
- 01753 <span class="keywordflow">case</span> <a class="code" href="_signalling_msg__m_8h.html#a7">MSG_HELLO_TIMEOUT</a>:
- 01754 <a class="code" href="class_r_s_v_p.html#b7">processHELLO_TIMEOUT</a>(check_and_cast<HelloTimeoutMsg*>(msg));
- 01755 <span class="keywordflow">break</span>;
- 01756
- 01757 <span class="keywordflow">case</span> <a class="code" href="_signalling_msg__m_8h.html#a8">MSG_PATH_NOTIFY</a>:
- 01758 <a class="code" href="class_r_s_v_p.html#b8">processPATH_NOTIFY</a>(check_and_cast<PathNotifyMsg*>(msg));
- 01759 <span class="keywordflow">break</span>;
- 01760
- 01761 <span class="keywordflow">default</span>:
- 01762 ASSERT(<span class="keyword">false</span>);
- 01763 }
- 01764 }
- </pre></div>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="b54" doxytag="RSVP::readTrafficFromXML"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">void RSVP::readTrafficFromXML </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top">const cXMLElement * </td>
- <td class="mdname1" valign="top" nowrap> <em>traffic</em> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [protected]</code></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- <div class="fragment"><pre class="fragment">00148 {
- 00149 ASSERT(traffic);
- 00150 ASSERT(!strcmp(traffic->getTagName(), <span class="stringliteral">"sessions"</span>));
- 00151 <a class="code" href="_x_m_l_utils_8cc.html#a3">checkTags</a>(traffic, <span class="stringliteral">"session"</span>);
- 00152 cXMLElementList list = traffic->getChildrenByTagName(<span class="stringliteral">"session"</span>);
- 00153 <span class="keywordflow">for</span> (cXMLElementList::iterator it=list.begin(); it != list.end(); it++)
- 00154 <a class="code" href="class_r_s_v_p.html#b55">readTrafficSessionFromXML</a>(*it);
- 00155 }
- </pre></div>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="b56" doxytag="RSVP::readTrafficRouteFromXML"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top"><a class="el" href="_int_serv__m_8h.html#a2">EroVector</a> RSVP::readTrafficRouteFromXML </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top">const cXMLElement * </td>
- <td class="mdname1" valign="top" nowrap> <em>route</em> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [protected]</code></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- <div class="fragment"><pre class="fragment">00158 {
- 00159 <a class="code" href="_x_m_l_utils_8cc.html#a3">checkTags</a>(route, <span class="stringliteral">"node lnode"</span>);
- 00160
- 00161 <a class="code" href="_int_serv__m_8h.html#a2">EroVector</a> ERO;
- 00162
- 00163 <span class="keywordflow">for</span> (cXMLElement *hop = route->getFirstChild(); hop; hop = hop->getNextSibling())
- 00164 {
- 00165 <a class="code" href="struct_ero_obj__t.html">EroObj_t</a> h;
- 00166 <span class="keywordflow">if</span> (!strcmp(hop->getTagName(), <span class="stringliteral">"node"</span>))
- 00167 {
- 00168 h.<a class="code" href="struct_ero_obj__t.html#o0">L</a> = <span class="keyword">false</span>;
- 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->getNodeValue()).get4();
- 00170 }
- 00171 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!strcmp(hop->getTagName(), <span class="stringliteral">"lnode"</span>))
- 00172 {
- 00173 h.<a class="code" href="struct_ero_obj__t.html#o0">L</a> = <span class="keyword">true</span>;
- 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->getNodeValue()).get4();
- 00175 }
- 00176 <span class="keywordflow">else</span>
- 00177 {
- 00178 ASSERT(<span class="keyword">false</span>);
- 00179 }
- 00180 ERO.push_back(h);
- 00181 }
- 00182
- 00183 <span class="keywordflow">return</span> ERO;
- 00184 }
- </pre></div>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="b55" doxytag="RSVP::readTrafficSessionFromXML"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">void RSVP::readTrafficSessionFromXML </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top">const cXMLElement * </td>
- <td class="mdname1" valign="top" nowrap> <em>session</em> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [protected]</code></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- <div class="fragment"><pre class="fragment">00187 {
- 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>);
- 00189
- 00190 traffic_session_t newSession;
- 00191
- 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>);
- 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>();
- 00194 newSession.sobj.DestAddress = <a class="code" href="_x_m_l_utils_8cc.html#a10">getParameterIPAddressValue</a>(session, <span class="stringliteral">"endpoint"</span>);
- 00195
- 00196 std::vector<traffic_session_t>::iterator sit = <a class="code" href="class_r_s_v_p.html#b49">findSession</a>(newSession.sobj);
- 00197
- 00198 <span class="keywordtype">bool</span> merge;
- 00199
- 00200 <span class="keywordflow">if</span> (sit != <a class="code" href="class_r_s_v_p.html#r0">traffic</a>.end())
- 00201 {
- 00202 <span class="comment">// session already exits, add new paths</span>
- 00203
- 00204 merge = <span class="keyword">true</span>;
- 00205
- 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->sobj.holdingPri);
- 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->sobj.setupPri);
- 00208
- 00209 newSession.sobj.setupPri = sit->sobj.setupPri;
- 00210 newSession.sobj.holdingPri = sit->sobj.holdingPri;
- 00211
- 00212 sit->sobj = newSession.sobj;
- 00213 }
- 00214 <span class="keywordflow">else</span>
- 00215 {
- 00216 <span class="comment">// session not found, create new</span>
- 00217
- 00218 merge = <span class="keyword">false</span>;
- 00219
- 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);
- 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);
- 00222 }
- 00223
- 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>);
- 00225 <a class="code" href="_x_m_l_utils_8cc.html#a3">checkTags</a>(paths, <span class="stringliteral">"path"</span>);
- 00226
- 00227 cXMLElementList list = paths->getChildrenByTagName(<span class="stringliteral">"path"</span>);
- 00228 <span class="keywordflow">for</span> (cXMLElementList::iterator it=list.begin(); it != list.end(); it++)
- 00229 {
- 00230 cXMLElement *path = *it;
- 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>);
- 00232
- 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>);;
- 00234
- 00235 std::vector<traffic_path_t>::iterator pit;
- 00236
- 00237 traffic_path_t newPath;
- 00238
- 00239 newPath.sender.SrcAddress = <a class="code" href="_x_m_l_utils_8cc.html#a10">getParameterIPAddressValue</a>(path, <span class="stringliteral">"sender"</span>, routerId);
- 00240 newPath.sender.Lsp_Id = lspid;
- 00241
- 00242 <span class="comment">// make sure path doesn't exist yet</span>
- 00243
- 00244 <span class="keywordflow">if</span> (merge)
- 00245 {
- 00246 pit = <a class="code" href="class_r_s_v_p.html#b50">findPath</a>(&(*sit), newPath.sender);
- 00247 <span class="keywordflow">if</span> (pit != sit->paths.end())
- 00248 {
- 00249 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> << <span class="stringliteral">"path "</span> << lspid << <span class="stringliteral">" already exists in this session, doing nothing"</span> << endl;
- 00250 <span class="keywordflow">continue</span>;
- 00251 }
- 00252 }
- 00253 <span class="keywordflow">else</span>
- 00254 {
- 00255 pit = <a class="code" href="class_r_s_v_p.html#b50">findPath</a>(&newSession, newPath.sender);
- 00256 <span class="keywordflow">if</span> (pit != newSession.paths.end())
- 00257 {
- 00258 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> << <span class="stringliteral">"path "</span> << lspid << <span class="stringliteral">" already exists in this session, doing nothing"</span> << endl;
- 00259 <span class="keywordflow">continue</span>;
- 00260 }
- 00261 }
- 00262
- 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>);
- 00264 <span class="keywordflow">if</span> (strlen(str))
- 00265 {
- 00266 cModule *mod = simulation.moduleByPath(str);
- 00267 newPath.owner = mod->id();
- 00268 }
- 00269 <span class="keywordflow">else</span>
- 00270 {
- 00271 newPath.owner = id();
- 00272 }
- 00273
- 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>);
- 00275 newPath.color = <a class="code" href="_x_m_l_utils_8cc.html#a8">getParameterIntValue</a>(path, <span class="stringliteral">"color"</span>, 0);
- 00276
- 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);
- 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);
- 00279
- 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>);
- 00281 <span class="keywordflow">if</span> (route)
- 00282 newPath.ERO = readTrafficRouteFromXML(route);
- 00283
- 00284 if (merge)
- 00285 {
- 00286 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> << <span class="stringliteral">"adding new path into an existing session"</span> << endl;
- 00287
- 00288 sit->paths.push_back(newPath);
- 00289 }
- 00290 <span class="keywordflow">else</span>
- 00291 {
- 00292 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> << <span class="stringliteral">"adding new path into new session"</span> << endl;
- 00293
- 00294 newSession.paths.push_back(newPath);
- 00295 }
- 00296
- 00297 <span class="comment">// schedule path creation</span>
- 00298
- 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);
- 00300 }
- 00301
- 00302 <span class="keywordflow">if</span> (!merge)
- 00303 {
- 00304 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> << <span class="stringliteral">"adding new session into database"</span> << endl;
- 00305
- 00306 <a class="code" href="class_r_s_v_p.html#r0">traffic</a>.push_back(newSession);
- 00307 }
- 00308 }
- </pre></div>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="b38" doxytag="RSVP::recoveryEvent"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">void RSVP::recoveryEvent </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top"><a class="el" href="class_i_p_address.html">IPAddress</a> </td>
- <td class="mdname1" valign="top" nowrap> <em>peer</em> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [protected]</code></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- <div class="fragment"><pre class="fragment">01702 {
- 01703 <span class="comment">// called when peer's operation is restored</span>
- 01704
- 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>-><a class="code" href="class_t_e_d.html#z61_6">linkIndex</a>(routerId, peer);
- 01706 <span class="keywordtype">bool</span> rtmodified = !<a class="code" href="class_r_s_v_p.html#r4">tedmod</a>-><a class="code" href="class_t_e_d.html#o0">ted</a>[index].state;
- 01707 <a class="code" href="class_r_s_v_p.html#r4">tedmod</a>-><a class="code" href="class_t_e_d.html#o0">ted</a>[index].state = <span class="keyword">true</span>;
- 01708 <a class="code" href="class_r_s_v_p.html#b42">announceLinkChange</a>(index);
- 01709
- 01710 <span class="comment">// rebuild routing table if link state changed</span>
- 01711 <span class="keywordflow">if</span> (rtmodified)
- 01712 tedmod->rebuildRoutingTable();
- 01713
- 01714 <span class="comment">// refresh all paths towards this neighbour</span>
- 01715 for (PSBVector::iterator it = PSBList.begin(); it != PSBList.end(); it++)
- 01716 {
- 01717 <span class="keywordflow">if</span> (it->OutInterface != <a class="code" href="class_r_s_v_p.html#r4">tedmod</a>-><a class="code" href="class_t_e_d.html#o0">ted</a>[index].local)
- 01718 continue;
- 01719
- 01720 scheduleRefreshTimer(&(*it), 0.0);
- 01721 }
- 01722 }
- </pre></div>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="b23" doxytag="RSVP::refreshPath"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">void RSVP::refreshPath </td>
- <td class="md" valign="top">( </td>
- <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> * </td>
- <td class="mdname1" valign="top" nowrap> <em>psbEle</em> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [protected]</code></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- <div class="fragment"><pre class="fragment">00563 {
- 00564 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> << <span class="stringliteral">"refresh path (PSB "</span> << psbEle->id << <span class="stringliteral">")"</span> << endl;
- 00565
- 00566 <a class="code" href="class_i_p_address.html">IPAddress</a>& OI = psbEle->OutInterface;
- 00567 <a class="code" href="_int_serv__m_8h.html#a2">EroVector</a>& ERO = psbEle->ERO;
- 00568
- 00569 ASSERT(!OI.<a class="code" href="class_i_p_address.html#a1">isUnspecified</a>());
- 00570 ASSERT(<a class="code" href="class_r_s_v_p.html#r4">tedmod</a>-><a class="code" href="class_t_e_d.html#z61_5">isLocalAddress</a>(OI));
- 00571
- 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>);
- 00573
- 00574 pm-><a class="code" href="class_r_s_v_p_packet___base.html#a6">setSession</a>(psbEle->Session_Object);
- 00575 pm-><a class="code" href="class_r_s_v_p_path_msg.html#a10">setSenderTemplate</a>(psbEle->Sender_Template_Object);
- 00576 pm-><a class="code" href="class_r_s_v_p_path_msg.html#a12">setSenderTspec</a>(psbEle->Sender_Tspec_Object);
- 00577
- 00578 <a class="code" href="struct_rsvp_hop_obj__t.html">RsvpHopObj_t</a> hop;
- 00579 hop.<a class="code" href="struct_rsvp_hop_obj__t.html#o1">Logical_Interface_Handle</a> = OI;
- 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>;
- 00581 pm-><a class="code" href="class_r_s_v_p_path_msg___base.html#a6">setHop</a>(hop);
- 00582
- 00583 pm-><a class="code" href="class_r_s_v_p_path_msg___base.html#a15">setERO</a>(ERO);
- 00584 pm-><a class="code" href="class_r_s_v_p_path_msg___base.html#a17">setColor</a>(psbEle->color);
- 00585
- 00586 <span class="keywordtype">int</span> length = 85 + (ERO.size() * 5);
- 00587
- 00588 pm->setByteLength(length);
- 00589
- 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>-><a class="code" href="class_t_e_d.html#z61_2">peerByLocalAddress</a>(OI);
- 00591
- 00592 ASSERT(ERO.size() == 0 ||ERO[0].node.equals(nextHop) || ERO[0].L);
- 00593
- 00594 <a class="code" href="class_r_s_v_p.html#b43">sendToIP</a>(pm, nextHop);
- 00595 }
- </pre></div>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="b25" doxytag="RSVP::refreshResv"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">void RSVP::refreshResv </td>
- <td class="md" valign="top">( </td>
- <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> * </td>
- <td class="mdname" nowrap> <em>rsbEle</em>, </td>
- </tr>
- <tr>
- <td class="md" nowrap align="right"></td>
- <td class="md"></td>
- <td class="md" nowrap><a class="el" href="class_i_p_address.html">IPAddress</a> </td>
- <td class="mdname" nowrap> <em>PHOP</em></td>
- </tr>
- <tr>
- <td class="md"></td>
- <td class="md">) </td>
- <td class="md" colspan="2"><code> [protected]</code></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- <div class="fragment"><pre class="fragment">00626 {
- 00627 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> << <span class="stringliteral">"refresh reservation (RSB "</span> << rsbEle->id << <span class="stringliteral">") PHOP "</span> << PHOP << endl;
- 00628
- 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>);
- 00630
- 00631 <a class="code" href="_int_serv__m_8h.html#a3">FlowDescriptorVector</a> flows;
- 00632
- 00633 msg-><a class="code" href="class_r_s_v_p_packet___base.html#a6">setSession</a>(rsbEle->Session_Object);
- 00634
- 00635 <a class="code" href="struct_rsvp_hop_obj__t.html">RsvpHopObj_t</a> hop;
- 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>-><a class="code" href="class_t_e_d.html#z61_1">peerRemoteInterface</a>(PHOP);
- 00637 hop.<a class="code" href="struct_rsvp_hop_obj__t.html#o0">Next_Hop_Address</a> = PHOP;
- 00638 msg-><a class="code" href="class_r_s_v_p_resv_msg___base.html#a6">setHop</a>(hop);
- 00639
- 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++)
- 00641 {
- 00642 <span class="keywordflow">if</span> (it->Previous_Hop_Address != PHOP)
- 00643 continue;
- 00644
- 00645 <span class="comment">//if (it->LIH != LIH)</span>
- 00646 <span class="comment">// continue;</span>
- 00647
- 00648 if (it->Session_Object != rsbEle->Session_Object)
- 00649 continue;
- 00650
- 00651 for (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> c = 0; c < rsbEle->FlowDescriptor.size(); c++)
- 00652 {
- 00653 <span class="keywordflow">if</span> ((<a class="code" href="struct_filter_spec_obj__t.html">FilterSpecObj_t</a>&)it->Sender_Template_Object != rsbEle->FlowDescriptor[c].Filter_Spec_Object)
- 00654 continue;
- 00655
- 00656 ASSERT(rsbEle->inLabelVector.size() == rsbEle->FlowDescriptor.size());
- 00657
- 00658 <a class="code" href="struct_flow_descriptor__t.html">FlowDescriptor_t</a> flow;
- 00659 flow.Filter_Spec_Object = (<a class="code" href="struct_filter_spec_obj__t.html">FilterSpecObj_t</a>&)it->Sender_Template_Object;
- 00660 flow.Flowspec_Object = (<a class="code" href="struct_flow_spec_obj__t.html">FlowSpecObj_t</a>&)it->Sender_Tspec_Object;
- 00661 flow.RRO = rsbEle->FlowDescriptor[c].RRO;
- 00662 flow.RRO.push_back(routerId);
- 00663 flow.label = rsbEle->inLabelVector[c];
- 00664 flows.push_back(flow);
- 00665
- 00666 break;
- 00667 }
- 00668 }
- 00669
- 00670 msg->setFlowDescriptor(flows);
- 00671
- 00672 <span class="keywordtype">int</span> fd_length = 0;
- 00673 for (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < flows.size(); i++)
- 00674 fd_length += 28 + (flows[i].RRO.size() * 4);
- 00675
- 00676 <span class="keywordtype">int</span> length = 34 + fd_length;
- 00677
- 00678 <span class="comment">// see comment elsewhere (in TED.cc)</span>
- 00679 length /= 10;
- 00680
- 00681 msg->setByteLength(length);
- 00682
- 00683 sendToIP(msg, PHOP);
- 00684 }
- </pre></div>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="b24" doxytag="RSVP::refreshResv"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">void RSVP::refreshResv </td>
- <td class="md" valign="top">( </td>
- <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> * </td>
- <td class="mdname1" valign="top" nowrap> <em>rsbEle</em> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [protected]</code></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- <div class="fragment"><pre class="fragment">00598 {
- 00599 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> << <span class="stringliteral">"refresh reservation (RSB "</span> << rsbEle->id << <span class="stringliteral">")"</span> << endl;
- 00600
- 00601 <a class="code" href="_int_serv__m_8h.html#a1">IPAddressVector</a> phops;
- 00602
- 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++)
- 00604 {
- 00605 <span class="keywordflow">if</span> (it->OutInterface != rsbEle->OI)
- 00606 continue;
- 00607
- 00608 for (<span class="keywordtype">int</span> i = 0; i < rsbEle->FlowDescriptor.size(); i++)
- 00609 {
- 00610 <span class="keywordflow">if</span> ((<a class="code" href="struct_filter_spec_obj__t.html">FilterSpecObj_t</a>&)it->Sender_Template_Object != rsbEle->FlowDescriptor[i].Filter_Spec_Object)
- 00611 continue;
- 00612
- 00613 if (tedmod->isLocalAddress(it->Previous_Hop_Address))
- 00614 continue; <span class="comment">// IR nothing to refresh</span>
- 00615
- 00616 if (!find(phops, it->Previous_Hop_Address))
- 00617 phops.push_back(it->Previous_Hop_Address);
- 00618 }
- 00619
- 00620 for (IPAddressVector::iterator it = phops.begin(); it != phops.end(); it++)
- 00621 refreshResv(rsbEle, *it);
- 00622 }
- 00623 }
- </pre></div>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="b17" doxytag="RSVP::removePSB"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">void RSVP::removePSB </td>
- <td class="md" valign="top">( </td>
- <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> * </td>
- <td class="mdname1" valign="top" nowrap> <em>psb</em> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [protected]</code></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- <div class="fragment"><pre class="fragment">01076 {
- 01077 ASSERT(psb);
- 01078
- 01079 <span class="keywordtype">int</span> lspid = psb->Sender_Template_Object.Lsp_Id;
- 01080
- 01081 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> << <span class="stringliteral">"removing PSB "</span> << psb->id << <span class="stringliteral">" (lspid "</span> << lspid << <span class="stringliteral">")"</span> << endl;
- 01082
- 01083 <span class="comment">// remove reservation state if exists **************************************</span>
- 01084
- 01085 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> filterIndex;
- 01086 ResvStateBlock_t *rsb = <a class="code" href="class_r_s_v_p.html#b46">findRSB</a>(psb->Session_Object, psb->Sender_Template_Object, filterIndex);
- 01087 <span class="keywordflow">if</span> (rsb)
- 01088 {
- 01089 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> << <span class="stringliteral">"reservation state present, will be removed too"</span> << endl;
- 01090
- 01091 <a class="code" href="class_r_s_v_p.html#b22">removeRsbFilter</a>(rsb, filterIndex);
- 01092 }
- 01093
- 01094 <span class="comment">// proceed with actual removal *********************************************</span>
- 01095
- 01096 cancelEvent(psb->timerMsg);
- 01097 cancelEvent(psb->timeoutMsg);
- 01098
- 01099 <span class="keyword">delete</span> psb->timerMsg;
- 01100 <span class="keyword">delete</span> psb-><a class="code" href="struct_r_s_v_p_1_1_resv_state_block__t.html#o9">timeoutMsg</a>;
- 01101
- 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++)
- 01103 {
- 01104 <span class="keywordflow">if</span> (it->id != psb->id)
- 01105 continue;
- 01106
- 01107 PSBList.erase(it);
- 01108 return;
- 01109 }
- 01110 ASSERT(false);
- 01111 }
- </pre></div>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="b21" doxytag="RSVP::removeRSB"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">void RSVP::removeRSB </td>
- <td class="md" valign="top">( </td>
- <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> * </td>
- <td class="mdname1" valign="top" nowrap> <em>rsb</em> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [protected]</code></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- <div class="fragment"><pre class="fragment">01044 {
- 01045 ASSERT(rsb);
- 01046 ASSERT(rsb->FlowDescriptor.size() == 0);
- 01047
- 01048 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> << <span class="stringliteral">"removing empty RSB "</span> << rsb->id << endl;
- 01049
- 01050 cancelEvent(rsb->refreshTimerMsg);
- 01051 cancelEvent(rsb->commitTimerMsg);
- 01052 cancelEvent(rsb->timeoutMsg);
- 01053
- 01054 <span class="keyword">delete</span> rsb->refreshTimerMsg;
- 01055 <span class="keyword">delete</span> rsb->commitTimerMsg;
- 01056 <span class="keyword">delete</span> rsb->timeoutMsg;
- 01057
- 01058 <span class="keywordflow">if</span> (rsb->Flowspec_Object.req_bandwidth > 0)
- 01059 {
- 01060 <span class="comment">// deallocate resources</span>
- 01061 <a class="code" href="class_r_s_v_p.html#b39">allocateResource</a>(rsb->OI, rsb->Session_Object, -rsb->Flowspec_Object.req_bandwidth);
- 01062 }
- 01063
- 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++)
- 01065 {
- 01066 <span class="keywordflow">if</span> (it->id != rsb->id)
- 01067 continue;
- 01068
- 01069 RSBList.erase(it);
- 01070 return;
- 01071 }
- 01072 ASSERT(false);
- 01073 }
- </pre></div>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="b22" doxytag="RSVP::removeRsbFilter"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">void RSVP::removeRsbFilter </td>
- <td class="md" valign="top">( </td>
- <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> * </td>
- <td class="mdname" nowrap> <em>rsb</em>, </td>
- </tr>
- <tr>
- <td class="md" nowrap align="right"></td>
- <td class="md"></td>
- <td class="md" nowrap>unsigned int </td>
- <td class="mdname" nowrap> <em>index</em></td>
- </tr>
- <tr>
- <td class="md"></td>
- <td class="md">) </td>
- <td class="md" colspan="2"><code> [protected]</code></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- <div class="fragment"><pre class="fragment">01024 {
- 01025 ASSERT(rsb);
- 01026 ASSERT(index < rsb->FlowDescriptor.size());
- 01027 ASSERT(rsb->inLabelVector.size() == rsb->FlowDescriptor.size());
- 01028
- 01029 <span class="keywordtype">int</span> lspid = rsb->FlowDescriptor[index].Filter_Spec_Object.Lsp_Id;
- 01030 <span class="keywordtype">int</span> inLabel = rsb->inLabelVector[index];
- 01031
- 01032 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> << <span class="stringliteral">"removing filter (lspid="</span> << lspid << <span class="stringliteral">")"</span> << endl;
- 01033
- 01034 <span class="keywordflow">if</span> (inLabel != -1)
- 01035 lt->removeLibEntry(inLabel);
- 01036
- 01037 rsb->FlowDescriptor.erase(rsb->FlowDescriptor.begin() + index);
- 01038 rsb->inLabelVector.erase(rsb->inLabelVector.begin() + index);
- 01039
- 01040 scheduleCommitTimer(rsb);
- 01041 }
- </pre></div>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="b30" doxytag="RSVP::scheduleCommitTimer"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">void RSVP::scheduleCommitTimer </td>
- <td class="md" valign="top">( </td>
- <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> * </td>
- <td class="mdname1" valign="top" nowrap> <em>rsbEle</em> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [protected]</code></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- <div class="fragment"><pre class="fragment">02055 {
- 02056 ASSERT(rsbEle);
- 02057
- 02058 <span class="keywordflow">if</span> (rsbEle->commitTimerMsg->isScheduled())
- 02059 cancelEvent(rsbEle->commitTimerMsg);
- 02060
- 02061 scheduleAt(simTime(), rsbEle->commitTimerMsg);
- 02062 }
- </pre></div>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="b29" doxytag="RSVP::scheduleRefreshTimer"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">void RSVP::scheduleRefreshTimer </td>
- <td class="md" valign="top">( </td>
- <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> * </td>
- <td class="mdname" nowrap> <em>rsbEle</em>, </td>
- </tr>
- <tr>
- <td class="md" nowrap align="right"></td>
- <td class="md"></td>
- <td class="md" nowrap>double </td>
- <td class="mdname" nowrap> <em>delay</em></td>
- </tr>
- <tr>
- <td class="md"></td>
- <td class="md">) </td>
- <td class="md" colspan="2"><code> [protected]</code></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- <div class="fragment"><pre class="fragment">02045 {
- 02046 ASSERT(rsbEle);
- 02047
- 02048 <span class="keywordflow">if</span> (rsbEle->refreshTimerMsg->isScheduled())
- 02049 cancelEvent(rsbEle->refreshTimerMsg);
- 02050
- 02051 scheduleAt(simTime() + delay, rsbEle->refreshTimerMsg);
- 02052 }
- </pre></div>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="b27" doxytag="RSVP::scheduleRefreshTimer"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">void RSVP::scheduleRefreshTimer </td>
- <td class="md" valign="top">( </td>
- <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> * </td>
- <td class="mdname" nowrap> <em>psbEle</em>, </td>
- </tr>
- <tr>
- <td class="md" nowrap align="right"></td>
- <td class="md"></td>
- <td class="md" nowrap>double </td>
- <td class="mdname" nowrap> <em>delay</em></td>
- </tr>
- <tr>
- <td class="md"></td>
- <td class="md">) </td>
- <td class="md" colspan="2"><code> [protected]</code></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- <div class="fragment"><pre class="fragment">02017 {
- 02018 ASSERT(psbEle);
- 02019
- 02020 <span class="keywordflow">if</span> (psbEle->OutInterface.isUnspecified())
- 02021 <span class="keywordflow">return</span>;
- 02022
- 02023 <span class="keywordflow">if</span> (!<a class="code" href="class_r_s_v_p.html#r4">tedmod</a>-><a class="code" href="class_t_e_d.html#z61_5">isLocalAddress</a>(psbEle->OutInterface))
- 02024 <span class="keywordflow">return</span>;
- 02025
- 02026 <span class="keywordflow">if</span> (psbEle->timerMsg->isScheduled())
- 02027 cancelEvent(psbEle->timerMsg);
- 02028
- 02029 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> << <span class="stringliteral">"scheduling PSB "</span> << psbEle->id << <span class="stringliteral">" refresh "</span> << (simTime() + delay) << endl;
- 02030
- 02031 scheduleAt(simTime() + delay, psbEle->timerMsg);
- 02032 }
- </pre></div>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="b31" doxytag="RSVP::scheduleTimeout"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">void RSVP::scheduleTimeout </td>
- <td class="md" valign="top">( </td>
- <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> * </td>
- <td class="mdname1" valign="top" nowrap> <em>rsbEle</em> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [protected]</code></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- <div class="fragment"><pre class="fragment">02035 {
- 02036 ASSERT(rsbEle);
- 02037
- 02038 <span class="keywordflow">if</span> (rsbEle->timeoutMsg->isScheduled())
- 02039 cancelEvent(rsbEle->timeoutMsg);
- 02040
- 02041 scheduleAt(simTime() + RSB_TIMEOUT_INTERVAL, rsbEle->timeoutMsg);
- 02042 }
- </pre></div>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="b28" doxytag="RSVP::scheduleTimeout"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">void RSVP::scheduleTimeout </td>
- <td class="md" valign="top">( </td>
- <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> * </td>
- <td class="mdname1" valign="top" nowrap> <em>psbEle</em> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [protected]</code></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- <div class="fragment"><pre class="fragment">02007 {
- 02008 ASSERT(psbEle);
- 02009
- 02010 <span class="keywordflow">if</span> (psbEle->timeoutMsg->isScheduled())
- 02011 cancelEvent(psbEle->timeoutMsg);
- 02012
- 02013 scheduleAt(simTime() + PSB_TIMEOUT_INTERVAL, psbEle->timeoutMsg);
- 02014 }
- </pre></div>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="b33" doxytag="RSVP::sendPathErrorMessage"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">void RSVP::sendPathErrorMessage </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top"><a class="el" href="struct_session_obj__t.html">SessionObj_t</a> </td>
- <td class="mdname" nowrap> <em>session</em>, </td>
- </tr>
- <tr>
- <td class="md" nowrap align="right"></td>
- <td class="md"></td>
- <td class="md" nowrap><a class="el" href="struct_sender_template_obj__t.html">SenderTemplateObj_t</a> </td>
- <td class="mdname" nowrap> <em>sender</em>, </td>
- </tr>
- <tr>
- <td class="md" nowrap align="right"></td>
- <td class="md"></td>
- <td class="md" nowrap><a class="el" href="struct_sender_tspec_obj__t.html">SenderTspecObj_t</a> </td>
- <td class="mdname" nowrap> <em>tspec</em>, </td>
- </tr>
- <tr>
- <td class="md" nowrap align="right"></td>
- <td class="md"></td>
- <td class="md" nowrap><a class="el" href="class_i_p_address.html">IPAddress</a> </td>
- <td class="mdname" nowrap> <em>nextHop</em>, </td>
- </tr>
- <tr>
- <td class="md" nowrap align="right"></td>
- <td class="md"></td>
- <td class="md" nowrap>int </td>
- <td class="mdname" nowrap> <em>errCode</em></td>
- </tr>
- <tr>
- <td class="md"></td>
- <td class="md">) </td>
- <td class="md" colspan="2"><code> [protected]</code></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- <div class="fragment"><pre class="fragment">01975 {
- 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>);
- 01977 msg-><a class="code" href="class_r_s_v_p_path_error___base.html#a8">setErrorCode</a>(errCode);
- 01978 msg-><a class="code" href="class_r_s_v_p_path_error___base.html#a6">setErrorNode</a>(routerId);
- 01979 msg-><a class="code" href="class_r_s_v_p_packet___base.html#a6">setSession</a>(session);
- 01980 msg-><a class="code" href="class_r_s_v_p_path_error.html#a8">setSenderTemplate</a>(sender);
- 01981 msg-><a class="code" href="class_r_s_v_p_path_error.html#a10">setSenderTspec</a>(tspec);
- 01982
- 01983 <span class="keywordtype">int</span> length = 52;
- 01984
- 01985 <span class="comment">// see comment elsewhere (in TED.cc)</span>
- 01986 length /= 10;
- 01987
- 01988 msg->setByteLength(length);
- 01989
- 01990 <a class="code" href="class_r_s_v_p.html#b43">sendToIP</a>(msg, nextHop);
- 01991 }
- </pre></div>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="b32" doxytag="RSVP::sendPathErrorMessage"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">void RSVP::sendPathErrorMessage </td>
- <td class="md" valign="top">( </td>
- <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> * </td>
- <td class="mdname" nowrap> <em>psb</em>, </td>
- </tr>
- <tr>
- <td class="md" nowrap align="right"></td>
- <td class="md"></td>
- <td class="md" nowrap>int </td>
- <td class="mdname" nowrap> <em>errCode</em></td>
- </tr>
- <tr>
- <td class="md"></td>
- <td class="md">) </td>
- <td class="md" colspan="2"><code> [protected]</code></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- <div class="fragment"><pre class="fragment">01970 {
- 01971 <a class="code" href="class_r_s_v_p.html#b32">sendPathErrorMessage</a>(psb->Session_Object, psb->Sender_Template_Object, psb->Sender_Tspec_Object, psb->Previous_Hop_Address, errCode);
- 01972 }
- </pre></div>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="b35" doxytag="RSVP::sendPathNotify"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">void RSVP::sendPathNotify </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top">int </td>
- <td class="mdname" nowrap> <em>handler</em>, </td>
- </tr>
- <tr>
- <td class="md" nowrap align="right"></td>
- <td class="md"></td>
- <td class="md" nowrap>const <a class="el" href="struct_session_obj__t.html">SessionObj_t</a> & </td>
- <td class="mdname" nowrap> <em>session</em>, </td>
- </tr>
- <tr>
- <td class="md" nowrap align="right"></td>
- <td class="md"></td>
- <td class="md" nowrap>const <a class="el" href="struct_sender_template_obj__t.html">SenderTemplateObj_t</a> & </td>
- <td class="mdname" nowrap> <em>sender</em>, </td>
- </tr>
- <tr>
- <td class="md" nowrap align="right"></td>
- <td class="md"></td>
- <td class="md" nowrap>int </td>
- <td class="mdname" nowrap> <em>status</em>, </td>
- </tr>
- <tr>
- <td class="md" nowrap align="right"></td>
- <td class="md"></td>
- <td class="md" nowrap>double </td>
- <td class="mdname" nowrap> <em>delay</em></td>
- </tr>
- <tr>
- <td class="md"></td>
- <td class="md">) </td>
- <td class="md" colspan="2"><code> [protected]</code></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- <div class="fragment"><pre class="fragment">00388 {
- 00389 <span class="keywordflow">if</span> (handler < 0)
- 00390 return; <span class="comment">// handler not specified</span>
- 00391
- 00392 cModule *mod = simulation.module(handler);
- 00393
- 00394 if (!mod)
- 00395 return; <span class="comment">// handler no longer exists</span>
- 00396
- 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");
- 00398
- 00399 msg->setSession(session);
- 00400 msg->setSender(sender);
- 00401 msg->setStatus(status);
- 00402
- 00403 if (handler == <span class="keywordtype">id</span>())
- 00404 scheduleAt(simTime() + delay, msg);
- 00405 else
- 00406 sendDirect(msg, delay, mod, "from_rsvp");
- 00407 }
- </pre></div>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="b34" doxytag="RSVP::sendPathTearMessage"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">void RSVP::sendPathTearMessage </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top"><a class="el" href="class_i_p_address.html">IPAddress</a> </td>
- <td class="mdname" nowrap> <em>peerIP</em>, </td>
- </tr>
- <tr>
- <td class="md" nowrap align="right"></td>
- <td class="md"></td>
- <td class="md" nowrap>const <a class="el" href="struct_session_obj__t.html">SessionObj_t</a> & </td>
- <td class="mdname" nowrap> <em>session</em>, </td>
- </tr>
- <tr>
- <td class="md" nowrap align="right"></td>
- <td class="md"></td>
- <td class="md" nowrap>const <a class="el" href="struct_sender_template_obj__t.html">SenderTemplateObj_t</a> & </td>
- <td class="mdname" nowrap> <em>sender</em>, </td>
- </tr>
- <tr>
- <td class="md" nowrap align="right"></td>
- <td class="md"></td>
- <td class="md" nowrap><a class="el" href="class_i_p_address.html">IPAddress</a> </td>
- <td class="mdname" nowrap> <em>LIH</em>, </td>
- </tr>
- <tr>
- <td class="md" nowrap align="right"></td>
- <td class="md"></td>
- <td class="md" nowrap><a class="el" href="class_i_p_address.html">IPAddress</a> </td>
- <td class="mdname" nowrap> <em>NHOP</em>, </td>
- </tr>
- <tr>
- <td class="md" nowrap align="right"></td>
- <td class="md"></td>
- <td class="md" nowrap>bool </td>
- <td class="mdname" nowrap> <em>force</em></td>
- </tr>
- <tr>
- <td class="md"></td>
- <td class="md">) </td>
- <td class="md" colspan="2"><code> [protected]</code></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- <div class="fragment"><pre class="fragment">01952 {
- 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>);
- 01954 msg-><a class="code" href="class_r_s_v_p_path_tear___base.html#a9">setSenderTemplate</a>(sender);
- 01955 msg-><a class="code" href="class_r_s_v_p_packet___base.html#a6">setSession</a>(session);
- 01956 <a class="code" href="struct_rsvp_hop_obj__t.html">RsvpHopObj_t</a> hop;
- 01957 hop.<a class="code" href="struct_rsvp_hop_obj__t.html#o1">Logical_Interface_Handle</a> = LIH;
- 01958 hop.<a class="code" href="struct_rsvp_hop_obj__t.html#o0">Next_Hop_Address</a> = NHOP;
- 01959 msg-><a class="code" href="class_r_s_v_p_path_tear___base.html#a6">setHop</a>(hop);
- 01960 msg-><a class="code" href="class_r_s_v_p_path_tear___base.html#a11">setForce</a>(force);
- 01961
- 01962 <span class="keywordtype">int</span> length = 44;
- 01963
- 01964 msg->setByteLength(length);
- 01965
- 01966 <a class="code" href="class_r_s_v_p.html#b43">sendToIP</a>(msg, peerIP);
- 01967 }
- </pre></div>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="b43" doxytag="RSVP::sendToIP"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">void RSVP::sendToIP </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top">cMessage * </td>
- <td class="mdname" nowrap> <em>msg</em>, </td>
- </tr>
- <tr>
- <td class="md" nowrap align="right"></td>
- <td class="md"></td>
- <td class="md" nowrap><a class="el" href="class_i_p_address.html">IPAddress</a> </td>
- <td class="mdname" nowrap> <em>destAddr</em></td>
- </tr>
- <tr>
- <td class="md"></td>
- <td class="md">) </td>
- <td class="md" colspan="2"><code> [protected]</code></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- <div class="fragment"><pre class="fragment">01995 {
- 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>();
- 01997 controlInfo-><a class="code" href="class_i_p_control_info___base.html#a5">setDestAddr</a>(destAddr);
- 01998 controlInfo-><a class="code" href="class_i_p_control_info___base.html#a12">setProtocol</a>(IP_PROT_RSVP);
- 01999 msg->setControlInfo(controlInfo);
- 02000
- 02001 msg->addPar(<span class="stringliteral">"color"</span>) = <a class="code" href="_r_s_v_p_packet_8h.html#a0">RSVP_TRAFFIC</a>;
- 02002
- 02003 send(msg, <span class="stringliteral">"to_ip"</span>);
- 02004 }
- </pre></div>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="b36" doxytag="RSVP::setupHello"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">void RSVP::setupHello </td>
- <td class="md" valign="top">( </td>
- <td class="mdname1" valign="top" nowrap> </td>
- <td class="md" valign="top"> ) </td>
- <td class="md" nowrap><code> [protected]</code></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- <div class="fragment"><pre class="fragment">00324 {
- 00325 <a class="code" href="class_r_s_v_p.html#r1">helloInterval</a> = par(<span class="stringliteral">"helloInterval"</span>).doubleValue();
- 00326 <a class="code" href="class_r_s_v_p.html#r2">helloTimeout</a> = par(<span class="stringliteral">"helloTimeout"</span>).doubleValue();
- 00327
- 00328 cStringTokenizer tokenizer(par(<span class="stringliteral">"peers"</span>));
- 00329 <span class="keyword">const</span> <span class="keywordtype">char</span> *token;
- 00330 <span class="keywordflow">while</span> ((token = tokenizer.nextToken())!=NULL)
- 00331 {
- 00332 ASSERT(<a class="code" href="class_r_s_v_p.html#r6">ift</a>-><a class="code" href="class_interface_table.html#a9">interfaceByName</a>(token));
- 00333
- 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>-><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>-><a class="code" href="class_interface_table.html#a9">interfaceByName</a>(token)-><a class="code" href="class_interface_entry.html#a33">ipv4</a>()-><a class="code" href="class_i_pv4_interface_data.html#a4">inetAddress</a>());
- 00335
- 00336 HelloState_t h;
- 00337
- 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>);
- 00339 h.timer->setPeer(peer);
- 00340
- 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>);
- 00342 h.timeout->setPeer(peer);
- 00343
- 00344 h.peer = peer;
- 00345
- 00346 <span class="keywordflow">if</span> (helloInterval > 0.0)
- 00347 {
- 00348 <span class="comment">// peer is down until we know he is ok</span>
- 00349
- 00350 h.ok = <span class="keyword">false</span>;
- 00351 }
- 00352 <span class="keywordflow">else</span>
- 00353 {
- 00354 <span class="comment">// don't use HELLO at all, consider all peers running all the time</span>
- 00355
- 00356 h.ok = <span class="keyword">true</span>;
- 00357 }
- 00358
- 00359 <a class="code" href="class_r_s_v_p.html#r16">HelloList</a>.push_back(h);
- 00360
- 00361 <span class="keywordflow">if</span> (helloInterval > 0.0)
- 00362 {
- 00363 <a class="code" href="class_r_s_v_p.html#b37">startHello</a>(peer, exponential(helloInterval));
- 00364 }
- 00365 }
- 00366 }
- </pre></div>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="b37" doxytag="RSVP::startHello"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">void RSVP::startHello </td>
- <td class="md" valign="top">( </td>
- <td class="md" nowrap valign="top"><a class="el" href="class_i_p_address.html">IPAddress</a> </td>
- <td class="mdname" nowrap> <em>peer</em>, </td>
- </tr>
- <tr>
- <td class="md" nowrap align="right"></td>
- <td class="md"></td>
- <td class="md" nowrap>double </td>
- <td class="mdname" nowrap> <em>delay</em></td>
- </tr>
- <tr>
- <td class="md"></td>
- <td class="md">) </td>
- <td class="md" colspan="2"><code> [protected]</code></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- <div class="fragment"><pre class="fragment">00369 {
- 00370 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> << <span class="stringliteral">"scheduling hello start in "</span> << delay << <span class="stringliteral">" seconds"</span> << endl;
- 00371
- 00372 HelloState_t *h = <a class="code" href="class_r_s_v_p.html#b51">findHello</a>(peer);
- 00373 ASSERT(h);
- 00374
- 00375 ASSERT(!h->timer->isScheduled());
- 00376 ASSERT(!h->timeout->isScheduled());
- 00377 ASSERT(!h->ok);
- 00378
- 00379 h-><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>;
- 00380 h-><a class="code" href="struct_r_s_v_p_1_1_hello_state__t.html#o2">dstInstance</a> = 0;
- 00381 h-><a class="code" href="struct_r_s_v_p_1_1_hello_state__t.html#o5">request</a> = <span class="keyword">true</span>;
- 00382 h-><a class="code" href="struct_r_s_v_p_1_1_hello_state__t.html#o6">ack</a> = <span class="keyword">false</span>;
- 00383
- 00384 scheduleAt(simTime() + delay, h->timer);
- 00385 }
- </pre></div>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="b20" doxytag="RSVP::updateRSB"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">void RSVP::updateRSB </td>
- <td class="md" valign="top">( </td>
- <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> * </td>
- <td class="mdname" nowrap> <em>rsb</em>, </td>
- </tr>
- <tr>
- <td class="md" nowrap align="right"></td>
- <td class="md"></td>
- <td class="md" nowrap><a class="el" href="class_r_s_v_p_resv_msg.html">RSVPResvMsg</a> * </td>
- <td class="mdname" nowrap> <em>msg</em></td>
- </tr>
- <tr>
- <td class="md"></td>
- <td class="md">) </td>
- <td class="md" colspan="2"><code> [protected]</code></td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- <div class="fragment"><pre class="fragment">00978 {
- 00979 ASSERT(rsb);
- 00980
- 00981 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> k = 0; k < msg->getFlowDescriptor().size(); k++)
- 00982 {
- 00983 <a class="code" href="struct_flow_descriptor__t.html">FlowDescriptor_t</a> flow = msg-><a class="code" href="class_r_s_v_p_resv_msg___base.html#a7">getFlowDescriptor</a>()[k];
- 00984
- 00985 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> m;
- 00986 <span class="keywordflow">for</span> (m = 0; m < rsb->FlowDescriptor.size(); m++)
- 00987 {
- 00988 <span class="keywordflow">if</span> (rsb->FlowDescriptor[m].Filter_Spec_Object == flow.<a class="code" href="struct_flow_descriptor__t.html#o1">Filter_Spec_Object</a>)
- 00989 {
- 00990 <span class="comment">// sender found</span>
- 00991 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> << <span class="stringliteral">"sender (lspid="</span> << 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> << <span class="stringliteral">") found in RSB"</span> << endl;
- 00992
- 00993 <span class="keywordflow">if</span> (rsb->FlowDescriptor[m].label != flow.<a class="code" href="struct_flow_descriptor__t.html#o3">label</a>)
- 00994 {
- 00995 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> << <span class="stringliteral">"label modified (new label="</span> << flow.<a class="code" href="struct_flow_descriptor__t.html#o3">label</a> << <span class="stringliteral">")"</span> << endl;
- 00996
- 00997 rsb->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>;
- 00998
- 00999 <span class="comment">// label must be updated in lib table</span>
- 01000
- 01001 <a class="code" href="class_r_s_v_p.html#b30">scheduleCommitTimer</a>(rsb);
- 01002 }
- 01003
- 01004 <span class="keywordflow">break</span>;
- 01005 }
- 01006 }
- 01007 <span class="keywordflow">if</span> (m == rsb->FlowDescriptor.size())
- 01008 {
- 01009 <span class="comment">// sender not found</span>
- 01010 <a class="code" href="_i_n_e_t_defs_8h.html#a1">EV</a> << <span class="stringliteral">"sender (lspid="</span> << 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> << <span class="stringliteral">") not found in RSB, adding..."</span> << endl;
- 01011
- 01012 rsb->FlowDescriptor.push_back(flow);
- 01013 rsb->inLabelVector.push_back(-1);
- 01014
- 01015 <span class="comment">// resv is new and must be forwarded</span>
- 01016
- 01017 <a class="code" href="class_r_s_v_p.html#b30">scheduleCommitTimer</a>(rsb);
- 01018 <a class="code" href="class_r_s_v_p.html#b27">scheduleRefreshTimer</a>(rsb, 0.0);
- 01019 }
- 01020 }
- 01021 }
- </pre></div>
- <p>
- </td>
- </tr>
- </table>
- <hr><h2>Friends And Related Function Documentation</h2>
- <a class="anchor" name="n0" doxytag="RSVP::SimpleClassifier"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">friend class <a class="el" href="class_simple_classifier.html">SimpleClassifier</a><code> [friend]</code> </td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- </td>
- </tr>
- </table>
- <hr><h2>Member Data Documentation</h2>
- <a class="anchor" name="r1" doxytag="RSVP::helloInterval"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <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>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="r16" doxytag="RSVP::HelloList"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <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>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="r2" doxytag="RSVP::helloTimeout"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <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>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="r6" doxytag="RSVP::ift"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <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>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="r7" doxytag="RSVP::lt"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <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>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="r10" doxytag="RSVP::maxPsbId"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <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>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="r11" doxytag="RSVP::maxRsbId"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <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>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="r12" doxytag="RSVP::maxSrcInstance"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <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>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="r8" doxytag="RSVP::nb"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <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>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="r14" doxytag="RSVP::PSBList"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <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>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="r3" doxytag="RSVP::retryInterval"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <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>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="r13" doxytag="RSVP::routerId"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <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>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="r9" doxytag="RSVP::rpct"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <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>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="r15" doxytag="RSVP::RSBList"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <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>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="r5" doxytag="RSVP::rt"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <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>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="r4" doxytag="RSVP::tedmod"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <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>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- </td>
- </tr>
- </table>
- <a class="anchor" name="r0" doxytag="RSVP::traffic"></a><p>
- <table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">std::vector<<a class="el" href="struct_r_s_v_p_1_1traffic__session__t.html">traffic_session_t</a>> <a class="el" href="class_r_s_v_p.html#r0">RSVP::traffic</a><code> [private]</code> </td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- <table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
-
- </td>
- <td>
- <p>
- </td>
- </tr>
- </table>
- <hr>The documentation for this class was generated from the following files:<ul>
- <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>
- <hr size="1"><address style="align: right;"><small>Generated on Thu Oct 19 18:22:28 2006 for INET Framework for OMNeT++/OMNEST by
- <a href="http://www.doxygen.org/index.html">
- <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.0 </small></address>
- </body>
- </html>