Dynamics
Mobile Node Signaling State Machine $Revision: 1.3 $ State approved
Date 08-Dec-1998 Author Jari Hautio
Review date 10-Dec-1998 Reviewed by Jouni Malinen
Approval date 10-Dec-1998 Approved by Jouni Malinen
$Id: mn_machine.html,v 1.3 1998/12/09 23:46:03 jkmaline Exp $

Mobile Node Signaling State Machine

Signaling State machine has following states: Transitions are presented state by state. For all transitions are stated input conditions for the transition, output when the transition occurs and changes to variables. Changes to variables must be done before any output is processed. All states have transition to Error state, which is taken when an error occurs. If no transition is available for a message or input, nothing is done, and current state is kept.

Objects and variables used in state machine:

FA - Address of closest foreign agent
Sequence Number - Storage for last heard Mobility Agent Advertisement message
Timer - Timer, which generates a timer expiration event to machine input, when in times out.
Lifetime_left - Variable indicating lifetime left for the tunnel
Adv_timer - Timer, which indicates advertisement lifetime left for a heard advertisement
Reply_timer - Timer to measure time needed for registration.

State Machine

State: Startup

Transition: Initialize

Input: -
Output: Log agent startup message
Variables: Read configuration information from ini-file and initialize variables
Next State: Disconnected
State: Disconnected

Transition: Create_Tunnel

Input: API Call "Create Tunnel"
Output: Broadcast Mobile Agent Solicitation Message
Variables: Set Timer to X
Next State: Find_agent
State: Find_agent

Transition: Timer

Input: Timer expires
Output: Broadcast Mobile Agent Solicitation message
Variables: Set Timer to X
Next State: Find_agent
Transition: Foreign_Advertisement
Input: Mobile Agent Advertisement message from foreign agent
Output: Send Registration Request to FA
Variables: Set Timer to X, set FA to advertised agent, Store Sequence Number, start Reply_timer, set Adv_timer
Next State: Request_Tunnel
Transition: Home_Advertisement
Input: Mobile Agent Advertisement message from home agent
Output: -
Variables:
Next State: At_Home
Transition: Disconnect
Input:  API Call "Disconnect"
Output:
Variables: -
Next State: Disconnected
Transition: Location_Update
Input: API Call "Location Update"
Output: Mobile Agent Solicitation message
Variables: Set Timer to X
Next State: Find_agent
Transition: Too_Many_Retries
Input Retry counter expires
Output: -
Variables: -
Next State: Passive_Find
Transition: Home_Update
Input: Api Call "Home Update"
Output: -
Variables:
Next State: At_Home
State: Request_Tunnel

Transition: Timer

Input: Timer expires
Output: Send Registration Request to FA
Variables: Set Timer to X
Next State: Request_Tunnel
Transition: Adv_Lifetime Ends
Input: Adv_timer for MA Advertisement expires
Output: Broadcast Mobile Agent Solicitation message
Variables: Set Timer to X
Next State: Find_Agent
Transition: Disconnect
Input:  API Call "Disconnect"
Output:
Variables: -
Next State: Disconnected
Transition: Location_Update
Input: API Call "Location Update"
Output: Mobile Agent Solicitation message
Variables: Set Timer to X
Next State: Find_agent
Transition: Reply_Accept
Input: Registration Reply, accepting the tunnel
Output: -
Variables: Set Lifetime_left to replied lifetime - Reply_timer,
    Set Timer to Lifetime / 2,
    Start tunneling
Next State: Connected
Transition: Reply_Deny
Input: Registration Reply, tunnel rejected
Output: Log error
Variables: Stop tunneling
Next State: Depends on error Disconnected, if unrecovarable error, else Find Agent or Reques Tunnel
Transition: Home_Update
Input: Api Call "Home Update"
Output: Send Registration Request with zero lifetime to HA
Variables: Set Timer to X
Next State: Close_for_Home
State: Connected

Transition: Timer

Input: Timer expires
Output: Registration Request
Variables:  Set Timer to Max(Lifetime_left / 2,Min_Timeout),
    Set Lifetime_left toLifetime_left /2
Next State: Connected
Transition: Location_Update
Input: API Call "Location Update"
Output: Mobile Agent Solicitation message
Variables: Set Timer to X, stop tunneling
Next State: Find_Agent
Transition: Home_Update
Input: Api Call "Home Update"
Output: Send Registration Request with zero lifetime to HA
Variables: Set Timer to X
Next State: Close_for_Home
Transition: Agent_Reboot
Input: Mobility Agent Advertisement with lower Sequence Number than last time (stored seq.n.)
Output: Send Registration Request to FA
Variables: Set Timer to X, Store Sequence Number, start Reply_timer, set Adv_timer
Next State: Request_Tunnel
Transition: Forced_Request
Input: API call "Confirm"
Output: Send Registration Request with force bit on
Variables: Set call variables, Set Timer to Retry interval
Next State: Forced_Request
State: Forced_Request

Transition: Timer

Input: Timer expires
Output: Registration Request, force bit on
Variables:  Set Timer to retry interval
Next State: Forced_Request
Transition: Location_Update
Input: API Call "Location Update"
Output: Mobile Agent Solicitation message
Variables: Set Timer to X, stop tunneling
Next State: Find_Agent
Transition: Agent_Reboot
Input: Mobility Agent Advertisement with lower Sequence Number than last time (stored seq.n.)
Output: Send Registration Request to FA, force bit on
Variables: Set Timer to X, Store Sequence Number, start Reply_timer, set Adv_timer
Next State: Forced_Request
Transition: Reply_Home
Input: Accepting Registration Reply from Home Agent
Output: Return Api Call with success
Variables:  Set lifetime_left and Set Timer to Lifetime / 2
Next State: Connected
Transition: Home_Update
Input: Api Call "Home Update"
Output: Send Registration Request with zero lifetime to HA
Variables: Set Timer to X
Next State: Close_for_Home
State: Error

Transition: Reset

Input: -
Output: Log error
Variables: Stop tunneling
Next State:  Startup
State: Close_for_Home

Transition:  Timer

Input:  Timer expires
Output: Registration Request, lifetime = 0
Variables: Set Timer to X
Next State: Close_for_Home
Transition: Location_Update
Input: API Call "Location Update"
Output: Mobile Agent Solicitation message
Variables: Set Timer to X
Next State: Find_Agent
Transition: Home_Reply
Input: Registration Reply from HA
Output: -
Variables: -
Next State: At_Home
State:At_Home

Transition: Location_Update

Input: API Call "Location Update"
Output: Broadcast Mobile Agent Solicitation message
Variables: Set Timer to X
Next State: Find_Agent
Transition: Disconnect
Input:  API Call "Disconnect"
Output: -
Variables: -
Next State: Disconnected
State: Passive_Find

Transition: Foreign_Advertisement

Input: Mobility Agent Advertisement from FA (different than HA)
Output: Send Registration Request to FA
Variables: Set Timer to X, Set FA to advertised agent, Store Sequence Number, start Reply_timer, set Adv_timer
Next State: Request_Tunnel
Transition: Location_Update
Input: API Call "Location Update"
Output: Broadcast Mobile Agent Solicitation message
Variables: Set Timer to X
Next State: Find_Agent
Transition: Disconnect
Input:  API Call "Disconnect"
Output:
Variables: -
Next State: Disconnected
Transition: Home_Advertisement
Input: Mobile Agent Advertisement message from HA
Output: Send Registration Request with zero lifetime to HA
Variables: Set Timer to X
Next State: Close_for_Home
Transition: Home_Update
Input: Api Call "Home Update"
Output: Send Registration Request with zero lifetime to HA
Variables: Set Timer to X
Next State: Close_for_Home