Skip to main content

6.8.6. Reception of BFD Control Packets (接收 BFD Control 报文)

当接收到 BFD Control 报文时,必须按照指定的顺序遵循以下过程。如果根据这些规则丢弃报文,则必须在该点停止对报文的处理。

版本号检查:

如果版本号不正确(1),则必须丢弃报文。

长度字段检查:

如果 Length 字段小于最小正确值(如果 A 位清除则为 24,如果 A 位设置则为 26),则必须丢弃报文。

如果 Length 字段大于封装协议的有效载荷,则必须丢弃报文。

Detect Mult 字段检查:

如果 Detect Mult 字段为零,则必须丢弃报文。

Multipoint 位检查:

如果 Multipoint (M) 位非零,则必须丢弃报文。

My Discriminator 字段检查:

如果 My Discriminator 字段为零,则必须丢弃报文。

Your Discriminator 字段处理:

如果 Your Discriminator 字段非零,则必须使用它来选择与此 BFD 报文关联的会话。如果未找到会话,则必须丢弃报文。

如果 Your Discriminator 字段为零且 State 字段不是 Down 或 AdminDown,则必须丢弃报文。

如果 Your Discriminator 字段为零,则必须基于其他字段的某种组合来选择会话,可能包括源地址信息、My Discriminator 字段以及接收报文的接口。确切的选择方法是特定于应用程序的,因此不在本规范的范围之内。如果未找到匹配的会话,则可以创建新会话,或者可以丢弃报文。此选择不在本规范的范围之内。

认证检查:

如果设置了 A 位且未使用认证(bfd.AuthType 为零),则必须丢弃报文。

如果清除了 A 位且正在使用认证(bfd.AuthType 非零),则必须丢弃报文。

如果设置了 A 位,则必须根据第 6.7 节的规则和正在使用的认证类型(bfd.AuthType)对报文进行认证。这可能会导致丢弃报文。

更新状态变量:

将 bfd.RemoteDiscr 设置为 My Discriminator 的值。

将 bfd.RemoteState 设置为 State (Sta) 字段的值。

将 bfd.RemoteDemandMode 设置为 Demand (D) 位的值。

将 bfd.RemoteMinRxInterval 设置为 Required Min RX Interval 的值。

Required Min Echo RX Interval 处理:

如果 Required Min Echo RX Interval 字段为零,则 Echo 报文的传输(如果有)必须停止。

Poll Sequence 处理:

如果本地系统正在传输 Poll Sequence 并且接收到的报文中的 Final (F) 位已设置,则必须终止 Poll Sequence。

更新传输间隔和检测时间:

按照第 6.8.2 节中的描述更新传输间隔。

按照第 6.8.4 节中的描述更新 Detection Time。

会话状态机处理:

如果 bfd.SessionState 为 AdminDown:

  • 丢弃报文

如果接收到的状态为 AdminDown:

  • 如果 bfd.SessionState 不是 Down:
    • 将 bfd.LocalDiag 设置为 3 (Neighbor signaled session down - 邻居发出会话 down 信号)
    • 将 bfd.SessionState 设置为 Down

否则:

  • 如果 bfd.SessionState 为 Down:

    • 如果接收到的 State 为 Down:
      • 将 bfd.SessionState 设置为 Init
    • 否则,如果接收到的 State 为 Init:
      • 将 bfd.SessionState 设置为 Up
  • 否则,如果 bfd.SessionState 为 Init:

    • 如果接收到的 State 为 Init 或 Up:
      • 将 bfd.SessionState 设置为 Up
  • 否则(bfd.SessionState 为 Up):

    • 如果接收到的 State 为 Down:
      • 将 bfd.LocalDiag 设置为 3 (Neighbor signaled session down - 邻居发出会话 down 信号)
      • 将 bfd.SessionState 设置为 Down

Demand 模式激活检查:

检查 Demand 模式是否应该激活(参见第 6.6 节)。

如果 bfd.RemoteDemandMode 为 1、bfd.SessionState 为 Up 并且 bfd.RemoteSessionState 为 Up,则 Demand 模式在远程系统上激活,本地系统必须停止 BFD Control 报文的周期性传输(参见第 6.8.7 节)。

如果 bfd.RemoteDemandMode 为 0,或 bfd.SessionState 不是 Up,或 bfd.RemoteSessionState 不是 Up,则 Demand 模式在远程系统上未激活,本地系统必须发送周期性 BFD Control 报文(参见第 6.8.7 节)。

Poll 位处理:

如果设置了 Poll (P) 位,则向远程系统发送一个清除了 Poll (P) 位并设置了 Final (F) 位的 BFD Control 报文(参见第 6.8.7 节)。

Detection Time 规则:

如果报文未被丢弃,则出于第 6.8.4 节中 Detection Time 过期规则的目的,该报文已被接收。