draft-ietf-mpls-ldp-state-04.txt | rfc3215.txt | |||
---|---|---|---|---|
MPLS Working Group Christophe Boscher | Network Working Group C. Boscher | |||
Internet Draft Pierrick Cheval | Request for Comments: 3215 P. Cheval | |||
Expiration Date: September 2001 Alcatel | Category: Informational Alcatel | |||
L. Wu | ||||
Liwen Wu | Cisco | |||
Cisco | E. Gray | |||
Sandburst | ||||
Eric Gray | January 2002 | |||
Sandburst | ||||
March 2000 | ||||
LDP State Machine | LDP State Machine | |||
draft-ietf-mpls-ldp-state-04.txt | ||||
Status of this Memo | Status of this Memo | |||
This document is an Internet-Draft and is in full conformance with | This memo provides information for the Internet community. It does | |||
all provisions of Section 10 of RFC2026. | not specify an Internet standard of any kind. Distribution of this | |||
memo is unlimited. | ||||
Internet-Drafts are working documents of the Internet Engineering | ||||
Task Force (IETF), its areas, and its working groups. Note that other | ||||
groups may also distribute working documents as Internet- Drafts. | ||||
Internet-Drafts are draft documents valid for a maximum of six months | ||||
and may be updated, replaced, or obsoleted by other documents at any | ||||
time. It is inappropriate to use Internet-Drafts as reference | ||||
material or to cite them other than as "work in progress." | ||||
The list of current Internet-Drafts can be accessed at | ||||
http://www.ietf.org/ietf/1id-abstracts.txt | ||||
The list of Internet-Draft Shadow Directories can be accessed at | ||||
http://www.ietf.org/shadow.html. | ||||
Distribution of this memo is unlimited. | ||||
Copyright Notice | ||||
Copyright (C) The Internet Society (1998). All Rights Reserved. | ||||
Table Of Contents | Copyright Notice | |||
1. Abstract ......................................................... 3 | Copyright (C) The Internet Society (2002). All Rights Reserved. | |||
2. Terminology ...................................................... 4 | ||||
3. State Machine for Downstream-on-Demand Mode ...................... 4 | ||||
3.1 An LSR's Behavior in the Case of a Next Hop Change .............. 5 | ||||
3.2. ATM Switch LSR with No VC-merge Capability ..................... 5 | ||||
3.2.1 LSP Control Block ............................................. 5 | ||||
3.2.2 States ........................................................ 7 | ||||
3.2.3 Events ........................................................ 8 | ||||
3.2.4 State Transitions ............................................. 10 | ||||
3.2.5 State Machine ................................................. 10 | ||||
3.2.5.1 State -- "IDLE" ............................................. 11 | ||||
3.2.5.2 State -- "RESPONSE_AWAITED" ................................. 14 | ||||
3.2.5.3 State -- "ESTABLISHED" ...................................... 17 | ||||
3.2.5.4 State -- "RELEASE_AWAITED" .................................. 22 | ||||
3.2.6 Handling the Next Hop Change .................................. 24 | ||||
3.2.6.1 Next Hop Trigger Control Block .............................. 24 | ||||
3.2.6.2 States ...................................................... 24 | ||||
3.2.6.3 Events ...................................................... 25 | ||||
3.2.6.4 State Transition for next hop change ........................ 26 | ||||
3.2.6.5 State Machine ............................................... 26 | ||||
3.2.6.5.1 State -- "IDLE" ........................................... 26 | ||||
3.2.6.5.2 State -- "NEW_NH_RETRY" ................................... 27 | ||||
3.2.6.5.3 State -- "NEW_NH_RESPONSE_AWAITED" ........................ 29 | ||||
3.2.7 LDP Related Message Handling .................................. 30 | ||||
3.3. ATM Switch LSR with VC-merge ................................... 32 | ||||
3.3.1 VC-merge ...................................................... 32 | ||||
3.3.2 Control Block ................................................. 32 | ||||
3.3.3 State Machines for Downstream-on-demand Mode ................ 35 | ||||
3.3.3.1 State of the Upstream LSP Control Block's State Machine | ||||
for Downstream-on-demand Mode ............................ 35 | ||||
3.3.3.2 Events of the Upstream LSP Control Block's State Machine | ||||
for Downstream-on-demand Mode ............................ 36 | ||||
3.3.3.3 State Transitions of the Upstream LSP Control Block's State | ||||
Machine for Downstream-on-demand Mode .................... 38 | ||||
3.3.3.4 Upstream LSP Control Block's State Machine | ||||
for Downstream-on-demand Mode ............................ 38 | ||||
3.3.3.4.1 State -- "IDLE" ........................................... 38 | ||||
3.3.3.4.2 State -- "RESPONSE_AWAITED" ............................... 41 | ||||
3.3.3.4.3 State -- "ESTABLISHED" .................................... 44 | ||||
3.3.3.4.4 State -- "RELEASE_AWAITED" ................................ 47 | ||||
3.3.3.5 State of the Downstream LSP Control Block's State Machine | ||||
for Downstream-on-demand Mode ............................ 49 | ||||
3.3.3.6 Events of the Downstream LSP Control Block's State Machine | ||||
for Downstream-on-demand Mode ............................ 49 | ||||
3.3.3.7 State Transitions of the Downstream LSP Control Block's | ||||
State Machine for Downstream-on-demand mode .............. 50 | ||||
3.3.3.8 Downstream LSP Control Block's State Machine for | ||||
Downstream-on-demand Mode ................................ 50 | ||||
3.3.3.8.1 State -- "IDLE" ........................................... 50 | ||||
3.3.3.8.2 State -- "RESPONSE_AWAITED" ............................... 52 | ||||
3.3.3.8.3 State -- "ESTABLISHED" .................................... 53 | ||||
3.3.3.9 State of the Next_Hop_Trigger_Control_Block's State | ||||
Machine for Downstream-on-demand Mode .................... 55 | ||||
3.3.3.10 Events of the Next_Hop_Trigger_Control_Block's State | ||||
Machine for Downstream-on-demand Mode .................... 55 | ||||
3.3.3.11 State Transitions of the Next_Hop_Trigger_Control_Block's | ||||
State Machine for Downstream-on-demand Mode .............. 56 | ||||
3.3.3.12 State Machine .............................................. 56 | ||||
3.3.3.12.1 State -- "IDLE" .......................................... 57 | ||||
3.3.3.12.2 State -- "NEW_NH_RETRY" .................................. 58 | ||||
3.3.3.12.3 State -- "NEW_NH_RESPONSE_AWAITED" ....................... 59 | ||||
3.3.4 LDP Related Message Processing ................................ 60 | ||||
4. State Machine for Downstream Unsolicited ......................... 62 | ||||
4.1 Control Block ................................................... 62 | ||||
4.2 States of the Upstream LSP Control Block's State Machine | ||||
for Downstream Mode ...................................... 63 | ||||
4.3 Events of the Upstream LSP Control Block's State Machine | ||||
for Downstream Mode ...................................... 63 | ||||
4.4 State Transitions of Upstream LSP Control Block's State | ||||
Machine for Downstream Mode .............................. 65 | ||||
4.5 Upstream LSP Control Block's State Machine for | ||||
Downstream Mode .......................................... 65 | ||||
4.5.1 : State -- "IDLE" ............................................. 66 | ||||
4.5.2 : State -- "ESTABLISHED" ...................................... 67 | ||||
4.5.3 : State -- "RELEASE_AWAITED" .................................. 68 | ||||
4.5.4 : State -- "RESOURCE_AWAITED" ................................. 70 | ||||
4.6 State of the Downstream LSP Control Block's State Machine | ||||
for Downstream Mode ...................................... 71 | ||||
4.7 Events of the Downstream LSP Control Block's State Machine | ||||
for Downstream Mode ...................................... 71 | ||||
4.8 State Transitions of Downstream LSP Control Block's State | ||||
Machine for Downstream Mode .............................. 72 | ||||
4.9 Downstream LSP Control Block's State Machine | ||||
for Downstream Mode ...................................... 72 | ||||
4.9.1 : State -- "IDLE" ............................................. 72 | ||||
4.9.2 : State -- "ESTABLISHED" ...................................... 74 | ||||
4.10 LDP Related Message Processing for downstream mode ............. 75 | ||||
5. Security Considerations .......................................... 76 | ||||
6. Acknowledgements ................................................. 77 | ||||
7. Authors' Address ................................................. 77 | ||||
8. References ....................................................... 78 | ||||
1. Abstract | Abstract | |||
In the current LDP specification [4], there is no state machine | This document provides state machine tables for ATM (Asynchronous | |||
specified for processing LDP messages. We think that defining a | Transfer Mode) switch LSRs. In the current LDP specification, there | |||
common state machine is very important for interoperability between | is no state machine specified for processing LDP messages. We think | |||
different LDP and CR-LDP implementations. | that defining a common state machine is very important for | |||
interoperability between different LDP and CR-LDP implementations. | ||||
This document provides state machine tables for ATM switch LSRs. We | We begin in section 1 by defining a list of terminologies. Then in | |||
begin in section 2 by defining a list of terminologies. Then in | section 2, 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 that 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 merge capable ATM LSRs, while the other one can be used for | non-vc merge capable ATM LSRs, while the other one can be used for | |||
the vc-merge capable ATM LSRs. In section 4, we provides a state | the vc-merge capable ATM LSRs. In section 3, we provides a state | |||
machine for downstream unsolicited mode ATM LSRs. | machine for downstream unsolicited mode ATM LSRs. | |||
We focus on the LDP state machines and the associated control blocks | We focus on the LDP state machines and the associated control blocks | |||
used for establishing and maintaining LSPs. We do not describe state | used for establishing and maintaining LSPs. We do not describe state | |||
machines for the "LDP controller" which is in charge of LDP session | machines for the "LDP controller" that is in charge of LDP session | |||
initialization, address mapping messages management, routing | initialization, address mapping messages management, routing | |||
interface, etc. which is defined in the LDP specification [4]. | interface, etc. that is defined in the LDP specification. | |||
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. Terminology | Table Of Contents | |||
- LDP-REQUEST: LDP Label Request message | 1. Terminology ................................................... 4 | |||
2. State Machine for Downstream-on-Demand Mode ................... 4 | ||||
2.1 An LSR's Behavior in the Case of a Next Hop Change ........... 4 | ||||
2.2. ATM Switch LSR with No VC-merge Capability .................. 5 | ||||
2.2.1 LSP Control Block .......................................... 5 | ||||
2.2.2 States ..................................................... 7 | ||||
2.2.3 Events ..................................................... 8 | ||||
2.2.4 State Transitions .......................................... 9 | ||||
2.2.5 State Machine .............................................. 10 | ||||
2.2.5.1 State -- "IDLE" .......................................... 10 | ||||
2.2.5.2 State -- "RESPONSE_AWAITED" .............................. 13 | ||||
2.2.5.3 State -- "ESTABLISHED" ................................... 16 | ||||
2.2.5.4 State -- "RELEASE_AWAITED" ............................... 21 | ||||
2.2.6 Handling the Next Hop Change ............................... 23 | ||||
2.2.6.1 Next Hop Trigger Control Block ........................... 24 | ||||
2.2.6.2 States ................................................... 24 | ||||
2.2.6.3 Events ................................................... 24 | ||||
2.2.6.4 State Transition for next hop change ..................... 25 | ||||
2.2.6.5 State Machine ............................................ 25 | ||||
2.2.6.5.1 State -- "IDLE" ........................................ 25 | ||||
2.2.6.5.2 State -- "NEW_NH_RETRY" ................................ 27 | ||||
2.2.6.5.3 State -- "NEW_NH_RESPONSE_AWAITED" ..................... 28 | ||||
2.2.7 LDP Related Message Handling ............................... 29 | ||||
2.3. ATM Switch LSR with VC-merge ................................ 31 | ||||
2.3.1 VC-merge ................................................... 31 | ||||
2.3.2 Control Block .............................................. 31 | ||||
2.3.3 State Machines for Downstream-on-demand Mode ............. 34 | ||||
2.3.3.1 State of the Upstream LSP Control Block's State Machine | ||||
for Downstream-on-demand Mode ............................ 34 | ||||
2.3.3.2 Events of the Upstream LSP Control Block's State Machine | ||||
for Downstream-on-demand Mode ............................ 35 | ||||
2.3.3.3 State Transitions of the Upstream LSP Control Block's State | ||||
Machine for Downstream-on-demand Mode .................... 36 | ||||
2.3.3.4 Upstream LSP Control Block's State Machine | ||||
for Downstream-on-demand Mode ............................ 37 | ||||
2.3.3.4.1 State -- "IDLE" ........................................ 37 | ||||
2.3.3.4.2 State -- "RESPONSE_AWAITED" ............................ 39 | ||||
2.3.3.4.3 State -- "ESTABLISHED" ................................. 42 | ||||
2.3.3.4.4 State -- "RELEASE_AWAITED" ............................. 45 | ||||
2.3.3.5 State of the Downstream LSP Control Block's State Machine | ||||
for Downstream-on-demand Mode ............................ 47 | ||||
2.3.3.6 Events of the Downstream LSP Control Block's State Machine | ||||
for Downstream-on-demand Mode ............................ 47 | ||||
2.3.3.7 State Transitions of the Downstream LSP Control Block's | ||||
State Machine for Downstream-on-demand mode .............. 48 | ||||
- LDP-MAPPING: LDP Label Mapping message | 2.3.3.8 Downstream LSP Control Block's State Machine for | |||
Downstream-on-demand Mode ................................ 49 | ||||
2.3.3.8.1 State -- "IDLE" ........................................ 48 | ||||
2.3.3.8.2 State -- "RESPONSE_AWAITED" ............................ 50 | ||||
2.3.3.8.3 State -- "ESTABLISHED" ................................. 52 | ||||
2.3.3.9 State of the Next_Hop_Trigger_Control_Block's State | ||||
Machine for Downstream-on-demand Mode .................... 53 | ||||
2.3.3.10 Events of the Next_Hop_Trigger_Control_Block's State | ||||
Machine for Downstream-on-demand Mode ................... 53 | ||||
2.3.3.11 State Transitions of the Next_Hop_Trigger_Control_Block's | ||||
State Machine for Downstream-on-demand Mode ............. 55 | ||||
2.3.3.12 State Machine ........................................... 55 | ||||
2.3.3.12.1 State -- "IDLE" ....................................... 55 | ||||
2.3.3.12.2 State -- "NEW_NH_RETRY" ............................... 57 | ||||
2.3.3.12.3 State -- "NEW_NH_RESPONSE_AWAITED" .................... 58 | ||||
2.3.4 LDP Related Message Processing ............................. 59 | ||||
3. State Machine for Downstream Unsolicited ...................... 61 | ||||
3.1 Control Block ................................................ 61 | ||||
3.2 States of the Upstream LSP Control Block's State Machine | ||||
for Downstream Mode .......................................... 62 | ||||
3.3 Events of the Upstream LSP Control Block's State Machine | ||||
for Downstream Mode .......................................... 62 | ||||
3.4 State Transitions of Upstream LSP Control Block's State | ||||
Machine for Downstream Mode .................................. 64 | ||||
3.5 Upstream LSP Control Block's State Machine for | ||||
Downstream Mode .............................................. 65 | ||||
3.5.1 : State -- "IDLE" .......................................... 65 | ||||
3.5.2 : State -- "ESTABLISHED" ................................... 66 | ||||
3.5.3 : State -- "RELEASE_AWAITED" ............................... 67 | ||||
3.5.4 : State -- "RESOURCE_AWAITED" .............................. 69 | ||||
3.6 State of the Downstream LSP Control Block's State Machine | ||||
for Downstream Mode .......................................... 70 | ||||
3.7 Events of the Downstream LSP Control Block's State Machine | ||||
for Downstream Mode .......................................... 70 | ||||
3.8 State Transitions of Downstream LSP Control Block's State | ||||
Machine for Downstream Mode .................................. 71 | ||||
3.9 Downstream LSP Control Block's State Machine | ||||
for Downstream Mode .......................................... 71 | ||||
3.9.1 : State -- "IDLE" .......................................... 71 | ||||
3.9.2 : State -- "ESTABLISHED" ................................... 73 | ||||
3.10 LDP Related Message Processing for downstream mode .......... 74 | ||||
4. Security Considerations ....................................... 75 | ||||
5. Acknowledgements .............................................. 76 | ||||
6. References .................................................... 76 | ||||
7. Authors' Address .............................................. 77 | ||||
8. Full Copyright Statement ...................................... 78 | ||||
- LDP-WITHDRAW: LDP Label Withdraw message | 1. Terminology | |||
- LDP-RELEASE: LDP Label Release message | - LDP-REQUEST: LDP Label Request message | |||
- LDP-ABORT: LDP Abort message used to abort a LSP setup. | - LDP-MAPPING: LDP Label Mapping message | |||
- LDP-NAK: LDP Notification message used to reject an LDP message. | - LDP-WITHDRAW: LDP Label Withdraw message | |||
3. State Machine for Downstream-on-Demand Mode | - LDP-RELEASE: LDP Label Release message | |||
In this draft, we provide two sets of state machines: one for the ATM | - LDP-ABORT: LDP Abort message used to abort a LSP setup. | |||
LSR which does not have VC-merge capability, and the other for the | ||||
ATM LSR which does have VC-merge capability. | - LDP-NAK: LDP Notification message used to reject an LDP message. | |||
2. State Machine for Downstream-on-Demand Mode | ||||
In this document, we provide two sets of state machines: one for the | ||||
ATM LSR that does not have VC-merge capability, and the other for the | ||||
ATM LSR that does have VC-merge capability. | ||||
State machine descriptions are given in terms of control blocks, | State machine descriptions are given in terms of control blocks, | |||
states, events, response actions and state transitions. Control | states, events, response actions and state transitions. Control | |||
blocks contain the information that is required to support handling | blocks contain the information that is required to support handling | |||
of events. A control block may also contain any additional | of events. A control block may also contain any additional | |||
information that is required either of any specific implementation or | information that is required either of any specific implementation or | |||
in support of other required functions. In every case, additional | in support of other required functions. In every case, additional | |||
information required to support the procedures defined in the LDP | information required to support the procedures defined in the LDP | |||
specification [4] or management objects defined in the LDP MIB [3] | specification [4] or management objects defined in the LDP MIB [3] | |||
would be stored in a specific LDP implementation - either as part of | would be stored in a specific LDP implementation - either as part of | |||
the control block structure or in some other way. | 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. | |||
Loop detection and loop prevention messages will be processed as | Loop detection and loop prevention messages will be processed as | |||
specified in [4]. The impact of loop detection and loop prevention | specified in [4]. The impact of loop detection and loop prevention | |||
messages on state transitions is left for further study. | messages on state transitions is left for further study. | |||
3.1 An LSR's Behavior in the Case of a Next Hop Change | 2.1 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 (CR-LDP[5]), 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. | |||
LSR may decide to send an LDP-MAPPING containing attributes for this | The LSR may decide to send an LDP-MAPPING containing attributes | |||
New Next Hop (NH) that have changed. | for this New Next Hop (NH) that have changed. | |||
3.2. ATM Switch LSR with No VC-merge Capability | 2.2. ATM Switch LSR with No VC-merge Capability | |||
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 LSRs | capability, downstream-on-demand mode is required for these ATM LSRs | |||
[1]. Also, "conservative label retention mode" is required in this | [1]. Also, "conservative label retention mode" is required in this | |||
case [1]. | case [1]. | |||
For each LSP, there are 2 kinds of state machines involved: | For each LSP, there are 2 kinds of state machines involved: | |||
1) the LSP Control Block and its state machine which can be used to | 1) the LSP Control Block and its state machine that 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 | |||
LDP Request and it is deleted when the LSP of this request is torn | new LDP Request and it is deleted when the LSP of this request is | |||
down. | torn 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 that 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. This state machine uses a timer (and | over to the better next hop. This state machine uses a timer (and | |||
has corresponding states) to ensure that switch over occurs in a | has corresponding states) to ensure that switch over occurs in a | |||
timely fashion after a routing transient has had time to stabilize. | timely fashion after a routing transient has had time to | |||
stabilize. | ||||
3.2.1 LSP Control Block | 2.2.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 that may contain the | |||
following information: | following information: | |||
- Upstream Label Request ID (assigned by the upstream LSR), which | - Upstream Label Request ID (assigned by the upstream LSR), that | |||
is the 'Message Id' in the Label Request Message received from the | is the 'Message Id' in the Label Request Message received from | |||
upstream LSR. | the upstream LSR. | |||
- Downstream Label Request ID (assigned by this LSR itself), which | ||||
is 'Message Id' in the Label Request Message sent to the downstream | ||||
LSR. | ||||
- Upstream LDP Identifier | - Downstream Label Request ID (assigned by this LSR itself), that | |||
is 'Message Id' in the Label Request Message sent to the | ||||
downstream LSR. | ||||
- Downstream LDP Identifier | - Upstream LDP Identifier | |||
- State | - Downstream LDP Identifier | |||
- FEC | - State | |||
- Upstream Label (assigned by this LSR) | - FEC | |||
- 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 | |||
LSP) that points to the control block that triggers setting up this | a LSP) that points to the control block that triggers setting | |||
LSP or tearing down this LSP. | up this LSP or tearing down this LSP. | |||
- Next Hop Control Block Pointer, which points to the control block | - Next Hop Control Block Pointer, that points to the control | |||
which is used for switching over to a better LSP. | block that is used for switching over to a better LSP. | |||
The following index combinations can be used to locate a unique LSP | The following index combinations can be used to locate a unique LSP | |||
Control Block: | 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 | - 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 Control Block is described in section | definition of Next Hop Trigger Control Block is described in section | |||
3.2.6. | 2.2.6. | |||
For example, an LSP which transit through (LSR-A, LSR-B, LSR-C, LSR- | For example, an LSP that transits 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) | | |||
+-----------------------+ | +-----------------------+ | |||
skipping to change at page 7, line 22 | skipping to change at page 7, line 5 | |||
|(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 Trigger Control Block Pointer) | Control | | (Next Hop Trigger 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 | |||
+------------------------+ | +------------------------+ | |||
| LSP Control Block | | | LSP Control Block | | |||
| (for LSP: LSR-B, LSR-E,| | | (for LSP: LSR-B, LSR-E,| | |||
| LSR-D) | | | LSR-D) | | |||
+------------------------+ | +------------------------+ | |||
2.2.2 States | ||||
3.2.2 States | ||||
This section describes the various states that are used in the state | This section describes the various states that are used in the state | |||
machine for the ATM non VC-merge LSR. | machine for the ATM non VC-merge LSR. | |||
-- 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. | |||
LSR is waiting for the LDP-MAPPING from the downstream LSR. | The LSR is waiting for the LDP-MAPPING from the downstream LSR. | |||
-- ESTABLISHED | -- ESTABLISHED | |||
This state means that the LSR has received the LDP-MAPPING from the | This state means that the LSR has received the LDP-MAPPING 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 upstream and is | This state means that the LSR has sent a LDP-WITHDRAW upstream and is | |||
waiting for the LDP-RELEASE before freeing up the label resource. | waiting for the LDP-RELEASE before freeing up the label resource. | |||
3.2.3 Events | 2.2.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. | |||
-- LDP Release | -- LDP Release | |||
skipping to change at page 9, line 27 | skipping to change at page 8, line 51 | |||
engineering tunnel, or recognizing a new FEC could trigger an | engineering tunnel, or recognizing a new FEC could trigger an | |||
Internal SetUp event to set up a new LSP from this node. | Internal SetUp event to set up a new LSP from this node. | |||
-- Internal Destroy | -- Internal Destroy | |||
The LSR send an Internal Destroy event to tear down an LSP. | The LSR send an Internal Destroy event to tear down an LSP. | |||
-- Internal Cross-Connect | -- Internal Cross-Connect | |||
The LSR send an Internal Cross-Connect to splice two LSPs into one | The LSR send an Internal Cross-Connect to splice two LSPs into one | |||
LSP. This happens when a LSR switchs over to a better next hop | LSP. This happens when a LSR switches over to a better next hop. | |||
-- Internal New NH | -- Internal New NH | |||
The LSR decides to switch over the better next hop. | The LSR decides to switch over the better next hop. | |||
3.2.4 State Transitions | 2.2.4 State Transitions | |||
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 Request 1) | | (LDP Release) | |(LDP Upstream |(LDP Request 1) | | (LDP Release) | |||
| Abort |(Internal SetUp) | | (Upstream Lost) | | Abort |(Internal SetUp) | | (Upstream Lost) | |||
|(Internal Destroy) | | | | |(Internal Destroy) | | | | |||
|(Upstream Lost) v | | | |(Upstream Lost) v | | | |||
| +-------------------+ | | | | +-------------------+ | | | |||
+---------| | | | | +---------| | | | | |||
| RESPONSE_AWAITED | | | | | RESPONSE_AWAITED | | | | |||
+---------| | | | | +---------| | | | | |||
| +-------------------+ | | | | +-------------------+ | | | |||
| | | | | | | | | | |||
|(Downstream Lost) |(LDP Mapping) | | | |(Downstream Lost) |(LDP Mapping) | | | |||
|(LDP Downstream | | | | |(LDP Downstream | | | | |||
| NAK) | +---------------+ | | | NAK) | +---------------+ | | |||
| | | (LDP Request 2) | | | | | (LDP Request 2) | | |||
| | | | | | | | | | |||
| v v | | | v v | | |||
| +-------------------+ (LDP Withdraw 1) | | | +-------------------+ (LDP Withdraw 1) | | |||
| | | (Internal Destroy) | | | | | (Internal Destroy) | | |||
| | ESTABLISHED |------------>-------+ | | | ESTABLISHED |------------>-------+ | |||
| | | | | | | | | | |||
| +-------------------+ | | | +-------------------+ | | |||
| | | | | | | | |||
| | | | | | | | |||
| |(LDP Withdraw 2) | (LDP Upstream | | |(LDP Withdraw 2) | (LDP Upstream | |||
| |(Downstream Lost) | Abort) | | |(Downstream Lost) | Abort) | |||
| | | | | | | | |||
| v | | | v | | |||
| +-------------------+ | | | +-------------------+ | | |||
| | | | | | | | | | |||
+-------->| RELEASE_AWAITED |------------>-------+ | +-------->| RELEASE_AWAITED |------------>-------+ | |||
| | | | | | |||
+-------------------+ | +-------------------+ | |||
3.2.5 State Machine | 2.2.5 State Machine | |||
3.2.5.1 State -- "IDLE" | ||||
State: IDLE | 2.2.5.1 State -- "IDLE" | |||
Event: LDP Request | State: IDLE | |||
New State: Depends upon the action routine. | Event: LDP Request | |||
Actions: | New State: Depends upon the action routine. | |||
If this LSR is the LSP Egress or Proxy Egress [2] | Actions: | |||
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 | |||
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, propagate the LDP-REQUEST, with newly assigned Message | LDP-REQUEST, propagate the LDP-REQUEST, with newly assigned | |||
ID by this LSR, towards the obtained next hop, and go to the new | Message ID by this LSR, towards the obtained next hop, and go to | |||
state `RESPONSE_AWAITED'. | the new state `RESPONSE_AWAITED'. | |||
If the LSR uses the independent control mode [2], 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, go to the ESTABLISHED state and send an LDP- | forwarding module, go to the ESTABLISHED state and send an LDP- | |||
MAPPING upstream with the upstream label. | MAPPING upstream with the upstream label. | |||
If unable to process the request for any reason, issue an LDP-NAK to | If unable to process the request for any reason, issue an LDP-NAK to | |||
the sender with the appropriate error code, go to IDLE and delete the | the sender with the appropriate error code, go to IDLE and delete the | |||
LSP Control Block. | LSP Control 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. | |||
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. | |||
State: IDLE | State: IDLE | |||
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 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 | |||
hop, and go to the new state `RESPONSE_AWAITED'. | next 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. | |||
State: IDLE | State: IDLE | |||
Event: Internal Cross-Connect | Event: Internal Cross-Connect | |||
New State: 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 New NH | Event: Internal New NH | |||
New State: IDLE | New State: IDLE | |||
Actions: | Actions: | |||
Ignore. It is an internal implementation error. | Ignore. It is an internal implementation error. | |||
3.2.5.2 State -- "RESPONSE_AWAITED" | 2.2.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: | |||
Ignore the event. It is an internal implementation error. A non VC | Ignore the event. It is an internal implementation error. A non | |||
merge ATM LSR must create a new LSP control block for a new LDP | VC merge ATM LSR must create a new LSP control block for a new LDP | |||
request. | request. | |||
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 | |||
Pointer is not zero), send event `Internal LSP UP' to the Trigger | Block Pointer is not zero), send event `Internal LSP UP' to the | |||
control block. | Trigger 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 | |||
label. | upstream label. | |||
3) Connect the upstream label to the downstream label. Allocate the | 3) Connect the upstream label to the downstream label. Allocate | |||
resources. Propagate the LDP-MAPPING upstream with the upstream | the resources. Propagate the LDP-MAPPING upstream with the | |||
label. | upstream label. | |||
If unable to process the message, disconnect the upstream label from | If unable to process the message, disconnect the upstream label | |||
the downstream label, free the upstream label, release the resources, | from the downstream label, free the upstream label, release the | |||
send an LDP-RELEASE downstream and an LDP-NAK upstream with status | resources, send an LDP-RELEASE downstream and an LDP-NAK upstream | |||
(No Label Resources [4]), go to IDLE and delete the LSP Control | with status (No Label Resources [4]), go to IDLE and delete the | |||
Block. | LSP Control Block. | |||
State: RESPONSE_AWAITED | State: RESPONSE_AWAITED | |||
Event: LDP Release | ||||
New State: IDLE | Event: LDP Release | |||
Actions: | New State: IDLE | |||
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 downstream, go to IDLE and delete the LSP Control | Send an LDP-ABORT downstream, go to IDLE and delete the LSP | |||
Block. | Control Block. | |||
Note: This should only occur if the LSR uses the independent control | Note: This should only occur if the LSR uses the independent | |||
mode. In the ordered control mode, no upstream label mapping will | control mode. In the ordered control mode, no upstream label | |||
have been sent corresponding to this LSP while waiting for a label | mapping will have been sent corresponding to this LSP while | |||
mapping from downstream. | 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. | |||
State: RESPONSE_AWAITED | State: RESPONSE_AWAITED | |||
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 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 | |||
Pointer is not zero), send event `Internal LSP DOWN' to the Trigger | Block Pointer is not zero), send event `Internal LSP DOWN' to | |||
control block, go to IDLE and delete the LSP Control Block. | the Trigger control block, go to IDLE and delete the LSP | |||
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 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 upstream, | If the LSR uses the ordered control mode, send an LDP-NAK | |||
go to IDLE and delete the LSP Control Block. | upstream, go to IDLE and delete the LSP 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 | |||
label. | label. | |||
Send an LDP-ABORT downstream, go to IDLE and delete the LSP Control | Send an LDP-ABORT downstream, go to IDLE and delete the LSP | |||
Block. | Control Block. | |||
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 | |||
Pointer is not zero), send event `Internal LSP DOWN' to the trigger | Block Pointer is not zero), send event `Internal LSP DOWN' to | |||
control block, go to IDLE and delete the LSP Control Block. | the trigger control block, go to IDLE and delete the LSP | |||
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 | |||
`RELEASE_AWAITED'. | state `RELEASE_AWAITED'. | |||
If the LSR uses the ordered control mode, send an LDP-NAK upstream | If the LSR uses the ordered control mode, send an LDP-NAK upstream | |||
(with a status `No Route' [4]), go to IDLE and delete the LSP Control | (with a status `No Route' [4]), go to IDLE and delete the LSP | |||
Block. | Control Block. | |||
State: RESPONSE_AWAITED | State: RESPONSE_AWAITED | |||
Event: Internal SetUp | ||||
New State: RESPONSE_AWAITED | Event: Internal SetUp | |||
Actions: | New State: RESPONSE_AWAITED | |||
Ignore, it is an internal implementation error. | Actions: | |||
State: RESPONSE_AWAITED | Ignore, it is an internal implementation error. | |||
Event: Internal Destroy | State: RESPONSE_AWAITED | |||
New State: IDLE | Event: Internal Destroy | |||
Actions: | New State: IDLE | |||
Send an LDP-ABORT downstream, go to IDLE and delete the LSP Control | Actions: | |||
Block. | ||||
State: RESPONSE_AWAITED | Send an LDP-ABORT downstream, go to IDLE and delete the LSP | |||
Control Block. | ||||
Event: Internal Cross-Connect | State: RESPONSE_AWAITED | |||
New State: RESPONSE_AWAITED | Event: Internal Cross-Connect | |||
Actions: | New State: RESPONSE_AWAITED | |||
Ignore the event. It is an internal implementation error. | Actions: | |||
State: RESPONSE_AWAITED | Ignore the event. It is an internal implementation error. | |||
Event: Internal New NH | State: RESPONSE_AWAITED | |||
New State: RESPONSE_AWAITED | Event: Internal New NH | |||
Actions: | New State: RESPONSE_AWAITED | |||
Send LDP-ABORT to the old downstream, and send LDP-REQUEST to the new | Actions: | |||
next hop. | ||||
3.2.5.3 State -- "ESTABLISHED" | Send LDP-ABORT to the old downstream, and send LDP-REQUEST to the | |||
new next hop. | ||||
State: ESTABLISHED | 2.2.5.3 State -- "ESTABLISHED" | |||
Event: LDP Request | State: ESTABLISHED | |||
New State: ESTABLISHED | Event: LDP Request | |||
Actions: | New State: ESTABLISHED | |||
Ignore the event. It's an internal implementation error. For non | Actions: | |||
VC-merge ATM LSR, a new LSP control block is always created for each | ||||
LDP request. | ||||
State: ESTABLISHED | 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 request. | ||||
Event: LDP Mapping | State: ESTABLISHED | |||
New State: ESTABLISHED | Event: LDP Mapping | |||
Actions: | New State: ESTABLISHED | |||
Process the LDP-MAPPING, which may contain the new attributes of the | Actions: | |||
label mapping and then propagate the LDP-MAPPING upstream. | ||||
State: ESTABLISHED | Process the LDP-MAPPING, that may contain the new attributes of | |||
the label mapping and then propagate the LDP-MAPPING upstream. | ||||
Event: LDP Release | State: ESTABLISHED | |||
New State: IDLE | Event: LDP Release | |||
Actions: | New State: IDLE | |||
Disconnect the upstream label from the downstream label. | Actions: | |||
Free the upstream label. | Disconnect the upstream label from the downstream label. | |||
Free the resources. | Free the upstream label. | |||
Send event `Internal Destroy' to the Next Hop Trigger Control Block | Free the resources. | |||
if it was in the middle of switching over to the better next hop. | ||||
Propagate the LDP-RELEASE downstream if the LSR is not the egress for | Send event `Internal Destroy' to the Next Hop Trigger Control | |||
the LSP, go to IDLE and delete the LSP Control Block. | Block if it was in the middle of switching over to the better next | |||
hop. | ||||
State: ESTABLISHED | Propagate the LDP-RELEASE downstream if the LSR is not the egress | |||
for the LSP, go to IDLE and delete the LSP Control Block. | ||||
Event: LDP Withdraw | State: ESTABLISHED | |||
New State: Depends on the action routine. | Event: LDP Withdraw | |||
Actions: | New State: Depends on the action routine. | |||
1) Free the resources and send LDP-RELEASE downstream. | Actions: | |||
2) If it is independent control mode, set the state to `IDLE', create | 1) Free the resources and send LDP-RELEASE downstream. | |||
a internal LDP Request with the information in the LSP Control Block, | ||||
and pass event `LDP Request' to its own state machine. | ||||
3) Else for the ordered control mode | 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, and pass event `LDP Request' to its own state | ||||
machine. | ||||
3.1) If the LSP is triggered to be setup by itself (e.g it is the | 3) Else for the ordered control mode | |||
ingress LSR of this LSP), send event `Internal LSP Down' to the | ||||
trigger control block, go to IDLE and delete the LSP Control Block. | ||||
3.2) Else, if it is triggered by the incoming LDP Request, | 3.1) If the LSP is triggered to be setup by itself (e.g it is | |||
Disconnect the upstream label from the downstream label. Propagate | the ingress LSR of this LSP), send event `Internal LSP | |||
the LDP-WITHDRAW upstream and go to state `RELEASE_AWAITED'. | Down' to the trigger control block, go to IDLE and delete | |||
the LSP Control Block. | ||||
3.3) If the LSP is in the middle of switching over to a better LSP, | 3.2) Else, if it is triggered by the incoming LDP Request, | |||
send event `Internal Destroy' to the state machine of its New Next | Disconnect the upstream label from the downstream label. | |||
Hop LSP Control Block, go to IDLE and delete the LSP Control Block. | Propagate the LDP-WITHDRAW upstream and go to state | |||
`RELEASE_AWAITED'. | ||||
State: ESTABLISHED | 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 Hop LSP Control Block, go to IDLE and delete | ||||
the LSP Control Block. | ||||
Event: LDP Upstream Abort | State: ESTABLISHED | |||
New State: ESTABLISHED | Event: LDP Upstream Abort | |||
Actions: | New State: ESTABLISHED | |||
Ignore the event. | Actions: | |||
Note: This scenario can occur if the upstream LSR sends a LDP-ABORT | Ignore the event. | |||
at about the same time as the local LSR sends a LDP-MAPPING. In this | ||||
situation, it should be up to exactly one of the two LSRs as to | ||||
whether or not the label that was sent remains valid. The LDP | ||||
specification [4] procedures leave the choice to the upstream LSR | ||||
which must send an LDP-RELEASE if it will not use the label provided. | ||||
State: ESTABLISHED | Note: This scenario can occur if the upstream LSR sends a LDP- | |||
ABORT at about the same time as the local LSR sends a LDP-MAPPING. | ||||
In this situation, it should be up to exactly one of the two LSRs | ||||
as to whether or not the label that was sent remains valid. The | ||||
LDP specification [4] procedures leave the choice to the upstream | ||||
LSR that must send an LDP-RELEASE if it will not use the label | ||||
provided. | ||||
Event: LDP Downstream NAK | State: ESTABLISHED | |||
New State: ESTABLISHED | Event: LDP Downstream NAK | |||
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 to tear down the LSP | The downstream LSR should always LSP-WITHDRAW to tear down the LSP | |||
when the LSP is established. | when the LSP is established. | |||
State: ESTABLISHED | State: ESTABLISHED | |||
Event: Upstream Lost | ||||
New State: IDLE | Event: Upstream Lost | |||
Actions: | New State: IDLE | |||
Disconnect the upstream label from the downstream label. | Actions: | |||
Free the upstream label. | Disconnect the upstream label from the downstream label. | |||
Send event `Internal Destroy' to the Next Hop Trigger Control Block | Free the upstream label. | |||
if it was in the middle of switching over to the better next hop. | ||||
Free the resources. | 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. | ||||
Propagate an LDP-RELEASE downstream, go to IDLE and delete the LSP | Free the resources. | |||
Control Block. | ||||
State: ESTABLISHED | Propagate an LDP-RELEASE downstream, go to IDLE and delete the LSP | |||
Control Block. | ||||
Event: Downstream Lost | State: ESTABLISHED | |||
New State: Depends on the action routine. | Event: Downstream Lost | |||
Actions: | New State: Depends on the action routine. | |||
1) If the LSP is triggered by the local router (Trigger Control Block | Actions: | |||
Pointer is not zero), send event `Internal LSP NAK' to the Trigger | ||||
control block, go to IDLE and delete the LSP Control Block. | ||||
2) Else, disconnect the upstream label from the downstream label. | 1) If the LSP is triggered by the local router (Trigger Control | |||
Propagate an LDP-WITHDRAW upstream and go to `RELEASE_AWAITED' state. | Block Pointer is not zero), send event `Internal LSP NAK' to | |||
the Trigger control block, go to IDLE and delete the LSP | ||||
Control Block. | ||||
3) Send event `Internal Destroy' to the Next Hop Trigger Control | 2) Else, disconnect the upstream label from the downstream label. | |||
Block if it was in the middle of switching over to the better next | Propagate an LDP-WITHDRAW upstream and go to `RELEASE_AWAITED' | |||
hop. | state. | |||
State: ESTABLISHED | 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 hop. | ||||
Event: Internal Setup | State: ESTABLISHED | |||
New State: ESTABLISHED | Event: Internal Setup | |||
Actions: | New State: ESTABLISHED | |||
Ignore, it is an internal implementation error. | Actions: | |||
State: ESTABLISHED | Ignore, it is an internal implementation error. | |||
Event: Internal Destroy | State: ESTABLISHED | |||
New State: IDLE | Event: Internal Destroy | |||
Actions: | New State: IDLE | |||
Disconnect the upstream label from the downstream label if it is not | Actions: | |||
the ingress of the LSP. | ||||
Free the resources. | Disconnect the upstream label from the downstream label if it is | |||
not the ingress of the LSP. | ||||
Send an LDP-RELEASE downstream, go to IDLE and delete the LSP Control | Free the resources. | |||
Block. | ||||
State: ESTABLISHED | Send an LDP-RELEASE downstream, go to IDLE and delete the LSP | |||
Control Block. | ||||
Event: Internal Cross-Connect | State: ESTABLISHED | |||
New State: ESTABLISHED | Event: Internal Cross-Connect | |||
Actions: | New State: ESTABLISHED | |||
Connect the upstream label to the downstream label | Actions: | |||
May need to send a new LDP-MAPPING upstream with the attributes from | Connect the upstream label to the downstream label | |||
the new next hop. | ||||
Reset Trigger Control Block Pointer to zero. | May need to send a new LDP-MAPPING upstream with the attributes | |||
from the new next hop. | ||||
State: ESTABLISHED | Reset Trigger Control Block Pointer to zero. | |||
Event: Internal New NH | State: ESTABLISHED | |||
New State: ESTABLISHED | Event: Internal New NH | |||
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 | |||
`Internal New NH' to that control block. | send `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 to point to this control block, | |||
then pass `Internal New NH' to this control block. | and pass 'Internal New NH' to this control block. | |||
3.2.5.4 State -- "RELEASE_AWAITED" | 2.2.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 a protocol error from the downstream LDP peer, but anyway send | It is a protocol error from the downstream LDP peer, but anyway | |||
a LDP-RELEASE downstream. | send 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 a protocol error from the downstream LDP peer, but send a | |||
LDP- RELEASE anyway. | ||||
It is a protocol error from the downstream LDP peer, but send a LDP- | State: RELEASE_AWAITED | |||
RELEASE anyway. | ||||
State: RELEASE_AWAITED | Event: LDP Upstream Abort | |||
Event: LDP Upstream Abort | ||||
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.2.6 Handling the Next Hop Change | 2.2.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.2.6.1 Next Hop Trigger Control Block | 2.2.6.1 Next Hop Trigger Control Block | |||
-- State | -- State | |||
-- LSP Control Block Pointer, which points to the original LSP | -- LSP Control Block Pointer, that points to the original LSP control | |||
control block. | block. | |||
-- New Next Hop LSP Control Block Pointer, which points to the LSP | -- New Next Hop LSP Control Block Pointer, that 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.2.6.2 States | 2.2.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. | LDP-MAPPING. | |||
3.2.6.3 Events | 2.2.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. | |||
-- Internal LSP UP | -- Internal LSP UP | |||
skipping to change at page 25, line 38 | skipping to change at page 25, line 4 | |||
The LSP retry timer expires. | The LSP retry timer expires. | |||
-- Internal LSP UP | -- Internal LSP UP | |||
The LSP to the new Next Hop is UP | The LSP to the new Next Hop is UP | |||
-- Internal LSP NAK | -- Internal LSP NAK | |||
The LSP through the new next hop could not get set up | The LSP through the new next hop could not get set up | |||
-- Internal Destroy | -- Internal Destroy | |||
This event is triggered when the LSR lost the LDP session with its | This event is triggered when the LSR lost the LDP session with its | |||
upstream neighbor. | upstream neighbor. | |||
3.2.6.4 State Transition for next hop change | 2.2.6.4 State Transition for next hop change | |||
+---------------------+ | ||||
| | | ||||
| IDLE |<------------+ | ||||
| | | | ||||
+---------------------+ | | ||||
| | | ||||
| | | ||||
| (Internal New NH) | | ||||
| | | ||||
v | | ||||
+---------------------+ | | ||||
| | | | ||||
| NEW_NH_RETRY |----------->-+ | ||||
| | (Internal | | ||||
+---------------------+ Destroy) | | ||||
| | | ||||
| | | ||||
| (Internal retry timeout) | | ||||
| | | ||||
v | | ||||
+---------------------+ | | ||||
| | (Internal | | ||||
| NEW_NH_RESPONSE | Destroy) | | ||||
| _AWAITED |----------->-+ | ||||
| | | | ||||
+---------------------+ | | ||||
| | | ||||
| (Internal LSP UP) | | ||||
| (Internal LSP NAK) | | ||||
+------------------------>-+ | ||||
3.2.6.5 State Machine | +---------------------+ | |||
| | | ||||
| IDLE |<------------+ | ||||
| | | | ||||
+---------------------+ | | ||||
| | | ||||
| | | ||||
| (Internal New NH) | | ||||
| | | ||||
v | | ||||
+---------------------+ | | ||||
| | | | ||||
| NEW_NH_RETRY |----------->-+ | ||||
| | (Internal | | ||||
+---------------------+ Destroy) | | ||||
| | | ||||
| | | ||||
| (Internal retry timeout) | | ||||
| | | ||||
v | | ||||
+---------------------+ | | ||||
| | (Internal | | ||||
| NEW_NH_RESPONSE | Destroy) | | ||||
| _AWAITED |----------->-+ | ||||
| | | | ||||
+---------------------+ | | ||||
| | | ||||
| (Internal LSP UP) | | ||||
| (Internal LSP NAK) | | ||||
+------------------------>-+ | ||||
3.2.6.5.1 State -- "IDLE" | 2.2.6.5 State Machine | |||
State: IDLE | 2.2.6.5.1 State -- "IDLE" | |||
Event: Internal New NH | State: IDLE | |||
New State: NEW_NH_RETRY | Event: Internal New NH | |||
Actions: | New State: NEW_NH_RETRY | |||
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 State: 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 State: 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 State: 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 State: IDLE | New State: IDLE | |||
Actions: | Actions: | |||
Ignore. It is an internal implementation error. | Ignore. It is an internal implementation error. | |||
3.2.6.5.2 State -- "NEW_NH_RETRY" | 2.2.6.5.2 State -- "NEW_NH_RETRY" | |||
State: NEW_NH_RETRY | State: NEW_NH_RETRY | |||
Event: Internal New NH | Event: Internal New NH | |||
New State: NEW_NH_RETRY | New State: NEW_NH_RETRY | |||
Actions: | ||||
Restart the LSP retry timer. | Actions: | |||
State: NEW_NH_RETRY | Restart the LSP retry timer. | |||
Event: Internal retry timeout | State: NEW_NH_RETRY | |||
New State: Depends on action routine. | Event: Internal retry timeout | |||
Actions: | New State: Depends on action routine. | |||
If the new next hop is the same one as the old next hop, go to IDLE | Actions: | |||
and delete the control block. | ||||
Otherwise, create an LSP control block which will try to establish a | If the new next hop is the same one as the old next hop, go to | |||
new LSP through the new next hop, send event `Internal Setup' to its | IDLE and delete the control block. | |||
state machine and go to NEW_NH_RESPONSE_AWAITED. | ||||
State: NEW_NH_RETRY | Otherwise, create an LSP control block that will try to establish | |||
a new LSP through the new next hop, send event `Internal Setup' to | ||||
its state machine and go to NEW_NH_RESPONSE_AWAITED. | ||||
Event: Internal LSP UP | State: NEW_NH_RETRY | |||
New State: NEW_NH_RETRY | Event: Internal LSP UP | |||
Actions: | New State: NEW_NH_RETRY | |||
Ignore. It is an internal implementation error. | Actions: | |||
State: NEW_NH_RETRY | Ignore. It is an internal implementation error. | |||
Event: Internal LSP NAK | State: NEW_NH_RETRY | |||
New State: NEW_NH_RETRY | Event: Internal LSP NAK | |||
Actions: | New State: NEW_NH_RETRY | |||
Ignore. It is an internal implementation error. | Actions: | |||
State: NEW_NH_RETRY | Ignore. It is an internal implementation error. | |||
Event: Internal destroy | State: NEW_NH_RETRY | |||
Event: Internal destroy | ||||
New State: IDLE | New State: IDLE | |||
Actions: | Actions: | |||
Stop the timer, go to IDLE and delete the control block. | Stop the timer, go to IDLE and delete the control block. | |||
3.2.6.5.3 State -- "NEW_NH_RESPONSE_AWAITED" | 2.2.6.5.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 State: 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 | |||
block of the LSP for the new next hop and go to the `NEW_NH_RETRY' | control block of the LSP for the new next hop and go to the | |||
state. | `NEW_NH_RETRY' state. | |||
State: NEW_NH_RESPONSE_AWAITED | State: NEW_NH_RESPONSE_AWAITED | |||
Event: Internal retry timeout | Event: Internal retry timeout | |||
New State: 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 State: 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 | |||
the new next hop. | of 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 go to IDLE and delete the control block. | Then go to IDLE and delete the control block. | |||
State: NEW_NH_RESPONSE_AWAITED | State: NEW_NH_RESPONSE_AWAITED | |||
Event: Internal LSP NAK | Event: Internal LSP NAK | |||
New State: 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 State: 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.2.7 LDP Related Message Handling | 2.2.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 message. A duplicate | a) If this is a duplicate request, discard the message. A | |||
request means that there is a LSP Control Block which has same FEC, | duplicate request means that there is a LSP Control Block that | |||
same Upstream Label Request ID and same Upstream LDP Session | has the same FEC, Upstream Label Request ID and Upstream Label | |||
Identifier. | Request ID and same Upstream LDP Session 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 | |||
event `LDP Request' to its state machine. | the 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. | MAPPING. | |||
b) Find an LSP Control Block which has the same Downstream Label | b) Find an LSP Control Block that 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' | |||
its state machine. | to 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 | |||
an LSP Control Block which has the same Downstream Label and the same | find an LSP Control Block that has the same Downstream Label | |||
Downstream LDP Session Identifier. | and the same 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' | |||
its state machine. | to its state machine. | |||
f) Otherwise, ignore the LDP-MAPPING and send a LDP-RELEASE | f) Otherwise, ignore the LDP-MAPPING and send a LDP-RELEASE | |||
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 that 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' | |||
its state machine. | to 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 that has the same Downstream Label | |||
the same Downstream LDP Session Identifier. | and 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' | |||
its state machine. | to its state machine. | |||
c) Otherwise, ignore the LDP-WITHDRAW and send a LDP-RELEASE | c) Otherwise, ignore the LDP-WITHDRAW and send a LDP-RELEASE | |||
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 | |||
LSR. | that 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 that needs "local repair", or it needs "global | |||
and it is the ingress of the LSP, pass event "Internal New NH" to its | repair" and it is the ingress of the LSP, pass event "Internal New | |||
state machine. | NH" to its 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 that 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 that 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 Downstream | c) If an LSP Control Block is found, pass the event `LDP | |||
NAK' to its state machine. | Downstream NAK' to its state machine. | |||
d) Otherwise, ignore the message. | d) Otherwise, ignore the message. | |||
3.3. ATM Switch LSR with VC-merge | 2.3. ATM Switch LSR with VC-merge | |||
3.3.1 VC-merge | 2.3.1 VC-merge | |||
A VC-merge capable LSR can map multiple incoming labels (VPI/VCI) | A VC-merge capable LSR can map multiple incoming labels (VPI/VCI) | |||
into one outgoing label. It is possible that this LSR can only merge | into one outgoing label. It is possible that this LSR can only merge | |||
a 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 [2], 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 | |||
six incoming labels arriving at it for a particular FEC. In this | has 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.3.2 Control Block | 2.3.2 Control Block | |||
There are 3 types of control blocks involved: Upstream LSP Control | There are 3 types of control blocks involved: Upstream LSP Control | |||
Block, Downstream LSP Control Block, and Next Hop Trigger Control | Block, Downstream LSP Control Block, and Next Hop Trigger Control | |||
Block. | 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-REQUEST | There is one Downstream LSP Control Block for each unique LDP-REQUEST | |||
sent to a downstream LSR. There can be multiple Downstream LSP | sent to a downstream LSR. There can be multiple Downstream LSP | |||
Control Blocks per FEC in an LSR. This can be the result of an | Control Blocks per FEC in an LSR. This can be the result of an | |||
upstream LSR asking for a label for an FEC. This LSR must assign a | upstream LSR asking for a label for an FEC. This LSR must assign a | |||
unique upstream label and it can not merge this upstream label into | unique upstream label and it can not merge this upstream label into | |||
an existing downstream label for this FEC. | an existing downstream label for this FEC. | |||
There is one Next Hop Trigger Control Block for each FEC for which a | There is one Next Hop Trigger Control Block for each FEC for which a | |||
better next hop has been detected and the LSR has decided to switch | better next hop has been detected and the LSR has decided to switch | |||
to 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 Downstream LSP | Control Block into a single label listed in the Downstream LSP | |||
Control Block. | 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. | |||
An Next_Hop_Trigger LSP Control Block may contain the following | An Next_Hop_Trigger LSP Control Block may contain the following | |||
information: | information: | |||
- Upstream LSP Control Block pointer, which points to the one | - Upstream LSP Control Block pointer, that points to the one that | |||
which is needed to switch over to the better next hop | is needed to switch over to the better next hop | |||
- State | - State | |||
- Downstream LSP Control Block pointer | ||||
- Downstream LSP Control Block pointer | ||||
A Downstream LSP Control Block may contain the following information: | A Downstream LSP Control Block may contain the following information: | |||
- FEC | - FEC | |||
- State | - State | |||
- Downstream LDP Session Identifier | - Downstream LDP Session Identifier | |||
- list of pointers to the Upstream LSP Control Blocks or the | - list of pointers to the Upstream LSP Control Blocks or the | |||
Trigger_Control_Blocks which are merged at this LSR for this | Trigger_Control_Blocks that are merged at this LSR for this FEC | |||
FEC | ||||
- Downstream Label (assigned by the downstream LSR) | - Downstream Label (assigned by the downstream LSR) | |||
- Downstream Label Request ID (assigned by the LSR itself if | - Downstream Label Request ID (assigned by the LSR itself if it | |||
it is using downstream-on-demand mode) | is using downstream-on-demand mode) | |||
Downstream Label, Downstream LDP Session Identifier can be used to | Downstream Label, Downstream LDP Session Identifier can be used to | |||
locate a unique Downstream LSP Control Block. | locate a unique Downstream LSP Control Block. | |||
If an LSR is using downstream-on-demand mode, it can also use the | If an LSR is using downstream-on-demand mode, it can also use the | |||
Downstream Label Request ID and the Downstream LDP Session Identifier | Downstream Label Request ID and the Downstream LDP Session Identifier | |||
to locate a unique Downstream LSP Control Block. | to locate a unique Downstream LSP Control Block. | |||
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 | | +---------------------+ +--->| Downstream LSP Control Block | | |||
| Next_Hop_Trigger_ | | | for Downstream LSR4 | | | Next_Hop_Trigger_ | | | for Downstream LSR4 | | |||
| LSP Control Block |------+ | | | | LSP Control Block |------+ | | | |||
| | +------------------------------+ | | | +------------------------------+ | |||
+---------------------+ | +---------------------+ | |||
3.3.3 State Machines for Downstream-on-demand Mode | 2.3.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.3.3.1 State of the Upstream LSP Control Block's State Machine | 2.3.3.1 State of the Upstream LSP Control Block's State Machine for | |||
for Downstream-on-demand Mode | 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 from the | a downstream LSR. The LSR is waiting for the LDP-MAPPING from the | |||
downstream LSR. | downstream LSR. | |||
-- ESTABLISHED | -- ESTABLISHED | |||
This state means that the LSR has received the LDP-MAPPING from the | This state means that the LSR has received the LDP-MAPPING 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 upstream and is | This state means that the LSR has sent a LDP-WITHDRAW upstream and is | |||
waiting for the LDP-RELEASE before freeing up the label resource. | waiting for the LDP-RELEASE before freeing up the label resource. | |||
3.3.3.2 Events of the Upstream LSP Control Block's State Machine | 2.3.3.2 Events of the Upstream LSP Control Block's State Machine for | |||
for Downstream-on-demand Mode | 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 Downstream | machine. This Downstream LSP Control Block is the merged Downstream | |||
LSP Control Block of this Upstream LSP Control Block. The event is | LSP Control Block of this Upstream LSP Control Block. The event is | |||
the result of receiving an LDP-MAPPING by the Downstream LSP Control | the result of receiving an LDP-MAPPING by the Downstream LSP Control | |||
Block's state machine. | 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 Downstream | machine. This Downstream LSP Control Block is the merged Downstream | |||
LSP Control Block of this Upstream LSP Control Block. The event is | LSP Control Block of this Upstream LSP Control Block. The event is | |||
the result of receiving an LDP-WITHDRAW by the Downstream LSP Control | the result of receiving an LDP-WITHDRAW by the Downstream LSP Control | |||
Block's state machine. | 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 Downstream | machine. This Downstream LSP Control Block is the merged Downstream | |||
LSP Control Block of this Upstream LSP Control Block. The event is | LSP Control Block of this Upstream LSP Control Block. The event is | |||
the result of receiving an LDP-NAK by the Downstream LSP Control | the result of receiving an LDP-NAK by the Downstream LSP Control | |||
Block's state machine, or it detects an error. | 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. | |||
-- Internal Re-Cross-Connect | -- Internal Re-Cross-Connect | |||
This event is used to trigger splicing into a different downstream | This event is used to trigger splicing into a different downstream | |||
LSP. This can happens when it is switched over to a better LSP | LSP. This can happens when it is switched over to a better LSP | |||
through the new next hop. | through the new next hop. | |||
3.3.3.3 State Transitions of the Upstream LSP Control Block's State | 2.3.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) | | |(Upstream Lost) | (Upstream Lost) | | |||
skipping to change at page 38, line 44 | skipping to change at page 37, line 5 | |||
| | | | | | |||
|(Internal Downstream Withdraw) | | |(Internal Downstream Withdraw) | | |||
|(Internal Downstream NAK) | | |(Internal Downstream NAK) | | |||
v | | v | | |||
+-------------------+ (LDP Upstream | | +-------------------+ (LDP Upstream | | |||
| | Abort) | | | | Abort) | | |||
|RELEASE_AWAITED |------->------------+ | |RELEASE_AWAITED |------->------------+ | |||
| | | | | | |||
+-------------------+ | +-------------------+ | |||
3.3.3.4 Upstream LSP Control Block's State Machine | 2.3.3.4 Upstream LSP Control Block's State Machine for Downstream-on- | |||
for Downstream-on-demand Mode | demand Mode | |||
3.3.3.4.1 State -- "IDLE" | ||||
State: IDLE | ||||
Event: LDP Request | 2.3.3.4.1 State -- "IDLE" | |||
New State: Depends upon the action routine. | State: IDLE | |||
Actions: | Event: LDP Request | |||
If this LSR is the LSP Egress or Proxy Egress [2], | New State: Depends upon the action routine. | |||
Then: | Actions: | |||
choose an upstream label, allocate the resources, connect this | If this LSR is the LSP Egress or Proxy Egress [2], | |||
upstream label to the local IP forwarding module, send an LDP- | ||||
MAPPING upstream with the upstream label and go to the state | ||||
`ESTABLISHED'. | ||||
else | Then: | |||
choose an upstream label, allocate the resources, connect this | ||||
upstream label to the local IP forwarding module, send an LDP- | ||||
MAPPING upstream with the upstream label and go to the state | ||||
`ESTABLISHED'. | ||||
Obtain a next hop (or interface). Find a Downstream LSP Control | else | |||
Block which has the same FEC and the same next hop and also is able | Obtain a next hop (or interface). Find a Downstream LSP | |||
to merge more input labels. If not found, create a new Downstream | Control Block that has the same FEC and the same next hop and | |||
LSP Control Block with the state `IDLE'. | also is able to merge more input labels. If not found, 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 | |||
choose an upstream label, connect the upstream label with the | `ESTABLISHED', choose an upstream label, connect the upstream | |||
downstream label and send an LDP-MAPPING upstream with the upstream | label with the downstream label and send an LDP-MAPPING | |||
label, and go to the state `ESTABLISHED'. | upstream with the upstream 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 | |||
set the state of the Upstream LSP Control Block to | `ESTABLISHED', set the state of the Upstream LSP Control Block | |||
`RESPONSE_AWAITED'. If the LSR use the independent control mode | to `RESPONSE_AWAITED'. If the LSR use the independent control | |||
[2], choose an upstream label, and send an LDP-MAPPING upstream. | mode [2], choose an upstream label, and send an LDP-MAPPING | |||
upstream. | ||||
Pass the event `Internal AddUpstream' to the Downstream LSP Control | Pass the event `Internal AddUpstream' to the Downstream LSP | |||
Block's state machine. | Control Block's state machine. | |||
If unable to process the request for any reason, issue an LDP-NAK to | If unable to process the request for any reason, issue an LDP-NAK | |||
the sender with the appropriate error code, go to IDLE and delete the | to the sender with the appropriate error code, go to IDLE and | |||
control block. | delete the control 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 | 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 Withdraw | |||
Event: Internal Downstream 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 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 | |||
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 New NH | Event: Internal New NH | |||
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. | |||
3.3.3.4.2 State -- "RESPONSE_AWAITED" | 2.3.3.4.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: | |||
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 Downstream Mapping | Event: Internal Downstream Mapping | |||
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 | |||
connect the upstream label to the downstream label and allocate the | label, connect the upstream label to the downstream label and | |||
resources, send an LDP-MAPPING upstream with the upstream label and | allocate the resources, send an LDP-MAPPING upstream with the | |||
go to `ESTABLISHED'. | upstream label and go to `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 | |||
upstream and an LDP-RELEASE downstream, go to IDLE and delete the | upstream and an LDP-RELEASE downstream, go to IDLE 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 a protocol error from the upstream peer. | Ignore the event. It is a protocol error from the upstream peer. | |||
State: RESPONSE_AWAITED | State: RESPONSE_AWAITED | |||
Event: Internal Downstream Withdraw | Event: Internal Downstream Withdraw | |||
New State: RESPONSE_AWAITED | New State: RESPONSE_AWAITED | |||
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: 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 | |||
and the resources. | label and the resources. | |||
Send the event `Internal DeleteUpstream' to its Downstream LSP | Send the event `Internal DeleteUpstream' to its Downstream LSP | |||
Control Block's state machine. | 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 | |||
and the resources. Then, send an LDP-WITHDRAW upstream. | label 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 | |||
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 | |||
and the resources. | label and the resources. | |||
Send the event `Internal DeleteUpstream' to its Downstream LSP | Send the event `Internal DeleteUpstream' to its Downstream LSP | |||
Control Block's state machine. | 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 | |||
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 | |||
block. | ||||
Send event `Internal DeleteUpstream' to its old downstream control | Find a Downstream LSP Control Block that has the same FEC and the | |||
block. | 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 | ||||
`IDLE'. | ||||
Find a Downstream LSP Control Block which has the same FEC and the | If the state of the Downstream LSP Control Block is `ESTABLISHED', | |||
same next hop and also is able to merge more input labels. If not | choose an upstream label, connect the upstream label with the | |||
found, create a new Downstream LSP Control Block with the state | downstream label and send an LDP-MAPPING upstream with the | |||
`IDLE'. | upstream label, and go to the state `ESTABLISHED'. | |||
If the state of the Downstream LSP Control Block is `ESTABLISHED', | If the state of Downstream LSP Control Block is not `ESTABLISHED', | |||
choose an upstream label, connect the upstream label with the | set the state of the Upstream LSP Control Block to | |||
downstream label and send an LDP-MAPPING upstream with the upstream | `RESPONSE_AWAITED'. | |||
label, and go to the state `ESTABLISHED'. | ||||
If the state of Downstream LSP Control Block is not `ESTABLISHED', | Pass the event `Internal AddUpstream' to the new Downstream LSP | |||
set the state of the Upstream LSP Control Block to | Control Block's state machine. | |||
`RESPONSE_AWAITED'. | ||||
Pass the event `Internal AddUpstream' to the new Downstream LSP | 2.3.3.4.3 State -- "ESTABLISHED" | |||
Control Block's state machine. | ||||
3.3.3.4.3 State -- "ESTABLISHED" | State: ESTABLISHED | |||
State: ESTABLISHED | Event: LDP Request | |||
Event: LDP Request | New State: ESTABLISHED | |||
New State: ESTABLISHED | Actions | |||
Actions | Ignore the event. It is an internal implementation error. | |||
Ignore the event. It is an internal implementation error. | 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 | |||
LDP-MAPPING upstream. | ||||
Process the new attributes of the mapping and then propagate the | State: ESTABLISHED | |||
LDP-MAPPING upstream. | ||||
State: ESTABLISHED | Event: LDP Release | |||
New State: IDLE | ||||
Event: LDP Release | Actions | |||
New State: IDLE | Disconnect the upstream label from the downstream label, free the | |||
upstream label and resources. | ||||
Actions | Send the event `Internal DeleteUpstream' to its Downstream LSP | |||
Disconnect the upstream label from the downstream label, free the | Control Block's state machine. | |||
upstream label and resources. | ||||
Send the event `Internal DeleteUpstream' to its Downstream LSP | Send the event `Internal Destroy' to the Next_Hop_Trigger_Block's | |||
Control Block's state machine. | state machine if the LSR was in the middle of switching over to | |||
the better next hop. | ||||
Send the event `Internal Destroy' to the Next_Hop_Trigger_Block's | Delete the control block. | |||
state machine if the LSR was in the middle of switching over to the | ||||
better next hop. | ||||
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 | |||
internal `LDP Request' and send to its own state machine. | ||||
If it uses independent mode, set its state to `IDLE' and create a | Else | |||
internal `LDP Request' and send to its own state machine. | Disconnect the upstream label from the downstream label. | |||
Else | Propagate the LDP-WITHDRAW upstream and go to state | |||
Disconnect the upstream label from the downstream label. | `RELEASE_AWAITED'. | |||
Propagate the LDP-WITHDRAW upstream and go to state | Send the event `Internal Destroy' to the Next_Hop_Trigger_Block's | |||
`RELEASE_AWAITED'. | state machine if the LSR was in the middle of switching over to | |||
the better next hop. | ||||
Send the event `Internal Destroy' to the Next_Hop_Trigger_Block's | State: ESTABLISHED | |||
state machine if the LSR was in the middle of switching over to the | ||||
better next hop. | ||||
State: ESTABLISHED | Event: LDP Upstream Abort | |||
Event: LDP Upstream Abort | New State: ESTABLISHED | |||
New State: ESTABLISHED | Actions | |||
Actions | Ignore the event. | |||
Ignore the event. | Note: This scenario can occur if the upstream LSR sends a LDP- | |||
ABORT at about the same time as the local LSR sends a LDP-MAPPING. | ||||
In this situation, it should be up to exactly one of the two LSRs | ||||
as to whether or not the label that was sent remains valid. The | ||||
LDP specification [4] procedures leave the choice to the upstream | ||||
LSR that must send an LDP-RELEASE if it will not use the label | ||||
provided. | ||||
Note: This scenario can occur if the upstream LSR sends a LDP-ABORT | State: ESTABLISHED | |||
at about the same time as the local LSR sends a LDP-MAPPING. In this | ||||
situation, it should be up to exactly one of the two LSRs as to | ||||
whether or not the label that was sent remains valid. The LDP | ||||
specification [4] procedures leave the choice to the upstream LSR | ||||
which must send an LDP-RELEASE if it will not use the label provided. | ||||
State: ESTABLISHED | Event: Internal Downstream NAK | |||
Event: Internal Downstream NAK | 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 | |||
internal `LDP Request' and send to its own state machine. | ||||
If it uses independent mode, set its state to `IDLE' and create a | Else | |||
internal `LDP Request' and send to its own state machine. | Disconnect the upstream label from the downstream label | |||
Else | Send an LDP-WITHDRAW upstream and go to state | |||
Disconnect the upstream label from the downstream label | `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 | |||
state machine if the LSR was in the middle of switching over to | ||||
the better next hop. | ||||
Send the event `Internal Destroy' to the Next_Hop_Trigger_Block's | State: ESTABLISHED | |||
state machine if the LSR was in the middle of switching over to the | ||||
better next hop. | ||||
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 | |||
upstream label and the resources. | ||||
Disconnect the upstream label from the downstream label, free the | Send the event `Internal DeleteUpstream' to its Downstream LSP | |||
upstream label and the resources. | Control Block's state machine. | |||
Send the event `Internal DeleteUpstream' to its Downstream LSP | Send the event `Internal Destroy' to the Next_Hop_Trigger_Block's | |||
Control Block's state machine. | state machine if the LSR was in the middle of switching over to | |||
the better next hop. | ||||
Send the event `Internal Destroy' to the Next_Hop_Trigger_Block's | Delete the control block. | |||
state machine if the LSR was in the middle of switching over to the | ||||
better next hop. | ||||
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 label to the new downstream label. | Reconnect the upstream label to the new downstream label. | |||
Send the event `Internal DeleteUpstream' to its old Downstream LSP | Send the event `Internal DeleteUpstream' to its old Downstream LSP | |||
Control Block's state machine. | 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 `Internal | Create a new Next_Hop_Trigger_Control_Block and pass event | |||
New NH' to its state machine. | `Internal New NH' to its state machine. | |||
3.3.3.4.4 State -- "RELEASE_AWAITED" | 2.3.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: | |||
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 implementation 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 label 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 label 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. | |||
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 label 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. | 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. | |||
3.3.3.5 State of the Downstream LSP Control Block's State Machine | 2.3.3.5 State of the Downstream LSP Control Block's State Machine for | |||
for Downstream-on-demand Mode | 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 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 from the downstream LSR. | MAPPING from the downstream LSR. | |||
-- ESTABLISHED | -- ESTABLISHED | |||
This state means that the LSR has received the LDP-MAPPING from the | This state means that the LSR has received the LDP-MAPPING from the | |||
downstream LSR and the LSP is up and operational. | downstream LSR and the LSP is up and operational. | |||
3.3.3.6 Events of the Downstream LSP Control Block's State Machine | 2.3.3.6 Events of the Downstream LSP Control Block's State Machine for | |||
for Downstream-on-demand Mode | 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. | |||
skipping to change at page 50, line 18 | skipping to change at page 48, line 26 | |||
The LSR receives an LDP-WITHDRAW 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.3.3.7 State Transitions of the Downstream LSP Control Block's | 2.3.3.7 State Transitions of the Downstream LSP Control Block's State | |||
State Machine for Downstream-on-demand mode | 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) | |||
skipping to change at page 50, line 45 | skipping to change at page 49, line 5 | |||
| | | | | | |||
|(LDP Mapping) | | |(LDP Mapping) | | |||
| | | | | | |||
v | | v | | |||
+-------------------+ | | +-------------------+ | | |||
| | | | | | | | |||
| ESTABLISHED |-------->------+ | | ESTABLISHED |-------->------+ | |||
| | | | | | |||
+-------------------+ | +-------------------+ | |||
3.3.3.8 Downstream LSP Control Block's State Machine for | 2.3.3.8 Downstream LSP Control Block's State Machine for Downstream-on- | |||
Downstream-on-demand Mode. | demand Mode. | |||
3.3.3.8.1 State -- "IDLE" | 2.3.3.8.1 State -- "IDLE" | |||
State: IDLE | ||||
Event: Internal AddUpstream | State: IDLE | |||
New State: RESPONSE_AWAITED | Event: Internal AddUpstream | |||
Actions | New State: RESPONSE_AWAITED | |||
Initialize the list of pointers in the Upstream LSP Control Block to | Actions | |||
contain the newly added upstream pointer. | ||||
Send a new LDP-REQUEST downstream and go to the state | Initialize the list of pointers in the Upstream LSP Control Block | |||
`RESPONSE_AWAITED'. | to contain the newly added upstream pointer. | |||
State: IDLE | Send a new LDP-REQUEST downstream and go to the state | |||
`RESPONSE_AWAITED'. | ||||
Event: Internal DeleteUpstream | State: IDLE | |||
New State: IDLE | Event: Internal DeleteUpstream | |||
Actions | New State: IDLE | |||
Ignore the event. It is an internal implementation error. | Actions | |||
State: IDLE | Ignore the event. It is an internal implementation error. | |||
Event: LDP Mapping | State: IDLE | |||
New State: IDLE | Event: LDP Mapping | |||
Actions | New State: IDLE | |||
Ignore the event. It is an internal implementation error. | Actions | |||
State: IDLE | Ignore the event. It is an internal implementation error. | |||
Event: LDP Withdraw | State: IDLE | |||
New State: IDLE | Event: LDP Withdraw | |||
Actions | New State: IDLE | |||
Ignore the event. It is an internal implementation error. | Actions | |||
State: IDLE | Ignore the event. It is an internal implementation error. | |||
Event: LDP Downstream NAK | State: IDLE | |||
New State: IDLE | ||||
Actions | Event: LDP Downstream NAK | |||
Ignore the event. It is an internal implementation error. | New State: IDLE | |||
State: IDLE | Actions | |||
Event: Downstream Lost | Ignore the event. It is an internal implementation error. | |||
New State: IDLE | State: IDLE | |||
Actions | Event: Downstream Lost | |||
Ignore the event. It is an internal implementation error. | New State: IDLE | |||
3.3.3.8.2 State -- "RESPONSE_AWAITED" | Actions | |||
State: RESPONSE_AWAITED | Ignore the event. It is an internal implementation error. | |||
Event: Internal AddUpstream | 2.3.3.8.2 State -- "RESPONSE_AWAITED" | |||
New State: RESPONSE_AWAITED | State: RESPONSE_AWAITED | |||
Actions | Event: Internal AddUpstream | |||
Add the pointer to new Upstream LSP Control Block to the Upstream LSP | New State: RESPONSE_AWAITED | |||
Control Blocks pointer list. | ||||
State: RESPONSE_AWAITED | Actions | |||
Event: Internal DeleteUpstream | Add the pointer to new Upstream LSP Control Block to the Upstream | |||
LSP Control Blocks pointer list. | ||||
New State: Depend on the action routine | State: RESPONSE_AWAITED | |||
Actions | Event: Internal DeleteUpstream | |||
Delete the Upstream LSP Control Block pointer from the Upstream LSP | New State: Depend on the action routine | |||
Control Block pointers list. | ||||
If the list becomes empty, release the resources, send an LDP-Abort | Actions | |||
downstream, go to IDLE and then delete the control block. | ||||
State: RESPONSE_AWAITED | Delete the Upstream LSP Control Block pointer from the Upstream | |||
LSP Control Block pointers list. | ||||
Event: LDP Mapping | If the list becomes empty, release the resources, send an LDP- | |||
Abort downstream, go to IDLE and then delete the control block. | ||||
New State: ESTABLISHED | State: RESPONSE_AWAITED | |||
Actions | Event: LDP Mapping | |||
For each Upstream LSP Control Block in the Upstream LSP Control Block | New State: ESTABLISHED | |||
pointers list, pass the event `Internal Downstream Mapping' to its | ||||
state machine. | ||||
State: RESPONSE_AWAITED | Actions | |||
Event: LDP Withdraw | For each Upstream LSP Control Block in the Upstream LSP Control | |||
Block pointers list, pass the event `Internal Downstream Mapping' | ||||
to its state machine. | ||||
New State: RESPONSE_AWAITED | State: RESPONSE_AWAITED | |||
Actions | Event: LDP Withdraw | |||
It is a protocol error from the downstream LDP peer; send a LDP- | New State: RESPONSE_AWAITED | |||
RELEASE downstream | ||||
State: RESPONSE_AWAITED | Actions | |||
Event: LDP Downstream NAK | It is a protocol error from the downstream LDP peer; send a LDP- | |||
RELEASE downstream | ||||
New State: IDLE | State: RESPONSE_AWAITED | |||
Actions | Event: LDP Downstream NAK | |||
For each Upstream LSP Control Block in the Upstream LSP Control Block | New State: IDLE | |||
pointers list, pass the event `Internal Downstream NAK' to its state | ||||
machine. | ||||
Release the resources, and delete the control block. | Actions | |||
State: RESPONSE_AWAITED | For each Upstream LSP Control Block in the Upstream LSP Control | |||
Block pointers list, pass the event `Internal Downstream NAK' to | ||||
its state machine. | ||||
Event: Downstream Lost | Release the resources, and delete the control block. | |||
New State: IDLE | State: RESPONSE_AWAITED | |||
Actions | Event: Downstream Lost | |||
For each Upstream LSP Control Block in the Upstream LSP Control Block | New State: IDLE | |||
pointers list, pass the event `Internal Downstream NAK' to its state | ||||
machine. | ||||
Release the resources, and delete the control block. | Actions | |||
3.3.3.8.3 State -- "ESTABLISHED" | For each Upstream LSP Control Block in the Upstream LSP Control | |||
Block pointers list, pass the event `Internal Downstream NAK' to | ||||
its state machine. | ||||
State: ESTABLISHED | Release the resources, and delete the control block. | |||
Event: Internal AddUpstream | ||||
New State: ESTABLISHED | 2.3.3.8.3 State -- "ESTABLISHED" | |||
Actions | State: ESTABLISHED | |||
Add the pointer to new Upstream LSP Control Block to the Upstream LSP | Event: Internal AddUpstream | |||
Control Block pointers list. | ||||
State: ESTABLISHED | New State: ESTABLISHED | |||
Event: Internal DeleteUpstream | Actions | |||
New State: Depends on the action routine. | Add the pointer to new Upstream LSP Control Block to the Upstream | |||
LSP Control Block pointers list. | ||||
Actions | State: ESTABLISHED | |||
Delete the pointer of Upstream LSP Control Block from its Upstream | Event: Internal DeleteUpstream | |||
LSP Control Block pointers list. | ||||
If the list becomes empty, release the resources, send an LDP-RELEASE | New State: Depends on the action routine. | |||
downstream, go to IDLE and then delete the control block. | ||||
Otherwise, remain in the ESTABLISHED state. | Actions | |||
State: ESTABLISHED | Delete the pointer of Upstream LSP Control Block from its Upstream | |||
LSP Control Block pointers list. | ||||
Event: LDP Mapping | If the list becomes empty, release the resources, send an LDP- | |||
RELEASE downstream, go to IDLE and then delete the control block. | ||||
New State: ESTABLISHED | Otherwise, remain in the ESTABLISHED state. | |||
Actions | State: ESTABLISHED | |||
For each Upstream LSP Control Block in the Upstream LSP Control Block | Event: LDP Mapping | |||
pointers list, pass the event `Internal Downstream mapping' to its | ||||
state machine. | ||||
State: ESTABLISHED | New State: ESTABLISHED | |||
Event: LDP Withdraw | Actions | |||
New State: IDLE | For each Upstream LSP Control Block in the Upstream LSP Control | |||
Block pointers list, pass the event `Internal Downstream mapping' | ||||
to its state machine. | ||||
Actions | State: ESTABLISHED | |||
For each Upstream LSP Control Block in the Upstream LSP Control Block | Event: LDP Withdraw | |||
pointers list, pass the event `Internal Downstream withdraw' to its | ||||
state machine. | ||||
Release the resources, and delete the control block and send LDP- | New State: IDLE | |||
RELEASE downstream. | Actions | |||
State: ESTABLISHED | For each Upstream LSP Control Block in the Upstream LSP Control | |||
Block pointers list, pass the event `Internal Downstream withdraw' | ||||
to its state machine. | ||||
Event: LDP Downstream NAK | Release the resources, and delete the control block and send LDP- | |||
RELEASE downstream. | ||||
New State: ESTABLISHED | State: ESTABLISHED | |||
Actions | Event: LDP Downstream NAK | |||
It is a protocol error from the downstream LDP peer. | New State: ESTABLISHED | |||
3.3.3.9 State of the Next_Hop_Trigger_Control_Block's State Machine | Actions | |||
for Downstream-on-demand Mode | ||||
It is a protocol error from the downstream LDP peer. | ||||
2.3.3.9 State of the Next_Hop_Trigger_Control_Block's State Machine for | ||||
Downstream-on-demand Mode | ||||
-- IDLE | -- IDLE | |||
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 from the | downstream LSR. The LSR is waiting for the LDP-MAPPING from the | |||
downstream LSR. | downstream LSR. | |||
3.3.3.10 Events of the Next_Hop_Trigger_Control_Block's State Machine | 2.3.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 Downstream | machine. This Downstream LSP Control Block is the merged Downstream | |||
LSP Control Block of this Upstream LSP Control Block. The event is | LSP Control Block of this Upstream LSP Control Block. The event is | |||
the result of receiving an LDP-MAPPING by the Downstream LSP Control | the result of receiving an LDP-MAPPING by the Downstream LSP Control | |||
Block's state machine. | 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 Downstream | machine. This Downstream LSP Control Block is the merged Downstream | |||
LSP Control Block of this Upstream LSP Control Block. The event is | LSP Control Block of this Upstream LSP Control Block. The event is | |||
the result of receiving an LDP-NAK by the Downstream LSP Control | the result of receiving an LDP-NAK by the Downstream LSP Control | |||
Block's state machine, or it detects an error. | 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.3.3.11 State Transitions of the Next_Hop_Trigger_Control_Block's State | 2.3.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 | |||
+---------------------+ | +---------------------+ | |||
| | | | | | |||
| IDLE |<------------+ | | IDLE |<------------+ | |||
| | | | | | | | |||
+---------------------+ | | +---------------------+ | | |||
| | | | | | |||
| | | | | | |||
| (Internal New NH) | | | (Internal New NH) | | |||
| | | | | | |||
v | | v | | |||
+---------------------+ | | +---------------------+ | | |||
| | | | | | | | |||
| NEW_NH_RETRY |----------->-+ | | NEW_NH_RETRY |----------->-+ | |||
| | (Internal | | | | (Internal | | |||
+---------------------+ Destroy) | | +---------------------+ Destroy) | | |||
| | | | | | |||
| | | | | | |||
| (Internal retry timeout) | | | (Internal retry timeout) | | |||
| | | | | | |||
v | | v | | |||
+---------------------+ | | +---------------------+ | | |||
| | (Internal | | | | (Internal | | |||
| NEW_NH_RESPONSE | Destroy) | | | NEW_NH_RESPONSE | Destroy) | | |||
| _AWAITED |----------->-+ | | _AWAITED |----------->-+ | |||
| | | | | | | | |||
+---------------------+ | | +---------------------+ | | |||
| | | | | | |||
| (Internal Downstream | | | (Internal Downstream | | |||
| Mapping | | | Mapping | | |||
| (Internal Downstream | | | (Internal Downstream | | |||
| NAK) | | | NAK) | | |||
+------------------------>-+ | +------------------------>-+ | |||
3.3.3.12 State Machine | 2.3.3.12 State Machine | |||
3.3.3.12.1 State -- "IDLE" | ||||
State: IDLE | 2.3.3.12.1 State -- "IDLE" | |||
Event: Internal New NH | State: IDLE | |||
New State: NEW_NH_RETRY | Event: Internal New NH | |||
Actions: | New State: NEW_NH_RETRY | |||
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 State: 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 State: 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 State: 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 State: IDLE | New State: IDLE | |||
Actions: | ||||
Ignore. It is an internal implementation error. | Actions: | |||
3.3.3.12.2 State -- "NEW_NH_RETRY" | Ignore. It is an internal implementation error. | |||
State: NEW_NH_RETRY | 2.3.3.12.2 State -- "NEW_NH_RETRY" | |||
Event: Internal New NH | State: NEW_NH_RETRY | |||
New State: NEW_NH_RETRY | Event: Internal New NH | |||
Actions: | New State: NEW_NH_RETRY | |||
Restart the LSP retry timer. | Actions: | |||
State: NEW_NH_RETRY | Restart the LSP retry timer. | |||
Event: Internal retry timeout | State: NEW_NH_RETRY | |||
New State: Depends on the action routine. | Event: Internal retry timeout | |||
Actions: | New State: Depends on the action routine. | |||
If the new next hop is the same one as the old next hop, go to IDLE | Actions: | |||
and delete the control block. | ||||
Otherwise, go to NEW_NH_RESPONSE_AWAITED, find an downstream LSP | If the new next hop is the same one as the old next hop, go to | |||
control block which go through the same next hop for the same FEC, if | IDLE and delete the control block. | |||
there is no one, create one, and pass `Internal AddUpstream' event to | ||||
its state machine. | ||||
State: NEW_NH_RETRY | Otherwise, go to NEW_NH_RESPONSE_AWAITED, find a downstream LSP | |||
control block that goes through the same next hop for the same | ||||
FEC, if there are none, create one, and pass 'Internal | ||||
AddUpstream' event to its state machine. | ||||
Event: Internal Downstream Mapping | State: NEW_NH_RETRY | |||
New State: NEW_NH_RETRY | Event: Internal Downstream Mapping | |||
Actions: | New State: NEW_NH_RETRY | |||
Ignore. It is an internal implementation error. | Actions: | |||
State: NEW_NH_RETRY | Ignore. It is an internal implementation error. | |||
Event: Internal Downstream NAK | State: NEW_NH_RETRY | |||
New State: NEW_NH_RETRY | Event: Internal Downstream NAK | |||
Actions: | ||||
Ignore. It is an internal implementation error. | New State: NEW_NH_RETRY | |||
State: NEW_NH_RETRY | Actions: | |||
Event: Internal destroy | Ignore. It is an internal implementation error. | |||
New State: IDLE | State: NEW_NH_RETRY | |||
Actions: | Event: Internal destroy | |||
Stop the timer and delete the control block. | New State: IDLE | |||
3.3.3.12.3 State -- "NEW_NH_RESPONSE_AWAITED" | Actions: | |||
State: NEW_NH_RESPONSE_AWAITED | Stop the timer and delete the control block. | |||
Event: Internal New NH | 2.3.3.12.3 State -- "NEW_NH_RESPONSE_AWAITED" | |||
New State: NEW_NH_RETRY | State: NEW_NH_RESPONSE_AWAITED | |||
Actions: | Event: Internal New NH | |||
Restart the LSP retry timer and send event `Internal destroy' to the | New State: NEW_NH_RETRY | |||
control block of the LSP for the new next hop. | ||||
State: NEW_NH_RESPONSE_AWAITED | Actions: | |||
Event: Internal retry timeout | Restart the LSP retry timer and send event `Internal destroy' to | |||
the control block of the LSP for the new next hop. | ||||
New State: NEW_NH_RESPONSE_AWAITED | State: NEW_NH_RESPONSE_AWAITED | |||
Actions: | Event: Internal retry timeout | |||
Ignore. It is an internal implementation error. | New State: NEW_NH_RESPONSE_AWAITED | |||
State: NEW_NH_RESPONSE_AWAITED | Actions: | |||
Event: Internal Downstream Mapping | Ignore. It is an internal implementation error. | |||
New State: IDLE | State: NEW_NH_RESPONSE_AWAITED | |||
Actions: | Event: Internal Downstream Mapping | |||
Send event `Internal Re-cross-connect' event to the upstream LSP | New State: IDLE | |||
control block of the new next hop. | ||||
Send event `DeleteUpstream' event to the downstream LSP control block | Actions: | |||
of the the new next hop, since the upstream has spliced into the new | ||||
next hop. | ||||
Delete the control block. | Send event `Internal Re-cross-connect' event to the upstream LSP | |||
control block of the new next hop. | ||||
Send event `DeleteUpstream' event to the downstream LSP control | ||||
block of the the new next hop, since the upstream has spliced into | ||||
the new next hop. | ||||
Delete the control block. | ||||
State: NEW_NH_RESPONSE_AWAITED | State: NEW_NH_RESPONSE_AWAITED | |||
Event: Internal Downstream NAK | Event: Internal Downstream NAK | |||
New State: 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 State: 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.3.4 LDP Related Message Processing | 2.3.4 LDP Related Message Processing | |||
- If an LSR receives an LDP-REQUEST: | - If an LSR receives an LDP-REQUEST: | |||
a) If this is a duplicate request, discard the message. A duplicate | a) If this is a duplicate request, discard the message. A | |||
request means that there is a LSP Control Block which has same FEC, | duplicate request means that there is a LSP Control Block that | |||
same Upstream Label Request ID and same Upstream LDP Session | has the same FEC, Upstream Label Request ID and Upstream LDP | |||
Identifier. | Session Identifier. | |||
b) Otherwise, create a new Upstream LSP Control Block. Then pass the | b) Otherwise, create a new Upstream LSP Control Block. Then pass | |||
event `LDP Request' to this Upstream LSP Control Block's state | the event `LDP Request' to this Upstream LSP Control Block's | |||
machine. | state machine. | |||
- If an LSR receives an LDP-MAPPING: | - 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 that has the same FEC, the | |||
same Downstream LDP Session Identifier and the same Downstream Label. | same Downstream LDP Session Identifier and the same Downstream | |||
If a Downstream LSP Control Block is found, pass the event `LDP | Label. If a Downstream LSP Control Block is found, pass the event | |||
Mapping' to its state table. This could mean that the attributes of | `LDP Mapping' to its state table. This could mean that the | |||
label binding have changed. | attributes of label binding have changed. | |||
Otherwise, use the Downstream LDP request ID (the 'Label Request | Otherwise, use the Downstream LDP request ID (the 'Label Request | |||
Message ID' field in the LDP-MAPPING) 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 Downstream LSP | event `LDP Mapping' to its state machine. If no Downstream LSP | |||
Control Block is found, ignore the message. | Control Block is found, ignore the message. | |||
- If an LSR receives an LDP-RELEASE: | - 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 that has the same FEC, the | |||
Upstream Label, the same Upstream LDP Session Identifier. If no | same Upstream Label, the same Upstream LDP Session Identifier. If | |||
Upstream LSP Control Block is found, ignore the message. If an | no 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' | |||
its state machine. | to its state machine. | |||
- If an LSR receives an LDP-WITHDRAW: | - 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 that has the same FEC, the | |||
Downstream LDP Session Identifier and the same Downstream Label. | same Downstream LDP Session Identifier and the same Downstream | |||
Pass the event `LDP Withdraw' to its state machines. | Label. Pass 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 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 that are affected 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 | |||
to locate the Upstream LSP Control Block and pass the event `LDP | Identifier to locate the Upstream LSP Control Block and pass the | |||
Abort' to its state machine. | event `LDP 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 | |||
to locate a Downstream_LSP_control_block and pass the event `LDP | Identifier to locate a Downstream_LSP_control_block and pass the | |||
Downstream NAK' to its state machine. | event `LDP Downstream NAK' to its state machine. | |||
4. State Machine for Downstream Unsolicited | 3. 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. | that 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 | |||
independent 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 supported in | In downstream unsolicited mode, multiple path is not supported in | |||
this version and will be For Further Study (FFS). We suspect with | this version and will be For Further Study (FFS). We suspect with | |||
multiple next hops and Downstream mode, it is easy to get into a loop | multiple next hops and Downstream mode, it is easy to get into a loop | |||
condition. | condition. | |||
4.1 Control Block | 3.1 Control Block | |||
There are 2 types of control blocks involved: Upstream LSP Control | There are 2 types of control blocks involved: Upstream LSP Control | |||
Block, Downstream LSP Control Block. | 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 corresponding to a LDP peer. A Upstream | routing table, with each one corresponding to a LDP peer. A Upstream | |||
LSP Control Block is created for each FEC when there is a label ready | LSP Control Block is created for each FEC when there is a label ready | |||
to be distributed to that upstream. It is deleted when the FEC is | 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 | deleted from the FEC table, or the LDP peer disappears, or the | |||
downstream label is withdrawed. | downstream label is withdrawn. | |||
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. | |||
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) | |||
- FEC | - FEC | |||
Upstream Label and Upstream LDP Session Identifier, or FEC and | Upstream Label and Upstream LDP Session Identifier, or FEC and | |||
Upstream LDP Session Identifier can be used to locate a unique | Upstream LDP Session Identifier can be used to locate a unique | |||
Upstream LSP Control Block. | Upstream LSP Control Block. | |||
A Downstream LSP Control Block may contain the following information: | A Downstream LSP Control Block may contain the following information: | |||
- 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 | |||
Downstream 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.2 States of the Upstream LSP Control Block's State Machine | 3.2 States of the Upstream LSP Control Block's State Machine for | |||
for Downstream Mode | 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 from the | This state means that the LSR has received the LDP-MAPPING 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 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. | |||
-- RESOURCES_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.3 Events of the Upstream LSP Control Block's State Machine | 3.3 Events of the Upstream LSP Control Block's State Machine for | |||
for Downstream Mode | 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 by the | machine. The event is the result of receiving an LDP-MAPPING by the | |||
Downstream LSP Control Block's state machine. Or when the LDP peer is | Downstream LSP Control Block's state machine. Or when the LDP peer | |||
discovered and there is a downstream Label available for this FEC. | is discovered and there is a downstream Label available for this 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 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 | This event means the local resource (such as label) becomes | |||
available. | available. | |||
-- Delete FEC | -- Delete FEC | |||
This event means that either the FEC is removed from the forwarding | This event means that 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. | |||
4.4 State Transitions of Upstream LSP Control Block's State | 3.4 State Transitions of Upstream LSP Control Block's State Machine for | |||
Machine for Downstream Mode | Downstream Mode | |||
| | | | |||
|(created when | |(created when | |||
|a label is to be distributed | |a label is to be distributed | |||
| to the LDP peer) | | to the LDP peer) | |||
v | v | |||
+-------------------+ | +-------------------+ | |||
| | | | | | |||
| IDLE |<--------------+ | | IDLE |<--------------+ | |||
| | | | | | | | |||
+-------------------+ | | +-------------------+ | | |||
| |(LDP Release) | | |(LDP Release) | |||
| | | | | | |||
| | | | | | |||
| | | | | | |||
|(Internal Downstream | | |(Internal Downstream | | |||
+-------------------| Mapping) | | +-------------------| Mapping) | | |||
| | | | | | | | |||
|(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 | |||
| | | | Downstream | | | | | Downstream | |||
| | | | Withdraw) | | | | | Withdraw) | |||
| | +-------------------+ | | | | +-------------------+ | | |||
+--------->| | | | +--------->| | | | |||
| |RESOURCES_AWAITED |---------------+ | | |RESOURCES_AWAITED |---------------+ | |||
| | | | | | | | | | |||
| +-------------------+ | | | +-------------------+ | | |||
| | | | | | |||
| (Internal Downstream Withdraw) |(LDP Release) | | (Internal Downstream Withdraw) |(LDP Release) | |||
| +-------------------+ | | | +-------------------+ | | |||
| | | | | | | | | | |||
+---->| RELEASE_AWAITED |---------------+ | +---->| RELEASE_AWAITED |---------------+ | |||
| | | | | | |||
+-------------------+ | +-------------------+ | |||
4.5 Upstream LSP Control Block's State Machine for | 3.5 Upstream LSP Control Block's State Machine for Downstream Mode | |||
Downstream Mode | ||||
4.5.1 : State -- "IDLE" | 3.5.1 : State -- "IDLE" | |||
State: IDLE | State: IDLE | |||
Event: Internal Downstream mapping | Event: Internal Downstream mapping | |||
New State: Depends on the action routine. | New State: Depends on the action routine. | |||
Actions | Actions | |||
Choose an upstream label, connect the upstream label with the | Choose an upstream label, connect the upstream label with the | |||
downstream label, propagate the LDP-MAPPING upstream and go to state | downstream label, propagate the LDP-MAPPING upstream and go to | |||
`ESTABLISHED' | state `ESTABLISHED' | |||
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. | |||
State: IDLE | State: IDLE | |||
Event: Internal Downstream Withdraw | Event: Internal Downstream 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: Resource Available | Event: Resource Available | |||
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: Delete FEC | ||||
New State: IDLE | Event: Delete FEC | |||
Actions | New State: IDLE | |||
Delete the control block. | Actions | |||
State: IDLE | Delete the control block. | |||
Event: Upstream Lost | State: IDLE | |||
New State: IDLE | Event: Upstream Lost | |||
Actions | New State: IDLE | |||
Delete the control block. | Actions | |||
4.5.2 : State -- "ESTABLISHED" | Delete the control block. | |||
State: ESTABLISHED | 3.5.2 : State -- "ESTABLISHED" | |||
Event: Internal Downstream Mapping | State: ESTABLISHED | |||
New State: ESTABLISHED | Event: Internal Downstream Mapping | |||
Actions | New State: ESTABLISHED | |||
Process the new attributes of the new mapping message. | Actions | |||
Propagate the LDP-MAPPING upstream. | Process the new attributes of the new mapping message. | |||
State: ESTABLISHED | Propagate the LDP-MAPPING upstream. | |||
Event: LDP Release | State: ESTABLISHED | |||
New State: IDLE | Event: LDP Release | |||
Actions | New State: IDLE | |||
Disconnect upstream label from downstream label. | Actions | |||
Release the upstream label resource | Disconnect upstream label from downstream label. | |||
Delete the control block. | Release the upstream label resource | |||
State: ESTABLISHED | Delete the control block. | |||
Event: Internal Downstream Withdraw | ||||
New State: RELEASE_AWAITED | State: ESTABLISHED | |||
Actions | Event: Internal Downstream Withdraw | |||
Disconnect upstream label from downstream label. | New State: RELEASE_AWAITED | |||
Propagate the LDP-WITHDRAW upstream. | Actions | |||
State: ESTABLISHED | Disconnect upstream label from downstream label. | |||
Event: Resource Available | Propagate the LDP-WITHDRAW upstream. | |||
New State: ESTABLISHED | State: ESTABLISHED | |||
Actions | Event: Resource Available | |||
Ignore the event. It is an internal implementation error. | New State: ESTABLISHED | |||
State: ESTABLISHED | Actions | |||
Event: Delete FEC | Ignore the event. It is an internal implementation error. | |||
New State: RELEASE_AWAITED | State: ESTABLISHED | |||
Actions | Event: Delete FEC | |||
Send a LDP-WITHDRAW upstream. | New State: RELEASE_AWAITED | |||
State: ESTABLISHED | Actions | |||
Event: Upstream Lost | Send a LDP-WITHDRAW upstream. | |||
New State: IDLE | State: ESTABLISHED | |||
Actions | Event: Upstream Lost | |||
Release the upstream label and delete the control block. | New State: IDLE | |||
4.5.3 : State -- "RELEASE_AWAITED" | Actions | |||
State: RELEASE_AWAITED | Release the upstream label and delete the control block. | |||
Event: Internal Downstream Mapping | 3.5.3 : State -- "RELEASE_AWAITED" | |||
New State: RELEASE_AWAITED | State: RELEASE_AWAITED | |||
Actions | ||||
Ignore the message. | Event: Internal Downstream Mapping | |||
New State: RELEASE_AWAITED | ||||
State: RELEASE_AWAITED | Actions | |||
Event: LDP Release | Ignore the message. | |||
New State: IDLE | State: RELEASE_AWAITED | |||
Actions | Event: LDP Release | |||
Release the upstream label and delete the control block. | New State: IDLE | |||
State: RELEASE_AWAITED | Actions | |||
Event: Internal Downstream Withdraw | Release the upstream label and delete the control block. | |||
New State: RELEASE_AWAITED | State: RELEASE_AWAITED | |||
Actions | Event: Internal Downstream Withdraw | |||
Ignore the event. | New State: RELEASE_AWAITED | |||
State: RELEASE_AWAITED | Actions | |||
Event: Resource Available | Ignore the event. | |||
New State: RELEASE_AWAITED | State: RELEASE_AWAITED | |||
Actions | Event: Resource Available | |||
Ignore the event. It is an internal implementation error. | New State: RELEASE_AWAITED | |||
State: RELEASE_AWAITED | Actions | |||
Event: Delete FEC | Ignore the event. It is an internal implementation error. | |||
New State: RELEASE_AWAITED | State: RELEASE_AWAITED | |||
Actions | Event: Delete FEC | |||
Do nothing. | New State: RELEASE_AWAITED | |||
State: RELEASE_AWAITED | Actions | |||
Event: Upstream Lost | Do nothing. | |||
New State: IDLE | ||||
Actions | State: RELEASE_AWAITED | |||
Event: Upstream Lost | ||||
Release the upstream label and delete the control block. | New State: IDLE | |||
4.5.4 : State -- "RESOURCE_AWAITED" | Actions | |||
State: RESOURCE_AWAITED | Release the upstream label and delete the control block. | |||
Event: Internal Downstream Mapping | 3.5.4 : State -- "RESOURCE_AWAITED" | |||
New State: RESOURCE_AWAITED | State: RESOURCE_AWAITED | |||
Actions | Event: Internal Downstream Mapping | |||
Ignore the message. | New State: RESOURCE_AWAITED | |||
State: RESOURCE_AWAITED | Actions | |||
Event: LDP Release | Ignore the message. | |||
New State: RESOURCE_AWAITED | State: RESOURCE_AWAITED | |||
Actions | Event: LDP Release | |||
Ignore the message. It is an internal implementation error. | New State: RESOURCE_AWAITED | |||
State: RESOURCE_AWAITED | Actions | |||
Event: Internal Downstream Withdraw | Ignore the message. It is an internal implementation error. | |||
New State: IDLE | State: RESOURCE_AWAITED | |||
Actions | Event: Internal Downstream Withdraw | |||
Delete the control block. | New State: IDLE | |||
State: RESOURCE_AWAITED | Actions | |||
Event: Resource Available | Delete the control block. | |||
New State: ESTABLISHED | State: RESOURCE_AWAITED | |||
Actions | Event: Resource Available | |||
Allocate an upstream label, connect the upstream label with the | New State: ESTABLISHED | |||
downstream label, and send LDP-MAPPING upstream. | Actions | |||
State: RESOURCE_AWAITED | Allocate an upstream label, connect the upstream label with the | |||
downstream label, and send LDP-MAPPING upstream. | ||||
Event: Delete FEC | State: RESOURCE_AWAITED | |||
New State: IDLE | Event: Delete FEC | |||
Actions | New State: IDLE | |||
Delete the control block. | Actions | |||
State: RESOURCE_AWAITED | Delete the control block. | |||
Event: Upstream Lost | State: RESOURCE_AWAITED | |||
New State: IDLE | Event: Upstream Lost | |||
Actions | New State: IDLE | |||
Delete the control block. | Actions | |||
4.6 State of the Downstream LSP Control Block's State Machine | Delete the control block. | |||
for Downstream Mode | ||||
3.6 State of the Downstream LSP Control Block's State Machine 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 from the | This state means that the LSR has received the LDP-MAPPING from the | |||
downstream LSR. | downstream LSR. | |||
4.7 Events of the Downstream LSP Control Block's State Machine | 3.7 Events of the Downstream LSP Control Block's State Machine for | |||
for Downstream Mode | Downstream Mode | |||
-- LDP Mapping | -- LDP Mapping | |||
The LSR receives an LDP-MAPPING from a downstream LSR. | The LSR receives an LDP-MAPPING from a downstream 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. | |||
-- Delete FEC | -- Delete FEC | |||
skipping to change at page 72, line 14 | skipping to change at page 71, line 17 | |||
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 | |||
The downstream peer is gone. | The downstream peer is gone. | |||
4.8 State Transitions of Downstream LSP Control Block's State | 3.8 State Transitions of Downstream LSP Control Block's State Machine | |||
Machine for Downstream Mode | for Downstream Mode | |||
| | | | |||
|(FEC is being added into the forwarding table) | |(FEC is being added into the forwarding table) | |||
v | v | |||
+-------------------+ | +-------------------+ | |||
| | | | | | |||
| IDLE |<--------------+ | | IDLE |<--------------+ | |||
| | | | | | | | |||
+-------------------+ | | +-------------------+ | | |||
| | | | | | |||
| |(LDP Withdraw) | | |(LDP Withdraw) | |||
| |(Internal New NH) | | |(Internal New NH) | |||
| |(Downstream Lost) | | |(Downstream Lost) | |||
| (LDP Mapping) | | | (LDP Mapping) | | |||
| | | | | | |||
v | | v | | |||
+-------------------+ | | +-------------------+ | | |||
| | | | | | | | |||
| ESTABLISHED |---------------+ | | ESTABLISHED |---------------+ | |||
| | | | | | |||
+-------------------+ | +-------------------+ | |||
| | | | |||
|(FEC is deleted from the forwarding table) | |(FEC is deleted from the forwarding table) | |||
v | v | |||
4.9 Downstream LSP Control Block's State Machine | 3.9 Downstream LSP Control Block's State Machine for Downstream Mode | |||
for Downstream Mode | ||||
4.9.1 : State -- "IDLE" | 3.9.1 : State -- "IDLE" | |||
State: IDLE | State: IDLE | |||
Event: LDP mapping | Event: LDP mapping | |||
New State: ESTABLISHED | ||||
Actions | New State: ESTABLISHED | |||
Actions | ||||
For all the LDP peers except the downstream LSR which assigned the | For all the LDP peers except the downstream LSR that assigned the | |||
label, create an Upstream LSP Control Block, and pass the event | label, create an Upstream LSP Control Block, and pass the event | |||
`Internal Downstream Mapping' to each of the Upstream LSP Control | `Internal Downstream Mapping' to each of the Upstream LSP Control | |||
Block's state machines. | Block's state machines. | |||
State: IDLE | State: IDLE | |||
Event: LDP withdraw | Event: LDP withdraw | |||
New State: IDLE | New State: IDLE | |||
Actions | Actions | |||
Ignore the event. It is an internal implementation error. | ||||
State: IDLE | Ignore the event. It is an internal implementation error. | |||
Event: Delete FEC | State: IDLE | |||
New State: IDLE | Event: Delete FEC | |||
Actions | New State: IDLE | |||
Delete the control block. | Actions | |||
State: IDLE | Delete the control block. | |||
Event: Next Hop Change | State: IDLE | |||
New State: IDLE | Event: Next Hop Change | |||
Actions | New State: IDLE | |||
Ignore the event. | Actions | |||
State: IDLE | Ignore the event. | |||
Event: Downstream Lost | State: IDLE | |||
New State: IDLE | Event: Downstream Lost | |||
Actions | New State: IDLE | |||
Ignore the event. | Actions | |||
4.9.2 : State -- "ESTABLISHED" | Ignore the event. | |||
State: ESTABLISHED | 3.9.2 : State -- "ESTABLISHED" | |||
Event: LDP mapping | State: ESTABLISHED | |||
New State: ESTABLISHED | Event: LDP mapping | |||
Actions | New State: ESTABLISHED | |||
For each Upstream_LSP_control_block of this FEC, pass event `Internal | Actions | |||
downstream mapping' to its state machine. | ||||
State: ESTABLISHED | For each Upstream_LSP_control_block of this FEC, pass event | |||
`Internal downstream mapping' to its state machine. | ||||
Event: LDP withdraw | State: ESTABLISHED | |||
New State: IDLE | Event: LDP withdraw | |||
Actions | New State: IDLE | |||
For each Upstream_LSP_control_block for this FEC, pass event | Actions | |||
`Internal downstream Withdraw' to its state machine. | ||||
Send a LDP Withdraw downstream. | For each Upstream_LSP_control_block for this FEC, pass event | |||
`Internal downstream Withdraw' to its state machine. | ||||
State: ESTABLISHED | Send a LDP Withdraw downstream. | |||
Event: Delete FEC | State: ESTABLISHED | |||
New State: IDLE | Event: Delete FEC | |||
Actions | New State: IDLE | |||
Send LDP-RELEASE downstream and delete the control block. | Actions | |||
Send LDP-RELEASE downstream and delete the control block. | ||||
State: ESTABLISHED | State: ESTABLISHED | |||
Event: Next Hop Change | Event: Next Hop Change | |||
New State: IDLE | New State: IDLE | |||
Actions | Actions | |||
For each Upstream_LSP_control_block for this FEC, pass event | For each Upstream_LSP_control_block for this FEC, pass event | |||
`Internal downstream Withdraw' to its state machine. | `Internal downstream Withdraw' to its state machine. | |||
Send LDP-REQUEST to the new next hop. | Send LDP-REQUEST to the new next hop. | |||
State: ESTABLISHED | State: ESTABLISHED | |||
Event: Downstream Lost | Event: Downstream Lost | |||
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.10 LDP Related Message Processing for downstream mode. | 3.10 LDP Related Message Processing for downstream mode. | |||
- If an LSR receives an LDP-REQUEST: | - 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 | |||
create a new Upstream_Control_Block and pass `internal Mapping' event | `ESTABLISHED', create a new Upstream_Control_Block and pass | |||
to its state machine. | `internal Mapping' event to its state machine. | |||
- If an LSR receives an LDP-MAPPING: | - 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 that has the same FEC, the | |||
same Downstream LDP Session Identifier and the same Downstream Label. | same Downstream LDP Session Identifier and the same Downstream | |||
If a Downstream LSP Control Block is found, pass the event `LDP | Label. If a Downstream LSP Control Block is found, pass the event | |||
Mapping' to its state table. This could mean that the attributes of | `LDP Mapping' to its state table. This could mean that the | |||
label binding have changed. | attributes of 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 | |||
hop is the this downstream peer, pass the event `LDP Mapping' to its | next hop is the this downstream peer, pass the event `LDP Mapping' | |||
state machine. | to its state machine. | |||
- If an LSR receives an LDP-RELEASE: | - 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 that has the same FEC, the | |||
Upstream Label, the same Upstream LDP Session Identifier. If no | same Upstream Label, the same Upstream LDP Session Identifier. If | |||
Upstream LSP Control Block is found, ignore the message. If an | no 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' | |||
its state machine. | to its state machine. | |||
- If an LSR receives an LDP-WITHDRAW: | - 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 that has the same FEC, the | |||
Downstream LDP Session Identifier and the same Downstream Label. | same Downstream LDP Session Identifier and the same Downstream | |||
Pass the event `LDP Withdraw' to its state machines. | Label. Pass 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 `Label Withdraw' to the state machines of all the | Pass the event `Label Withdraw' 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 | |||
LSR. | that 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 that has the same FEC | |||
the same next hop and pass the event `Next Hop Change' to their state | and the same next hop and pass the event `Next Hop Change' to | |||
machine | their state 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 message. An LDP-NAK should never appear in the | Ignore the message. An LDP-NAK should never appear in the | |||
downstream-mode 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 message. It is a protocol error from the downstream LSR. | Ignore the message. It is a protocol error from the downstream | |||
LSR. | ||||
5. Security Considerations | 4. Security Considerations | |||
This document is provided as an informational extension of the LDP | This document is provided as an informational extension of the LDP | |||
specification [4]. State machines presented here are intended to | specification [4]. State machines presented here are intended to | |||
clarify procedures defined in the LDP specification, but do not | clarify procedures defined in the LDP specification, but do not | |||
supplant or override definitions and procedures provided there. | supplant or override definitions and procedures provided there. | |||
Implementations of a state machine may be vulnerable to spurious | Implementations of a state machine may be vulnerable to spurious | |||
events generated by an external source. In this document, events fall | events generated by an external source. In this document, events | |||
in two categories: internal events and external events caused by | fall in two categories: internal events and external events caused by | |||
receipt of an LDP message. | receipt of an LDP message. | |||
LDP messages may be protected using mechanisms described in the LDP | LDP messages may be protected using mechanisms described in the LDP | |||
specification. See "Security Considerations" in the LDP specification | specification. See "Security Considerations" in the LDP | |||
specification [4]. | ||||
[4]. | ||||
Security considerations relating to generation of spurious internal | Security considerations relating to generation of spurious internal | |||
events are not addressed in this document. | events are not addressed in this document. | |||
6. Acknowledgements | 5. 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, Myunghee Son and | suggestions of the following people: Bob Thomas, Myunghee Son and | |||
Adrian Farrel. | Adrian Farrel. | |||
6. References | ||||
[1] Davie, B., Lawrence, J., McCloghrie, K., Rosen, E., Swallow, G., | ||||
Rekhter, Y. and P. Doolan, "MPLS Using LDP and ATM Switching", | ||||
RFC 3035, January 2001. | ||||
[2] Rosen, E., Viswanathan, A. and R. Callon, "Multiprotocol Label | ||||
Switching Architecture", RFC 3031, January 2001. | ||||
[3] Cucchiara, J., Sjostrand, H. and J. Lucianai, "Definition of | ||||
Managed Objects for the Multiprotocol Label Switching, Label | ||||
Distribution Protocol (LDP)", Work in Progress. | ||||
[4] Andersson, L., Doolan, P., Feldman, F., Fredette, A. and B. | ||||
Thomas, "LDP Specification", RFC 3036, January 2001. | ||||
[5] Jamoussi, B., Ed., O., Andersson, L., Callon, R., Dantu, R., Wu, | ||||
L., Doolan, P., Worster, T., Feldman, N., Fredette, A., Girish, | ||||
M., Gray, E., Heinanen, J., Kilty, T. and A. Malis, "Constraint- | ||||
Based LSP Set up Using LDP", RFC 3212, January 2002. | ||||
7. Authors' Address | 7. Authors' Address | |||
Christophe Boscher | Christophe Boscher | |||
Alcatel | ||||
Le Mail | ||||
44700 Orvault | ||||
France | ||||
Alcatel | Phone: (33) 251781828 | |||
Le Mail | EMail: christophe.boscher@alcatel.fr | |||
44700 Orvault | ||||
France | ||||
Phone: (33) 251781828 | ||||
Email: christophe.boscher@alcatel.fr | ||||
Pierrick Cheval | Pierrick Cheval | |||
Alcatel | ||||
5 rue Noel-Pons | ||||
92734 Nanterre Cedex | ||||
France | ||||
Alcatel | Phone: (33) 146524027 | |||
5 rue Noel-Pons | EMail: pierrick.cheval@space.alcatel.fr | |||
92734 Nanterre Cedex | ||||
France | ||||
Phone: (33) 146524027 | ||||
Email: pierrick.cheval@space.alcatel.fr | ||||
Liwen Wu | Liwen Wu | |||
Cisco Systems, Inc. | ||||
3550 Cisco Way | ||||
San Jose, CA 95134 | ||||
U.S.A | ||||
Cisco Systems, Inc. | Phone: 408-853-4065 | |||
3550 Cisco Way | EMail: liwwu@cisco.com | |||
San Jose, CA 95134 | ||||
U.S.A | ||||
Phone: 408-853-4065 | ||||
Email:liwwu@cisco.com | ||||
Eric Gray | Eric Gray | |||
Sandburst Corporation | ||||
600 Federal Drive | ||||
Andover, MA 01810 | ||||
Sandburst Corporation | Phone: (978) 689-1610 | |||
600 Federal Drive (2nd Floor) | EMail: eric.gray@sandburst.com | |||
Andover, MA 01810 | ||||
Phone: (978) 689-1610 | ||||
Email: egray@sandburst.com | ||||
8. References | 8. Full Copyright Statement | |||
1."MPLS Using LDP and ATM Switching", Bruce Davie, Jeremy Lawrence, | Copyright (C) The Internet Society (2002). All Rights Reserved. | |||
Keith McCloghrie, Yakov Rekhter, Eric Rosen, George Swallow, Paul | ||||
Doolan, work in progress, Internet Draft, <draft-ietf-mpls-atm-02.txt> | ||||
2."Multiprotocol Label Switching Architecture", Eric C Rosen, Arun | This document and translations of it may be copied and furnished to | |||
Viswanathan, Ross Callon, work in progress, Internet Draft, <draft- | others, and derivative works that comment on or otherwise explain it | |||
ietf-mpls-arch-06.txt> | or assist in its implementation may be prepared, copied, published | |||
and distributed, in whole or in part, without restriction of any | ||||
kind, provided that the above copyright notice and this paragraph are | ||||
included on all such copies and derivative works. However, this | ||||
document itself may not be modified in any way, such as by removing | ||||
the copyright notice or references to the Internet Society or other | ||||
Internet organizations, except as needed for the purpose of | ||||
developing Internet standards in which case the procedures for | ||||
copyrights defined in the Internet Standards process must be | ||||
followed, or as required to translate it into languages other than | ||||
English. | ||||
3."Definition of Managed Objects for the Multiprotocol Label Switching, | The limited permissions granted above are perpetual and will not be | |||
Label Distribution Protocol (LDP)", Joan Cucchiara, Hans Sjostrand, | revoked by the Internet Society or its successors or assigns. | |||
James V. Luciani, work in progress, Internet Draft, <draft-ietf-mpls- | ||||
ldp-mib-03.txt> | ||||
4. "LDP Specification", Loa Andersson, Paul Doolan, Nancy Feldman, | This document and the information contained herein is provided on an | |||
Andre Fredette, Bob Thomas, work in progress, Internet Draft, <draft- | "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING | |||
ietf-mpls-ldp-06.txt> | TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING | |||
BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION | ||||
HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF | ||||
MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. | ||||
5. "Constraint-Based LSP Set up Using LDP", Bilel Jamoussi, et al., | Acknowledgement | |||
work in progress, Internet Draft, <draft-ietf-mpls-cr-ldp-03.txt> | ||||
Funding for the RFC Editor function is currently provided by the | ||||
Internet Society. | ||||
End of changes. 1137 change blocks. | ||||
1834 lines changed or deleted | 1869 lines changed or added | |||
This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |