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。