| < draft-fu-nsis-qos-nslp-statemachine-04.txt | draft-fu-nsis-qos-nslp-statemachine-05.txt > | |||
|---|---|---|---|---|
| NSIS X. Fu | NSIS X. Fu | |||
| B. Schloer | B. Schloer | |||
| Internet-Draft Univ. Goettingen | Internet-Draft Univ. Goettingen | |||
| Expiration Date: December 2006 H. Tschofenig | Expiration Date: June 24, 2007 H. Tschofenig | |||
| T. Tsenov | T. Tsenov | |||
| Siemens | Siemens | |||
| June 25, 2006 | December 25, 2006 | |||
| QoS NSLP State Machine | QoS NSLP State Machine | |||
| draft-fu-nsis-qos-nslp-statemachine-04.txt | draft-fu-nsis-qos-nslp-statemachine-05.txt | |||
| Status of this Memo | Status of this Memo | |||
| By submitting this Internet-Draft, each author represents that any | By submitting this Internet-Draft, each author represents that any | |||
| applicable patent or other IPR claims of which he or she is aware | applicable patent or other IPR claims of which he or she is aware | |||
| have been or will be disclosed, and any of which he or she becomes | have been or will be disclosed, and any of which he or she becomes | |||
| aware will be disclosed, in accordance with Section 6 of BCP 79. | aware will be disclosed, in accordance with Section 6 of BCP 79. | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF), its areas, and its working groups. Note that | Task Force (IETF), its areas, and its working groups. Note that other | |||
| other groups may also distribute working documents as Internet- | groups may also distribute working documents as Internet- Drafts. | |||
| Drafts. | ||||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| The list of current Internet-Drafts can be accessed at | The list of current Internet-Drafts can be accessed at | |||
| http://www.ietf.org/ietf/1id-abstracts.txt. | http://www.ietf.org/ietf/1id-abstracts.txt. | |||
| The list of Internet-Draft Shadow Directories can be accessed at | The list of Internet-Draft Shadow Directories can be accessed at | |||
| http://www.ietf.org/shadow.html. | http://www.ietf.org/shadow.html. | |||
| This Internet-Draft will expire on December 25, 2006. | This Internet-Draft will expire on June 24, 2007. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (C) The Internet Society (2006). All Rights Reserved. | Copyright (C) The Internet Society (2006). All Rights Reserved. | |||
| Abstract | Abstract | |||
| This document describes a state machine for the NSIS Signaling Layer | This document describes a state machine for the NSIS Signaling Layer | |||
| Protocol for Quality-of-Service signaling (QoS NSLP). A combined | Protocol for Quality-of-Service signaling (QoS NSLP). A combined | |||
| state machine for QoS NSLP entities at different locations of a flow | state machine for QoS NSLP entities at different locations of a flow | |||
| path is presented in order to illustrate how QoS NSLP may be | path is presented in order to illustrate how QoS NSLP may be | |||
| implemented. | implemented. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . 3 | 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 3. Notational conventions used in state diagrams . . . . . . . 3 | 3. Notational conventions used in state diagrams . . . . . . . 3 | |||
| 4. State Machine Symbols . . . . . . . . . . . . . . . . . . . 4 | 4. State Machine Symbols . . . . . . . . . . . . . . . . . . . 5 | |||
| 5. Common Rules . . . . . . . . . . . . . . . . . . . . . . . . 6 | 5. Common Rules . . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 5.1 Common Procedures . . . . . . . . . . . . . . . . . . . . 6 | 5.1 Common Procedures . . . . . . . . . . . . . . . . . . . . 7 | |||
| 5.2 Common Variables . . . . . . . . . . . . . . . . . . . . . 7 | 5.2 Common Variables . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 5.3 Events . . . . . . . . . . . . . . . . . . . . . . . . . 8 | 5.3 Events . . . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 5.4 Assumptions . . . . . . . . . . . . . . . . . . . . . . . 8 | 5.4 Assumptions . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 6. State Machine for QoS NSLP nodes . . . . . . . . . . . . . . 8 | 6. Basic State Machine Concept . . . . . . . . . . . . . . . . 11 | |||
| 6.1 State ST_IDLE . . . . . . . . . . . . . . . . . . . . . . 9 | 6.1 The QoS NSLP Daemon . . . . . . . . . . . . . . . . . . . 11 | |||
| 6.2 State ST_WR1 . . . . . . . . . . . . . . . . . . . . . . 11 | 6.2 States, Events and Callback Functions . . . . . . . . . . 12 | |||
| 6.3 State ST_WR2 . . . . . . . . . . . . . . . . . . . . . . 12 | 6.3 Timer . . . . . . . . . . . . . . . . . . . . . . . . . . 13 | |||
| 6.4 State ST_INST . . . . . . . . . . . . . . . . . . . . . . 14 | 6.4 The Toggle Flag . . . . . . . . . . . . . . . . . . . . . 13 | |||
| 7. Security Considerations . . . . . . . . . . . . . . . . . . 15 | 7. State Machine for QoS NSLP nodes . . . . . . . . . . . . . . 13 | |||
| 8. Open Issues . . . . . . . . . . . . . . . . . . . . . . . . 15 | 7.1 State ST_IDLE . . . . . . . . . . . . . . . . . . . . . . 14 | |||
| 9. Change History . . . . . . . . . . . . . . . . . . . . . . . 15 | 7.2 State ST_WR . . . . . . . . . . . . . . . . . . . . . . 16 | |||
| 9.1 Changes in Version -01 . . . . . . . . . . . . . . . . . 15 | 7.3 State ST_INST . . . . . . . . . . . . . . . . . . . . . . 18 | |||
| 9.2 Changes in Version -02 . . . . . . . . . . . . . . . . . 15 | 8 Actions and Transitions . . . . . . . . . . . . . . . . . . . 21 | |||
| 9.3 Changes in Version -03 . . . . . . . . . . . . . . . . . 16 | 8.1 State ST_IDLE . . . . . . . . . . . . . . . . . . . . . . 21 | |||
| 9.3 Changes in Version -04 . . . . . . . . . . . . . . . . . 16 | 8.2 State ST_WR . . . . . . . . . . . . . . . . . . . . . . 22 | |||
| 10. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . 16 | 8.3 State ST_INST . . . . . . . . . . . . . . . . . . . . . . 23 | |||
| 11. References . . . . . . . . . . . . . . . . . . . . . . . . . 16 | 9. Security Considerations . . . . . . . . . . . . . . . . . . 25 | |||
| 11.1 Normative References . . . . . . . . . . . . . . . . . . 16 | 10. Open Issues . . . . . . . . . . . . . . . . . . . . . . . 25 | |||
| 11.2 Informative References . . . . . . . . . . . . . . . . . 16 | 11. Change History . . . . . . . . . . . . . . . . . . . . . . 26 | |||
| Appendix A. ASCII versions of the state diagrams . . . . . . . . 17 | 11.1 Changes in Version -01 . . . . . . . . . . . . . . . . 26 | |||
| A.1 State ST_IDLE . . . . . . . . . . . . . . . . . . . . . 17 | 11.2 Changes in Version -02 . . . . . . . . . . . . . . . . 26 | |||
| A.2 State ST_WR1 . . . . . . . . . . . . . . . . . . . . . 18 | 11.3 Changes in Version -03 . . . . . . . . . . . . . . . . 26 | |||
| A.3 State ST_WR2 . . . . . . . . . . . . . . . . . . . . . 19 | 11.3 Changes in Version -04 . . . . . . . . . . . . . . . . 26 | |||
| A.4 State ST_INST . . . . . . . . . . . . . . . . . . . . . 20 | 11.4 Changes in Version -05 . . . . . . . . . . . . . . . . 26 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . 21 | 12. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . 27 | |||
| Intellectual Property and Copyright Statements . . . . . . . 22 | 13. References . . . . . . . . . . . . . . . . . . . . . . . . . 28 | |||
| 13.1 Normative References . . . . . . . . . . . . . . . . . . 28 | ||||
| 13.2 Informative References . . . . . . . . . . . . . . . . . 28 | ||||
| Appendix A. ASCII versions of the state diagrams . . . . . . . . 29 | ||||
| A.1 State ST_IDLE . . . . . . . . . . . . . . . . . . . . . 29 | ||||
| A.2 State ST_WR . . . . . . . . . . . . . . . . . . . . . 32 | ||||
| A.3 State ST_INST . . . . . . . . . . . . . . . . . . . . . 35 | ||||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . 40 | ||||
| Intellectual Property and Copyright Statements . . . . . . . 41 | ||||
| 1. Introduction | 1. Introduction | |||
| This document describes a state machine for QoS NSLP [1], trying to | This document describes a state machine for QoS NSLP [1], trying to | |||
| show how QoS NSLP can be implemented to support its deployment. The | show how QoS NSLP can be implemented to support its deployment. The | |||
| state machine described in this document is illustrative of how the | state machine described in this document is illustrative of how the | |||
| QoS NSLP protocol defined in [1] may be implemented for QoS NSLP | QoS NSLP protocol defined in [1] may be implemented for QoS NSLP | |||
| nodes in the flow path. Where there are differences [1] are | nodes in the flow path. Where there are differences [1] are | |||
| authoritative. The state machine diagrams are informative only. | authoritative. The state machine diagrams are informative only. | |||
| Implementations may achieve the same results using different methods. | Implementations may achieve the same results using different methods. | |||
| According to [1], there are several possibilities for QoS NSLP | According to [1], there are several possibilities for QoS NSLP | |||
| signaling, at least including the following: - end-to-end signaling | signaling, at least including the following: - end-to-end signaling | |||
| vs. scoped signaling - sender-initiated signaling vs. receiver- | vs. scoped signaling - sender-initiated signaling vs. receiver- | |||
| initiated signaling. | initiated signaling. | |||
| The messages used in the QoS NSLP protocol can be summarized as | The messages used in the QoS NSLP protocol can be summarized as | |||
| follows: | follows: | |||
| Requesting message Responding message | Requesting message Responding message | |||
| ------------------------+--------------------------- | ------------------------+--------------------------- | |||
| RESERVE |None or RESERVE or RESPONSE | RESERVE |None or RESERVE or RESPONSE | |||
| QUERY |RESERVE or RESPONSE | QUERY |RESERVE or RESPONSE | |||
| RESPONSE |NONE | RESPONSE |NONE | |||
| skipping to change at page 3, line 40 ¶ | skipping to change at page 3, line 40 ¶ | |||
| 2. Terminology | 2. Terminology | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | |||
| document are to be interpreted as described in [2]. | document are to be interpreted as described in [2]. | |||
| 3. Notational conventions used in state diagrams | 3. Notational conventions used in state diagrams | |||
| The following text is reused from [3] and the state diagrams are | The following text is reused from [3] and the state diagrams are | |||
| based on the conventions specified in [4], Section 8.2.1. Additional | based on the conventions specified in [4], Section 8.2.1. Additional | |||
| state machine details are taken from [5]. | state machine details are taken from [5]. | |||
| The complete text is reproduced here: | The complete text is reproduced here: | |||
| State diagrams are used to represent the operation of the protocol by | State diagrams are used to represent the operation of the protocol by | |||
| a number of cooperating state machines each comprising a group of | a number of cooperating state machines each comprising a group of | |||
| connected, mutually exclusive states. Only one state of each machine | connected, mutually exclusive states. Only one state of each machine | |||
| can be active at any given time. | can be active at any given time. | |||
| All permissible transitions between states are represented by arrows, | All permissible transitions between states are represented by arrows, | |||
| the arrowhead denoting the direction of the possible transition. | the arrowhead denoting the direction of the possible transition. | |||
| Labels attached to arrows denote the condition(s) that must be met in | Labels attached to arrows denote the condition(s) that must be met in | |||
| order for the transition to take place. All conditions are | order for the transition to take place. All conditions are | |||
| expressions that evaluate to TRUE or FALSE; if a condition evaluates | expressions that evaluate to TRUE or FALSE; if a condition evaluates | |||
| to TRUE, then the condition is met. The label UCT denotes an | to TRUE, then the condition is met. The label UCT denotes an | |||
| unconditional transition (i.e., UCT always evaluates to TRUE). A | unconditional transition (i.e., UCT always evaluates to TRUE). A | |||
| transition that is global in nature (i.e., a transition that occurs | transition that is global in nature (i.e., a transition that occurs | |||
| from any of the possible states if the condition attached to the | from any of the possible states if the condition attached to the | |||
| arrow is met) is denoted by an open arrow; i.e., no specific state is | arrow is met) is denoted by an open arrow; i.e., no specific state is | |||
| identified as the origin of the transition. When the condition | identified as the origin of the transition. When the condition | |||
| associated with a global transition is met, it supersedes all other | associated with a global transition is met, it supersedes all other | |||
| exit conditions including UCT. The special global condition BEGIN | exit conditions including UCT. The special global condition BEGIN | |||
| supersedes all other global conditions, and once asserted remains | supersedes all other global conditions, and once asserted remains | |||
| asserted until all state blocks have executed to the point that | asserted until all state blocks have executed to the point that | |||
| variable assignments and other consequences of their execution remain | variable assignments and other consequences of their execution remain | |||
| unchanged. | unchanged. | |||
| On entry to a state, the procedures defined for the state (if any) | On entry to a state, the procedures defined for the state (if any) | |||
| are executed exactly once, in the order that they appear on the page. | are executed exactly once, in the order that they appear on the page. | |||
| Each action is deemed to be atomic; i.e., execution of a procedure | Each action is deemed to be atomic; i.e., execution of a procedure | |||
| completes before the next sequential procedure starts to execute. No | completes before the next sequential procedure starts to execute. No | |||
| procedures execute outside of a state block. The procedures in only | procedures execute outside of a state block. The procedures in only | |||
| one state block execute at a time, even if the conditions for | one state block execute at a time, even if the conditions for | |||
| execution of state blocks in different state machines are satisfied, | execution of state blocks in different state machines are satisfied, | |||
| and all procedures in an executing state block complete execution | and all procedures in an executing state block complete execution | |||
| before the transition to and execution of any other state block | before the transition to and execution of any other state block | |||
| occurs, i.e., the execution of any state block appears to be atomic | occurs, i.e., the execution of any state block appears to be atomic | |||
| with respect to the execution of any other state block and the | with respect to the execution of any other state block and the | |||
| transition condition to that state from the previous state is TRUE | transition condition to that state from the previous state is TRUE | |||
| when execution commences. The order of execution of state blocks in | when execution commences. The order of execution of state blocks in | |||
| different state machines is undefined except as constrained by their | different state machines is undefined except as constrained by their | |||
| transition conditions. A variable that is set to a particular value | transition conditions. A variable that is set to a particular value | |||
| in a state block retains this value until a subsequent state block | in a state block retains this value until a subsequent state block | |||
| executes a procedure that modifies the value. | executes a procedure that modifies the value. | |||
| On completion of all of the procedures within a state, all exit | On completion of all of the procedures within a state, all exit | |||
| conditions for the state (including all conditions associated with | conditions for the state (including all conditions associated with | |||
| global transitions) are evaluated continuously until one of the | global transitions) are evaluated continuously until one of the | |||
| conditions is met. The label ELSE denotes a transition that occurs | conditions is met. The label ELSE denotes a transition that occurs if | |||
| if none of the other conditions for transitions from the state are | none of the other conditions for transitions from the state are met | |||
| met (i.e., ELSE evaluates to TRUE if all other possible exit | (i.e., ELSE evaluates to TRUE if all other possible exit conditions | |||
| conditions from the state evaluate to FALSE). Where two or more exit | from the state evaluate to FALSE). Where two or more exit conditions | |||
| conditions with the same level of precedence become TRUE | with the same level of precedence become TRUE simultaneously, the | |||
| simultaneously, the choice as to which exit condition causes the | choice as to which exit condition causes the state transition to take | |||
| state transition to take place is arbitrary. | place is arbitrary. | |||
| In addition to the above notation, there are a couple of | In addition to the above notation, there are a couple of | |||
| clarifications specific to this document. First, all boolean | clarifications specific to this document. First, all boolean | |||
| variables are initialized to FALSE before the state machine execution | variables are initialized to FALSE before the state machine execution | |||
| begins. Second, the following notational shorthand is specific to | begins. Second, the following notational shorthand is specific to | |||
| this document: | this document: | |||
| <variable> = <expression1> | <expression2> | ... | <variable> = <expression1> | <expression2> | ... | |||
| Execution of a statement of this form will result in <variable> | Execution of a statement of this form will result in <variable> | |||
| having a value of exactly one of the expressions. The logic for | having a value of exactly one of the expressions. The logic for | |||
| which of those expressions gets executed is outside of the state | which of those expressions gets executed is outside of the state | |||
| machine and could be environmental, configurable, or based on | machine and could be environmental, configurable, or based on | |||
| another state machine such as that of the method. | another state machine such as that of the method. | |||
| 4. State Machine Symbols | 4. State Machine Symbols | |||
| ( ) | ( ) | |||
| Used to force the precedence of operators in Boolean expressions | Used to force the precedence of operators in Boolean expressions | |||
| and to delimit the argument(s) of actions within state boxes. | and to delimit the argument(s) of actions within state boxes. | |||
| ; | ; | |||
| Used as a terminating delimiter for actions within state boxes. | Used as a terminating delimiter for actions within state boxes. | |||
| Where a state box contains multiple actions, the order of | Where a state box contains multiple actions, the order of | |||
| execution follows the normal English language conventions for | execution follows the normal English language conventions for | |||
| reading text. | reading text. | |||
| = | = | |||
| Assignment action. The value of the expression to the right of | Assignment action. The value of the expression to the right of the | |||
| the operator is assigned to the variable to the left of the | operator is assigned to the variable to the left of the operator. | |||
| operator. Where this operator is used to define multiple | Where this operator is used to define multiple assignments, e.g., | |||
| assignments, e.g., a = b = X the action causes the value of the | a = b = X the action causes the value of the expression following | |||
| expression following the right-most assignment operator to be | the right-most assignment operator to be assigned to all of the | |||
| assigned to all of the variables that appear to the left of the | variables that appear to the left of the right-most assignment | |||
| right-most assignment operator. | operator. | |||
| ! | ! | |||
| Logical NOT operator. | Logical NOT operator. | |||
| && | && | |||
| Logical AND operator. | Logical AND operator. | |||
| || | || | |||
| Logical OR operator. | Logical OR operator. | |||
| if...then... | if...then... | |||
| Conditional action. If the Boolean expression following the if | Conditional action. If the Boolean expression following the if | |||
| evaluates to TRUE, then the action following the then is executed. | evaluates to TRUE, then the action following the then is executed. | |||
| { statement 1, ... statement N } | { statement 1, ... statement N } | |||
| Compound statement. Braces are used to group statements that are | Compound statement. Braces are used to group statements that are | |||
| executed together as if they were a single statement. | executed together as if they were a single statement. | |||
| != | != | |||
| Inequality. Evaluates to TRUE if the expression to the left of | Inequality. Evaluates to TRUE if the expression to the left of the | |||
| the operator is not equal in value to the expression to the right. | operator is not equal in value to the expression to the right. | |||
| == | == | |||
| Equality. Evaluates to TRUE if the expression to the left of the | Equality. Evaluates to TRUE if the expression to the left of the | |||
| operator is equal in value to the expression to the right. | operator is equal in value to the expression to the right. | |||
| > | > | |||
| Greater than. Evaluates to TRUE if the value of the expression to | Greater than. Evaluates to TRUE if the value of the expression to | |||
| the left of the operator is greater than the value of the | the left of the operator is greater than the value of the | |||
| expression to the right. | expression to the right. | |||
| <= | <= | |||
| Less than or equal to. Evaluates to TRUE if the value of the | Less than or equal to. Evaluates to TRUE if the value of the | |||
| expression to the left of the operator is either less than or | expression to the left of the operator is either less than or | |||
| equal to the value of the expression to the right. | equal to the value of the expression to the right. | |||
| ++ | ++ | |||
| Increment the preceding integer operator by 1. | Increment the preceding integer operator by 1. | |||
| + | + | |||
| Arithmetic addition operator. | Arithmetic addition operator. | |||
| & | & | |||
| skipping to change at page 7, line 39 ¶ | skipping to change at page 7, line 39 ¶ | |||
| send_info_to_app(): | send_info_to_app(): | |||
| Report information to the application. | Report information to the application. | |||
| RMF(): | RMF(): | |||
| Performs Resource Management Function and returns the following | Performs Resource Management Function and returns the following | |||
| values{AVAIL, NO_AVAIL}. | values{AVAIL, NO_AVAIL}. | |||
| is_local(RII): | is_local(RII): | |||
| Checks the RII object of received RESPONSE message if it is | Checks the RII object of received RESPONSE message if it is | |||
| requested by current node or other upstream node. Returns values | requested by current node or other upstream node. Returns values | |||
| {true, false}. | {true, false}. | |||
| is_local(RSN): | is_local(RSN): | |||
| Checks The RSN object of the received RESPONSE message if it is | Checks The RSN object of the received RESPONSE message if it is | |||
| requested by current node. Returns values {true, false}. | requested by current node. Returns values {true, false}. | |||
| process_query(): | process_query(): | |||
| Processes a Query message and provides the requested info | Processes a Query message and provides the requested info | |||
| 5.2 Common Variables | 5.2 Common Variables | |||
| RII: | RII: | |||
| Request Identification Information (RII) object. | Request Identification Information (RII) object. | |||
| RSN: | RSN: | |||
| Reservation Sequence Number (RSN) object. | Reservation Sequence Number (RSN) object. | |||
| INFO: | INFO: | |||
| Info_Spec object. Takes values: | Info_Spec object. Takes values: | |||
| - 0x02 - Success values | - 0x02 - Success values | |||
| - 0x04 - Transient Failure values | - 0x04 - Transient Failure values | |||
| QSPEC: | QSPEC: | |||
| QoS specification object. | QoS specification object. | |||
| T-Flag: | T-Flag: | |||
| Tear-Flag. Indicates to tear down reservation state. | Tear flag. Indicates to tear down reservation state. Takes values | |||
| A-Flag: | ||||
| Acknowledgement-Flag of common message header. Takes values | ||||
| {true, false}. | {true, false}. | |||
| Q-Flag: | ||||
| Request Reduced Refreshes flag of common message header. Takes | ||||
| values {true, false}. | ||||
| R-Flag: | R-Flag: | |||
| Reserve-Init. Indicates a Receiver Initiated Reservation request | Reserve-Init flag (QUERY) or Replace flag (RESERVE). Indicates a | |||
| in a QUERY message. | Receiver Initiated Reservation request in a QUERY message or an | |||
| replacing RESERVE in a RESERVE message. Takes values {true, | ||||
| false}. | ||||
| S-Flag: | S-Flag: | |||
| Scoping flag of common message header. Takes values | Scoping flag of common message header. Takes values | |||
| {true="Next_hop", false="Whole_path"}. | {true="Next_hop", false="Whole_path"}. | |||
| setRII: | setRII: | |||
| If set a RII object will be included into the message. Takes | If set a RII object will be included into the message. Takes | |||
| values {true, false}. | values {true, false}. | |||
| setACK: | ||||
| If set a RSN object will be included into the message. Takes | ||||
| values {true, false}. | ||||
| ReducedRefresh: | ReducedRefresh: | |||
| Keeps information if Reduced refresh method may be used for | Keeps information if Reduced refresh method may be used for | |||
| refreshing a installed QoS state. Takes value {"On","Off"}. | refreshing a installed QoS state. Takes value {"On","Off"}. | |||
| FlowID: | FlowID: | |||
| Flow ID kept by the installed QoS state. | Flow ID kept by the installed QoS state. | |||
| Replace: | Nodepos: | |||
| Replace flag of common message header. Takes values {"On","Off"}. | ||||
| nodepos: | ||||
| Position of the QoS NSLP node. Takes values {"QNI", "QNE", "QNR"}. | Position of the QoS NSLP node. Takes values {"QNI", "QNE", "QNR"}. | |||
| TOGGLE: | Toggle: | |||
| Flag to indicate whether the direction of a new message has to be | Flag to indicate whether the direction of a new message has to be | |||
| changed compared to the direction of a received one. Takes values | changed compared to the direction of a received one. Takes values | |||
| {true, false}. | {true, false}. | |||
| DIRECTION: | Direction: | |||
| Direction, in which the message has to be sent. Takes values | Direction, in which the message has to be sent. Takes values | |||
| {DOWNSTREAM, UPSTREAM}. | {DOWNSTREAM, UPSTREAM}. | |||
| SII: | SII: | |||
| Source Identification Information entry. Takes values: | Source Identification Information entry. Takes values: | |||
| - CurrSII - SII entry stored for current installed QoS state. | - CurrSII - SII entry stored for current installed QoS state. | |||
| (Assumed to be the one for the direction where the message comes | (Assumed to be the one for the direction where the message comes | |||
| from e.g.Upstream/Downstream) | from e.g.Upstream/Downstream) | |||
| - newSII - SII of the received message is different from the SII | - newSII - SII of the received message is different from the SII | |||
| stored for the current installed QoS state. | stored for the current installed QoS state. | |||
| 5.3 Events | 5.3 Events | |||
| EV_TIMEOUT_STATE_LIFETIME: | EV_TG_QUERY: | |||
| State lifetime timer expiration | External trigger to send a QUERY message. | |||
| EV_TIMEOUT_REFRESH: | ||||
| Refresh interval timer expiration | ||||
| EV_TIMEOUT_REFRESH: | EV_RX_QUERY: | |||
| Wait-Response interval timer expiration | QUERY message received | |||
| EV_TG_QUERY: | EV_RX_NOTIFY: | |||
| External trigger to send a QUERY message (typically triggered by | NOTIFY message received | |||
| the application). | ||||
| EV_TG_RESERVE: | EV_TG_RESERVE: | |||
| External trigger to send a RESERVE message. | External trigger to send a RESERVE message. | |||
| EV_TG_TEARDOWN: | EV_RX_RESERVE: | |||
| External trigger to clear previously established QoS state | RESERVE message received | |||
| (typically triggered by the application). It is translated to a | ||||
| tx_RESERVE(T-Flag) message. | ||||
| EV_RX_RESPONSE: | EV_RX_RESPONSE: | |||
| RESPONSE message received | RESPONSE message received | |||
| EV_RX_QUERY: | EV_TIMEOUT_RESPONSE: | |||
| QUERY message received | Wait-Response interval timer expiration | |||
| EV_RX_RESERVE: | EV_TIMEOUT_REFRESH: | |||
| RESERVE message received | Refresh interval timer expiration | |||
| EV_RX_NOTIFY: | EV_TIMEOUT_STATE_LIFETIME: | |||
| NOTIFY message received | State lifetime timer expiration | |||
| 5.4 Assumptions | 5.4 Assumptions | |||
| - For simplification not all included objects in a message are | - For simplification not all included objects in a message are shown. | |||
| shown. Only those that are significant for the case are showed. | Only those that are significant for the case are shown. The State | |||
| State machines do not present handling of messages that are not | Machine does not present handling of messages that are not | |||
| significant for management of the states such as certain NOTIFY | significant for management of the states such as certain NOTIFY | |||
| and QUERY messages. | and QUERY messages. | |||
| - State machines represent handling of messages of the same Session | - The State Machine represents handling of messages of the same | |||
| ID and with no protocol errors. Separate parallel instances of | Session ID and with no protocol errors. Separate parallel | |||
| the state machines should handle messages for different Session | instances of the state machines should handle messages for | |||
| IDs. | different Session IDs. | |||
| - Default message handling should be defined for messages with | - Default message handling should be defined for messages with | |||
| different Session IDs that have impact on current session state | different Session IDs that have impact on current session state | |||
| and error messages. This is not included in the current version. | and error messages. This is not included in the current version. | |||
| 6. State machine | 6 Basic State Machine Concept | |||
| 6.1 The QoS NSLP Daemon | ||||
| The QoS NSLP Daemon (qosd) listens for incoming messages from the | ||||
| local application and for messages coming over the network from GIST. | ||||
| For each new SessionID (SID) a new State Machine (FSM) is created as | ||||
| shown in the diagram below. | ||||
| Incoming messages from the client application are checked for the | ||||
| type of the message (QUERY or RESERVE) and for the SID. A table is | ||||
| searched for the given SID. If it is not found, a new FSM is created | ||||
| and its address together with the SID is added to the table. If the | ||||
| type of the message is a QUERY with set R-Bit, a Receiver Initiated | ||||
| Reservation is requested and the node position is QNR, in all other | ||||
| cases the node position is QNI. If the SID is found, the address of | ||||
| the FSM is returned. Now the FSM is triggered with the corresponding | ||||
| event of the message (EV_TG_QUERY, EV_TG_RESERVE). If the FSM returns | ||||
| to the qosd in ST_IDLE, it is deleted together with its table entry. | ||||
| For a message arriving from GIST, the procedure is almost the same. | ||||
| The table is searched for the given SID. If it is not found, then the | ||||
| IP-address of the MRI is compared to the local IP-address. If the | ||||
| arriving message is requesting a Receiver Initiated Reservation and | ||||
| the destination address is equal to the local address then the node | ||||
| position is QNR. If the addresses are equal and no Receiver Initiated | ||||
| Reservation is requested then the node position is QNI. If the | ||||
| addresses are not the same, a new FSM for a QNE is created. Also | ||||
| here, the corresponding FSM is triggered with the event according to | ||||
| the arrived message and deleted when returning in ST_IDLE. | ||||
| +-------+ +-------+ +-------+ | ||||
| | | | | | | | ||||
| | FSM 1 | | FSM 2 | | FSM n | | ||||
| | | | | | | | ||||
| +-------+ +-------+ +-------+ | ||||
| \ | / | ||||
| \ | / | ||||
| \ | / | ||||
| \ | / | ||||
| \ | / | ||||
| +-------+ | ||||
| | | | ||||
| | qosd | | ||||
| | | | ||||
| +-------+ | ||||
| Figure 1 | ||||
| 6.2 States, Events and Callback Functions | ||||
| Three States are defined: ST_IDLE, ST_WR and ST_INST. A new created | ||||
| FSM is starting automatically in ST_IDLE. In this state no | ||||
| reservation state is installed no responses to previously sent | ||||
| messages are expected. In ST_WR the FSM is waiting for a response to | ||||
| a previously sent message, but no reservation state is installed. In | ||||
| ST_INST reservation state has been installed and incoming messages | ||||
| are processed. | ||||
| The following table provides to a given state and a triggered event | ||||
| the function which has to be executed by the FSM. Example: when | ||||
| EV_RX_QUERY is triggered in state ST_IDLE, the function | ||||
| idle__rx_query is executed. | ||||
| +-----------+----------------------------+-------------------------------+ | ||||
| | State | Event | Executed Function | | ||||
| +-----------+----------------------------+-------------------------------+ | ||||
| | ST_IDLE | EV_TG_QUERY | idle__tg_query | | ||||
| | ST_IDLE | EV_RX_QUERY | idle__rx_query | | ||||
| | ST_IDLE | EV_TG_RESERVE | idle__tg_reserve | | ||||
| | ST_IDLE | EV_RX_RESERVE | idle__rx_reserve | | ||||
| | ST_IDLE | EV_RX_RESPONSE | idle__rx_response | | ||||
| +-----------+----------------------------+-------------------------------+ | ||||
| | ST_WR | EV_TG_QUERY | wr__tg_query | | ||||
| | ST_WR | EV_RX_QUERY | wr__rx_query | | ||||
| | ST_WR | EV_TG_RESERVE | wr__tg_reserve | | ||||
| | ST_WR | EV_RX_RESERVE | wr__rx_reserve | | ||||
| | ST_WR | EV_RX_RESPONSE | wr__rx_response | | ||||
| | ST_WR | EV_TIMEOUT_WAITRESP | wr__timeout_waitresp | | ||||
| +-----------+----------------------------+-------------------------------+ | ||||
| | ST_INST | EV_TG_QUERY | inst__tg_query | | ||||
| | ST_INST | EV_RX_QUERY | inst__rx_query | | ||||
| | ST_INST | EV_RX_NOTIFY | inst__rx_notify | | ||||
| | ST_INST | EV_TG_RESERVE | inst__tg_reserve | | ||||
| | ST_INST | EV_RX_RESERVE | inst__rx_reserve | | ||||
| | ST_INST | EV_RX_RESPONSE | inst__rx_response | | ||||
| | ST_INST | EV_TIMEOUT_WAITRESP | inst__timeout_waitresp | | ||||
| | ST_INST | EV_TIMEOUT_REFRESH | inst__timeout_refresh | | ||||
| | ST_INST | EV_TIMEOUT_STATELIFETIME | inst__timeout_statelifetime | | ||||
| +-----------+----------------------------+-------------------------------+ | ||||
| Figure 2 | ||||
| 6.3 Timer | ||||
| The Response Timer at QNI and QNE is started when a RESPONSE message | ||||
| is expected to a sent QUERY or RESERVE. When a reservation is set up, | ||||
| the Refresh Timer are started at QNI and QNE and the StateLife Timer | ||||
| are started at QNE and QNR. When the Refresh Timer times out, a | ||||
| refreshing RESERVE is sent peer to peer towards the QNR and the | ||||
| Response Timer are started because a confirmation is expected. On | ||||
| arrival the StateLife Timer is restarted. | ||||
| If the confirmation is not sent back, then the refreshing RESERVEs | ||||
| are resent up to MAX_RETRY. After MAX_RETRY has been reached, | ||||
| reservation state is removed and a RESERVE with set T-Flag is sent to | ||||
| the QNR to remove reservation state along the path. When no | ||||
| refreshing RESERVE arrive at QNE and QNR, then the StateLife Timer | ||||
| expires and reservation state is also removed and a RESERVE with set | ||||
| T-Flag is sent towards the QNR. | ||||
| +-----------------+-------------------+-------------------+ | ||||
| | QNI | QNE | QNR | | ||||
| +-----------------+-------------------+-------------------+ | ||||
| | Refresh Timer | Refresh Timer | StateLife Timer | | ||||
| | Response Timer | Response Timer | | | ||||
| | | StateLife Timer | | | ||||
| +-----------------+-------------------+-------------------+ | ||||
| Figure 3 | ||||
| 6.4 The Toggle Flag | ||||
| The Toggle Flag manipulates the direction of the message. When set, | ||||
| the message is sent in the opposite direction compared to the | ||||
| received one. The boolean operation XOR is used. Example, where true | ||||
| is the toggle flag: DOWNSTREAM XOR true = UPSTREAM (0 XOR 1 = 1). | ||||
| 7. State machine | ||||
| The following section presents the state machine diagrams of QoS NSLP | The following section presents the state machine diagrams of QoS NSLP | |||
| 6.1 State ST_IDLE | 7.1 State ST_IDLE | |||
| (see the .pdf version for missing diagram or | (see the .pdf version for missing diagram or | |||
| refer to Appendix A.1 if reading the .txt version) | refer to Appendix A.1 if reading the .txt version) | |||
| Figure 1: State ST_IDLE | Figure 4 | |||
| (see the .pdf version for missing diagram or | (see the .pdf version for missing diagram or | |||
| refer to Appendix A.1 if reading the .txt version) | refer to Appendix A.1 if reading the .txt version) | |||
| Figure 2: State ST_IDLE | Figure 5 | |||
| 6.2 State ST_WR1 | 7.2 State ST_WR | |||
| (see the .pdf version for missing diagram or | (see the .pdf version for missing diagram or | |||
| refer to Appendix A.2 if reading the .txt version) | refer to Appendix A.2 if reading the .txt version) | |||
| Figure 3: State ST_WR1 | Figure 6 | |||
| 6.3 State ST_WR2 | ||||
| (see the .pdf version for missing diagram or | (see the .pdf version for missing diagram or | |||
| refer to Appendix A.2 if reading the .txt version) | refer to Appendix A.2 if reading the .txt version) | |||
| Figure 4: State ST_WR2 | Figure 7 | |||
| 7.3 State ST_INST | ||||
| (see the .pdf version for missing diagram or | (see the .pdf version for missing diagram or | |||
| refer to Appendix A.2 if reading the .txt version) | refer to Appendix A.3 if reading the .txt version) | |||
| Figure 5: State ST_WR2 | Figure 8 | |||
| 6.4 State ST_INST | (see the .pdf version for missing diagram or | |||
| refer to Appendix A.3 if reading the .txt version) | ||||
| Figure 9 | ||||
| (see the .pdf version for missing diagram or | (see the .pdf version for missing diagram or | |||
| refer to Appendix A.3 if reading the .txt version) | refer to Appendix A.3 if reading the .txt version) | |||
| Figure 6: State ST_INST | Figure 10 | |||
| 7. Security Considerations | 8. Actions and Transitions | |||
| This chapter describes the operation of the FSM. | ||||
| 8.1 State ST_IDLE | ||||
| 8.1.1 idle__tg_query | ||||
| The local application has triggered a QUERY in ST_IDLE. If the node | ||||
| position is QNR and a Receiver Initiated Reservation is requested, | ||||
| then a QUERY message is constructed with set R-Flag together with a | ||||
| PC and a QSPEC. No RII object is included because a RESPONSE message | ||||
| does not need to be triggered. In case of a normal QUERY a RII object | ||||
| is included to match back the response. It also contains a QSPEC to | ||||
| perform a query along the path. In both cases the variable Direction | ||||
| is set to DOWNSTREAM and the Response Timer is started. The message | ||||
| is sent downstream and transition is made to ST_WR. | ||||
| 8.1.2 idle__rx_query | ||||
| This function is executed when a QUERY message has arrived over the | ||||
| network from GIST and the FSM is in State ST_IDLE. If a QSPEC object | ||||
| is present, then it is passed to the RMF. If the R-Flag is not set | ||||
| and the node position is QNE and the Scoping Flag is not set, then a | ||||
| new QUERY message with the returned QSPEC from the RMF is constructed | ||||
| and sent further along the path. If the Scoping Flag is set or the | ||||
| node position is QNI or QNR, then a RESPONSE message with the | ||||
| received RII object, an INFO object with Error Class SUCCESS and the | ||||
| QSPEC object is sent back with set Toggle Flag. Transition is made to | ||||
| ST_IDLE. | ||||
| If the R-Flag is set and the node position is QNI and the RMF returns | ||||
| that no resources are available, then a RESPONSE with a RSN object | ||||
| and a INFO object with Error Class Failure is sent back. Transition | ||||
| is done to ST_IDLE. | ||||
| In the other case where resources are available, the RMF performs | ||||
| resource reservation. A new RESERVE message is created, the Q-Flag is | ||||
| set, if Reduced Refreshes were requested, a RSN object, a PC and the | ||||
| returned QSPEC is added. If a response is requested, then a RII | ||||
| object is added additionally and the response timer is started. | ||||
| Direction is set to UPSTREAM and the message is sent upstream. The | ||||
| refresh timer is started. Transition is made to ST_INST. | ||||
| 8.1.3 idle__tg_reserve | ||||
| The local application has triggered a RESERVE message to be sent. If | ||||
| the T-Flag is set, then a RESERVE message is sent downstream with set | ||||
| T-Flag and with a RSN object. Transition is made to ST_IDLE. | ||||
| If the node position is QNI and the RMF returns that no resources are | ||||
| available, then a FAILURE is sent back to the local application. | ||||
| Transition is made to ST_IDLE. | ||||
| If resources are available, then the RMF performs resource | ||||
| reservation, a new RESERVE message is created, the Q-Flag is set if | ||||
| reduced refreshes are requested, a RSN object, a PC and the returned | ||||
| QSPEC is added. If a response is requested, then a RII object is | ||||
| added additionally and the response timer is started. Direction is | ||||
| set to DOWNSTREAM and the message is sent downstream. The refresh | ||||
| timer is started. Transition is made to ST_INST. | ||||
| 8.1.4 idle__rx_reserve | ||||
| A RESERVE from the network in ST_IDLE has arrived. If the T-Flag is | ||||
| set, if the node position is QNE and if the Scoping Flag is not set, | ||||
| then the message is forwarded further along the path with | ||||
| toggle=false. Transition is made to ST_IDLE. | ||||
| If the T-Flag is not set and the RMF returns that no resources are | ||||
| available, then a RESPONSE with a RII (if available, else with RSN | ||||
| object) and a INFO object with Error Class Failure is sent back. | ||||
| Transition is done to ST_IDLE. | ||||
| If resources are available, then the RMF performs resource | ||||
| reservation, the State Timer is started. If the node position is QNE | ||||
| and the Scoping Flag is not set, then a new RESERVE message is | ||||
| created out of the old one and sent further downstream. The Response | ||||
| Timer is started additionally to the Refresh Timer. If the Q-Flag | ||||
| was set in the received message, the variable ReducedRefreshes is set | ||||
| to true and a NOTIFY with the corresponding INFO object is sent back | ||||
| with toggle=true. If the received message contained a RII object and | ||||
| the node is QNR or QNE and the Scoping Flag is set, then a RESPONSE | ||||
| with this RII object and INFO=SUCCESS is sent back. Transition is | ||||
| made to ST_INST. | ||||
| 8.1.5 idle__rx_response | ||||
| If the node position is QNE and the Scoping Flag is not set, then the | ||||
| RESPONSE message is forwarded further along the path. Transition is | ||||
| made to ST_IDLE. | ||||
| 8.2 State ST_WR | ||||
| 8.2.1 wr__tg_query | ||||
| The local application has triggered a QUERY in ST_WR. The value of | ||||
| the RII object is stored and the message is sent to the stored | ||||
| direction together with a QSPEC object. The Response Timer is | ||||
| started. Transition is made to ST_WR. | ||||
| 8.2.2 wr__rx_query | ||||
| This function is executed when a QUERY message has arrived over the | ||||
| network from GIST and the FSM is in State ST_WR. If a QSPEC object is | ||||
| present, then it is passed to the RMF. If the R-Flag is not set and | ||||
| the node position is QNE and the Scoping Flag is not set, then a new | ||||
| QUERY message with the returned QSPEC from the RMF is constructed and | ||||
| sent further along the path. If the Scoping Flag is set or the node | ||||
| position is QNI or QNR, then a RESPONSE message with the received RII | ||||
| object, an INFO object with Error Class Success and the QSPEC object | ||||
| is sent back with set Toggle Flag. Transition is made to ST_WR. | ||||
| 8.2.3 wr__tg_reserve | ||||
| See idle__tg_reserve. | ||||
| 8.2.4 wr__rx_reserve | ||||
| See idle__rx_reserve. If the node position is QNR and the stored | ||||
| Direction is DOWNSTREAM, then this is the requested RESERVE message | ||||
| for the Receiver Initiated Reservation. The Response Timer is | ||||
| stopped. Transition is made to ST_INST. | ||||
| 8.2.5 wr__rx_response | ||||
| In ST_WR a RESPONSE message has arrived. If the node position is QNE | ||||
| and no Scoping Flag is set, then the RESPONSE message is forwarded. | ||||
| If the RII object is stored to match back a response, then the | ||||
| Response Timer is stopped. If no more Response Timer are pending, | ||||
| transition is made to ST_IDLE, otherwise to ST_WR. | ||||
| 8.2.6 wr__timeout_response | ||||
| A Response Timer has timed out while in ST_WR. If the maximum number | ||||
| of retries has been reached, then the Response Timer is stopped. If | ||||
| no more Response Timer are pending, transition is done to ST_IDLE, | ||||
| otherwise to ST_WR. If the maximum number of retransmissions has not | ||||
| been reached, then the stored message is resent and transition is | ||||
| made to ST_WR. | ||||
| 8.3 State ST_INST | ||||
| 8.3.1 inst__tg_query | ||||
| See wr__tg_query. Transition is made to ST_INST. | ||||
| 8.3.2 inst__rx_query | ||||
| See wr__rx_query. Transition is made to ST_INST. | ||||
| 8.3.3 inst__rx_notify | ||||
| If Reduced Refreshes were requested, then the Error Code is checked | ||||
| whether the next peer has accepted them. After receiving the RII | ||||
| object Reduced Refreshes can be used as refreshing RESERVEs. | ||||
| Transition is made to ST_INST. | ||||
| 8.3.4 inst__tg_reserve | ||||
| If the T-Flag is set, then all pending timers are stopped, the | ||||
| reservation is torn down and the message is sent further along the | ||||
| path into the stored direction with toggle=false. Transition is done | ||||
| to ST_IDLE. | ||||
| 8.3.5 inst__rx_reserve | ||||
| A RESERVE message in ST_INST has arrived. If the T-Flag is set, then | ||||
| all pending timer are stopped, the reservation is torn down. If the | ||||
| node position is QNE and the S-Flag is not set, then the RESERVE is | ||||
| forwarded with toggle=false. Transition is done to ST_IDLE. | ||||
| If the T-Flag is not set, then this is a refreshing RESERVE. A | ||||
| RESPONSE with the received RII and INFO=SUCCESS is sent back with | ||||
| Toggle=false, if the node position is QNR or QNE and the S-Flag is | ||||
| set. The Statelife Timer is being restarted. | ||||
| 8.3.6 inst__rx_response | ||||
| In ST_INST a RESPONSE message has arrived. If the node position is | ||||
| QNE and no Scoping Flag is set, then the RESPONSE message is | ||||
| forwarded. If the RII object is stored to match back a response, then | ||||
| the Response Timer is stopped. If the received Error Code of the INFO | ||||
| object is SUCCESS, then the Response Timer is started. Transition is | ||||
| done to ST_INST. | ||||
| If the Error Code is FAILURE, then the reservation state is deleted | ||||
| and pending timer are stopped. Transition is made to ST_IDLE. | ||||
| 8.3.7 inst__timeout_response | ||||
| A Response Timer has timed out while in ST_INST. If the maximum | ||||
| number of retries has been reached, then all pending timer are | ||||
| stopped. Transition is made to ST_IDLE. If maximum numbers of | ||||
| retransmissions has not been reached, then the refreshing RESERVE is | ||||
| resent and the Response Timer is restarted. Transition is made to | ||||
| ST_INST. | ||||
| 8.3.8 inst__timeout_refresh | ||||
| A RESERVE message is created. If Reduced Refreshes are accepted, no | ||||
| QSPEC object is added. If the refresh is sent along the whole path, | ||||
| then a RII object is added. The Response and the Refresh Timer is | ||||
| restarted. Transition is made to ST_INST. | ||||
| 8.3.9 inst__timeout_statelifetime | ||||
| The Statelife Timer timed out in ST_INST. All active timer are | ||||
| stopped and existing reservations are removed. If the node position | ||||
| is not QNR, then a RESERVE message with T-Flag set is created and | ||||
| sent into the stored direction. Transition is done to ST_IDLE. | ||||
| 9. Security Considerations | ||||
| This document does not raise new security considerations. Any | This document does not raise new security considerations. Any | |||
| security concerns with QoS NSLP are likely reflected in security | security concerns with QoS NSLP are likely reflected in security | |||
| related NSIS work already (such as [1] or [6]). | related NSIS work already (such as [1] or [6]). | |||
| For the time being, the state machines described in this document do | For the time being, the state machine described in this document does | |||
| not consider the security aspect of QoS NSLP protocol itself. A | not consider the security aspect of QoS NSLP protocol itself. A | |||
| future versions of this document will add security relevant states | future version of this document will add security relevant states and | |||
| and state transitions. | state transitions. | |||
| 8. Open Issues | 10. Open Issues | |||
| This document tries to describe possible states and transitions for | This document tries to describe possible states and transitions for | |||
| QoS NSLP according to its current specification [1], Section 5. We | QoS NSLP according to its current specification [1], Section 5. We | |||
| found some issues during the development of the state machines. | found some issues during the development of the state machines. | |||
| 1. Bi-directional reservation is difficult to support as the state | 1. Bi-directional reservation is difficult to support as the state | |||
| machine becomes quite complex (note at one particular point in | machine becomes quite complex (note at one particular point in | |||
| time the protocol state engine can be only in one state). | time the protocol state engine can be only in one state). | |||
| 2. How to signal unsuccessful reservation for Receiver initiated | 2. How to signal unsuccessful reservation for Receiver initiated | |||
| reservation (No RII included; a resulting Response(RSN) cannot be | reservation (No RII included; a resulting Response(RSN) cannot be | |||
| forwarded further than the next peer). We use NOTIFY message. | forwarded further than the next peer). We use NOTIFY message. | |||
| 3. The case of unsuccessful reservation at a QNE node and no RII | 3. The case of unsuccessful reservation at a QNE node and no RII | |||
| specified by upstream nodes. According to the spec RESPONSE(RSN) | specified by upstream nodes. According to the spec RESPONSE(RSN) | |||
| should not be forwarded further than the next peer. Currently we | should not be forwarded further than the next peer. Currently we | |||
| use NOTIFY(RSN) that is sent further to the upstream nodes. | use NOTIFY(RSN) that is sent further to the upstream nodes. | |||
| 4. We assume that handling of QoS state lifetime expiration event is | 4. We assume that handling of QoS state lifetime expiration event is | |||
| based on the local policy of the node. NOTIFY/Reserve(Ton) | based on the local policy of the node. NOTIFY/Reserve(Ton) | |||
| messages might be sent to other peers. | messages might be sent to other peers. | |||
| 5. The draft states that RESERVE message MUST be sent only towards | 5. The draft states that RESERVE message MUST be sent only towards | |||
| the QNR. This is not the case when re-routing procedure is done | the QNR. This is not the case when re-routing procedure is done | |||
| and RESERVE(Ton) message should be sent from merging QNE node for | and RESERVE(Ton) message should be sent from merging QNE node for | |||
| deleting the old branch. We believe this is towards the QNI. | deleting the old branch. We believe this is towards the QNI. | |||
| 6. Re-routing functionality described in this document is not | 6. Re-routing functionality described in this document is not | |||
| complete and need further consideration. | complete and need further consideration. | |||
| 9. Change History | 11. Change History | |||
| 9.1 Changes in Version -01 | 11.1 Changes in Version -01 | |||
| 1. Notation of the nodes changed to QNI, QNE and QNR. | 1. Notation of the nodes changed to QNI, QNE and QNR. | |||
| 2. Description of soft state refresh functionality. | 2. Description of soft state refresh functionality. | |||
| 3. Support of ACK flag in the common header. | 3. Support of ACK flag in the common header. | |||
| 4. Include of QoS NSLP objects, flags from the common header and | 4. Include of QoS NSLP objects, flags from the common header and | |||
| entries stored with the installed QoS state in a node: ACK, | entries stored with the installed QoS state in a node: ACK, | |||
| Replace, RSN, Error_SPEC, QSPEQ, FlowID, SII. | Replace, RSN, Error_SPEC, QSPEQ, FlowID, SII. | |||
| 5. Initial description of Re-routing functionality. | 5. Initial description of Re-routing functionality. | |||
| 6. For support of all listed changes, some notations are changed. | 6. For support of all listed changes, some notations are changed. | |||
| 9.2 Changes in Version -02 | 11.2 Changes in Version -02 | |||
| 1. Switch to .pdf format of the draft and include graphic diagrams. | 1. Switch to .pdf format of the draft and include graphic diagrams. | |||
| 2. Update notation from "Summary refresh" to "Reduced refresh" | 2. Update notation from "Summary refresh" to "Reduced refresh" | |||
| 3. Description of QoS reservation update/upgrade | 3. Description of QoS reservation update/upgrade | |||
| 9.3 Changes in Version -03 | 11.3 Changes in Version -03 | |||
| 1. Deep review of the state machine archtitecure | 1. Deep review of the state machine architecture | |||
| 9.4 Changes in Version -04 | 11.4 Changes in Version -04 | |||
| 1. Reduced the three state machines of QNI, QNE and QNR to one for | 1. Reduced the three state machines of QNI, QNE and QNR to one for | |||
| all nodes. | all nodes. | |||
| 2. Introduced new flags to have a finer control of the direction of | 2. Introduced new flags to have a finer control of the direction of | |||
| the message to be sent. | the message to be sent. | |||
| 10. Acknowledgments | 11.5 Changes in Version -05 | |||
| The authors would like to thank Sven Van den Bosch for his feedback. | 1. Combined ST_WR2 and ST_INST into ST_INST | |||
| 2. Support for Q-Flag in common header | ||||
| 3. Explanations on the execution of the State Machine added | ||||
| 11. References | 12. Acknowledgments | |||
| 11.1. Normative References | The authors would like to thank Sven Van den Bosch and Christian | |||
| Dickmann for their feedback. | ||||
| 13. References | ||||
| 13.1. Normative References | ||||
| [1] Manner, J., Karagiannis, G. and McDonald, A., "NSLP for | [1] Manner, J., Karagiannis, G. and McDonald, A., "NSLP for | |||
| Quality-of-Service Signaling", Internet draft, draft- | Quality-of-Service Signaling", Internet draft, draft- | |||
| ietf-nsis-qos-nslp-09, March 2006. | ietf-nsis-qos-nslp-11 (work in progress), June 2006. | |||
| [2] Bradner, S., "Key words for use in RFCs to Indicate | [2] Bradner, S., "Key words for use in RFCs to Indicate | |||
| Requirement Levels", BCP 14, RFC 2119, March 1997. | Requirement Levels", BCP 14, RFC 2119, March 1997. | |||
| 11.2. Informative References | 13.2. Informative References | |||
| [3] Vollbrecht, J., Eronen, P., Petroni, N., and Y. Ohba, | [3] Vollbrecht, J., Eronen, P., Petroni, N., and Y. Ohba, | |||
| "State Machines for Extensible Authentication Protocol | "State Machines for Extensible Authentication Protocol | |||
| (EAP) Peer and Authenticator", draft-ietf-eap- | (EAP) Peer and Authenticator", draft-ietf-eap- | |||
| statemachine-06 (work in progress), December 2004. | statemachine-06 (work in progress), December 2004. | |||
| [4] Institute of Electrical and Electronics Engineers, "DRAFT | [4] Institute of Electrical and Electronics Engineers, "DRAFT | |||
| Standard for Local and Metropolitan Area Networks: Port- | Standard for Local and Metropolitan Area Networks: Port- | |||
| Based | Based | |||
| Network Access Control (Revision)", IEEE 802-1X-REV/D11, | Network Access Control (Revision)", IEEE 802-1X-REV/D11, | |||
| July 2004. | July 2004. | |||
| [5] Ohba, Y., "State Machines for Protocol for Carrying | [5] Ohba, Y., "State Machines for Protocol for Carrying | |||
| Authentication for Network Access (PANA)", | Authentication for Network Access (PANA)", | |||
| draft-ohba-pana-statemachine-01 (work in progress), | draft-ohba-pana-statemachine-01 (work in progress), | |||
| February 2005. | February 2005. | |||
| [6] Tschofenig, H. and D. Kroeselberg, "Security Threats for | [6] Tschofenig, H. and D. Kroeselberg, "Security Threats for | |||
| NSIS", draft-ietf-nsis-threats-06 (work in progress), | NSIS", draft-ietf-nsis-threats-06 (work in progress), | |||
| October 2004. | October 2004. | |||
| Appendix A. ASCII versions of state diagrams | Appendix A. ASCII versions of state diagrams | |||
| This appendix contains the state diagrams in ASCII format. Please | This appendix contains the state diagrams in ASCII format. Please use | |||
| use the PDF version whenever possible: it is much easier to | the PDF version whenever possible: it is much easier to understand. | |||
| understand. | ||||
| The notation is as follows: for each state there is a separate table | The notation is as follows: for each state there is a separate table | |||
| that lists in each row: | that lists in each row: | |||
| - an event that triggers a transition, | - an event that triggers a transition, | |||
| - actions taken as a result of the incoming event, | - actions taken as a result of the incoming event, | |||
| - and the new state at which the transitions ends. | - and the new state at which the transitions ends. | |||
| A.1. State ST_IDLE | A.1. State ST_IDLE | |||
| Condition: EV_RX_QUERY | ST_IDLE::EV_TG_RESERVE | |||
| +-------------------------------------------------------+-----------+ | +---------------------------------------------------------+-----------+ | |||
| | Action | new State | | | Action | new State | | |||
| +-------------------------------------------------------+-----------+ | +---------------------------------------------------------+-----------+ | |||
| | | | | | | | | |||
| | If(!R-Flag) { | ST_IDLE | | | if(T-Flag) { | ST_IDLE | | |||
| | if((nodepos==QNE) && (!S-Flag)) { | | | | tx_reserve(T-Flag, RSN, Direction=DOWNSTREAM); | | | |||
| | tx_query(TOGGLE=false); | | | | } | | | |||
| | } else { | | | | | | | |||
| | process_query(); | | | +---------------------------------------------------------+-----------+ | |||
| | tx_response(RII, INFO, QSPEC, UPSTREAM); | | | | | | | |||
| | } | | | | if((!T-Flag) && (Nodepos==QNI) && (RMF()==NO_AVAIL)) { | ST_IDLE | | |||
| | } | | | | send_info_to_app(); | | | |||
| | | | | | } | | | |||
| +-------------------------------------------------------+-----------+ | | | | | |||
| | | | | +---------------------------------------------------------+-----------+ | |||
| | If(R-Flag && (nodepos==QNI) && (RMF()==NO_AVAIL)) { | ST_IDLE | | | | | | |||
| | send_info_to_app(); | | | | if((!T-Flag) && (Nodepos==QNI) && (RMF()==AVAIL)) { | ST_INST | | |||
| | } | | | | install_qos_state(); | | | |||
| | | | | | if(setRII) { | | | |||
| +-------------------------------------------------------+-----------+ | | tx_reserve(Q-Flag, RSN, RII, PC, QSPEC, | | | |||
| | | | | | Direction=DOWNSTREAM); | | | |||
| | If((R-Flag && (nodepos==QNI) && (RMF==AVAIL)) { | ST_WR2 | | | } else { | | | |||
| | if(setRII==true) { | | | | tx_reserve(Q-Flag, RSN, PC, QSPEC, | | | |||
| | tx_reserve(RSN, RII, QSPEC, UPSTREAM); | | | | Direction=DOWNSTREAM); | | | |||
| | } else if (setACK==true) { | | | | } | | | |||
| | tx_reserve(RSN, QSPEC, UPSTREAM); | | | | startRefreshTimer(); | | | |||
| | } | | | | startResponseTimer(); | | | |||
| | } | | | | } | | | |||
| | | | | | | | | |||
| +-------------------------------------------------------+-----------+ | +---------------------------------------------------------+-----------+ | |||
| | | | | ||||
| | If((R-Flag && (nodepos==QNI) && (RMF==AVAIL) && | ST_INST | | ||||
| | (setRII==false) && (setACK==false)) { | | | ||||
| | tx_reserve(RSN, QSPEC, UPSTREAM); | | | ||||
| | } | | | ||||
| | | | | ||||
| +-------------------------------------------------------+-----------+ | ||||
| Condition: EV_TG_RESERVE | Figure 11 | |||
| +-------------------------------------------------------+-----------+ | ||||
| | Action | new State | | ||||
| +-------------------------------------------------------+-----------+ | ||||
| | | | | ||||
| | If(RMF()==NO_AVAIL) { | ST_IDLE | | ||||
| | send_info_to_app(); | | | ||||
| | } | | | ||||
| | | | | ||||
| +-------------------------------------------------------+-----------+ | ||||
| | | | | ||||
| | If(RMF()==AVAIL) { | ST_WR2 | | ||||
| | if (setRII==true) { | | | ||||
| | tx_reserve(RSN, RII, QSPEC, TOGGLE=false); | | | ||||
| | } else if(setACK==true) { | | | ||||
| | tx_reserve(RSN, QSPEC, TOGGLE=false); | | | ||||
| | } | | | ||||
| | } | | | ||||
| | | | | ||||
| +-------------------------------------------------------+-----------+ | ||||
| | | | | ||||
| | If((RMF()==AVAIL) && (setACK==false) && | ST_INST | | ||||
| | (setRII==false)) { | | | ||||
| | tx_reserve(RSN, QSPEC, TOGGLE=false); | | | ||||
| | } | | | ||||
| | | | | ||||
| +-------------------------------------------------------+-----------+ | ||||
| Condition: EV_RX_RESPONSE | ST_IDLE::EV_RX_RESERVE | |||
| +-------------------------------------------------------+-----------+ | +---------------------------------------------------------+-----------+ | |||
| | Action | new State | | | Action | new State | | |||
| +-------------------------------------------------------+-----------+ | +---------------------------------------------------------+-----------+ | |||
| | | | | | | | | |||
| | If(nodepos==QNE) { | ST_IDLE | | | if(T-Flag && (Nodepos==QNE) && (!S-Flag)) { | ST_IDLE | | |||
| | tx_response(TOGGLE=false); | | | | tx_reserve(T-Flag, RSN, Toggle=false); | | | |||
| | } | | | | } | | | |||
| | | | | | | | | |||
| +-------------------------------------------------------+-----------+ | +---------------------------------------------------------+-----------+ | |||
| Condition: EV_RX_RESERVE | | | | | |||
| +-------------------------------------------------------+-----------+ | | if((!T-Flag) && (RMF()==NO_AVAIL)) { | ST_IDLE | | |||
| | Action | new State | | | tx_response(RII/RSN, INFO(FAILURE), Toggle=true) | | | |||
| +-------------------------------------------------------+-----------+ | | } | | | |||
| | | | | | | | | |||
| | If(RMF()==NO_AVAIL) { | ST_IDLE | | +---------------------------------------------------------+-----------+ | |||
| | tx_response(info=0x04, TOGGLE=true); | | | | | | | |||
| | } | | | | if((!T-Flag) && (RMF()==AVAIL)) { | ST_INST | | |||
| | | | | | install_qos_state(); | | | |||
| +-------------------------------------------------------+-----------+ | | startStateTimer(); | | | |||
| | | | | | if((Nodepos==QNE) && (!S-Flag)) { | | | |||
| | If(RMF()==AVAIL) { | | | | Direction=DOWNSTREAM; | | | |||
| | If((nodepos==QNE) && (S-Flag==false)) { | | | | tx_reserve(Toggle=false); | | | |||
| | tx_reserve(TOGGLE=false); | | | | startRefreshTimer(); | | | |||
| | } | | | | startResponseTimer(); | | | |||
| | If(A-Flag) { | | | | } | | | |||
| | tx_response(RSN, info=0x02, TOGGLE=true); | | | | if(Q-Flag) { | | | |||
| | } | | | | ReducedRefreshes=true; | | | |||
| | If(RII && ((nodepos==QNR) || ((nodepos==QNE) && | | | | tx_notify(INFO(RR_SUPPORTED), Toggle=true); | | | |||
| | (S-Flag==true))) { | | | | } | | | |||
| | tx_response(RII, info=0x02, TOGGLE=true); | | | | if(RII && ((Nodepos==QNR) || | | | |||
| | } | | | | ((Nodepos==QNE) && S-Flag))) { | | | |||
| | } | | | | Direction=UPSTREAM; | | | |||
| | | | | | tx_response(RII, INFO(SUCCESS), Toggle=true); | | | |||
| +-------------------------------------------------------+-----------+ | | } | | | |||
| | | | | | } | | | |||
| | If((nodepos==QNE) && (RMF()==AVAIL)) { | ST_WR2 | | | | | | |||
| | if(setRII==true) start_response_timer(RII); | | | +---------------------------------------------------------+-----------+ | |||
| | if(setACK==true) start_response_timer(RSN); | | | ||||
| | } | | | ||||
| | | | | ||||
| +-------------------------------------------------------+-----------+ | ||||
| | | | | ||||
| | If((nodepos==QNE) && (RMF()==AVAIL) && | ST_INST | | ||||
| | (setRII==false) && (setACK==false)) | | | ||||
| | | | | ||||
| +-------------------------------------------------------+-----------+ | ||||
| Condition: EV_TG_QUERY | Figure 12 | |||
| +-------------------------------------------------------+-----------+ | ||||
| | Action | new State | | ||||
| +-------------------------------------------------------+-----------+ | ||||
| | | | | ||||
| | If((nodepos==QNR) && (R-Flag)) { | ST_WR1 | | ||||
| | tx_query(R-Flag, QSPEC, DOWNSTREAM); | | | ||||
| | start_response_timer(); | | | ||||
| | } else { | | | ||||
| | tx_query(RII, QSPEC, DOWNSTREAM); | | | ||||
| | start_response_timer(RII); | | | ||||
| | } | | | ||||
| | | | | ||||
| +-------------------------------------------------------+-----------+ | ||||
| Figure 7 | ST_IDLE::EV_TG_QUERY | |||
| +---------------------------------------------------------+-----------+ | ||||
| | Action | new State | | ||||
| +---------------------------------------------------------+-----------+ | ||||
| | | | | ||||
| | if((Nodepos==QNR) && R-Flag) { | ST_WR | | ||||
| | tx_query(R-Flag, PC, QSPEC, Direction=DOWNSTREAM); | | | ||||
| | } else { | | | ||||
| | tx_query(RII, QSPEC, Direction=DOWNSTREAM); | | | ||||
| | } | | | ||||
| | startResponseTimer(); | | | ||||
| | | | | ||||
| +---------------------------------------------------------+-----------+ | ||||
| A.2. State ST_WR1 | Figure 13 | |||
| Condition: EV_RX_RESPONSE | ST_IDLE::EV_RX_QUERY | |||
| +-------------------------------------------------------+-----------+ | +---------------------------------------------------------+-----------+ | |||
| | Action | new State | | | Action | new State | | |||
| +-------------------------------------------------------+-----------+ | +---------------------------------------------------------+-----------+ | |||
| | | | | | | | | |||
| | If(nodepos==QNE) { | | | | queryRMF(QSPEC); | ST_IDLE | | |||
| | tx_response(TOGGLE=false); | | | | if(!(R-Flag && (Nodepos==QNI))) { | | | |||
| | } | | | | if((Nodepos==QNE) && (!S-Flag)) { | | | |||
| | If(is_local(RII)==true) { | | | | tx_query(QSPEC, Toggle=false); | | | |||
| | stop_response_timer(RII); | | | | } else { | | | |||
| | } | | | | tx_response(RII/RSN, INFO(SUCCESS), | | | |||
| | If(is_local(RSN)==true) { | | | | QSPEC, Toggle=true); | | | |||
| | stop_response_timer(RSN); | | | | } | | | |||
| | } | | | | } | | | |||
| | | | | | | | | |||
| +-------------------------------------------------------+-----------+ | +---------------------------------------------------------+-----------+ | |||
| | | | | | | | | |||
| | If(TIMER_PENDING==true) | ST_WR1 | | | if(R-Flag && (Nodepos==QNI) && (RMF()==NO_AVAIL)) { | ST_IDLE | | |||
| | | | | | tx_response(RSN, INFO(FAILURE), Toggle=true); | | | |||
| +-------------------------------------------------------+-----------+ | | } | | | |||
| | | | | | | | | |||
| | If(TIMER_PENDING==false) | ST_IDLE | | +---------------------------------------------------------+-----------+ | |||
| | | | | | | | | |||
| +-------------------------------------------------------+-----------+ | | if(R-Flag && (Nodepos==QNI) && (RMF()==AVAIL)) { | ST_INST | | |||
| | install_qos_state(); | | | ||||
| | if(setRII) { | | | ||||
| | tx_reserve(Q-Flag, RSN, RII, PC, QSPEC, | | | ||||
| | Direction=UPSTREAM); | | | ||||
| | } else { | | | ||||
| | tx_reserve(Q-Flag, RSN, PC, QSPEC, | | | ||||
| | Direction=UPSTREAM); | | | ||||
| | } | | | ||||
| | startRefreshTimer(); | | | ||||
| | startResponseTimer(); | | | ||||
| | } | | | ||||
| | | | | ||||
| +---------------------------------------------------------+-----------+ | ||||
| Figure 14 | ||||
| Condition: EV_TIMEOUT_RESPONSE | ST_IDLE::EV_RX_RESPONSE | |||
| +-------------------------------------------------------+-----------+ | +---------------------------------------------------------+-----------+ | |||
| | Action | new State | | | Action | new State | | |||
| +-------------------------------------------------------+-----------+ | +---------------------------------------------------------+-----------+ | |||
| | | | | | | | | |||
| | If((MAX_RETRY==true) && (TIMER_PENDING==false)) | ST_IDLE | | | if((Nodepos==QNE) && (!S-Flag)) { | ST_IDLE | | |||
| | | | | | tx_response(Toggle=false); | | | |||
| +-------------------------------------------------------+-----------+ | | } | | | |||
| | | | | | | | | |||
| | If((MAX_RETRY==true) && (TIMER_PENDING==true)) | ST_WR1 | | +---------------------------------------------------------+-----------+ | |||
| | | | | ||||
| +-------------------------------------------------------+-----------+ | ||||
| | | | | ||||
| | If(MAX_RETRY==false) { | ST_WR1 | | ||||
| | tx_query(DIRECTION); | | | ||||
| | restart_response_timer(); | | | ||||
| | } | | | ||||
| | | | | ||||
| +-------------------------------------------------------+-----------+ | ||||
| Condition: EV_RX_RESERVE | Figure 15 | |||
| +-------------------------------------------------------+-----------+ | ||||
| | Action | new State | | ||||
| +-------------------------------------------------------+-----------+ | ||||
| | | | | ||||
| | if((nodepos==QNR) && (A-Flag)) { | ST_WR2 | | ||||
| | tx_response(RSN, TOGGLE=true); | | | ||||
| | } | | | ||||
| | | | | ||||
| +-------------------------------------------------------+-----------+ | ||||
| | | | | ||||
| | If((nodepos==QNR) && RII)) { | ST_WR2 | | ||||
| | tx_response(RII, TOGGLE=true); | | | ||||
| | } | | | ||||
| | | | | ||||
| +-------------------------------------------------------+-----------+ | ||||
| | | | | ||||
| | If((nodepos==QNR) && (!RII) && (!A-Flag)) | ST_INST | | ||||
| | | | | ||||
| +-------------------------------------------------------+-----------+ | ||||
| Figure 8 | ||||
| A.3. State ST_WR2 | A.2. State ST_WR | |||
| Condition: EV_RX_RESPONSE | ST_WR::EV_RX_RESPONSE | |||
| +-------------------------------------------------------+-----------+ | +---------------------------------------------------------+-----------+ | |||
| | Action | new State | | | Action | new State | | |||
| +-------------------------------------------------------+-----------+ | +---------------------------------------------------------+-----------+ | |||
| | | | | | | | | |||
| | If(is_local(RII)==true) { | | | | if((Nodepos==QNE) && (!S-Flag)) { | | | |||
| | stop_response_timer(RII); | | | | tx_response(Toggle=false); | | | |||
| | } | | | | } | | | |||
| | If(is_local(RSN)==true) { | | | | if(is_local(RII)==true) { | | | |||
| | stop_response_timer(RSN); | | | | stopResponseTimer(); | | | |||
| | } | | | | } | | | |||
| | | | | | | | | |||
| | If((info==0x02) && (TIMER_PENDING==false)) { | ST_INST | | +---------------------------------------------------------+-----------+ | |||
| | start_refresh_timer(); | | | | | | | |||
| | } | | | | if(TIMER_PENDING==true) | ST_WR | | |||
| | | | | | | | | |||
| +-------------------------------------------------------+-----------+ | +---------------------------------------------------------+-----------+ | |||
| | | | | | | | | |||
| | If((info==0x02) && (TIMER_PENDING==true)) | ST_WR2 | | | if(TIMER_PENDING==false) | ST_IDLE | | |||
| | | | | | | | | |||
| +-------------------------------------------------------+-----------+ | +---------------------------------------------------------+-----------+ | |||
| | | | | ||||
| | If(info==0x04) { | ST_IDLE | | ||||
| | delete_qos_state(); | | | ||||
| | stop_timers() | | | ||||
| | } | | | ||||
| | | | | ||||
| +-------------------------------------------------------+-----------+ | ||||
| Condition: EV_RX_RESERVE | Figure 16 | |||
| +-------------------------------------------------------+-----------+ | ||||
| | Action | new State | | ||||
| +-------------------------------------------------------+-----------+ | ||||
| | | | | ||||
| | If((nodepos==QNE) && (S-Flag==false)) { | | | ||||
| | tx_reserve(TOGGLE=false); | | | ||||
| | } | | | ||||
| | | | | ||||
| | If(T-Flag==true) { | ST_IDLE | | ||||
| | delete_qos_state(); | | | ||||
| | stop_timers(); | | | ||||
| | } | | | ||||
| | | | | ||||
| +-------------------------------------------------------+-----------+ | ||||
| | | | | ||||
| | If(T-Flag==false) { | ST_WR2 | | ||||
| | tx_response(RII, RSN, TOGGLE=true); | | | ||||
| | restart_refresh_timer(); | | | ||||
| | } | | | ||||
| | | | | ||||
| +-------------------------------------------------------+-----------+ | ||||
| Condition: EV_TIMEOUT_RESPONSE | ST_WR::EV_TIMEOUT_RESPONSE | |||
| +-------------------------------------------------------+-----------+ | +---------------------------------------------------------+-----------+ | |||
| | Action | new State | | | Action | new State | | |||
| +-------------------------------------------------------+-----------+ | +---------------------------------------------------------+-----------+ | |||
| | | | | | | | | |||
| | If((MAX_RETRY==true) && (TIMER_PENDING==false)) { | ST_IDLE | | | if((MAX_RETRY) && (!TIMER_PENDING)) | ST_IDLE | | |||
| | stop_state_timer(); | | | | | | | |||
| | } | | | +---------------------------------------------------------+-----------+ | |||
| | | | | | | | | |||
| +-------------------------------------------------------+-----------+ | | if((MAX_RETRY) && (TIMER_PENDING)) | ST_WR | | |||
| | | | | | | | | |||
| | If((MAX_RETRY==true) && (TIMER_PENDING==true)) | ST_WR2 | | +---------------------------------------------------------+-----------+ | |||
| | | | | | | | | |||
| +-------------------------------------------------------+-----------+ | | if(MAX_RETRY) { | ST_WR | | |||
| | | | | | tx_query(Direction); | | | |||
| | If(MAX_RETRY==false) { | ST_WR2 | | | restartResponseTimer(); | | | |||
| | tx_reserve(DIRECTION); | | | | } | | | |||
| | restart_response_timer(); | | | | | | | |||
| | } | | | +---------------------------------------------------------+-----------+ | |||
| | | | | ||||
| +-------------------------------------------------------+-----------+ | ||||
| Condition: EV_TIMEOUT_REFRESH | Figure 17 | |||
| +-------------------------------------------------------+-----------+ | ||||
| | Action | new State | | ||||
| +-------------------------------------------------------+-----------+ | ||||
| | | | | ||||
| | tx_reserve(RSN, A-Flag, S-Flag, DIRECTION); | ST_WR2 | | ||||
| | start_response_timer(); | | | ||||
| | | | | ||||
| +-------------------------------------------------------+-----------+ | ||||
| Condition: EV_TIMEOUT_STATELIFETIME | ST_WR::EV_RX_RESERVE | |||
| +-------------------------------------------------------+-----------+ | +---------------------------------------------------------+-----------+ | |||
| | Action | new State | | | Action | new State | | |||
| +-------------------------------------------------------+-----------+ | +---------------------------------------------------------+-----------+ | |||
| | | | | | | | | |||
| | stop_timers(); | ST_IDLE | | | if(T-Flag && (Nodepos==QNE) && (!S-Flag)) { | ST_IDLE | | |||
| | delete_qos_state(); | | | | tx_reserve(T-Flag, RSN, Toggle=false); | | | |||
| | If(nodepos != QNR) { | | | | stopTimers(); | | | |||
| | tx_reserve(T-Flag, DIRECTION); | | | | } | | | |||
| | } | | | | | | | |||
| | | | | +---------------------------------------------------------+-----------+ | |||
| +-------------------------------------------------------+-----------+ | | | | | |||
| Figure 9 | | if((!T-Flag) && (RMF()==NO_AVAIL)) { | ST_IDLE | | |||
| | tx_response(RII/RSN, INFO(FAILURE), Toggle=true); | | | ||||
| | } | | | ||||
| | | | | ||||
| +---------------------------------------------------------+-----------+ | ||||
| | | | | ||||
| | if((!T-Flag) && (RMF()==AVAIL)) { | ST_INST | | ||||
| | install_qos_state(); | | | ||||
| | startStateTimer(); | | | ||||
| | if((Nodepos==QNR) && (Direction==DOWNSTREAM)) { | | | ||||
| | stopResponseTimer(); | | | ||||
| | } | | | ||||
| | if((Nodepos==QNE) && (!S-Flag)) { | | | ||||
| | tx_reserve(Toggle=false); | | | ||||
| | startRefreshTimer(); | | | ||||
| | startResponseTimer(); | | | ||||
| | } | | | ||||
| | if(Q-Flag) { | | | ||||
| | ReducedRefreshes=true; | | | ||||
| | tx_notify(info(RR_SUPPORTED), Toggle=true); | | | ||||
| | } | | | ||||
| | if(RII && ((Nodepos==QNR) || | | | ||||
| | ((Nodepos==QNE) && S-Flag))) { | | | ||||
| | tx_response(RII, INFO(SUCCESS), Toggle=true); | | | ||||
| | } | | | ||||
| | } | | | ||||
| | | | | ||||
| +---------------------------------------------------------+-----------+ | ||||
| A.4. State ST_INST | Figure 18 | |||
| Condition: EV_RX_RESERVE | ST_WR::EV_TG_QUERY | |||
| +-------------------------------------------------------+-----------+ | +---------------------------------------------------------+-----------+ | |||
| | Action | new State | | | Action | new State | | |||
| +-------------------------------------------------------+-----------+ | +---------------------------------------------------------+-----------+ | |||
| | | | | | | | | |||
| | If((nodepos==QNE) && (S-Flag==false)) { | | | | tx_query(RII, QSPEC, Direction); | ST_WR | | |||
| | tx_reserve(TOGGLE=false); | | | | startResponseTimer(); | | | |||
| | } | | | | | | | |||
| | | | | +---------------------------------------------------------+-----------+ | |||
| +-------------------------------------------------------+-----------+ | ||||
| | | | | ||||
| | If(T-Flag==true) { | ST_IDLE | | ||||
| | delete_qos_state(); | | | ||||
| | stop_timers(); | | | ||||
| | } | | | ||||
| | | | | ||||
| | If(T-Flag==false) { | ST_WR2 | | ||||
| | tx_response(RII, RSN, TOGGLE=true); | | | ||||
| | restart_refresh_timer(); | | | ||||
| | } | | | ||||
| | | | | ||||
| +-------------------------------------------------------+-----------+ | ||||
| Condition: EV_TIMEOUT_STATELIFETIME | Figure 19 | |||
| +-------------------------------------------------------+-----------+ | ||||
| | Action | new State | | ||||
| +-------------------------------------------------------+-----------+ | ||||
| | | | | ||||
| | stop_timers(); | ST_IDLE | | ||||
| | delete_qos_state(); | | | ||||
| | If(nodepos != QNR) { | | | ||||
| | tx_reserve(T-Flag, DIRECTION); | | | ||||
| | } | | | ||||
| | | | | ||||
| +-------------------------------------------------------+-----------+ | ||||
| Condition: EV_TIMEOUT_REFRESH | ST_WR::EV_RX_QUERY | |||
| +-------------------------------------------------------+-----------+ | +---------------------------------------------------------+-----------+ | |||
| | Action | new State | | | Action | new State | | |||
| +-------------------------------------------------------+-----------+ | +---------------------------------------------------------+-----------+ | |||
| | | | | | | | | |||
| | tx_reserve(RSN, A-Flag, S-Flag, DIRECTION); | ST_WR2 | | | queryRMF(QSPEC); | ST_WR | | |||
| | start_response_timer(); | | | | if((Nodepos==QNE) && (!S-Flag)) { | | | |||
| | | | | | tx_query(QSPEC, Toggle=false); | | | |||
| +-------------------------------------------------------+-----------+ | | } else { | | | |||
| Figure 10 | | tx_response(RII/RSN, INFO(SUCCESS), QSPEC, | | | |||
| | Toggle=true); | | | ||||
| | } | | | ||||
| | | | | ||||
| +---------------------------------------------------------+-----------+ | ||||
| Figure 20 | ||||
| ST_WR::EV_TG_RESERVE | ||||
| +---------------------------------------------------------+-----------+ | ||||
| | Action | new State | | ||||
| +---------------------------------------------------------+-----------+ | ||||
| | | | | ||||
| | if(T-Flag) { | ST_IDLE | | ||||
| | tx_reserve(T-Flag, RSN, Direction=DOWNSTREAM); | | | ||||
| | stopTimers(); | | | ||||
| | } | | | ||||
| | | | | ||||
| +---------------------------------------------------------+-----------+ | ||||
| | | | | ||||
| | if((!T-Flag) && (Nodepos==QNI) && (RMF()==NO_AVAIL)) { | ST_IDLE | | ||||
| | send_info_to_app(); | | | ||||
| | } | | | ||||
| | | | | ||||
| +---------------------------------------------------------+-----------+ | ||||
| | | | | ||||
| | if((!T-Flag) && (Nodepos==QNI) && (RMF()==AVAIL)) { | ST_INST | | ||||
| | install_qos_state(); | | | ||||
| | if(setRII) { | | | ||||
| | tx_reserve(Q-Flag, RSN, RII, PC, QSPEC, | | | ||||
| | Direction=DOWNSTREAM); | | | ||||
| | } else { | | | ||||
| | tx_reserve(Q-Flag, RSN, PC, QSPEC, | | | ||||
| | Direction=DOWNSTREAM); | | | ||||
| | } | | | ||||
| | startRefreshTimer(); | | | ||||
| | startResponseTimer(); | | | ||||
| | } | | | ||||
| | | | | ||||
| +---------------------------------------------------------+-----------+ | ||||
| Figure 21 | ||||
| A.3. State ST_INST | ||||
| ST_INST::EV_RX_RESPONSE | ||||
| +---------------------------------------------------------+-----------+ | ||||
| | Action | new State | | ||||
| +---------------------------------------------------------+-----------+ | ||||
| | | | | ||||
| | if((Nodepos==QNE) && (!S-Flag)) { | | | ||||
| | tx_response(toggle=false); | | | ||||
| | } | | | ||||
| | if(is_local(RII)==true) { | | | ||||
| | stopResponseTimer(); | | | ||||
| | } | | | ||||
| | | | | ||||
| +---------------------------------------------------------+-----------+ | ||||
| | | | | ||||
| | if(INFO==SUCCESS) | ST_INST | | ||||
| | | | | ||||
| +---------------------------------------------------------+-----------+ | ||||
| | | | | ||||
| | if(INFO==FAILURE) { | ST_IDLE | | ||||
| | delete_qos_state(); | | | ||||
| | stop_timers(); | | | ||||
| | } | | | ||||
| | | | | ||||
| +---------------------------------------------------------+-----------+ | ||||
| Figure 22 | ||||
| ST_INST::EV_RX_RESERVE | ||||
| +---------------------------------------------------------+-----------+ | ||||
| | Action | new State | | ||||
| +---------------------------------------------------------+-----------+ | ||||
| | | | | ||||
| | if(T-Flag) { | ST_IDLE | | ||||
| | delete_qos_state(); | | | ||||
| | stopTimers(); | | | ||||
| | if((Nodepos==QNE) && (!S-Flag)) { | | | ||||
| | tx_reserve(Toggle=false); | | | ||||
| | } | | | ||||
| | } | | | ||||
| | | | | ||||
| +---------------------------------------------------------+-----------+ | ||||
| | | | | ||||
| | if(!T-Flag) { | ST_INST | | ||||
| | if((Nodepos==QNR) || ((Nodepos==QNE)&&(!S-Flag))) { | | | ||||
| | if(RII) { | | | ||||
| | tx_response(RII, RSN, INFO(SUCCESS), | | | ||||
| | Toggle=true); | | | ||||
| | } else { | | | ||||
| | tx_notify(INFO(SUCCESS), Toggle=true); | | | ||||
| | } | | | ||||
| | } | | | ||||
| | restartStateTimer(); | | | ||||
| | } | | | ||||
| | | | | ||||
| +---------------------------------------------------------+-----------+ | ||||
| Figure 23 | ||||
| ST_INST::EV_RX_NOTIFY | ||||
| +---------------------------------------------------------+-----------+ | ||||
| | Action | new State | | ||||
| +---------------------------------------------------------+-----------+ | ||||
| | | | | ||||
| | if(ErrorClass==ERRORCLASS_INFO) { | ST_INST | | ||||
| | if(ErrorCode==RR_NOT_SUPPORTED) { | | | ||||
| | ReducedRefreshes = false; | | | ||||
| | } else if(ErrorCode==RR_SUPPORTED) { | | | ||||
| | ReducedRefreshes = true; | | | ||||
| | } | | | ||||
| | } | | | ||||
| | if(ErrorClass==SUCCESS) { | | | ||||
| | stopResponseTimer(); | | | ||||
| | } | | | ||||
| | | | | ||||
| +---------------------------------------------------------+-----------+ | ||||
| Figure 24 | ||||
| ST_INST::EV_TG_QUERY | ||||
| +---------------------------------------------------------+-----------+ | ||||
| | Action | new State | | ||||
| +---------------------------------------------------------+-----------+ | ||||
| | | | | ||||
| | tx_query(RII, QSPEC, Direction); | ST_INST | | ||||
| | startResponseTimer(); | | | ||||
| | | | | ||||
| +---------------------------------------------------------+-----------+ | ||||
| Figure 25 | ||||
| ST_INST::EV_RX_QUERY | ||||
| +---------------------------------------------------------+-----------+ | ||||
| | Action | new State | | ||||
| +---------------------------------------------------------+-----------+ | ||||
| | | | | ||||
| | if(!R-Flag) { | ST_INST | | ||||
| | queryRMF(QSPEC); | | | ||||
| | if((Nodepos==QNE) && (!S-Flag)) | | | ||||
| | tx_query(QSPEC, Toggle=false); | | | ||||
| | } else { | | | ||||
| | tx_response(RII/RSN, INFO, QSPEC, Toggle=true); | | | ||||
| | } | | | ||||
| | } | | | ||||
| | | | | ||||
| +---------------------------------------------------------+-----------+ | ||||
| Figure 26 | ||||
| ST_INST::EV_TG_RESERVE | ||||
| +---------------------------------------------------------+-----------+ | ||||
| | Action | new State | | ||||
| +---------------------------------------------------------+-----------+ | ||||
| | | | | ||||
| | if(T-Flag) { | ST_INST | | ||||
| | delete_qos_state(); | | | ||||
| | stopTimers(); | | | ||||
| | tx_reserve(T-Flag, RSN, Direction); | | | ||||
| | } | | | ||||
| | | | | ||||
| +---------------------------------------------------------+-----------+ | ||||
| Figure 27 | ||||
| ST_INST::EV_TIMEOUT_RESPONSE | ||||
| +---------------------------------------------------------+-----------+ | ||||
| | Action | new State | | ||||
| +---------------------------------------------------------+-----------+ | ||||
| | | | | ||||
| | if(MAX_RETRY) { | ST_IDLE | | ||||
| | delete_qos_state(); | | | ||||
| | stopTimers(); | | | ||||
| | } | | | ||||
| | | | | ||||
| +---------------------------------------------------------+-----------+ | ||||
| | | | | ||||
| | if(!MAX_RETRY) { | ST_INST | | ||||
| | tx_reserve(Direction); | | | ||||
| | restartResponseTimer() | | | ||||
| | } | | | ||||
| | | | | ||||
| +---------------------------------------------------------+-----------+ | ||||
| Figure 28 | ||||
| ST_INST::EV_TIMEOUT_REFRESH | ||||
| +---------------------------------------------------------+-----------+ | ||||
| | Action | new State | | ||||
| +---------------------------------------------------------+-----------+ | ||||
| | | | | ||||
| | if(ReducedRefreshes) { | ST_INST | | ||||
| | if(WholePath) { | | | ||||
| | tx_reserve(RSN, RII, Direction); | | | ||||
| | } else { | | | ||||
| | tx_reserve(RSN, Direction); | | | ||||
| | } | | | ||||
| | } else { | | | ||||
| | if(WholePath) { | | | ||||
| | tx_reserve(RSN, RII, QSPEC, Direction); | | | ||||
| | } else { | | | ||||
| | tx_reserve(RSN, QSPEC, Direction); | | | ||||
| | } | | | ||||
| | } | | | ||||
| | startResponseTimer(); | | | ||||
| | restartRefreshTimer(); | | | ||||
| | | | | ||||
| +---------------------------------------------------------+-----------+ | ||||
| Figure 29 | ||||
| ST_INST::EV_TIMEOUT_STATELIFETIME | ||||
| +---------------------------------------------------------+-----------+ | ||||
| | Action | new State | | ||||
| +---------------------------------------------------------+-----------+ | ||||
| | | | | ||||
| | stopTimers(); | ST_IDLE | | ||||
| | delete_qos_state(); | | | ||||
| | if(Nodepos != QNR) { | | | ||||
| | tx_reserve(T-Flag, RSN, Direction); | | | ||||
| | } | | | ||||
| | | | | ||||
| +---------------------------------------------------------+-----------+ | ||||
| Figure 30 | ||||
| Authors' Addresses | Authors' Addresses | |||
| Xiaoming Fu | Xiaoming Fu | |||
| University of Goettingen | University of Goettingen | |||
| Telematics Group | Telematics Group | |||
| Lotzestr. 16-18 | Lotzestrasse 16-18 | |||
| Goettingen 37083 | Goettingen 37083 | |||
| Germany | Germany | |||
| Email: fu@cs.uni-goettingen.de | Email: fu@cs.uni-goettingen.de | |||
| Hannes Tschofenig | Hannes Tschofenig | |||
| Siemens | Siemens | |||
| Otto-Hahn-Ring 6 | Otto-Hahn-Ring 6 | |||
| Munich, Bayern 81739 | Munich, Bayern 81739 | |||
| Germany | Germany | |||
| skipping to change at page 26, line 35 ¶ | skipping to change at page 40, line 35 ¶ | |||
| Siemens | Siemens | |||
| Otto-Hahn-Ring 6 | Otto-Hahn-Ring 6 | |||
| Munich, Bayern 81739 | Munich, Bayern 81739 | |||
| Germany | Germany | |||
| Email: tseno.tsenov@mytum.de | Email: tseno.tsenov@mytum.de | |||
| Bernd Schloer | Bernd Schloer | |||
| University of Goettingen | University of Goettingen | |||
| Telematics Group | Telematics Group | |||
| Lotzestr. 16-18 | Lotzestrasse 16-18 | |||
| Goettingen 37083 | Goettingen 37083 | |||
| Germany | Germany | |||
| Email: bschloer@cs.uni-goettingen.de | Email: bschloer@cs.uni-goettingen.de | |||
| Intellectual Property Statement | Intellectual Property Statement | |||
| The IETF takes no position regarding the validity or scope of any | The IETF takes no position regarding the validity or scope of any | |||
| Intellectual Property Rights or other rights that might be claimed to | Intellectual Property Rights or other rights that might be claimed to | |||
| pertain to the implementation or use of the technology described in | pertain to the implementation or use of the technology described in | |||
| this document or the extent to which any license under such rights | this document or the extent to which any license under such rights | |||
| might or might not be available; nor does it represent that it has | might or might not be available; nor does it represent that it has | |||
| made any independent effort to identify any such rights. Information | made any independent effort to identify any such rights. Information | |||
| on the procedures with respect to rights in RFC documents can be | on the procedures with respect to rights in RFC documents can be | |||
| found in BCP 78 and BCP 79. | found in BCP 78 and BCP 79. | |||
| Copies of IPR disclosures made to the IETF Secretariat and any | Copies of IPR disclosures made to the IETF Secretariat and any | |||
| assurances of licenses to be made available, or the result of an | assurances of licenses to be made available, or the result of an | |||
| attempt made to obtain a general license or permission for the use of | attempt made to obtain a general license or permission for the use of | |||
| such proprietary rights by implementers or users of this | such proprietary rights by implementers or users of this | |||
| specification can be obtained from the IETF on-line IPR repository at | specification can be obtained from the IETF on-line IPR repository at | |||
| http://www.ietf.org/ipr. | http://www.ietf.org/ipr. | |||
| The IETF invites any interested party to bring to its attention any | The IETF invites any interested party to bring to its attention any | |||
| copyrights, patents or patent applications, or other proprietary | copyrights, patents or patent applications, or other proprietary | |||
| rights that may cover technology that may be required to implement | rights that may cover technology that may be required to implement | |||
| this standard. Please address the information to the IETF at ietf- | this standard. Please address the information to the IETF at ietf- | |||
| ipr@ietf.org. | ipr@ietf.org. | |||
| Disclaimer of Validity | Disclaimer of Validity | |||
| This document and the information contained herein are provided on an | This document and the information contained herein are provided on an | |||
| "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS | "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS | |||
| OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET | OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET | |||
| ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, | ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, | |||
| INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE | INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE | |||
| INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED | INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED | |||
| WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. | WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. | |||
| Copyright Statement | Copyright Statement | |||
| Copyright (C) The Internet Society (2006). This document is subject | Copyright (C) The Internet Society (2006). This document is subject | |||
| to the rights, licenses and restrictions contained in BCP 78, and | to the rights, licenses and restrictions contained in BCP 78, and | |||
| except as set forth therein, the authors retain all their rights. | except as set forth therein, the authors retain all their rights. | |||
| Acknowledgement | Acknowledgement | |||
| Funding for the RFC Editor function is currently provided by the | Funding for the RFC Editor function is currently provided by the | |||
| Internet Society. | Internet Society. | |||
| End of changes. 116 change blocks. | ||||
| 505 lines changed or deleted | 982 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||