< 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/