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。

  • 数据包的其余部分。