draft-ietf-mpls-ldp-state-01.txt | draft-ietf-mpls-ldp-state-02.txt | |||
---|---|---|---|---|
MPLS Working Group Liwen Wu | ||||
MPLS Working Group Christophe Boscher | ||||
Internet Draft Pierrick Cheval | Internet Draft Pierrick Cheval | |||
Expiration Date: December 1999 Christophe Boscher | Expiration Date: April 2000 Alcatel France | |||
Alcatel USA | ||||
Liwen Wu | ||||
Cisco | ||||
Eric Gray | Eric Gray | |||
Lucent | Lucent | |||
June 1999 | October 1999 | |||
LDP State Machine | LDP State Machine | |||
draft-ietf-mpls-ldp-state-01.txt | draft-ietf-mpls-ldp-state-02.txt | |||
0. Status of this Memo | Status of this Memo | |||
This document is an Internet-Draft and is in full conformance with | This document is an Internet-Draft and is in full conformance with | |||
all provisions of Section 10 of RFC2026. | all provisions of Section 10 of RFC2026. | |||
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 | |||
other groups may also distribute working documents as Internet- | groups may also distribute working documents as 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. | |||
Distribution of this memo is unlimited. | Distribution of this memo is unlimited. | |||
Copyright Notice | Copyright Notice | |||
Copyright (C) The Internet Society (1998). All Rights Reserved. | Copyright (C) The Internet Society (1998). All Rights Reserved. | |||
1. Abstract | 1. Abstract | |||
In the current LDP draft [Ref5], there is no state machine specified | In the current LDP specification [4], there is no state machine | |||
for processing the LDP messages. We think that defining a common | specified for processing the LDP messages. We think that defining a | |||
state machine is very important for interoperability between | common state machine is very important for interoperability between | |||
different ldp implementations. | different ldp implementations. | |||
This draft provides state machine tables for ATM switch LSRs. We | This document provides state machine tables for ATM switch LSRs. We | |||
begin in section 2 by defining a list of terminologies. Then in | begin in section 2 by defining a list of terminologies. Then in | |||
section 3, we propose two sets of state machine tables for ATM switch | section 3, we propose two sets of state machine tables for ATM switch | |||
LSRs which use downstream-on-demand mode, one method can be used for | LSRs which use downstream-on-demand mode, one method can be used for | |||
non-vc mergable ATM LSRs, while the other one can be used for the | non-vc merge-able ATM LSRs, while the other one can be used for the | |||
vc-mergable ATM LSRs. In section 4, we provides a state machine for | vc-merge-able ATM LSRs. In section 4, we provides a state machine | |||
downstream mode ATM LSR. | for downstream mode ATM LSR. | |||
We focus on the LDP state machines and the associated control blocks. | ||||
We not describe the "LDP controller" which is in charge of LDP | ||||
session initialization, address mapping messages management, routing | ||||
interface, etc. Specifically, the LDP specification [4] defines the | ||||
state machine for session management. | ||||
Even though the state machines in this document are specific for | Even though the state machines in this document are specific for | |||
ATM-LSR, they can be easily adapted for other types of LSRs. | ATM-LSR, they can be easily adapted for other types of LSRs. | |||
2. Terminologies | 2. Terminologies | |||
- LDP-REQUEST: LDP Label Request message | - LDP-REQUEST: LDP Label Request message | |||
- LDP-MAPPING: LDP Label Mapping message | - LDP-MAPPING: LDP Label Mapping message | |||
- LDP-WITHDRAW: LDP Label Withdraw message | - LDP-WITHDRAW: LDP Label Withdraw message | |||
- LDP-RELEASE: LDP Label Release message | - LDP-RELEASE: LDP Label Release message | |||
- LDP-ABORT: It is a LDP Abort message which is used to abort a LSP | - LDP-ABORT: LDP Abort message used to abort a LSP setup. | |||
setup. | ||||
- LDP-NAK: It is a LDP Notification msg which is to reject a LDP | - LDP-NAK: LDP Notification message used to reject an LDP message. | |||
message. | ||||
3. State Machine for Downstream-on-Demand Mode | 3. State Machine for Downstream-on-Demand Mode | |||
This draft focuses on the LDP state machines and the associated | ||||
control blocks. It does not describe the "LDP controller" which is | ||||
in charge of LDP session initialization, address mapping messages | ||||
management, routing interface, etc. | ||||
In this draft, we provide two sets of state machines: one for the ATM | In this draft, we provide two sets of state machines: one for the ATM | |||
LSR which does not have VC-merge capability, and the other one for | LSR which does not have VC-merge capability, and the other one for | |||
the ATM LSR which does have VC-merge capability. | the ATM LSR which does have VC-merge capability. | |||
State machine descriptions are given in terms of control blocks, | ||||
states, events, response actions and state transitions. Control | ||||
blocks contain the information that is required to support handling | ||||
of events. A control block may also contain any additional | ||||
information that is required either of any specific implementation or | ||||
in support of other required functions. In every case, additional | ||||
information required to support the procedures defined in the LDP | ||||
specification [4] or management objects defined in the LDP MIB [3] | ||||
would be stored in a specific LDP implementation - either as part of | ||||
the control block structure or in some other way. | ||||
The state machines cover both independent LSP control and ordered LSP | The state machines cover both independent LSP control and ordered LSP | |||
control. | control. | |||
The loop detection and loop prevention message will be processed in | Loop detection and loop prevention message will be processed as | |||
the way as specified in [Ref5]. The impact of loop detection and loop | specified in [4]. The impact of loop detection and loop prevention | |||
prevention messages on a state transition is left for further study. | messages on state transitions is left for further study. | |||
3.0 An LSR's Behavior in the Case of a Next Hop Change | 3.0 An LSR's Behavior in the Case of a Next Hop Change | |||
When there is a topology change and an LSR detects a new better next | When there is a topology change and an LSR detects a new better next | |||
hop for an LSP, it may behave in 2 different ways: | hop for an LSP, it may behave in 2 different ways: | |||
1) It tries to do a "local repair". This means that it extends the | 1) It tries to do a "local repair". This means that it extends the | |||
LSP through the new next hop, releases the old path from this LSR | LSP through the new next hop, releases the old path from this LSR | |||
forward and then splices into this newly extended LSP. | forward and then splices into this newly extended LSP. | |||
2) If the LSP is created with the "pinned" option[Ref7,CR-LDP], the | 2) If the LSP is created with the "pinned" option (CR-LDP[5]), the | |||
LSR ignores the new next hop change, and the LSP stays unchanged. The | LSR ignores the new next hop change, and the LSP stays unchanged. The | |||
LSR may decide to send an LDP-MAPPING which contains the attribute | LSR may decide to send an LDP-MAPPING which contains the attribute | |||
about this New Next Hop (NH) change. | about this New Next Hop (NH) change. | |||
3.1. ATM Switch LSR with NO VC-merge | 3.1. ATM Switch LSR with NO VC-merge | |||
In an MPLS domain where some ATM LSRs do not have VC-merge | In an MPLS domain where some ATM LSRs do not have VC-merge | |||
capability, downstream-on-demand mode is required for these ATM | capability, downstream-on-demand mode is required for these ATM LSRs | |||
LSRs[Ref1]. Also, "conservative label retention mode" is required in | [1]. Also, "conservative label retention mode" is required in this | |||
this case[Ref1]. | case [1]. | |||
For each LSP, there are 2 kinds of state machines involves: | For each LSP, there are 2 kinds of state machines involves: | |||
1) the LSP Control Block and its state machine which can be used to | 1) the LSP Control Block and its state machine which can be used to | |||
handle normal LSP setup. It is created when the LSR receives a new | handle normal LSP setup. It is created when the LSR receives a new | |||
LDP Request and it is deleted when the LSP of this request is torn | LDP Request and it is deleted when the LSP of this request is torn | |||
down. | down. | |||
2) the Next Hop Trigger Control Block and its state machine which is | 2) the Next Hop Trigger Control Block and its state machine which is | |||
used to handle switching over to a better LSP through a different | used to handle switching over to a better LSP through a different | |||
next hop. It is created when the LSR decides to switch over to a | next hop. It is created when the LSR decides to switch over to a | |||
better next hop and it is deleted when the LSR finishes switching | better next hop and it is deleted when the LSR finishes switching | |||
over to the better next hop. | over to the better next hop. This state machine uses a timer (and | |||
has corresponding states) to ensure that switch over occurs in a | ||||
timely fashion. | ||||
3.1.1 LSP Control Block | 3.1.1 LSP Control Block | |||
For each LSP, an LSP_Control_Block is defined which may contain the | For each LSP, an LSP_Control_Block is defined which may contain the | |||
following information: | following information: | |||
- Upstream Label Request ID(assigned by the upstream LSR), which is | - Upstream Label Request ID (assigned by the upstream LSR), which | |||
the 'Message Id' in the Label Request Message received from the | is the 'Message Id' in the Label Request Message received from the | |||
upstream LSR. | upstream LSR. | |||
- Downstream Label Request ID (assigned by this LSR itself), which | - Downstream Label Request ID (assigned by this LSR itself), which | |||
is 'Message Id' in the Label Request Message sent to the | is 'Message Id' in the Label Request Message sent to the downstream | |||
downstrearm LSR. | LSR. | |||
- Upstream LDP Identifier | - Upstream LDP Identifier | |||
- Downstream LDP Identifier | - Downstream LDP Identifier | |||
- State | - State | |||
- FEC | - FEC | |||
- Upstream Label(assigned by this LSR) | - Upstream Label(assigned by this LSR) | |||
- Downstream Label(assigned by the downstream LSR) | - Downstream Label(assigned by the downstream LSR) | |||
- Trigger Control Block Pointer, (Only used at the ingress LSR of a | - Trigger Control Block Pointer, (Only used at the ingress LSR of a | |||
LSP)which points to the control block that triggers setting up this | LSP)which points to the control block that triggers setting up this | |||
skipping to change at page 4, line 26 | skipping to change at page 4, line 39 | |||
- Next Hop Control Block Pointer, which points to the control block | - Next Hop Control Block Pointer, which points to the control block | |||
which is used for switching over to a better LSP. | which is used for switching over to a better LSP. | |||
The following index combinations can be used to locate a unique | The following index combinations can be used to locate a unique | |||
LSP_Control_Block: | LSP_Control_Block: | |||
- Downstream Label and Downstream LDP Identifier, or | - Downstream Label and Downstream LDP Identifier, or | |||
- Upstream Label and Upstream LDP Identifier, or | - Upstream Label and Upstream LDP Identifier, or | |||
- Downstream Label Request ID and Downstream LDP Identifier | ||||
- Upstream Label Request ID and Upstream LDP Identifier | - Upstream Label Request ID and Upstream LDP Identifier | |||
Here is the relationship between different control blocks, the detail | Here is the relationship between different control blocks, the detail | |||
definition of Next Hop Trigger Block is described in section 3.1.6. | definition of Next Hop Trigger Block is described in section 3.1.6. | |||
For example, an LSP which transit through (LSR-A, LSR-B, LSR-C,LSR- | For example, an LSP which transit through (LSR-A, LSR-B, LSR-C,LSR- | |||
D): | D): | |||
LSR-A ----> LSR-B ---> LSR-C ---> LSR-D | LSR-A ----> LSR-B ---> LSR-C ---> LSR-D | |||
The control blocks in LSR-A are: | The control blocks in LSR-A are: | |||
+-----------------------+ | +-----------------------+ | |||
| Trigger Control Block | | | Trigger Control Block | | |||
| (e.g, by config) | | | (e.g, by config) | | |||
+-----------------------+ | +-----------------------+ | |||
^ | ^ | |||
|(Trigger Control block pointer) | |(Trigger Control block pointer) | | |||
| | ||||
| | | | |||
+-----------------------+ | +-----------------------+ | |||
| LSP Control Block | | | LSP Control Block | | |||
+-----------------------+ | +-----------------------+ | |||
When LSR-B detects a better next hop to LSR-D through LSR-E, and it | When LSR-B detects a better next hop to LSR-D through LSR-E, and it | |||
decides to switch over to it, so control blocks in LSR-B are: | decides to switch over to it, so control blocks in LSR-B are: | |||
+-----------------------+ | +-----------------------+ | |||
| LSP Control Block | | | LSP Control Block | | |||
| (original LSP) | | | (original LSP) | | |||
+-----------------------+ | +-----------------------+ | |||
(LSP ^ | | (LSP ^ | | |||
Control | | (Next Hop Control Block Pointer) | Control | | (Next Hop Control Block Pointer) | |||
Block | | | Block | | | |||
skipping to change at page 5, line 14 | skipping to change at page 5, line 27 | |||
When LSR-B detects a better next hop to LSR-D through LSR-E, and it | When LSR-B detects a better next hop to LSR-D through LSR-E, and it | |||
decides to switch over to it, so control blocks in LSR-B are: | decides to switch over to it, so control blocks in LSR-B are: | |||
+-----------------------+ | +-----------------------+ | |||
| LSP Control Block | | | LSP Control Block | | |||
| (original LSP) | | | (original LSP) | | |||
+-----------------------+ | +-----------------------+ | |||
(LSP ^ | | (LSP ^ | | |||
Control | | (Next Hop Control Block Pointer) | Control | | (Next Hop Control Block Pointer) | |||
Block | | | Block | | | |||
Pointer | v | Pointer) | v | |||
+--------------------------------+ | +--------------------------------+ | |||
| Next Hop Trigger Control Block | | | Next Hop Trigger Control Block | | |||
+--------------------------------+ | +--------------------------------+ | |||
^ | | ^ | | |||
(Trigger | | (New Next Hop LSP | (Trigger | | (New Next Hop LSP | |||
Control | | Control Block Pointer) | Control | | Control Block Pointer) | |||
Block | | | Block | | | |||
Pointer)| | | Pointer)| | | |||
| v | | v | |||
+------------------------+ | +------------------------+ | |||
skipping to change at page 5, line 44 | skipping to change at page 6, line 14 | |||
-- IDLE | -- IDLE | |||
This is the initial LSP state, when the LSP_Control_Block is created. | This is the initial LSP state, when the LSP_Control_Block is created. | |||
-- RESPONSE_AWAITED | -- RESPONSE_AWAITED | |||
This state means that the LSR has received and processed an LDP- | This state means that the LSR has received and processed an LDP- | |||
REQUEST from an upstream LSR, or it has received an internal set up | REQUEST from an upstream LSR, or it has received an internal set up | |||
request. It has sent a new LDP-REQUEST towards a downstream LSR. The | request. It has sent a new LDP-REQUEST towards a downstream LSR. The | |||
LSR is waiting for the LDP-MAPPING message from the downstream LSR. | LSR is waiting for the LDP-MAPPING from the downstream LSR. | |||
-- ESTABLISHED | -- ESTABLISHED | |||
This state means that the LSR has received the LDP-MAPPING message | This state means that the LSR has received the LDP-MAPPING from the | |||
from the downstream LSR and the LSP is up and operational. | downstream LSR and the LSP is up and operational. | |||
-- RELEASE_AWAITED | -- RELEASE_AWAITED | |||
This state means that the LSR has sent a LDP-WITHDRAW message | This state means that the LSR has sent a LDP-WITHDRAW upstream and is | |||
upstream and is waiting for the LDP-RELEASE before freeing up the | waiting for the LDP-RELEASE before freeing up the label resource. | |||
label resource. | ||||
3.1.3 Events | 3.1.3 Events | |||
-- LDP Request | -- LDP Request | |||
The LSR receives an LDP-REQUEST from an upstream LSR. | The LSR receives an LDP-REQUEST from an upstream LSR. | |||
-- LDP Mapping | -- LDP Mapping | |||
The LSR receives an LDP-MAPPING from a downstream LSR. | The LSR receives an LDP-MAPPING from a downstream LSR. | |||
skipping to change at page 6, line 34 | skipping to change at page 6, line 48 | |||
The LSR receives an LDP-RELEASE from an upstream LSR. | The LSR receives an LDP-RELEASE from an upstream LSR. | |||
-- LDP Withdraw | -- LDP Withdraw | |||
The LSR receives an LDP-WITHDRAW from a downstream LSR. | The LSR receives an LDP-WITHDRAW from a downstream LSR. | |||
-- LDP Upstream Abort | -- LDP Upstream Abort | |||
The LSR receives an LDP-ABORT from an upstream LSR. | The LSR receives an LDP-ABORT from an upstream LSR. | |||
-- LDP Downstream Nak The LSR receives an LDP-NAK(notification) from | -- LDP Downstream NAK The LSR receives an LDP-NAK (notification) from | |||
an downstream LSR. | an downstream LSR. | |||
-- Upstream Lost | -- Upstream Lost | |||
The LSR loses its LDP session with an upstream LDP peer. | The LSR loses its LDP session with an upstream LDP peer. | |||
-- Downstream Lost | -- Downstream Lost | |||
The LSR loses its LDP session with a downstream LDP peer. | The LSR loses its LDP session with a downstream LDP peer. | |||
-- Internal SetUp | -- Internal SetUp | |||
For some reason, e.g. a configuration request of a traffic | For some reason, e.g. a configuration request of a traffic | |||
engineering tunnel, or recognizing a new FEC could trigger an | engineering tunnel, or recognizing a new FEC could trigger an | |||
skipping to change at page 8, line 17 | skipping to change at page 8, line 17 | |||
The following diagram describes briefly the state transitions. | The following diagram describes briefly the state transitions. | |||
+-------------------+ | +-------------------+ | |||
| | | | | | |||
+-------->| IDLE |<--------------+ | +-------->| IDLE |<--------------+ | |||
| | | | | | | | | | |||
| +-------------------+ |(LDP Release) | | +-------------------+ |(LDP Release) | |||
|(LDP Upstream | | | |(LDP Upstream | | | |||
| Abort) |(LDP Request) |(LDP Upstream Abort) | | Abort) |(LDP Request) |(LDP Upstream Abort) | |||
|(Downstream Lost) |(Internal SetUp) | | |(Downstream Lost) |(Internal SetUp) | | |||
|(Downstream Nak) | |(LDP Downstream Nak) | |(Downstream NAK) | |(LDP Downstream NAK) | |||
|(Upstream Lost) v |(Upstream Lost) | |(Upstream Lost) v |(Upstream Lost) | |||
| +-------------------+ | | | +-------------------+ | | |||
| | | | | | | | | | |||
+---------| RESPONSE_AWAITED | | | +---------| RESPONSE_AWAITED | | | |||
| | | | | | | | |||
+-------------------+ | | +-------------------+ | | |||
| | | | | | |||
|(LDP Mapping) | | |(LDP Mapping) | | |||
| | | | | | |||
v | | v | | |||
skipping to change at page 9, line 4 | skipping to change at page 8, line 48 | |||
v | | v | | |||
+-------------------+ | | +-------------------+ | | |||
| | | | | | | | |||
| RELEASE_AWAITED |------------>--+ | | RELEASE_AWAITED |------------>--+ | |||
| | | | | | |||
+-------------------+ | +-------------------+ | |||
3.1.5 State Machine | 3.1.5 State Machine | |||
3.1.5.1 State -- "IDLE" | 3.1.5.1 State -- "IDLE" | |||
State: IDLE | ||||
State: IDLE | ||||
Event: LDP Request | Event: LDP Request | |||
New States: Depends upon the action routine | New State: Depends upon the action routine | |||
Actions: | Actions: | |||
If this LSR is the LSP Egress or Proxy Egress [Ref2] | If this LSR is the LSP Egress or Proxy Egress [2] | |||
Then: | Then: | |||
Choose an upstream label, connect this upstream label to the local | Choose an upstream label, connect this upstream label to the local | |||
IP forwarding module, allocate the resources, send the LDP-MAPPING | IP forwarding module, allocate the resources, send the LDP-MAPPING | |||
message upstream with the upstream label, and go to the new state | upstream with the upstream label, and go to the new state | |||
`ESTABLISHED'. | `ESTABLISHED'. | |||
else | else | |||
Obtain a next hop (or interface) with the FEC specified in the | Obtain a next hop (or interface) with the FEC specified in the | |||
LDP-REQUEST message, propagate the LDP-REQUEST message, with newly | LDP-REQUEST, propagate the LDP-REQUEST, with newly assigned Message | |||
assigned Message ID by this LSR, towards the obtained next hop, | ID by this LSR, towards the obtained next hop, and go to the new | |||
and go to the new state `RESPONSE_AWAITED'. | state `RESPONSE_AWAITED'. | |||
If the LSR uses the independent control mode[Ref2], choose an | If the LSR uses the independent control mode [2], choose an | |||
upstream label, connect this upstream label to the local IP | upstream label, connect this upstream label to the local IP | |||
forwarding module, and send an LDP-MAPPING message upstream with | forwarding module, and send an LDP-MAPPING upstream with the | |||
the upstream label. | upstream label. | |||
If unable to process the request for any reason, issue an LDP-NAK | If unable to process the request for any reason, issue an LDP-NAK to | |||
message to the sender with the appropriate error code and delete the | the sender with the appropriate error code and delete the control | |||
control block. | block. | |||
State: IDLE | State: IDLE | |||
Event: LDP Mapping | Event: LDP Mapping | |||
New State: IDLE | New State: IDLE | |||
Actions: | Actions: | |||
Ignore the event. It is an internal implementation error. | Ignore the event. It is an internal implementation error. | |||
skipping to change at page 10, line 30 | skipping to change at page 10, line 29 | |||
Event: LDP Upstream Abort | Event: LDP Upstream Abort | |||
New State: IDLE | New State: IDLE | |||
Actions: | Actions: | |||
Ignore the event. It is an internal implementation error. | Ignore the event. It is an internal implementation error. | |||
State: IDLE | State: IDLE | |||
Event: LDP Downstream Nak | Event: LDP Downstream NAK | |||
New State: IDLE | New State: IDLE | |||
Actions: | Actions: | |||
Ignore the event. It is an internal implementation error. | Ignore the event. It is an internal implementation error. | |||
State: IDLE | State: IDLE | |||
Event: Upstream Lost | Event: Upstream Lost | |||
New State: IDLE | New State: IDLE | |||
Actions: | Actions: | |||
Ignore the event. It is an internal implementation error. | Ignore the event. It is an internal implementation error. | |||
State: IDLE | State: IDLE | |||
Event: Downstream Lost | Event: Downstream Lost | |||
New State: IDLE | ||||
New State: IDLE | ||||
Actions: | Actions: | |||
Ignore the event. It is an internal implementation error. | Ignore the event. It is an internal implementation error. | |||
State: IDLE | State: IDLE | |||
Event: Internal SetUp | Event: Internal SetUp | |||
New State: RESPONSE_AWAITED | New State: RESPONSE_AWAITED | |||
Actions: | Actions: | |||
Set up the Trigger Control Block pointer, | Set up the Trigger Control Block pointer, | |||
Obtain a next hop (or interface) with the FEC specified in the | Obtain a next hop (or interface) with the FEC specified in the | |||
Internal SetUp message, send a LDP-REQUEST towards the obtained next | Internal SetUp message, send a LDP-REQUEST towards the obtained next | |||
hop, and go to the new state 'RESPONSE_AWAITED'. | hop, and go to the new state `RESPONSE_AWAITED'. | |||
State: IDLE | State: IDLE | |||
Event: Internal Destroy | Event: Internal Destroy | |||
New State: IDLE | New State: IDLE | |||
Actions: | Actions: | |||
Ignore. It is an internal implementation error. | Ignore. It is an internal implementation error. | |||
skipping to change at page 12, line 5 | skipping to change at page 11, line 50 | |||
Ignore. It is an internal implementation error. | Ignore. It is an internal implementation error. | |||
State: IDLE | State: IDLE | |||
Event: Internal New NH | Event: Internal New NH | |||
New State: IDLE | New State: IDLE | |||
Actions: | Actions: | |||
Ignore. It is an internal implementaion error. | Ignore. It is an internal implementation error. | |||
3.1.5.2 State -- "RESPONSE_AWAITED" | 3.1.5.2 State -- "RESPONSE_AWAITED" | |||
State: RESPONSE_AWAITED | State: RESPONSE_AWAITED | |||
Event: LDP Request | Event: LDP Request | |||
New State: RESPONSE_AWAITED | New State: RESPONSE_AWAITED | |||
Actions: | Actions: | |||
skipping to change at page 12, line 30 | skipping to change at page 12, line 28 | |||
State: RESPONSE_AWAITED | State: RESPONSE_AWAITED | |||
Event: LDP Mapping | Event: LDP Mapping | |||
New State: ESTABLISHED | New State: ESTABLISHED | |||
Actions: | Actions: | |||
1) If the LSP is triggered by the local router(Trigger Control Block | 1) If the LSP is triggered by the local router(Trigger Control Block | |||
Pointer is not zero), send event "Internal LSP UP" to the Trigger | Pointer is not zero), send event `Internal LSP UP' to the Trigger | |||
control block. | control block. | |||
2) Else If the LSR uses the ordered control mode, choose an upstream | 2) Else If the LSR uses the ordered control mode, choose an upstream | |||
label. | label. | |||
3) Connect the upstream label to the downstream label. Allocate the | 3) Connect the upstream label to the downstream label. Allocate the | |||
resources. propagate the LDP-MAPPING message upstream with the | resources. Propagate the LDP-MAPPING upstream with the upstream | |||
upstream label. | label. | |||
If unable to process the message, disconnect the upstream label from | If unable to process the message, disconnect the upstream label from | |||
the downstream label, free the upstream label, release the resources, | the downstream label, free the upstream label, release the resources, | |||
send an LDP-RELEASE message downstream and an LDP-Nak upstream with | send an LDP-RELEASE downstream and an LDP-NAK upstream with status | |||
status (No Label Resources[ref-5]), and delete the LSP_Control_Block. | (No Label Resources [4]), and delete the LSP_Control_Block. | |||
State: RESPONSE_AWAITED | State: RESPONSE_AWAITED | |||
Event: LDP Release | Event: LDP Release | |||
New State: IDLE | New State: IDLE | |||
Actions: | Actions: | |||
If the LSR uses the independent control mode, free the upstream | If the LSR uses the independent control mode, free the upstream | |||
label. | label. | |||
Send an LDP-ABORT message downstream and delete the | Send an LDP-ABORT downstream and delete the LSP_Control_Block. | |||
LSP_Control_Block. | ||||
Note: This should only occur if the LSR uses the independent control | ||||
mode. In the ordered control mode, no upstream label mapping will | ||||
have been sent corresponding to this LSP while waiting for a label | ||||
mapping from downstream. | ||||
State: RESPONSE_AWAITED | State: RESPONSE_AWAITED | |||
Event: LDP Withdraw | Event: LDP Withdraw | |||
New State: RESPONSE_AWAITED | New State: RESPONSE_AWAITED | |||
Actions: | Actions: | |||
Ignore the event. It's a protocol error from the downstream LSR. | Ignore the event. It's a protocol error from the downstream LSR. | |||
skipping to change at page 13, line 35 | skipping to change at page 13, line 36 | |||
Event: LDP Upstream Abort | Event: LDP Upstream Abort | |||
New State: IDLE | New State: IDLE | |||
Actions: | Actions: | |||
If the LSR uses the independent control mode, free the upstream | If the LSR uses the independent control mode, free the upstream | |||
label. | label. | |||
Send an LDP-ABORT message downstream. | Send an LDP-ABORT downstream. | |||
Delete the LSP_Control_Block. | Delete the LSP_Control_Block. | |||
State: RESPONSE_AWAITED | State: RESPONSE_AWAITED | |||
Event: LDP Downstream Nak | Event: LDP Downstream NAK | |||
New State: Depends on the action routine | New State: Depends on the action routine | |||
Actions: | Actions: | |||
1. If the LSP is triggered by the local router(Trigger Control Block | 1. If the LSP is triggered by the local router(Trigger Control Block | |||
Pointer is not zero), send event "Internal LSP DOWN" to the Trigger | Pointer is not zero), send event `Internal LSP DOWN' to the Trigger | |||
control block. | control block. | |||
2. Else If the LSR uses the independent control mode, send an LDP- | 2. Else If the LSR uses the independent control mode, send an LDP- | |||
WITHDRAW message upstream and go to state 'RELEASE_AWAITED'. | WITHDRAW upstream and go to state `RELEASE_AWAITED'. | |||
If the LSR uses the ordered control mode, send an LDP-NAK message | If the LSR uses the ordered control mode, send an LDP-NAK upstream. | |||
upstream. Then delete the control block. | Then delete the control block. | |||
State: RESPONSE_AWAITED | State: RESPONSE_AWAITED | |||
Event: Upstream Lost | Event: Upstream Lost | |||
New State: IDLE | New State: IDLE | |||
Actions: | Actions: | |||
If the LSR uses the independent control mode, free the upstream | If the LSR uses the independent control mode, free the upstream | |||
skipping to change at page 14, line 33 | skipping to change at page 14, line 33 | |||
State: RESPONSE_AWAITED | State: RESPONSE_AWAITED | |||
Event: Downstream Lost | Event: Downstream Lost | |||
New State: Depends on the action routine | New State: Depends on the action routine | |||
Actions: | Actions: | |||
1. If the LSP is triggered by the local router(Trigger Control Block | 1. If the LSP is triggered by the local router(Trigger Control Block | |||
Pointer is not zero), send event "Internal LSP DOWN" to the trigger | Pointer is not zero), send event `Internal LSP DOWN' to the trigger | |||
control block. | control block. | |||
2. Else, If the LSR uses the independent control mode, free the | 2. Else, If the LSR uses the independent control mode, free the | |||
upstream label and send an LDP-WITHDRAW upstream and go to state | upstream label and send an LDP-WITHDRAW upstream and go to state | |||
'RELEASE_AWAITED'. | `RELEASE_AWAITED'. | |||
If the LSR uses the ordered control mode, send an LDP-NAK | If the LSR uses the ordered control mode, send an LDP-NAK upstream | |||
upstream(with a status No Route[Ref-5]) and then delete the control | (with a status `No Route' [4]) and then delete the control block. | |||
block. | ||||
State: RESPONSE_AWAITED | State: RESPONSE_AWAITED | |||
Event: Internal SetUp | Event: Internal SetUp | |||
New State: RESPONSE_AWAITED | New State: RESPONSE_AWAITED | |||
Actions: | Actions: | |||
Ignore, it is an internal implementation error. | Ignore, it is an internal implementation error. | |||
skipping to change at page 16, line 4 | skipping to change at page 15, line 51 | |||
New State: ESTABLISHED | New State: ESTABLISHED | |||
Actions: | Actions: | |||
Ignore the event. It's an internal implementation error. For non VC- | Ignore the event. It's an internal implementation error. For non VC- | |||
merge ATM LSR, a new LSP control block is always created for each LDP | merge ATM LSR, a new LSP control block is always created for each LDP | |||
request. | request. | |||
State: ESTABLISHED | State: ESTABLISHED | |||
Event: LDP Mapping | ||||
Event: LDP Mapping | ||||
New State: ESTABLISHED | New State: ESTABLISHED | |||
Actions: | Actions: | |||
Process the LDP-MAPPING message, which may contain the new attributes | Process the LDP-MAPPING, which may contain the new attributes of the | |||
of the label mapping and then propagate the LDP-MAPPING message | label mapping and then propagate the LDP-MAPPING upstream. | |||
upstream. | ||||
State: ESTABLISHED | State: ESTABLISHED | |||
Event: LDP Release | Event: LDP Release | |||
New State: IDLE | New State: IDLE | |||
Actions: | Actions: | |||
Disconnect the upstream label from the downstream label. | Disconnect the upstream label from the downstream label. | |||
Free the upstream label. | Free the upstream label. | |||
Free the resources. | Free the resources. | |||
Send event "Internal Destroy" to the Next Hop Trigger Block if it was | Send event `Internal Destroy' to the Next Hop Trigger Block if it was | |||
in the middle of switching over to the better next hop. | in the middle of switching over to the better next hop. | |||
Propagate the LDP-RELEASE message downstream if the LSR is not the | Propagate the LDP-RELEASE downstream if the LSR is not the end of LSP | |||
end of LSP and delete the LSP_Control_Block. | and delete the LSP_Control_Block. | |||
State: ESTABLISHED | State: ESTABLISHED | |||
Event: LDP Withdraw | Event: LDP Withdraw | |||
New State: Depends on the action routine. | New State: Depends on the action routine. | |||
Actions: | Actions: | |||
1) Free the resources and send LDP-RELEASE downstream. | 1) Free the resources and send LDP-RELEASE downstream. | |||
2) If it is independent control mode, set the state to 'IDLE', create | 2) If it is independent control mode, set the state to `IDLE', create | |||
a internal LDP Request with the information in the LSP_Control_Block, | a internal LDP Request with the information in the LSP_Control_Block, | |||
and pass event 'LDP Request' to its own state machine. | and pass event `LDP Request' to its own state machine. | |||
3) Else for the ordered control mode | 3) Else for the ordered control mode | |||
3.1)If the LSP is triggerd to be setup by itself(e.g it is the | 3.1)If the LSP is triggered to be setup by itself (e.g it is the | |||
ingress LSR of this LSP), send event "Internal LSP NAK" to the | ingress LSR of this LSP), send event `Internal LSP NAK' to the | |||
trigger control block and delete the control block | trigger control block and delete the control block | |||
3.2) else, if it is triggered by the incoming LDP Request, | 3.2) else, if it is triggered by the incoming LDP Request, | |||
Disconnect the upstream label from the downstream label. And | Disconnect the upstream label from the downstream label. Propagate | |||
Propagate the LDP-WITHDRAW message upstream and go to state | the LDP-WITHDRAW upstream and go to state `RELEASE_AWAITED'. | |||
'RELEASE_AWAITED'. | ||||
3.3) If the LSP is in the middle of switching over to a better LSP, | 3.3) If the LSP is in the middle of switching over to a better LSP, | |||
send event 'Internal Destroy' to the state machine of its New Next | send event `Internal Destroy' to the state machine of its New Next | |||
Hop LSP Control Block. | Hop LSP Control Block. | |||
State: ESTABLISHED | State: ESTABLISHED | |||
Event: LDP Upstream Abort | Event: LDP Upstream Abort | |||
New State: IDLE | New State: IDLE | |||
Actions: | Actions: | |||
Disconnect the upstream label from the downstream label. | Disconnect the upstream label from the downstream label. | |||
Free the upstream label. | Free the upstream label. | |||
Send event "Internal Destroy" if the LSR was in the middle of | Send event `Internal Destroy' if the LSR was in the middle of | |||
switching over to the better next hop. | switching over to the better next hop. | |||
Propagate an LDP-RELEASE message downstream and delete the | Propagate an LDP-RELEASE downstream and delete the LSP_Control_Block. | |||
LSP_Control_Block. | ||||
State: ESTABLISHED | State: ESTABLISHED | |||
Event: LDP Downstream Nak | Event: LDP Downstream NAK | |||
New State: ESTABLISHED | New State: ESTABLISHED | |||
Actions: | Actions: | |||
Ignore the event. It is a protocol error from the downstream LSR. | Ignore the event. It is a protocol error from the downstream LSR. | |||
The downstream LSR should always LSP-WITHDRAW msg to tear down the | The downstream LSR should always LSP-WITHDRAW to tear down the LSP | |||
LSP when the LSP is established. | when the LSP is established. | |||
State: ESTABLISHED | State: ESTABLISHED | |||
Event: Upstream Lost | Event: Upstream Lost | |||
New State: IDLE | New State: IDLE | |||
Actions: | Actions: | |||
Disconnect the upstream label from the downstream label. | Disconnect the upstream label from the downstream label. | |||
Free the upstream label. | Free the upstream label. | |||
Send event "Internal Destroy" to the Next Hop Trigger Control Block | Send event `Internal Destroy' to the Next Hop Trigger Control Block | |||
if it was in the middle of switching over to the better next hop. | if it was in the middle of switching over to the better next hop. | |||
Free the resources. | Free the resources. | |||
Propagate an LDP-RELEASE message downstream and delete the | Propagate an LDP-RELEASE downstream and delete the LSP_Control_Block. | |||
LSP_Control_Block. | ||||
State: ESTABLISHED | State: ESTABLISHED | |||
Event: Downstream Lost | Event: Downstream Lost | |||
New State: Depends on the actions | New State: Depends on the actions | |||
Actions: | Actions: | |||
1) If the LSP is triggered by the local router(Trigger Control Block | 1) If the LSP is triggered by the local router(Trigger Control Block | |||
Pointer is not zero), send event "Internal LSP NAK" to the Trigger | Pointer is not zero), send event `Internal LSP NAK' to the Trigger | |||
control block and delete the control block. | control block and delete the control block. | |||
2) Else, disconnect the upstream label from the downstream label. | 2) Else, disconnect the upstream label from the downstream label. | |||
Propagate an LDP-WITHDRAW message upstream and go to state | Propagate an LDP-WITHDRAW upstream and go to `RELEASE_AWAITED' state. | |||
'RELEASE_AWAITED' state. | ||||
3) Send event "Internal Destroy" to the Next Hop Trigger Control | 3) Send event `Internal Destroy' to the Next Hop Trigger Control | |||
Block if it was in the middle of switching over to the better next | Block if it was in the middle of switching over to the better next | |||
hop. | hop. | |||
State: ESTABLISHED | State: ESTABLISHED | |||
Event: Internal Setup | Event: Internal Setup | |||
New State: ESTABLISHED | New State: ESTABLISHED | |||
Actions: | Actions: | |||
skipping to change at page 19, line 4 | skipping to change at page 18, line 46 | |||
Actions: | Actions: | |||
Ignore, it is an internal implementation error. | Ignore, it is an internal implementation error. | |||
State: ESTABLISHED | State: ESTABLISHED | |||
Event: Internal Destroy | Event: Internal Destroy | |||
New State: IDLE | New State: IDLE | |||
Actions: | Actions: | |||
Disconnect the upstream label from the downstream label if it is not | Disconnect the upstream label from the downstream label if it is not | |||
the ingress of the LSP. | the ingress of the LSP. | |||
Free the resources. | Free the resources. | |||
Send an LDP-RELEASE message downstream and delete the | Send an LDP-RELEASE downstream and delete the LSP_Control_Block. | |||
LSP_Control_Block. | ||||
State: ESTABLISHED | State: ESTABLISHED | |||
Event: Internal Cross-Connect | Event: Internal Cross-Connect | |||
New State: ESTABLISHED | New State: ESTABLISHED | |||
Actions: | Actions: | |||
Connect the upstream label to the downstream label | Connect the upstream label to the downstream label | |||
skipping to change at page 19, line 39 | skipping to change at page 19, line 34 | |||
State: ESTABLISHED | State: ESTABLISHED | |||
Event: Internal New NH | Event: Internal New NH | |||
New State: ESTABLISHED | New State: ESTABLISHED | |||
Actions: | Actions: | |||
1) If the LSR was in the middle of switching over to a better next | 1) If the LSR was in the middle of switching over to a better next | |||
hop(Next Hop Trigger Control Block Pointer is not zero), it send | hop(Next Hop Trigger Control Block Pointer is not zero), it send | |||
"Internal New NH" to that control block. | `Internal New NH' to that control block. | |||
2) Else, create a new Next Hop Trigger Control Block, set Next Hop | 2) Else, create a new Next Hop Trigger Control Block, set Next Hop | |||
Trigger Control Block pointer which points this control block. And | Trigger Control Block pointer which points this control block. And | |||
then pass "Internal New NH" to this control block. | then pass `Internal New NH' to this control block. | |||
3.1.5.4 State --"RELEASE_AWAITED" | 3.1.5.4 State --"RELEASE_AWAITED" | |||
State RELEASE_AWAITED | State RELEASE_AWAITED | |||
Event LDP Request | Event LDP Request | |||
New State: RELEASE_AWAITED | New State: RELEASE_AWAITED | |||
Actions: | Actions: | |||
Ignore the event. It is an internal implementation error. | Ignore the event. It is an internal implementation error. | |||
State RELEASE_AWAITED | State: RELEASE_AWAITED | |||
Event LDP Mapping | Event: LDP Mapping | |||
New State: RELEASE_AWAITED | New State: RELEASE_AWAITED | |||
Actions: | Actions: | |||
It is an protocol error from the downstream LDP peer, but anyway send | It is an protocol error from the downstream LDP peer, but anyway send | |||
a LDP-RELEASE downstream. | a LDP-RELEASE downstream. | |||
State RELEASE_AWAITED | State: RELEASE_AWAITED | |||
Event LDP Release | Event: LDP Release | |||
New State: IDLE | New State: IDLE | |||
Actions: | Actions: | |||
1) Free the upstream label | 1) Free the upstream label | |||
2) Delete the control block. | 2) Delete the control block. | |||
State RELEASE_AWAITED | State: RELEASE_AWAITED | |||
Event LDP Withdraw | Event: LDP Withdraw | |||
New State: RELEASE_AWAITED | New State: RELEASE_AWAITED | |||
Actions: | Actions: | |||
It is an protocol error from the downstream LDP peer, but send a | It is an protocol error from the downstream LDP peer, but send a | |||
LDP-RELEASE anyway. | LDP-RELEASE anyway. | |||
State RELEASE_AWAITED | State: RELEASE_AWAITED | |||
Event LDP Upstream Nak | Event: LDP Upstream NAK | |||
New State: IDLE | New State: IDLE | |||
Actions: | Actions: | |||
1) Free the upstream label | 1) Free the upstream label | |||
2) Delete the control block. | 2) Delete the control block. | |||
State RELEASE_AWAITED | State: RELEASE_AWAITED | |||
Event LDP Downstream Nak | Event: LDP Downstream NAK | |||
New State: RELEASE_AWAITED | New State: RELEASE_AWAITED | |||
Actions: | Actions: | |||
Ignore the event. Continue waiting for the LDP-RELEASE from upstream. | Ignore the event. Continue waiting for the LDP-RELEASE from upstream. | |||
State RELEASE_AWAITED | State: RELEASE_AWAITED | |||
Event Upstream Lost | Event: Upstream Lost | |||
New State: IDLE | New State: IDLE | |||
Actions: | Actions: | |||
1) Free the upstream label | 1) Free the upstream label | |||
2) Delete the control block. | 2) Delete the control block. | |||
State RELEASE_AWAITED | State: RELEASE_AWAITED | |||
Event Downstream Lost | Event: Downstream Lost | |||
New State: RELEASE_AWAITED | New State: RELEASE_AWAITED | |||
Actions: | Actions: | |||
Ignore the event. Continue waiting for the LDP-RELEASE from upstream. | Ignore the event. Continue waiting for the LDP-RELEASE from upstream. | |||
State RELEASE_AWAITED | State: RELEASE_AWAITED | |||
Event Internal SetUp | Event: Internal SetUp | |||
New State: RELEASE_AWAITED | New State: RELEASE_AWAITED | |||
Actions: | Actions: | |||
Ignore the event. It is an internal implementation error. | Ignore the event. It is an internal implementation error. | |||
State RELEASE_AWAITED | State: RELEASE_AWAITED | |||
Event Internal Destroy | ||||
Event: Internal Destroy | ||||
New State: RELEASE_AWAITED | New State: RELEASE_AWAITED | |||
Actions: | Actions: | |||
Ignore the event. It is an internal implementation error. | Ignore the event. It is an internal implementation error. | |||
State RELEASE_AWAITED | State: RELEASE_AWAITED | |||
Event Internal Cross-Connect | Event: Internal Cross-Connect | |||
New State: RELEASE_AWAITED | New State: RELEASE_AWAITED | |||
Actions: | Actions: | |||
Ignore the event. It is an internal implementation error. | Ignore the event. It is an internal implementation error. | |||
3.1.6 Handling the Next Hop Change | 3.1.6 Handling the Next Hop Change | |||
When an LSR detects a better next hop, it may decides to establish a | When an LSR detects a better next hop, it may decides to establish a | |||
new LSP through this next hop. For example, an LSR is configured as | new LSP through this next hop. For example, an LSR is configured as | |||
"local repair", or the LSR is configured as "global repair" and it is | "local repair", or the LSR is configured as "global repair" and it is | |||
the ingress end of a LSP. It can then create a Next Hop Trigger | the ingress end of a LSP. It can then create a Next Hop Trigger | |||
Control Block and use the state machine of Next Hop Trigger Control | Control Block and use the state machine of Next Hop Trigger Control | |||
Block to establish a new LSP through the better next hop. | Block to establish a new LSP through the better next hop. | |||
3.1.6.1 Next Hop Trigger Control Block | 3.1.6.1 Next Hop Trigger Control Block | |||
-- State | ||||
-- LSP Control Block Pointer, which points to the original LSP | -- LSP Control Block Pointer, which points to the original LSP | |||
control block. | control block. | |||
-- New Next Hop LSP Control Block Pointer, which points to the LSP | -- New Next Hop LSP Control Block Pointer, which points to the LSP | |||
Control Block that is setting up an LSP through the new next hop. | Control Block that is setting up an LSP through the new next hop. | |||
3.1.6.2 States | 3.1.6.2 States | |||
-- IDLE | -- IDLE | |||
skipping to change at page 23, line 4 | skipping to change at page 22, line 47 | |||
Control Block that is setting up an LSP through the new next hop. | Control Block that is setting up an LSP through the new next hop. | |||
3.1.6.2 States | 3.1.6.2 States | |||
-- IDLE | -- IDLE | |||
This is the initial LSP state, when the Trigger_Control_Block is | This is the initial LSP state, when the Trigger_Control_Block is | |||
created. | created. | |||
-- NEW_NH_RETRY | -- NEW_NH_RETRY | |||
This is the state where an LSR waits for a retry timer to expire and | This is the state where an LSR waits for a retry timer to expire and | |||
then tries to establish an LSP through a new next hop. | then tries to establish an LSP through a new next hop. | |||
-- NEW_NH_RESPONSE_AWAITED | -- NEW_NH_RESPONSE_AWAITED | |||
This is the state where an LSR is in the middle of establishing a new | This is the state where an LSR is in the middle of establishing a new | |||
LSP through a new next hop. It has triggered a LSP control block to | LSP through a new next hop. It has triggered a LSP control block to | |||
send an LDP-REQUEST towards the new next hop and is waiting for the | send an LDP-REQUEST towards the new next hop and is waiting for the | |||
LDP-MAPPING message. | LDP-MAPPING. | |||
3.1.6.3 Events | 3.1.6.3 Events | |||
-- Internal New NH | -- Internal New NH | |||
The LSR detects there is a new next hop for a FEC. | The LSR detects there is a new next hop for a FEC. | |||
-- Internal Retry Timeout | -- Internal Retry Timeout | |||
The LSP retry timer expires. | The LSP retry timer expires. | |||
skipping to change at page 24, line 43 | skipping to change at page 24, line 43 | |||
the control block is deleted | the control block is deleted | |||
3.01.3 State Machine | 3.01.3 State Machine | |||
3.01.3.1 State -- "IDLE" | 3.01.3.1 State -- "IDLE" | |||
State: IDLE | State: IDLE | |||
Event: Internal New NH | Event: Internal New NH | |||
New States: NEW_NH_RETRY | New State: NEW_NH_RETRY | |||
Actions: | Actions: | |||
Start the LSP retry timer and go to the 'NEW_NH_RETRY' state. | Start the LSP retry timer and go to the `NEW_NH_RETRY' state. | |||
State: IDLE | State: IDLE | |||
Event: Internal retry timeout | Event: Internal retry timeout | |||
New States: IDLE | New State: IDLE | |||
Actions: | Actions: | |||
Ignore. It is an internal implementation error. | Ignore. It is an internal implementation error. | |||
State: IDLE | State: IDLE | |||
Event: Internal LSP UP | Event: Internal LSP UP | |||
New States: IDLE | New State: IDLE | |||
Actions: | Actions: | |||
Ignore. It is an internal implementation error. | Ignore. It is an internal implementation error. | |||
State: IDLE | State: IDLE | |||
Event: Internal LSP NAK | Event: Internal LSP NAK | |||
New States: IDLE | New State: IDLE | |||
Actions: | Actions: | |||
Ignore. It is an internal implementation error. | Ignore. It is an internal implementation error. | |||
State: IDLE | State: IDLE | |||
Event: Internal destroy | Event: Internal destroy | |||
New States: IDLE | New State: IDLE | |||
Actions: | Actions: | |||
Ignore. It is an internal implementation error. | Ignore. It is an internal implementation error. | |||
3.01.3.2 State -- "NEW_NH_RETRY" | 3.01.3.2 State -- "NEW_NH_RETRY" | |||
State: NEW_NH_RETRY | State: NEW_NH_RETRY | |||
Event: Internal New NH | Event: Internal New NH | |||
New States: NEW_NH_RETRY | New State: NEW_NH_RETRY | |||
Actions: | Actions: | |||
Restart the LSP retry timer. | Restart the LSP retry timer. | |||
State: NEW_NH_RETRY | State: NEW_NH_RETRY | |||
Event: Internal retry timeout | Event: Internal retry timeout | |||
New States: NEW_NH_RESPONSE_AWAITED | New State: NEW_NH_RESPONSE_AWAITED | |||
Actions: | Actions: | |||
If the new next hop is the same one as the old next hop, delete the | If the new next hop is the same one as the old next hop, delete the | |||
control block. | control block. | |||
Otherwise, create an LSP control block which will try to establish a | Otherwise, create an LSP control block which will try to establish a | |||
new LSP through the new next hop. And send event "Internal Setup" to | new LSP through the new next hop. And send event `Internal Setup' to | |||
its state machine. | its state machine. | |||
State: NEW_NH_RETRY | State: NEW_NH_RETRY | |||
Event: Internal LSP UP | Event: Internal LSP UP | |||
New States: NEW_NH_RETRY | New State: NEW_NH_RETRY | |||
Actions: | Actions: | |||
Ignore. It is an internal implementation error. | Ignore. It is an internal implementation error. | |||
State: NEW_NH_RETRY | State: NEW_NH_RETRY | |||
Event: Internal LSP NAK | Event: Internal LSP NAK | |||
New States: NEW_NH_RETRY | New State: NEW_NH_RETRY | |||
Actions: | Actions: | |||
Ignore. It is an internal implementation error. | Ignore. It is an internal implementation error. | |||
State: NEW_NH_RETRY | State: NEW_NH_RETRY | |||
Event: Internal destroy | Event: Internal destroy | |||
New States: IDLE | New State: IDLE | |||
Actions: | Actions: | |||
Stop the timer and delete the control block. | Stop the timer and delete the control block. | |||
3.01.3.3 State -- "NEW_NH_RESPONSE_AWAITED" | 3.01.3.3 State -- "NEW_NH_RESPONSE_AWAITED" | |||
State: NEW_NH_RESPONSE_AWAITED | State: NEW_NH_RESPONSE_AWAITED | |||
Event: Internal New NH | Event: Internal New NH | |||
New States: NEW_NH_RETRY | New State: NEW_NH_RETRY | |||
Actions: | Actions: | |||
Restart the LSP retry timer, send "Internal destroy" to the control | Restart the LSP retry timer, send `Internal destroy' to the control | |||
block of the LSP for the new next hop and go to the 'NEW_NH_RETRY' | block of the LSP for the new next hop and go to the `NEW_NH_RETRY' | |||
state. | state. | |||
State: NEW_NH_RESPONSE_AWAITED | State: NEW_NH_RESPONSE_AWAITED | |||
Event: Internal retry timeout | Event: Internal retry timeout | |||
New States: NEW_NH_RESPONSE_AWAITED | New State: NEW_NH_RESPONSE_AWAITED | |||
Actions: | Actions: | |||
Ignore. It is an internal implementation error. | Ignore. It is an internal implementation error. | |||
State: NEW_NH_RESPONSE_AWAITED | State: NEW_NH_RESPONSE_AWAITED | |||
Event: Internal LSP UP | Event: Internal LSP UP | |||
New States: IDLE | New State: IDLE | |||
Actions: | Actions: | |||
Send event "Internal cross-connect" event to the LSP control block of | Send event `Internal cross-connect' event to the LSP control block of | |||
the new next hop. | the new next hop. | |||
Send event "Internal destroy" event to the original LSP control | Send event `Internal destroy' event to the original LSP control | |||
block. | block. | |||
Then delete the control block. | Then delete the control block. | |||
State: NEW_NH_RESPONSE_AWAITED | State: NEW_NH_RESPONSE_AWAITED | |||
Event: Internal LSP NAK | Event: Internal LSP NAK | |||
New States: IDLE | New State: IDLE | |||
Actions: | Actions: | |||
Delete the control block. | Delete the control block. | |||
State: NEW_NH_RESPONSE_AWAITED | State: NEW_NH_RESPONSE_AWAITED | |||
Event: Internal destroy | Event: Internal destroy | |||
New States: IDLE | New State: IDLE | |||
Actions: | Actions: | |||
Send event "Internal destroy" the control block for the new LSP | Send event `Internal destroy' the control block for the new LSP | |||
through the new next hop. | through the new next hop. | |||
3.1.7 LDP Related Message Handling | 3.1.7 LDP Related Message Handling | |||
- If an LSR receives an LDP-REQUEST from an upstream LSR: | - If an LSR receives an LDP-REQUEST from an upstream LSR: | |||
a) If this is a duplicate request, discard the msg. A duplicate | a) If this is a duplicate request, discard the message. A duplicate | |||
request means that there is a LSP_Control_Block which has same FEC, | request means that there is a LSP_Control_Block which has same FEC, | |||
same Upstream Label Request ID and same Upstream LDP Session | same Upstream Label Request ID and same Upstream LDP Session | |||
Identifier. | Identifier. | |||
b) Otherwise, create a new LSP_Control_Block, store the relevant | b) Otherwise, create a new LSP_Control_Block, store the relevant | |||
information from the message into the control block, then pass the | information from the message into the control block, then pass the | |||
event `LDP Request' to its state machine. | event `LDP Request' to its state machine. | |||
- If an LSR receives an LDP-MAPPING from a downstream LSR: | - If an LSR receives an LDP-MAPPING from a downstream LSR: | |||
a) Extract the 'Label Request Message ID' field and from the LDP- | a) Extract the 'Label Request Message ID' field and from the LDP- | |||
MAPPING message. | MAPPING. | |||
b) Find an LSP_Control_Block which has the same Downstream Label | b) Find an LSP_Control_Block which has the same Downstream Label | |||
Request ID and the same Downstream LDP Session Identifier. | Request ID and the same Downstream LDP Session Identifier. | |||
c) If an LSP_Control_Block is found, pass the event `LDP Mapping' to | c) If an LSP_Control_Block is found, pass the event `LDP Mapping' to | |||
its state machine. | its state machine. | |||
d) If there is no matching LSP_Control_Block found, then try to find | d) If there is no matching LSP_Control_Block found, then try to find | |||
an LSP_Control_Block which has the same Downstream Lable and the same | an LSP_Control_Block which has the same Downstream Label and the same | |||
Downstream LDP Session Identifier. | Downstream LDP Session Identifier. | |||
e) If an LSP_Control_Block is found, pass the event 'LDP Mapping' to | e) If an LSP_Control_Block is found, pass the event `LDP Mapping' to | |||
its state machine. | its state machine. | |||
f) Otherwise, ignore the LDP-MAPPING message and send a LDP-RELEASE | f) Otherwise, ignore the LDP-MAPPING and send a LDP-RELEASE | |||
message downstream. | downstream. | |||
- If an LSR receives an LDP-RELEASE from an upstream LSR: | - If an LSR receives an LDP-RELEASE from an upstream LSR: | |||
a) Find an LSP_Control_Block which has the same Upstream Label and | a) Find an LSP_Control_Block which has the same Upstream Label and | |||
the same Upstream LDP Session Identifier. | the same Upstream LDP Session Identifier. | |||
b) If an LSP_Control_Block is found, pass the event 'LDP Release' to | b) If an LSP_Control_Block is found, pass the event `LDP Release' to | |||
its state machine. | its state machine. | |||
c) Otherwise, ignore the message. | c) Otherwise, ignore the message. | |||
- If an LSR receives an LDP-WITHDRAW from a downstream LSR: | - If an LSR receives an LDP-WITHDRAW from a downstream LSR: | |||
a) Find an LSP_Control_Block which has the same Downstream Label and | a) Find an LSP_Control_Block which has the same Downstream Label and | |||
the same Downstream LDP Session Identifier. | the same Downstream LDP Session Identifier. | |||
b) If an LSP_Control_Block is found, pass the event 'LDP Withdraw' to | b) If an LSP_Control_Block is found, pass the event `LDP Withdraw' to | |||
its state machine. | its state machine. | |||
c) Otherwise, ignore the LDP-WITHDRAW message and send a LDP-RELEASE | c) Otherwise, ignore the LDP-WITHDRAW and send a LDP-RELEASE | |||
message downstream. | downstream. | |||
- If an upstream LDP peer is lost: | - If an upstream LDP peer is lost: | |||
a) Find all the LSP_Control_Blocks whose upstream LDP peer is that | a) Find all the LSP_Control_Blocks whose upstream LDP peer is that | |||
LSR. | LSR. | |||
b) Then pass the event 'Upstream Lost' to their state machines. | b) Then pass the event `Upstream Lost' to their state machines. | |||
- If a downstream LDP peer is lost: | - If a downstream LDP peer is lost: | |||
a) Find all the LSP_Control_Blocks whose downstream LDP peer is that | a) Find all the LSP_Control_Blocks whose downstream LDP peer is that | |||
LSR. | LSR. | |||
b) Then pass the event 'Downstream Lost' to their state machines. | b) Then pass the event `Downstream Lost' to their state machines. | |||
- If the LSR detects a new next hop for an FEC: | - If the LSR detects a new next hop for an FEC: | |||
For each LSP which needs "local repair", or it needs "global repair" | For each LSP which needs "local repair", or it needs "global repair" | |||
and it is the ingress of the LSP, pass event "Internal New NH" to its | and it is the ingress of the LSP, pass event "Internal New NH" to its | |||
state machine. | state machine. | |||
- If an LSR receives an LDP-Abort from an upstream LSR: | - If an LSR receives an LDP-Abort from an upstream LSR: | |||
a) Extract the LDP Request ID value from the LDP-Abort message. | a) Extract the LDP Request ID value from the LDP-Abort message. | |||
b) Find an LSP_Control_Block which has the same Upstream Label | b) Find an LSP_Control_Block which has the same Upstream Label | |||
Request ID and the same Upstream LDP Session Identifier. | Request ID and the same Upstream LDP Session Identifier. | |||
c) If an LSP_Control_Block is found, pass the event 'LDP Upstream | c) If an LSP_Control_Block is found, pass the event `LDP Upstream | |||
Abort' to its state machine. | Abort' to its state machine. | |||
d) Otherwise, ignore the message. | d) Otherwise, ignore the message. | |||
- If the LSR receives an LDP-NAK from a downstream LSR: | - If the LSR receives an LDP-NAK from a downstream LSR: | |||
a) Extract the LDP Request ID value from the LDP-NAK. | a) Extract the LDP Request ID value from the LDP-NAK. | |||
b) Find an LSP_Control_Block which has the same Downstream Label | b) Find an LSP_Control_Block which has the same Downstream Label | |||
Request ID and the same Downstream LDP Session Identifier. | Request ID and the same Downstream LDP Session Identifier. | |||
c) If an LSP_Control_Block is found, pass the event | c) If an LSP_Control_Block is found, pass the event `LDP Downstream | |||
NAK' to its state machine. | ||||
d) Otherwise, ignore the message. | d) Otherwise, ignore the message. | |||
3.2. ATM Switch LSR with VC-merge | 3.2. ATM Switch LSR with VC-merge | |||
3.2.1 VC-merge | 3.2.1 VC-merge | |||
A VC-merge capable LSR can map multiple incoming labels(VPI/VCI) into | A VC-merge capable LSR can map multiple incoming labels (VPI/VCI) | |||
one outgoing label. It is possible that this LSR can only merge a | into one outgoing label. It is possible that this LSR can only merge | |||
limited number of incoming labels into a single outgoing label. As | a limited number of incoming labels into a single outgoing label. As | |||
described in [Ref2], suppose, for example, that due to some hardware | described in [2], suppose, for example, that due to some hardware | |||
limitation a node is capable of merging four incoming labels into a | limitation a node is capable of merging four incoming labels into a | |||
single outgoing label. Suppose however, that this particular node has | single outgoing label. Suppose however, that this particular node has | |||
six incoming labels arriving at it for a particular FEC. In this | six incoming labels arriving at it for a particular FEC. In this | |||
case, this node may merge these into two outgoing labels. | case, this node may merge these into two outgoing labels. | |||
When an upstream LSR has a limited merging capability, it is | When an upstream LSR has a limited merging capability, it is | |||
difficult for a downstream LSR to know how many labels should be | difficult for a downstream LSR to know how many labels should be | |||
assigned to each FEC. In this case, downstream-on-demand is | assigned to each FEC. In this case, downstream-on-demand is | |||
recommended. | recommended. | |||
3.2.2 Control Block | 3.2.2 Control Block | |||
There are 3 types of control blocks involved: | There are 3 types of control blocks involved: | |||
Upstream_LSP_Control_Block, Downstream_LSP_Control_Block, and Next | Upstream_LSP_Control_Block, Downstream_LSP_Control_Block, and Next | |||
Hop Trigger Control Block. | Hop Trigger Control Block. | |||
There is one Upstream_LSP_Control_Block for each LDP-REQUEST | There is one Upstream_LSP_Control_Block for each LDP-REQUEST | |||
received. | received. | |||
There is one Downstream_LSP_Control_Block for each unique LDP- | There is one Downstream_LSP_Control_Block for each unique LDP-REQUEST | |||
REQUEST sent to a downstream LSR. There can be multiple | sent to a downstream LSR. There can be multiple | |||
Downstream_LSP_Control_Blocks per FEC in an LSR. This can be the | Downstream_LSP_Control_Blocks per FEC in an LSR. This can be the | |||
result of an upstream LSR asking for a label of an FEC. This LSR must | result of an upstream LSR asking for a label for an FEC. This LSR | |||
assign a unique upstream label and it can not merge this upstream | must assign a unique upstream label and it can not merge this | |||
label into an existing downstream label of this FEC. | upstream label into an existing downstream label for this FEC. | |||
There is one Next Hop Trigger Control Block for each FEC which was | There is one Next Hop Trigger Control Block for each FEC for which a | |||
detected with a better next hop and the LSR decides to switch over to | better next hop has been detected and the LSR has decided to switch | |||
this better next hop. It could be the result of "local repair" or | to this better next hop. It could be the result of "local repair" or | |||
"global repair" if the LSR is the ingress LSR of the LSP. | "global repair" if the LSR is the ingress LSR of the LSP. | |||
A Downstream_LSP_Control_Block contains a list of pointers to | A Downstream_LSP_Control_Block contains a list of pointers to | |||
Upstream_LSP_Control_Blocks or the Next Hop Trigger Control Block. | Upstream_LSP_Control_Blocks or the Next Hop Trigger Control Block. | |||
This means that this LSR has decided to map the multiple labels | This means that this LSR has decided to map the multiple labels | |||
listed in the Upstream_LSP_Control_Blocks and the Next Hop Trigger | listed in the Upstream_LSP_Control_Blocks and the Next Hop Trigger | |||
Control Block into a single label listed in the | Control Block into a single label listed in the | |||
Downstream_LSP_Control_Block. | Downstream_LSP_Control_Block. | |||
An Upstream_LSP_Control_Block may contain the following information: | An Upstream_LSP_Control_Block may contain the following information: | |||
- Upstream LDP Session Identifier | - Upstream LDP Session Identifier | |||
- State | - State | |||
- Upstream Label(assigned by this LSR) | - Upstream Label(assigned by this LSR) | |||
- Downstream_LSP_Control_Block pointer | - Downstream_LSP_Control_Block pointer | |||
- Upstream LDP Request ID (assigned by the Upstream LSR in | - Upstream LDP Request ID (assigned by the upstream LSR in | |||
downstream-on-demand mode) | downstream-on-demand mode) | |||
- Next_Hop_Trigger_Block pointer | - Next_Hop_Trigger_Block pointer | |||
Upstream Label and Upstream LDP Session Identifier can be used to | Upstream Label and Upstream LDP Session Identifier can be used to | |||
locate a unique Upstream_LSP_Control_Block. | locate a unique Upstream_LSP_Control_Block. | |||
If an LSR is using downstream-on-demand mode, it can use the Upstream | If an LSR is using downstream-on-demand mode, it can use the Upstream | |||
LDP Request ID and the Upstream LDP Session Identifier to locate a | LDP Request ID and the Upstream LDP Session Identifier to locate a | |||
unique Upstream_LSP_Control_Block. | unique Upstream_LSP_Control_Block. | |||
skipping to change at page 33, line 8 | skipping to change at page 32, line 34 | |||
The following diagram details the relationship between these 2 types | The following diagram details the relationship between these 2 types | |||
of control blocks: | of control blocks: | |||
For example, the LSR has decided to merge 3 LDP-REQUESTs of a FEC | For example, the LSR has decided to merge 3 LDP-REQUESTs of a FEC | |||
from upstream LSR1,LSR2,LSR3 into one LDP-REQUEST and sent it to a | from upstream LSR1,LSR2,LSR3 into one LDP-REQUEST and sent it to a | |||
downstream LSR4. | downstream LSR4. | |||
+---------------------+ | +---------------------+ | |||
| | | | | | |||
| Upstream_LSP_Control| | | Upstream_LSP_Control| | |||
| _Block for Upstream|-------+ | | _Block for Upstream|------+ | |||
| LSR1 | | | | LSR1 | | | |||
+---------------------+ | | +---------------------+ | | |||
| | | | |||
| | ||||
| | ||||
| | ||||
| | ||||
+---------------------+ | | +---------------------+ | | |||
| | | | | | | | |||
| Upstream_LSP_Control| | (merged into) | | Upstream_LSP_Control| | (merged into) | |||
| _Block for Upstream |-------+ | | _Block for Upstream |------+ | |||
| LSR2 | | | | LSR2 | | | |||
+---------------------+ | | +---------------------+ | +------------------------------+ | |||
| | ||||
| | ||||
| | ||||
| +------------------------------+ | ||||
| | | | ||||
+-->| Downstream_LSP_Control_Block | | ||||
| | for Downstream LSR4 | | ||||
| | | | | | | | |||
| +------------------------------+ | +---------------------+ +--->| Downstream_LSP_Control_Block | | |||
| | | Next_Hop_Trigger_ | | | for Downstream LSR4 | | |||
+---------------------+ | | | LSP_Control_Block |------+ | | | |||
| Next_Hop_Trigger_ | | | | | +------------------------------+ | |||
| LSP_Control_Block | | | ||||
| |-------+ | ||||
| | | ||||
+---------------------+ | +---------------------+ | |||
3.2.3 State Machines for Downstream-on-demand Mode | 3.2.3 State Machines for Downstream-on-demand Mode | |||
The following sections describe the state machines used in | The following sections describe the state machines used in | |||
downstream-on-demand mode. | downstream-on-demand mode. | |||
3.2.3.1 State of the Upstream_LSP_Control_Block's State Machine | 3.2.3.1 State of the Upstream_LSP_Control_Block's State Machine | |||
for Downstream-on-demand Mode | for Downstream-on-demand Mode | |||
skipping to change at page 34, line 4 | skipping to change at page 33, line 18 | |||
downstream-on-demand mode. | downstream-on-demand mode. | |||
3.2.3.1 State of the Upstream_LSP_Control_Block's State Machine | 3.2.3.1 State of the Upstream_LSP_Control_Block's State Machine | |||
for Downstream-on-demand Mode | for Downstream-on-demand Mode | |||
-- IDLE | -- IDLE | |||
This is the initial LSP state. | This is the initial LSP state. | |||
-- RESPONSE_AWAITED | -- RESPONSE_AWAITED | |||
This state means that the LSR has received and processed an LDP- | This state means that the LSR has received and processed an LDP- | |||
REQUEST from an upstream LSR, and has sent a new LDP-REQUEST towards | REQUEST from an upstream LSR, and has sent a new LDP-REQUEST towards | |||
a downstream LSR. The LSR is waiting for the LDP-MAPPING message from | a downstream LSR. The LSR is waiting for the LDP-MAPPING from the | |||
the downstream LSR. | downstream LSR. | |||
-- ESTABLISHED | -- ESTABLISHED | |||
This state means that the LSR has received the LDP-MAPPING message | This state means that the LSR has received the LDP-MAPPING from the | |||
from the downstream LSR and the LSP is up and operational. | downstream LSR and the LSP is up and operational. | |||
-- RELEASE_AWAITED | -- RELEASE_AWAITED | |||
This state means that the LSR has sent a LDP-WITHDRAW message | This state means that the LSR has sent a LDP-WITHDRAW upstream and is | |||
upstream and is waiting for the LDP-RELEASE before freeing up the | waiting for the LDP-RELEASE before freeing up the label resource. | |||
label resource. | ||||
3.2.3.2 Events of the Upstream_LSP_Control_Block's State Machine | 3.2.3.2 Events of the Upstream_LSP_Control_Block's State Machine | |||
for Downstream-on-demand Mode | for Downstream-on-demand Mode | |||
-- LDP Request | -- LDP Request | |||
The LSR receives an LDP-REQUEST from an upstream LSR. | The LSR receives an LDP-REQUEST from an upstream LSR. | |||
-- Internal Downstream Mapping | -- Internal Downstream Mapping | |||
This event is sent by one Downstream_LSP_Control_Block's state | This event is sent by one Downstream_LSP_Control_Block's state | |||
machine. This Downstream_LSP_Control_Block is the merged | machine. This Downstream_LSP_Control_Block is the merged | |||
Downstream_LSP_Control_Block of this Upstream_LSP_Control_Block. The | Downstream_LSP_Control_Block of this Upstream_LSP_Control_Block. The | |||
event is the result of receiving an LDP-MAPPING message by the | event is the result of receiving an LDP-MAPPING by the | |||
Downstream_LSP_Control_Block's state machine. | Downstream_LSP_Control_Block's state machine. | |||
-- LDP Release | -- LDP Release | |||
The LSR receives an LDP-RELEASE from an upstream LSR. | The LSR receives an LDP-RELEASE from an upstream LSR. | |||
-- Internal Downstream Withdraw | -- Internal Downstream Withdraw | |||
This event is sent by one Downstream_LSP_Control_Block's state | This event is sent by one Downstream_LSP_Control_Block's state | |||
machine. This Downstream_LSP_Control_Block is the merged | machine. This Downstream_LSP_Control_Block is the merged | |||
Downstream_LSP_Control_Block of this Upstream_LSP_Control_Block. The | Downstream_LSP_Control_Block of this Upstream_LSP_Control_Block. The | |||
event is the result of receiving an LDP-WITHDRAW message by the | event is the result of receiving an LDP-WITHDRAW by the | |||
Downstream_LSP_Control_Block's state machine. | Downstream_LSP_Control_Block's state machine. | |||
-- LDP Upstream Abort | -- LDP Upstream Abort | |||
The LSR receives an LDP-ABORT from an upstream LSR. | The LSR receives an LDP-ABORT from an upstream LSR. | |||
-- Internal Downstream Nak | -- Internal Downstream NAK | |||
This event is sent by one Downstream_LSP_Control_Block's state | This event is sent by one Downstream_LSP_Control_Block's state | |||
machine. This Downstream_LSP_Control_Block is the merged | machine. This Downstream_LSP_Control_Block is the merged | |||
Downstream_LSP_Control_Block of this Upstream_LSP_Control_Block. The | Downstream_LSP_Control_Block of this Upstream_LSP_Control_Block. The | |||
event is the result of receiving an LDP-NAK message by the | event is the result of receiving an LDP-NAK by the | |||
Downstream_LSP_Control_Block's state machine, or it detects an error. | Downstream_LSP_Control_Block's state machine, or it detects an error. | |||
-- Upstream Lost | -- Upstream Lost | |||
The LSR loses the LDP session with its upstream LDP peer. | The LSR loses the LDP session with its upstream LDP peer. | |||
-- Internal New NH | -- Internal New NH | |||
The LSR detects there is better next hop and decides to establish the | The LSR detects there is better next hop and decides to establish the | |||
lsp through this better next hop | lsp through this better next hop | |||
skipping to change at page 36, line 15 | skipping to change at page 35, line 15 | |||
3.2.3.3 State Transitions of the Upstream_LSP_Control_Block's State | 3.2.3.3 State Transitions of the Upstream_LSP_Control_Block's State | |||
Machine for Downstream-on-demand Mode | Machine for Downstream-on-demand Mode | |||
+-------------------+ | +-------------------+ | |||
| | | | | | |||
+-------->| IDLE |<------------+ | +-------->| IDLE |<------------+ | |||
| | | | | | | | | | |||
| +-------------------+ | | | +-------------------+ | | |||
|(LDP Abort) | | | |(LDP Abort) | | | |||
|(Internal |(LDP Request) | | |(Internal |(LDP Request) | | |||
| Downstream Nak) | | | | Downstream NAK) | | | |||
|(Upstream Lost) | | | |(Upstream Lost) | | | |||
| v | | | v | | |||
| +-------------------+ | | | +-------------------+ | | |||
| | | | | | | | | | |||
+---------| RESPONSE_AWAITED | | | +---------| RESPONSE_AWAITED | | | |||
| | |(Upstream Lost) | | | |(Upstream Lost) | |||
+-------------------+ | | +-------------------+ | | |||
| | | | | | |||
|(Internal Downstream | | |(Internal Downstream | | |||
| mapping) |(LDP Release) | | mapping) |(LDP Release) | |||
| | | | | | |||
v | | v | | |||
+-------------------+ | | +-------------------+ | | |||
| | |(LDP Abort) | | | |(LDP Abort) | |||
| ESTABLISHED |------->-----+ | | ESTABLISHED |------->-----+ | |||
| | | | | | | | |||
+-------------------+ | | +-------------------+ | | |||
| | | | | | |||
| | | | | | |||
|(Internal Downstream Withdraw) | |(Internal Downstream Withdraw) | |||
|(Internal Downstream Nak) | |(Internal Downstream NAK) | |||
v | v | |||
+-------------------+ | | +-------------------+ | | |||
| | | | | | | | |||
|RELEASE_AWAITED |------->-----+ | |RELEASE_AWAITED |------->-----+ | |||
| | | | | | |||
+-------------------+ | +-------------------+ | |||
3.2.3.4 Upstream_LSP_Control_Block's State Machine | 3.2.3.4 Upstream_LSP_Control_Block's State Machine | |||
for Downstream-on-demand Mode | for Downstream-on-demand Mode | |||
3.2.3.4.1 State -- "IDLE" | 3.2.3.4.1 State -- "IDLE" | |||
State: IDLE | State: IDLE | |||
Event: LDP Request | Event: LDP Request | |||
New State: Depends upon the action routine. | New State: Depends upon the action routine. | |||
Actions: | Actions: | |||
If this LSR is the LSP Egress or Proxy Egress [Ref2], | If this LSR is the LSP Egress or Proxy Egress [2], | |||
Then: | Then: | |||
choose an upstream label, allocate the resources, connect this | choose an upstream label, allocate the resources, connect this | |||
upstream label to the local IP forwarding module, send an LDP- | upstream label to the local IP forwarding module, send an LDP- | |||
MAPPING upstream with the upstream label and go to the state | MAPPING upstream with the upstream label and go to the state | |||
'ESTABLISHED'. | `ESTABLISHED'. | |||
else | else | |||
Obtain a next hop(or interface). Find a | Obtain a next hop(or interface). Find a | |||
Downstream_LSP_Control_Block which has the same FEC and the same | Downstream_LSP_Control_Block which has the same FEC and the same | |||
next hop and also is able to merge more input labels. If not found, | next hop and also is able to merge more input labels. If not found, | |||
create a new Downstream_LSP_Control_Block with the state 'IDLE'. | create a new Downstream_LSP_Control_Block with the state `IDLE'. | |||
If the state of the Downstream_LSP_Control_Block is `ESTABLISHED', | If the state of the Downstream_LSP_Control_Block is `ESTABLISHED', | |||
choose an upstream label, connect the upstream label with the | choose an upstream label, connect the upstream label with the | |||
downstream label and send an LDP-MAPPING message upstream with the | downstream label and send an LDP-MAPPING upstream with the upstream | |||
upstream label, and go to the state `ESTABLISHED'. | label, and go to the state `ESTABLISHED'. | |||
If the state of Downstream_LSP_Control_Block is not `ESTABLISHED', | If the state of Downstream_LSP_Control_Block is not `ESTABLISHED', | |||
set the state of the Upstream_LSP_Control_Block to | set the state of the Upstream_LSP_Control_Block to | |||
'RESPONSE_AWAITED'. If the LSR use the independent control | `RESPONSE_AWAITED'. If the LSR use the independent control mode | |||
mode[Ref2], choose an upstream label, and send an LDP-MAPPING | [2], choose an upstream label, and send an LDP-MAPPING upstream. | |||
message upstream. | ||||
Pass the event `Internal AddUpstream' to the | Pass the event `Internal AddUpstream' to the | |||
Downstream_LSP_Control_Block's state machine. | Downstream_LSP_Control_Block's state machine. | |||
If unable to process the request for any reason, issue an LDP-NAK | If unable to process the request for any reason, issue an LDP-NAK to | |||
message to the sender with the appropriate error code and delete the | the sender with the appropriate error code and delete the control | |||
control block. | block. | |||
State: IDLE | State: IDLE | |||
Event: Internal Downstream Mapping | Event: Internal Downstream Mapping | |||
New State: IDLE | New State: IDLE | |||
Actions: | Actions: | |||
Ignore the event. It is an internal implementation error. | Ignore the event. It is an internal implementation error. | |||
State: IDLE | State: IDLE | |||
Event: LDP Release | Event: LDP Release | |||
New State: IDLE | New State: IDLE | |||
skipping to change at page 38, line 40 | skipping to change at page 37, line 39 | |||
Event: LDP Upstream Abort | Event: LDP Upstream Abort | |||
New State: IDLE | New State: IDLE | |||
Actions: | Actions: | |||
Ignore the event. It is an internal implementation error. | Ignore the event. It is an internal implementation error. | |||
State: IDLE | State: IDLE | |||
Event: Internal Downstream Nak | Event: Internal Downstream NAK | |||
New State: IDLE | New State: IDLE | |||
Actions: | Actions: | |||
Ignore the event. It is an internal implementation error. | Ignore the event. It is an internal implementation error. | |||
State: IDLE | State: IDLE | |||
Event: Upstream Lost | Event: Upstream Lost | |||
New State: IDLE | ||||
New State: IDLE | ||||
Actions: | Actions: | |||
Ignore the event. It is an internal implementation error. | Ignore the event. It is an internal implementation error. | |||
State: IDLE | State: IDLE | |||
Event: Internal Re-Cross-Connect | Event: Internal Re-Cross-Connect | |||
New State: IDLE | New State: IDLE | |||
skipping to change at page 40, line 10 | skipping to change at page 39, line 8 | |||
New State: Depends on the action routine | New State: Depends on the action routine | |||
Actions: | Actions: | |||
If the LSR uses the ordered control mode, assign an upstream label. | If the LSR uses the ordered control mode, assign an upstream label. | |||
Connect the upstream label to the downstream label and allocate the | Connect the upstream label to the downstream label and allocate the | |||
resources. | resources. | |||
Send an LDP-MAPPING message upstream with the upstream label. | Send an LDP-MAPPING upstream with the upstream label. | |||
Then go to the state 'ESTABLISHED'. | Then go to the state `ESTABLISHED'. | |||
If unable to process the message for any reason, issue an LDP-NAK | If unable to process the message for any reason, issue an LDP-NAK | |||
message upstream and an LDP-RELEASE message downstream and delete the | upstream and an LDP-RELEASE downstream and delete the control block. | |||
control block. | ||||
State: RESPONSE_AWAITED | State: RESPONSE_AWAITED | |||
Event: LDP Release | Event: LDP Release | |||
New State: RESPONSE_AWAITED | New State: RESPONSE_AWAITED | |||
Actions | Actions | |||
Ignore the event. It is an protocol error from the upstream peer. | Ignore the event. It is an protocol error from the upstream peer. | |||
skipping to change at page 40, line 49 | skipping to change at page 39, line 46 | |||
Event: LDP Upstream Abort | Event: LDP Upstream Abort | |||
New State: IDLE | New State: IDLE | |||
Actions | Actions | |||
If the LSR uses the independent control mode, free the upstream label | If the LSR uses the independent control mode, free the upstream label | |||
and the resources. | and the resources. | |||
Send the event 'Internal DeleteUpstream' to its | Send the event `Internal DeleteUpstream' to its | |||
Downstream_LSP_Control_Block's state machine. | Downstream_LSP_Control_Block's state machine. | |||
Delete the control block. | Delete the control block. | |||
State: RESPONSE_AWAITED | State: RESPONSE_AWAITED | |||
Event: Internal Downstream NAK | ||||
Event: Internal Downstream Nak | ||||
New State: IDLE | New State: IDLE | |||
Actions: | Actions: | |||
If the LSR uses the independent control mode, free the upstream label | If the LSR uses the independent control mode, free the upstream label | |||
and the resources. Then, send an LDP-WITHDRAW message upstream. | and the resources. Then, send an LDP-WITHDRAW upstream. | |||
If the LSR uses the ordered control mode, propagate the LDP-NAK | If the LSR uses the ordered control mode, propagate the LDP-NAK | |||
message upstream. | upstream. | |||
Delete the control block. | Delete the control block. | |||
State: RESPONSE_AWAITED | State: RESPONSE_AWAITED | |||
Event: Upstream Lost | Event: Upstream Lost | |||
New State: IDLE | New State: IDLE | |||
Actions | Actions | |||
If the LSR uses the independent control mode, free the upstream label | If the LSR uses the independent control mode, free the upstream label | |||
and the resources. | and the resources. | |||
Send the event 'Internal DeleteUpstream' to its | Send the event `Internal DeleteUpstream' to its | |||
Downstream_LSP_Control_Block's state machine. | Downstream_LSP_Control_Block's state machine. | |||
Delete the control block. | Delete the control block. | |||
State: RESPONSE_AWAITED | State: RESPONSE_AWAITED | |||
Event: Internal Re-Cross-Connect | Event: Internal Re-Cross-Connect | |||
New State: RESPONSE_AWAITED | New State: RESPONSE_AWAITED | |||
skipping to change at page 42, line 4 | skipping to change at page 40, line 49 | |||
Actions: | Actions: | |||
Ignore the event. It is an internal implementation error. | Ignore the event. It is an internal implementation error. | |||
State: RESPONSE_AWAITED | State: RESPONSE_AWAITED | |||
Event: Internal New NH | Event: Internal New NH | |||
New State: depends on the actions | New State: depends on the actions | |||
Actions: | Actions: | |||
Send event "Internal DeleteUpstream" to its old downstream control | Send event `Internal DeleteUpstream' to its old downstream control | |||
block. | block. | |||
Find a Downstream_LSP_Control_Block which has the same FEC and the | Find a Downstream_LSP_Control_Block which has the same FEC and the | |||
same next hop and also is able to merge more input labels. If not | same next hop and also is able to merge more input labels. If not | |||
found, create a new Downstream_LSP_Control_Block with the state | found, create a new Downstream_LSP_Control_Block with the state | |||
'IDLE'. | `IDLE'. | |||
If the state of the Downstream_LSP_Control_Block is `ESTABLISHED', | If the state of the Downstream_LSP_Control_Block is `ESTABLISHED', | |||
choose an upstream label, connect the upstream label with the | choose an upstream label, connect the upstream label with the | |||
downstream label and send an LDP-MAPPING message upstream with the | downstream label and send an LDP-MAPPING upstream with the upstream | |||
upstream label, and go to the state `ESTABLISHED'. | label, and go to the state `ESTABLISHED'. | |||
If the state of Downstream_LSP_Control_Block is not `ESTABLISHED', | If the state of Downstream_LSP_Control_Block is not `ESTABLISHED', | |||
set the state of the Upstream_LSP_Control_Block to | set the state of the Upstream_LSP_Control_Block to | |||
'RESPONSE_AWAITED'. | `RESPONSE_AWAITED'. | |||
Pass the event `Internal AddUpstream' to the new | Pass the event `Internal AddUpstream' to the new | |||
Downstream_LSP_Control_Block's state machine. | Downstream_LSP_Control_Block's state machine. | |||
3.2.3.4.3 State -- "ESTABLISHED" | 3.2.3.4.3 State -- "ESTABLISHED" | |||
State: ESTABLISHED | State: ESTABLISHED | |||
Event: LDP Request | Event: LDP Request | |||
skipping to change at page 42, line 47 | skipping to change at page 41, line 46 | |||
State: ESTABLISHED | State: ESTABLISHED | |||
Event: Internal Downstream Mapping | Event: Internal Downstream Mapping | |||
New State: ESTABLISHED | New State: ESTABLISHED | |||
Actions | Actions | |||
Process the new attributes of the mapping and then propagate the | Process the new attributes of the mapping and then propagate the | |||
LDP-MAPPING message upstream. | LDP-MAPPING upstream. | |||
State: ESTABLISHED | State: ESTABLISHED | |||
Event: LDP Release | ||||
Event: LDP Release | ||||
New State: IDLE | New State: IDLE | |||
Actions | Actions | |||
Disconnect the upstream label from the downstream label, free the | Disconnect the upstream label from the downstream label, free the | |||
upstream label and resources. | upstream label and resources. | |||
Send the event 'Internal DeleteUpstream' to its | Send the event `Internal DeleteUpstream' to its | |||
Downstream_LSP_Control_Block's state machine. | Downstream_LSP_Control_Block's state machine. | |||
Send the event "Internal Destroy' to the Next_Hop_Trigger_Block's | Send the event `Internal Destroy' to the Next_Hop_Trigger_Block's | |||
state machine if the LSR was in the middle of switching over to the | state machine if the LSR was in the middle of switching over to the | |||
better next hop. | better next hop. | |||
Delete the control block. | Delete the control block. | |||
State: ESTABLISHED | State: ESTABLISHED | |||
Event: Internal Downstream Withdraw | Event: Internal Downstream Withdraw | |||
New State: Depends on the action routine | New State: Depends on the action routine | |||
Actions | Actions | |||
If it uses independent mode,set its state to 'IDLE' and create a | If it uses independent mode, set its state to `IDLE' and create a | |||
internal 'LDP Request' and send to its own state machine. | internal `LDP Request' and send to its own state machine. | |||
Else | Else | |||
Disconnect the upstream label from the downstream label. | Disconnect the upstream label from the downstream label. | |||
Propagate the LDP-WITHDRAW upstream and go to state | Propagate the LDP-WITHDRAW upstream and go to state | |||
'RELEASE_AWAITED'. | `RELEASE_AWAITED'. | |||
Send the event "Internal Destroy' to the Next_Hop_Trigger_Block's | Send the event `Internal Destroy' to the Next_Hop_Trigger_Block's | |||
state machine if the LSR was in the middle of switching over to the | state machine if the LSR was in the middle of switching over to the | |||
better next hop. | better next hop. | |||
State: ESTABLISHED | State: ESTABLISHED | |||
Event: LDP Upstream Abort | Event: LDP Upstream Abort | |||
New State: IDLE | New State: IDLE | |||
Actions | Actions | |||
Disconnect the upstream label from the downstream label, free the | Disconnect the upstream label from the downstream label, free the | |||
upstream label and the resources. | upstream label and the resources. | |||
Send the event 'Internal DeleteUpstream' to its | Send the event `Internal DeleteUpstream' to its | |||
Downstream_LSP_Control_Block's state machine. | Downstream_LSP_Control_Block's state machine. | |||
Send the event "Internal Destroy' to the Next_Hop_Trigger_Block's | Send the event `Internal Destroy' to the Next_Hop_Trigger_Block's | |||
state machine if the LSR was in the middle of switching over to the | state machine if the LSR was in the middle of switching over to the | |||
better next hop. | better next hop. | |||
Delete the control block. | Delete the control block. | |||
State: ESTABLISHED | State: ESTABLISHED | |||
Event: Internal Downstream Nak | Event: Internal Downstream NAK | |||
New State: Depends on the actions | New State: Depends on the actions | |||
Actions: | Actions: | |||
If it uses independent mode,set its state to 'IDLE' and create a | If it uses independent mode, set its state to `IDLE' and create a | |||
internal 'LDP Request' and send to its own state machine. | internal `LDP Request' and send to its own state machine. | |||
Else | Else | |||
Disconnect the upstream label from the downstream label | Disconnect the upstream label from the downstream label | |||
Send an LDP-WITHDRAW upstream and go to state 'RELEASE_AWAITED'. | Send an LDP-WITHDRAW upstream and go to state `RELEASE_AWAITED'. | |||
Send the event "Internal Destroy' to the Next_Hop_Trigger_Block's | Send the event `Internal Destroy' to the Next_Hop_Trigger_Block's | |||
state machine if the LSR was in the middle of switching over to the | state machine if the LSR was in the middle of switching over to the | |||
better next hop. | better next hop. | |||
State: ESTABLISHED | State: ESTABLISHED | |||
Event: Upstream Lost | Event: Upstream Lost | |||
New State: IDLE | New State: IDLE | |||
Actions: | Actions: | |||
Disconnect the upstream label from the downstream label, free the | Disconnect the upstream label from the downstream label, free the | |||
upstream label and the resources. | upstream label and the resources. | |||
Send the event 'Internal DeleteUpstream' to its | Send the event `Internal DeleteUpstream' to its | |||
Downstream_LSP_Control_Block's state machine. | Downstream_LSP_Control_Block's state machine. | |||
Send the event "Internal Destroy' to the Next_Hop_Trigger_Block's | Send the event `Internal Destroy' to the Next_Hop_Trigger_Block's | |||
state machine if the LSR was in the middle of switching over to the | state machine if the LSR was in the middle of switching over to the | |||
better next hop. | better next hop. | |||
Delete the control block. | Delete the control block. | |||
State: ESTABLISH | State: ESTABLISH | |||
Event: Internal Re-Cross-Connect | Event: Internal Re-Cross-Connect | |||
New State: ESTABLISH | New State: ESTABLISH | |||
Actions: | Actions: | |||
Reconnect the upstream lable to the new downstream lable. | Reconnect the upstream label to the new downstream label. | |||
Send the event 'Internal DeleteUpstream' to its old | Send the event `Internal DeleteUpstream' to its old | |||
Downstream_LSP_Control_Block's state machine. | Downstream_LSP_Control_Block's state machine. | |||
State: ESTABLISH | State: ESTABLISH | |||
Event: Internal New NH | Event: Internal New NH | |||
New State: ESTABLISH | New State: ESTABLISH | |||
Actions: | Actions: | |||
Create a new Next_Hop_Trigger_Control_Block and pass event | Create a new Next_Hop_Trigger_Control_Block and pass event `Internal | |||
New NH' to its state machine. | ||||
3.2.3.4.4 State -- "RELEASE_AWAITED" | 3.2.3.4.4 State -- "RELEASE_AWAITED" | |||
State: RELEASE_AWAITED | State: RELEASE_AWAITED | |||
Event: LDP Request | Event: LDP Request | |||
New State: RELEASE_AWAITED | New State: RELEASE_AWAITED | |||
Actions: | Actions: | |||
skipping to change at page 45, line 50 | skipping to change at page 44, line 49 | |||
Ignore the event. It is a protocol error from the upstream LSR. | Ignore the event. It is a protocol error from the upstream LSR. | |||
State: RELEASE_AWAITED | State: RELEASE_AWAITED | |||
Event: Internal Downstream Mapping | Event: Internal Downstream Mapping | |||
New State: RELEASE_AWAITED | New State: RELEASE_AWAITED | |||
Actions: | Actions: | |||
Ignore the event. It is an internal implementatin error. | Ignore the event. It is an internal implementation error. | |||
State: RELEASE_AWAITED | State: RELEASE_AWAITED | |||
Event: LDP Release | Event: LDP Release | |||
New State: IDLE | New State: IDLE | |||
Actions: | Actions: | |||
Free the upstream lable resource. and delete the control block. | Free the upstream label resource and delete the control block. | |||
State: RELEASE_AWAITED | State: RELEASE_AWAITED | |||
Event: Internal Downstream Withdraw | Event: Internal Downstream Withdraw | |||
New State: RELEASE_AWAITED | New State: RELEASE_AWAITED | |||
Actions: | Actions: | |||
Ignore the event. It is a protocol error from the downstream LSR. | Ignore the event. It is a protocol error from the downstream LSR. | |||
State: RELEASE_AWAITED | State: RELEASE_AWAITED | |||
Event: LDP Upstream Abort | Event: LDP Upstream Abort | |||
New State: IDLE | New State: IDLE | |||
Actions: | Actions: | |||
Free the upstream lable resource. and delete the control block. | Free the upstream label resource and delete the control block. | |||
State: RELEASE_AWAITED | State: RELEASE_AWAITED | |||
Event: Internal Downstream Nak | Event: Internal Downstream NAK | |||
New State: RELEASE_AWAITED | New State: RELEASE_AWAITED | |||
Actions: | Actions: | |||
Ignore the event. And continue waiting for the LDP-RELEASE msg. | Ignore the event. And continue waiting for the LDP-RELEASE. | |||
State: RELEASE_AWAITED | State: RELEASE_AWAITED | |||
Event: Upstream Lost | Event: Upstream Lost | |||
New State: IDLE | New State: IDLE | |||
Actions: | Actions: | |||
Free the upstream lable resource. and delete the control block. | Free the upstream label resource and delete the control block. | |||
State: RELEASE_AWAITED | State: RELEASE_AWAITED | |||
Event: Internal New NH | Event: Internal New NH | |||
New State: RELEASE_AWAITED | New State: RELEASE_AWAITED | |||
Actions: | Actions: | |||
Ignore the event. And continue waiting for the LDP-RELEASE msg. | Ignore the event. And continue waiting for the LDP-RELEASE. | |||
State: RELEASE_AWAITED | State: RELEASE_AWAITED | |||
Event: Internal Re-Cross-Connect | Event: Internal Re-Cross-Connect | |||
New State: RELEASE_AWAITED | New State: RELEASE_AWAITED | |||
Actions: | Actions: | |||
Ignore the event. It is an internal implementation error. | Ignore the event. It is an internal implementation error. | |||
skipping to change at page 47, line 37 | skipping to change at page 46, line 37 | |||
-- IDLE | -- IDLE | |||
This is the initial LSP state. | This is the initial LSP state. | |||
-- RESPONSE_AWAITED | -- RESPONSE_AWAITED | |||
This state means that the LSR has received an LDP-REQUEST from an | This state means that the LSR has received an LDP-REQUEST from an | |||
upstream LSR, has processed the LDP-REQUEST, and has sent a new LDP- | upstream LSR, has processed the LDP-REQUEST, and has sent a new LDP- | |||
REQUEST towards a downstream LSR. The LSR is waiting for the LDP- | REQUEST towards a downstream LSR. The LSR is waiting for the LDP- | |||
MAPPING message from the downstream LSR. | MAPPING from the downstream LSR. | |||
-- ESTABLISHED | -- ESTABLISHED | |||
This state means that the LSR has received the LDP-MAPPING message | This state means that the LSR has received the LDP-MAPPING from the | |||
from the downstream LSR and the LSP is up and operational. | downstream LSR and the LSP is up and operational. | |||
3.2.3.6 Events of the Downstream_LSP_Control_Block's State Machine | 3.2.3.6 Events of the Downstream_LSP_Control_Block's State Machine | |||
for Downstream-on-demand Mode | for Downstream-on-demand Mode | |||
-- Internal AddUpstream | -- Internal AddUpstream | |||
This event is sent by an Upstream_LSP_Control_Block's state machine | This event is sent by an Upstream_LSP_Control_Block's state machine | |||
when it is created. | when it is created. | |||
-- Internal DeleteUpstream | -- Internal DeleteUpstream | |||
This event is sent by an Upstream_LSP_Control_Block's state machine | This event is sent by an Upstream_LSP_Control_Block's state machine | |||
when it is deleted. | when it is deleted. | |||
-- LDP Mapping | -- LDP Mapping | |||
The LSR receives an LDP-MAPPING message from a downstream LSR. | The LSR receives an LDP-MAPPING from a downstream LSR. | |||
-- LDP Withdraw | -- LDP Withdraw | |||
The LSR receives an LDP-WITHDRAW message from a downstream LSR. | The LSR receives an LDP-WITHDRAW from a downstream LSR. | |||
-- LDP Downstream Nak | -- LDP Downstream NAK | |||
The LSR receives an LDP-NAK from a downstream LSR. | The LSR receives an LDP-NAK from a downstream LSR. | |||
-- Downstream Lost | -- Downstream Lost | |||
The LSR loses the LDP session with its downstream LSR. | The LSR loses the LDP session with its downstream LSR. | |||
3.2.3.7 State Transitions of the Downstream_LSP_Control_Block'S | 3.2.3.7 State Transitions of the Downstream_LSP_Control_Block's | |||
State Machine for Downstream-on-demand mode | State Machine for Downstream-on-demand mode | |||
+-------------------+ | +-------------------+ | |||
| | | | | | |||
| IDLE |<--------------+ | | IDLE |<--------------+ | |||
| | |(last Internal | | | |(last Internal | |||
+-------------------+ | DeleteUpstream) | +-------------------+ | DeleteUpstream) | |||
| |(LDP Withdraw) | | |(LDP Withdraw) | |||
|(1st Internal AddUpstream)| | |(1st Internal AddUpstream)| | |||
| |(LDP Downstream | | |(LDP Downstream | |||
v | Nak) | v | NAK) | |||
+-------------------+ |(Downstream | +-------------------+ |(Downstream | |||
| | | Lost) | | | | Lost) | |||
| RESPONSE_AWAITED |---------->----^ | | RESPONSE_AWAITED |---------->----^ | |||
| | | | | | | | |||
+-------------------+ | | +-------------------+ | | |||
| | | | | | |||
|(LDP Mapping) | | |(LDP Mapping) | | |||
| | | | | | |||
v | | v | | |||
+-------------------+ | | +-------------------+ | | |||
| | | | | | | | |||
| ESTABLISHED |-------->------^ | | ESTABLISHED |-------->------^ | |||
| | | | | | |||
+-------------------+ | +-------------------+ | |||
3.2.3.8 Downstream_LSP_Control_Block'S State Machine for | 3.2.3.8 Downstream_LSP_Control_Block's State Machine for | |||
Downstream-on-demand Mode. | Downstream-on-demand Mode. | |||
3.2.3.8.1 State -- "IDLE" | 3.2.3.8.1 State -- "IDLE" | |||
State: IDLE | State: IDLE | |||
Event: Internal AddUpstream | Event: Internal AddUpstream | |||
New State: RESPONSE_AWAITED | New State: RESPONSE_AWAITED | |||
Actions | Actions | |||
Initialize the list of pointers in the Upstream_LSP_Control_Block to | Initialize the list of pointers in the Upstream_LSP_Control_Block to | |||
contain the newly added upstream pointer. | contain the newly added upstream pointer. | |||
Send a new LDP-REQUEST downstream and go to the state | Send a new LDP-REQUEST downstream and go to the state | |||
'RESPONSE_AWAITED'. | `RESPONSE_AWAITED'. | |||
State: IDLE | State: IDLE | |||
Event: Internal DeleteUpstream | Event: Internal DeleteUpstream | |||
New State: IDLE | New State: IDLE | |||
Actions | Actions | |||
Ignore the event. It is an internal implementation error. | Ignore the event. It is an internal implementation error. | |||
skipping to change at page 50, line 37 | skipping to change at page 49, line 37 | |||
Event: LDP Withdraw | Event: LDP Withdraw | |||
New State: IDLE | New State: IDLE | |||
Actions | Actions | |||
Ignore the event.It is an internal implementation error. | Ignore the event.It is an internal implementation error. | |||
State: IDLE | State: IDLE | |||
Event: LDP Downstream Nak | Event: LDP Downstream NAK | |||
New State: IDLE | New State: IDLE | |||
Actions | Actions | |||
Ignore the event. It is an internal implementation error. | Ignore the event. It is an internal implementation error. | |||
State: IDLE | State: IDLE | |||
Event: Downstream Lost | Event: Downstream Lost | |||
skipping to change at page 51, line 42 | skipping to change at page 50, line 42 | |||
State: RESPONSE_AWAITED | State: RESPONSE_AWAITED | |||
Event: LDP Mapping | Event: LDP Mapping | |||
New State: ESTABLISHED | New State: ESTABLISHED | |||
Actions | Actions | |||
For each Upstream_LSP_Control_Block in the Upstream_LSP_Control_Block | For each Upstream_LSP_Control_Block in the Upstream_LSP_Control_Block | |||
pointers list, pass the event 'Internal Downstream Mapping' to its | pointers list, pass the event `Internal Downstream Mapping' to its | |||
state machine. | state machine. | |||
State: RESPONSE_AWAITED | State: RESPONSE_AWAITED | |||
Event: LDP Withdraw | Event: LDP Withdraw | |||
New State: RESPONSE_AWAITED | New State: RESPONSE_AWAITED | |||
Actions | Actions | |||
It is a protocol error from the downstream LDP peer and send a LDP- | It is a protocol error from the downstream LDP peer; send a LDP- | |||
RELEASE msg downstream | RELEASE downstream | |||
State: RESPONSE_AWAITED | State: RESPONSE_AWAITED | |||
Event: LDP Downstream Nak | Event: LDP Downstream NAK | |||
New State: IDLE | New State: IDLE | |||
Actions | Actions | |||
For each Upstream_LSP_Control_Block in the Upstream_LSP_Control_Block | For each Upstream_LSP_Control_Block in the Upstream_LSP_Control_Block | |||
pointers list, pass the event 'Internal Downstream Nak' to its state | pointers list, pass the event `Internal Downstream NAK' to its state | |||
machine. | machine. | |||
Release the resources, and delete the control block. | Release the resources, and delete the control block. | |||
State: RESPONSE_AWAITED | State: RESPONSE_AWAITED | |||
Event: Downstream Lost | Event: Downstream Lost | |||
New State: IDLE | New State: IDLE | |||
Actions | Actions | |||
For each Upstream_LSP_Control_Block in the | For each Upstream_LSP_Control_Block in the Upstream_LSP_Control_Block | |||
Upstream_LSP_Control_Block pointers list, pass the event 'Internal | pointers list, pass the event `Internal Downstream NAK' to its state | |||
Downstream Nak' to its state machine. | machine. | |||
Release the resources, and delete the control block. | Release the resources, and delete the control block. | |||
3.2.3.8.3 State -- "ESTABLISHED" | 3.2.3.8.3 State -- "ESTABLISHED" | |||
State: ESTABLISHED | State: ESTABLISHED | |||
Event: Internal AddUpstream | Event: Internal AddUpstream | |||
New State: ESTABLISHED | New State: ESTABLISHED | |||
skipping to change at page 53, line 23 | skipping to change at page 52, line 23 | |||
State: ESTABLISHED | State: ESTABLISHED | |||
Event: LDP Mapping | Event: LDP Mapping | |||
New State: ESTABLISHED | New State: ESTABLISHED | |||
Actions | Actions | |||
For each Upstream_LSP_Control_Block in the Upstream_LSP_Control_Block | For each Upstream_LSP_Control_Block in the Upstream_LSP_Control_Block | |||
pointers list, pass the event 'Internal Downstream mapping' to its | pointers list, pass the event `Internal Downstream mapping' to its | |||
state machine. | state machine. | |||
State: ESTABLISHED | State: ESTABLISHED | |||
Event: LDP Withdraw | Event: LDP Withdraw | |||
New State: IDLE | New State: IDLE | |||
Actions | Actions | |||
For each Upstream_LSP_Control_Block in the Upstream_LSP_Control_Block | For each Upstream_LSP_Control_Block in the Upstream_LSP_Control_Block | |||
pointers list, pass the event 'Internal Downstream withdraw' to its | pointers list, pass the event `Internal Downstream withdraw' to its | |||
state machine. | state machine. | |||
Release the resources, and delete the control block and send LDP- | Release the resources, and delete the control block and send LDP- | |||
RELEASE downstream. | RELEASE downstream. | |||
State: ESTABLISHED | State: ESTABLISHED | |||
Event: LDP Downstream Nak | Event: LDP Downstream NAK | |||
New State: ESTABLISHED | New State: ESTABLISHED | |||
Actions | Actions | |||
It is a protocol error from the downstream LDP peer. | It is a protocol error from the downstream LDP peer. | |||
3.2.3.9 State of the Next_Hop_Trigger_Control_Block's State Machine | 3.2.3.9 State of the Next_Hop_Trigger_Control_Block's State Machine | |||
for Downstream-on-demand Mode | for Downstream-on-demand Mode | |||
skipping to change at page 54, line 18 | skipping to change at page 53, line 18 | |||
This is the initial LSP state. | This is the initial LSP state. | |||
-- NEW_NH_RETRY | -- NEW_NH_RETRY | |||
This is the state where an LSR waits for a retry timer to expire and | This is the state where an LSR waits for a retry timer to expire and | |||
then tries to establish an LSP through a new next hop. | then tries to establish an LSP through a new next hop. | |||
-- NEW_NH_RESPONSE_AWAITED | -- NEW_NH_RESPONSE_AWAITED | |||
This state means that the LSR has sent a new LDP-REQUEST towards a | This state means that the LSR has sent a new LDP-REQUEST towards a | |||
downstream LSR. The LSR is waiting for the LDP-MAPPING message from | downstream LSR. The LSR is waiting for the LDP-MAPPING from the | |||
the downstream LSR. | downstream LSR. | |||
3.2.3.10 Events of the Next_Hop_Trigger_Control_Block's State Machine | 3.2.3.10 Events of the Next_Hop_Trigger_Control_Block's State Machine | |||
for Downstream-on-demand Mode | for Downstream-on-demand Mode | |||
-- Internal New NH | -- Internal New NH | |||
Trigger to setup an LSP through a better next hop. | Trigger to setup an LSP through a better next hop. | |||
-- Internal Downstream Mapping | -- Internal Downstream Mapping | |||
This event is sent by one Downstream_LSP_Control_Block's state | This event is sent by one Downstream_LSP_Control_Block's state | |||
machine. This Downstream_LSP_Control_Block is the merged | machine. This Downstream_LSP_Control_Block is the merged | |||
Downstream_LSP_Control_Block of this Upstream_LSP_Control_Block. The | Downstream_LSP_Control_Block of this Upstream_LSP_Control_Block. The | |||
event is the result of receiving an LDP-MAPPING message by the | event is the result of receiving an LDP-MAPPING by the | |||
Downstream_LSP_Control_Block's state machine. | Downstream_LSP_Control_Block's state machine. | |||
-- Internal Downstream Nak | -- Internal Downstream NAK | |||
This event is sent by one Downstream_LSP_Control_Block's state | This event is sent by one Downstream_LSP_Control_Block's state | |||
machine. This Downstream_LSP_Control_Block is the merged | machine. This Downstream_LSP_Control_Block is the merged | |||
Downstream_LSP_Control_Block of this Upstream_LSP_Control_Block. The | Downstream_LSP_Control_Block of this Upstream_LSP_Control_Block. The | |||
event is the result of receiving an LDP-NAK message by the | event is the result of receiving an LDP-NAK by the | |||
Downstream_LSP_Control_Block's state machine, or it detects an error. | Downstream_LSP_Control_Block's state machine, or it detects an error. | |||
-- Internal Destroy This event is used to stop the procedure of | -- Internal Destroy This event is used to stop the procedure of | |||
switching over to the better next hop. | switching over to the better next hop. | |||
3.2.3.11 State Transitions of the Next_Hop_Trigger_Control_Block's State | 3.2.3.11 State Transitions of the Next_Hop_Trigger_Control_Block's State | |||
Machine for Downstream-on-demand Mode | Machine for Downstream-on-demand Mode | |||
| | | | |||
| | | | |||
skipping to change at page 55, line 34 | skipping to change at page 54, line 34 | |||
+---------------------+ | | +---------------------+ | | |||
| | Internal | | | | Internal | | |||
| NEW_NH_RESPONSE | Destroy | | | NEW_NH_RESPONSE | Destroy | | |||
| _AWAITED |-------------| | | _AWAITED |-------------| | |||
| | | | | | | | |||
+---------------------+ | | +---------------------+ | | |||
| | | | | | |||
| (Internal Downstream | | | (Internal Downstream | | |||
| Mapping | | | Mapping | | |||
| (Internal Downstream | | | (Internal Downstream | | |||
| Nak) | | | NAK) | | |||
v v | v v | |||
the control block is deleted | the control block is deleted | |||
3.2.3.12 State Machine | 3.2.3.12 State Machine | |||
3.2.3.12.1 State -- "IDLE" | 3.2.3.12.1 State -- "IDLE" | |||
State: IDLE | State: IDLE | |||
Event: Internal New NH | Event: Internal New NH | |||
New States: NEW_NH_RETRY | New State: NEW_NH_RETRY | |||
Actions: | Actions: | |||
Start the LSP retry timer and go to the 'NEW_NH_RETRY' state. | Start the LSP retry timer and go to the `NEW_NH_RETRY' state. | |||
State: IDLE | State: IDLE | |||
Event: Internal retry timeout | Event: Internal retry timeout | |||
New States: IDLE | New State: IDLE | |||
Actions: | Actions: | |||
Ignore. It is an internal implementation error. | Ignore. It is an internal implementation error. | |||
State: IDLE | State: IDLE | |||
Event: Internal Downstream Mapping | Event: Internal Downstream Mapping | |||
New States: IDLE | New State: IDLE | |||
Actions: | Actions: | |||
Ignore. It is an internal implementation error. | Ignore. It is an internal implementation error. | |||
State: IDLE | State: IDLE | |||
Event: Internal Downstream Nak | Event: Internal Downstream NAK | |||
New States: IDLE | New State: IDLE | |||
Actions: | Actions: | |||
Ignore. It is an internal implementation error. | Ignore. It is an internal implementation error. | |||
State: IDLE | State: IDLE | |||
Event: Internal destroy | Event: Internal destroy | |||
New States: IDLE | New State: IDLE | |||
Actions: | Actions: | |||
Ignore. It is an internal implementation error. | Ignore. It is an internal implementation error. | |||
3.2.3.12.2 State -- "NEW_NH_RETRY" | 3.2.3.12.2 State -- "NEW_NH_RETRY" | |||
State: NEW_NH_RETRY | State: NEW_NH_RETRY | |||
Event: Internal New NH | Event: Internal New NH | |||
New States: NEW_NH_RETRY | New State: NEW_NH_RETRY | |||
Actions: | Actions: | |||
Restart the LSP retry timer. | Restart the LSP retry timer. | |||
State: NEW_NH_RETRY | State: NEW_NH_RETRY | |||
Event: Internal retry timeout | Event: Internal retry timeout | |||
New States: NEW_NH_RESPONSE_AWAITED | New State: NEW_NH_RESPONSE_AWAITED | |||
Actions: | Actions: | |||
If the new next hop is the same one as the old next hop, delete the | If the new next hop is the same one as the old next hop, delete the | |||
control block. | control block. | |||
Otherwise, find an downstream LSP control block which go through the | Otherwise, find an downstream LSP control block which go through the | |||
same next hop for the same FEC, if there is no one, create one, and | same next hop for the same FEC, if there is no one, create one, and | |||
pass "Internal AddUpstream'event to its state machine. | pass `Internal AddUpstream' event to its state machine. | |||
State: NEW_NH_RETRY | State: NEW_NH_RETRY | |||
Event: Internal Downstream Mapping | Event: Internal Downstream Mapping | |||
New States: NEW_NH_RETRY | New State: NEW_NH_RETRY | |||
Actions: | Actions: | |||
Ignore. It is an internal implementation error. | Ignore. It is an internal implementation error. | |||
State: NEW_NH_RETRY | State: NEW_NH_RETRY | |||
Event: Internal Downstream NAK | Event: Internal Downstream NAK | |||
New States: NEW_NH_RETRY | New State: NEW_NH_RETRY | |||
Actions: | Actions: | |||
Ignore. It is an internal implementation error. | Ignore. It is an internal implementation error. | |||
State: NEW_NH_RETRY | State: NEW_NH_RETRY | |||
Event: Internal destroy | Event: Internal destroy | |||
New States: IDLE | New State: IDLE | |||
Actions: | Actions: | |||
Stop the timer and delete the control block. | Stop the timer and delete the control block. | |||
3.2.3.12.3 State -- "NEW_NH_RESPONSE_AWAITED" | 3.2.3.12.3 State -- "NEW_NH_RESPONSE_AWAITED" | |||
State: NEW_NH_RESPONSE_AWAITED | State: NEW_NH_RESPONSE_AWAITED | |||
Event: Internal New NH | Event: Internal New NH | |||
New States: NEW_NH_RETRY | New State: NEW_NH_RETRY | |||
Actions: | Actions: | |||
Restart the LSP retry timer, send "Internal destroy" to the control | Restart the LSP retry timer, send `Internal destroy' to the control | |||
block of the LSP for the new next hop and go to the 'NEW_NH_RETRY' | block of the LSP for the new next hop and go to the `NEW_NH_RETRY' | |||
state. | state. | |||
State: NEW_NH_RESPONSE_AWAITED | State: NEW_NH_RESPONSE_AWAITED | |||
Event: Internal retry timeout | Event: Internal retry timeout | |||
New States: NEW_NH_RESPONSE_AWAITED | New State: NEW_NH_RESPONSE_AWAITED | |||
Actions: | Actions: | |||
Ignore. It is an internal implementation error. | Ignore. It is an internal implementation error. | |||
State: NEW_NH_RESPONSE_AWAITED | State: NEW_NH_RESPONSE_AWAITED | |||
Event: Internal Downstream Mapping | Event: Internal Downstream Mapping | |||
New States: IDLE | New State: IDLE | |||
Actions: | Actions: | |||
Send event "Internal Re-cross-connect" event to the Upstream LSP | Send event `Internal Re-cross-connect' event to the upstream LSP | |||
control block of the new next hop. | control block of the new next hop. | |||
Send event "DeleteUpstream" event to the downstream LSP control block | Send event `DeleteUpstream' event to the downstream LSP control block | |||
of the the new next hop, since the upstream has spliced into the new | of the the new next hop, since the upstream has spliced into the new | |||
next hop. | next hop. | |||
Then delete the control block. | Then delete the control block. | |||
State: NEW_NH_RESPONSE_AWAITED | State: NEW_NH_RESPONSE_AWAITED | |||
Event: Internal Downstream NAK | Event: Internal Downstream NAK | |||
New States: IDLE | New State: IDLE | |||
Actions: | Actions: | |||
Delete the control block. | Delete the control block. | |||
State: NEW_NH_RESPONSE_AWAITED | State: NEW_NH_RESPONSE_AWAITED | |||
Event: Internal destroy | Event: Internal destroy | |||
New States: IDLE | New State: IDLE | |||
Actions: | Actions: | |||
Send event "Internal DeleteUpstream" the control block for the new | Send event `Internal DeleteUpstream' the control block for the new | |||
LSP through the new next hop. | LSP through the new next hop. | |||
3.2.4 LDP Related Message Processing | 3.2.4 LDP Related Message Processing | |||
- If an LSR receives an LDP-REQUEST message: | - If an LSR receives an LDP-REQUEST: | |||
a) If this is a duplicate request, discard the msg. A duplicate | a) If this is a duplicate request, discard the message. A duplicate | |||
request means that there is a LSP_Control_Block which has same FEC, | request means that there is a LSP_Control_Block which has same FEC, | |||
same Upstream Label Request ID and same Upstream LDP Session | same Upstream Label Request ID and same Upstream LDP Session | |||
Identifier. | Identifier. | |||
b) Otherwise, create a new Upstream_LSP_Control_Block. Then pass the | b) Otherwise, create a new Upstream_LSP_Control_Block. Then pass the | |||
event `LDP Request' to this Upstream_LSP_Control_Block's state | event `LDP Request' to this Upstream_LSP_Control_Block's state | |||
machine. | machine. | |||
- If an LSR receives an LDP-MAPPING message: | - If an LSR receives an LDP-MAPPING: | |||
Locate a Downstream_LSP_Control_Block which has the same FEC, the | Locate a Downstream_LSP_Control_Block which has the same FEC, the | |||
same Downstream LDP Session Identifier and the same Downstream Label. | same Downstream LDP Session Identifier and the same Downstream Label. | |||
If a Downstream_LSP_Control_Block is found, pass the event `LDP | If a Downstream_LSP_Control_Block is found, pass the event `LDP | |||
Mapping' to its state table. This could mean that the attributes of | Mapping' to its state table. This could mean that the attributes of | |||
label binding have changed. | label binding have changed. | |||
Otherwise, use the Downstream LDP request ID(the 'Lable Request | Otherwise, use the Downstream LDP request ID (the 'Label Request | |||
Message ID' field in the LDP-MAPPING MSG) and Downstream LDP Session | Message ID' field in the LDP-MAPPING) and Downstream LDP Session | |||
Identifier to locate the Downstream_LSP_Control_Block and pass the | Identifier to locate the Downstream_LSP_Control_Block and pass the | |||
event `LDP Mapping' to its state machine. If no | event `LDP Mapping' to its state machine. If no | |||
Downstream_LSP_Control_Block is found, ignore the message. | Downstream_LSP_Control_Block is found, ignore the message. | |||
- If an LSR receives an LDP-RELEASE message: | - If an LSR receives an LDP-RELEASE: | |||
Locate an Upstream_LSP_Control_Block which has the same FEC, the same | Locate an Upstream_LSP_Control_Block which has the same FEC, the same | |||
Upstream Label, the same Upstream LDP Session Identifier. If no | Upstream Label, the same Upstream LDP Session Identifier. If no | |||
Upstream_LSP_Control_Block is found, ignore the message. If an | Upstream_LSP_Control_Block is found, ignore the message. If an | |||
Upstream_LSP_Control_Block is found, send the event `LDP Release' to | Upstream_LSP_Control_Block is found, send the event `LDP Release' to | |||
its state machine. | its state machine. | |||
- If an LSR receives an LDP-WITHDRAW message: | - If an LSR receives an LDP-WITHDRAW: | |||
Find a Downstream_LSP_Control_Block which has the same FEC, the same | Find a Downstream_LSP_Control_Block which has the same FEC, the same | |||
Downstream LDP Session Identifier and the same Downstream Label. Pass | Downstream LDP Session Identifier and the same Downstream Label. Pass | |||
the event `LDP Withdraw' to its state machines. | the event `LDP Withdraw' to its state machines. | |||
- If an Upstream LDP peer is lost: | - If an Upstream LDP peer is lost: | |||
Pass the event `Upstream Lost' to the state machines of all the | Pass the event `Upstream Lost' to the state machines of all the | |||
Upstream_LSP_Control_Blocks whose upstream LDP peer is that LSR. | Upstream_LSP_Control_Blocks whose upstream LDP peer is that LSR. | |||
- If a Downstream LDP peer is lost: | - If a Downstream LDP peer is lost: | |||
Pass the event `Downstream Lost' to the state machines of all the | Pass the event `Downstream Lost' to the state machines of all the | |||
Downstream_LSP_Control_Blocks whose the downstream LDP peer is that | Downstream_LSP_Control_Blocks whose the downstream LDP peer is that | |||
LSR. | LSR. | |||
- If a next hop of an FEC is changed: | - If a next hop of an FEC is changed: | |||
For all the Upstream_LSP_Control_Blocks which are infected by this | For all the Upstream_LSP_Control_Blocks which are infected by this | |||
change, pass the event 'Internal New NH' to their state machines. | change, pass the event `Internal New NH' to their state machines. | |||
- If an LSR receives an LDP-ABORT from an Upstream LSR: | - If an LSR receives an LDP-ABORT from an upstream LSR: | |||
Use the Upstream LDP Request ID and Upstream LDP Session Identifier | Use the Upstream LDP Request ID and Upstream LDP Session Identifier | |||
to locate the Upstream_LSP_Control_Block and pass the event `LDP | to locate the Upstream_LSP_Control_Block and pass the event `LDP | |||
Abort' to its state machine. | Abort' to its state machine. | |||
- If an LSR receives an LDP-NAK from a downstream LSR: | - If an LSR receives an LDP-NAK from a downstream LSR: | |||
Use the Downstream LDP Request ID and Downstream Session Identifier | Use the Downstream LDP Request ID and Downstream Session Identifier | |||
to locate a Downstream_LSP_control_block and pass the event `LDP | to locate a Downstream_LSP_control_block and pass the event `LDP | |||
Downstream Nak' to its state machine. | Downstream NAK' to its state machine. | |||
4. State Machine for Downstream Unsolicited | 4. State Machine for Downstream Unsolicited | |||
The following sections describe the state machines for the ATM-LSR | The following sections describe the state machines for the ATM-LSR | |||
which uses downstream unsolicited mode. | which uses downstream unsolicited mode. | |||
While both independent LSP control and ordered LSP control modes are | While both independent LSP control and ordered LSP control modes are | |||
possible, only the ordered mode is taken into account, because the | possible, only the ordered mode is taken into account, because the | |||
independant LSP control mode uses the liberal label retention mode | independent LSP control mode uses the liberal label retention mode | |||
and so is considered burning too many ATM resources. | and so is considered burning too many ATM resources. | |||
In downstream unsolicited mode, multiple path is not allowed in this | In downstream unsolicited mode, multiple path is not supported in | |||
version and will be For Further Study(FFS). We suspect with multiple | this version and will be For Further Study (FFS). We suspect with | |||
next hops and Downstream mode, it is easy to get into loop condition. | multiple next hops and Downstream mode, it is easy to get into a loop | |||
condition. | ||||
4.0 Control Block | 4.0 Control Block | |||
There are 2 types of control blocks involved: | There are 2 types of control blocks involved: | |||
Upstream_LSP_Control_Block, Downstream_LSP_Control_Block. | Upstream_LSP_Control_Block, Downstream_LSP_Control_Block. | |||
There is a list of Upstream_LSP_Control_Blocks for each FEC in the | There is a list of Upstream_LSP_Control_Blocks for each FEC in the | |||
routing table, with each one correspondng to a LDP peer. A | routing table, with each one corresponding to a LDP peer. A | |||
Upstream_LSP_Control_Block is created for each FEC when there is a | Upstream_LSP_Control_Block is created for each FEC when there is a | |||
label ready to be distributed to that upstream. It is deleted when | label ready to be distributed to that upstream. It is deleted when | |||
the FEC is deleted from the FEC table, or the LDP peer disappears, or | the FEC is deleted from the FEC table, or the LDP peer disappears, or | |||
the downstream label is withdrawed. | the downstream label is withdrawed. | |||
There is one Downstream_LSP_Control_Blocks for each FEC in the | There is one Downstream_LSP_Control_Blocks for each FEC in the | |||
routing table. It is created when the FEC is inserted into the | routing table. It is created when the FEC is inserted into the | |||
forwarding table and deleted when the FEC is removed from the | forwarding table and deleted when the FEC is removed from the | |||
forwarding table. | forwarding table. | |||
skipping to change at page 61, line 51 | skipping to change at page 61, line 4 | |||
- FEC | - FEC | |||
- State | - State | |||
- Downstream LDP Session Identifier | - Downstream LDP Session Identifier | |||
- Downstream Label(assigned by the downstream LSR) | - Downstream Label(assigned by the downstream LSR) | |||
- Downstream Label Request ID (assigned by the LSR itself) | - Downstream Label Request ID (assigned by the LSR itself) | |||
Downstream Label and Downstream LDP Session Identifier, or FEC and | Downstream Label and Downstream LDP Session Identifier, or FEC and | |||
Downsteam LDP Session Identifier can be used to locate a unique | Downstream LDP Session Identifier can be used to locate a unique | |||
Downstream_LSP_Control_Block. | Downstream_LSP_Control_Block. | |||
4.1 States of the Upstream_LSP_Control_Block's State Machine | 4.1 States of the Upstream_LSP_Control_Block's State Machine | |||
for Downstream Mode | for Downstream Mode | |||
-- IDLE | -- IDLE | |||
This is the initial LSP state. | This is the initial LSP state. | |||
-- ESTABLISHED | -- ESTABLISHED | |||
This state means that the LSR has received the LDP-MAPPING message | This state means that the LSR has received the LDP-MAPPING from the | |||
from the downstream LSR and the LSP is up and operational. | downstream LSR and the LSP is up and operational. | |||
-- RELEASE_AWAITED | -- RELEASE_AWAITED | |||
This state means that the LSR is waiting for the LDP-RELEASE msg in | This state means that the LSR is waiting for the LDP-RELEASE in | |||
respond to the LDP-WITHDRAW sent by this LSR. | respond to the LDP-WITHDRAW sent by this LSR. | |||
-- RESOUCES_AWAITED | -- RESOURCES_AWAITED | |||
This state means that the LSR is waiting for the label resources. | This state means that the LSR is waiting for the label resources. | |||
4.2 Events of the Upstream_LSP_Control_Block's State Machine | 4.2 Events of the Upstream_LSP_Control_Block's State Machine | |||
for Downstream Mode | for Downstream Mode | |||
-- Internal Downstream Mapping | -- Internal Downstream Mapping | |||
This event is sent by one Downstream_LSP_Control_Block's state | This event is sent by one Downstream_LSP_Control_Block's state | |||
machine. The event is the result of receiving an LDP-MAPPING message | machine. The event is the result of receiving an LDP-MAPPING by the | |||
by the Downstream_LSP_Control_Block's state machine. Or when the LDP | Downstream_LSP_Control_Block's state machine. Or when the LDP peer is | |||
peer is discovered and there is a downstream Label available for this | discovered and there is a downstream Label available for this FEC. | |||
FEC. | ||||
-- LDP Release | -- LDP Release | |||
The LSR receives an LDP-RELEASE from an upstream LSR. | The LSR receives an LDP-RELEASE from an upstream LSR. | |||
-- Internal Withdraw | -- Internal Withdraw | |||
This event is sent by Downstream_LSP_Control_Block's state machine. | This event is sent by Downstream_LSP_Control_Block's state machine. | |||
The event is the result of receiving an LDP-WITHDRAW message by the | The event is the result of receiving an LDP-WITHDRAW by the | |||
Downstream_LSP_Control_Block's state machine. | Downstream_LSP_Control_Block's state machine. | |||
-- Resource Available | -- Resource Available | |||
This event means the local resource(such as label) becomes available. | This event means the local resource (such as label) becomes | |||
available. | ||||
-- Delete FEC | -- Delete FEC | |||
This event means that either the FEC is removed from the forwarding | This event means that either the FEC is removed from the forwarding | |||
table. | table. | |||
-- Upstream Lost | -- Upstream Lost | |||
This event means that the upstream LDP peer is lost. | This event means that the upstream LDP peer is lost. | |||
skipping to change at page 64, line 34 | skipping to change at page 63, line 34 | |||
| | | | | | | | |||
|(no label resource)v | | |(no label resource)v | | |||
| +-------------------+ | | | +-------------------+ | | |||
| | | | | | | | | | |||
| +-----| ESTABLISHED |---------------+ | | +-----| ESTABLISHED |---------------+ | |||
| | | | ^ | | | | | ^ | |||
| | +-------------------+ | | | | +-------------------+ | | |||
| |(delete FEC) ^ | | | |(delete FEC) ^ | | |||
| |(Internal |(Resource Available) | (LDP Release) | | |(Internal |(Resource Available) | (LDP Release) | |||
| | Withdraw) | | (Internal | | | Withdraw) | | (Internal | |||
| | | | Downstraem | | | | | Downstream | |||
| | | | Withdraw) | | | | | Withdraw) | |||
| | +-------------------+ | | | | +-------------------+ | | |||
+--------->| | | | +--------->| | | | |||
| |RESOURCES_AWAITED |---------------+ | | |RESOURCES_AWAITED |---------------+ | |||
| | | | | | | | | | |||
| +-------------------+ | | | +-------------------+ | | |||
| | | | | | |||
| (Internal Downstream Withdraw) |(LDP Release) | | (Internal Downstream Withdraw) |(LDP Release) | |||
| +-------------------+ | | | +-------------------+ | | |||
| | | | | | | | | | |||
skipping to change at page 65, line 16 | skipping to change at page 64, line 16 | |||
State: IDLE | State: IDLE | |||
Event: Internal Downstream mapping | Event: Internal Downstream mapping | |||
New State: Depends on the action. | New State: Depends on the action. | |||
Actions | Actions | |||
Choose an upstream label, connect the upstream label with the | Choose an upstream label, connect the upstream label with the | |||
downstream label. And go to state 'ESTABLISHED' | downstream label. And go to state `ESTABLISHED' | |||
Propagate the LDP-MAPPING upstream. | Propagate the LDP-MAPPING upstream. | |||
If there is no resource for the upstream label, go to state | If there is no resource for the upstream label, go to state | |||
'RESOURCE_AWAITED'. | `RESOURCE_AWAITED'. | |||
State: IDLE | State: IDLE | |||
Event: LDP Release | Event: LDP Release | |||
New State: IDLE | New State: IDLE | |||
Actions | Actions | |||
Ignore the event. It is an internal implementation error. | Ignore the event. It is an internal implementation error. | |||
skipping to change at page 66, line 35 | skipping to change at page 65, line 35 | |||
4.4.2 : State -- "ESTABLISHED" | 4.4.2 : State -- "ESTABLISHED" | |||
State: ESTABLISHED | State: ESTABLISHED | |||
Event: Internal Downstream Mapping | Event: Internal Downstream Mapping | |||
New State: ESTABLISHED | New State: ESTABLISHED | |||
Actions | Actions | |||
Process the new attributes of the new mapping msg. | Process the new attributes of the new mapping message. | |||
Propagate the LDP-MAPPING upstream. | Propagate the LDP-MAPPING upstream. | |||
State: ESTABLISHED | State: ESTABLISHED | |||
Event: LDP Release | Event: LDP Release | |||
New State: IDLE | New State: IDLE | |||
Actions | Actions | |||
skipping to change at page 68, line 8 | skipping to change at page 67, line 8 | |||
4.4.2 : State -- "RELEASE_AWAITED" | 4.4.2 : State -- "RELEASE_AWAITED" | |||
State: RELEASE_AWAITED | State: RELEASE_AWAITED | |||
Event: Internal Downstream Mapping | Event: Internal Downstream Mapping | |||
New State: RELEASE_AWAITED | New State: RELEASE_AWAITED | |||
Actions | Actions | |||
Ignore the msg. | Ignore the message. | |||
State: RELEASE_AWAITED | State: RELEASE_AWAITED | |||
Event: LDP Release | Event: LDP Release | |||
New State: IDLE | New State: IDLE | |||
Actions | Actions | |||
Release the upstream label and delete the control block. | Release the upstream label and delete the control block. | |||
skipping to change at page 69, line 22 | skipping to change at page 68, line 22 | |||
4.4.2 : State -- "RESOURCE_AWAITED" | 4.4.2 : State -- "RESOURCE_AWAITED" | |||
State: RESOURCE_AWAITED | State: RESOURCE_AWAITED | |||
Event: Internal Downstream Mapping | Event: Internal Downstream Mapping | |||
New State: RESOURCE_AWAITED | New State: RESOURCE_AWAITED | |||
Actions | Actions | |||
Ignore the msg. | Ignore the message. | |||
State: RESOURCE_AWAITED | State: RESOURCE_AWAITED | |||
Event: LDP Release | Event: LDP Release | |||
New State: RESOURCE_AWAITED | New State: RESOURCE_AWAITED | |||
Actions | Actions | |||
Ignore the msg. It is an internal implementation error. | Ignore the message. It is an internal implementation error. | |||
State: RESOURCE_AWAITED | State: RESOURCE_AWAITED | |||
Event: Internal Downstream Withdraw | Event: Internal Downstream Withdraw | |||
New State: IDLE | New State: IDLE | |||
Actions | Actions | |||
Delete the control block. | Delete the control block. | |||
skipping to change at page 70, line 36 | skipping to change at page 69, line 36 | |||
4.5 State of the Downstream_LSP_Control_Block's State Machine | 4.5 State of the Downstream_LSP_Control_Block's State Machine | |||
for Downstream Mode | for Downstream Mode | |||
-- IDLE | -- IDLE | |||
This is the initial LSP state. | This is the initial LSP state. | |||
-- ESTABLISHED | -- ESTABLISHED | |||
This state means that the LSR has received the LDP-MAPPING msg from | This state means that the LSR has received the LDP-MAPPING from the | |||
the downstream LSR. | downstream LSR. | |||
3.2.4.6 Events of the Downstream_LSP_Control_Block's State Machine | 3.2.4.6 Events of the Downstream_LSP_Control_Block's State Machine | |||
for Downstream Mode | for Downstream Mode | |||
-- LDP Mapping | -- LDP Mapping | |||
The LSR receives an LDP-MAPPING msg from a downstream LSR. | The LSR receives an LDP-MAPPING from a downstream LSR. | |||
-- LDP Withdraw | -- LDP Withdraw | |||
The LSR receives an LDP-WITHDRAW msg from a downstream LSR. | The LSR receives an LDP-WITHDRAW from a downstream LSR. | |||
-- Delete FEC | -- Delete FEC | |||
The FEC is deleted from the forwarding table. | The FEC is deleted from the forwarding table. | |||
-- Next Hop Change | -- Next Hop Change | |||
The next hop for this FEC is change to different LSR. | The next hop for this FEC is change to different LSR. | |||
-- Downstream Lost | -- Downstream Lost | |||
skipping to change at page 75, line 7 | skipping to change at page 73, line 18 | |||
New State: IDLE | New State: IDLE | |||
Actions | Actions | |||
Send LDP-WITHDRAW to all Upstream_Control_Block's state machine of | Send LDP-WITHDRAW to all Upstream_Control_Block's state machine of | |||
this FEC. | this FEC. | |||
4.5 LDP Related Message Processing for downstream mode. | 4.5 LDP Related Message Processing for downstream mode. | |||
- If an LSR receives an LDP-REQUEST message: | - If an LSR receives an LDP-REQUEST: | |||
If there is a next hop for this FEC and there is a | If there is a next hop for this FEC and there is a | |||
Downstream_Control_Block for this FEC whose state is 'ESTABLISHED', | Downstream_Control_Block for this FEC whose state is `ESTABLISHED', | |||
create a new Upstream_Control_Block and pass 'internal Mapping' event | create a new Upstream_Control_Block and pass `internal Mapping' event | |||
to its state machine. | to its state machine. | |||
- If an LSR receives an LDP-MAPPING message: | - If an LSR receives an LDP-MAPPING: | |||
Locate a Downstream_LSP_Control_Block which has the same FEC, the | Locate a Downstream_LSP_Control_Block which has the same FEC, the | |||
same Downstream LDP Session Identifier and the same Downstream Label. | same Downstream LDP Session Identifier and the same Downstream Label. | |||
If a Downstream_LSP_Control_Block is found, pass the event `LDP | If a Downstream_LSP_Control_Block is found, pass the event `LDP | |||
Mapping' to its state table. This could mean that the attributes of | Mapping' to its state table. This could mean that the attributes of | |||
label binding have changed. | label binding have changed. | |||
Otherwise, if there is no matching Downstream_LSP_Control_Block | Otherwise, if there is no matching Downstream_LSP_Control_Block | |||
found, find a Downstream_LSP_Control_Block of this FEC and its next | found, find a Downstream_LSP_Control_Block of this FEC and its next | |||
hop is the this downstream peer, pass the event `LDP Mapping' to its | hop is the this downstream peer, pass the event `LDP Mapping' to its | |||
state machine. | state machine. | |||
- If an LSR receives an LDP-RELEASE message: | - If an LSR receives an LDP-RELEASE: | |||
Locate an Upstream_LSP_Control_Block which has the same FEC, the same | Locate an Upstream_LSP_Control_Block which has the same FEC, the same | |||
Upstream Label, the same Upstream LDP Session Identifier. If no | Upstream Label, the same Upstream LDP Session Identifier. If no | |||
Upstream_LSP_Control_Block is found, ignore the message. If an | Upstream_LSP_Control_Block is found, ignore the message. If an | |||
Upstream_LSP_Control_Block is found, send the event `LDP Release' to | Upstream_LSP_Control_Block is found, send the event `LDP Release' to | |||
its state machine. | its state machine. | |||
- If an LSR receives an LDP-WITHDRAW message: | - If an LSR receives an LDP-WITHDRAW: | |||
Find a Downstream_LSP_Control_Block which has the same FEC, the same | Find a Downstream_LSP_Control_Block which has the same FEC, the same | |||
Downstream LDP Session Identifier and the same Downstream Label. Pass | Downstream LDP Session Identifier and the same Downstream Label. Pass | |||
the event `LDP Withdraw' to its state machines. | the event `LDP Withdraw' to its state machines. | |||
- If an Upstream LDP peer is lost: | - If an Upstream LDP peer is lost: | |||
Pass the event `Upstream Lost' to the state machines of all the | Pass the event `Upstream Lost' to the state machines of all the | |||
Upstream_LSP_Control_Blocks whose upstream LDP peer is that LSR. | Upstream_LSP_Control_Blocks whose upstream LDP peer is that LSR. | |||
skipping to change at page 76, line 13 | skipping to change at page 74, line 24 | |||
LSR. | LSR. | |||
- If a next hop of an FEC is changed: | - If a next hop of an FEC is changed: | |||
Find all the Downstream_LSP_Control_Blocks which has the same FEC and | Find all the Downstream_LSP_Control_Blocks which has the same FEC and | |||
the same next hop and pass the event `Next Hop Change' to their state | the same next hop and pass the event `Next Hop Change' to their state | |||
machine | machine | |||
- If there is a FEC being added to the forwarding table | - If there is a FEC being added to the forwarding table | |||
Create a new Downstream_LSP_Control_Block with state 'IDLE' | Create a new Downstream_LSP_Control_Block with state `IDLE' | |||
- If the FEC is deleted from the forwarding table | - If the FEC is deleted from the forwarding table | |||
Send the 'Delete FEC' event to the its control block. | Send the `Delete FEC' event to the its control block. | |||
- If an LSR receives an LDP-NAK from an Upstream LSR: | - If an LSR receives an LDP-NAK from an upstream LSR: | |||
Ignore the msg. An LDP-NAK should never appear in the downstream-mode | Ignore the message. An LDP-NAK should never appear in the | |||
LSR | downstream-mode LSR | |||
- If an LSR receives an LDP-NAK from a downstream LSR: | - If an LSR receives an LDP-NAK from a downstream LSR: | |||
Ignore the msg. It is an protocol error from the downstream LSR. | Ignore the message. It is an protocol error from the downstream LSR. | |||
5. Security Considerations | 5. Security Considerations | |||
Security considerations will be addressed in a future revision of | This document is provided as an informational extension of the LDP | |||
this document. | specification [4]. State machines presented here are intended to | |||
clarify procedures defined in the LDP specification, but do not | ||||
supplant or override definitions and procedures provided there. | ||||
Implementations of a state machine may be vulnerable to spurious | ||||
events generated by an external source. In this document, events fall | ||||
in two categories: internal events and external events caused by | ||||
receipt of an LDP message. | ||||
LDP messages may be protected using mechanisms described in the LDP | ||||
specification. See "Security Considerations" in the LDP specification | ||||
[4]. | ||||
Security considerations relating to generation of spurious internal | ||||
events are not addressed in this document. | ||||
6. Acknowledgements | 6. Acknowledgements | |||
The authors would like to acknowledge the helpful comments and | The authors would like to acknowledge the helpful comments and | |||
suggestions of the following people: Bob Thomas | suggestions of the following people: Bob Thomas and Myunghee Son. | |||
7. Authors's Address | 7. Authors' Address | |||
Liwen Wu | Christophe Boscher | |||
Alcatel | Alcatel | |||
44983 Knoll Square | Le Mail | |||
Ashburn, VA. 20147 | 44700 Orvault | |||
U.S.A | France | |||
Phone: 703-724-2619 | Phone: (33) 251781828 | |||
Email:liwen.wu@adn.alcatel.com | Email: christophe.boscher@alcatel.fr | |||
Pierrick Cheval | Pierrick Cheval | |||
Alcatel | Alcatel | |||
44983 Knoll Square | 5 rue Noel-Pons | |||
Ashburn, VA. 20147 | 92734 Nanterre Cedex | |||
U.S.A | ||||
Phone: 703-724-2080 | ||||
Email: pierrick.cheval@adn.alcatel.com | ||||
Christophe Boscher | ||||
Alcatel CIT | ||||
Le Mail | ||||
44700 Nantes-Orvault | ||||
France | France | |||
Phone: (33) 251781828 | Phone: (33) 146524027 | |||
Email: christophe.boscher@or.cit.alcatel.fr | Email: pierrick.cheval@alcatel.fr | |||
Eric Gray | Eric Gray | |||
Lucent Technologies, Inc. | Lucent Technologies, Inc. | |||
1600 Osgood Street | P.O. Box 710 | |||
North Andover, MA 01845 | Durham, NH 03824 | |||
Phone: (603) 659-3386 | ||||
Email: ewgray@lucent.com | Email: ewgray@lucent.com | |||
Liwen Wu | ||||
Cisco Systems, Inc. | ||||
250 Apollo Drive | ||||
Chelmsford, MA 01824 | ||||
U.S.A | ||||
Phone: 978-224-3087 | ||||
Email:liwwu@cisco.com | ||||
8. References | 8. References | |||
1."Use of Label Switching With ATM", Bruce Davie, Jeremy Lawrence, | 1."MPLS Using LDP and ATM Switching", Bruce Davie, Jeremy Lawrence, | |||
Keith McCloghrie, Yakov Rekhter, Eric Rosen, George Swallow, Paul | Keith McCloghrie, Yakov Rekhter, Eric Rosen, George Swallow, Paul | |||
Doolan, work in progress, Internet Draft, <draft-ietf-mpls-atm-01.txt> | Doolan, work in progress, Internet Draft, <draft-ietf-mpls-atm-02.txt> | |||
2."Multiprotocol Label Switching Architecture", Eric C Rosen, Arun | 2."Multiprotocol Label Switching Architecture", Eric C Rosen, Arun | |||
Viswanathan, Ross Callon, work in progress, Internet Draft, <draft- | Viswanathan, Ross Callon, work in progress, Internet Draft, <draft- | |||
ietf-mpls-arch-02.txt> | ietf-mpls-arch-06.txt> | |||
3."Definition of Managed Objects for the Multiprotocol Label Switching, | 3."Definition of Managed Objects for the Multiprotocol Label Switching, | |||
Label Distribution Protocol (LDP)", Joan Cucchiara, Hans Sjostrand, | Label Distribution Protocol (LDP)", Joan Cucchiara, Hans Sjostrand, | |||
James V. Luciani, work in progress, Internet Draft, <draft-ietf-mpls- | James V. Luciani, work in progress, Internet Draft, <draft-ietf-mpls- | |||
ldp-mib-00.txt> | ldp-mib-02.txt> | |||
4."Requirements for Traffic Engineering Over MPLS", Daniel O.Awduche, | ||||
Joe Malcolm, Johnson Agogbua, Mike O'Dell, Jim McMaus, work in | ||||
progress,Internet Draft, <draft-ietf-mpls-traffic-eng-00.txt> | ||||
5. "LDP Specification", Loa Andersson, Paul Doolan,Nancy Feldman, Andre | 4. "LDP Specification", Loa Andersson, Paul Doolan, Nancy Feldman, | |||
Fredette, Bob Thomas, work in progress, Internet Draft, <draft-ietf- | Andre Fredette, Bob Thomas, work in progress, Internet Draft, <draft- | |||
mpls-ldp-04.txt> | ietf-mpls-ldp-06.txt> | |||
6. "MPLS Loop Prevention Mechanism", Yoshihiro Ohba, Yasuhiro Katsube, | 5. "Constraint-Based LSP Set up Using LDP", Bilel Jamoussi, et al., | |||
Eric Rosen, Paul Doolan, work in progress, Internet Draft, <draft- | work in progress, Internet Draft, <draft-ietf-mpls-cr-ldp-03.txt> | |||
ohba-mpls-loop-prevention-02.txt> | ||||
7. "Constraint-Based LSP Set up Using LDP", Bilel Jamoussi, et.al., | ||||
work in progress, Internet Draft, <draft-ietf-mpls-cr-ldp-01.txt> | ||||
End of changes. | ||||
This html diff was produced by rfcdiff 1.23, available from http://www.levkowetz.com/ietf/tools/rfcdiff/ |