BPDU

桥接协议数据单元(BPDU, IEEE 802.1D) 解析器/序列化器 http://standards.ieee.org/getieee802/download/802.1D-2004.pdf

配置 BPDU 格式

结构

字节

协议标识符 = 0000 0000 0000 0000

1 - 2

协议版本标识符 = 0000 0000

3

BPDU 类型 = 0000 0000

4

标志

5

根标识符
包括 - 优先级

系统 ID 扩展 MAC 地址

6 - 13

根路径成本

14 - 17

桥接标识符
包括 - 优先级

系统 ID 扩展 MAC 地址

18 - 25

端口标识符
包括 - 优先级

端口号

26 - 27

消息年龄

28 - 29

最大年龄

30 - 31

Hello 时间

32 - 33

转发延迟

34 - 35

拓扑变更通知 BPDU 格式

结构

字节

协议标识符 = 0000 0000 0000 0000

1 - 2

协议版本标识符 = 0000 0000

3

BPDU 类型 = 1000 0000

4

快速生成树 BPDU(RST BPDU) 格式

结构

字节

协议标识符 = 0000 0000 0000 0000

1 - 2

协议版本标识符 = 0000 0010

3

BPDU 类型 = 0000 0010

4

标志

5

根标识符
包括 - 优先级

系统 ID 扩展 MAC 地址

6 - 13

根路径成本

14 - 17

桥接标识符
包括 - 优先级

系统 ID 扩展 MAC 地址

18 - 25

端口标识符
包括 - 优先级

端口号

26 - 27

消息年龄

28 - 29

最大年龄

30 - 31

Hello 时间

32 - 33

转发延迟

34 - 35

版本 1 长度 = 0000 0000

36

class os_ken.lib.packet.bpdu.ConfigurationBPDUs(flags=0, root_priority=32768, root_system_id_extension=0, root_mac_address='00:00:00:00:00:00', root_path_cost=0, bridge_priority=32768, bridge_system_id_extension=0, bridge_mac_address='00:00:00:00:00:00', port_priority=128, port_number=0, message_age=0, max_age=20, hello_time=2, forward_delay=15)

配置 BPDU(IEEE 802.1D) 头部编码器/解码器类。

一个实例至少具有以下属性。其中大部分与网络传输中的对应项相同,但采用主机字节顺序。__init__ 按照此顺序接收相应的参数。

属性

描述

flags

位 1: 拓扑变更标志
位 2 到 7: 未使用,值为 0
位 8: 拓扑变更确认标志

root_priority

根标识符优先级设置为 0-61440,步长为 4096

root_system_id_extension

根标识符系统 ID 扩展

root_mac_address

根标识符 MAC 地址

root_path_cost

根路径成本

bridge_priority

桥接标识符优先级设置为 0-61440,步长为 4096

bridge_system_id_extension

桥接标识符系统 ID 扩展

bridge_mac_address

桥接标识符 MAC 地址

port_priority

端口标识符优先级设置为 0-240,步长为 16

port_number

端口标识符编号

message_age

消息年龄计时器值

max_age

最大年龄计时器值

hello_time

Hello 时间计时器值

forward_delay

转发延迟计时器值

classmethod parser(buf)

解码协议头。

此方法仅在解码数据包时使用。

在字节数组 buf 的偏移量 0 处解码协议头。返回以下三个对象:

  • 一个描述解码后的头对象。

  • 一个适当于数据包其余部分的 packet_base.PacketBase 子类。如果数据包的其余部分应被视为原始有效负载,则为 None。

  • 数据包的其余部分。

serialize(payload, prev)

编码协议头。

此方法仅在编码数据包时使用。

编码协议头。返回一个包含头的字节数组。

payload 是将立即跟随此头的其余数据包。

prev 是外部协议头的 packet_base.PacketBase 子类。如果当前头是外部头,则 prev 为 None。例如,对于 tcp.serialize,prev 是 ipv4 或 ipv6。

class os_ken.lib.packet.bpdu.RstBPDUs(flags=0, root_priority=32768, root_system_id_extension=0, root_mac_address='00:00:00:00:00:00', root_path_cost=0, bridge_priority=32768, bridge_system_id_extension=0, bridge_mac_address='00:00:00:00:00:00', port_priority=128, port_number=0, message_age=0, max_age=20, hello_time=2, forward_delay=15)

快速生成树 BPDU(RST BPDU, IEEE 802.1D) 头部编码器/解码器类。

一个实例至少具有以下属性。其中大部分与网络传输中的对应项相同,但采用主机字节顺序。__init__ 按照此顺序接收相应的参数。

属性

描述

flags

位 1: 拓扑变更标志
位 2: 提案标志
位 3 和 4: 端口角色
位 5: 学习标志
位 6: 转发标志
位 7: 同意标志
位 8: 拓扑变更确认标志

root_priority

根标识符优先级设置为 0-61440,步长为 4096

root_system_id_extension

根标识符系统 ID 扩展

root_mac_address

根标识符 MAC 地址

root_path_cost

根路径成本

bridge_priority

桥接标识符优先级设置为 0-61440,步长为 4096

bridge_system_id_extension

桥接标识符系统 ID 扩展

bridge_mac_address

桥接标识符 MAC 地址

port_priority

端口标识符优先级设置为 0-240,步长为 16

port_number

端口标识符编号

message_age

消息年龄计时器值

max_age

最大年龄计时器值

hello_time

Hello 时间计时器值

forward_delay

转发延迟计时器值

classmethod parser(buf)

解码协议头。

此方法仅在解码数据包时使用。

在字节数组 buf 的偏移量 0 处解码协议头。返回以下三个对象:

  • 一个描述解码后的头对象。

  • 一个适当于数据包其余部分的 packet_base.PacketBase 子类。如果数据包的其余部分应被视为原始有效负载,则为 None。

  • 数据包的其余部分。

serialize(payload, prev)

编码协议头。

此方法仅在编码数据包时使用。

编码协议头。返回一个包含头的字节数组。

payload 是将立即跟随此头的其余数据包。

prev 是外部协议头的 packet_base.PacketBase 子类。如果当前头是外部头,则 prev 为 None。例如,对于 tcp.serialize,prev 是 ipv4 或 ipv6。

class os_ken.lib.packet.bpdu.TopologyChangeNotificationBPDUs

拓扑变更通知 BPDU(IEEE 802.1D) 头部编码器/解码器类。

classmethod parser(buf)

解码协议头。

此方法仅在解码数据包时使用。

在字节数组 buf 的偏移量 0 处解码协议头。返回以下三个对象:

  • 一个描述解码后的头对象。

  • 一个适当于数据包其余部分的 packet_base.PacketBase 子类。如果数据包的其余部分应被视为原始有效负载,则为 None。

  • 数据包的其余部分。

class os_ken.lib.packet.bpdu.bpdu

桥接协议数据单元(BPDU) 头部编码器/解码器基类。

classmethod parser(buf)

解码协议头。

此方法仅在解码数据包时使用。

在字节数组 buf 的偏移量 0 处解码协议头。返回以下三个对象:

  • 一个描述解码后的头对象。

  • 一个适当于数据包其余部分的 packet_base.PacketBase 子类。如果数据包的其余部分应被视为原始有效负载,则为 None。

  • 数据包的其余部分。

serialize(payload, prev)

编码协议头。

此方法仅在编码数据包时使用。

编码协议头。返回一个包含头的字节数组。

payload 是将立即跟随此头的其余数据包。

prev 是外部协议头的 packet_base.PacketBase 子类。如果当前头是外部头,则 prev 为 None。例如,对于 tcp.serialize,prev 是 ipv4 或 ipv6。