| < draft-werner-nsis-natfw-nslp-statemachine-00.txt | draft-werner-nsis-natfw-nslp-statemachine-01.txt > | |||
|---|---|---|---|---|
| NSIS C. Werner | NSIS X. Fu | |||
| Internet-Draft X. Fu | Internet-Draft C. Werner | |||
| Expires: May 2, 2005 Univ. Goettingen | Expires: January 18, 2006 Univ. Goettingen | |||
| H. Tschofenig | H. Tschofenig | |||
| T. Tsenov | ||||
| Siemens | Siemens | |||
| C. Aoun | C. Aoun | |||
| Nortel | Nortel | |||
| November 2004 | N. Steinleitner | |||
| Univ. Goettingen | ||||
| July 17, 2005 | ||||
| NSLP NAT/FW State Machine | NAT/FW NSLP State Machine | |||
| draft-werner-nsis-natfw-nslp-statemachine-00.txt | draft-werner-nsis-natfw-nslp-statemachine-01.txt | |||
| Status of this Memo | Status of this Memo | |||
| This document is an Internet-Draft and is subject to all provisions | By submitting this Internet-Draft, each author represents that any | |||
| of section 3 of RFC 3667. By submitting this Internet-Draft, each | applicable patent or other IPR claims of which he or she is aware | |||
| author represents that any applicable patent or other IPR claims of | have been or will be disclosed, and any of which he or she becomes | |||
| which he or she is aware have been or will be disclosed, and any of | aware will be disclosed, in accordance with Section 6 of BCP 79. | |||
| which he or she become aware will be disclosed, in accordance with | ||||
| RFC 3668. | ||||
| 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 groups may also distribute working documents as | other groups may also distribute working documents as Internet- | |||
| 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 May 2, 2005. | This Internet-Draft will expire on January 18, 2006. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (C) The Internet Society (2004). | Copyright (C) The Internet Society (2005). | |||
| 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 . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 3. Notational conventions used in state diagrams . . . . . . . . 5 | 3. Notational conventions used in state diagrams . . . . . . . 3 | |||
| 4. State Machine Symbols . . . . . . . . . . . . . . . . . . . . 8 | 4. State Machine Symbols . . . . . . . . . . . . . . . . . . . 6 | |||
| 5. Common Rules . . . . . . . . . . . . . . . . . . . . . . . . . 9 | 5. Common Rules . . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 5.1 Common Procedures . . . . . . . . . . . . . . . . . . . . 9 | 5.1 Common Procedures . . . . . . . . . . . . . . . . . . . . 7 | |||
| 5.2 Common Variables . . . . . . . . . . . . . . . . . . . . . 11 | 5.2 Common Variables . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 5.3 Constants . . . . . . . . . . . . . . . . . . . . . . . . 12 | 5.3 Constants . . . . . . . . . . . . . . . . . . . . . . . . 10 | |||
| 6. State machine for the NAT/FW NI . . . . . . . . . . . . . . . 13 | 6. State machine for the NAT/FW NI . . . . . . . . . . . . . . 10 | |||
| 7. State machines for the NAT/FW NF . . . . . . . . . . . . . . . 16 | 7. State machines for the NAT/FW NF . . . . . . . . . . . . . . 14 | |||
| 7.1 State machine for NAT/FW Firewall NF . . . . . . . . . . . 16 | 7.1 State machine for NAT/FW Firewall NF . . . . . . . . . . . 15 | |||
| 7.2 State machine for NAT/FW NAT NF . . . . . . . . . . . . . 18 | 7.2 State machine for NAT/FW NAT NF . . . . . . . . . . . . . 22 | |||
| 8. State machine for the NAT/FW NR . . . . . . . . . . . . . . . 24 | 8. State machine for the NAT/FW NR . . . . . . . . . . . . . . 29 | |||
| 9. Security Considerations . . . . . . . . . . . . . . . . . . . 27 | 9. Security Considerations . . . . . . . . . . . . . . . . . . 33 | |||
| 10. Open Issues . . . . . . . . . . . . . . . . . . . . . . . . 28 | 10. Open Issues . . . . . . . . . . . . . . . . . . . . . . . . 34 | |||
| 11. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . 29 | 11. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . 34 | |||
| 12. References . . . . . . . . . . . . . . . . . . . . . . . . . 30 | 12. References . . . . . . . . . . . . . . . . . . . . . . . . . 34 | |||
| 12.1 Normative References . . . . . . . . . . . . . . . . . . . . 30 | 12.1 Normative References . . . . . . . . . . . . . . . . . . 34 | |||
| 12.2 Informative References . . . . . . . . . . . . . . . . . . . 30 | 12.2 Informative References . . . . . . . . . . . . . . . . . 34 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . 30 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . 35 | |||
| Intellectual Property and Copyright Statements . . . . . . . . 32 | 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 8, line 23 ¶ | skipping to change at page 6, line 36 ¶ | |||
| = Assignment action. The value of the expression to the right of | = Assignment action. The value of the expression to the right of | |||
| the operator is assigned to the variable to the left of the | the operator is assigned to the variable to the left of the | |||
| operator. Where this operator is used to define multiple | operator. Where this operator is used to define multiple | |||
| 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 | if...then... Conditional action. If the Boolean expression following | |||
| following the if evaluates to TRUE, then the action following the | the if evaluates to TRUE, then the action following the then is | |||
| then is executed. | executed. | |||
| \{ statement 1, ... statement N \} Compound statement. Braces are | \{ statement 1, ... statement N \} Compound statement. Braces are | |||
| used to group statements that are executed together as if they | used to group statements that are executed together as if they | |||
| were a single statement. | 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 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, NI+, NR+, CREATE, QUERY, or RESPONSE. | |||
| skipping to change at page 9, line 37 ¶ | skipping to change at page 7, line 42 ¶ | |||
| rx_NOTIFY(): Evaluates to TRUE if a NOTIFY message has been received. | 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_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. | |||
| 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 | CHECK_NoNR(): Checks if the message can reach its targeted | |||
| destination, i.e. the NR if it exists at the targeted host. | destination, i.e. the NR if it exists at the targeted host. | |||
| CHECK_SCOPE(): Checks if the message has reached the network | CHECK_SCOPE(): Checks if the message has reached the network | |||
| boundaries defined by the SCOPE object. | boundaries defined by the SCOPE object. | |||
| Process Event(): Processes a NOTIFY messages and adapts the behaviour | Process Event(): Processes a NOTIFY messages and adapts the behaviour | |||
| of this node to the new condition. | of this node to the new condition. | |||
| Process Query(): Processes the received QUERY message and prepares | Process Query(): Processes the received QUERY message and prepares | |||
| the appropriate RESPONSE message. | the appropriate RESPONSE message. | |||
| Binding.create(): Creates a public/private network translation | Binding.create(): Creates a public/private network translation | |||
| binding on a NAT device for the requesting entity. | binding on a NAT device for the requesting entity. | |||
| Binding.clear(): Deletes a previously created a public/private | Binding.clear(): 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, | Session.create(): Installs all session related states, variables, | |||
| bindings, policies. | bindings, policies. | |||
| Session.update(): Updates all session related states, variables, | Session.update(): Updates all session related states, variables, | |||
| bindings, policies based on received CREATE or TRIGGER if | bindings, policies based on received CREATE or TRIGGER if | |||
| applicable. | applicable. | |||
| Session.clear(): Removes all session related states, variables, | Session.clear(): Removes all session related states, variables, | |||
| bindings, policies. | bindings, policies. | |||
| PckFilter.create(): Installs a packet filter for the new session. | PckFilter.create(): Installs a packet filter for the new session. | |||
| PckFilter.update(): Updates the packet filter for changes in the | PckFilter.update(): Updates the packet filter for changes in the | |||
| session rules. | session rules. | |||
| PckFilter.clear(): Removes a previously set packet filter. | PckFilter.clear(): Removes a previously set packet filter. | |||
| Start.STATE_TIMER(identifier): This procedure starts a timer with a | Start.STATE_TIMER(identifier): This procedure starts a timer with a | |||
| skipping to change at page 13, line 9 ¶ | skipping to change at page 11, line 4 ¶ | |||
| attempts of a QUERY message after it is aborted and the | attempts of a QUERY message after it is aborted and the | |||
| application is being notified. | application is being notified. | |||
| Max_Retry(REA): Contains the maximum number of retransmission | 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 machines for the NSIS initator which | |||
| is capable of NSLP NAT/FW signaling | is capable of NSLP NAT/FW signaling | |||
| ----------- | ||||
| State: INITIALIZE | ||||
| ----------- | ||||
| ------------------- | Condition Action State Note | |||
| State: Initialize | ------------------------+-------------------------+-----------+--- | |||
| ------------------- | UCT |Initialize variables | IDLE |* | |||
| ------------------------+-------------------------+-----------+--- | ||||
| Condition Action State | NOTE: | |||
| ------------------------+-------------------------+------------ | * - Application triggered for forking process | |||
| UCT |retry_Counter(Create)=0; |IDLE | ||||
| |retry_Counter(Query)=0; | | ||||
| ------------------------+-------------------------+------------ | ||||
| ------------------- | ----------- | |||
| State: IDLE | State: IDLE | |||
| ------------------- | ----------- | |||
| Condition Action State | Condition Action State Note | |||
| ------------------------+-------------------------+------------ | ------------------------+-------------------------+-----------+--- | |||
| tg_CREATE |Start.STATE_TIMER(Resp); |PENDING | tg_CREATE |tx_CREATE |WAITRESP2- | | |||
| |retry_Counter(Create)=0; | | (sid, sig, pubkey)| (sid, sig, pubkey);| SESSION| | |||
| |tx_CREATE; | | |Start.STATE_TIMER |PENDING | | |||
| ------------------------+-------------------------+------------ | | (Response);| | | |||
| ------------------- | | | | | |||
| State: PENDING | (tg_CREATE (sid)) |tx_CREATE (sid); |WAITRESP1- | | |||
| ------------------- | |Start.STATE_TIMER | SESSION| | |||
| | (Response);|PENDING | | ||||
| ------------------------+-------------------------+-----------+--- | ||||
| ----------- | ||||
| State: WAITRESP-SESSION PENDING | ||||
| ----------- | ||||
| Condition Action State | Condition Action State Note | |||
| ------------------------+-------------------------+------------ | ------------------------+-------------------------+-----------+--- | |||
| rx_RESP(SUCCESS,Create) |Stop.STATE_TIMER(Resp); |ESTABLISHED | TIMEOUT.STATE(Response) |Stop.STATE_TIMER |WAITRESP- | | |||
| |Session.create(); | | | (Response);| SESSION| | |||
| |Start.REFRESH_TIMER(Cre);| | |retry_counter(Create)++; |PENDING | | |||
| |retry_Counter(Create)=0; | | |if (retry_counter(Create)| | | |||
| | | | | <=Max_Retry(Create))| | | |||
| TIMEOUT.STATE(Resp) |Stop.STATE_TIMER(Resp); |PENDING | |{Start_STATE_TIMER | | | |||
| |retry_Counter(Create)++; | | | (Response)| | | |||
| |if (retry_Counter(Create)| | |tx_CREATE;} | | | |||
| |<=Max_Retry(Create)) | | | | | | |||
| |{Start.STATE_TIMER(Resp);| | (rx_RESPONSE(SUCCESS, |Stop.STATE_TIMER |SESSION | | |||
| |tx_CREATE;} | | Create))| (Response);|ESTABLISHED| | |||
| | | | |Session.create(); | | | |||
| (Retry_Counter(Create) |Send info to appl.; |IDLE | |Start.REFRESH_TIMER | | | |||
| > Max_Retry(Create)) || |Stop.STATE_TIMER(Resp); | | | (Create);| | | |||
| tg_TEARDOWN || | | | |retry_counter(Create)=0; | | | |||
| rx_RESP(ERROR,Create) | | | | | | | |||
| ------------------------+-------------------------+------------ | (Retry_Counter(Create)> |Send info to Appl.; | IDLE | | |||
| Max_Retry(Create)) |||Stop.STATE_TIMER | | | ||||
| (tg_TEARDOWN) || | (Response);| | | ||||
| (rx_RESPONSE(ERROR, | | | | ||||
| Create))| | | | ||||
| ------------------------+-------------------------+-----------+ | ||||
| ------------------- | ----------- | |||
| State: ESTABLISHED | State: WAITRESP1-SESSION PENDING | |||
| ------------------- | ----------- | |||
| Condition Action State | Condition Action State Note | |||
| ------------------------+-------------------------+------------ | ------------------------+-------------------------+-----------+--- | |||
| rx_RESP(SUCCESS,Query) |Stop.STATE_TIMER(Query); |ESTABLISHED | (TIMEOUT.STATE(Response)|Send info to Appl.; |IDLE | | |||
| && CHECK_AA |Send info to appl.; | | || (rx_RESPONSE(ERROR, | | | | |||
| | | | Create))| | | | |||
| tg_QUERY |tx_QUERY; |ESTABLISHED | | | | | |||
| |Start.STATE_TIMER(Query);| | (rx_RESPONSE(SUCCESS, |Tx_Create(sid, sig, |WAITPKRESP-| | |||
| |retry_Counter(Query)=0; | | Create))| pubkey);| SESSION| | |||
| | | | |Start.STATE_TIMER |PENDING | | |||
| rx_RESP(SUCCESS,Create) |Start.REFRESH_TIMER(Cre);|ESTABLISHED | | (Response);| | | |||
| |Stop.STATE_TIMER(Resp); | | ------------------------+-------------------------+-----------+--- | |||
| |retry_counter(Create)=0; | | ----------- | |||
| | | | State: WAITRESP2-SESSION PENDING | |||
| TIMEOUT.REFRESH(Cre) |Start.STATE_TIMER(Resp); |ESTABLISHED | ----------- | |||
| |tx_CREATE; | | ||||
| | | | Condition Action State Note | |||
| TIMEOUT.STATE(Resp) |Stop.STATE_TIMER(Resp); |ESTABLISHED | ------------------------+-------------------------+-----------+--- | |||
| |retry_Counter(Create)++; | | (tr(RESPONSE(sid)) |tx_CREATE (sid); |WAITRESP- | | |||
| |if (retry_Counter(Create)| | |Start.STATE_TIMER | SESSION| | |||
| | <= Max_Retry(Create)) { | | | (Response);|PENDING | | |||
| |Start.STATE_TIMER(Resp); | | |retry_counter(Create)=0; | | | |||
| |tx_CREATE;} | | ------------------------+-------------------------+-----------+--- | |||
| | | | ||||
| rx_NOTIFY && CHECK_AA |Process Event(); |ESTABLISHED | ----------- | |||
| | | | State: WAITPKRESP-SESSION PENDING | |||
| rx_RESP(ERROR,Query) || |Stop.STATE_TIMER(Query); |ESTABLISHED | ----------- | |||
| TIMEOUT.STATE(Query) |retry_Counter(Query)++; | | ||||
| |if (retry_Counter(Query) | | Condition Action State Note | |||
| | <= Max_Retry(Query)) { | | ------------------------+-------------------------+-----------+--- | |||
| |Start.STATE_TIMER(Query);| | (tr(RESPONSE(sid)) |tx_CREATE (sid); |WAITRESP- | | |||
| |tx_QUERY;} else { | | |Start.STATE_TIMER | SESSION| | |||
| |send info to appl.} | | | (Response);|PENDING | | |||
| | | | |retry_counter(Create)=0; | | | |||
| (retry_Counter(Create) |Send info to appl.; |IDLE | ------------------------+-------------------------+-----------+--- | |||
| > Max_Rety(Create)) || |Session.clear(); | | ||||
| rx_RESP(ERROR,Create) |Stop.REFRESH_TIMER(Cre); | | ----------- | |||
| | | | State: SESSION ESTABLISHED | |||
| tg_TEARDOWN |tx_CREATE(LIFETIME=0); |IDLE | ----------- | |||
| |Session.clear(); | | ||||
| |Stop.REFRESH_TIMER(Cre); | | Condition Action State Note | |||
| |Stop.STATE_TIMER(Resp); | | ------------------------+-------------------------+-----------+--- | |||
| ------------------------+-------------------------+------------ | (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 | 7. State machines for the NAT/FW NF | |||
| This section describes the state machines for intermediate nodes | This section describes the state machines for intermediate nodes | |||
| within the signaling path capable of processing NAT/FW NSLP messages. | within the signaling path capable of processing NAT/FW NSLP messages. | |||
| These nodes typically implement firewall and/or network address | These nodes typically implement firewall and/or network address | |||
| translation (NAT) functionality. To keep it simple, the state | translation (NAT) functionality. To keep it simple, the state | |||
| machines are separated in two independent state machines for nodes | machines are separated in two independent state machines for nodes | |||
| with firewall and nodes with NAT functionality. | with firewall and nodes with NAT functionality. | |||
| skipping to change at page 16, line 25 ¶ | skipping to change at page 16, line 5 ¶ | |||
| ------------------- | ------------------- | |||
| State: Initialize | State: Initialize | |||
| ------------------- | ------------------- | |||
| Condition Action State | Condition Action State | |||
| ------------------------+-------------------------+------------ | ------------------------+-------------------------+------------ | |||
| UCT | - |IDLE | UCT | - |IDLE | |||
| ------------------------+-------------------------+------------ | ------------------------+-------------------------+------------ | |||
| ------------------- | ------------------- | |||
| State: IDLE | State: IDLE | |||
| ------------------- | ------------------- | |||
| Condition Action State | Condition Action State | |||
| ------------------------+-------------------------+------------ | ------------------------+-------------------------+------------ | |||
| rx_REA && !(CHECK_AA) |tx_RESP(ERROR,Rea); |IDLE | (rx_REA) && (!IS_EDGE) |tx_REA; |IDLE | |||
| | | | | | | |||
| rx_RESP(Rea) |tx_RESP(Rea); |IDLE | (rx_CREATE) && |tx_RESPONSE(ERROR, |IDLE | |||
| | | | !(CHECK_AA) |Create) | | |||
| rx_REA && IS_EDGE |tx_RESP(ERROR,Rea); (*) |IDLE | | | | |||
| | | | (rx_RESPONSE (,Rea)) |tx_RESPONSE (,Rea) |IDLE | |||
| rx_REA && !(IS_EDGE) |tx_REA; |IDLE | | | | |||
| | | | (rx_REA) && (IS_EDGE) |tx_RESPONSE(ERROR, Rea) |IDLE | |||
| rx_CREATE && CHECK_AA |Start.STATE_TIMER(Resp); |PENDING | | "No NAT here" | | |||
| |tx_CREATE; | | | | | |||
| | | | (rx_UCREATE) && |tx_RESPONSE(ERROR, |IDLE | |||
| rx_CREATE && !(CHECK_AA)|tx_RESP(ERROR,Create); |IDLE | !(CHECK_AA) |UCREATE); | | |||
| ------------------------+-------------------------+------------ | | | | |||
| * REA Error message "No NAT here" | ((rx_CREATE(sid)) && |Start.STATE_TIMER |WAITRESP1- | |||
| ------------------- | (CHECK_AA) && |(Response); |SESSION/ | |||
| State: PENDING | (!IS_PUBLICSIDE)) |tx_CREATE; |USESSION | |||
| ------------------- | | |PENDING | |||
| | | | ||||
| (rx_UCREATE) && |tx_RESPONSE(SUCCESS, |WAITRESP- | ||||
| (CHECK_AA) |UCREATE); |SESSION/US | ||||
| |tx_CREATE; |ESSION | ||||
| |Retry_Counter(Create)=0; |PENDING | ||||
| |Start.STATE_TIMER(Respons| | ||||
| |e); | | ||||
| | | | ||||
| (rx_CREATE) && |tx_RESPONSE(SUCCESS, |NoNR/Scope- | ||||
| (CHECK_AA) |Create), |WaitResponse | ||||
| && ((CREATE(NoNR?) && |tx_CREATE; | | ||||
| CHECK_NoNR) || | Start.STATE_TIMER(Respon| | ||||
| CREATE(Scope?) && |se) | | ||||
| CHECK_Scope)) | | | ||||
| ------------------------+-------------------------+------------ | ||||
| ------------------- | ||||
| State: NoNR/Scope-WaitResponse | ||||
| ------------------- | ||||
| Condition Action State | Condition Action State | |||
| ------------------------+-------------------------+------------ | ------------------------+-------------------------+------------ | |||
| rx_RESP(SUCCESS,Create) |Stop_STATE_TIMER(Resp); |ESTABLISHED | (retry_Counter(Create)> |Send info to Appl.; |IDLE | |||
| |Session.create(); | | Max_Retry(Create)) || |Stop.STATE_TIMER(Response| | |||
| |PckFilter.create(); | | (tg_TEARDOWN)) |); | | |||
| |Start.STATE_TIMER(Cre); | | | | | |||
| | | | rx_RESPONSE(SUCCESS, |Stop.STATE_TIMER(Response|NoNR/Scope | |||
| rx_RESP(ERROR,Create) |Stop.STATE_TIMER(Resp); |IDLE | Create) |); |Sessions | |||
| || TIMEOUT.STATE(Resp) | | | |Session.create(); |Established | |||
| ------------------------+-------------------------+------------ | |PckFilter.create(); | | |||
| ------------------- | |Start.STATE_TIMER(Create)| | |||
| State: ESTABLISHED | |; | | |||
| ------------------- | |Start.REFRESH_TIMER(Creat| | |||
| |eB); | | ||||
| |retry_counter(Create)=0; | | ||||
| |Retry_counter(CreateB)=0;| | ||||
| ------------------------+-------------------------+------------ | ||||
| ------------------------------ | ||||
| State: NoNR/ScopeSessions Established | ||||
| ------------------------------ | ||||
| Condition Action State | Condition Action State | |||
| ------------------------+-------------------------+------------ | ------------------------+-------------------------+------------ | |||
| rx_CREATE && !(CHECK_AA)|tx_RESP(ERROR,Create); |ESTABLISHED | (rx_CREATE) && |tx_RESPONSE_SUCCESS(Creat|NoNR/Scope | |||
| | | | (CHECK_AA) && |e); |Sessions | |||
| rx_TRIGGER && CHECK_AA |tx_TRIGGER; |ESTABLISHED | [CHECK_LP] && |Start_STATE_TIMER(Create)|Established | |||
| && !IS_EDGE | | | (CREATE(LIFETIME?)>0) |; | | |||
| | | | | | | |||
| rx_RESP(SUCCESS,Create) |Start.STATE_TIMER(Cre); |ESTABLISHED | (tg_NOTIFY) |tx_NOTIFY |NoNR/Scope | |||
| |tx_RESP(SUCCESS,Create); | | | |Sessions | |||
| | | | | |Established | |||
| rx_QUERY && CHECK_AA |Process Query(); |ESTABLISHED | | | | |||
| |tx_QUERY; | | (rx_CREATE) && |tx_RESPONSE(ERROR, |NoNR/Scope | |||
| | | | !(CHECK_AA)) |Create); |Sessions | |||
| rx_CREATE && CHECK_AA |tx_CREATE; |ESTABLISHED | | |Established | |||
| && CREATE(LIFETIME?)>0 | | | | | | |||
| | | | (rx_RESPONSE(ERROR, |Stop.STATE_TIMER(Response|NoNR/Scope | |||
| rx_RESP(,Query) && |tx_RESP(,Query); |ESTABLISHED | Create) || |); |Sessions | |||
| CHECK_AA | | | TIMOUT.STATE(Response))|retry_counter(Create)++; |Established | |||
| | | | | if | | |||
| tg_NOTIFY |tx_NOTIFY; |ESTABLISHED | |(retry_counter(Create)<=M| | |||
| | | | |ax_Retry(Create)) | | |||
| rx_NOTIFY && CHECK_AA |Process Event(); |ESTABLISHED | |{Start.STATE_TIMER(Respon| | |||
| |tx_NOTIFY; | | |se); | | |||
| | | | |tx_CREATE;} | | |||
| TIMEOUT.STATE(Cre) || |Session.clear(); |IDLE | | | | |||
| tg_TEARDOWN |PckFilter.clear(); | | (rx_QDRQ) && (CHECK_AA)|Process QDRQ(); |NoNR/Scope | |||
| | | | | tx_RESPONSE (,QDRQ) |Sessions | |||
| rx_CREATE && CHECK_AA |tx_CREATE(LIFETIME=0); |IDLE | | |Established | |||
| && CREATE(LIFETIME?)==0 |Session.clear(); | | | | | |||
| |PckFilter.clear(); | | (TIMEOUT.REFRESH(CreateB|retry_counter(CreateB)++;|NoNR/Scope | |||
| |Stop.STATE_TIMER(Cre); | | )) |If |Sessions | |||
| ------------------------+-------------------------+------------ | |(retry_counter(CreateB)<=|Established | |||
| |Max_retries) | | ||||
| |{tx_CREATE; | | ||||
| |Start.TIMER_STATE(Respons| | ||||
| |eB);} | | ||||
| | | | ||||
| (tg_TEARDOWN) || |Session.clear(); |IDLE | ||||
| ((rx_CREATE) && |PckFilter.clear(); | | ||||
| (CREATE(LIFETIME?)==0)) |Stop.STATE_TIMER(Create);| | ||||
| || | Stop.REFRESH_TIMER(Creat| | ||||
| TIMEOUT_STATE(Create) |||eB); | | ||||
| (retry_counter(CreateB)>|tx_CREATE(LIFETIME=0); | | ||||
| Max_Retries(CreateB)) ||| | | ||||
| || | | | ||||
| (retry_counter(Create)> | | | ||||
| Max_Retries(Create)) | | | ||||
| ------------------------+-------------------------+------------ | ||||
| 7.2 State machine for NAT/FW NAT NF | ------------------------------ | |||
| State: WAITRESP1-SESSION/USESSION PENDING | ||||
| ------------------------------ | ||||
| ------------------- | Condition Action State | |||
| State: Initialize | ------------------------+-------------------------+------------ | |||
| ------------------- | ((rx_RESPONSE(success)) |Session.create(); |WAITPKRESP- | |||
| && (CHECK_AA) |Start.STATE_TIMER |SESSION/ | ||||
| |(Response); |USESSION | ||||
| |tx_RESPONSE; Scheme = 1 |PENDING | ||||
| | | | ||||
| (TIMEOUT.STATE(Response)| |IDLE | ||||
| ------------------------+-------------------------+------------ | ||||
| ----------------------------------- | ||||
| State: WAITPKRESP-SESSION/USESSION PENDING | ||||
| ----------------------------------- | ||||
| Condition Action State | Condition Action State | |||
| ------------------------+-------------------------+------------ | ------------------------+-------------------------+------------ | |||
| UCT |Retry_Counter(Create)=0; |IDLE | ((rx_RESPONSE(success)) |pubkey.create(); |WAITRESP- | |||
| && (CHECK_AA) |Start.STATE_TIMER |SESSION/ | ||||
| |(Response); |USESSION | ||||
| |tx_RESPONSE; |PENDING | ||||
| | | | ||||
| (TIMEOUT.STATE(Response)|Session.remove() |IDLE | ||||
| && (scheme ==2) | | | ||||
| ------------------------+-------------------------+------------ | ||||
| ---------------------------------------- | ||||
| State: WAITRESP-SESSION/USESSION PENDING | ||||
| ---------------------------------------- | ||||
| ------------------------+-------------------------+------------ | Condition Action State | |||
| ------------------------+-------------------------+------------ | ||||
| (TIMEOUT.STATE(Response)|Retry_counter(CREATE)++; |WAITRESP- | ||||
| |If |SESSION/ | ||||
| |(retry_counter(CREATE)<=M|USESSION | ||||
| |ax_Retries(CREATE)) |PENDING | ||||
| |{Start.STATE_TIMER(Respon| | ||||
| |se); tx_CREATE} | | ||||
| | | | ||||
| (rx_RESPONSE(SUCCESS, |Stop.STATE_TIMER(Response|SESSION | ||||
| CREATE) from NR) |); |ESTA- | ||||
| && (CHECK_AA) |Session.create(); |BLISHED | ||||
| |PckFilter.create(); | | ||||
| |Start.REFRESH_TIMER(Creat| | ||||
| |e); | | ||||
| |tx_RESPONSE(SUCCESS, | | ||||
| |Create); | | ||||
| | | | ||||
| (TIMEOUT.STATE(Response)|Pubkey.remove() |WAITPKRESP | ||||
| | |-SESSION/ | ||||
| | |USESSION | ||||
| | |PENDING | ||||
| | | | ||||
| (rx_RESPONSE(ERROR, |Stop.STATE_TIMER(Response|IDLE | ||||
| Create) || |); | | ||||
| if(Retry_counter)>Max_R|Send info to appl. | | ||||
| etries(CREATE) | | | ||||
| | | | ||||
| (rx_RESPONSE(SUCCESS, |Stop.STATE_TIMER(Response|SESSION | ||||
| Create) from NI) |); |ESTA- | ||||
| && (CHECK_AA) |Session.create(); |BLISHED | ||||
| |PckFilter.create(); | | ||||
| |Start.STATE_TIMER(Create)| | ||||
| |; | | ||||
| |tx_RESPONSE(SUCCESS, | | ||||
| |Create); | | ||||
| ------------------------+-------------------------+---------- | ||||
| ------------------- | -------------------------- | |||
| State: IDLE | State: SESSION ESTABLISHED | |||
| ------------------- | -------------------------- | |||
| Condition Action State | Condition Action State | |||
| ------------------------+-------------------------+------------ | ||||
| rx_CREATE && |tx_RESP(ERROR,Rea); (*1)|IDLE | ------------------------+-------------------------+------------ | |||
| IS_PUBLICSIDE | | | (rx_RESPONSE (,QDRQ)) &&|tx_RESPONSE(.QDRQ) |SESSION | |||
| | | | (CHECK_AA) | |ESTABLISHED | |||
| rx_REA && CHECK_AA && |tx_RESP(ERROR,Rea); (*2)|IDLE | | | | |||
| && IS_PUBLICSIDE | | | (tg_NOTIFY) |tx_NOTIFY |SESSION | |||
| | | | | |ESTABLISHED | |||
| rx_REA && CHECK_AA && |Binding.create(); |NonEDGE REA | | | | |||
| !IS_EDGE |tx_REA; | | (rx_NOTIFY) && |Process Event(), |SESSION | |||
| |Start_STATE_TIMER(Rea); | | (CHECK_AA) |tx_NOTIFY |ESTABLISHED | |||
| | | | | | | |||
| rx_REA && CHECK_AA && |Binding.create(); |REA | (rx_CREATE) && |tx_RESPONSE(ERROR, |SESSION | |||
| IS_EDGE && |Start.STATE_TIMER(Rea); | | !(CHECK_AA) |Create); |ESTABLISHED | |||
| !IS_PUBLICSIDE |tx_RESP(SUCCESS,Rea); | | | | | |||
| |retry_Counter(Create)=0; | | (rx_TRIGGER) && |tx_TRIGGER |SESSION | |||
| |Start.STATE_TIMER(Resp); | | (Check_AA) && | |ESTABLISHED | |||
| |tx_CREATE; | | (!IS_EDGE) | | | |||
| | | | | | | |||
| rx_CREATE && CHECK_AA |Binding.create(); |PENDING | (rx_RESPONSE(SUCCESS, |Start.STATE_TIMER(Create)|SESSION | |||
| && !IS_PUBLICSIDE |Start.STATE_TIMER(Resp); | | Create)) |; tx_RESPONSE(SUCCESS, |ESTABLISHED | |||
| |tx_CREATE; | | |Create); | | |||
| ------------------------+-------------------------+------------ | |Stop.STATE_TIMER(Response| | |||
| *1 Error message is "No reservation made" | |); | | |||
| *2 Error message is "REA received on public side" | |retry_counter(Create)=0; | | |||
| ------------------- | | | | |||
| State: NonEDGE REA | (rx_QDRQ) && (CHECK_AA)|Process QDRQ(); tx_QDRQ |SESSION | |||
| ------------------- | | |ESTABLISHED | |||
| | | | ||||
| TIMEOUT.STATE(Response) |Stop.STATE_TIMER(Response|SESSION | ||||
| |); |ESTABLISHED | ||||
| |retry_counter(Create)++; | | ||||
| |If | | ||||
| |(retry_counter(Create)<=M| | ||||
| |ax_Retries(Create)) | | ||||
| |{Start.STATE_TIMER(Respon| | ||||
| |se); tx_CREATE;} | | ||||
| | | | ||||
| (TIMEOUT.REFRESH |Start.STATE_TIMER(Respons|SESSION | ||||
| (Create)) |e); |ESTABLISHED | ||||
| |tx_CREATE; | | ||||
| | | | ||||
| (rx_CREATE) && |tx_CREATE |SESSION | ||||
| (CHECK_AA) && | |ESTABLISHED | ||||
| (CREATE(LIFETIME?)>0) | | | ||||
| | | | ||||
| (TIMEOUT.STATE (Create) |Stop.REFRESH_TIMER(Create|IDLE | ||||
| || (tg_TEARDOWN) || |); | | ||||
| (retry_counter(Create)> |Session.clear(); | | ||||
| Max_Retries(Create) || |PckFilter.clear(); | | ||||
| rx_RESPONSE(ERROR, |Send info to Appl.; | | ||||
| Create)) | | | ||||
| ------------------------+-------------------------+------------ | ||||
| 7.2 State machine for NAT/FW NAT NF | ||||
| ------------------- | ||||
| State: Initialize | ||||
| ------------------- | ||||
| Condition Action State | Condition Action State | |||
| ------------------------+-------------------------+------------ | ------------------------+-------------------------+------------ | |||
| rx_RESP(,Query) && |tx_RESP(,Query); |NonEDGE REA | UCT | |IDLE | |||
| CHECK_AA | | | ------------------------+-------------------------+------------ | |||
| | | | ------------------- | |||
| rx_QUERY && CHECK_AA |Process Query(); |NonEDGE REA | State: IDLE | |||
| |tx_QUERY; | | ------------------- | |||
| | | | ||||
| tx_TRIGGER && CHECK_AA |PckFilter.update(); |NonEDGE REA | ||||
| |Start.STATE_TIMER(Rea); | | ||||
| |tx_TRIGGER; | | ||||
| | | | ||||
| rx_CREATE && CHECK_AA |Stop.STATE_TIMER(Rea); |PENDING | ||||
| |Start.STATE_TIMER(Resp); | | ||||
| |tx_CREATE; | | ||||
| | | | ||||
| TIMEOUT.STATE(Rea) || |Binding.clear(); |IDLE | ||||
| rx_RESPONSE(ERROR,Rea) |PckFilter.clear(); | | ||||
| ------------------------+-------------------------+------------ | ||||
| ------------------- | ||||
| State: REA | ||||
| ------------------- | ||||
| Condition Action State | Condition Action State | |||
| ------------------------+-------------------------+------------ | ------------------------+-------------------------+------------ | |||
| TIMEOUT.STATE(Rea) || |Binding.clear(); |IDLE | rx_REA && (CHECK_AA) |tx_RESPONSE(ERROR, REA) |IDLE | |||
| rx_RESP(ERROR,Create) | | | && (IS_PUBLICSIDE) | "No reservation made" | | |||
| | | | | | | |||
| rx_RESP(SUCCESS,Create) |Stop.STATE_TIMER(Resp); |REA | rx_REA&& (IS_PUBLICSIDE)|tx_RESPONSE(ERROR, REA) |IDLE | |||
| | | | | "Rea on public side" | | |||
| rx_CREATE && |Start.STATE_TIMER(Resp); |NI-PENDING | | | | |||
| CREATE(SOURCE?)==NI && |tx_CREATE; | | rx_REA && (CHECK_AA) |Binding_create(); |REA | |||
| CHECK_AA | | | && (I _EDGE) && | Start.STATE_TIMER(Rea);| | |||
| | | | (!IS_ UBLICSIDE) | Start.REFRESH_TIMER(Create); | |||
| TIMEOUT.STATE(Resp) |Stop.STATE_TIMER(Resp); |REA | | tx_RESPONSE(SUCCESS, Rea); | |||
| |retry_Counter(Create)++; | | | | | |||
| |if (retry_Counter(Create)| | | Start.STATE_TIMER(Response); | |||
| | <= Max_Retry(Create)) { | | | tx_CREATE | | |||
| |tx_CREATE; | | | | | |||
| |Start.STATE_TIMER(Resp);}| | | | | |||
| | | | rx_UCREATE && (CHECK_AA)|tx_RESPONSE(SUCCESS,UCREA|WAITRESP- | |||
| rx_TRIGGER && CHECK_AA |Start.STATE_TIMER(Rea); |REA | |TE);tx_CREATE; | SESSION/ | |||
| |Start.STATE_TIMER(Resp); | | | Retry_counter(Create)=0| USESSION | |||
| |retry_Counter(Create)=0; | | | Start.STATE_TIMER(Respo| PENDING | |||
| |PckFilter.update(); | | | nse) | | |||
| |tx_CREATE; | | | | | |||
| | | | rx_REA && (CHECK_AA) |Binding_create(); |Non-edge | |||
| tg_NOTIFY |tx_NOTIFY; |REA | &&(!IS_EDGE) && | PckFilter.create(); | NAT Binding | |||
| | | | (!IS_PUBLICSIDE) | Start.STATE_TIMER(Rea);| | |||
| rx_QUERY && CHECK_AA |tx_RESPONSE(,Query); |REA | | tx_REA; | | |||
| ------------------------+-------------------------+------------ | | | | |||
| (rx_CREATE(sid) |Start.STATE_TIMER(Respons|WAITRESP- | ||||
| && (CHECK_AA) |e); tx_CREATE(); scheme=1| SESESION | ||||
| && (!US_PUBLICSIDE)) | | | ||||
| | | | ||||
| (rx_CREATE(sid,sig, |Start.STATE_TIMER(Respons|WAITRESP- | ||||
| pubkey)) && (CHECK_AA) |e); tx_CREATE(); scheme=2| SESSION/ | ||||
| && (!US_PUBLICSIDE)) | | USESSION | ||||
| | | PENDING | ||||
| ------------------------+-------------------------+------------ | ||||
| ------------------- | ||||
| State: REA | ||||
| ------------------- | ||||
| ------------------- | Condition Action State | |||
| State: PENDING | ------------------------+-------------------------+------------ | |||
| ------------------- | TIMEOUT.STATE(Create) |Start.STATE_TIMER(Rea); |REA | |||
| | Start.STATE_TIMER(Respo| | ||||
| | nse); tx_CREATE; | | ||||
| | Retry_Counter(Create)=0| | ||||
| | | | ||||
| rx_QDRQ && (CHECK_AA) |tx_RESPONSE(QDRQ) | | ||||
| | | | ||||
| rg_Notify |tx_Notify | | ||||
| | | | ||||
| TIMEOUT.STATE(Response) |Stop.STATE_TIMER(Response)|REA | ||||
| | Retry_Counter(Create)++;| | ||||
| | If(Retry_Counter(Create)| | ||||
| | <=Max_Retry(Create)) { | | ||||
| | tx_CREATE; | | ||||
| | Start.STATE_TIMER(Respon| | ||||
| | se); } | | ||||
| | | | ||||
| rx_RESPONSE(from NI) && |Start.STATE_TIMER(Respons|WAITRESP- | ||||
| (CHECK_AA) | e); Stop.REFRESH_TIMER | REA+NI- | ||||
| | (Create); tx_CREATE; | SESSION | ||||
| | | PENDING | ||||
| | | | ||||
| rx_RESPONSE(SUCCESS, |Stop.STATE_TIMER(Response);|REA | ||||
| Create) |Start.REFRESH_TIMER(Create)| | ||||
| | | | ||||
| TIMEOUT.STATE(Rea) |Binding.clear(); |IDLE | ||||
| ------------------------+-------------------------+------------ | ||||
| ------------------- | ||||
| State: WAITRESP-REA+NI-SESSION PENDING | ||||
| ------------------- | ||||
| Condition Action State | Condition Action State | |||
| ------------------------+-------------------------+------------ | ------------------------+-------------------------+------------ | |||
| rx_RESP(SUCCESS,Create) |Stop.STATE_TIMER(Resp); |ESTABLISHED | rx_RESPONSE(ERROR, | |REA | |||
| |Start.STATE_TIMER(Cre); | | Create)||TIMEOUT.STATE| | | |||
| |Session.create(); | | (Response) | | | |||
| |PckFilter.create(); | | | | | |||
| |tx_RESP(SUCCESS,Create); | | rx_RESPONSE(SUCCESS, |Stop.STATE_TIMER | | |||
| | | | Create) | (Response); | | |||
| rx_RESP(ERROR,Create) |Binding.remove(); |IDLE | | Session.clear(); | | |||
| || TIMEOUT.STATE(Resp) | | | | Session.create(); | | |||
| ------------------------+-------------------------+------------ | | PckFilter.create(); | | |||
| | Start_STATE_TIMER | | ||||
| | (Create); | | ||||
| | tx_REPONSE(SUCCESS, | | ||||
| | Create); | | ||||
| ------------------------+-------------------------+------------ | ||||
| ------------------- | ------------------- | |||
| State: NI-PENDING | State: WAITRESP1-SESSION/USESSION PENDING | |||
| ------------------- | ------------------- | |||
| Condition Action State | Condition Action State | |||
| ------------------------+-------------------------+------------ | ------------------------+-------------------------+------------ | |||
| rx_RESP(SUCCESS,Create) |Stop.STATE_TIMER(Resp); |ESTABLISHED | TIMEOUT.STATE(Response)| |IDLE | |||
| |Session.clear(); | | | | | |||
| |Session.create(); | | ((rx_RESPONSE(success)) |Session.create(); |WAITPKRESP- | |||
| |PckFilter.create(); | | && (CHECK_AA) |Start.STATE_TIMER |SESSION/ | |||
| |Start.STATE_TIMER(Cre); | | |(Response); |USESSION | |||
| |tx_RESP(SUCCESS,Create); | | |tx_RESPONSE; Scheme = 1 |PENDING | |||
| | | | ------------------------+-------------------------+------------ | |||
| rx_RESP(ERROR,Create) | - |REA | -------------------------- | |||
| || TIMEOUT.STATE(Resp) | | | State: WAITPKRESP-SESSION/USESSION PENDING | |||
| ------------------------+-------------------------+------------ | -------------------------- | |||
| ------------------- | ||||
| State: ESTABLISHED | ||||
| ------------------- | ||||
| Condition Action State | Condition Action State | |||
| ------------------------+-------------------------+------------ | ------------------------+-------------------------+------------ | |||
| rx_CREATE && !(CHECK_AA)|tx_RESP(ERROR,Create); |ESTABLISHED | (TIMEOUT.STATE(Response)|Session.remove() |IDLE | |||
| | | | && (scheme ==2)) | | | |||
| rx_QUERY && CHECK_AA |Process Query(); |ESTABLISHED | | | | |||
| |tx_QUERY; | | ((rx_RESPONSE(success)) |pubkey.create(); |WAITRESP- | |||
| | | | && (CHECK_AA) |Start.STATE_TIMER |SESSION/ | |||
| TIMEOUT.STATE(Cre) || |Session.clear(); |IDLE | |(Response); |USESSION | |||
| tg_TEARDOWN |send info to appl.; | | |tx_RESPONSE; |PENDING | |||
| | | | | | | |||
| | | | (TIMEOUT.STATE(Response)| Session.remove() |WAITRESP1- | |||
| rx_CREATE && CHECK_AA |tx_CREATE(LIFETIME=0); |IDLE | && (scheme ==1) | |SESSION/ | |||
| && CREATE(LIFETIME?)==0 |Session.clear(); | | | |USESSION | |||
| |PckFilter.clear(); | | | |PENDING | |||
| | | | ------------------------+-------------------------+------------ | |||
| rx_TRIGGER && !IS_EDGE |PckFilter.update(); |ESTABLISHED | ||||
| && CHECK_AA |tx_TRIGGER; | | -------------------------- | |||
| | | | State: WAITRESP-SESSION/USESSION PENDING | |||
| rx_RESP(,Query) && |tx_RESP(,Query); |ESTABLISHED | -------------------------- | |||
| CHECK_AA | | | Condition Action State | |||
| | | | ------------------------+-------------------------+------------ | |||
| rx_NOTIFY && CHECK_AA |Process Event(); |ESTABLISHED | (rx_RESPONSE(ERROR, |Stop.STATE_TIMER(Response|IDLE | |||
| |tx_NOTIFY; | | Create) || |); | | |||
| | | | | | | |||
| tg_NOTIFY |tx_NOTIFY; |ESTABLISHED | (TIMEOUT.STATE(Response)|Pubkey.remove() |WAITPKRESP- | |||
| | | | | |SESSION/ | |||
| rx_CREATE && CHECK_AA |PckFilter.update(); |ESTABLISHED | | |USESSION | |||
| && CREATE(LIFETIME?)>0 |tx_CREATE; | | | |PENDING | |||
| | | | | | | |||
| rx_RESP(SUCCESS,Create) |Start.STATE_TIMER(Cre); |ESTABLISHED | (rx_RESPONSE(SUCCESS, |Stop.STATE_TIMER(Response|SESSION | |||
| |tx_RESP(SUCCESS,Create); | | CREATE) from NR) |); |ESTA- | |||
| | | | && (CHECK_AA) |Session.create(); |BLISHED | |||
| rx_RESP(ERROR,Create) |tx_RESP(ERROR,Create); |ESTABLISHED | |PckFilter.create(); | | |||
| ------------------------+-------------------------+------------ | |Start.REFRESH_TIMER(Creat| | |||
| |e); | | ||||
| |tx_RESPONSE(SUCCESS, | | ||||
| |Create); | | ||||
| ------------------------+-------------------------+------------ | ||||
| -------------------------- | ||||
| State: Non-edge NAT Binding | ||||
| -------------------------- | ||||
| Condition Action State | ||||
| ------------------------+-------------------------+------------ | ||||
| (TIMEOUT.STATE (Rea) || |Binding.clear(); |IDLE | ||||
| rx_RESPONSE(ERROR, |PckFilter.clear(); | | ||||
| Rea)) | | | ||||
| | | | ||||
| (rx_RESPONSE (,QDRQ)) &&|tx_RESPONSE(,QDRQ); |Non-edge | ||||
| (CHECK_AA) | |NAT Binding | ||||
| | | | ||||
| (rx_QDRQ) && (CHECK_AA) |Process QDRQ(); tx_QDRQ;|Non-edge | ||||
| | |NAT Binding | ||||
| | | | ||||
| (rx_TRIGGER) && |PckFilter.update(); |Non-edge | ||||
| (CHECK_AA) |Start.STATE_TIMER(Rea); |NAT Binding | ||||
| |tx_TRIGGER; | | ||||
| | | | ||||
| (rx_CREATE) && |Stop.STATE_TIMER(Rea); |WAITRESP- | ||||
| (CHECK_AA) |Start.STATE_TIMER |SESSION/ | ||||
| |(Response); |USESSION | ||||
| |tx_CREATE; |PENDING | ||||
| ------------------------+-------------------------+------------ | ||||
| -------------------------- | ||||
| State: SESSION ESTABLISHED | ||||
| -------------------------- | ||||
| Condition Action State | ||||
| ------------------------+-------------------------+------------ | ||||
| (TIMEOUT.STATE (Create) |Stop.REFRESH_TIMER(Create|IDLE | ||||
| || (tg_TEARDOWN) || |); | | ||||
| (retry_counter(Create)> |Session.clear(); | | ||||
| Max_Retries(Create) || |PckFilter.clear(); | | ||||
| rx_RESPONSE(ERROR, |Send info to Appl.; | | ||||
| Create)) | | | ||||
| | | | ||||
| ((rx_CREATE) && |tx_CREATE(LIFETIME=0); |IDLE | ||||
| (CHECK_AA) && |Session.clear(); | | ||||
| (CREATE(LIFETIME)==0)) |PckFilter.clear();?Stop.S| | ||||
| |TATE_TIMER(Create); | | ||||
| |Stop.REFRESH_TIMER(Create| | ||||
| |); | | ||||
| |Stop.STATE_TIMER(Response| | ||||
| |); | | ||||
| | | | ||||
| (rx_TRIGGER) && |PckFilter.update(); |SESSION | ||||
| (!IS_EDGE) && |tx_TRIGGER; |ESTABLISHED | ||||
| (CHECK_AA) | | | ||||
| | | | ||||
| (rx_QDRQ) && (CHECK_AA)|Process QDRQ(); tx_QDRQ;|SESSION | ||||
| | |ESTABLISHED | ||||
| | | | ||||
| (tg_NOTIFY) |tx_NOTIFY; |SESSION | ||||
| | |ESTABLISHED | ||||
| | | | ||||
| (rx_CREATE) && |tx_RESPONSE(ERROR, |SESSION | ||||
| !(CHECK_AA) |Create); |ESTABLISHED | ||||
| | | | ||||
| rx_RESPONSE(ERROR, |tx_RESPONSE(ERROR, |SESSION | ||||
| Create) |Create); |ESTABLISHED | ||||
| | | | ||||
| (rx_RESPONSE(SUCCESS, |Start.STATE_TIMER(Create)|SESSION | ||||
| Create)) |; tx_RESPONSE(SUCCESS, |ESTABLISHED | ||||
| |Create); | | ||||
| |Stop.STATE_TIMER(Response| | ||||
| |); | | ||||
| |retry_counter(Create)=0; | | ||||
| | | | ||||
| rx_RESPONSE(SUCCESS, |Start.STATE_TIMER(Create)|SESSION | ||||
| Create) |; tx_RESPONSE(SUCCESS, |ESTABLISHED | ||||
| |Create); | | ||||
| | | | ||||
| TIMEOUT.STATE(Response) |Stop.STATE_TIMER(Response|SESSION | ||||
| |); |ESTABLISHED | ||||
| |retry_counter(Create)++; | | ||||
| |If | | ||||
| |(retry_counter(Create)<=M| | ||||
| |ax_Retries(Create)) | | ||||
| |{Start.STATE_TIMER(Respon| | ||||
| |se); tx_CREATE;} | | ||||
| | | | ||||
| rx_CREATE) && |PckFilter.update(): |SESSION | ||||
| CREATE(LIFETIME?)>0) &&|tx_CREATE; |ESTABLISHED | ||||
| CHECK_AA) | | | ||||
| | | | ||||
| (rx_NOTIFY) && |Process |SESSION | ||||
| (CHECK_AA) |Event(); tx_NOTIFY; |ESTABLISHED | ||||
| | | | ||||
| (rx_RESPONSE (QDRQ)) && |tx_RESPONSE (QDRQ); |SESSION | ||||
| (CHECK_AA) | |ESTABLISHED | ||||
| ------------------------+-------------------------+------------ | ||||
| 8. State machine for the NAT/FW NR | 8. State machine for the NAT/FW NR | |||
| This section presents the state machines for the NSIS responder which | This section presents the state machines for the NSIS responder which | |||
| is capable of NSLP NAT/FW signaling | is capable of NSLP NAT/FW signaling | |||
| ------------------- | ----------- | |||
| State: Initialize | State: INITIALIZE | |||
| ------------------- | ----------- | |||
| Condition Action State | Condition Action State Note | |||
| ------------------------+-------------------------+------------ | ------------------------+-------------------------+-----------+--- | |||
| UCT (*) |Retry_Counter(REA)=0; |IDLE | UCT |Initialize variables | IDLE |* | |||
| ------------------------+-------------------------+------------ | ------------------------+-------------------------+-----------+--- | |||
| * Triggered by application when forking process | ||||
| ------------------- | NOTE: | |||
| State: IDLE | * - Application triggered for forking process | |||
| ------------------- | ||||
| Condition Action State | ----------- | |||
| ------------------------+-------------------------+------------ | State: IDLE | |||
| rx_CREATE && CHECK_AA |tx_RESP(SUCCESS,Create); |ESTABLISHED | ----------- | |||
| |Start.STATE_TIMER(Cre); | | ||||
| |Session.start(); | | ||||
| |PckFilter.create(); | | ||||
| |Send info to appl. | | ||||
| | | | ||||
| tg_REA |tx_REA; |REA PENDING | ||||
| |retry_Counter(REA)=0; | | ||||
| |Start.STATE_Timer(Resp); | | ||||
| | | | ||||
| rx_CREATE && !(CHECK_AA)|tx_RESP(ERROR,Create); |IDLE | ||||
| ------------------------+-------------------------+------------ | ||||
| ------------------- | ||||
| State: REA PENDING | ||||
| ------------------- | ||||
| Condition Action State | Condition Action State Note | |||
| ------------------------+-------------------------+------------ | ------------------------+-------------------------+-----------+--- | |||
| rx_RESP(SUCCESS,Rea) |Stop.STATE_TIMER(Resp); |TRIG PENDING | ((rx_CREATE(sid)) && |Start.STATE_TIMER |WAITRESP1- | | |||
| |Start.STATE_TIMER(Cre); | | (CHECK_AA) && | (Response);| SESSION/ | | |||
| | | | (!IS_PUBLICSIDE)) |tx_CREATE; |USESSION | | |||
| TIMEOUT.STATE(Resp) |retry_Counter(REA)++; |REA PENDING | | |PENDING | | |||
| |if (retry_Counter(REA) | | | | | | |||
| | <= Max_Retry(REA)) { | | (rx_CREATE)&&!(CHECK_AA)|tx_RESPONSE(ERROR, |IDLE | | |||
| |Start.STATE_TIMER(Resp); | | | Create);| | | |||
| |tx_REA;} | | | | | | |||
| | | | (tg_UCREATE) |(tx_UCREATE); |WAITRESP - | | |||
| (retry_Counter(REA) > |Send info to appl.; |IDLE | |retry_counter(UCREATE)=0;| UCREATE/| | |||
| Max_Retry(REA)) || | | | |Start.STATE_TIMER |REA PENDING| | |||
| rx_RESP(ERROR,Rea) | | | | (Response);| | | |||
| ------------------------+-------------------------+------------ | | | | | |||
| (tg_REA) |tx_REA; |WAITRESP - | | ||||
| |retry_counter(REA)=0; | UCREATE/| | ||||
| |Start.STATE_TIMER |REA PENDING| | ||||
| | (Response);| | | ||||
| ------------------------+-------------------------+-----------+ | ||||
| ----------- | ||||
| State: WAITRESP -UCREATE/REA PENDING | ||||
| ----------- | ||||
| ------------------- | Condition Action State Note | |||
| State: TRIG PENDING | ------------------------+-------------------------+-----------+--- | |||
| ------------------- | (Retry_counter(REA)> |Send info to Appl.; | IDLE | | |||
| Max_Retries(REA)) ||| | | | ||||
| try_counter(UCREATE)> | | | | ||||
| Max_Retries(UCREATE)) ||| | | | ||||
| rx_RESPONSE | | | | ||||
| (ERROR, UCREATE)) ||| | | | ||||
| rx_RESPONSE(ERROR, Rea))| | | | ||||
| | | | | ||||
| TIMEOUT.STATE(Response))|Retry_counter |WAITRESP - | | ||||
| | (REA/UCREATE)++;| UCREATE/| | ||||
| |If (retry_counter |REA PENDING| | ||||
| | (REA/UCREATE)<=| | | ||||
| |Max_Retry(REA/UCREATE)) | | | ||||
| |{Start.STATE_TIMER | | | ||||
| | (Response);| | | ||||
| |tx_REA/tx_UCREATE} | | | ||||
| | | | | ||||
| (rx_RESPONSE |Stop.STATE_TIMER |TRIGGERED | | ||||
| (SUCCESS, REA)) ||| (Response);|CREATE/ | | ||||
| (rx_RESPONSE |Start.STATE_TIMER | UCREATE| | ||||
| (SUCCESS, UCREATE))| (CREATE);|PENDING | | ||||
| ------------------------+-------------------------+-----------+ | ||||
| ----------- | ||||
| State: TRIGGERED CREATE/UCREATE PENDING | ||||
| ----------- | ||||
| Condition Action State | Condition Action State Note | |||
| ------------------------+-------------------------+------------ | ------------------------+-------------------------+-----------+--- | |||
| TIMEOUT.STATE(Cre) |Send info to appl.; |IDLE | (Retry_counter(Create)> | Send info to appl.; | IDLE | | |||
| | | | Max_Retries(Create)| | | | |||
| rx_CREATE && CHECK_AA |tx_RESP(SUCCESS,Create); |ESTABLISHED | | | | | |||
| |Session.create(); | | (rx_CREATE)&& (CHECK_AA)|tx_RESPONSE |SESSION | | |||
| |PckFilter.create(); | | | (SUCCESS, Create);|ESTABLISHED| | |||
| |Send info to appl.; | | |Stop.STATE_TIMER(CREATE);| | | |||
| |Start.STATE_TIMER(Cre); | | |Session.create(); | | | |||
| |Start.REFRESH_TIMER(Trg);| | |PckFilter.create(); | | | |||
| ------------------------+-------------------------+------------ | |Send Info to Appl. |WAITRESP - | | |||
| ------------------- | |((Start.REFRESH_TIMER | REATE/| | |||
| State: ESTABLISHED | | (UCreate);|REA PENDING| | |||
| ------------------- | |retry_counter | | | |||
| | (UCreate)=0;))| | | ||||
| | | | | ||||
| (TIMEOUT.STATE(CREATE) |Retry_counter(CREATE)++; |TRIGGERED | | ||||
| |If (retry_counter(CREATE)|CREATE/ | | ||||
| | <=Max_Retries(CREATE))| UCREATE| | ||||
| |{Start.STATE_TIMER |PENDING | | ||||
| | (CREATE)}| | | ||||
| ------------------------+-------------------------+-----------+ | ||||
| Condition Action State | ----------- | |||
| ------------------------+-------------------------+------------ | State: SESSION ESTABLISHED | |||
| (rx_CREATE && |Session.session(); |IDLE | ----------- | |||
| CREATE(LIFETIME?)==0 && |PckFilter.clear(); | | ||||
| CHECK_AA) || |Send info to appl.; | | Condition Action State Note | |||
| TIMEOUT.STATE(Cre) || | | | ------------------------+-------------------------+-----------+--- | |||
| tg_TEARDOWN | | | (tg_NOTIFY) |tx_NOTIFY; |SESSION | | |||
| | | | | |ESTABLISHED| | |||
| TIMEOUT.REFRESH(Trg) |tx_TRIGGER; |ESTABLISHED | | | | | |||
| |Start.REFRESH_TIMER(Trg);| | (rx_NOTIFY) &&(CHECK_AA)|Process Event(); |SESSION | | |||
| | | | | |ESTABLISHED| | |||
| rx_QUERY && CHECK_AA |Process Query(); |ESTABLISHED | | | | | |||
| |tx_RESP(,Query); | | (rx_QDRQ) && (CHECK_AA) |Process QDRQ(); |SESSION | | |||
| | | | |tx_RESPONSE |ESTABLISHED| | |||
| rx_CREATE && |if (CREATE(SOURCE?)!=NF){|ESTABLISHED | | (SUCCESS,Query);| | | |||
| CREATE(LIFETIME?)>0 && |Stop.REFRESH_TIMER(Trg);}| | | | | | |||
| CHECK_AA |tx_RESP(SUCCESS,Create); | | (rx_RESPONSE |Start.REFRESH_TIMER |SESSION | | |||
| |Start.STATE_TIMER(Cre); | | (SUCCESS,UCreate))| (Create);|ESTABLISHED| | |||
| | | | |Stop.STATE_TIMER | | | |||
| rx_CREATE && !(CHECK_AA)|tx_RESP(ERROR,Create); |ESTABLISHED | | (Response);| | | |||
| | | | |retry_counter(UCreate)=0;| | | |||
| rx_NOTIFY && CHECK_AA |Process Event(); |ESTABLISHED | | | | | |||
| | | | (TIMEOUT.REFRESH |Start.STATE_TIMER |SESSION | | |||
| tg_NOTIFY |tx_NOTIFY; |ESTABLISHED | (UCreate))| (Response);|ESTABLISHED| | |||
| ------------------------+-------------------------+------------ | |tx_UCREATE; | | | |||
| | | | | ||||
| | | | | ||||
| (rx_CREATE) && |tx_RESPONSE(SUCCESS, |SESSION | | ||||
| (CREATE(LIFETIME)>0)| Create);|ESTABLISHED| | ||||
| && (CHECK_AA) |Start.STATE_TIMER | | | ||||
| | (Create);| | | ||||
| | | | | ||||
| TIMEOUT.STATE(Response) |Stop.STATE_TIMER |SESSION | | ||||
| || rx_RESPONSE(ERROR, | (Response);|ESTABLISHED| | ||||
| UCreate))|retry_counter(UCreate)++;| | | ||||
| |If(retry_counter(UCreate)| | | ||||
| | <=Max_Retries(UCreate))| | | ||||
| |{Start.STATE_TIMER | | | ||||
| | (Response);| | | ||||
| |tx_UCREATE;} | | | ||||
| | | | | ||||
| (rx_CREATE)&&!(CHECK_AA)|tx_RESPONSE(ERROR, |SESSION | | ||||
| | Create);|ESTABLISHED| | ||||
| | | | | ||||
| (rx_CREATE) && |Session.clear(); | IDLE | | ||||
| (CREATE(LIFETIME)==0)|PckFilter.clear(); | | | ||||
| && (CHECK_AA)) || |Send Info to Appl.; | | | ||||
| (TIMEOUT.STATE(Create)) | | | | ||||
| ||(tg_TEARDOWN) || | | | | ||||
| (retry_counter(UCreate)>| | | | ||||
| Max_Retries(UCreate) | | | | ||||
| ------------------------+-------------------------+-----------+ | ||||
| ----------- | ||||
| State: WAITPKRESP-SESSION/ USESSION PENDING | ||||
| ----------- | ||||
| Condition Action State Note | ||||
| ------------------------+-------------------------+-----------+--- | ||||
| (rx_CREATE) &&(CHECK_AA)|tx_RESPONSE(SUCCESS, |SESSION | | ||||
| | Create);|ESTABLISHED| | ||||
| |Start.STATE_TIMER | | | ||||
| | (Create);| | | ||||
| |Session.create(); | | | ||||
| |PckFilter.create(); | | | ||||
| |Send Info to Appl. | | | ||||
| | | | | ||||
| (TIMEOUT.STATE(Response)|Session.remove() |WAITRESP1- | | ||||
| && (scheme ==1)| | SESSION/| | ||||
| | |USESSION | | ||||
| | |PENDING | | ||||
| | | | | ||||
| (TIMEOUT.STATE(Response)|Session.remove() | IDLE | | ||||
| && (scheme ==2)| | | | ||||
| ------------------------+-------------------------+-----------+ | ||||
| ----------- | ||||
| State: WAITRESP1-SESSION/ USESSION PENDING | ||||
| ----------- | ||||
| Condition Action State Note | ||||
| ------------------------+-------------------------+-----------+--- | ||||
| ((rx_RESPONSE(success)) |Session.create(); |WAITPKRESP-| | ||||
| && (CHECK_AA)|Start.STATE_TIMER | SESSION/| | ||||
| | (Response);|USESSION | | ||||
| |tx_RESPONSE; Scheme = 1;|PENDING | | ||||
| | | | | ||||
| (TIMEOUT.STATE(Response)| | IDLE | | ||||
| ------------------------+-------------------------+-----------+ | ||||
| 9. Security Considerations | 9. Security Considerations | |||
| This document does not raise new security considerations. Any | This document does not raise new security considerations. Any | |||
| security concerns with the NAT/FW NSLP are likely reflected in | security concerns with the NAT/FW NSLP are likely reflected in | |||
| security related NSIS work already (such as [1] or [6]). | security 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 machines described in this document do | |||
| not consider the security aspect of NAT/FW NSLP protocol itself. A | not consider the security aspect of NAT/FW NSLP protocol itself. A | |||
| future version of this document will add security relevant states and | future version of this document will add security relevant states and | |||
| state transitions. | state transitions. | |||
| 10. Open Issues | 10. Open Issues | |||
| CREATE[NoNR] and CREATE[Scope] message triggers are currently not | Since 00 version, we added session ownership and UCREATE and some | |||
| implemented in the state machines and all other open issues in [1] | clarifications according to the specification evolution. Route | |||
| change handling and Nonce object, as well as the open issues in [1] | ||||
| will be added in future versions of this document. | will be added in future versions of this document. | |||
| 11. Acknowledgments | 11. Acknowledgments | |||
| The authors would like to thank Tseno Tsenov for his valuable | The authors would like to thank Martin Stiemerling for his valuable | |||
| comments and discussions. | comments and discussions. | |||
| 12. References | 12. References | |||
| 12.1 Normative References | 12.1 Normative References | |||
| [1] Stiemerling, M., "A NAT/Firewall NSIS Signaling Layer Protocol | [1] Stiemerling, M., "NAT/Firewall NSIS Signaling Layer Protocol | |||
| (NSLP)", draft-ietf-nsis-nslp-natfw-04 (work in progress), | (NSLP)", draft-ietf-nsis-nslp-natfw-07 (work in progress), | |||
| October 2004. | July 2005. | |||
| [2] Bradner, S., "Key words for use in RFCs to Indicate Requirement | [2] Bradner, S., "Key words for use in RFCs to Indicate Requirement | |||
| Levels", March 1997. | Levels", RFC 2119, March 1997. | |||
| 12.2 Informative References | 12.2 Informative References | |||
| [3] Ohba, Y., "State Machines for Protocol for Carrying | [3] Fajardo, V., "State Machines for Protocol for Carrying | |||
| Authentication for Network Access (PANA)", | Authentication for Network Access (PANA)", | |||
| draft-ohba-pana-statemachine-00 (work in progress), July 2004. | draft-ietf-pana-statemachine-01 (work in progress), July 2005. | |||
| [4] Vollbrecht, J., Eronen, P., Petroni, N. and Y. Ohba, "State | [4] Vollbrecht, J., Eronen, P., Petroni, N., and Y. Ohba, "State | |||
| Machines for Extensible Authentication Protocol (EAP) Peer and | Machines for Extensible Authentication Protocol (EAP) Peer and | |||
| Authenticator", draft-ietf-eap-statemachine-05 (work in | Authenticator", draft-ietf-eap-statemachine-06 (work in | |||
| progress), September 2004. | progress), December 2004. | |||
| [5] Institute of Electrical and Electronics Engineers, "DRAFT | [5] Institute of Electrical and Electronics Engineers, "DRAFT | |||
| Standard for Local and Metropolitan Area Networks: Port-Based | Standard for Local and Metropolitan Area Networks: Port-Based | |||
| Network Access Control (Revision)", IEEE 802-1X-REV/D9, January | Network Access Control (Revision)", IEEE 802-1X-REV/D9, | |||
| 2004. | January 2004. | |||
| [6] Tschofenig, H. and D. Kroeselberg, "Security Threats for NSIS", | [6] Tschofenig, H. and D. Kroeselberg, "Security Threats for NSIS", | |||
| draft-ietf-nsis-threats-06 (work in progress), October 2004. | RFC 4081, June 2005. | |||
| Authors' Addresses | Authors' Addresses | |||
| Constantin Werner | Constantin Werner | |||
| University of Goettingen | University of Goettingen | |||
| Telematics Group | Telematics Group | |||
| Lotzestr. 16-18 | Lotzestr. 16-18 | |||
| Goettingen 37083 | Goettingen 37083 | |||
| Germany | Germany | |||
| EMail: werner@cs.uni-goettingen.de | Email: werner@cs.uni-goettingen.de | |||
| Xiaoming Fu | Xiaoming Fu | |||
| University of Goettingen | University of Goettingen | |||
| Telematics Group | Telematics Group | |||
| Lotzestr. 16-18 | Lotzestr. 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 | |||
| EMail: Hannes.Tschofenig@siemens.com | Email: Hannes.Tschofenig@siemens.com | |||
| T. Tsenov | ||||
| Siemens | ||||
| Otto-Hahn-Ring 6 | ||||
| Munich, Bayern 81739 | ||||
| Germany | ||||
| Email: tseno.tsenov@mytum.de | ||||
| Cedric Aoun | Cedric Aoun | |||
| Nortel Networks/ENST Paris | Nortel Networks/ENST Paris | |||
| EMail: cedric.aoun@nortelnetworks.com | Email: cedric.aoun@nortelnetworks.com | |||
| Niklas Steinleitner | ||||
| University of Goettingen | ||||
| Telematics Group | ||||
| Lotzestr. 16-18 | ||||
| Goettingen 37083 | ||||
| Germany | ||||
| Email: nsteinleitner@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 | |||
| skipping to change at page 32, line 41 ¶ | skipping to change at page 37, line 41 ¶ | |||
| 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 (2004). This document is subject | Copyright (C) The Internet Society (2005). 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. | |||
| Acknowledgment | Acknowledgment | |||
| 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. 62 change blocks. | ||||
| 443 lines changed or deleted | 867 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/ | ||||