[Pana] AD review of draft-ietf-pana-statemachine
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Pana] AD review of draft-ietf-pana-statemachine
Apologies for taking some time to do this. I have reviewed the draft and
I think it is in very good shape. There are one or two technical
problems that require the draft to be revised, unless I missed
something. Please discuss this with me and, if needed, revise the draft
accordingly.
Here are my comments:
7.2. Constants
FAILED_SESS_TIMEOUT
Configurable value ...
Small editorial problem: Something is inconsistent here.... maybe call
the section "7.2. Configurable Values"?
State: WAIT_PNA
Three technical problems:
1. You enter this state in two ways, either because you sent a PING, or
because you wanted to re-authenticate. However, coming back from the
state you go to re-authentication or ping processing depending on the
flag in the answer message. So, if the peer responds with the wrong flag
value, you might accidentally go into, say, OPEN state even if you
really were going to do re-authentication...
The fix is is to either note the limitation or split WAIT_PNA into two
different states.
2. What happens if you want to initiate re-auth while waiting for ping
response? Perhaps you could state that the relevant variables are not
supposed to be set until you are in OPEN... or you could do some more
radical change.
3. More seriously, I think you need to support the case that you are
doing ping on one side while the other guy initiates re-authentication.
WAIT_PNA does not support reception of the relevant messages. This needs
to be fixed somehow.
Generalizing the last point a little bit, what do you do when there's
termination / ping / re-authentication / initialization in parallel with
something else that the other peer is doing? At the very least, you need
to explicitly decide to discard undesired events in states (and show
that its still according to the RFC). Or, some other type of a change is
needed in the draft.
------------------------------
State: INITIAL (Initial State)
------------------------------
Initialization Action:
OPTIMIZED_INIT=Set|Unset;
NONCE_SENT=Unset;
RTX_COUNTER=0;
RtxTimerStop();
...
- - - - - - - - - - - - - - (PAN Handling) - - - - - - - - - -
Rx:PAN[S] && if (PAN.exist_avp WAIT_EAP_MSG
((OPTIMIZED_INIT == ("EAP-Payload"))
Unset) || TxEAP();
PAN.exist_avp else {
("EAP-Payload")) EAP_Restart();
SessionTimerReStart
(FAILED_SESS_TIMEOUT);
}
Rx:PAN[S] && None(); WAIT_PAN_OR_PAR
(OPTIMIZED_INIT ==
Set) &&
! PAN.exist_avp
("EAP-Payload")
Observation: the two actions do not cover all possible combinations,
e.g., not Rx:PAN[S] && OPTIMIZED_INIT == Unset &&
!PAN.exist_avp("EAP-Payload").
You are setting OPTIMIZED_INIT to a value at the time that the state
machine is created. What if it disagrees with the contents of the PAN
that you receive from the network?
Jari
Note: Messages sent to this list are the opinions of the senders and do not imply endorsement by the IETF.