Slow¶
- class os_ken.lib.packet.slow.lacp(version=1, actor_system_priority=0, actor_system='00:00:00:00:00:00', actor_key=0, actor_port_priority=0, actor_port=0, actor_state_activity=0, actor_state_timeout=0, actor_state_aggregation=0, actor_state_synchronization=0, actor_state_collecting=0, actor_state_distributing=0, actor_state_defaulted=0, actor_state_expired=0, partner_system_priority=0, partner_system='00:00:00:00:00:00', partner_key=0, partner_port_priority=0, partner_port=0, partner_state_activity=0, partner_state_timeout=0, partner_state_aggregation=0, partner_state_synchronization=0, partner_state_collecting=0, partner_state_distributing=0, partner_state_defaulted=0, partner_state_expired=0, collector_max_delay=0)¶
链路聚合控制协议(LACP, IEEE 802.1AX)头部编码/解码类。
http://standards.ieee.org/getieee802/download/802.1AX-2008.pdf
LACPDU 格式
LACPDU 结构
字节
子类型 = LACP
1
版本号
1
TLV Actor
TLV_type = Actor 信息
1
Actor_Information_Length = 20
1
Actor_System_Priority
2
Actor_System
6
Actor_Key
2
Actor_Port_Priority
2
Actor_Port
2
Actor_State
1
保留
3
TLV Partner
TLV_type = Partner 信息
1
Partner_Information_Length = 20
1
Partner_System_Priority
2
Partner_System
6
Partner_Key
2
Partner_Port_Priority
2
Partner_Port
2
Partner_State
1
保留
3
TLV Collector
TLV_type = Collector 信息
1
Collector_Information_Length = 16
1
Collector_Max_Delay
2
保留
12
TLV Terminator
TLV_type = Terminator
1
Terminator_Length = 0
1
保留
50
Terminator 信息使用长度值为 0 (0x00)。
- 注意--使用 Terminator_Length 为 0 是故意的。
在 TLV 编码方案中,通常的做法是终止编码的类型和长度都为 0。
Actor_State 和 Partner_State 编码为单个字节内的单独位,如下所示
7
6
5
4
3
2
1
0
EXPR
DFLT
DIST
CLCT
SYNC
AGGR
TMO
ACT
- ACT
位 0。关于此链路的活动控制值。
- TMO
位 1。关于此链路的超时控制值。
- AGGR
位 2。关于系统从聚合的角度来看待此链路的方式。
- SYNC
位 3。关于系统从同步的角度来看待此链路的方式。
- CLCT
位 4。关于收集传入帧。
- DIST
位 5。关于分发传出帧。
- DFLT
位 6。关于系统使用的相反系统信息。
- EXPR
位 7。关于系统的过期状态。
一个实例至少具有以下属性。其中大部分与网络传输中的对应项相同,但采用主机字节顺序。__init__ 按照此顺序接收相应的参数。
属性
描述
版本
LACP 版本。此参数必须设置为 LACP_VERSION_NUMBER(即 1)。
actor_system_priority
分配给此系统的优先级。
actor_system
Actor 的系统 ID,编码为 MAC 地址。
actor_key
Actor 分配给端口的运行密钥值。
actor_port_priority
分配给此端口的优先级。
actor_port
Actor 分配给端口的端口号。
actor_state_activity
关于此链路的活动控制值。
LACP_STATE_ACTIVE(1)
LACP_STATE_PASSIVE(0)
actor_state_timeout
关于此链路的超时控制值。
LACP_STATE_SHORT_TIMEOUT(1)
LACP_STATE_LONG_TIMEOUT(0)
actor_state_aggregation
关于系统从聚合的角度来看待此链路的方式。
LACP_STATE_AGGREGATEABLE(1)
LACP_STATE_INDIVIDUAL(0)
actor_state_synchronization
关于系统从同步的角度来看待此链路的方式。
LACP_STATE_IN_SYNC(1)
LACP_STATE_OUT_OF_SYNC(0)
actor_state_collecting
关于收集传入帧。
LACP_STATE_COLLECTING_ENABLED(1)
LACP_STATE_COLLECTING_DISABLED(0)
actor_state_distributing
关于分发传出帧。
LACP_STATE_DISTRIBUTING_ENABLED(1)
LACP_STATE_DISTRIBUTING_DISABLED(0)
actor_state_defaulted
关于 Actor 使用的 Partner 信息。
LACP_STATE_DEFAULTED_PARTNER(1)
LACP_STATE_OPERATIONAL_PARTNER(0)
actor_state_expired
关于 Actor 的状态。
LACP_STATE_EXPIRED(1)
LACP_STATE_NOT_EXPIRED(0)
partner_system_priority
分配给 Partner 系统的优先级。
partner_system
Partner 的系统 ID,编码为 MAC 地址。
partner_key
Partner 分配给端口的运行密钥值。
partner_port_priority
Partner 分配给此端口的优先级。
partner_port
Partner 分配给端口的端口号。
partner_state_activity
请参阅 actor_state_activity。
partner_state_timeout
请参阅 actor_state_timeout。
partner_state_aggregation
partner_state_synchronization
partner_state_collecting
partner_state_distributing
partner_state_defaulted
partner_state_expired
请参阅 actor_state_expired。
collector_max_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.slow.slow¶
Slow 协议头部解码器类。此类只有 parser 方法。
http://standards.ieee.org/getieee802/download/802.3-2012_section5.pdf
Slow 协议子类型
子类型值
协议名称
0
未使用 - 非法值
1
链路聚合控制协议(LACP)
2
链路聚合 - 标记协议
3
操作、管理和维护(OAM)
4 - 9
保留供将来使用
10
组织特定 Slow 协议(OSSP)
11 - 255
未使用 - 非法值
- classmethod parser(buf)¶
解码协议头。
此方法仅在解码数据包时使用。
在字节数组 buf 的偏移量 0 处解码协议头。返回以下三个对象:
一个描述解码后的头对象。
一个适当于数据包其余部分的 packet_base.PacketBase 子类。如果数据包的其余部分应被视为原始有效负载,则为 None。
数据包的其余部分。