A.2. 通用标签分发过程
本节规定处理标签分发事件的各算法所使用的实用 (utility) 过程。
A.2.1. Send_Label
摘要:
Send_Label 过程为某个 LDP 对等体分配某个 FEC 的标签 (如果可能), 并向该对等体发送该 FEC 的标签映射。如果该 LSR 无法分配标签, 并且它有一条来自该对等体的待定标签请求, 它就向该 LDP 对等体发送一条 No Label Resources 通知。
参数:
-
Peer。要向其发送标签映射的 LDP 对等体。
-
FEC。要为其发送标签映射的 FEC。
-
Attributes。要随该标签映射一起包含的属性。
附加上下文:
-
LSR。执行该过程的 LSR。
-
Label。所分配并发送给 Peer 的标签。
算法:
SL.1 LSR 是否有可分配的标签?
如果没有, 转到 SL.9。
SL.2 分配 Label 并将其绑定到该 FEC。
SL.3 安装 Label 以供转发/交换使用。
SL.4 执行过程 Send_Message (Peer, Label Mapping, FEC,
Label, Attributes)。
SL.5 记录已向 Peer 发送带有 Label 和 Attributes 的该 FEC 标签
映射。
SL.6 LSR 是否有来自 Peer 的、被标记为待定的该 FEC 标签请求的
记录?
如果没有, 转到 SL.8。
SL.7 删除来自 Peer 的该 FEC 待定标签请求的记录。
SL.8 返回成功 (success)。
SL.9 LSR 是否有来自 Peer 的、被标记为待定的该 FEC 标签请求?
如果没有, 转到 SL.13。
SL.10 执行过程 Send_Notification (Peer, No Label
Resources)。
SL.11 删除来自 Peer 的该 FEC 待定标签请求的记录。
SL.12 记录已向 Peer 发送 No Label Resources 通知。
转到 SL.14。
SL.13 记录需要为 Peer 提供带有 Attributes 的该 FEC 标签映射,
但没有可用标签资源。(见注释 1。)
SL.14 返回失败 (failure)。
注释:
1. SL.13 处理下游主动标签分发的情况下、LSR 无法为某个 FEC 分配
标签以发送给某个 Peer 的情形。
A.2.2. Send_Label_Request
摘要:
LSR 使用 Send_Label_Request 过程, 在当前允许的情况下向某个 LDP 对等体发送针对某个 FEC 的标签请求。
参数:
-
Peer。要向其发送标签请求的 LDP 对等体。
-
FEC。要为其发送标签请求的 FEC。
-
Attributes。要包含在该标签请求中的属性, 例如 Hop Count、Path Vector。
附加上下文:
- LSR。执行该过程的 LSR。
算法:
SLRq.1 先前是否已向 Peer 发送过针对该 FEC 的标签请求, 并且它
当前被标记为未完成?
如果是, 返回成功。(见注释 1。)
SLRq.2 表明向 Peer 发送标签请求是 "允许 (OK)" 的状态记录是否
已设置?
如果没有, 转到 SLRq.6
SLRq.3 执行过程 Send_Message (Peer, Label Request, FEC,
Attributes)。
SLRq.4 记录已向 Peer 发送该 FEC 的标签请求, 并将其标记为
未完成。
SLRq.5 返回成功。
SLRq.6 通过记录 "需要来自 Peer 的该 FEC 标签映射和 Attributes,
但没有可用的标签资源" 来推迟该标签请求。
SLRq.7 返回失败。
注释:
1. 如果该 LSR 是非合并 LSR, 它必须区分由不同上游 LDP 对等体触发
的、针对某个 FEC 的标签请求发送与重复请求。该过程不会发送
重复的标签请求。
A.2.3. Send_Label_Withdraw
摘要:
LSR 使用 Send_Label_Withdraw 过程向某个 LDP 对等体撤销某个 FEC 的标签。为此, 该 LSR 向该对等体发送一条 Label Withdraw 消息。
参数:
-
Peer。要向其发送标签撤销的 LDP 对等体。
-
FEC。正在撤销其标签的 FEC。
-
Label。正在撤销的标签。
附加上下文:
- LSR。执行该过程的 LSR。
算法:
SWd.1 执行过程 Send_Message (Peer, Label Withdraw, FEC,
Label)。
SWd.2 记录已向 Peer 发送该 FEC 的标签撤销, 并将其标记为
未完成。
A.2.4. Send_Notification
摘要:
LSR 使用 Send_Notification 过程向某个 LDP 对等体发送一条 Notification 消息。
参数:
-
Peer。要向其发送该 Notification 消息的 LDP 对等体。
-
Status。要包含在该 Notification 消息中的状态码。
附加上下文:
无。
算法:
SNt.1 执行过程 Send_Message (Peer, Notification, Status)
A.2.5. Send_Message
摘要:
LSR 使用 Send_Message 过程向某个 LDP 对等体发送一条 LDP 消息。
参数:
-
Peer。要向其发送该消息的 LDP 对等体。
-
Message Type。要发送的消息类型。
-
其他消息内容 . . .。
附加上下文:
无。
算法:
该过程是 LSR 向指定 LDP 对等体发送指定类型的 LDP 消息的手段。
A.2.6. Check_Received_Attributes
摘要:
检查在 Label Mapping 或 Label Request 消息中收到的属性。如果这些属性包含 Hop Count 或 Path Vector, 则执行环路检测检查。如果检测到环路, 则触发向 MsgSource 发送一条 Loop Detected 通知消息。
参数:
-
MsgSource。发送该消息的 LDP 对等体。
-
MsgType。所收到消息的类型。
-
RAttributes。该消息中的属性。
附加上下文:
-
LSR Id。本 LSR 的唯一 LSR Id。
-
Hop Count。所收到属性中的 Hop Count (如果有)。
-
Path Vector。所收到属性中的 Path Vector (如果有)。
算法:
CRa.1 RAttributes 是否包含 Hop Count?
如果不包含, 转到 CRa.5。
CRa.2 Hop Count 是否超过最大允许跳数?
如果超过, 转到 CRa.6。
CRa.3 RAttributes 是否包含 Path Vector?
如果不包含, 转到 CRa.5。
CRa.4 Path Vector 是否包含 LSR Id? 或者 Path Vector 的长度是否
超过最大允许长度?
如果是, 转到 CRa.6
CRa.5 返回未检测到环路 (No Loop Detected)。
CRa.6 MsgType 是 LabelMapping 吗?
如果是, 转到 CRa.8。(见注释 1。)
CRa.7 执行过程 Send_Notification (MsgSource, Loop
Detected)。
CRa.8 返回检测到环路 (Loop Detected)。
CRa.9 完成 (DONE)。
注释:
1. 当所检查的属性是在 Label Mapping 消息中收到的时候, 该 LSR
在 Label Release 消息中的一个 Status Code TLV 里发送该 Loop
Detected 通知。(见 "Receive Label Mapping" 一节。)
A.2.7. Prepare_Label_Request_Attributes
摘要:
每当要向某个 Peer 发送 Label Request 时, 就用该过程计算要包含在该消息中的 Hop Count 和 Path Vector (如果有)。
参数:
-
Peer。要向其发送该消息的 LDP 对等体。
-
FEC。要为其发送标签请求的 FEC。
-
RAttributes。本 LSR 与针对该 FEC 的 LSP 关联的属性。
-
SAttributes。要包含在该 Label Request 消息中的属性。
附加上下文:
- LSR Id。本 LSR 的唯一 LSR Id。
算法:
PRqA.1 该 Peer 是否要求 Hop Count? (见注释 1。) 或者 RAttributes
是否包含 Hop Count? 或者 LSR 上是否配置了环路检测?
如果都不是, 转到 PRqA.14。
PRqA.2 LSR 是该 FEC 的入口吗?
如果不是, 转到 PRqA.6。
PRqA.3 在 SAttributes 中包含 Hop Count 为 1。
PRqA.4 LSR 上是否配置了环路检测? 如果没有, 转到 PRqA.14。
PRqA.5 LSR 是否支持合并?
如果是, 转到 PRqA.14。
如果不是, 转到 PRqA.13。
PRqA.6 RAttributes 是否包含 Hop Count?
如果不包含, 转到 PRqA.8。
PRqA.7 将 RAttributes 的 Hop Count 加一, 并把所得的 Hop Count
复制到 SAttributes。(见注释 2。)
转到 PRqA.9。
PRqA.8 在 SAttributes 中包含未知 (0) 的 Hop Count。
PRqA.9 LSR 上是否配置了环路检测?
如果没有, 转到 PRqA.14。
PRqA.10 RAttributes 是否有 Path Vector?
如果有, 转到 PRqA.12。
PRqA.11 LSR 是否支持合并?
如果是, 转到 PRqA.14。
如果不是, 转到 PRqA.13。
PRqA.12 将 LSR Id 添加到来自 RAttributes 的 Path Vector 的开头,
并把所得的 Path Vector 复制到 SAttributes。
转到 PRqA.14。
PRqA.13 在 SAttributes 中包含一个长度为 1、含有 LSR Id 的
Path Vector。
PRqA.14 完成 (DONE)。
注释:
1. 与 Peer 之间的链路可能要求 Label Request 消息中包含 Hop
Count; 例如见 [RFC3035] 和 [RFC3034]。
2. 对于跳数运算, 未知 + 1 = 未知。
A.2.8. Prepare_Label_Mapping_Attributes
摘要:
每当要向某个 Peer 发送 Label Mapping 时, 就用该过程计算要包含在该消息中的 Hop Count 和 Path Vector (如果有)。
参数:
-
Peer。要向其发送该消息的 LDP 对等体。
-
FEC。要为其发送标签请求的 FEC。
-
RAttributes。本 LSR 与针对该 FEC 的 LSP 关联的属性。
-
SAttributes。要包含在该 Label Mapping 消息中的属性。
-
IsPropagating。该 LSR 发送该 Label Mapping 消息是为了传播从该 FEC 下一跳收到的标签映射。
-
PrevHopCount。本 LSR 与针对该 FEC 的 LSP 关联的 Hop Count (如果有)。
附加上下文:
- LSR Id。本 LSR 的唯一 LSR Id。
算法:
PMpA.1 RAttributes 是否包含任何未知 TLV?
如果不包含, 转到 PMpA.4。
PMpA.2 U 位和 F 位的设置是否要求转发这些 TLV?
如果不要求, 转到 PMpA.4。
PMpA.3 将这些未知 TLV 复制到 SAttributes。
PMpA.4 该 Peer 是否要求 Hop Count? (见注释 1。) 或者 RAttributes
是否包含 Hop Count? 或者 LSR 上是否配置了环路检测?
如果都不是, 转到 PMpA.24。
PMpA.5 LSR 是该 FEC 的出口吗?
如果不是, 转到 PMpA.7。
PMpA.6 在 SAttributes 中包含 Hop Count 为 1。转到 PMpA.24。
PMpA.7 RAttributes 是否有 Hop Count?
如果没有, 转到 PMpA.11。
PMpA.8 LSR 是否是某个 LSR 域的边缘集合的成员 (该域中的 LSR 不
执行 TTL 递减), 并且 Peer 是否位于该域中? (见注释 2。)
如果不是, 转到 PMpA.10。
PMpA.9 在 SAttributes 中包含 Hop Count 为 1。转到 PMpA.12。
PMpA.10 将 RAttributes 的 Hop Count 加一, 并把所得的 Hop Count
复制到 SAttributes。(见注释 2。) 转到 PMpA.12。
PMpA.11 在 SAttributes 中包含未知 (0) 的 Hop Count。
PMpA.12 LSR 上是否配置了环路检测?
如果没有, 转到 PMpA.24。
PMpA.13 RAttributes 是否有 Path Vector?
如果有, 转到 PMpA.22。
PMpA.14 LSR 是否正在传播一个收到的 Label Mapping?
如果不是, 转到 PMpA.23。
PMpA.15 LSR 是否支持合并?
如果不支持, 转到 PMpA.17。
PMpA.16 LSR 先前是否向 Peer 发送过该 FEC 的 Label Mapping?
如果没有, 转到 PMpA.23。
PMpA.17 RAttributes 是否包含 Hop Count?
如果不包含, 转到 PMpA.24。
PMpA.18 RAttributes 中的 Hop Count 是否为未知 (0)?
如果是, 转到 PMpA.23。
PMpA.19 LSR 先前是否向 Peer 发送过该 FEC 的 Label Mapping?
如果没有, 转到 PMpA.24。
PMpA.20 RAttributes 中的 Hop Count 是否与 PrevHopCount 不同?
如果相同, 转到 PMpA.24。
PMpA.21 RAttributes 中的 Hop Count 是否大于 PrevHopCount? 或者
PrevHopCount 是否为未知 (0)?
如果不是, 转到 PMpA.24。
PMpA.22 将 LSR Id 添加到来自 RAttributes 的 Path Vector 的开头,
并把所得的 Path Vector 复制到 SAttributes。
转到 PMpA.24。
PMpA.23 在 SAttributes 中包含一个长度为 1、含有 LSR Id 的
Path Vector。
PMpA.24 完成 (DONE)。
注释:
1. 与 Peer 之间的链路可能要求 Label Mapping 消息中包含 Hop
Count; 例如见 [RFC3035] 和 [RFC3034]。
2. 如果该 LSR 位于一簇不执行 TTL 递减的 LSR 云的边缘, 并且它正
把该 Label Mapping 消息向上游传播进入该云, 则它把 Hop Count
置为 1, 以便正确地计算穿过该云的跳数。这确保了对穿过该云的
那部分 LSP 所转发分组的正确 TTL 管理。
3. 对于跳数运算, 未知 + 1 = 未知。