idnits 2.17.00 (12 Aug 2021) /tmp/idnits48825/draft-fu-nsis-qos-nslp-statemachine-05.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 17. -- Found old boilerplate from RFC 3978, Section 5.5 on line 1474. -- Found old boilerplate from RFC 3979, Section 5, paragraph 1 on line 1451. -- Found old boilerplate from RFC 3979, Section 5, paragraph 2 on line 1458. -- Found old boilerplate from RFC 3979, Section 5, paragraph 3 on line 1464. ** Found boilerplate matching RFC 3978, Section 5.4, paragraph 1 (on line 1480), which is fine, but *also* found old RFC 2026, Section 10.4C, paragraph 1 text on line 38. ** This document has an original RFC 3978 Section 5.4 Copyright Line, instead of the newer IETF Trust Copyright according to RFC 4748. ** This document has an original RFC 3978 Section 5.5 Disclaimer, instead of the newer disclaimer which includes the IETF Trust according to RFC 4748. Checking nits according to https://www.ietf.org/id-info/1id-guidelines.txt: ---------------------------------------------------------------------------- ** The document seems to lack a 1id_guidelines paragraph about Internet-Drafts being working documents -- however, there's a paragraph with a matching beginning. Boilerplate error? == 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 26 instances of too long lines in the document, the longest one being 2 characters in excess of 72. Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the RFC 3978 Section 5.4 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 (December 25, 2006) is 5626 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') == Outdated reference: draft-ietf-eap-statemachine has been published as RFC 4137 == Outdated reference: draft-ietf-nsis-threats has been published as RFC 4081 Summary: 8 errors (**), 0 flaws (~~), 5 warnings (==), 7 comments (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 1 NSIS X. Fu 2 B. Schloer 3 Internet-Draft Univ. Goettingen 4 Expiration Date: June 24, 2007 H. Tschofenig 5 T. Tsenov 6 Siemens 7 December 25, 2006 9 QoS NSLP State Machine 10 draft-fu-nsis-qos-nslp-statemachine-05.txt 12 Status of this Memo 14 By submitting this Internet-Draft, each author represents that any 15 applicable patent or other IPR claims of which he or she is aware 16 have been or will be disclosed, and any of which he or she becomes 17 aware will be disclosed, in accordance with Section 6 of BCP 79. 19 Internet-Drafts are working documents of the Internet Engineering 20 Task Force (IETF), its areas, and its working groups. Note that other 21 groups may also distribute working documents as Internet- Drafts. 23 Internet-Drafts are draft documents valid for a maximum of six months 24 and may be updated, replaced, or obsoleted by other documents at any 25 time. It is inappropriate to use Internet-Drafts as reference 26 material or to cite them other than as "work in progress." 28 The list of current Internet-Drafts can be accessed at 29 http://www.ietf.org/ietf/1id-abstracts.txt. 31 The list of Internet-Draft Shadow Directories can be accessed at 32 http://www.ietf.org/shadow.html. 34 This Internet-Draft will expire on June 24, 2007. 36 Copyright Notice 38 Copyright (C) The Internet Society (2006). All Rights Reserved. 40 Abstract 42 This document describes a state machine for the NSIS Signaling Layer 43 Protocol for Quality-of-Service signaling (QoS NSLP). A combined 44 state machine for QoS NSLP entities at different locations of a flow 45 path is presented in order to illustrate how QoS NSLP may be 46 implemented. 48 Table of Contents 50 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 51 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . 3 52 3. Notational conventions used in state diagrams . . . . . . . 3 53 4. State Machine Symbols . . . . . . . . . . . . . . . . . . . 5 54 5. Common Rules . . . . . . . . . . . . . . . . . . . . . . . . 7 55 5.1 Common Procedures . . . . . . . . . . . . . . . . . . . . 7 56 5.2 Common Variables . . . . . . . . . . . . . . . . . . . . . 7 57 5.3 Events . . . . . . . . . . . . . . . . . . . . . . . . . 9 58 5.4 Assumptions . . . . . . . . . . . . . . . . . . . . . . . 9 59 6. Basic State Machine Concept . . . . . . . . . . . . . . . . 11 60 6.1 The QoS NSLP Daemon . . . . . . . . . . . . . . . . . . . 11 61 6.2 States, Events and Callback Functions . . . . . . . . . . 12 62 6.3 Timer . . . . . . . . . . . . . . . . . . . . . . . . . . 13 63 6.4 The Toggle Flag . . . . . . . . . . . . . . . . . . . . . 13 64 7. State Machine for QoS NSLP nodes . . . . . . . . . . . . . . 13 65 7.1 State ST_IDLE . . . . . . . . . . . . . . . . . . . . . . 14 66 7.2 State ST_WR . . . . . . . . . . . . . . . . . . . . . . 16 67 7.3 State ST_INST . . . . . . . . . . . . . . . . . . . . . . 18 68 8 Actions and Transitions . . . . . . . . . . . . . . . . . . . 21 69 8.1 State ST_IDLE . . . . . . . . . . . . . . . . . . . . . . 21 70 8.2 State ST_WR . . . . . . . . . . . . . . . . . . . . . . 22 71 8.3 State ST_INST . . . . . . . . . . . . . . . . . . . . . . 23 72 9. Security Considerations . . . . . . . . . . . . . . . . . . 25 73 10. Open Issues . . . . . . . . . . . . . . . . . . . . . . . 25 74 11. Change History . . . . . . . . . . . . . . . . . . . . . . 26 75 11.1 Changes in Version -01 . . . . . . . . . . . . . . . . 26 76 11.2 Changes in Version -02 . . . . . . . . . . . . . . . . 26 77 11.3 Changes in Version -03 . . . . . . . . . . . . . . . . 26 78 11.3 Changes in Version -04 . . . . . . . . . . . . . . . . 26 79 11.4 Changes in Version -05 . . . . . . . . . . . . . . . . 26 80 12. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . 27 81 13. References . . . . . . . . . . . . . . . . . . . . . . . . . 28 82 13.1 Normative References . . . . . . . . . . . . . . . . . . 28 83 13.2 Informative References . . . . . . . . . . . . . . . . . 28 84 Appendix A. ASCII versions of the state diagrams . . . . . . . . 29 85 A.1 State ST_IDLE . . . . . . . . . . . . . . . . . . . . . 29 86 A.2 State ST_WR . . . . . . . . . . . . . . . . . . . . . 32 87 A.3 State ST_INST . . . . . . . . . . . . . . . . . . . . . 35 88 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . 40 89 Intellectual Property and Copyright Statements . . . . . . . 41 91 1. Introduction 93 This document describes a state machine for QoS NSLP [1], trying to 94 show how QoS NSLP can be implemented to support its deployment. The 95 state machine described in this document is illustrative of how the 96 QoS NSLP protocol defined in [1] may be implemented for QoS NSLP 97 nodes in the flow path. Where there are differences [1] are 98 authoritative. The state machine diagrams are informative only. 99 Implementations may achieve the same results using different methods. 101 According to [1], there are several possibilities for QoS NSLP 102 signaling, at least including the following: - end-to-end signaling 103 vs. scoped signaling - sender-initiated signaling vs. receiver- 104 initiated signaling. 106 The messages used in the QoS NSLP protocol can be summarized as 107 follows: 109 Requesting message Responding message 110 ------------------------+--------------------------- 111 RESERVE |None or RESERVE or RESPONSE 112 QUERY |RESERVE or RESPONSE 113 RESPONSE |NONE 114 NOTIFY |NONE 115 ------------------------+--------------------------- 117 2. Terminology 119 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 120 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this 121 document are to be interpreted as described in [2]. 123 3. Notational conventions used in state diagrams 125 The following text is reused from [3] and the state diagrams are 126 based on the conventions specified in [4], Section 8.2.1. Additional 127 state machine details are taken from [5]. 129 The complete text is reproduced here: 131 State diagrams are used to represent the operation of the protocol by 132 a number of cooperating state machines each comprising a group of 133 connected, mutually exclusive states. Only one state of each machine 134 can be active at any given time. 136 All permissible transitions between states are represented by arrows, 137 the arrowhead denoting the direction of the possible transition. 138 Labels attached to arrows denote the condition(s) that must be met in 139 order for the transition to take place. All conditions are 140 expressions that evaluate to TRUE or FALSE; if a condition evaluates 141 to TRUE, then the condition is met. The label UCT denotes an 142 unconditional transition (i.e., UCT always evaluates to TRUE). A 143 transition that is global in nature (i.e., a transition that occurs 144 from any of the possible states if the condition attached to the 145 arrow is met) is denoted by an open arrow; i.e., no specific state is 146 identified as the origin of the transition. When the condition 147 associated with a global transition is met, it supersedes all other 148 exit conditions including UCT. The special global condition BEGIN 149 supersedes all other global conditions, and once asserted remains 150 asserted until all state blocks have executed to the point that 151 variable assignments and other consequences of their execution remain 152 unchanged. 154 On entry to a state, the procedures defined for the state (if any) 155 are executed exactly once, in the order that they appear on the page. 156 Each action is deemed to be atomic; i.e., execution of a procedure 157 completes before the next sequential procedure starts to execute. No 158 procedures execute outside of a state block. The procedures in only 159 one state block execute at a time, even if the conditions for 160 execution of state blocks in different state machines are satisfied, 161 and all procedures in an executing state block complete execution 162 before the transition to and execution of any other state block 163 occurs, i.e., the execution of any state block appears to be atomic 164 with respect to the execution of any other state block and the 165 transition condition to that state from the previous state is TRUE 166 when execution commences. The order of execution of state blocks in 167 different state machines is undefined except as constrained by their 168 transition conditions. A variable that is set to a particular value 169 in a state block retains this value until a subsequent state block 170 executes a procedure that modifies the value. 172 On completion of all of the procedures within a state, all exit 173 conditions for the state (including all conditions associated with 174 global transitions) are evaluated continuously until one of the 175 conditions is met. The label ELSE denotes a transition that occurs if 176 none of the other conditions for transitions from the state are met 177 (i.e., ELSE evaluates to TRUE if all other possible exit conditions 178 from the state evaluate to FALSE). Where two or more exit conditions 179 with the same level of precedence become TRUE simultaneously, the 180 choice as to which exit condition causes the state transition to take 181 place is arbitrary. 183 In addition to the above notation, there are a couple of 184 clarifications specific to this document. First, all boolean 185 variables are initialized to FALSE before the state machine execution 186 begins. Second, the following notational shorthand is specific to 187 this document: 189 = | | ... 191 Execution of a statement of this form will result in 192 having a value of exactly one of the expressions. The logic for 193 which of those expressions gets executed is outside of the state 194 machine and could be environmental, configurable, or based on 195 another state machine such as that of the method. 197 4. State Machine Symbols 199 ( ) 200 Used to force the precedence of operators in Boolean expressions 201 and to delimit the argument(s) of actions within state boxes. 203 ; 204 Used as a terminating delimiter for actions within state boxes. 205 Where a state box contains multiple actions, the order of 206 execution follows the normal English language conventions for 207 reading text. 209 = 210 Assignment action. The value of the expression to the right of the 211 operator is assigned to the variable to the left of the operator. 212 Where this operator is used to define multiple assignments, e.g., 213 a = b = X the action causes the value of the expression following 214 the right-most assignment operator to be assigned to all of the 215 variables that appear to the left of the right-most assignment 216 operator. 218 ! 219 Logical NOT operator. 221 && 222 Logical AND operator. 224 || 225 Logical OR operator. 227 if...then... 228 Conditional action. If the Boolean expression following the if 229 evaluates to TRUE, then the action following the then is executed. 231 { statement 1, ... statement N } 232 Compound statement. Braces are used to group statements that are 233 executed together as if they were a single statement. 235 != 236 Inequality. Evaluates to TRUE if the expression to the left of the 237 operator is not equal in value to the expression to the right. 239 == 240 Equality. Evaluates to TRUE if the expression to the left of the 241 operator is equal in value to the expression to the right. 243 > 244 Greater than. Evaluates to TRUE if the value of the expression to 245 the left of the operator is greater than the value of the 246 expression to the right. 248 <= 249 Less than or equal to. Evaluates to TRUE if the value of the 250 expression to the left of the operator is either less than or 251 equal to the value of the expression to the right. 253 ++ 254 Increment the preceding integer operator by 1. 256 + 257 Arithmetic addition operator. 259 & 260 Bitwise AND operator. 262 5. Common Rules 264 Throughout the document we use terms defined in the [1], such as flow 265 sender, flow receiver, QUERY, RESERVE or RESPONSE. 267 5.1 Common Procedures 269 tx_reserve(): 270 Transmit RESERVE message 272 tx_response(): 273 Transmit RESPONSE message 275 tx_query(): 276 Transmit QUERY message 278 tx_notify(): 279 Transmit NOTIFY message 281 install_qos_state(): 282 Install the local QoS state. 284 delete_qos_state(): 285 Delete the local QoS state. 287 send_info_to_app(): 288 Report information to the application. 290 RMF(): 291 Performs Resource Management Function and returns the following 292 values{AVAIL, NO_AVAIL}. 294 is_local(RII): 295 Checks the RII object of received RESPONSE message if it is 296 requested by current node or other upstream node. Returns values 297 {true, false}. 299 is_local(RSN): 300 Checks The RSN object of the received RESPONSE message if it is 301 requested by current node. Returns values {true, false}. 303 process_query(): 304 Processes a Query message and provides the requested info 306 5.2 Common Variables 308 RII: 310 Request Identification Information (RII) object. 312 RSN: 313 Reservation Sequence Number (RSN) object. 315 INFO: 316 Info_Spec object. Takes values: 317 - 0x02 - Success values 318 - 0x04 - Transient Failure values 320 QSPEC: 321 QoS specification object. 323 T-Flag: 324 Tear flag. Indicates to tear down reservation state. Takes values 325 {true, false}. 327 Q-Flag: 328 Request Reduced Refreshes flag of common message header. Takes 329 values {true, false}. 331 R-Flag: 332 Reserve-Init flag (QUERY) or Replace flag (RESERVE). Indicates a 333 Receiver Initiated Reservation request in a QUERY message or an 334 replacing RESERVE in a RESERVE message. Takes values {true, 335 false}. 337 S-Flag: 338 Scoping flag of common message header. Takes values 339 {true="Next_hop", false="Whole_path"}. 341 setRII: 342 If set a RII object will be included into the message. Takes 343 values {true, false}. 345 ReducedRefresh: 346 Keeps information if Reduced refresh method may be used for 347 refreshing a installed QoS state. Takes value {"On","Off"}. 349 FlowID: 350 Flow ID kept by the installed QoS state. 352 Nodepos: 353 Position of the QoS NSLP node. Takes values {"QNI", "QNE", "QNR"}. 355 Toggle: 356 Flag to indicate whether the direction of a new message has to be 357 changed compared to the direction of a received one. Takes values 358 {true, false}. 360 Direction: 361 Direction, in which the message has to be sent. Takes values 362 {DOWNSTREAM, UPSTREAM}. 364 SII: 365 Source Identification Information entry. Takes values: 366 - CurrSII - SII entry stored for current installed QoS state. 367 (Assumed to be the one for the direction where the message comes 368 from e.g.Upstream/Downstream) 369 - newSII - SII of the received message is different from the SII 370 stored for the current installed QoS state. 372 5.3 Events 374 EV_TG_QUERY: 375 External trigger to send a QUERY message. 377 EV_RX_QUERY: 378 QUERY message received 380 EV_RX_NOTIFY: 381 NOTIFY message received 383 EV_TG_RESERVE: 384 External trigger to send a RESERVE message. 386 EV_RX_RESERVE: 387 RESERVE message received 389 EV_RX_RESPONSE: 390 RESPONSE message received 392 EV_TIMEOUT_RESPONSE: 393 Wait-Response interval timer expiration 395 EV_TIMEOUT_REFRESH: 396 Refresh interval timer expiration 398 EV_TIMEOUT_STATE_LIFETIME: 399 State lifetime timer expiration 401 5.4 Assumptions 403 - For simplification not all included objects in a message are shown. 404 Only those that are significant for the case are shown. The State 405 Machine does not present handling of messages that are not 406 significant for management of the states such as certain NOTIFY 407 and QUERY messages. 408 - The State Machine represents handling of messages of the same 409 Session ID and with no protocol errors. Separate parallel 410 instances of the state machines should handle messages for 411 different Session IDs. 412 - Default message handling should be defined for messages with 413 different Session IDs that have impact on current session state 414 and error messages. This is not included in the current version. 416 6 Basic State Machine Concept 418 6.1 The QoS NSLP Daemon 420 The QoS NSLP Daemon (qosd) listens for incoming messages from the 421 local application and for messages coming over the network from GIST. 422 For each new SessionID (SID) a new State Machine (FSM) is created as 423 shown in the diagram below. 425 Incoming messages from the client application are checked for the 426 type of the message (QUERY or RESERVE) and for the SID. A table is 427 searched for the given SID. If it is not found, a new FSM is created 428 and its address together with the SID is added to the table. If the 429 type of the message is a QUERY with set R-Bit, a Receiver Initiated 430 Reservation is requested and the node position is QNR, in all other 431 cases the node position is QNI. If the SID is found, the address of 432 the FSM is returned. Now the FSM is triggered with the corresponding 433 event of the message (EV_TG_QUERY, EV_TG_RESERVE). If the FSM returns 434 to the qosd in ST_IDLE, it is deleted together with its table entry. 436 For a message arriving from GIST, the procedure is almost the same. 437 The table is searched for the given SID. If it is not found, then the 438 IP-address of the MRI is compared to the local IP-address. If the 439 arriving message is requesting a Receiver Initiated Reservation and 440 the destination address is equal to the local address then the node 441 position is QNR. If the addresses are equal and no Receiver Initiated 442 Reservation is requested then the node position is QNI. If the 443 addresses are not the same, a new FSM for a QNE is created. Also 444 here, the corresponding FSM is triggered with the event according to 445 the arrived message and deleted when returning in ST_IDLE. 447 +-------+ +-------+ +-------+ 448 | | | | | | 449 | FSM 1 | | FSM 2 | | FSM n | 450 | | | | | | 451 +-------+ +-------+ +-------+ 452 \ | / 453 \ | / 454 \ | / 455 \ | / 456 \ | / 457 +-------+ 458 | | 459 | qosd | 460 | | 461 +-------+ 462 Figure 1 464 6.2 States, Events and Callback Functions 466 Three States are defined: ST_IDLE, ST_WR and ST_INST. A new created 467 FSM is starting automatically in ST_IDLE. In this state no 468 reservation state is installed no responses to previously sent 469 messages are expected. In ST_WR the FSM is waiting for a response to 470 a previously sent message, but no reservation state is installed. In 471 ST_INST reservation state has been installed and incoming messages 472 are processed. 474 The following table provides to a given state and a triggered event 475 the function which has to be executed by the FSM. Example: when 476 EV_RX_QUERY is triggered in state ST_IDLE, the function 477 idle__rx_query is executed. 479 +-----------+----------------------------+-------------------------------+ 480 | State | Event | Executed Function | 481 +-----------+----------------------------+-------------------------------+ 482 | ST_IDLE | EV_TG_QUERY | idle__tg_query | 483 | ST_IDLE | EV_RX_QUERY | idle__rx_query | 484 | ST_IDLE | EV_TG_RESERVE | idle__tg_reserve | 485 | ST_IDLE | EV_RX_RESERVE | idle__rx_reserve | 486 | ST_IDLE | EV_RX_RESPONSE | idle__rx_response | 487 +-----------+----------------------------+-------------------------------+ 488 | ST_WR | EV_TG_QUERY | wr__tg_query | 489 | ST_WR | EV_RX_QUERY | wr__rx_query | 490 | ST_WR | EV_TG_RESERVE | wr__tg_reserve | 491 | ST_WR | EV_RX_RESERVE | wr__rx_reserve | 492 | ST_WR | EV_RX_RESPONSE | wr__rx_response | 493 | ST_WR | EV_TIMEOUT_WAITRESP | wr__timeout_waitresp | 494 +-----------+----------------------------+-------------------------------+ 495 | ST_INST | EV_TG_QUERY | inst__tg_query | 496 | ST_INST | EV_RX_QUERY | inst__rx_query | 497 | ST_INST | EV_RX_NOTIFY | inst__rx_notify | 498 | ST_INST | EV_TG_RESERVE | inst__tg_reserve | 499 | ST_INST | EV_RX_RESERVE | inst__rx_reserve | 500 | ST_INST | EV_RX_RESPONSE | inst__rx_response | 501 | ST_INST | EV_TIMEOUT_WAITRESP | inst__timeout_waitresp | 502 | ST_INST | EV_TIMEOUT_REFRESH | inst__timeout_refresh | 503 | ST_INST | EV_TIMEOUT_STATELIFETIME | inst__timeout_statelifetime | 504 +-----------+----------------------------+-------------------------------+ 506 Figure 2 508 6.3 Timer 510 The Response Timer at QNI and QNE is started when a RESPONSE message 511 is expected to a sent QUERY or RESERVE. When a reservation is set up, 512 the Refresh Timer are started at QNI and QNE and the StateLife Timer 513 are started at QNE and QNR. When the Refresh Timer times out, a 514 refreshing RESERVE is sent peer to peer towards the QNR and the 515 Response Timer are started because a confirmation is expected. On 516 arrival the StateLife Timer is restarted. 518 If the confirmation is not sent back, then the refreshing RESERVEs 519 are resent up to MAX_RETRY. After MAX_RETRY has been reached, 520 reservation state is removed and a RESERVE with set T-Flag is sent to 521 the QNR to remove reservation state along the path. When no 522 refreshing RESERVE arrive at QNE and QNR, then the StateLife Timer 523 expires and reservation state is also removed and a RESERVE with set 524 T-Flag is sent towards the QNR. 526 +-----------------+-------------------+-------------------+ 527 | QNI | QNE | QNR | 528 +-----------------+-------------------+-------------------+ 529 | Refresh Timer | Refresh Timer | StateLife Timer | 530 | Response Timer | Response Timer | | 531 | | StateLife Timer | | 532 +-----------------+-------------------+-------------------+ 534 Figure 3 536 6.4 The Toggle Flag 538 The Toggle Flag manipulates the direction of the message. When set, 539 the message is sent in the opposite direction compared to the 540 received one. The boolean operation XOR is used. Example, where true 541 is the toggle flag: DOWNSTREAM XOR true = UPSTREAM (0 XOR 1 = 1). 543 7. State machine 545 The following section presents the state machine diagrams of QoS NSLP 547 7.1 State ST_IDLE 549 (see the .pdf version for missing diagram or 550 refer to Appendix A.1 if reading the .txt version) 552 Figure 4 554 (see the .pdf version for missing diagram or 555 refer to Appendix A.1 if reading the .txt version) 557 Figure 5 559 7.2 State ST_WR 561 (see the .pdf version for missing diagram or 562 refer to Appendix A.2 if reading the .txt version) 564 Figure 6 566 (see the .pdf version for missing diagram or 567 refer to Appendix A.2 if reading the .txt version) 569 Figure 7 571 7.3 State ST_INST 572 (see the .pdf version for missing diagram or 573 refer to Appendix A.3 if reading the .txt version) 575 Figure 8 577 (see the .pdf version for missing diagram or 578 refer to Appendix A.3 if reading the .txt version) 580 Figure 9 582 (see the .pdf version for missing diagram or 583 refer to Appendix A.3 if reading the .txt version) 585 Figure 10 587 8. Actions and Transitions 589 This chapter describes the operation of the FSM. 591 8.1 State ST_IDLE 593 8.1.1 idle__tg_query 595 The local application has triggered a QUERY in ST_IDLE. If the node 596 position is QNR and a Receiver Initiated Reservation is requested, 597 then a QUERY message is constructed with set R-Flag together with a 598 PC and a QSPEC. No RII object is included because a RESPONSE message 599 does not need to be triggered. In case of a normal QUERY a RII object 600 is included to match back the response. It also contains a QSPEC to 601 perform a query along the path. In both cases the variable Direction 602 is set to DOWNSTREAM and the Response Timer is started. The message 603 is sent downstream and transition is made to ST_WR. 605 8.1.2 idle__rx_query 607 This function is executed when a QUERY message has arrived over the 608 network from GIST and the FSM is in State ST_IDLE. If a QSPEC object 609 is present, then it is passed to the RMF. If the R-Flag is not set 610 and the node position is QNE and the Scoping Flag is not set, then a 611 new QUERY message with the returned QSPEC from the RMF is constructed 612 and sent further along the path. If the Scoping Flag is set or the 613 node position is QNI or QNR, then a RESPONSE message with the 614 received RII object, an INFO object with Error Class SUCCESS and the 615 QSPEC object is sent back with set Toggle Flag. Transition is made to 616 ST_IDLE. 618 If the R-Flag is set and the node position is QNI and the RMF returns 619 that no resources are available, then a RESPONSE with a RSN object 620 and a INFO object with Error Class Failure is sent back. Transition 621 is done to ST_IDLE. 623 In the other case where resources are available, the RMF performs 624 resource reservation. A new RESERVE message is created, the Q-Flag is 625 set, if Reduced Refreshes were requested, a RSN object, a PC and the 626 returned QSPEC is added. If a response is requested, then a RII 627 object is added additionally and the response timer is started. 628 Direction is set to UPSTREAM and the message is sent upstream. The 629 refresh timer is started. Transition is made to ST_INST. 631 8.1.3 idle__tg_reserve 633 The local application has triggered a RESERVE message to be sent. If 634 the T-Flag is set, then a RESERVE message is sent downstream with set 635 T-Flag and with a RSN object. Transition is made to ST_IDLE. 637 If the node position is QNI and the RMF returns that no resources are 638 available, then a FAILURE is sent back to the local application. 639 Transition is made to ST_IDLE. 641 If resources are available, then the RMF performs resource 642 reservation, a new RESERVE message is created, the Q-Flag is set if 643 reduced refreshes are requested, a RSN object, a PC and the returned 644 QSPEC is added. If a response is requested, then a RII object is 645 added additionally and the response timer is started. Direction is 646 set to DOWNSTREAM and the message is sent downstream. The refresh 647 timer is started. Transition is made to ST_INST. 649 8.1.4 idle__rx_reserve 651 A RESERVE from the network in ST_IDLE has arrived. If the T-Flag is 652 set, if the node position is QNE and if the Scoping Flag is not set, 653 then the message is forwarded further along the path with 654 toggle=false. Transition is made to ST_IDLE. 656 If the T-Flag is not set and the RMF returns that no resources are 657 available, then a RESPONSE with a RII (if available, else with RSN 658 object) and a INFO object with Error Class Failure is sent back. 659 Transition is done to ST_IDLE. 661 If resources are available, then the RMF performs resource 662 reservation, the State Timer is started. If the node position is QNE 663 and the Scoping Flag is not set, then a new RESERVE message is 664 created out of the old one and sent further downstream. The Response 665 Timer is started additionally to the Refresh Timer. If the Q-Flag 666 was set in the received message, the variable ReducedRefreshes is set 667 to true and a NOTIFY with the corresponding INFO object is sent back 668 with toggle=true. If the received message contained a RII object and 669 the node is QNR or QNE and the Scoping Flag is set, then a RESPONSE 670 with this RII object and INFO=SUCCESS is sent back. Transition is 671 made to ST_INST. 673 8.1.5 idle__rx_response 675 If the node position is QNE and the Scoping Flag is not set, then the 676 RESPONSE message is forwarded further along the path. Transition is 677 made to ST_IDLE. 679 8.2 State ST_WR 681 8.2.1 wr__tg_query 682 The local application has triggered a QUERY in ST_WR. The value of 683 the RII object is stored and the message is sent to the stored 684 direction together with a QSPEC object. The Response Timer is 685 started. Transition is made to ST_WR. 687 8.2.2 wr__rx_query 689 This function is executed when a QUERY message has arrived over the 690 network from GIST and the FSM is in State ST_WR. If a QSPEC object is 691 present, then it is passed to the RMF. If the R-Flag is not set and 692 the node position is QNE and the Scoping Flag is not set, then a new 693 QUERY message with the returned QSPEC from the RMF is constructed and 694 sent further along the path. If the Scoping Flag is set or the node 695 position is QNI or QNR, then a RESPONSE message with the received RII 696 object, an INFO object with Error Class Success and the QSPEC object 697 is sent back with set Toggle Flag. Transition is made to ST_WR. 699 8.2.3 wr__tg_reserve 701 See idle__tg_reserve. 703 8.2.4 wr__rx_reserve 705 See idle__rx_reserve. If the node position is QNR and the stored 706 Direction is DOWNSTREAM, then this is the requested RESERVE message 707 for the Receiver Initiated Reservation. The Response Timer is 708 stopped. Transition is made to ST_INST. 710 8.2.5 wr__rx_response 712 In ST_WR a RESPONSE message has arrived. If the node position is QNE 713 and no Scoping Flag is set, then the RESPONSE message is forwarded. 714 If the RII object is stored to match back a response, then the 715 Response Timer is stopped. If no more Response Timer are pending, 716 transition is made to ST_IDLE, otherwise to ST_WR. 718 8.2.6 wr__timeout_response 720 A Response Timer has timed out while in ST_WR. If the maximum number 721 of retries has been reached, then the Response Timer is stopped. If 722 no more Response Timer are pending, transition is done to ST_IDLE, 723 otherwise to ST_WR. If the maximum number of retransmissions has not 724 been reached, then the stored message is resent and transition is 725 made to ST_WR. 727 8.3 State ST_INST 729 8.3.1 inst__tg_query 730 See wr__tg_query. Transition is made to ST_INST. 732 8.3.2 inst__rx_query 734 See wr__rx_query. Transition is made to ST_INST. 736 8.3.3 inst__rx_notify 738 If Reduced Refreshes were requested, then the Error Code is checked 739 whether the next peer has accepted them. After receiving the RII 740 object Reduced Refreshes can be used as refreshing RESERVEs. 741 Transition is made to ST_INST. 743 8.3.4 inst__tg_reserve 745 If the T-Flag is set, then all pending timers are stopped, the 746 reservation is torn down and the message is sent further along the 747 path into the stored direction with toggle=false. Transition is done 748 to ST_IDLE. 750 8.3.5 inst__rx_reserve 752 A RESERVE message in ST_INST has arrived. If the T-Flag is set, then 753 all pending timer are stopped, the reservation is torn down. If the 754 node position is QNE and the S-Flag is not set, then the RESERVE is 755 forwarded with toggle=false. Transition is done to ST_IDLE. 757 If the T-Flag is not set, then this is a refreshing RESERVE. A 758 RESPONSE with the received RII and INFO=SUCCESS is sent back with 759 Toggle=false, if the node position is QNR or QNE and the S-Flag is 760 set. The Statelife Timer is being restarted. 762 8.3.6 inst__rx_response 764 In ST_INST a RESPONSE message has arrived. If the node position is 765 QNE and no Scoping Flag is set, then the RESPONSE message is 766 forwarded. If the RII object is stored to match back a response, then 767 the Response Timer is stopped. If the received Error Code of the INFO 768 object is SUCCESS, then the Response Timer is started. Transition is 769 done to ST_INST. 771 If the Error Code is FAILURE, then the reservation state is deleted 772 and pending timer are stopped. Transition is made to ST_IDLE. 774 8.3.7 inst__timeout_response 776 A Response Timer has timed out while in ST_INST. If the maximum 777 number of retries has been reached, then all pending timer are 778 stopped. Transition is made to ST_IDLE. If maximum numbers of 779 retransmissions has not been reached, then the refreshing RESERVE is 780 resent and the Response Timer is restarted. Transition is made to 781 ST_INST. 783 8.3.8 inst__timeout_refresh 785 A RESERVE message is created. If Reduced Refreshes are accepted, no 786 QSPEC object is added. If the refresh is sent along the whole path, 787 then a RII object is added. The Response and the Refresh Timer is 788 restarted. Transition is made to ST_INST. 790 8.3.9 inst__timeout_statelifetime 792 The Statelife Timer timed out in ST_INST. All active timer are 793 stopped and existing reservations are removed. If the node position 794 is not QNR, then a RESERVE message with T-Flag set is created and 795 sent into the stored direction. Transition is done to ST_IDLE. 797 9. Security Considerations 799 This document does not raise new security considerations. Any 800 security concerns with QoS NSLP are likely reflected in security 801 related NSIS work already (such as [1] or [6]). 803 For the time being, the state machine described in this document does 804 not consider the security aspect of QoS NSLP protocol itself. A 805 future version of this document will add security relevant states and 806 state transitions. 808 10. Open Issues 810 This document tries to describe possible states and transitions for 811 QoS NSLP according to its current specification [1], Section 5. We 812 found some issues during the development of the state machines. 814 1. Bi-directional reservation is difficult to support as the state 815 machine becomes quite complex (note at one particular point in 816 time the protocol state engine can be only in one state). 817 2. How to signal unsuccessful reservation for Receiver initiated 818 reservation (No RII included; a resulting Response(RSN) cannot be 819 forwarded further than the next peer). We use NOTIFY message. 820 3. The case of unsuccessful reservation at a QNE node and no RII 821 specified by upstream nodes. According to the spec RESPONSE(RSN) 822 should not be forwarded further than the next peer. Currently we 823 use NOTIFY(RSN) that is sent further to the upstream nodes. 825 4. We assume that handling of QoS state lifetime expiration event is 826 based on the local policy of the node. NOTIFY/Reserve(Ton) 827 messages might be sent to other peers. 828 5. The draft states that RESERVE message MUST be sent only towards 829 the QNR. This is not the case when re-routing procedure is done 830 and RESERVE(Ton) message should be sent from merging QNE node for 831 deleting the old branch. We believe this is towards the QNI. 832 6. Re-routing functionality described in this document is not 833 complete and need further consideration. 835 11. Change History 837 11.1 Changes in Version -01 839 1. Notation of the nodes changed to QNI, QNE and QNR. 840 2. Description of soft state refresh functionality. 841 3. Support of ACK flag in the common header. 842 4. Include of QoS NSLP objects, flags from the common header and 843 entries stored with the installed QoS state in a node: ACK, 844 Replace, RSN, Error_SPEC, QSPEQ, FlowID, SII. 845 5. Initial description of Re-routing functionality. 846 6. For support of all listed changes, some notations are changed. 848 11.2 Changes in Version -02 850 1. Switch to .pdf format of the draft and include graphic diagrams. 851 2. Update notation from "Summary refresh" to "Reduced refresh" 852 3. Description of QoS reservation update/upgrade 854 11.3 Changes in Version -03 856 1. Deep review of the state machine architecture 858 11.4 Changes in Version -04 860 1. Reduced the three state machines of QNI, QNE and QNR to one for 861 all nodes. 862 2. Introduced new flags to have a finer control of the direction of 863 the message to be sent. 865 11.5 Changes in Version -05 867 1. Combined ST_WR2 and ST_INST into ST_INST 868 2. Support for Q-Flag in common header 869 3. Explanations on the execution of the State Machine added 871 12. Acknowledgments 873 The authors would like to thank Sven Van den Bosch and Christian 874 Dickmann for their feedback. 876 13. References 878 13.1. Normative References 880 [1] Manner, J., Karagiannis, G. and McDonald, A., "NSLP for 881 Quality-of-Service Signaling", Internet draft, draft- 882 ietf-nsis-qos-nslp-11 (work in progress), June 2006. 884 [2] Bradner, S., "Key words for use in RFCs to Indicate 885 Requirement Levels", BCP 14, RFC 2119, March 1997. 887 13.2. Informative References 889 [3] Vollbrecht, J., Eronen, P., Petroni, N., and Y. Ohba, 890 "State Machines for Extensible Authentication Protocol 891 (EAP) Peer and Authenticator", draft-ietf-eap- 892 statemachine-06 (work in progress), December 2004. 894 [4] Institute of Electrical and Electronics Engineers, "DRAFT 895 Standard for Local and Metropolitan Area Networks: Port- 896 Based 897 Network Access Control (Revision)", IEEE 802-1X-REV/D11, 898 July 2004. 900 [5] Ohba, Y., "State Machines for Protocol for Carrying 901 Authentication for Network Access (PANA)", 902 draft-ohba-pana-statemachine-01 (work in progress), 903 February 2005. 905 [6] Tschofenig, H. and D. Kroeselberg, "Security Threats for 906 NSIS", draft-ietf-nsis-threats-06 (work in progress), 907 October 2004. 909 Appendix A. ASCII versions of state diagrams 911 This appendix contains the state diagrams in ASCII format. Please use 912 the PDF version whenever possible: it is much easier to understand. 914 The notation is as follows: for each state there is a separate table 915 that lists in each row: 916 - an event that triggers a transition, 917 - actions taken as a result of the incoming event, 918 - and the new state at which the transitions ends. 920 A.1. State ST_IDLE 922 ST_IDLE::EV_TG_RESERVE 923 +---------------------------------------------------------+-----------+ 924 | Action | new State | 925 +---------------------------------------------------------+-----------+ 926 | | | 927 | if(T-Flag) { | ST_IDLE | 928 | tx_reserve(T-Flag, RSN, Direction=DOWNSTREAM); | | 929 | } | | 930 | | | 931 +---------------------------------------------------------+-----------+ 932 | | | 933 | if((!T-Flag) && (Nodepos==QNI) && (RMF()==NO_AVAIL)) { | ST_IDLE | 934 | send_info_to_app(); | | 935 | } | | 936 | | | 937 +---------------------------------------------------------+-----------+ 938 | | | 939 | if((!T-Flag) && (Nodepos==QNI) && (RMF()==AVAIL)) { | ST_INST | 940 | install_qos_state(); | | 941 | if(setRII) { | | 942 | tx_reserve(Q-Flag, RSN, RII, PC, QSPEC, | | 943 | Direction=DOWNSTREAM); | | 944 | } else { | | 945 | tx_reserve(Q-Flag, RSN, PC, QSPEC, | | 946 | Direction=DOWNSTREAM); | | 947 | } | | 948 | startRefreshTimer(); | | 949 | startResponseTimer(); | | 950 | } | | 951 | | | 952 +---------------------------------------------------------+-----------+ 954 Figure 11 956 ST_IDLE::EV_RX_RESERVE 957 +---------------------------------------------------------+-----------+ 958 | Action | new State | 959 +---------------------------------------------------------+-----------+ 960 | | | 961 | if(T-Flag && (Nodepos==QNE) && (!S-Flag)) { | ST_IDLE | 962 | tx_reserve(T-Flag, RSN, Toggle=false); | | 963 | } | | 964 | | | 965 +---------------------------------------------------------+-----------+ 966 | | | 967 | if((!T-Flag) && (RMF()==NO_AVAIL)) { | ST_IDLE | 968 | tx_response(RII/RSN, INFO(FAILURE), Toggle=true) | | 969 | } | | 970 | | | 971 +---------------------------------------------------------+-----------+ 972 | | | 973 | if((!T-Flag) && (RMF()==AVAIL)) { | ST_INST | 974 | install_qos_state(); | | 975 | startStateTimer(); | | 976 | if((Nodepos==QNE) && (!S-Flag)) { | | 977 | Direction=DOWNSTREAM; | | 978 | tx_reserve(Toggle=false); | | 979 | startRefreshTimer(); | | 980 | startResponseTimer(); | | 981 | } | | 982 | if(Q-Flag) { | | 983 | ReducedRefreshes=true; | | 984 | tx_notify(INFO(RR_SUPPORTED), Toggle=true); | | 985 | } | | 986 | if(RII && ((Nodepos==QNR) || | | 987 | ((Nodepos==QNE) && S-Flag))) { | | 988 | Direction=UPSTREAM; | | 989 | tx_response(RII, INFO(SUCCESS), Toggle=true); | | 990 | } | | 991 | } | | 992 | | | 993 +---------------------------------------------------------+-----------+ 995 Figure 12 997 ST_IDLE::EV_TG_QUERY 998 +---------------------------------------------------------+-----------+ 999 | Action | new State | 1000 +---------------------------------------------------------+-----------+ 1001 | | | 1002 | if((Nodepos==QNR) && R-Flag) { | ST_WR | 1003 | tx_query(R-Flag, PC, QSPEC, Direction=DOWNSTREAM); | | 1004 | } else { | | 1005 | tx_query(RII, QSPEC, Direction=DOWNSTREAM); | | 1006 | } | | 1007 | startResponseTimer(); | | 1008 | | | 1009 +---------------------------------------------------------+-----------+ 1011 Figure 13 1013 ST_IDLE::EV_RX_QUERY 1014 +---------------------------------------------------------+-----------+ 1015 | Action | new State | 1016 +---------------------------------------------------------+-----------+ 1017 | | | 1018 | queryRMF(QSPEC); | ST_IDLE | 1019 | if(!(R-Flag && (Nodepos==QNI))) { | | 1020 | if((Nodepos==QNE) && (!S-Flag)) { | | 1021 | tx_query(QSPEC, Toggle=false); | | 1022 | } else { | | 1023 | tx_response(RII/RSN, INFO(SUCCESS), | | 1024 | QSPEC, Toggle=true); | | 1025 | } | | 1026 | } | | 1027 | | | 1028 +---------------------------------------------------------+-----------+ 1029 | | | 1030 | if(R-Flag && (Nodepos==QNI) && (RMF()==NO_AVAIL)) { | ST_IDLE | 1031 | tx_response(RSN, INFO(FAILURE), Toggle=true); | | 1032 | } | | 1033 | | | 1034 +---------------------------------------------------------+-----------+ 1035 | | | 1036 | if(R-Flag && (Nodepos==QNI) && (RMF()==AVAIL)) { | ST_INST | 1037 | install_qos_state(); | | 1038 | if(setRII) { | | 1039 | tx_reserve(Q-Flag, RSN, RII, PC, QSPEC, | | 1040 | Direction=UPSTREAM); | | 1041 | } else { | | 1042 | tx_reserve(Q-Flag, RSN, PC, QSPEC, | | 1043 | Direction=UPSTREAM); | | 1044 | } | | 1045 | startRefreshTimer(); | | 1046 | startResponseTimer(); | | 1047 | } | | 1048 | | | 1049 +---------------------------------------------------------+-----------+ 1050 Figure 14 1052 ST_IDLE::EV_RX_RESPONSE 1053 +---------------------------------------------------------+-----------+ 1054 | Action | new State | 1055 +---------------------------------------------------------+-----------+ 1056 | | | 1057 | if((Nodepos==QNE) && (!S-Flag)) { | ST_IDLE | 1058 | tx_response(Toggle=false); | | 1059 | } | | 1060 | | | 1061 +---------------------------------------------------------+-----------+ 1063 Figure 15 1065 A.2. State ST_WR 1067 ST_WR::EV_RX_RESPONSE 1068 +---------------------------------------------------------+-----------+ 1069 | Action | new State | 1070 +---------------------------------------------------------+-----------+ 1071 | | | 1072 | if((Nodepos==QNE) && (!S-Flag)) { | | 1073 | tx_response(Toggle=false); | | 1074 | } | | 1075 | if(is_local(RII)==true) { | | 1076 | stopResponseTimer(); | | 1077 | } | | 1078 | | | 1079 +---------------------------------------------------------+-----------+ 1080 | | | 1081 | if(TIMER_PENDING==true) | ST_WR | 1082 | | | 1083 +---------------------------------------------------------+-----------+ 1084 | | | 1085 | if(TIMER_PENDING==false) | ST_IDLE | 1086 | | | 1087 +---------------------------------------------------------+-----------+ 1089 Figure 16 1091 ST_WR::EV_TIMEOUT_RESPONSE 1092 +---------------------------------------------------------+-----------+ 1093 | Action | new State | 1094 +---------------------------------------------------------+-----------+ 1095 | | | 1096 | if((MAX_RETRY) && (!TIMER_PENDING)) | ST_IDLE | 1097 | | | 1098 +---------------------------------------------------------+-----------+ 1099 | | | 1100 | if((MAX_RETRY) && (TIMER_PENDING)) | ST_WR | 1101 | | | 1102 +---------------------------------------------------------+-----------+ 1103 | | | 1104 | if(MAX_RETRY) { | ST_WR | 1105 | tx_query(Direction); | | 1106 | restartResponseTimer(); | | 1107 | } | | 1108 | | | 1109 +---------------------------------------------------------+-----------+ 1111 Figure 17 1113 ST_WR::EV_RX_RESERVE 1114 +---------------------------------------------------------+-----------+ 1115 | Action | new State | 1116 +---------------------------------------------------------+-----------+ 1117 | | | 1118 | if(T-Flag && (Nodepos==QNE) && (!S-Flag)) { | ST_IDLE | 1119 | tx_reserve(T-Flag, RSN, Toggle=false); | | 1120 | stopTimers(); | | 1121 | } | | 1122 | | | 1123 +---------------------------------------------------------+-----------+ 1124 | | | 1125 | if((!T-Flag) && (RMF()==NO_AVAIL)) { | ST_IDLE | 1126 | tx_response(RII/RSN, INFO(FAILURE), Toggle=true); | | 1127 | } | | 1128 | | | 1129 +---------------------------------------------------------+-----------+ 1130 | | | 1131 | if((!T-Flag) && (RMF()==AVAIL)) { | ST_INST | 1132 | install_qos_state(); | | 1133 | startStateTimer(); | | 1134 | if((Nodepos==QNR) && (Direction==DOWNSTREAM)) { | | 1135 | stopResponseTimer(); | | 1136 | } | | 1137 | if((Nodepos==QNE) && (!S-Flag)) { | | 1138 | tx_reserve(Toggle=false); | | 1139 | startRefreshTimer(); | | 1140 | startResponseTimer(); | | 1141 | } | | 1142 | if(Q-Flag) { | | 1143 | ReducedRefreshes=true; | | 1144 | tx_notify(info(RR_SUPPORTED), Toggle=true); | | 1145 | } | | 1146 | if(RII && ((Nodepos==QNR) || | | 1147 | ((Nodepos==QNE) && S-Flag))) { | | 1148 | tx_response(RII, INFO(SUCCESS), Toggle=true); | | 1149 | } | | 1150 | } | | 1151 | | | 1152 +---------------------------------------------------------+-----------+ 1154 Figure 18 1156 ST_WR::EV_TG_QUERY 1157 +---------------------------------------------------------+-----------+ 1158 | Action | new State | 1159 +---------------------------------------------------------+-----------+ 1160 | | | 1161 | tx_query(RII, QSPEC, Direction); | ST_WR | 1162 | startResponseTimer(); | | 1163 | | | 1164 +---------------------------------------------------------+-----------+ 1166 Figure 19 1168 ST_WR::EV_RX_QUERY 1169 +---------------------------------------------------------+-----------+ 1170 | Action | new State | 1171 +---------------------------------------------------------+-----------+ 1172 | | | 1173 | queryRMF(QSPEC); | ST_WR | 1174 | if((Nodepos==QNE) && (!S-Flag)) { | | 1175 | tx_query(QSPEC, Toggle=false); | | 1176 | } else { | | 1177 | tx_response(RII/RSN, INFO(SUCCESS), QSPEC, | | 1178 | Toggle=true); | | 1179 | } | | 1180 | | | 1181 +---------------------------------------------------------+-----------+ 1183 Figure 20 1185 ST_WR::EV_TG_RESERVE 1186 +---------------------------------------------------------+-----------+ 1187 | Action | new State | 1188 +---------------------------------------------------------+-----------+ 1189 | | | 1190 | if(T-Flag) { | ST_IDLE | 1191 | tx_reserve(T-Flag, RSN, Direction=DOWNSTREAM); | | 1192 | stopTimers(); | | 1193 | } | | 1194 | | | 1195 +---------------------------------------------------------+-----------+ 1196 | | | 1197 | if((!T-Flag) && (Nodepos==QNI) && (RMF()==NO_AVAIL)) { | ST_IDLE | 1198 | send_info_to_app(); | | 1199 | } | | 1200 | | | 1201 +---------------------------------------------------------+-----------+ 1202 | | | 1203 | if((!T-Flag) && (Nodepos==QNI) && (RMF()==AVAIL)) { | ST_INST | 1204 | install_qos_state(); | | 1205 | if(setRII) { | | 1206 | tx_reserve(Q-Flag, RSN, RII, PC, QSPEC, | | 1207 | Direction=DOWNSTREAM); | | 1208 | } else { | | 1209 | tx_reserve(Q-Flag, RSN, PC, QSPEC, | | 1210 | Direction=DOWNSTREAM); | | 1211 | } | | 1212 | startRefreshTimer(); | | 1213 | startResponseTimer(); | | 1214 | } | | 1215 | | | 1216 +---------------------------------------------------------+-----------+ 1218 Figure 21 1220 A.3. State ST_INST 1222 ST_INST::EV_RX_RESPONSE 1223 +---------------------------------------------------------+-----------+ 1224 | Action | new State | 1225 +---------------------------------------------------------+-----------+ 1226 | | | 1227 | if((Nodepos==QNE) && (!S-Flag)) { | | 1228 | tx_response(toggle=false); | | 1229 | } | | 1230 | if(is_local(RII)==true) { | | 1231 | stopResponseTimer(); | | 1232 | } | | 1233 | | | 1234 +---------------------------------------------------------+-----------+ 1235 | | | 1236 | if(INFO==SUCCESS) | ST_INST | 1237 | | | 1238 +---------------------------------------------------------+-----------+ 1239 | | | 1240 | if(INFO==FAILURE) { | ST_IDLE | 1241 | delete_qos_state(); | | 1242 | stop_timers(); | | 1243 | } | | 1244 | | | 1245 +---------------------------------------------------------+-----------+ 1247 Figure 22 1249 ST_INST::EV_RX_RESERVE 1250 +---------------------------------------------------------+-----------+ 1251 | Action | new State | 1252 +---------------------------------------------------------+-----------+ 1253 | | | 1254 | if(T-Flag) { | ST_IDLE | 1255 | delete_qos_state(); | | 1256 | stopTimers(); | | 1257 | if((Nodepos==QNE) && (!S-Flag)) { | | 1258 | tx_reserve(Toggle=false); | | 1259 | } | | 1260 | } | | 1261 | | | 1262 +---------------------------------------------------------+-----------+ 1263 | | | 1264 | if(!T-Flag) { | ST_INST | 1265 | if((Nodepos==QNR) || ((Nodepos==QNE)&&(!S-Flag))) { | | 1266 | if(RII) { | | 1267 | tx_response(RII, RSN, INFO(SUCCESS), | | 1268 | Toggle=true); | | 1269 | } else { | | 1270 | tx_notify(INFO(SUCCESS), Toggle=true); | | 1271 | } | | 1272 | } | | 1273 | restartStateTimer(); | | 1274 | } | | 1275 | | | 1276 +---------------------------------------------------------+-----------+ 1278 Figure 23 1280 ST_INST::EV_RX_NOTIFY 1281 +---------------------------------------------------------+-----------+ 1282 | Action | new State | 1283 +---------------------------------------------------------+-----------+ 1284 | | | 1285 | if(ErrorClass==ERRORCLASS_INFO) { | ST_INST | 1286 | if(ErrorCode==RR_NOT_SUPPORTED) { | | 1287 | ReducedRefreshes = false; | | 1288 | } else if(ErrorCode==RR_SUPPORTED) { | | 1289 | ReducedRefreshes = true; | | 1290 | } | | 1291 | } | | 1292 | if(ErrorClass==SUCCESS) { | | 1293 | stopResponseTimer(); | | 1294 | } | | 1295 | | | 1296 +---------------------------------------------------------+-----------+ 1298 Figure 24 1300 ST_INST::EV_TG_QUERY 1301 +---------------------------------------------------------+-----------+ 1302 | Action | new State | 1303 +---------------------------------------------------------+-----------+ 1304 | | | 1305 | tx_query(RII, QSPEC, Direction); | ST_INST | 1306 | startResponseTimer(); | | 1307 | | | 1308 +---------------------------------------------------------+-----------+ 1310 Figure 25 1312 ST_INST::EV_RX_QUERY 1313 +---------------------------------------------------------+-----------+ 1314 | Action | new State | 1315 +---------------------------------------------------------+-----------+ 1316 | | | 1317 | if(!R-Flag) { | ST_INST | 1318 | queryRMF(QSPEC); | | 1319 | if((Nodepos==QNE) && (!S-Flag)) | | 1320 | tx_query(QSPEC, Toggle=false); | | 1321 | } else { | | 1322 | tx_response(RII/RSN, INFO, QSPEC, Toggle=true); | | 1323 | } | | 1324 | } | | 1325 | | | 1326 +---------------------------------------------------------+-----------+ 1328 Figure 26 1330 ST_INST::EV_TG_RESERVE 1331 +---------------------------------------------------------+-----------+ 1332 | Action | new State | 1333 +---------------------------------------------------------+-----------+ 1334 | | | 1335 | if(T-Flag) { | ST_INST | 1336 | delete_qos_state(); | | 1337 | stopTimers(); | | 1338 | tx_reserve(T-Flag, RSN, Direction); | | 1339 | } | | 1340 | | | 1341 +---------------------------------------------------------+-----------+ 1343 Figure 27 1345 ST_INST::EV_TIMEOUT_RESPONSE 1346 +---------------------------------------------------------+-----------+ 1347 | Action | new State | 1348 +---------------------------------------------------------+-----------+ 1349 | | | 1350 | if(MAX_RETRY) { | ST_IDLE | 1351 | delete_qos_state(); | | 1352 | stopTimers(); | | 1353 | } | | 1354 | | | 1355 +---------------------------------------------------------+-----------+ 1356 | | | 1357 | if(!MAX_RETRY) { | ST_INST | 1358 | tx_reserve(Direction); | | 1359 | restartResponseTimer() | | 1360 | } | | 1361 | | | 1362 +---------------------------------------------------------+-----------+ 1364 Figure 28 1366 ST_INST::EV_TIMEOUT_REFRESH 1367 +---------------------------------------------------------+-----------+ 1368 | Action | new State | 1369 +---------------------------------------------------------+-----------+ 1370 | | | 1371 | if(ReducedRefreshes) { | ST_INST | 1372 | if(WholePath) { | | 1373 | tx_reserve(RSN, RII, Direction); | | 1374 | } else { | | 1375 | tx_reserve(RSN, Direction); | | 1376 | } | | 1377 | } else { | | 1378 | if(WholePath) { | | 1379 | tx_reserve(RSN, RII, QSPEC, Direction); | | 1380 | } else { | | 1381 | tx_reserve(RSN, QSPEC, Direction); | | 1382 | } | | 1383 | } | | 1384 | startResponseTimer(); | | 1385 | restartRefreshTimer(); | | 1386 | | | 1387 +---------------------------------------------------------+-----------+ 1389 Figure 29 1391 ST_INST::EV_TIMEOUT_STATELIFETIME 1392 +---------------------------------------------------------+-----------+ 1393 | Action | new State | 1394 +---------------------------------------------------------+-----------+ 1395 | | | 1396 | stopTimers(); | ST_IDLE | 1397 | delete_qos_state(); | | 1398 | if(Nodepos != QNR) { | | 1399 | tx_reserve(T-Flag, RSN, Direction); | | 1400 | } | | 1401 | | | 1402 +---------------------------------------------------------+-----------+ 1404 Figure 30 1406 Authors' Addresses 1408 Xiaoming Fu 1409 University of Goettingen 1410 Telematics Group 1411 Lotzestrasse 16-18 1412 Goettingen 37083 1413 Germany 1415 Email: fu@cs.uni-goettingen.de 1417 Hannes Tschofenig 1418 Siemens 1419 Otto-Hahn-Ring 6 1420 Munich, Bayern 81739 1421 Germany 1423 Email: Hannes.Tschofenig@siemens.com 1425 Tseno Tsenov 1426 Siemens 1427 Otto-Hahn-Ring 6 1428 Munich, Bayern 81739 1429 Germany 1431 Email: tseno.tsenov@mytum.de 1433 Bernd Schloer 1434 University of Goettingen 1435 Telematics Group 1436 Lotzestrasse 16-18 1437 Goettingen 37083 1438 Germany 1440 Email: bschloer@cs.uni-goettingen.de 1442 Intellectual Property Statement 1444 The IETF takes no position regarding the validity or scope of any 1445 Intellectual Property Rights or other rights that might be claimed to 1446 pertain to the implementation or use of the technology described in 1447 this document or the extent to which any license under such rights 1448 might or might not be available; nor does it represent that it has 1449 made any independent effort to identify any such rights. Information 1450 on the procedures with respect to rights in RFC documents can be 1451 found in BCP 78 and BCP 79. 1453 Copies of IPR disclosures made to the IETF Secretariat and any 1454 assurances of licenses to be made available, or the result of an 1455 attempt made to obtain a general license or permission for the use of 1456 such proprietary rights by implementers or users of this 1457 specification can be obtained from the IETF on-line IPR repository at 1458 http://www.ietf.org/ipr. 1460 The IETF invites any interested party to bring to its attention any 1461 copyrights, patents or patent applications, or other proprietary 1462 rights that may cover technology that may be required to implement 1463 this standard. Please address the information to the IETF at ietf- 1464 ipr@ietf.org. 1466 Disclaimer of Validity 1468 This document and the information contained herein are provided on an 1469 "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS 1470 OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET 1471 ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, 1472 INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE 1473 INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED 1474 WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. 1476 Copyright Statement 1478 Copyright (C) The Internet Society (2006). This document is subject 1479 to the rights, licenses and restrictions contained in BCP 78, and 1480 except as set forth therein, the authors retain all their rights. 1482 Acknowledgement 1484 Funding for the RFC Editor function is currently provided by the 1485 Internet Society.