VRRP¶
VRRP 数据包解析器/序列化器
[RFC 3768] VRRP v2 数据包格式
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version| Type | Virtual Rtr ID| Priority | Count IP Addrs|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Auth Type | Adver Int | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| IP Address (1) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| . |
| . |
| . |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| IP Address (n) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Authentication Data (1) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Authentication Data (2) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
[RFC 5798] VRRP v3 数据包格式
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| IPv4 Fields or IPv6 Fields |
... ...
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version| Type | Virtual Rtr ID| Priority |Count IPvX Addr|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|(rsvd) | Max Adver Int | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ +
| IPvX Address(es) |
+ +
+ +
+ +
+ +
| |
+ +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- class os_ken.lib.packet.vrrp.vrrp(version, type_, vrid, priority, count_ip, max_adver_int, checksum, ip_addresses, auth_type=None, auth_data=None)¶
VRRPv2 (RFC 3768) 和 VRRPv3 (RFC 5798) 头部编码器/解码器类的基类。
与其他 os_ken.lib.packet.packet_base.PacketBase 派生类不同,此类不应由用户直接实例化。
一个实例至少具有以下属性。其中大部分与线上的对应项相同,但以主机字节顺序排列。
属性
描述
版本
版本
type
类型
vrid
虚拟路由器 ID (VRID)
priority
优先级
count_ip
IPvX 地址计数。在编码时自动计算。
max_adver_int
最大通告间隔 (Max Adver Int)
checksum
校验和。在编码时自动计算。
ip_addresses
IPvX 地址。一个 Python IP 地址列表。
auth_type
身份验证类型(仅适用于 VRRPv2)
auth_data
身份验证数据(仅适用于 VRRPv2)
- create_packet(primary_ip_address, vlan_id=None)¶
准备一个 VRRP 数据包。
返回一个新创建的 os_ken.lib.packet.packet.Packet 对象,其中添加了通过 add_protocol() 添加的适当协议头部对象。由调用者负责序列化。序列化的数据包将类似于以下部分描述的数据包。
RFC 3768 5.1. VRRP 数据包格式
RFC 5798 5.1. VRRP 数据包格式
参数
描述
primary_ip_address
源 IP 地址
vlan_id
VLAN ID。没有 VLAN 时为 None。
- 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.vrrp.vrrpv2(version, type_, vrid, priority, count_ip, max_adver_int, checksum, ip_addresses, auth_type=None, auth_data=None)¶
VRRPv2 (RFC 3768) 头部编码器/解码器类。
与其他 os_ken.lib.packet.packet_base.PacketBase 派生类不同,应使用 create 方法实例化此类的一个对象。
- static create(type_, vrid, priority, max_adver_int, ip_addresses)¶
与其他 os_ken.lib.packet.packet_base.PacketBase 派生类不同,应使用此方法实例化此类的一个对象。
此方法参数与 os_ken.lib.packet.vrrp.vrrp 对象同名属性相同。(除了 type_ 对应于 type 属性。)
- classmethod parser(buf)¶
解码协议头。
此方法仅在解码数据包时使用。
在字节数组 buf 的偏移量 0 处解码协议头。返回以下三个对象:
一个描述解码后的头对象。
一个适当于数据包其余部分的 packet_base.PacketBase 子类。如果数据包的其余部分应被视为原始有效负载,则为 None。
数据包的其余部分。
- class os_ken.lib.packet.vrrp.vrrpv3(version, type_, vrid, priority, count_ip, max_adver_int, checksum, ip_addresses, auth_type=None, auth_data=None)¶
VRRPv3 (RFC 5798) 头部编码器/解码器类。
与其他 os_ken.lib.packet.packet_base.PacketBase 派生类不同,应使用 create 方法实例化此类的一个对象。
- static create(type_, vrid, priority, max_adver_int, ip_addresses)¶
与其他 os_ken.lib.packet.packet_base.PacketBase 派生类不同,应使用此方法实例化此类的一个对象。
此方法参数与 os_ken.lib.packet.vrrp.vrrp 对象同名属性相同。(除了 type_ 对应于 type 属性。)
- classmethod parser(buf)¶
解码协议头。
此方法仅在解码数据包时使用。
在字节数组 buf 的偏移量 0 处解码协议头。返回以下三个对象:
一个描述解码后的头对象。
一个适当于数据包其余部分的 packet_base.PacketBase 子类。如果数据包的其余部分应被视为原始有效负载,则为 None。
数据包的其余部分。