LLDP

链路层发现协议(LLDP, IEEE 802.1AB) http://standards.ieee.org/getieee802/download/802.1AB-2009.pdf

基本 TLV 格式

octets | 1          | 2             | 3 ...             n + 2 |
       --------------------------------------------------------
       | TLV type | TLV information | TLV information string  |
       | (7bits)  | string length   | (0-507 octets)          |
       |          | (9bits)         |                         |
       --------------------------------------------------------
bits   |8        2|1|8             1|

组织特定 TLV 格式

octets | 1          | 2        | 3 ...  5 | 6       | 7 ...    n + 6 |
       ---------------------------------------------------------------
       | TLV type | Length     | OUI      | Subtype | Infomation     |
       | (7bits)  | (9bits)    | (24bits) | (8bits) | (0-507 octets) |
       ---------------------------------------------------------------
bits   |8        2|1|8        1|

LLDPDU 格式

------------------------------------------------------------------------
| Chassis ID | Port ID | TTL | optional TLV | ... | optional TLV | End |
------------------------------------------------------------------------

Chasis ID、Port ID、TTL、End 是强制性的,可选的 TLV 可以按任意顺序插入

class os_ken.lib.packet.lldp.ChassisID(buf=None, *args, **kwargs)

Chassis ID TLV 编码器/解码器类

属性

描述

buf

要解析的二进制数据。

subtype

子类型。

chassis_id

与子类型对应的 Chassis id。

class os_ken.lib.packet.lldp.End(buf=None, *args, **kwargs)

End TLV 编码器/解码器类

属性

描述

buf

要解析的二进制数据。

class os_ken.lib.packet.lldp.ManagementAddress(buf=None, *args, **kwargs)

Management Address TLV 编码器/解码器类

属性

描述

buf

要解析的二进制数据。

addr_subtype

地址类型。

addr

设备地址。

intf_subtype

接口类型。

intf_num

接口编号。

oid

对象 ID。

class os_ken.lib.packet.lldp.OrganizationallySpecific(buf=None, *args, **kwargs)

Organizationally Specific TLV 编码器/解码器类

属性

描述

buf

要解析的二进制数据。

oui

组织唯一 ID。

subtype

组织定义的子类型。

info

组织定义的信息字符串。

class os_ken.lib.packet.lldp.PortDescription(buf=None, *args, **kwargs)

Port description TLV 编码器/解码器类

属性

描述

buf

要解析的二进制数据。

port_description

端口描述。

class os_ken.lib.packet.lldp.PortID(buf=None, *args, **kwargs)

Port ID TLV 编码器/解码器类

属性

描述

buf

要解析的二进制数据。

subtype

子类型。

port_id

与子类型对应的 Port ID。

class os_ken.lib.packet.lldp.SystemCapabilities(buf=None, *args, **kwargs)

System Capabilities TLV 编码器/解码器类

属性

描述

buf

要解析的二进制数据。

system_cap

System Capabilities。

enabled_cap

已启用 Capabilities。

class os_ken.lib.packet.lldp.SystemDescription(buf=None, *args, **kwargs)

System description TLV 编码器/解码器类

属性

描述

buf

要解析的二进制数据。

system_description

系统描述。

class os_ken.lib.packet.lldp.SystemName(buf=None, *args, **kwargs)

System name TLV 编码器/解码器类

属性

描述

buf

要解析的二进制数据。

system_name

系统名称。

class os_ken.lib.packet.lldp.TTL(buf=None, *args, **kwargs)

Time To Live TLV 编码器/解码器类

属性

描述

buf

要解析的二进制数据。

ttl

Time To Live。

class os_ken.lib.packet.lldp.lldp(tlvs)

LLDPDU 编码器/解码器类。

一个实例至少具有以下属性。

属性

描述

tlvs

TLV 实例列表。

classmethod parser(buf)

解码协议头。

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

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

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

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

  • 数据包的其余部分。

serialize(payload, prev)

编码协议头。

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

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

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

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