idnits 2.17.00 (12 Aug 2021) /tmp/idnits8102/draft-fu-nsis-qos-nslp-statemachine-06.txt: Checking boilerplate required by RFC 5378 and the IETF Trust (see https://trustee.ietf.org/license-info): ---------------------------------------------------------------------------- ** It looks like you're using RFC 3978 boilerplate. You should update this to the boilerplate described in the IETF Trust License Policy document (see https://trustee.ietf.org/license-info), which is required now. -- Found old boilerplate from RFC 3978, Section 5.1 on line 18. -- Found old boilerplate from RFC 3978, Section 5.5, updated by RFC 4748 on line 1639. -- Found old boilerplate from RFC 3979, Section 5, paragraph 1 on line 1650. -- Found old boilerplate from RFC 3979, Section 5, paragraph 2 on line 1657. -- Found old boilerplate from RFC 3979, Section 5, paragraph 3 on line 1663. Checking nits according to https://www.ietf.org/id-info/1id-guidelines.txt: ---------------------------------------------------------------------------- == No 'Intended status' indicated for this document; assuming Proposed Standard Checking nits according to https://www.ietf.org/id-info/checklist : ---------------------------------------------------------------------------- ** The document seems to lack an IANA Considerations section. (See Section 2.2 of https://www.ietf.org/id-info/checklist for how to handle the case when there are no actions for IANA.) ** There are 49 instances of too long lines in the document, the longest one being 18 characters in excess of 72. Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the IETF Trust Copyright Line does not match the current year -- The document seems to lack a disclaimer for pre-RFC5378 work, but may have content which was first submitted before 10 November 2008. If you have contacted all the original authors and they are all willing to grant the BCP78 rights to the IETF Trust, then this is fine, and you can ignore this comment. If not, you may need to add the pre-RFC5378 disclaimer. (See the Legal Provisions document at https://trustee.ietf.org/license-info for more information.) -- The document date (October 4, 2007) is 5336 days in the past. Is this intentional? Checking references for intended status: Proposed Standard ---------------------------------------------------------------------------- (See RFCs 3967 and 4897 for information about using normative references to lower-maturity documents in RFCs) == Outdated reference: draft-ietf-nsis-qos-nslp has been published as RFC 5974 ** Downref: Normative reference to an Experimental draft: draft-ietf-nsis-qos-nslp (ref. '1') Summary: 4 errors (**), 0 flaws (~~), 3 warnings (==), 7 comments (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 2 NSIS X. Fu 3 B. Schloer 4 Internet-Draft Univ. Goettingen 5 Expiration Date: April 3, 2008 H. Tschofenig 6 T. Tsenov 7 Nokia Siemens Networks 8 October 4, 2007 10 QoS NSLP State Machine 11 draft-fu-nsis-qos-nslp-statemachine-06.txt 13 Status of this Memo 15 By submitting this Internet-Draft, each author represents that any 16 applicable patent or other IPR claims of which he or she is aware 17 have been or will be disclosed, and any of which he or she becomes 18 aware will be disclosed, in accordance with Section 6 of BCP 79. 20 Internet-Drafts are working documents of the Internet Engineering 21 Task Force (IETF), its areas, and its working groups. Note that 22 other groups may also distribute working documents as Internet- 23 Drafts. 25 Internet-Drafts are draft documents valid for a maximum of six months 26 and may be updated, replaced, or obsoleted by other documents at any 27 time. It is inappropriate to use Internet-Drafts as reference 28 material or to cite them other than as "work in progress." 30 The list of current Internet-Drafts can be accessed at 31 http://www.ietf.org/ietf/1id-abstracts.txt. 33 The list of Internet-Draft Shadow Directories can be accessed at 34 http://www.ietf.org/shadow.html. 36 This Internet-Draft will expire on April 3, 2008. 38 Copyright Notice 40 Copyright (C) The IETF Trust (2007). 42 Abstract 44 This document describes a state machine for the NSIS Signaling Layer 45 Protocol for Quality-of-Service signaling (QoS NSLP). A combined 46 state machine for QoS NSLP entities at different locations of a flow 47 path is presented in order to illustrate how QoS NSLP may be 48 implemented. 50 Table of Contents 52 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 53 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . 3 54 3. Notational conventions used in state diagrams . . . . . . . 3 55 4. State Machine Symbols . . . . . . . . . . . . . . . . . . . 5 56 5. Common Rules . . . . . . . . . . . . . . . . . . . . . . . . 7 57 5.1 Common Procedures . . . . . . . . . . . . . . . . . . . . 7 58 5.2 Common Variables . . . . . . . . . . . . . . . . . . . . . 7 59 5.3 Events . . . . . . . . . . . . . . . . . . . . . . . . . 9 60 5.4 Assumptions . . . . . . . . . . . . . . . . . . . . . . . 9 61 6. Basic State Machine Concept . . . . . . . . . . . . . . . . 11 62 6.1 The QoS NSLP Daemon . . . . . . . . . . . . . . . . . . . 11 63 6.2 States, Events and Callback Functions . . . . . . . . . . 12 64 6.3 Timer . . . . . . . . . . . . . . . . . . . . . . . . . . 13 65 6.4 The Toggle Flag . . . . . . . . . . . . . . . . . . . . . 13 66 7. State Machine for QoS NSLP nodes . . . . . . . . . . . . . . 13 67 7.1 State ST_IDLE . . . . . . . . . . . . . . . . . . . . . . 14 68 7.2 State ST_WR . . . . . . . . . . . . . . . . . . . . . . 16 69 7.3 State ST_INST . . . . . . . . . . . . . . . . . . . . . . 19 70 8 Actions and Transitions . . . . . . . . . . . . . . . . . . . 23 71 8.1 State ST_IDLE . . . . . . . . . . . . . . . . . . . . . . 23 72 8.2 State ST_WR . . . . . . . . . . . . . . . . . . . . . . 24 73 8.3 State ST_INST . . . . . . . . . . . . . . . . . . . . . . 26 74 9. Security Considerations . . . . . . . . . . . . . . . . . . 27 75 10. Open Issues . . . . . . . . . . . . . . . . . . . . . . . 28 76 11. Change History . . . . . . . . . . . . . . . . . . . . . . 28 77 12. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . 29 78 13. References . . . . . . . . . . . . . . . . . . . . . . . . . 30 79 13.1 Normative References . . . . . . . . . . . . . . . . . . 30 80 13.2 Informative References . . . . . . . . . . . . . . . . . 30 81 Appendix A. ASCII versions of the state diagrams . . . . . . . . 31 82 A.1 State ST_IDLE . . . . . . . . . . . . . . . . . . . . . 31 83 A.2 State ST_WR . . . . . . . . . . . . . . . . . . . . . 33 84 A.3 State ST_INST . . . . . . . . . . . . . . . . . . . . . 36 85 A.4 Commonly used functions . . . . . . . . . . . . . . . 41 86 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . 47 87 Intellectual Property and Copyright Statements . . . . . . . 48 89 1. Introduction 91 This document describes a state machine for QoS NSLP [1], trying to 92 show how QoS NSLP can be implemented to support its deployment. The 93 state machine described in this document is illustrative of how the 94 QoS NSLP protocol defined in [1] may be implemented for QoS NSLP 95 nodes in the flow path. Where there are differences [1] are 96 authoritative. The state machine diagrams are informative only. 97 Implementations may achieve the same results using different methods. 99 According to [1], there are several possibilities for QoS NSLP 100 signaling, at least including the following: - end-to-end signaling 101 vs. scoped signaling - sender-initiated signaling vs. receiver- 102 initiated signaling. 104 The messages used in the QoS NSLP protocol can be summarized as 105 follows: 107 Requesting message Responding message 108 ------------------------+--------------------------- 109 RESERVE |None or RESERVE or RESPONSE 110 QUERY |RESERVE or RESPONSE 111 RESPONSE |NONE 112 NOTIFY |NONE 113 ------------------------+--------------------------- 115 2. Terminology 117 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 118 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this 119 document are to be interpreted as described in [2]. 121 3. Notational conventions used in state diagrams 123 The following text is reused from [3] and the state diagrams are 124 based on the conventions specified in [4], Section 8.2.1. Additional 125 state machine details are taken from [5]. 127 The complete text is reproduced here: 129 State diagrams are used to represent the operation of the protocol by 130 a number of cooperating state machines each comprising a group of 131 connected, mutually exclusive states. Only one state of each machine 132 can be active at any given time. 134 All permissible transitions between states are represented by arrows, 135 the arrowhead denoting the direction of the possible transition. 136 Labels attached to arrows denote the condition(s) that must be met in 137 order for the transition to take place. All conditions are 138 expressions that evaluate to TRUE or FALSE; if a condition evaluates 139 to TRUE, then the condition is met. The label UCT denotes an 140 unconditional transition (i.e., UCT always evaluates to TRUE). A 141 transition that is global in nature (i.e., a transition that occurs 142 from any of the possible states if the condition attached to the 143 arrow is met) is denoted by an open arrow; i.e., no specific state is 144 identified as the origin of the transition. When the condition 145 associated with a global transition is met, it supersedes all other 146 exit conditions including UCT. The special global condition BEGIN 147 supersedes all other global conditions, and once asserted remains 148 asserted until all state blocks have executed to the point that 149 variable assignments and other consequences of their execution remain 150 unchanged. 152 On entry to a state, the procedures defined for the state (if any) 153 are executed exactly once, in the order that they appear on the page. 154 Each action is deemed to be atomic; i.e., execution of a procedure 155 completes before the next sequential procedure starts to execute. No 156 procedures execute outside of a state block. The procedures in only 157 one state block execute at a time, even if the conditions for 158 execution of state blocks in different state machines are satisfied, 159 and all procedures in an executing state block complete execution 160 before the transition to and execution of any other state block 161 occurs, i.e., the execution of any state block appears to be atomic 162 with respect to the execution of any other state block and the 163 transition condition to that state from the previous state is TRUE 164 when execution commences. The order of execution of state blocks in 165 different state machines is undefined except as constrained by their 166 transition conditions. A variable that is set to a particular value 167 in a state block retains this value until a subsequent state block 168 executes a procedure that modifies the value. 170 On completion of all of the procedures within a state, all exit 171 conditions for the state (including all conditions associated with 172 global transitions) are evaluated continuously until one of the 173 conditions is met. The label ELSE denotes a transition that occurs if 174 none of the other conditions for transitions from the state are met 175 (i.e., ELSE evaluates to TRUE if all other possible exit conditions 176 from the state evaluate to FALSE). Where two or more exit conditions 177 with the same level of precedence become TRUE simultaneously, the 178 choice as to which exit condition causes the state transition to take 179 place is arbitrary. 181 In addition to the above notation, there are a couple of 182 clarifications specific to this document. First, all boolean 183 variables are initialized to FALSE before the state machine execution 184 begins. Second, the following notational shorthand is specific to 185 this document: 187 = | | ... 189 Execution of a statement of this form will result in 190 having a value of exactly one of the expressions. The logic for 191 which of those expressions gets executed is outside of the state 192 machine and could be environmental, configurable, or based on 193 another state machine such as that of the method. 195 4. State Machine Symbols 197 ( ) 198 Used to force the precedence of operators in Boolean expressions 199 and to delimit the argument(s) of actions within state boxes. 201 ; 202 Used as a terminating delimiter for actions within state boxes. 203 Where a state box contains multiple actions, the order of 204 execution follows the normal English language conventions for 205 reading text. 207 = 208 Assignment action. The value of the expression to the right of the 209 operator is assigned to the variable to the left of the operator. 210 Where this operator is used to define multiple assignments, e.g., 211 a = b = X the action causes the value of the expression following 212 the right-most assignment operator to be assigned to all of the 213 variables that appear to the left of the right-most assignment 214 operator. 216 ! 217 Logical NOT operator. 219 && 220 Logical AND operator. 222 || 223 Logical OR operator. 225 if...then... 226 Conditional action. If the Boolean expression following the if 227 evaluates to TRUE, then the action following the then is executed. 229 { statement 1, ... statement N } 230 Compound statement. Braces are used to group statements that are 231 executed together as if they were a single statement. 233 != 234 Inequality. Evaluates to TRUE if the expression to the left of the 235 operator is not equal in value to the expression to the right. 237 == 238 Equality. Evaluates to TRUE if the expression to the left of the 239 operator is equal in value to the expression to the right. 241 > 242 Greater than. Evaluates to TRUE if the value of the expression to 243 the left of the operator is greater than the value of the 244 expression to the right. 246 <= 247 Less than or equal to. Evaluates to TRUE if the value of the 248 expression to the left of the operator is either less than or 249 equal to the value of the expression to the right. 251 ++ 252 Increment the preceding integer operator by 1. 254 + 255 Arithmetic addition operator. 257 & 258 Bitwise AND operator. 260 5. Common Rules 262 Throughout the document we use terms defined in the [1], such as flow 263 sender, flow receiver, QUERY, RESERVE or RESPONSE. 265 5.1 Common Procedures 267 tx_reserve(): 268 Transmit RESERVE message 270 tx_response(): 271 Transmit RESPONSE message 273 tx_query(): 274 Transmit QUERY message 276 tx_notify(): 277 Transmit NOTIFY message 279 install_qos_state(): 280 Install the local QoS state. 282 delete_qos_state(): 283 Delete the local QoS state. 285 send_info_to_app(): 286 Report information to the application. 288 RMF(): 289 Performs Resource Management Function and returns the following 290 values{AVAIL, NO_AVAIL}. 292 is_local(RII): 293 Checks the RII object of received RESPONSE message if it is 294 requested by current node or other upstream node. Returns values 295 {true, false}. 297 is_local(RSN): 298 Checks The RSN object of the received RESPONSE message if it is 299 requested by current node. Returns values {true, false}. 301 process_query(): 302 Processes a Query message and provides the requested info 304 5.2 Common Variables 306 RII: 308 Request Identification Information (RII) object. 310 RSN: 311 Reservation Sequence Number (RSN) object. 313 INFO: 314 Info_Spec object. Takes values: 315 - 0x02 - Success values 316 - 0x04 - Transient Failure values 318 QSPEC: 319 QoS specification object. 321 T-Flag: 322 Tear flag. Indicates to tear down reservation state. Takes values 323 {true, false}. 325 Q-Flag: 326 Request Reduced Refreshes flag of common message header. Takes 327 values {true, false}. 329 R-Flag: 330 Reserve-Init flag (QUERY) or Replace flag (RESERVE). Indicates a 331 Receiver Initiated Reservation request in a QUERY message or an 332 replacing RESERVE in a RESERVE message. Takes values {true, 333 false}. 335 S-Flag: 336 Scoping flag of common message header. Takes values 337 {true="Next_hop", false="Whole_path"}. 339 setRII: 340 If set a RII object will be included into the message. Takes 341 values {true, false}. 343 ReducedRefresh: 344 Keeps information if Reduced refresh method may be used for 345 refreshing a installed QoS state. Takes value {"On","Off"}. 347 FlowID: 348 Flow ID kept by the installed QoS state. 350 Nodepos: 351 Position of the QoS NSLP node. Takes values {"QNI", "QNE", "QNR"}. 353 Toggle: 354 Flag to indicate whether the direction of a new message has to be 355 changed compared to the direction of a received one. Takes values 356 {true, false}. 358 Direction: 359 Direction, in which the message has to be sent. Takes values 360 {DOWNSTREAM, UPSTREAM}. 362 SII: 363 Source Identification Information entry. Takes values: 364 - CurrSII - SII entry stored for current installed QoS state. 365 (Assumed to be the one for the direction where the message comes 366 from e.g.Upstream/Downstream) 367 - newSII - SII of the received message is different from the SII 368 stored for the current installed QoS state. 370 5.3 Events 372 EV_TG_QUERY: 373 External trigger to send a QUERY message. 375 EV_RX_QUERY: 376 QUERY message received 378 EV_RX_NOTIFY: 379 NOTIFY message received 381 EV_TG_RESERVE: 382 External trigger to send a RESERVE message. 384 EV_RX_RESERVE: 385 RESERVE message received 387 EV_RX_RESPONSE: 388 RESPONSE message received 390 EV_TIMEOUT_RESPONSE: 391 Wait-Response interval timer expiration 393 EV_TIMEOUT_REFRESH: 394 Refresh interval timer expiration 396 EV_TIMEOUT_STATE_LIFETIME: 397 State lifetime timer expiration 399 5.4 Assumptions 401 - For simplification not all included objects in a message are shown. 402 Only those that are significant for the case are shown. The State 403 Machine does not present handling of messages that are not 404 significant for management of the states such as certain NOTIFY 405 and QUERY messages. 406 - The State Machine represents handling of messages of the same 407 Session ID and with no protocol errors. Separate parallel 408 instances of the state machines should handle messages for 409 different Session IDs. 410 - Default message handling should be defined for messages with 411 different Session IDs that have impact on current session state 412 and error messages. This is not included in the current version. 414 6 Basic State Machine Concept 416 6.1 The QoS NSLP Daemon 418 The QoS NSLP Daemon (qosd) listens for incoming messages from the 419 local application and for messages coming over the network from GIST. 420 For each new SessionID (SID) a new State Machine (FSM) is created as 421 shown in the diagram below. 423 Incoming messages from the client application are checked for the 424 type of the message (QUERY or RESERVE) and for the SID. A table is 425 searched for the given SID. If it is not found, a new FSM is created 426 and its address together with the SID is added to the table. If the 427 type of the message is a QUERY with set R-Bit, a Receiver Initiated 428 Reservation is requested and the node position is QNR, in all other 429 cases the node position is QNI. If the SID is found, the address of 430 the FSM is returned. Now the FSM is triggered with the corresponding 431 event of the message (EV_TG_QUERY, EV_TG_RESERVE). If the FSM returns 432 to the qosd in ST_IDLE, it is deleted together with its table entry. 434 For a message arriving from GIST, the procedure is almost the same. 435 The table is searched for the given SID. If it is not found, then the 436 IP-address of the MRI is compared to the local IP-address. If the 437 arriving message is requesting a Receiver Initiated Reservation and 438 the destination address is equal to the local address then the node 439 position is QNR. If the addresses are equal and no Receiver Initiated 440 Reservation is requested then the node position is QNI. If the 441 addresses are not the same, a new FSM for a QNE is created. Also 442 here, the corresponding FSM is triggered with the event according to 443 the arrived message and deleted when returning in ST_IDLE. 445 +-------+ +-------+ +-------+ 446 | | | | | | 447 | FSM 1 | | FSM 2 | | FSM n | 448 | | | | | | 449 +-------+ +-------+ +-------+ 450 \ | / 451 \ | / 452 \ | / 453 \ | / 454 \ | / 455 +-------+ 456 | | 457 | qosd | 458 | | 459 +-------+ 460 Figure 1 462 6.2 States, Events and Callback Functions 464 Three States are defined: ST_IDLE, ST_WR and ST_INST. A new created 465 FSM is starting automatically in ST_IDLE. In this state no 466 reservation state is installed no responses to previously sent 467 messages are expected. In ST_WR the FSM is waiting for a response to 468 a previously sent message, but no reservation state is installed. In 469 ST_INST reservation state has been installed and incoming messages 470 are processed. 472 The following table provides to a given state and a triggered event 473 the function which has to be executed by the FSM. Example: when 474 EV_RX_QUERY is triggered in state ST_IDLE, the function 475 idle__rx_query is executed. 477 +-----------+----------------------------+-------------------------------+ 478 | State | Event | Executed Function | 479 +-----------+----------------------------+-------------------------------+ 480 | ST_IDLE | EV_RX_QUERY | idle__rx_query | 481 | ST_IDLE | EV_RX_NOTIFY | idle__rx_notify | 482 | ST_IDLE | EV_RX_RESERVE | idle__rx_reserve | 483 | ST_IDLE | EV_RX_RESPONSE | idle__rx_response | 484 | ST_IDLE | EV_RX_RMF_MSG | idle__rx_rmf_msg | 485 +-----------+----------------------------+-------------------------------+ 486 | ST_WR | EV_RX_QUERY | wr__rx_query | 487 | ST_WR | EV_RX_NOTIFY | wr__rx_notify | 488 | ST_WR | EV_RX_RESERVE | wr__rx_reserve | 489 | ST_WR | EV_RX_RESPONSE | wr__rx_response | 490 | ST_WR | EV_RX_RMF_MSG | wr__rx_rmf_msg | 491 | ST_WR | EV_TIMEOUT_WAITRESP | wr__timeout_response | 492 | ST_WR | EV_TIMEOUT_STATELIFETIME | wr__timeout_statelifetime | 493 +-----------+----------------------------+-------------------------------+ 494 | ST_INST | EV_RX_QUERY | inst__rx_query | 495 | ST_INST | EV_RX_NOTIFY | inst__rx_notify | 496 | ST_INST | EV_RX_RESERVE | inst__rx_reserve | 497 | ST_INST | EV_RX_RESPONSE | inst__rx_response | 498 | ST_INST | EV_RX_RMF_MSG | inst__rx_rmf_msg | 499 | ST_INST | EV_TIMEOUT_WAITRESP | inst__timeout_response | 500 | ST_INST | EV_TIMEOUT_REFRESH | inst__timeout_refresh | 501 | ST_INST | EV_TIMEOUT_STATELIFETIME | inst__timeout_statelifetime | 502 | ST_INST | EV_SII_CHANGED | inst__sii_changed | 503 | ST_INST | EV_NETWORK_NOTIFICATION | inst__network_notification | 504 +-----------+----------------------------+-------------------------------+ 505 Figure 2 507 6.3 Timer 509 The Response Timer at QNI and QNE is started when a RESPONSE message 510 is expected to a sent QUERY or RESERVE. When a reservation is set up, 511 the Refresh Timer are started at QNI and QNE and the StateLife Timer 512 are started at QNE and QNR. When the Refresh Timer times out, a 513 refreshing RESERVE is sent peer to peer towards the QNR and the 514 Response Timer are started because a confirmation is expected. On 515 arrival the StateLife Timer is restarted. 517 If the confirmation is not sent back, then the refreshing RESERVEs 518 are resent up to MAX_RETRY. After MAX_RETRY has been reached, 519 reservation state is removed and a RESERVE with set T-Flag is sent to 520 the QNR to remove reservation state along the path. When no 521 refreshing RESERVE arrive at QNE and QNR, then the StateLife Timer 522 expires and reservation state is also removed and a RESERVE with set 523 T-Flag is sent towards the QNR. 525 +-----------------+-------------------+-------------------+ 526 | QNI | QNE | QNR | 527 +-----------------+-------------------+-------------------+ 528 | Refresh Timer | Refresh Timer | StateLife Timer | 529 | Response Timer | Response Timer | | 530 | | StateLife Timer | | 531 +-----------------+-------------------+-------------------+ 533 Figure 3 535 6.4 The Toggle Flag 537 The Toggle Flag manipulates the direction of the message. When set, 538 the message is sent in the opposite direction compared to the 539 received one. The boolean operation XOR is used. Example, where true 540 is the toggle flag: DOWNSTREAM XOR true = UPSTREAM (0 XOR 1 = 1). 542 7. State machine 544 The following section presents the state machine diagrams of QoS 545 NSLP. Please note that stateless nodes do not perform transitions to 546 other states than ST_IDLE. A C-like pseudo code example for 547 update_rsn() and for send_rmf() is presented in Appendix A.4. The 548 send_rmf function is located in the RMF code and update_rsn() is part 549 of the FSM code. 551 7.1 State ST_IDLE 553 (see the .pdf version for missing diagram or 554 refer to Appendix A.1 if reading the .txt version) 556 Figure 4 558 (see the .pdf version for missing diagram or 559 refer to Appendix A.1 if reading the .txt version) 561 Figure 5 563 7.2 State ST_WR 565 (see the .pdf version for missing diagram or 566 refer to Appendix A.2 if reading the .txt version) 568 Figure 6 570 (see the .pdf version for missing diagram or 571 refer to Appendix A.2 if reading the .txt version) 573 Figure 7 575 (see the .pdf version for missing diagram or 576 refer to Appendix A.2 if reading the .txt version) 578 Figure 8 580 7.3 State ST_INST 581 (see the .pdf version for missing diagram or 582 refer to Appendix A.3 if reading the .txt version) 584 Figure 9 586 (see the .pdf version for missing diagram or 587 refer to Appendix A.3 if reading the .txt version) 589 Figure 10 591 (see the .pdf version for missing diagram or 592 refer to Appendix A.3 if reading the .txt version) 594 Figure 11 596 (see the .pdf version for missing diagram or 597 refer to Appendix A.3 if reading the .txt version) 599 Figure 12 601 8. Actions and Transitions 603 This chapter describes the operation of the FSM. 605 8.1 State ST_IDLE 607 8.1.1 idle__rx_query 609 This function is executed when a QUERY message has arrived over the 610 network from GIST and the FSM is in State ST_IDLE. If a receiver 611 initiated reservation has been requested and the node position is 612 QNI, Direction is set to upstream and the message is passed to the 613 RMF. Transition is made to ST_WR. In all other cases a resource 614 query has been received, the message is passed to the RMF and 615 transition is done to ST_WR. 617 8.1.2 idle__rx_notify 619 A NOTIFY message has been received. If the node position is not the 620 final destination for this message, it is passed further along the 621 path. 623 8.1.3 idle__rx_reserve 625 A RESERVE from the network in ST_IDLE has arrived. If the T-Flag is 626 set, then the message is passed to the RMF to tear down the 627 reservation. Transition is made to ST_IDLE. 629 In the other case where a reservation request has arrived, Direction 630 is set to UPSTREAM at QNR's. On statefull nodes the state timer is 631 started. In any case the message is passed to the RMF and transition 632 is made to ST_WR. 634 8.1.4 idle__rx_response 636 In ST_IDLE the node is not expecting a RESPONSE message. It is 637 forwarded further to the final destination. The state ST_IDLE is 638 kept. 640 8.1.5 idle__rx_rmf_msg 642 If the RMF is triggering a RESPONSE message and the containing 643 INFO_SPEC object indicates either a reservation failure or that the 644 teardown was successful the message is passed further and transition 645 is done to ST_IDLE. 647 If a QUERY message has been triggered, it is checked whether the R- 648 Flag is set or an RII object is present. In this case the response 649 timer is started and transition is made to ST_WR. If a normal QUERY 650 containing no R-Flag and no RII object has been triggered, no 651 response timer is started and transition is made to ST_IDLE. 653 In case the RMF has triggered a RESERVE message at statefull 654 intermediate nodes the state timer is started. If it contains no RII 655 object, then no response is triggered and the refresh timer is 656 started immediately to frequently refresh the session. If an RII 657 object is included in the message the response timer is started 658 instead of the refresh timer. The message is sent further along the 659 path. 661 At the QNI no state timer is started as this is the node which takes 662 care of the refreshes. It does not receive any refreshes which would 663 restart the state timer. The message is sent further along the path. 665 The QNR is starting only the state timer. As this is the end node it 666 does not propagate the message any further. No responses are expected 667 and no refresh messages will be sent. 669 Transition is made to ST_INST. 671 8.2 State ST_WR 673 8.2.1 wr__rx_query 675 A QUERY message has arrived over the network from GIST and the FSM is 676 in State ST_WR. The message is entirely passed to the RMF using 677 sendrmf(). Transition is made to ST_WR. 679 8.2.2 wr__rx_notify 681 If the node is not the final destination of the NOTIFY message it is 682 sent further along the path and transition is made to ST_WR. 684 8.2.3 wr__rx_reserve 686 If a reserve message with set T-Flag has been received, the message 687 is passed to the RMF to tear down the reservation and to construct a 688 new tearing reserve message. If no confirmation of state removal has 689 been requested, i.e. no RII object is present, transition is done to 690 ST_IDLE. QNR's and stateless nodes also go directly to ST_IDLE. 692 If the RII object in the tearing reserve is present, statefull nodes 693 except QNR's start the state timer for one refresh period and pass 694 the message to the RMF to remove reservation state. Transition is 695 done to ST_WR . 697 If the received message is requesting a reservation the state timer 698 is started. The message is passed to the RMF to install reservation 699 state and transition is made to ST_WR. If the node position is QNR 700 then this is the requested RESERVE message for the Receiver Initiated 701 Reservation. The Response Timer is stopped. The state ST_WR is kept. 703 8.2.4 wr__rx_response 705 In ST_WR a RESPONSE message has arrived. If the node is configured as 706 QNE_Egress the message is forwarded with the BYPASS_STATELESS_ID as 707 nslp_id that stateless nodes do not intercept this message. If an 708 Ingress node receives a response with the BYPASS_STATELESS_ID, the 709 nslp_id is translated to the QOS_NSLP_ID and the message is forwarded 710 up to the requesting node. Normal QNE's just forward the response 711 message. At this point no state transition is done. The relevant 712 checkings follow in the next paragraph. 714 If the received RII is from the local node the response timer is 715 stopped. If there are no more outstanding RII's, either from the 716 local node or from foreign nodes transition is done to ST_IDLE 717 otherwise ST_WR. If the received RII was from a foreign node the same 718 transitions are done depending on the outstanding RII's. For a stored 719 foreign RII no response timer was started and therefore no response 720 timer has to be stopped. 722 8.2.5 wr__rx_rmf_msg 724 See the section 8.1.5 where a RESERVE message has been triggered. 725 Transition is made to ST_INST. 727 8.2.6 wr__timeout_response 729 A Response Timer has timed out while in ST_WR. If the maximum number 730 of retries has been reached, transition is done to ST_IDLE, if no 731 more response timers are pending, otherwise transition is done to 732 ST_WR. If the maximum number of retransmissions has not been reached, 733 then the query message is resent. The response timer is restarted and 734 transition is made to ST_WR. 736 8.2.7 wr__timeout_statelifetime 738 If the state timer in ST_WR times out the confirmation message for 739 state removal has not been sent. In this case no retransmissions of 740 the message is done and transition is done to ST_IDLE after stopping 741 all timers. 743 8.2.8 wr__rx_rmf_msg 745 In ST_WR any triggered message from the RMF is forwarded and the same 746 state is kept. 748 8.3 State ST_INST 750 8.3.1 inst__rx_query 752 See wr__rx_query. Transition is made to ST_INST. 754 8.3.2 inst__rx_notify 756 Reduced Refreshes are the default for refreshing RESERVEs. Notify 757 messages are checked whether the next peer accepts reduced refreshes 758 or not. The state ST_INST is kept. 760 8.3.3 inst__rx_reserve 762 All incoming RESERVEs are checked for their RSN value. if it is 763 smaller than the stored peer RSN the message is rejected. If the 764 value is the same to the stored one the reservation is refreshed. 765 Larger RSN value modify the reservation state. 767 A tearing reserve is passed to the RMF to remove the existing 768 reservation state. If no confirmation is requested, i.e. no RII 769 object is present, transition is done to ST_IDLE. If a confirmation 770 is requested, the state timer is started for one refresh interval and 771 transition is done to ST_WR. 773 If no T_Flag is set the message is passed to the RMF to install or 774 modify the reservation if the RSN value is larger than the stored 775 peer RSN. The state timer is restarted for equal and larger RSN 776 values. The state ST_INST is kept. 778 8.3.4 inst__rx_response 780 In ST_INST a RESPONSE message has arrived. If the node position is 781 QNE and no Scoping Flag is set, then the RESPONSE message is 782 forwarded. If the RII value matches, then the Response Timer is 783 stopped. If the received Error Code of the INFO object is SUCCESS, 784 then the Response Timer is started. Transition is done to ST_INST. 786 If the Error Code is FAILURE, then the reservation state is deleted 787 and pending timers are stopped. Transition is made to ST_IDLE. 789 8.3.5 inst__timeout_response 790 A Response Timer has timed out while in ST_INST. If the maximum 791 number of retries has been reached, then all pending timer are 792 stopped and the RMF is informed to remove existing reservation state. 793 Transition is made to ST_IDLE. If maximum numbers of retransmissions 794 has not been reached, then previously sent message is resent. The 795 Response Timer is restarted and the state ST_INST is kept. 797 8.3.6 inst__timeout_refresh 799 A refreshing RESERVE message is created. If Reduced Refreshes are 800 accepted, no QSPEC object is added. The refresh timer is being 801 restarted. Transition is made to ST_INST. 803 8.3.7 inst__timeout_statelifetime 805 The Statelife Timer timed out in ST_INST. All active timer are 806 stopped and existing reservations are removed. The RMF is informed to 807 teardown reservation state and to trigger a teardown message. 808 Transition is done to ST_IDLE. 810 8.3.8 inst__sii_changed 812 A different SII-Handle indicates that a route change has occurred. A 813 full reserve including QSPEC is sent on the new path. The reservation 814 on the old path is torn down using the old SII-Handle. The state 815 ST_INST is kept. 817 8.3.9 inst__network_notification 819 A network notification from GIST is indicating that a route change 820 has occurred. A full RESERVE including QSPEC is sent on the new path. 821 The state ST_INST is kept. 823 8.3.10 inst__rx_rmf_msg 825 See idle__rx_rmf_msg for details. 827 9. Security Considerations 829 This document does not raise new security considerations. Any 830 security concerns with QoS NSLP are likely reflected in security 831 related NSIS work already (such as [1] or [6]). 833 For the time being, the state machine described in this document does 834 not consider the security aspect of QoS NSLP protocol itself. 836 10. Open Issues 838 This document tries to describe possible states and transitions for 839 QoS NSLP according to its current specification [1], Section 5. We 840 found some issues during the development of the state machines. 842 1. Bi-directional reservation is difficult to support as the state 843 machine becomes quite complex (note at one particular point in 844 time the protocol state engine can be only in one state). 845 2. How to signal unsuccessful reservation for Receiver initiated 846 reservation (No RII included; a resulting Response(RSN) cannot be 847 forwarded further than the next peer). We use NOTIFY message. 848 3. The case of unsuccessful reservation at a QNE node and no RII 849 specified by upstream nodes. According to the spec RESPONSE(RSN) 850 should not be forwarded further than the next peer. Currently we 851 use NOTIFY(RSN) that is sent further to the upstream nodes. 852 4. We assume that handling of QoS state lifetime expiration event is 853 based on the local policy of the node. NOTIFY/Reserve(Ton) 854 messages might be sent to other peers. 855 5. The draft states that RESERVE message MUST be sent only towards 856 the QNR. This is not the case when re-routing procedure is done 857 and RESERVE(Ton) message should be sent from merging QNE node for 858 deleting the old branch. We believe this is towards the QNI. 859 6. Re-routing functionality described in this document is not 860 complete and need further consideration. 862 11. Change History 864 11.1 Changes in Version -01 866 1. Notation of the nodes changed to QNI, QNE and QNR. 867 2. Description of soft state refresh functionality. 868 3. Support of ACK flag in the common header. 869 4. Include of QoS NSLP objects, flags from the common header and 870 entries stored with the installed QoS state in a node: ACK, 871 Replace, RSN, Error_SPEC, QSPEC, FlowID, SII. 872 5. Initial description of Re-routing functionality. 873 6. For support of all listed changes, some notations are changed. 875 11.2 Changes in Version -02 877 1. Switch to .pdf format of the draft and include graphic diagrams. 878 2. Update notation from "Summary refresh" to "Reduced refresh" 879 3. Description of QoS reservation update/upgrade 881 11.3 Changes in Version -03 882 1. Deep review of the state machine architecture 884 11.4 Changes in Version -04 886 1. Reduced the three state machines of QNI, QNE and QNR to one for 887 all nodes. 888 2. Introduced new flags to have a finer control of the direction of 889 the message to be sent. 891 11.5 Changes in Version -05 893 1. Combined ST_WR2 and ST_INST into ST_INST 894 2. Support for Q-Flag in common header 895 3. Explanations on the execution of the State Machine added 897 11.6 Changes in Version -06 899 1. Interaction with RMF added 900 2. Trigger from local application removed 902 12. Acknowledgments 904 The authors would like to thank Sven Van den Bosch and Christian 905 Dickmann for their feedback. 907 13. References 909 13.1. Normative References 911 [1] Manner, J., Karagiannis, G. and McDonald, A., "NSLP for 912 Quality-of-Service Signaling", Internet draft, draft- 913 ietf-nsis-qos-nslp-15 (work in progress), July 2007. 915 [2] Bradner, S., "Key words for use in RFCs to Indicate 916 Requirement Levels", BCP 14, RFC 2119, March 1997. 918 13.2. Informative References 920 [3] Vollbrecht, J., Eronen, P., Petroni, N., and Y. Ohba, 921 "State Machines for Extensible Authentication Protocol 922 (EAP) Peer and Authenticator", RFC 4137, August 2005. 924 [4] Institute of Electrical and Electronics Engineers, "DRAFT 925 Standard for Local and Metropolitan Area Networks: Port- 926 Based 927 Network Access Control (Revision)", IEEE 802-1X-REV/D11, 928 July 2004. 930 [5] Ohba, Y., "State Machines for Protocol for Carrying 931 Authentication for Network Access (PANA)", 932 draft-ohba-pana-statemachine-01 (work in progress), 933 February 2005. 935 [6] Tschofenig, H. and D. Kroeselberg, "Security Threats for 936 NSIS", RFC 4081, June 2005. 938 Appendix A. ASCII versions of state diagrams 940 This appendix contains the state diagrams in ASCII format. Please use 941 the PDF version whenever possible: it is much easier to understand. 943 The notation is as follows: for each state there is a separate table 944 that lists in each row: 945 - an event that triggers a transition, 946 - actions taken as a result of the incoming event, 947 - and the new state at which the transitions ends. 949 A.1. State ST_IDLE 951 ST_IDLE::EV_RX_QUERY 952 +---------------------------------------------------------+-----------+ 953 | Action | new State | 954 +---------------------------------------------------------+-----------+ 955 | | | 956 | if(!(R-Flag && QNI)) { | ST_WR | 957 | sendrmf(); | | 958 | } | | 959 | | | 960 +---------------------------------------------------------+-----------+ 961 | | | 962 | if(R-Flag && QNI) { | ST_WR | 963 | Direction=UPSTREAM; | | 964 | sendrmf(); | | 965 | } | | 966 | | | 967 +---------------------------------------------------------+-----------+ 969 Figure 13 971 ST_IDLE::EV_RX_NOTIFY 972 +---------------------------------------------------------+-----------+ 973 | Action | new State | 974 +---------------------------------------------------------+-----------+ 975 | | | 976 | if(!QNI) tx_notify(Toggle=false); | ST_IDLE | 977 | | | 978 +---------------------------------------------------------+-----------+ 980 Figure 14 982 ST_IDLE::EV_RX_RESERVE 983 +---------------------------------------------------------+-----------+ 984 | Action | new State | 985 +---------------------------------------------------------+-----------+ 986 | | | 987 | if(T-Flag) sendrmf(); | ST_IDLE | 988 | | | 989 +---------------------------------------------------------+-----------+ 990 | | | 991 | if(!T-Flag) { | ST_WR | 992 | if(QNR) { | | 993 | Direction=UPSTREAM; | | 994 | startStateTimer(); | | 995 | sendrmf(); | | 996 | } | | 997 | | | 998 +---------------------------------------------------------+-----------+ 1000 Figure 15 1002 ST_IDLE::EV_RX_RESPONSE 1003 +---------------------------------------------------------+-----------+ 1004 | Action | new State | 1005 +---------------------------------------------------------+-----------+ 1006 | | | 1007 | if(!QNI) tx_response(Toggle=false); | ST_IDLE | 1008 | | | 1009 +---------------------------------------------------------+-----------+ 1011 Figure 16 1013 ST_IDLE::EV_RX_RMF_MSG 1014 +---------------------------------------------------------+-----------+ 1015 | Action | new State | 1016 +---------------------------------------------------------+-----------+ 1017 | | | 1018 | if(rx_response && !QNI) tx_response(Toggle=false); | ST_IDLE | 1019 | | | 1020 +---------------------------------------------------------+-----------+ 1021 | | | 1022 | if(rx_query && (R-Flag || RII)) { | ST_WR | 1023 | startResponseTimer(); | | 1024 | } | | 1025 | | | 1026 +---------------------------------------------------------+-----------+ 1027 | | | 1028 | if(rx_reserve && !T-Flag) | ST_INST | 1029 | if(QNE || QNE_Ingress || QNE_Egress) { | | 1030 | startStateTimer(); | | 1031 | if(RII) startResponseTimer(); | | 1032 | else startRefreshTimer(); | | 1033 | tx_reserve(); | | 1034 | } else if(QNI) { | | 1035 | if(RII) startResponseTimer(); | | 1036 | else startRefreshTimer(); | | 1037 | tx_reserve(); | | 1038 | } else if(QNR) { | | 1039 | startStateTimer(); | | 1040 | } | | 1041 | } | | 1042 | | | 1043 +---------------------------------------------------------+-----------+ 1045 Figure 17 1047 A.2. State ST_WR 1049 ST_WR::EV_RX_QUERY 1050 +---------------------------------------------------------+-----------+ 1051 | Action | new State | 1052 +---------------------------------------------------------+-----------+ 1053 | | | 1054 | sendrmf(); | ST_WR | 1055 | | | 1056 +---------------------------------------------------------+-----------+ 1058 Figure 18 1060 ST_WR::EV_RX_NOTIFY 1061 +---------------------------------------------------------+-----------+ 1062 | Action | new State | 1063 +---------------------------------------------------------+-----------+ 1064 | | | 1065 | if(!QNI) tx_notify(Toggle=false); | ST_WR | 1066 | | | 1067 +---------------------------------------------------------+-----------+ 1069 Figure 19 1071 ST_WR::EV_RX_RESERVE 1072 +---------------------------------------------------------+-----------+ 1073 | Action | new State | 1074 +---------------------------------------------------------+-----------+ 1075 | | | 1076 | if(T-Flag && (!RII || QNR || STATELESS)) { | ST_IDLE | 1077 | send_rmf(); | | 1078 | } | | 1079 | | | 1080 +---------------------------------------------------------+-----------+ 1081 | | | 1082 | if(T-Flag && RII && (STATEFULL && !QNR)) { | ST_WR | 1083 | startStateTimer(REFRESH_PERIOD); | | 1084 | send_rmf(); | | 1085 | } | | 1086 | | | 1087 +---------------------------------------------------------+-----------+ 1088 | | | 1089 | if(!T-Flag && QNR) { | ST_WR | 1090 | if(QNR) stopResponseTimer(); | | 1091 | startStateTimer(); | | 1092 | sendrmf(); | | 1093 | } | | 1094 | | | 1095 +---------------------------------------------------------+-----------+ 1097 Figure 20 1099 ST_WR::EV_RX_RESPONSE 1100 +---------------------------------------------------------+-----------+ 1101 | Action | new State | 1102 +---------------------------------------------------------+-----------+ 1103 | | | 1104 | if(QNE_Egress) { | | 1105 | tx_response(Toggle=false, BYPASS_STATELESS_ID); | | 1106 | } else if(QNE || | | 1107 | (QNE_Ingress && nslp_id==BYPASS_STATELESS_ID)) { | | 1108 | tx_response(Toggle=false, QOS_NSLP_ID); | | 1109 | } | | 1110 | | | 1111 +---------------------------------------------------------+-----------+ 1112 | | | 1113 | if(is_local(RII)==true && !outstanding_foreign_rii) { | ST_IDLE | 1114 | stopResponseTimer(); | | 1115 | } | | 1116 | | | 1117 +---------------------------------------------------------+-----------+ 1118 | | | 1119 | if(is_local(RII)==true && outstanding_foreign_rii) { | ST_WR | 1120 | stopResponseTimer(); | | 1121 | } | | 1122 | | | 1123 +---------------------------------------------------------+-----------+ 1124 | | | 1125 | if(is_foreign(RII)==true && !outstanding_local_rii) | ST_IDLE | 1126 | | | 1127 +---------------------------------------------------------+-----------+ 1128 | | | 1129 | if(is_foreign(RII)==true && outstanding_local_rii) | ST_WR | 1130 | | | 1131 +---------------------------------------------------------+-----------+ 1133 Figure 21 1135 ST_WR::EV_TIMEOUT_RESPONSE 1136 +---------------------------------------------------------+-----------+ 1137 | Action | new State | 1138 +---------------------------------------------------------+-----------+ 1139 | | | 1140 | if(MAX_RETRY && !TIMER_PENDING) | ST_IDLE | 1141 | | | 1142 +---------------------------------------------------------+-----------+ 1143 | | | 1144 | if(MAX_RETRY && TIMER_PENDING) | ST_WR | 1145 | | | 1146 +---------------------------------------------------------+-----------+ 1147 | | | 1148 | if(!MAX_RETRY) { | ST_WR | 1149 | tx_query(Direction); | | 1150 | restartResponseTimer(); | | 1151 | } | | 1152 | | | 1153 +---------------------------------------------------------+-----------+ 1155 Figure 22 1157 ST_WR::EV_TIMEOUT_STATELIFETIME 1158 +---------------------------------------------------------+-----------+ 1159 | Action | new State | 1160 +---------------------------------------------------------+-----------+ 1161 | | | 1162 | stopTimers(); | ST_IDLE | 1163 | | | 1164 +---------------------------------------------------------+-----------+ 1166 Figure 23 1168 ST_WR::EV_RX_RMF_MSG 1169 +---------------------------------------------------------+-----------+ 1170 | Action | new State | 1171 +---------------------------------------------------------+-----------+ 1172 | | | 1173 | if(rx_reserve && !T-Flag) | ST_INST | 1174 | if(QNE || QNE_Ingress || QNE_Egress) { | | 1175 | startStateTimer(); | | 1176 | if(RII) startResponseTimer(); | | 1177 | else startRefreshTimer(); | | 1178 | tx_reserve(); | | 1179 | } else if(QNI) { | | 1180 | if(RII) startResponseTimer(); | | 1181 | else startRefreshTimer(); | | 1182 | tx_reserve(); | | 1183 | } else if(QNR) { | | 1184 | startStateTimer(); | | 1185 | } | | 1186 | } | | 1187 | | | 1188 +---------------------------------------------------------+-----------+ 1190 Figure 24 1192 A.3. State ST_INST 1194 ST_INST::EV_RX_QUERY 1195 +---------------------------------------------------------+-----------+ 1196 | Action | new State | 1197 +---------------------------------------------------------+-----------+ 1198 | | | 1199 | sendrmf(); | ST_INST | 1200 | | | 1201 +---------------------------------------------------------+-----------+ 1203 Figure 25 1205 ST_INST::EV_RX_NOTIFY 1206 +---------------------------------------------------------+-----------+ 1207 | Action | new State | 1208 +---------------------------------------------------------+-----------+ 1209 | | | 1210 | if(ErrorClass==ERRORCLASS_INFO) { | ST_INST | 1211 | if(ErrorCode==RR_NOT_SUPPORTED) { | | 1212 | ReducedRefreshes = false; | | 1213 | } else if(ErrorCode==RR_SUPPORTED) { | | 1214 | ReducedRefreshes = true; | | 1215 | } | | 1216 | } | | 1217 | | | 1218 +---------------------------------------------------------+-----------+ 1220 Figure 26 1222 ST_INST::EV_RX_RESERVE 1223 +---------------------------------------------------------+-----------+ 1224 | Action | new State | 1225 +---------------------------------------------------------+-----------+ 1226 | | | 1227 | if(T-Flag && !RII) { | ST_IDLE | 1228 | if(rsn>peer_rsn) { | | 1229 | update_rsn(); | | 1230 | sendrmf(); | | 1231 | } | | 1232 | } | | 1233 | | | 1234 +---------------------------------------------------------+-----------+ 1235 | | | 1236 | if(T-Flag && RII) { | ST_WR | 1237 | if(rsn>peer_rsn) { | | 1238 | update_rsn(); | | 1239 | sendrmf(); | | 1240 | start_statetimer(REFRESH_RELOAD); | | 1241 | } | | 1242 | } | | 1243 | | | 1244 +---------------------------------------------------------+-----------+ 1245 | | | 1246 | if(!T-Flag) { | ST_INST | 1247 | if(rsn>=peer_rsn) { | | 1248 | if(rsn>peer_rsn) { | | 1249 | update_rsn(); | | 1250 | sendrmf(); | | 1251 | } | | 1252 | restart_statetimer(); | | 1253 | } | | 1254 | } | | 1255 | | | 1256 +---------------------------------------------------------+-----------+ 1258 Figure 27 1260 ST_INST::EV_RX_RESPONSE 1261 +---------------------------------------------------------+-----------+ 1262 | Action | new State | 1263 +---------------------------------------------------------+-----------+ 1264 | | | 1265 | if(QNE_Egress) { | | 1266 | tx_response(toggle=false, BYPASS_STATELESS_ID); | | 1267 | } else if(QNE || | | 1268 | (QNE_Ingress && nslp_id==BYPASS_STATELESS_ID)) { | | 1269 | tx_response(toggle=false, QOS_NSLP_ID); | | 1270 | } | | 1271 | if(is_local_rii) stopResponseTimer(); | | 1272 | startRefreshTimer(); | | 1273 | | | 1274 +---------------------------------------------------------+-----------+ 1275 | | | 1276 | if(INFO==SUCCESS) | ST_INST | 1277 | | | 1278 +---------------------------------------------------------+-----------+ 1279 | | | 1280 | if(INFO==FAILURE) { | ST_IDLE | 1281 | sendrmf(); | | 1282 | stop_timers(); | | 1283 | } | | 1284 | | | 1285 +---------------------------------------------------------+-----------+ 1287 Figure 28 1289 ST_INST::EV_RX_RMF_MSG 1290 +---------------------------------------------------------+-----------+ 1291 | Action | new State | 1292 +---------------------------------------------------------+-----------+ 1293 | | | 1294 | if(rx_response && (fail || tear_successful)) { | ST_IDLE | 1295 | tx_response(); | | 1296 | } | | 1297 | | | 1298 +---------------------------------------------------------+-----------+ 1299 | | | 1300 | if(rx_response && success) { | ST_INST | 1301 | tx_response(); | | 1302 | } | | 1303 | | | 1304 +---------------------------------------------------------+-----------+ 1305 | | | 1306 | if(rx_reserve && !T-Flag) | ST_INST | 1307 | if(QNE || QNE_Ingress || QNE_Egress) { | | 1308 | startStateTimer(); | | 1309 | if(RII) startResponseTimer(); | | 1310 | else startRefreshTimer(); | | 1311 | tx_reserve(); | | 1312 | } else if(QNI) { | | 1313 | if(RII) startResponseTimer(); | | 1314 | else startRefreshTimer(); | | 1315 | tx_reserve(); | | 1316 | } else if(QNR) { | | 1317 | startStateTimer(); | | 1318 | } | | 1319 | } | | 1320 | | | 1321 +---------------------------------------------------------+-----------+ 1323 Figure 29 1325 ST_INST::EV_TIMEOUT_RESPONSE 1326 +---------------------------------------------------------+-----------+ 1327 | Action | new State | 1328 +---------------------------------------------------------+-----------+ 1329 | | | 1330 | if(MAX_RETRY) { | ST_IDLE | 1331 | sendrmf(); | | 1332 | stopTimers(); | | 1333 | } | | 1334 | | | 1335 +---------------------------------------------------------+-----------+ 1336 | | | 1337 | if(!MAX_RETRY) { | ST_INST | 1338 | tx_reserve(Direction); | | 1339 | restartResponseTimer() | | 1340 | } | | 1341 | | | 1342 +---------------------------------------------------------+-----------+ 1344 Figure 30 1346 ST_INST::EV_TIMEOUT_REFRESH 1347 +---------------------------------------------------------+-----------+ 1348 | Action | new State | 1349 +---------------------------------------------------------+-----------+ 1350 | | | 1351 | if(ReducedRefreshes) { | ST_INST | 1352 | tx_reserve(RSN, Direction); | | 1353 | } else { | | 1354 | tx_reserve(RSN, QSPEC, Direction); | | 1355 | } | | 1356 | restartRefreshTimer(); | | 1357 | | | 1358 +---------------------------------------------------------+-----------+ 1360 Figure 31 1362 ST_INST::EV_TIMEOUT_STATELIFETIME 1363 +---------------------------------------------------------+-----------+ 1364 | Action | new State | 1365 +---------------------------------------------------------+-----------+ 1366 | | | 1367 | stopTimers(); | ST_IDLE | 1368 | sendrmf(); | | 1369 | | | 1370 +---------------------------------------------------------+-----------+ 1372 Figure 32 1374 ST_INST::EV_SII_CHANGED 1375 +---------------------------------------------------------+-----------+ 1376 | Action | new State | 1377 +---------------------------------------------------------+-----------+ 1378 | | | 1379 | tx_reserve(RII, RSN, QSPEC, SII); | ST_INST | 1380 | | | 1381 +---------------------------------------------------------+-----------+ 1383 Figure 33 1385 ST_INST::EV_NETWORK_NOTIFICATION 1386 +---------------------------------------------------------+-----------+ 1387 | Action | new State | 1388 +---------------------------------------------------------+-----------+ 1389 | | | 1390 | tx_reserve(RII, RSN, QSPEC); | ST_INST | 1391 | | | 1392 +---------------------------------------------------------+-----------+ 1394 Figure 34 1396 A.4 Commonly used functions: 1398 A.4.1 update_rsn() 1400 1 void update_rsn() { 1401 2 if((STATEFULL && !QNE_Egress) || 1402 3 (QNE_Egress && nslp_id==BYPASS_STATELESS_ID)) { 1403 4 peer_rsn=rsn; 1404 5 } 1405 6 } 1406 7 1408 Figure 35 1410 This function is used to update the rsn value only on statefull peers. At 1411 the egress node the rsn is updated when a message arrives with the nslp_id 1412 BYPASS_STATELESS_ID. 1414 A.4.2 send_rmf() 1416 1 void sendrmf() { 1417 2 1418 3 switch(message_type) { 1419 4 1420 5 case QOS_MESSAGETYPE_RESERVE: 1421 6 1422 7 switch(nodepos) { 1423 8 1424 9 case QNI: 1425 10 1426 11 if(T-Flag) { 1427 12 free_qos(); 1428 13 recv_rmf(reserve, DO_NOT_TOGGLE); 1429 14 1430 15 } else { 1431 16 qos_available = reserve_qos(); 1432 17 if(qos_available) recv_rmf(reserve, DO_NOT_TOGGLE); 1433 18 else recv_rmf(response, INFOSPEC=FAIL, DO_TOGGLE); 1434 19 } 1435 20 break; 1436 21 1437 22 case QNE: 1438 23 1439 24 if(T-Flag) { 1440 25 free_qos(); 1441 26 if(!S-Flag) recv_rmf(reserve, new_rsn, DO_NOT_TOGGLE); 1442 27 else if(rii) recv_rmf(response, INFOSPEC=FAIL, DO_TOGGLE); 1443 28 1444 29 } else { 1445 30 qos_available = reserve_qos(); 1446 31 if(!qos_available) recv_rmf(response, INFOSPEC=FAIL, DO_TOGGLE); 1447 32 else if(!S-Flag) recv_rmf(reserve, DO_NOT_TOGGLE); 1448 33 else recv_rmf(response, INFOSPEC=SUCCESS, DO_TOGGLE); 1449 34 if(rr_supported) recv_rmf(notify, DO_TOGGLE); 1450 35 } 1451 36 break; 1452 37 1453 38 case QNE_Ingress: 1454 39 1455 40 if(T-Flag) { 1456 41 free_qos(); 1457 42 recv_rmf(reserve, BYPASS_STATELESS_ID, DO_NOT_TOGGLE); 1458 43 recv_rmf(reserve, new_rsn, new_rii, DO_NOT_TOGGLE); 1459 44 } else { 1460 45 qos_available = reserve_qos(); 1461 46 if(!qos_available) recv_rmf(response, INFOSPEC=FAIL, DO_TOGGLE); 1462 47 else { 1463 48 recv_rmf(reserve, BYPASS_STATELESS_ID, DO_NOT_TOGGLE); 1464 49 recv_rmf(reserve, DO_NOT_TOGGLE); 1465 50 } 1466 51 if(rr_supported) recv_rmf, notify(DO_TOGGLE); 1467 52 } 1468 53 break; 1469 54 1470 55 case QNE_Interior: 1471 56 1472 57 if(T-Flag) { 1473 58 free_qos(); 1474 59 recv_rmf(reserve(new_rsn, DO_NOT_TOGGLE)); 1475 60 1476 61 } else { 1477 62 qos_available = reserve_qos(); 1478 63 if(!qos_available) recv_rmf(response, INFOSPEC=FAIL, DO_TOGGLE); 1479 64 else recv_rmf(reserve, DO_NOT_TOGGLE); 1480 65 } 1481 66 break; 1482 67 1483 68 case QNE_Egress: 1484 69 1485 70 if(T-Flag) { 1486 71 free_qos(); 1487 72 if(nslp_id==QOS_NSLP_ID && rii) 1488 73 recv_rmf(response(new_rsn, new_rii, DO_NOT_TOGGLE)); 1489 74 } else { 1490 75 qos_available = reserve_qos(); 1491 76 if(!qos_available) recv_rmf(response, INFOSPEC=FAIL, DO_TOGGLE); 1492 77 if (nslp_id==QOS_NSLP_ID) { 1493 78 if(rii) recv_rmf(response, INFOSPEC=SUCCESS, QOS_NSLP_ID); 1494 79 if(rr_supported) recv_rmf(notify, QOS_NSLP_ID); 1495 80 } else if (nslp_id==BYPASS_STATELESS_NODE && rr_supported) 1496 81 recv_rmf(notify, BYPASS_STATELESS_NODE); 1497 82 } 1498 83 break; 1499 84 1500 85 case QNR: 1501 86 1502 87 if(T-Flag) { 1503 88 free_qos(); 1504 89 if(rii) recv_rmf(response(DO_TOGGLE)); 1505 90 } else { 1506 91 qos_available = reserve_qos(); 1507 92 if(!qos_available) recv_rmf(response, INFOSPEC=FAIL, DO_TOGGLE); 1508 93 if(rii) recv_rmf(response, INFOSPEC=SUCCESS, DO_TOGGLE); 1509 94 if(rr_supported) recv_rmf(notify, INFOSPEC=RR_SUPPORTED, DO_TOGGLE); 1510 95 } 1511 96 break; 1512 97 1513 98 } 1514 99 break; 1515 100 1516 101 case QOS_MESSAGETYPE_QUERY: 1517 102 1518 103 if (QNI && R-Flag) { 1519 104 reserve_qos(); 1520 105 send_rmf(reserve, new_rii, new_rsn, new_qspec); 1521 106 1522 107 } else if (QNR && R-Flag) { 1523 108 1524 109 query_rmf(); 1525 110 send_rmf(query, R-Flag, PC, QSPEC, Direction=DOWNSTREAM); 1526 111 1527 112 } else { 1528 113 1529 114 query_rmf(); 1530 115 if(QNR) send_rmf(response); 1531 116 else send_rmf(query); 1532 117 1533 118 } 1534 119 break; 1535 120 1536 121 case QOS_MESSAGETYPE_RESPONSE: 1537 122 1538 123 break; 1539 124 1540 125 case QOS_MESSAGETYPE_NOTIFY: 1541 126 1542 127 break; 1543 128 1544 129 } 1545 130 1546 131 } 1547 132 1549 Figure 36 1551 Message Type Reserve 1553 At the QNI if the message has set the T-Flag the reservation is torn 1554 down and a new reserve message is triggered using the API-call 1555 recv_rmf(). If no T-Flag was set in the reserve message, reservation 1556 state is installed. If successful a new reserve message is triggered 1557 to be sent further along the path. 1559 At QNE's the (tearing) reserve is sent further if the scoping flag is 1560 not set. Otherwise this node triggers a response if an RII object is 1561 present. If a reservation request fails a response is triggered to 1562 inform the initiator about the failure. If reduced refreshes are 1563 supported a notify message is sent back to the previous peer. 1565 Ingress nodes trigger two new (tearing) reserve message, one with the 1566 old nslp_id and one with the BYPASS_STATELESS_ID to bypass stateless 1567 nodes. No special treatment of the messages is done at interior 1568 nodes. 1570 The egress node triggers a response message, if a response was 1571 requested by including an RII object and if the nslp_id of the 1572 received message is QOS_NSLP_ID. If a requested reservation fails, a 1573 response is sent back in any case. Notify message for reduced 1574 refreshes are sent with the corresponding nslp_id. 1576 The QNR as the destination of the message echoes a response if the 1577 reservation fails or if a response was requested by including an RII 1578 object. Also here a notify message is sent back to the previous node, 1579 if reduced refreshes are accepted. 1581 Message Type QUERY 1583 If a QUERY message with set R-Flag arrives at the QNI, the RMF 1584 triggers a new RESERVE message to be sent towards the QNR. Resource 1585 query messages are sent further after updating the QSPEC. The QNR 1586 triggers a response message containing the QSPEC. 1588 Authors' Addresses 1590 Xiaoming Fu 1591 University of Goettingen 1592 Telematics Group 1593 Lotzestrasse 16-18 1594 Goettingen 37083 1595 Germany 1597 Email: fu@cs.uni-goettingen.de 1599 Hannes Tschofenig 1600 Nokia Siemens Networks 1601 Otto-Hahn-Ring 6 1602 Munich, Bayern 81739 1603 Germany 1605 Email: Hannes.Tschofenig@nsn.com 1606 URI: http://www.tschofenig.com 1608 Tseno Tsenov 1609 Nokia Siemens Networks 1610 Otto-Hahn-Ring 6 1611 Munich, Bayern 81739 1612 Germany 1614 Email: tseno.tsenov@mytum.de 1616 Bernd Schloer 1617 University of Goettingen 1618 Telematics Group 1619 Lotzestrasse 16-18 1620 Goettingen 37083 1621 Germany 1623 Email: bschloer@cs.uni-goettingen.de 1625 Full Copyright Statement 1627 Copyright (C) The IETF Trust (2007). 1629 This document is subject to the rights, licenses and restrictions 1630 contained in BCP 78, and except as set forth therein, the authors 1631 retain all their rights. 1633 This document and the information contained herein are provided on an 1634 "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS 1635 OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST AND 1636 THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS 1637 OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF 1638 THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED 1639 WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. 1641 Intellectual Property 1643 The IETF takes no position regarding the validity or scope of any 1644 Intellectual Property Rights or other rights that might be claimed to 1645 pertain to the implementation or use of the technology described in 1646 this document or the extent to which any license under such rights 1647 might or might not be available; nor does it represent that it has 1648 made any independent effort to identify any such rights. Information 1649 on the procedures with respect to rights in RFC documents can be 1650 found in BCP 78 and BCP 79. 1652 Copies of IPR disclosures made to the IETF Secretariat and any 1653 assurances of licenses to be made available, or the result of an 1654 attempt made to obtain a general license or permission for the use of 1655 such proprietary rights by implementers or users of this 1656 specification can be obtained from the IETF on-line IPR repository at 1657 http://www.ietf.org/ipr. 1659 The IETF invites any interested party to bring to its attention any 1660 copyrights, patents or patent applications, or other proprietary 1661 rights that may cover technology that may be required to implement 1662 this standard. Please address the information to the IETF at 1663 ietf-ipr@ietf.org. 1665 Acknowledgement 1667 Funding for the RFC Editor function is provided by the IETF 1668 Administrative Support Activity (IASA).