</
 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.
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
-----------
Condition Action State Note
------------------------+-------------------------+-----------+---
(rx_RESPONSE |Stop.STATE_TIMER(QDRQ); |SESSION |
(SUCCESS, QDRQ))|Send info to appl.; |ESTABLISHED|
&& (CHECK_AA) | | |
| | |
| | | |
tg_TEARDOWN |tx_CREATE(LIFETIME=0); |IDLE (rx_RESPONSE |Stop.STATE_TIMER(QDRQ); |SESSION |
|Session.clear(); | (ERROR, QDRQ)|retry_counter(QDRQ)++; |ESTABLISHED|
|Stop.REFRESH_TIMER(Cre); | || TIMEOUT_STATE(QDRQ)) |If (retry_counter(QDRQ)< | |
|Stop.STATE_TIMER(Resp); | | 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 24 skipping to change at page 16, line 4
7.1 State machine for NAT/FW Firewall NF 7.1 State machine for NAT/FW Firewall NF
------------------- -------------------
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
| "No NAT here" |
| | | |
rx_CREATE && CHECK_AA |Start.STATE_TIMER(Resp); |PENDING (rx_UCREATE) && |tx_RESPONSE(ERROR, |IDLE
|tx_CREATE; | !(CHECK_AA) |UCREATE); |
| | | |
rx_CREATE && !(CHECK_AA)|tx_RESP(ERROR,Create); |IDLE ((rx_CREATE(sid)) && |Start.STATE_TIMER |WAITRESP1-
(CHECK_AA) && |(Response); |SESSION/
(!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)) | |
------------------------+-------------------------+------------ ------------------------+-------------------------+------------
* REA Error message "No NAT here"
------------------- -------------------
State: PENDING 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_RESP(ERROR,Create) |Stop.STATE_TIMER(Resp); |IDLE rx_RESPONSE(SUCCESS, |Stop.STATE_TIMER(Response|NoNR/Scope
|| TIMEOUT.STATE(Resp) | | Create) |); |Sessions
|Session.create(); |Established
|PckFilter.create(); |
|Start.STATE_TIMER(Create)|
|; |
|Start.REFRESH_TIMER(Creat|
|eB); |
|retry_counter(Create)=0; |
|Retry_counter(CreateB)=0;|
------------------------+-------------------------+------------ ------------------------+-------------------------+------------
-------------------
State: ESTABLISHED ------------------------------
------------------- 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
|tx_RESP(SUCCESS,Create); |
| |
rx_QUERY && CHECK_AA |Process Query(); |ESTABLISHED
|tx_QUERY; |
| | | |
rx_CREATE && CHECK_AA |tx_CREATE; |ESTABLISHED (tg_NOTIFY) |tx_NOTIFY |NoNR/Scope
&& CREATE(LIFETIME?)>0 | | | |Sessions
| |Established
| | | |
rx_RESP(,Query) && |tx_RESP(,Query); |ESTABLISHED (rx_CREATE) && |tx_RESPONSE(ERROR, |NoNR/Scope
CHECK_AA | | !(CHECK_AA)) |Create); |Sessions
| |Established
| | | |
tg_NOTIFY |tx_NOTIFY; |ESTABLISHED (rx_RESPONSE(ERROR, |Stop.STATE_TIMER(Response|NoNR/Scope
Create) || |); |Sessions
TIMOUT.STATE(Response))|retry_counter(Create)++; |Established
| if |
|(retry_counter(Create)<=M|
|ax_Retry(Create)) |
|{Start.STATE_TIMER(Respon|
|se); |
|tx_CREATE;} |
| | | |
rx_NOTIFY && CHECK_AA |Process Event(); |ESTABLISHED (rx_QDRQ) && (CHECK_AA)|Process QDRQ(); |NoNR/Scope
|tx_NOTIFY; | | tx_RESPONSE (,QDRQ) |Sessions
| |Established
| | | |
TIMEOUT.STATE(Cre) || |Session.clear(); |IDLE (TIMEOUT.REFRESH(CreateB|retry_counter(CreateB)++;|NoNR/Scope
tg_TEARDOWN |PckFilter.clear(); | )) |If |Sessions
|(retry_counter(CreateB)<=|Established
|Max_retries) |
|{tx_CREATE; |
|Start.TIMER_STATE(Respons|
|eB);} |
| | | |
rx_CREATE && CHECK_AA |tx_CREATE(LIFETIME=0); |IDLE (tg_TEARDOWN) || |Session.clear(); |IDLE
&& CREATE(LIFETIME?)==0 |Session.clear(); | ((rx_CREATE) && |PckFilter.clear(); |
|PckFilter.clear(); | (CREATE(LIFETIME?)==0)) |Stop.STATE_TIMER(Create);|
|Stop.STATE_TIMER(Cre); | || | 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
------------------- ------------------------------
State: Initialize
-------------------
Condition Action State Condition Action State
------------------------+-------------------------+------------ ------------------------+-------------------------+------------
UCT |Retry_Counter(Create)=0; |IDLE ((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
State: IDLE -----------------------------------
-------------------
Condition Action State Condition Action State
------------------------+-------------------------+------------ ------------------------+-------------------------+------------
rx_CREATE && |tx_RESP(ERROR,Rea); (*1)|IDLE ((rx_RESPONSE(success)) |pubkey.create(); |WAITRESP-
IS_PUBLICSIDE | | && (CHECK_AA) |Start.STATE_TIMER |SESSION/
| | |(Response); |USESSION
rx_REA && CHECK_AA && |tx_RESP(ERROR,Rea); (*2)|IDLE |tx_RESPONSE; |PENDING
&& IS_PUBLICSIDE | |
| |
rx_REA && CHECK_AA && |Binding.create(); |NonEDGE REA
!IS_EDGE |tx_REA; |
|Start_STATE_TIMER(Rea); |
| |
rx_REA && CHECK_AA && |Binding.create(); |REA
IS_EDGE && |Start.STATE_TIMER(Rea); |
!IS_PUBLICSIDE |tx_RESP(SUCCESS,Rea); |
|retry_Counter(Create)=0; |
|Start.STATE_TIMER(Resp); |
|tx_CREATE; |
| | | |
rx_CREATE && CHECK_AA |Binding.create(); |PENDING (TIMEOUT.STATE(Response)|Session.remove() |IDLE
&& !IS_PUBLICSIDE |Start.STATE_TIMER(Resp); | && (scheme ==2) | |
|tx_CREATE; |
------------------------+-------------------------+------------ ------------------------+-------------------------+------------
*1 Error message is "No reservation made" ----------------------------------------
*2 Error message is "REA received on public side" State: WAITRESP-SESSION/USESSION PENDING
------------------- ----------------------------------------
State: NonEDGE REA
-------------------
Condition Action State Condition Action State
------------------------+-------------------------+------------ ------------------------+-------------------------+------------
rx_RESP(,Query) && |tx_RESP(,Query); |NonEDGE REA (TIMEOUT.STATE(Response)|Retry_counter(CREATE)++; |WAITRESP-
CHECK_AA | | |If |SESSION/
|(retry_counter(CREATE)<=M|USESSION
|ax_Retries(CREATE)) |PENDING
|{Start.STATE_TIMER(Respon|