comparing the endpoind discriminator in the version exchange
request with the local endpoint discriminator. The unit with
the smaller endpoint is arbitrarily called the originator. The
actions are:
Compare local endpoint discriminator with endpoint discrimator
in message.
If local endpoint discriminator is less than the remote value
we are the caller, ignore the incoming message.
Otherwise, if local endpoint discriminator is greater than the
remote value we are the answerer:
Compare protocol versions, if they do not match
Do Error Close Action, go to INITIAL, sub-state A.
Store off info received from remote.
Build a version exchange response and send to remote end.
Do Enter Idle Action which causes a state change.
If the two values match, there is a problem, Do Error Close
Action,go to INITIAL, sub-state A.
9 Log an error message.
Notify the user interface of remote management failure.
3.5.4. MP+STATE_IDLE state machine
The Idle state is the state of an active session with no call
management activity in progress.
There are no sub-states.
Event State
_____________________________________________
A
=============================================
MP+SESSION_DOWN 1,Initial:A
_____________________________________________
MP+SESSION_TERM 2,Initial:A
_____________________________________________
MP+TIMER_EXPIRED 3,*
_____________________________________________
MP+UTILIZATION 4,+
_____________________________________________
MP+RX_ADD_REQ 5,+
_____________________________________________
MP+RX_REMOVE_REQ 6,Remove:B
_____________________________________________
MP+RX_RM_REQ 7,+
_____________________________________________
MP+RX_RM_RSP 8,+
_____________________________________________
MP+RX_RM_RX_REQ 9,+
_____________________________________________
MP+RX_RM_TX_REQ 10,+
_____________________________________________
MP+RX_RM_TX_RSP 11,+
_____________________________________________
MP+RX_CLOSE_REQ 12,+
_____________________________________________
MP+START_RM 13,*
_____________________________________________
MP+SEND_RMS 14,*
_____________________________________________
MP+SEND_RMM 15,*
_____________________________________________
MP+RECV_RMM 16,*
_____________________________________________
MP+STOP_RM 17,*
_____________________________________________
All other events **
_____________________________________________
Table 3: Idle State Machine
Actions:
1 Do Error Close Action, go to INITIAL, sub-state A.
2 Do Term Action, go to INITIAL, sub-state A.
3 Do Timer Action.
4 Note that a bandwidth change has been reqested.
Do Enter Idle Action which may cause a state change.
5 If we are the caller:
Do Enter Add [remote answerer] Action.
Else
Do Enter Add [remote caller] Action.
6 Do Enter Remove [remote] Action
7 Do Remote Management Request Action
8 Do Remote Management Response Action
9 Do Remote Management Receive Data Action
10 Do Remote Management Transmit Data Action
11 Do Remote Management Transmit Data Response Action
12 Clear remove lock.
If local recommended channels == 0, then:
send a Close Response message with OK To Close
set to TRUE.
Else
send a Close Response message with OK To Close
set to FALSE.
Do Enter Idle Action.
13 Do Remote management (Master) start Action
14 Do Remote management (Slave) data Action
15 Do Remote management (Master) data Action
16 Do Remote management data acknowledgement Action
17 Do Remote management (Master) stop Action
3.5.5. MP+STATE_ADD state machine
The add state is used by both caller and answerer when an add
transaction is in progress.
The sub-states are:
A Add request sent to answerer, waiting for add response
from the answerer.
B Caller waiting for call complete notification for calls
placed.
C Answerer waiting for add complete message from caller.
Event Sub-state
______________________________________________________________________
A B C
======================================================================
MP+SESSION_DOWN 1,Initial:A 7,Closing:A 1,Initial:A
______________________________________________________________________
MP+SESSION_TERM 2,Initial:A 7,Closing:B 2,Initial:A
______________________________________________________________________
MP+TIMER_EXPIRED 3,+ 3,+ 3,+
______________________________________________________________________
MP+UTILIZATION 4,* 4,* 4,*
______________________________________________________________________
MP+CALL_COMPLETE ** 8,Idle:A **
______________________________________________________________________
MP+RX_VERSION_REQ -,* ** **
______________________________________________________________________
MP+ADD_REQ 5,Add:B ** **
______________________________________________________________________
MP+ADD_RSP 6,+ ** **
______________________________________________________________________
MP+ADD_COMP ** ** 9,Idle:A
______________________________________________________________________
MP+RX_RM_REQ 10,+ 10,+ 10,+
______________________________________________________________________
MP+RX_RM_RSP 11,+ 11,+ 11,+
______________________________________________________________________
MP+RX_RM_RX_REQ 12,+ 12,+ 12,+
______________________________________________________________________
MP+RX_RM_TX_REQ 13,+ 13,+ 13,+
______________________________________________________________________
MP+RX_RM_TX_RSP 14,+ 14,+ 14,+
______________________________________________________________________
MP+RX_REMOVE_REQ -,* ** **
______________________________________________________________________
MP+START_RM 15,* 15,* 15,*
______________________________________________________________________
MP+SEND_RMS 16,* 16,* 16,*
______________________________________________________________________
MP+SEND_RMM 17,* 17,* 17,*
______________________________________________________________________
MP+RECV_RMM 18,* 18,* 18,*
______________________________________________________________________
MP+STOP_RM 19,* 19,* 19,*
______________________________________________________________________
All other events ** ** **
______________________________________________________________________
Table 4: Add State Machine
Actions:
1 Phone numbers (may) have been reserved, they must be released
before the normal error processing occurs.
Release all reserved phone numbers
Do Error Close Action.
2 Phone nubmers (may) have been reserved, they must be released
before the normal close processing occurs.
Release all reserved phone numbers
Do Term Action.
3 Do Timer Action
4 Note that a bandwidth change has been reqested. This will be
processed the next time IDLE state is entered.
5 An add collision has occured. Since the answerer has sent phone
numbers we will try to use what he as sent, within the limits of
the local system.
Compare local channels to add with current channels to
add.
If the local channels to add is less than the remote
channels to add
If the remote number of channels requested will
put us over the maximum number of channels
allowed for the session reduce the channel count
and set an add lock.
Re-reserve the channels. If the number reserved
are less than the number of phone numbers
provided by the far end, set an add lock and
reduce the number of channels to add to what we
could reserve.
Now treat the remote add request as if it were an add
response and process by:
Integrate the phone number returned from the
answerer with the original phone number dialed.
Request that a session be extended by dialing
the integrated phone number. A callback is
passed with the request so call success or
failure can be reported back to MP+.
Go to ADD:B. Note: This change must actually
occur before requesting the first outgoing call.
If not, the callback could be called (and
ignored) because the session is not in the
correct state.
6 If the answerer provided fewer phone numbers than requested set
an add lock.
If the number of channels is zero send an add complete message
(there's nothing to do) and go to the IDLE state.
For each phone number returned
Integrate the phone number returned from the answerer
with the original phone number dialed.
Request that a session be extended by dialing the
integrated phone number. A callback is passed with the
request so call success or failure can be reported back
to MP+.
Go to ADD:B. Note: This change must actually occur before
requesting the first outgoing call. If not, the callback could
be called (and ignored) because the session is not in the correct
state.
7 Restart idle timer for abort.
8 Increment the count of calls completed.
If the call succeeded, increment the count of calls that
succeeded.
If the count of calls completed equals the number of calls placed
If number of calls completed is not the same as the
nubmer that succeeded set an add lock.
Build an add complete message and send it to the far end.
If at least one channel was added clear any remove lock.
Go to the IDLE state.
9 If number of channels requested not equal to number connected
set add lock.
If at least one channel was added clear any remove lock.
Go to the IDLE state.
10 Do Remote Management Request Action
11 Do Remote Management Response Action
12 Do Remote Management Receive Data Action
13 Do Remote Management Transmit Data Action
14 Do Remote Management Transmit Data Response Action
15 Do Remote management (Master) start Action
16 Do Remote management (Slave) data Action
17 Do Remote management (Master) data Action
18 Do Remote management data acknowledgement Action
19 Do Remote management (Master) stop Action
3.5.6. MP+STATE_REMOVE state machine
The state of a session while processing a remove transaction.
The sub-states are:
A Remove request sent, waiting for remove response
B Remove response sent, waiting for remove complete
Event Sub-state
_________________________________________________________
A B
=========================================================
MP+SESSION_DOWN 1,Initial:A 1,Initial:A
_________________________________________________________
MP+SESSION_TERM 2,Initial:A 2,Initial:A
_________________________________________________________
MP+TIMER_EXPIRED 3,+ 3,+
_________________________________________________________
MP+UTILIZATION 4,* 4,*
_________________________________________________________
MP+RX_ADD_REQ 5,+ **
_________________________________________________________
MP+RX_REMOVE_REQ 6,+ **
_________________________________________________________
MP+RX_REMOVE_RSP 7,Idle:A **
_________________________________________________________
MP+RX_REMOVE_COMP ** 8,Idle:A
_________________________________________________________
MP+RX_CLOSE_REQ -,* **
_________________________________________________________
MP+RX_RM_REQ 9,* 9,*
_________________________________________________________
MP+RX_RM_RSP 10,* 10,*
_________________________________________________________
MP+RX_RM_RX_REQ 11,* 11,*
_________________________________________________________
MP+RX_RM_TX_REQ 12,* 12,*
_________________________________________________________
MP+RX_RM_TX_RSP 13,* 13,*
_________________________________________________________
MP+START_RM 14,* 14,*
_________________________________________________________
MP+SEND_RMS 15,* 15,*
_________________________________________________________
MP+SEND_RMM 16,* 16,*
_________________________________________________________
MP+RECV_RMM 17,* 17,*
_________________________________________________________
MP+STOP_RM 18,* 18,*
_________________________________________________________
All other events ** **
_________________________________________________________
Table 5: Remove State Machine
Actions:
1 Do Error Close Action
2 Do Term Action
3 Do Timer Action
4 Note that a bandwidth change has been reqested. This will be
processed the next time IDLE state is entered.
5 Our remove conflicted with the remote end Add. The add takes
preference.
Set a remove lock.
If we are the caller Do Enter Add [remote answerer] Action .
Otherwise Do Enter Add [remote caller] Action .
6 Two remove requests collided. We give preference to the caller
(an arbitrary decision).
If caller, ignore message.
Else
Check maximum number of channels needed by the local end.
Reduce the requested remove count and set a remove lock if
necessary.
Build and send a remove response to the remote.
Go to Remove:B.
7 Compare the number of channels requested with the number allowed
in the response. If fewer allowed set a remove lock.
Look at the current bandwidth. If the number to remove would
bring the current bendwidth below requirements reduce the number
of channels to remove.
If still channels to remove:
Remove the channels.
Clear any add lock.
Send a remove complete indicating the number of channels removed.
8 If at least one channel was removed clear any add lock.
9 Do Remote Management Request Action
10 Do Remote Management Response Action
11 Do Remote Management Receive Data Action
12 Do Remote Management Transmit Data Action
13 Do Remote Management Transmit Data Response Action
14 Do Remote management (Master) start Action
15 Do Remote management (Slave) data Action
16 Do Remote management (Master) data Action
17 Do Remote management data acknowledgement Action
18 Do Remote management (Master) stop Action
3.5.7. MP+STATE_CLOSE state machine
The close state is used when we are gracefully closing a session or
when we were notified that a session terminated mid-transaction.
The sub-states are:
A Waiting for call complete after session down notification
B Waiting for call complete after session terminate
notification.
C Waiting for close response after session close request
sent.
Event Sub-state
______________________________________________________________________
A B C
======================================================================
MP+SESSION_DOWN ** -,* 7,Initial:A
______________________________________________________________________
MP+SESSION_TERM 1,Close:B ** 8,Initial:A
______________________________________________________________________
MP+TIMER_EXPIRED 2,Initial:A 5,Initial:A 6,*
______________________________________________________________________
MP+UTILIZATION -,* -,* 9,*
______________________________________________________________________
MP+CALL_COMPLETE 3,+ 6,Initial:A **
______________________________________________________________________
MP+ADD_REQ ** -,* 10,+
______________________________________________________________________
MP+REMOVE_REQ ** ** 11,Remove:B
______________________________________________________________________
MP+CLOSE_REQ -,* -,* 12,*
______________________________________________________________________
MP+CLOSE_RSP -,* -,* 13,+
______________________________________________________________________
MP+START_RM 4,* 4,* 4,*
______________________________________________________________________
All other events ** ** **
______________________________________________________________________
Table 6: Close State Machine
Actions:
1 The session was closed while waiting for call completes.
Just go to Close:B.
2 We timed out waiting for completes. Just process the link down,
now.
Do Error Close Action.
3 Increment the number of calls complete.
If equal to the number of calls placed then:
Do Error Close Action, go to Initial:A.
Else
No state change.
4 Log an error message.
Notify the user interface of remote management failure.
5 We didn't get all the notifications that we expect. Give up and
close the session anyway. Do Term Action .
6 Increment the number of calls complete.
If equal to the number of calls placed then:
Do Term Action, go to Initial:A.
Else
No state change
7 Do Error Close Action
8 Do Term Action
9 Note that a bandwidth change has been reqested. This will be
processed the next time IDLE state is entered.
10 This is an Add & Close collision. Add wins. Perform current
remote add action.
If we are originator
Do Add [Remote Answerer] Action
else
Do Add [Remote Caller] Action
11 This is a Remove & Close collision, the Remove will win:
Set remove lock to FALSE
Do Remove [Remote] Action.
12 This is a Close collision. But since we both agree:
If we are originator
Send a Close Response with okToClose set to TRUE.
Else
Send a Close Response with okToClose set to FALSE.
13 If Close Response is received with okToClear is TRUE then:
Do Term Action
Else
set remove lock to TRUE and do Enter Idle Action.
4. PPP LCP Extensions
MP+ Configuration Option
The Multilink Protocol Plus introduces the use of an additional LCP
Configuration Option:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| type = 22 | length = 4 | Currently unused |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 21: MP+ Option
Type - 22.
NOTE: The current implementation uses option 0. This is not an
assigned number, so an IANA assigned official identifier has been
obtained (22).
The option, when sent to a peer, advises the peer that:
the unit is capable of running the MP+ protocol;
The peer can accept or reject the option.
NOTE: The MP+ option MUST NOT be included unless MP is also
negotiated.
5. Security Considerations
Security issues are not discussed in this memo.
6. References
[1] K. Sklower, B. Lloyd, G. McGregor, D. Carr, "The PPP Multilink
Protocol (MP)".
[2] Simpson, W., Editor, "The Point-to-Point Protocol (PPP)", STD
51, RFC1661, Daydreamer, July 1994.
7. Author's Address
Kevin Smith
Ascend Communications
1275 Harbor Bay Parkway
Alameda, CA 94502
Phone: (510) 769-6001
FAX: (510) 814-2300
EMail: ksmith@ascend.com