| draft-werner-nsis-natfw-nslp-statemachine-01.txt | draft-werner-nsis-natfw-nslp-statemachine-02.txt | |||
|---|---|---|---|---|
| NSIS X. Fu | NSIS C. Werner | |||
| Internet-Draft C. Werner | Internet-Draft X. Fu, Ed. | |||
| Expires: January 18, 2006 Univ. Goettingen | Expires: September 7, 2006 Univ. Goettingen | |||
| H. Tschofenig | H. Tschofenig | |||
| T. Tsenov | ||||
| Siemens | Siemens | |||
| C. Aoun | C. Aoun | |||
| Nortel | ENST | |||
| N. Steinleitner | N. Steinleitner | |||
| Univ. Goettingen | Univ. Goettingen | |||
| July 17, 2005 | March 6, 2006 | |||
| NAT/FW NSLP State Machine | NAT/FW NSLP State Machine | |||
| draft-werner-nsis-natfw-nslp-statemachine-01.txt | draft-werner-nsis-natfw-nslp-statemachine-02.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 | |||
| skipping to change at page 1, line 41 | skipping to change at page 1, line 40 | |||
| 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 January 18, 2006. | This Internet-Draft will expire on September 7, 2006. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (C) The Internet Society (2005). | Copyright (C) The Internet Society (2006). | |||
| Abstract | Abstract | |||
| This document describes the state machines for the NSIS Signaling | This document describes the state machines for the NSIS Signaling | |||
| Layer Protocol for Network Address Translation/Firewall signaling | Layer Protocol for Network Address Translation/Firewall signaling | |||
| (NAT/FW NSLP). A set of state machines for NAT/FW NSLP entities at | (NAT/FW NSLP). A set of state machines for NAT/FW NSLP entities at | |||
| different locations of a signaling path are presented in order to | different locations of a signaling path are presented in order to | |||
| illustrate how NAT/FW NSLP may be implemented. | illustrate how NAT/FW NSLP may be 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 . . . . . . . . . . . . . . . . . . . 6 | 4. State Machine Symbols . . . . . . . . . . . . . . . . . . . . 6 | |||
| 5. Common Rules . . . . . . . . . . . . . . . . . . . . . . . . 7 | 5. Common Rules . . . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 5.1 Common Procedures . . . . . . . . . . . . . . . . . . . . 7 | 5.1. Common Procedures . . . . . . . . . . . . . . . . . . . . 7 | |||
| 5.2 Common Variables . . . . . . . . . . . . . . . . . . . . . 9 | 5.2. Common Variables . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 5.3 Constants . . . . . . . . . . . . . . . . . . . . . . . . 10 | 5.3. Constants . . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 6. State machine for the NAT/FW NI . . . . . . . . . . . . . . 10 | 6. State machine for the NAT/FW NI . . . . . . . . . . . . . . . 9 | |||
| 7. State machines for the NAT/FW NF . . . . . . . . . . . . . . 14 | 7. State machines for the NAT/FW NF . . . . . . . . . . . . . . . 11 | |||
| 7.1 State machine for NAT/FW Firewall NF . . . . . . . . . . . 15 | 8. State machine for the NAT/FW NR . . . . . . . . . . . . . . . 15 | |||
| 7.2 State machine for NAT/FW NAT NF . . . . . . . . . . . . . 22 | 9. Security Considerations . . . . . . . . . . . . . . . . . . . 18 | |||
| 8. State machine for the NAT/FW NR . . . . . . . . . . . . . . 29 | 10. Open Issues . . . . . . . . . . . . . . . . . . . . . . . . . 18 | |||
| 9. Security Considerations . . . . . . . . . . . . . . . . . . 33 | 11. Contributors . . . . . . . . . . . . . . . . . . . . . . . . . 18 | |||
| 10. Open Issues . . . . . . . . . . . . . . . . . . . . . . . . 34 | 12. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 19 | |||
| 11. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . 34 | 13. References . . . . . . . . . . . . . . . . . . . . . . . . . . 19 | |||
| 12. References . . . . . . . . . . . . . . . . . . . . . . . . . 34 | 13.1. Normative References . . . . . . . . . . . . . . . . . . . 19 | |||
| 12.1 Normative References . . . . . . . . . . . . . . . . . . 34 | 13.2. Informative References . . . . . . . . . . . . . . . . . . 19 | |||
| 12.2 Informative References . . . . . . . . . . . . . . . . . 34 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 20 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . 35 | Intellectual Property and Copyright Statements . . . . . . . . . . 21 | |||
| Intellectual Property and Copyright Statements . . . . . . . 37 | ||||
| 1. Introduction | 1. Introduction | |||
| This document describes the state machines for NAT/FW NSLP [1], | This document describes the state machines for NAT/FW NSLP [1], | |||
| trying to show how NAT/FW NSLP can be implemented to support its | trying to show how NAT/FW NSLP can be implemented to support its | |||
| deployment. The state machines described in this document are | deployment. The state machines described in this document are | |||
| illustrative of how the NAT/FW NSLP protocol defined in [1] may be | illustrative of how the NAT/FW NSLP protocol defined in [1] may be | |||
| implemented for the first NAT/FW NSLP node in the signaling path, | implemented for the first NAT/FW NSLP node in the signaling path, | |||
| intermediate NAT/FW NSLP nodes with Firewall and/or NAT | intermediate NAT/FW NSLP nodes with Firewall and/or NAT | |||
| functionality, and the last NAT/FW NSLP node in the signaling path. | functionality, and the last NAT/FW NSLP node in the signaling path. | |||
| skipping to change at page 3, line 25 | skipping to change at page 3, line 25 | |||
| machines are informative only. Implementations may achieve the same | machines are informative only. Implementations may achieve the same | |||
| results using different methods. | results using different methods. | |||
| The messages used in the NAT/FW NSLP protocol can be summarized as | The messages used in the NAT/FW NSLP protocol can be summarized as | |||
| follows: | follows: | |||
| Requesting message Responding message | Requesting message Responding message | |||
| ------------------------+--------------------------- | ------------------------+--------------------------- | |||
| CREATE |RESPONSE | CREATE |RESPONSE | |||
| REA |RESPONSE | REA |RESPONSE | |||
| QUERY |RESPONSE | TRACE |RESPONSE | |||
| RESPONSE |NONE | RESPONSE |NONE | |||
| NOTIFY |NONE | NOTIFY |NONE | |||
| TRIGGER |CREATE | ||||
| ------------------------+--------------------------- | ------------------------+--------------------------- | |||
| We describe a set of state machines for different roles of entities | We describe a set of state machines for different roles of entities | |||
| running NAT/FW NSLP to illustrate how NAT/FW NSLP may be implemented. | running NAT/FW NSLP to illustrate how NAT/FW NSLP may be implemented. | |||
| 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]. | |||
| skipping to change at page 6, line 39 | skipping to change at page 6, line 41 | |||
| assignments, e.g., a = b = X the action causes the value of the | assignments, e.g., a = b = X the action causes the value of the | |||
| expression following the right-most assignment operator to be | expression following the right-most assignment operator to be | |||
| assigned to all of the variables that appear to the left of the | assigned to all of the variables that appear to the left of the | |||
| right-most assignment operator. | right-most assignment operator. | |||
| ! Logical NOT operator. | ! Logical NOT operator. | |||
| && Logical AND operator. | && Logical AND operator. | |||
| || Logical OR operator. | || Logical OR operator. | |||
| if...then... Conditional action. If the Boolean expression following | if...then... Conditional action. If the Boolean expression following | |||
| the if evaluates to TRUE, then the action following the then is | the if evaluates to TRUE, then the action following the then is | |||
| executed. | executed. | |||
| \{ statement 1, ... statement N \} Compound statement. Braces are | { statement 1, ... statement N } Compound statement. Braces are used | |||
| used to group statements that are executed together as if they | to group statements that are executed together as if they were a | |||
| were a single statement. | 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 operator is not equal in value to the expression to the right. | the 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. | |||
| 5. Common Rules | 5. Common Rules | |||
| Throughout the document we use terms defined in the [1], such as NI, | Throughout the document we use terms defined in the [1], such as NI, | |||
| NF, NR, NI+, NR+, CREATE, QUERY, or RESPONSE. | NF, NR, CREATE, REA or RESPONSE. | |||
| 5.1 Common Procedures | 5.1. Common Procedures | |||
| tx_CREATE(): Transmit a CREATE message | tx_CREATE(): Transmit a CREATE message | |||
| tx_CREATE(LIFETIME=0): Transmit CREATE message with lifetime object | tx_CREATE(LIFETIME=0): Transmit CREATE message with lifetime object | |||
| explicitly set to 0 for session deletion | explicitly set to 0 for session deletion | |||
| tx_RESP(code,type): Transmit RESPONSE message with specified code | tx_RESPONSE(code,type): Transmit RESPONSE message with specified code | |||
| (SUCCESS or ERROR) and result type (related to a specific request | (SUCCESS or ERROR) and result type (related to a specific request | |||
| type message: CREATE, REA or QUERY). A code or result type may be | type message: CREATE or REA). A code or result type may be | |||
| omitted, typically when forwarding received RESPONSE messages. | omitted, typically when forwarding received RESPONSE messages. | |||
| tx_QUERY(): Transmit QUERY message. | tx_REA(): Transmit a REA message | |||
| tx_NOTIFY(): Transmit NOTIFY message. | rx_RESPONSE(code, type): Evaluates to TRUE if a RESPONSE message has | |||
| rx_RESP(code, type): Evaluates to TRUE if a RESPONSE message has been | been received with the specified code (SUCCESS or ERROR) and | |||
| received with the specified code (SUCCESS or ERROR) and result | result type (related to a specific request type message: CREATE or | |||
| type (related to a specific request type message: CREATE, REA or | REA). If the code or type is omitted, any received RESPONSE | |||
| QUERY). If the code or type is omitted, any received RESPONSE | ||||
| message which is only matching the given code or type will | message which is only matching the given code or type will | |||
| evaluate this procedure to TRUE. | evaluate this procedure to TRUE. | |||
| rx_NOTIFY(): Evaluates to TRUE if a NOTIFY message has been received. | ||||
| rx_QUERY(): Evaluates to TRUE if a QUERY message has been received | ||||
| rx_CREATE(): Evaluates to TRUE if a CREATE message has been received. | rx_CREATE(): Evaluates to TRUE if a CREATE message has been received. | |||
| rx_REA(): Evaluates to TRUE if a REA message has been received. | ||||
| CHECK_AA(): Checks Authorization and Authentication of the received | CHECK_AA(): Checks Authorization and Authentication of the received | |||
| message. Evaluates to TRUE if the check is successful, otherwise | message. Evaluates to TRUE if the check is successful, otherwise | |||
| it evaluates to FALSE. This check is performed on all received | it evaluates to FALSE. This check is performed on all received | |||
| messages hence it will only be shown within the state machine when | messages hence it will only be shown within the state machine when | |||
| the check has failed. This CHECK_AA also MAY include a local | the check has failed. This CHECK_AA also MAY include a local | |||
| policy check for the received message. | policy check for the received message. | |||
| CHECK_NoNR(): Checks if the message can reach its targeted | CreateSession(): Installs all session related states, variables, | |||
| destination, i.e. the NR if it exists at the targeted host. | bindings, policies. | |||
| CHECK_SCOPE(): Checks if the message has reached the network | DeleteSession(): Removes all session related states, variables, | |||
| boundaries defined by the SCOPE object. | bindings, policies. | |||
| Process Event(): Processes a NOTIFY messages and adapts the behaviour | CreatePinhole(): Installs a pinhole for the new session. | |||
| of this node to the new condition. | DeletePinhole(): Removes a previously installed pinhole. | |||
| Process Query(): Processes the received QUERY message and prepares | ||||
| the appropriate RESPONSE message. | ||||
| Binding.create(): Creates a public/private network translation | CreateReservations(): Creates a matching based on the MRI and open | |||
| binding on a NAT device for the requesting entity. | pinholes for the signaling traffic. | |||
| Binding.clear(): Deletes a previously created a public/private | DeleteReservations(): Deletes previously installed matchings and | |||
| pinholes for the signaling traffic. | ||||
| CreateBinding(): Creates a public/private network translation binding | ||||
| on a NAT device for the requesting entity. | ||||
| DeleteBinding(): Deletes a previously created a public/private | ||||
| network translation binding on a NAT device for the requesting | network translation binding on a NAT device for the requesting | |||
| entity. | entity. | |||
| Session.create(): Installs all session related states, variables, | StartTimer(identifier): This procedure starts a timer with a certain | |||
| bindings, policies. | timespan, which is up to the specific implementation. The | |||
| Session.update(): Updates all session related states, variables, | ||||
| bindings, policies based on received CREATE or TRIGGER if | ||||
| applicable. | ||||
| Session.clear(): Removes all session related states, variables, | ||||
| bindings, policies. | ||||
| PckFilter.create(): Installs a packet filter for the new session. | ||||
| PckFilter.update(): Updates the packet filter for changes in the | ||||
| session rules. | ||||
| PckFilter.clear(): Removes a previously set packet filter. | ||||
| Start.STATE_TIMER(identifier): This procedure starts a timer with a | ||||
| certain timespan, which is up to the specific implementation. The | ||||
| parameter 'identifier' identifies this timer uniquely. Any | parameter 'identifier' identifies this timer uniquely. Any | |||
| subsequent Start_STATE_TIMER(x), Stop_STATE_TIMER(x), | subsequent StartTimer(identifier), StopTimer(identifier), | |||
| TIMEOUT_STATE(x) refer to the same timer labeled x. This timer is | (identifier)_TIMEOUT refer to the same timer labeled x. This | |||
| required to time the lifetime of state, which means that when it | timer is required to time the lifetime of state, which means that | |||
| times out, it indicates the current machine state should be left | when it times out, it indicates the current machine state should | |||
| or its validation has expired. This procedure starts the timer | be left or its validation has expired. This procedure starts the | |||
| 'identifier'. If a timer with the same 'identifier' has | timer 'identifier'. If a timer with the same 'identifier' has | |||
| already been started and not yet stopped, the timer is now stopped | already been started and not yet stopped, the timer is now stopped | |||
| and restarted. After the timer has timed out, the procedure | and restarted. After the timer has timed out, the procedure | |||
| TIMEOUT_STATE(identifier) evaluates to TRUE. The timer does not | (identifier)_TIMEOUT evaluates to TRUE. The timer does not | |||
| restart automatically, but must be started again with a | restart automatically, but must be started again with a | |||
| Start_STATE_TIMER(identifier). Notice that there is no difference | StartTimer(identifier). Notice that this function can call as | |||
| to the Start_REFRESH_TIMER(identifier) procedure which has exactly | statetimer or as refreshtimer which represents the | |||
| the same functionality. The different procedure names are only | "Start.REFRESH_TIMER(identifier)" procedure in version 01. | |||
| supplied to underline the purpose of this specific timer. | StopTimer(identifier): This procedure stops the timer labeled | |||
| Stop.STATE_TIMER(identifier): This procedure stops the timer labeled | ||||
| 'identifier'. If it has already been stopped, this procedure has | 'identifier'. If it has already been stopped, this procedure has | |||
| no effect. If the timer has already timed out, this procedure | no effect. If the timer has already timed out, this procedure | |||
| removes the timeout-state from the timer 'identifier', so | removes the timeout-state from the timer 'identifier', so | |||
| subsequent calls to TIMEOUT_STATE(identifier) evaluate to FALSE. | subsequent calls to (identifier)_TIMEOUT evaluate to FALSE. A | |||
| A timeout cannot occur until the timer 'identifier' has been | timeout cannot occur until the timer 'identifier' has been | |||
| (re-)started. | (re-)started. | |||
| TIMEOUT.STATE(identifier): This procedure evaluates to TRUE if the | (identifier)_TIMEOUT: This procedure evaluates to TRUE if the | |||
| timer 'identifier' has timed out and indicates a state lifetime | (identifier)-timer has timed out and indicates a state lifetime | |||
| expiration. Subsequent TIMEOUT_STATE(identifier) calls also | expiration. This procedure cannot evaluate to TRUE if the timer | |||
| evaluate to TRUE until the timer 'identifier' has been | has been stopped. Used timers are STATE_TIMEOUT, REFRESH_TIMEOUT, | |||
| (re-)started. This procedure cannot evaluate to TRUE if the timer | CREATE_TIMEOUT, REA_TIMEOUT or RESPONSE_TIMEOUT. | |||
| has been stopped. | ||||
| Start.REFRESH_TIMER(identifier): This procedure starts a timer with a | ||||
| certain timespan, which is up to the specific implementation. The | ||||
| parameter 'identifier' identifies this timer uniquely. Any | ||||
| subsequent Start_REFRESH_TIMER(x), Stop_REFRESH_TIMER(x), | ||||
| TIMEOUT_REFRESH(x) refer to the same timer labeled x. This timer | ||||
| times a refresh interval, which means that when it times out, it | ||||
| indicates a state refresh message is due to be sent. This | ||||
| procedure starts the timer 'identifier'. If a timer with the same | ||||
| 'identifier' has already been started and not yet stopped, the | ||||
| timer is now stopped and restarted. After the timer has timed | ||||
| out, the procedure TIMEOUT_REFRESH(identifier) evaluates to TRUE. | ||||
| The timer does not restart automatically, but must be started | ||||
| again with a Start_REFRESH_TIMER(identifier). Notice that there | ||||
| is no difference to the Start_STATE_TIMER(identifier) procedure | ||||
| which has exactly the same functionality. The different procedure | ||||
| names are only supplied to underline the purpose of this specific | ||||
| timer. | ||||
| Stop.REFRESH_TIMER(identifier): This procedure stops the timer | ||||
| labeled 'identifier'. If it has already been stopped, this | ||||
| procedure has no effect. If the timer has already timed out, this | ||||
| procedure removes the timeout-state from the timer 'identifier', | ||||
| so subsequent calls to TIMEOUT_REFRESH(identifier) evaluate to | ||||
| FALSE. A timeout cannot occur until the timer 'identifier' has | ||||
| been (re-)started. | ||||
| TIMEOUT.REFRESH(identifier): This procedure evaluates to TRUE if the | ||||
| timer 'identifier' has timed out and indicates a refresh interval | ||||
| expiration. Subsequent TIMEOUT_REFRESH(identifier) calls also | ||||
| evaluate to TRUE until the timer 'identifier' has been | ||||
| (re-)started. This procedure cannot evaluate to TRUE if the timer | ||||
| has been stopped. | ||||
| tg_QUERY: External trigger to send a QUERY message (typically | ||||
| triggered by the application). | ||||
| tg_CREATE: External trigger to send a CREATE message (typically | tg_CREATE: External trigger to send a CREATE message (typically | |||
| triggered by the application). | triggered by the application). | |||
| tg_NOTIFY: External trigger to notify the entity of a new event to be | ||||
| processed (typically triggered by the application) | ||||
| tg_TRIGGER: External trigger to send a TRIGGER message to a NF | ||||
| (typically triggered by the application) | ||||
| tg_TEARDOWN: External trigger to delete a previously created session | tg_TEARDOWN: External trigger to delete a previously created session | |||
| (typically triggered by the application) | (typically triggered by the application) | |||
| tg_REA: External trigger to send a REA message towards an | tg_REA: External trigger to send a REA message towards an | |||
| opportunistic address (typically triggered by the application) | opportunistic address (typically triggered by the application) | |||
| tg_CREATE_PROXY: Internal trigger to send a CREATE message (used in | ||||
| proxy mode, triggered by corresponding NAT/FW NSLP session). | ||||
| tg_TEARDOWN_PROXY: Internal trigger to delete a previously created | ||||
| session (used in proxy mode, triggered by corresponding NAT/FW | ||||
| NSLP session). | ||||
| 5.2. Common Variables | ||||
| 5.2 Common Variables | ||||
| IS_EDGE: Boolean flag which evaluates to TRUE if the node is on the | IS_EDGE: Boolean flag which evaluates to TRUE if the node is on the | |||
| network edge, otherwise it evaluates to FALSE. | network edge, otherwise it evaluates to FALSE. | |||
| IS_PUBLICSIDE: Boolean flag which evaluates to TRUE if the (CREATE- | IS_PUBLICSIDE: Boolean flag which evaluates to TRUE if the (CREATE- | |||
| or REA-) message has been received on the public side of the | or REA-) message has been received on the public side of the | |||
| network. | network. | |||
| CREATE(LIFETIME?): Gets the value of the LIFETIME object in the | CREATE(LIFETIME): Gets the value of the LIFETIME object in the CREATE | |||
| CREATE message. | message. | |||
| CREATE(TRIGGER?): Evaluates to TRUE if the received CREATE message | counter(CREATE): Denotes the current number of retries of CREATE | |||
| indicates a CREATE trigger. | ||||
| CREATE(POLICY?): Gets the policy for the CREATE message. | ||||
| CREATE(SOURCE?): Retrieves the sender of the CREATE message. | ||||
| CREATE(NoNR?): Evaluates to TRUE if the CREATE message has an active | ||||
| NoNR-flag. | ||||
| CREATE(Scope?): Evaluates to TRUE if the CREATE message has an active | ||||
| Scope-flag. | ||||
| Retry_Counter(CREATE): Denotes the current number of retries of | ||||
| CREATE message which has been re-transmitted due to previous | ||||
| RESPONSE_ERROR message. If the number of Retry_Counter(CREATE) | ||||
| equals the value of MAXRETRY(CREATE), the current session creation | ||||
| attempt is aborted and the application is being notified. | ||||
| Retry_Counter(QUERY): Denotes the current number of retries of QUERY | ||||
| message which has been re-transmitted due to previous | ||||
| RESPONSE_ERROR message. If the number of Retry_Counter(QUERY) | ||||
| equals the value of MAXRETRY(QUERY), the current QUERY attempt is | ||||
| aborted and the application is being notified. | ||||
| Retry_Counter(REA): Denotes the current number of retries of REA | ||||
| message which has been re-transmitted due to previous | message which has been re-transmitted due to previous | |||
| RESPONSE_ERROR message. If the number of Retry_Counter(REA) | RESPONSE_ERROR message. If the number of counter(CREATE) equals | |||
| equals the value of MAXRETRY(REA), the current REA initiation | the value of counterLimit(CREATE), the current session creation | |||
| attempt is aborted and the application is being notified. | attempt is aborted and the application is being notified. | |||
| counter(REA): Denotes the current number of retries of REA message | ||||
| which has been re-transmitted due to previous RESPONSE_ERROR | ||||
| message. If the number of counter(REA) equals the value of | ||||
| counterLimit(REA), the current session creation attempt is aborted | ||||
| and the application is being notified. | ||||
| 5.3 Constants | 5.3. Constants | |||
| Max_Retry(CREATE): Contains the maximum number of retransmission | counterLimit(CREATE): Contains the maximum number of retransmission | |||
| attempts of a CREATE message after it is aborted and the | attempts of a CREATE message after it is aborted and the | |||
| application is being notified. | application is being notified. | |||
| Max_Retry(QUERY): Contains the maximum number of retransmission | counterLimit(REA): Contains the maximum number of retransmission | |||
| attempts of a QUERY message after it is aborted and the | ||||
| application is being notified. | ||||
| Max_Retry(REA): Contains the maximum number of retransmission | ||||
| attempts of a REA message after it is aborted and the application | attempts of a REA message after it is aborted and the application | |||
| is being notified. | is being notified. | |||
| 6. State machine for the NAT/FW NI | 6. State machine for the NAT/FW NI | |||
| This section presents the state machines for the NSIS initator which | This section presents the state machine for the NSIS initator which | |||
| is capable of NSLP NAT/FW signaling | is capable of NAT/FW NSLP signaling. | |||
| ----------- | ----------- | |||
| State: INITIALIZE | State: INITIALIZE | |||
| ----------- | ----------- | |||
| Condition Action State Note | Condition Action State | |||
| ------------------------+-------------------------+-----------+--- | ----------------------------+-----------------------------+---------- | |||
| UCT |Initialize variables | IDLE |* | UCT |Initialize variables | IDLE | |||
| ------------------------+-------------------------+-----------+--- | ----------------------------+-----------------------------+---------- | |||
| NOTE: | ||||
| * - Application triggered for forking process | ||||
| ----------- | ----------- | |||
| State: IDLE | State: IDLE | |||
| Entry: DeleteSession(); | ||||
| Exit : CreateSession(); | ||||
| ----------- | ----------- | |||
| Condition Action State Note | ||||
| ------------------------+-------------------------+-----------+--- | ||||
| tg_CREATE |tx_CREATE |WAITRESP2- | | ||||
| (sid, sig, pubkey)| (sid, sig, pubkey);| SESSION| | ||||
| |Start.STATE_TIMER |PENDING | | ||||
| | (Response);| | | ||||
| | | | | ||||
| (tg_CREATE (sid)) |tx_CREATE (sid); |WAITRESP1- | | ||||
| |Start.STATE_TIMER | SESSION| | ||||
| | (Response);|PENDING | | ||||
| ------------------------+-------------------------+-----------+--- | ||||
| ----------- | ||||
| State: WAITRESP-SESSION PENDING | ||||
| ----------- | ||||
| Condition Action State Note | ||||
| ------------------------+-------------------------+-----------+--- | ||||
| TIMEOUT.STATE(Response) |Stop.STATE_TIMER |WAITRESP- | | ||||
| | (Response);| SESSION| | ||||
| |retry_counter(Create)++; |PENDING | | ||||
| |if (retry_counter(Create)| | | ||||
| | <=Max_Retry(Create))| | | ||||
| |{Start_STATE_TIMER | | | ||||
| | (Response)| | | ||||
| |tx_CREATE;} | | | ||||
| | | | | ||||
| (rx_RESPONSE(SUCCESS, |Stop.STATE_TIMER |SESSION | | ||||
| Create))| (Response);|ESTABLISHED| | ||||
| |Session.create(); | | | ||||
| |Start.REFRESH_TIMER | | | ||||
| | (Create);| | | ||||
| |retry_counter(Create)=0; | | | ||||
| | | | | ||||
| (Retry_Counter(Create)> |Send info to Appl.; | IDLE | | ||||
| Max_Retry(Create)) |||Stop.STATE_TIMER | | | ||||
| (tg_TEARDOWN) || | (Response);| | | ||||
| (rx_RESPONSE(ERROR, | | | | ||||
| Create))| | | | ||||
| ------------------------+-------------------------+-----------+ | ||||
| ----------- | ||||
| State: WAITRESP1-SESSION PENDING | ||||
| ----------- | ||||
| Condition Action State Note | ||||
| ------------------------+-------------------------+-----------+--- | ||||
| (TIMEOUT.STATE(Response)|Send info to Appl.; |IDLE | | ||||
| || (rx_RESPONSE(ERROR, | | | | ||||
| Create))| | | | ||||
| | | | | ||||
| (rx_RESPONSE(SUCCESS, |Tx_Create(sid, sig, |WAITPKRESP-| | ||||
| Create))| pubkey);| SESSION| | ||||
| |Start.STATE_TIMER |PENDING | | ||||
| | (Response);| | | ||||
| ------------------------+-------------------------+-----------+--- | ||||
| ----------- | ||||
| State: WAITRESP2-SESSION PENDING | ||||
| ----------- | ||||
| Condition Action State Note | ||||
| ------------------------+-------------------------+-----------+--- | ||||
| (tr(RESPONSE(sid)) |tx_CREATE (sid); |WAITRESP- | | ||||
| |Start.STATE_TIMER | SESSION| | ||||
| | (Response);|PENDING | | ||||
| |retry_counter(Create)=0; | | | ||||
| ------------------------+-------------------------+-----------+--- | ||||
| ----------- | ||||
| State: WAITPKRESP-SESSION PENDING | ||||
| ----------- | ||||
| Condition Action State Note | ||||
| ------------------------+-------------------------+-----------+--- | ||||
| (tr(RESPONSE(sid)) |tx_CREATE (sid); |WAITRESP- | | ||||
| |Start.STATE_TIMER | SESSION| | ||||
| | (Response);|PENDING | | ||||
| |retry_counter(Create)=0; | | | ||||
| ------------------------+-------------------------+-----------+--- | ||||
| ----------- | ||||
| State: SESSION ESTABLISHED | ||||
| ----------- | ||||
| Condition Action State Note | ||||
| ------------------------+-------------------------+-----------+--- | ||||
| (rx_RESPONSE |Stop.STATE_TIMER(QDRQ); |SESSION | | ||||
| (SUCCESS, QDRQ))|Send info to appl.; |ESTABLISHED| | ||||
| && (CHECK_AA) | | | | ||||
| | | | | ||||
| | | | ||||
| (rx_RESPONSE |Stop.STATE_TIMER(QDRQ); |SESSION | | ||||
| (ERROR, QDRQ)|retry_counter(QDRQ)++; |ESTABLISHED| | ||||
| || TIMEOUT_STATE(QDRQ)) |If (retry_counter(QDRQ)< | | | ||||
| | Max_Retry(QDRQ)| | | ||||
| |{Start.STATE_TIMER(QDRQ);| | | ||||
| | tx_QDRQ;}| | | ||||
| |else{send info to appl.;}| | | ||||
| | | | | ||||
| (tg_QDRQ) |tx_QDRQ; |SESSION | | ||||
| |Start.STATE_TIMER(QDRQ); |ESTABLISHED| | ||||
| |retry_counter(QDRQ)=0; | | | ||||
| | | | | ||||
| TIMEOUT.REFRESH(Create) |Start.STATE_TIMER |SESSION | | ||||
| | (Response);|ESTABLISHED| | ||||
| |tx_CREATE; | | | ||||
| | | | | ||||
| TIMEOUT.STATE(Response) |Stop.STATE_TIMER |SESSION | | ||||
| | (Response);|ESTABLISHED| | ||||
| |retry_counter(Create)++; | | | ||||
| |If (retry_counter(Create)| | | ||||
| | <=Max_Retry(Create))| | | ||||
| |{Start.STATE_TIMER | | | ||||
| | (Response);| | | ||||
| |tx_CREATE;} | | | ||||
| | | | | ||||
| (rx_RESPONSE(SUCCESS, |Start.REFRESH_TIMER |SESSION | | ||||
| Create))| (Create);|ESTABLISHED| | ||||
| |Stop.STATE_TIMER | | | ||||
| | (Response);| | | ||||
| |retry_counter(Create)=0; | | | ||||
| | | | | ||||
| (rx_NOTIFY)&&(CHECK_AA) |Process Event(); |SESSION | | ||||
| | |ESTABLISHED| | ||||
| | | | | ||||
| (tg_TEARDOWN) |tx_CREATE(LIFETIME=0); |IDLE | | ||||
| |Session.clear(); | | | ||||
| |Stop.REFRESH_TIMER | | | ||||
| | (Create);| | | ||||
| |Stop.STATE_TIMER( | | | ||||
| | Response);| | | ||||
| | | | | ||||
| (retry_counter(Create)> |Send info to Appl.; |IDLE | | ||||
| Max_Retries(Create) |||Session.clear(); | | | ||||
| rx_RESPONSE(ERROR, |Stop.REFRESH_TIMER | | | ||||
| Create))| (Create);| | | ||||
| ------------------------+-------------------------+-----------+ | ||||
| 7. State machines for the NAT/FW NF | ||||
| This section describes the state machines for intermediate nodes | ||||
| within the signaling path capable of processing NAT/FW NSLP messages. | ||||
| These nodes typically implement firewall and/or network address | ||||
| translation (NAT) functionality. To keep it simple, the state | ||||
| machines are separated in two independent state machines for nodes | ||||
| with firewall and nodes with NAT functionality. | ||||
| 7.1 State machine for NAT/FW Firewall NF | ||||
| ------------------- | ||||
| State: Initialize | ||||
| ------------------- | ||||
| Condition Action State | ||||
| ------------------------+-------------------------+------------ | ||||
| UCT | |