BGP

RFC 4271 BGP-4

异常 os_ken.lib.packet.bgp.AdminReset(data='')
CODE = 6

BGP 错误码。

SUB_CODE = 4

BGP 错误子码。

异常 os_ken.lib.packet.bgp.AdminShutdown(data='')

指示管理关闭的错误。

RFC 规定:如果 BGP 扬声器决定管理方式关闭与邻居的对等连接,则扬声器应发送带有错误码 Cease 和错误子码“管理关闭”的 NOTIFICATION 消息。

CODE = 6

BGP 错误码。

SUB_CODE = 2

BGP 错误子码。

异常 os_ken.lib.packet.bgp.AttrFlagError(data='')

指示已识别的路径属性具有不正确的标志的错误。

RFC 规定:如果任何已识别的属性具有与属性类型码冲突的属性标志,则错误子码必须设置为属性标志错误。数据字段必须包含错误的属性(类型、长度和值)。

CODE = 3

BGP 错误码。

SUB_CODE = 4

BGP 错误子码。

异常 os_ken.lib.packet.bgp.AttrLenError(data='')
CODE = 3

BGP 错误码。

SUB_CODE = 5

BGP 错误子码。

异常 os_ken.lib.packet.bgp.AuthFailure(data='')
CODE = 2

BGP 错误码。

SUB_CODE = 5

BGP 错误子码。

os_ken.lib.packet.bgp.BGPEvpnEsImportRTExtendedCommunity(**kwargs)

ES-Import 路由目标扩展社区

os_ken.lib.packet.bgp.BGPEvpnEsiLabelExtendedCommunity(label=None, mpls_label=None, vni=None, **kwargs)

ESI 标签扩展社区

os_ken.lib.packet.bgp.BGPEvpnMacMobilityExtendedCommunity(**kwargs)

MAC 移动扩展社区

os_ken.lib.packet.bgp.BGPFlowSpecRedirectCommunity(**kwargs)

用于重定向的流规范流量过滤操作。

属性

描述

as_number

自治系统编号。

local_administrator

本地管理员。

os_ken.lib.packet.bgp.BGPFlowSpecTPIDActionCommunity(**kwargs)

流规范 TPID 操作。

属性

描述

动作

位表示形式的操作。支持的操作是 TI(内部 TPID 操作)TO(外部 TPID 操作)

tpid_1

TI 使用的 TPID。

tpid_2

TO 使用的 TPID。

os_ken.lib.packet.bgp.BGPFlowSpecTrafficActionCommunity(**kwargs)

用于流量操作的流规范流量过滤操作。

属性

描述

动作

应用操作。支持的操作是 SAMPLETERMINAL

os_ken.lib.packet.bgp.BGPFlowSpecTrafficMarkingCommunity(**kwargs)

用于流量标记的流规范流量过滤操作。

属性

描述

dscp

差异服务代码点。

os_ken.lib.packet.bgp.BGPFlowSpecTrafficRateCommunity(**kwargs)

用于流量速率的流规范流量过滤操作。

属性

描述

as_number

自治系统编号。

rate_info

速率信息。

os_ken.lib.packet.bgp.BGPFlowSpecVlanActionCommunity(**kwargs)

流规范 VLAN 操作。

属性

描述

actions_1

操作的位表示形式。支持的操作是 POPPUSHSWAPREWRITE_INNERREWRITE_OUTER

actions_2

actions_1 相同。

vlan_1

actions_1 使用的 VLAN ID。

cos_1

actions_1 使用的服务类。

vlan_2

actions_2 使用的 VLAN ID。

cos_2

actions_2 使用的服务类。

os_ken.lib.packet.bgp.BGPKeepAlive(type_=4, len_=None, marker=None)

BGP-4 KEEPALIVE 消息编码器/解码器类。

一个实例至少具有以下属性。其中大部分与网络传输中的对应项相同,但采用主机字节顺序。__init__ 按照此顺序接收相应的参数。

属性

描述

marker

标记字段。在编码时忽略。

len

长度字段。在编码时忽略。

type

类型字段。

类方法 parser(buf)

解码协议头。

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

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

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

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

  • 数据包的其余部分。

os_ken.lib.packet.bgp.BGPMessage(marker=None, len_=None, type_=None)

BGP-4 消息的基本类。

一个实例至少具有以下属性。其中大部分与网络传输中的对应项相同,但采用主机字节顺序。__init__ 按照此顺序接收相应的参数。

属性

描述

marker

标记字段。在编码时忽略。

len

长度字段。在编码时忽略。

type

类型字段。是 BGP_MSG_* 常量之一。

类方法 parser(buf)

解码协议头。

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

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

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

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

  • 数据包的其余部分。

serialize(payload=None, prev=None)

编码协议头。

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

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

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

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

os_ken.lib.packet.bgp.BGPNotification(error_code, error_subcode, data=b'', type_=3, len_=None, marker=None)

BGP-4 NOTIFICATION 消息编码器/解码器类。

一个实例至少具有以下属性。其中大部分与网络传输中的对应项相同,但采用主机字节顺序。__init__ 按照此顺序接收相应的参数。

属性

描述

marker

标记字段。在编码时忽略。

len

长度字段。在编码时忽略。

type

类型字段。

error_code

错误码字段。

error_subcode

错误子码字段。

data

数据字段。

类方法 parser(buf)

解码协议头。

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

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

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

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

  • 数据包的其余部分。

class os_ken.lib.packet.bgp.BGPOpen(my_as, bgp_identifier, type_=1, opt_param_len=0, opt_param=None, version=4, hold_time=0, len_=None, marker=None)

BGP-4 OPEN 消息编码/解码类。

一个实例至少具有以下属性。其中大部分与网络传输中的对应项相同,但采用主机字节顺序。__init__ 按照此顺序接收相应的参数。

属性

描述

marker

标记字段。在编码时忽略。

len

长度字段。在编码时忽略。

type

类型字段。

版本

版本字段。

my_as

我的自治系统字段。2 字节无符号整数。

hold_time

保持时间字段。2 字节无符号整数。

bgp_identifier

BGP 标识符字段。一个 IPv4 地址。例如,'192.0.2.1'

opt_param_len

可选参数长度字段。编码时忽略。

opt_param

可选参数字段。一个 BGPOptParam 实例列表。默认值为 []。

classmethod parser(buf)

解码协议头。

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

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

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

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

  • 数据包的其余部分。

class os_ken.lib.packet.bgp.BGPPathAttributePmsiTunnel(pmsi_flags, tunnel_type, mpls_label=None, label=None, vni=None, tunnel_id=None, flags=0, type_=None, length=None)

P-Multicast 服务接口隧道 (PMSI Tunnel) 属性

classmethod from_jsondict(dict_, decode_string=<function b64decode>, **additional_args)

从 JSON 样式的字典创建实例。

使用字典中指定的参数实例化此类。

此方法接受以下参数:

参数

描述

dict_

一个描述参数的字典。例如,{"Param1": 100, "Param2": 200}

decode_string

(可选) 指定如何解码字符串。默认值为 base64。此参数仅用于没有在 _TYPE 类属性中显式类型注释的属性。

additional_args

(可选) 构造函数的其他关键字参数。

class os_ken.lib.packet.bgp.BGPRouteRefresh(afi, safi, demarcation=0, type_=5, len_=None, marker=None)

BGP-4 路由刷新消息 (RFC 2918) 编码/解码类。

一个实例至少具有以下属性。其中大部分与网络传输中的对应项相同,但采用主机字节顺序。__init__ 按照此顺序接收相应的参数。

属性

描述

marker

标记字段。在编码时忽略。

len

长度字段。在编码时忽略。

type

类型字段。

afi

地址族标识符

safi

后续地址族标识符

classmethod parser(buf)

解码协议头。

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

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

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

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

  • 数据包的其余部分。

class os_ken.lib.packet.bgp.BGPUpdate(type_=2, withdrawn_routes_len=None, withdrawn_routes=None, total_path_attribute_len=None, path_attributes=None, nlri=None, len_=None, marker=None)

BGP-4 更新消息编码/解码类。

一个实例至少具有以下属性。其中大部分与网络传输中的对应项相同,但采用主机字节顺序。__init__ 按照此顺序接收相应的参数。

属性

描述

marker

标记字段。在编码时忽略。

len

长度字段。在编码时忽略。

type

类型字段。

withdrawn_routes_len

撤销路由长度字段。编码时忽略。

withdrawn_routes

撤销路由字段。一个 BGPWithdrawnRoute 实例列表。默认值为 []。

total_path_attribute_len

总路径属性长度字段。编码时忽略。

path_attributes

路径属性字段。一个 BGPPathAttribute 实例列表。默认值为 []。

nlri

网络层可达信息字段。一个 BGPNLRI 实例列表。默认值为 []。

classmethod parser(buf)

解码协议头。

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

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

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

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

  • 数据包的其余部分。

exception os_ken.lib.packet.bgp.BadBgpId(data='')

错误,指示 BGP 标识符不正确。

RFC 规定:如果 OPEN 消息的 BGP 标识符在语法上不正确,则错误子代码必须设置为 Bad BGP Identifier。语法正确性意味着 BGP 标识符字段表示有效的单播 IP 主机地址。

CODE = 2

BGP 错误码。

SUB_CODE = 3

BGP 错误子码。

exception os_ken.lib.packet.bgp.BadLen(msg_type_code, message_length)
CODE = 1

BGP 错误码。

SUB_CODE = 2

BGP 错误子码。

exception os_ken.lib.packet.bgp.BadMsg(msg_type)

错误,指示未识别的消息类型。

RFC 规定:如果消息头的类型字段未被识别,则错误子代码必须设置为 Bad Message Type。数据字段必须包含错误的类型字段。

CODE = 1

BGP 错误码。

SUB_CODE = 3

BGP 错误子码。

exception os_ken.lib.packet.bgp.BadNotification(data='')
SEND_ERROR = False

如果设置为 True,则表示应将 NOTIFICATION 消息发送给对等方。

exception os_ken.lib.packet.bgp.BadPeerAs(data='')

错误,指示 OPEN 消息具有不正确的 AS 号码。

RFC 规定:如果 OPEN 消息的自治系统字段不可接受,则错误子代码必须设置为 Bad Peer AS。可接受的自治系统号码的确定是配置对等 AS。

CODE = 2

BGP 错误码。

SUB_CODE = 2

BGP 错误子码。

exception os_ken.lib.packet.bgp.BgpExc(data='')

基础 BGP 异常。

CODE = 0

BGP 错误码。

SEND_ERROR = True

如果设置为 True,则表示应将 NOTIFICATION 消息发送给对等方。

SUB_CODE = 0

BGP 错误子码。

exception os_ken.lib.packet.bgp.CollisionResolution(data='')

错误,指示连接冲突解决。

RFC 规定:如果 BGP 扬声器决定发送带有错误代码 Cease 的 NOTIFICATION 消息,这是冲突解决过程 (如 [BGP-4] 中所述) 的结果,则子代码应设置为“连接冲突解决”。

CODE = 6

BGP 错误码。

SUB_CODE = 7

BGP 错误子码。

exception os_ken.lib.packet.bgp.ConnRejected(data='')

错误,指示连接被拒绝。

RFC 规定:如果 BGP 扬声器决定禁止 BGP 连接(例如,未在本地配置对等体),则在接受传输协议连接后,BGP 扬声器应发送带有错误代码 Cease 和错误子代码“Connection Rejected”的 NOTIFICATION 消息。

CODE = 6

BGP 错误码。

SUB_CODE = 5

BGP 错误子码。

class os_ken.lib.packet.bgp.EvpnASBasedEsi(as_number, local_disc, type_=None)

基于 AS 的 ESI 值

此类型指示基于自治系统 (AS) 的 ESI 值,可以自动生成或由操作员配置。

class os_ken.lib.packet.bgp.EvpnArbitraryEsi(value, type_=None)

任意 9 字节 ESI 值

此类型指示任意 9 字节 ESI 值,由操作员管理和配置。

class os_ken.lib.packet.bgp.EvpnEsi(type_=None)

以太网段标识符

支持的 ESI 类型

  • EvpnEsi.ARBITRARY 指示 EvpnArbitraryEsi。

  • EvpnEsi.LACP 指示 EvpnLACPEsi。

  • EvpnEsi.L2_BRIDGE 指示 EvpnL2BridgeEsi。

  • EvpnEsi.MAC_BASED 指示 EvpnMacBasedEsi。

  • EvpnEsi.ROUTER_ID 指示 EvpnRouterIDEsi。

  • EvpnEsi.AS_BASED 指示 EvpnASBasedEsi。

class os_ken.lib.packet.bgp.EvpnEthernetAutoDiscoveryNLRI(route_dist, esi, ethernet_tag_id, mpls_label=None, vni=None, label=None, type_=None, length=None)

以太网自动发现路由类型特定的 EVPN NLRI

class os_ken.lib.packet.bgp.EvpnEthernetSegmentNLRI(route_dist, esi, ip_addr, ip_addr_len=None, type_=None, length=None)

以太网段路由类型特定的 EVPN NLRI

class os_ken.lib.packet.bgp.EvpnInclusiveMulticastEthernetTagNLRI(route_dist, ethernet_tag_id, ip_addr, ip_addr_len=None, type_=None, length=None)

包含多播以太网标签路由类型特定的 EVPN NLRI

class os_ken.lib.packet.bgp.EvpnIpPrefixNLRI(route_dist, ethernet_tag_id, ip_prefix, esi=None, gw_ip_addr=None, mpls_label=None, vni=None, label=None, type_=None, length=None)

IP 前缀通告路由 NLRI

class os_ken.lib.packet.bgp.EvpnL2BridgeEsi(mac_addr, priority, type_=None)

第 2 层网桥的 ESI 值

当通过桥接 LAN 在 CE 和 PE 之间进行间接连接时,此类型用于指示由第 2 层桥接协议确定的自动生成的 ESI 值。

class os_ken.lib.packet.bgp.EvpnLACPEsi(mac_addr, port_key, type_=None)

LACP 的 ESI 值

当在 PE 和 CE 之间使用 IEEE 802.1AX LACP 时,此 ESI 类型指示从 LACP 确定的自动生成的 ESI 值。

class os_ken.lib.packet.bgp.EvpnMacBasedEsi(mac_addr, local_disc, type_=None)

基于 MAC 的 ESI 值

此类型指示基于 MAC 的 ESI 值,可以自动生成或由操作员配置。

class os_ken.lib.packet.bgp.EvpnMacIPAdvertisementNLRI(route_dist, ethernet_tag_id, mac_addr, ip_addr, esi=None, mpls_labels=None, vni=None, labels=None, mac_addr_len=None, ip_addr_len=None, type_=None, length=None)

MAC/IP 通告路由类型特定的 EVPN NLRI

class os_ken.lib.packet.bgp.EvpnNLRI(type_=None, length=None)

EVPN 的 BGP 网络层可达性信息 (NLRI)

class os_ken.lib.packet.bgp.EvpnRouterIDEsi(router_id, local_disc, type_=None)

路由器 ID ESI 值

此类型指示可以自动生成或由操作员配置的路由器 ID ESI 值。

class os_ken.lib.packet.bgp.EvpnUnknownEsi(value, type_=None)

未知类型的 ESI 值

class os_ken.lib.packet.bgp.EvpnUnknownNLRI(value, type_, length=None)

未知路由类型特定的 EVPN NLRI

exception os_ken.lib.packet.bgp.FiniteStateMachineError(data='')

用于指示任何有限状态机错误的错误。

RFC 规定:有限状态机 (FSM) 检测到的任何错误都通过发送带有错误代码有限状态机错误的 NOTIFICATION 消息来指示。

CODE = 5

BGP 错误码。

SUB_CODE = 1

BGP 错误子码。

class os_ken.lib.packet.bgp.FlowSpecComponentUnknown(buf, type_=None)

流量规范 NLRI 组件的未知组件类型

class os_ken.lib.packet.bgp.FlowSpecDSCP(operator, value, type_=None)

流量规范 NLRI 组件的差分服务代码点

将 6 位 DSCP 字段设置为值。[RFC2474]

class os_ken.lib.packet.bgp.FlowSpecDestPort(operator, value, type_=None)

流量规范 NLRI 组件的目标端口号

将 TCP 或 UDP 数据包的目标端口设置为值。

class os_ken.lib.packet.bgp.FlowSpecDestPrefix(length, addr, type_=None)

流规范 NLRI 组件的目标前缀

class os_ken.lib.packet.bgp.FlowSpecDestinationMac(length, addr, type_=None)

目标 MAC 地址。

设置 value 处的 MAC 地址。

class os_ken.lib.packet.bgp.FlowSpecEtherType(operator, value, type_=None)

以太网帧中的以太网类型字段。

设置 value 处的以太网类型字段的 2 字节值。

class os_ken.lib.packet.bgp.FlowSpecFragment(operator, value, type_=None)

流规范 NLRI 组件的分片

设置 value 处的操作数格式的位掩码。支持以下值。

属性

描述

LF

最后一个分片

FF

第一个分片

ISF

是一个分片

DF

不分片

class os_ken.lib.packet.bgp.FlowSpecIPProtocol(operator, value, type_=None)

流规范 NLRI 组件的 IP 协议

设置 value 处的 IP 协议号。

class os_ken.lib.packet.bgp.FlowSpecIPv4NLRI(length=0, rules=None)

IPv4 的流规范 NLRI 类 [RFC 5575]

classmethod from_user(**kwargs)

创建 NLRI 实例的实用方法。

此函数从人类可读格式的值返回 NLRI 实例。

参数:

kwargs -- 可用的参数如下。

参数

操作员

描述

dst_prefix

IPv4 前缀

目标前缀。

src_prefix

IPv4 前缀

源前缀。

ip_proto

整数

数字

IP 协议。

port

整数

数字

端口号。

dst_port

整数

数字

目标端口号。

src_port

整数

数字

源端口号。

icmp_type

整数

数字

ICMP 类型。

icmp_code

整数

数字

ICMP 代码。

tcp_flags

固定字符串

位掩码

TCP 标志。支持的值为 CWRECNURGENTACKPUSHRSTSYNFIN

packet_len

整数

数字

数据包长度。

dscp

整数

数字

差异服务代码点。

fragment

固定字符串

位掩码

分片。支持的值为 DF(不分片)、ISF(是一个分片)、FF(第一个分片)和 LF(最后一个分片)

示例

>>> msg = bgp.FlowSpecIPv4NLRI.from_user(
...     dst_prefix='10.0.0.0/24',
...     src_prefix='20.0.0.1/24',
...     ip_proto=6,
...     port='80 | 8000',
...     dst_port='>9000 & <9050',
...     src_port='>=8500 & <=9000',
...     icmp_type=0,
...     icmp_code=6,
...     tcp_flags='SYN+ACK & !=URGENT',
...     packet_len=1000,
...     dscp='22 | 24',
...     fragment='LF | ==FF')
>>>

您可以使用以下关键字指定条件。

当操作符类型为 Numeric 时,可以使用以下关键字。

关键字

描述

<

数据与值之间的小于比较。

<=

数据与值之间的小于等于比较。

>

数据与值之间的大于比较。

>=

数据与值之间的大于等于比较。

==

数据与值之间的相等性。可以省略此操作符。

当操作符类型为 Bitmask 时,可以使用以下关键字。

关键字

描述

!=

不相等操作。

==

如果指定,则进行精确匹配操作。否则,进行部分匹配操作。

+

用于位掩码值的求和。(例如,SYN+ACK)

您可以使用以下运算符组合多个条件。

关键字

描述

|

逻辑或运算

&

逻辑与运算

返回值:

FlowSpecVPNv4NLRI 的一个实例。

class os_ken.lib.packet.bgp.FlowSpecIPv6DestPrefix(length, addr, offset=0, type_=None)

IPv6 目标前缀,用于流规范 NLRI 组件

class os_ken.lib.packet.bgp.FlowSpecIPv6FlowLabel(operator, value, type_=None)
class os_ken.lib.packet.bgp.FlowSpecIPv6Fragment(operator, value, type_=None)

IPv6 的流规范的分片 NLRI 组件

属性

描述

LF

最后一个分片

FF

第一个分片

ISF

是一个分片

class os_ken.lib.packet.bgp.FlowSpecIPv6NLRI(length=0, rules=None)

IPv6 的流规范 NLRI 类 [RFC draft-ietf-idr-flow-spec-v6-08]

classmethod from_user(**kwargs)

创建 NLRI 实例的实用方法。

此函数从人类可读格式的值返回 NLRI 实例。

参数:

kwargs -- 可用的参数如下。

参数

操作员

描述

dst_prefix

IPv6 前缀

目标前缀。

src_prefix

IPv6 前缀

源前缀。

next_header

整数

数字

下一跳。

port

整数

数字

端口号。

dst_port

整数

数字

目标端口号。

src_port

整数

数字

源端口号。

icmp_type

整数

数字

ICMP 类型。

icmp_code

整数

数字

ICMP 代码。

tcp_flags

固定字符串

位掩码

TCP 标志。支持的值为 CWRECNURGENTACKPUSHRSTSYNFIN

packet_len

整数

数字

数据包长度。

dscp

整数

数字

差异服务代码点。

fragment

固定字符串

位掩码

分片。支持的值为 ISF(是一个分片)、FF(第一个分片)和 LF(最后一个分片)

flow_label

整数

数字

流标签。

注意

对于 dst_prefixsrc_prefix,您可以提供类似以下的“offset”值:2001::2/128/32。在这种情况下,offset 为 32。offset 可以省略,此时 offset 被视为 0。

class os_ken.lib.packet.bgp.FlowSpecIPv6SrcPrefix(length, addr, offset=0, type_=None)

IPv6 源前缀,用于流规范 NLRI 组件

class os_ken.lib.packet.bgp.FlowSpecIcmpCode(operator, value, type_=None)

ICMP 代码流规范 NLRI 组件

设置 ICMP 数据包中的代码字段为 value。

class os_ken.lib.packet.bgp.FlowSpecIcmpType(operator, value, type_=None)

流规范 NLRI 组件的 ICMP 类型

设置 ICMP 数据包中的类型字段为 value。

class os_ken.lib.packet.bgp.FlowSpecInnerVLANCoS(operator, value, type_=None)

内部以太网帧中的 VLAN CoS 字段。

将 3 位 CoS 字段设置为 value。

class os_ken.lib.packet.bgp.FlowSpecInnerVLANID(operator, value, type_=None)

内部 VLAN ID。

将 VLAN ID 设置为 value。

class os_ken.lib.packet.bgp.FlowSpecL2VPNNLRI(length=0, route_dist=None, rules=None)

L2VPN 的流规范 NLRI 类 [draft-ietf-idr-flowspec-l2vpn-05]

classmethod from_user(route_dist, **kwargs)

创建 L2VPN NLRI 实例的实用方法。

此函数从人类可读格式的值返回 L2VPN NLRI 实例。

参数:

kwargs -- 可用的参数如下。

参数

操作员

描述

ether_type

整数

数字

以太网类型。

src_mac

MAC 地址

源 MAC 地址。

dst_mac

MAC 地址

目标 MAC 地址。

llc_ssap

整数

数字

LLC 中的源服务访问点。

llc_dsap

整数

数字

LLC 中的目标服务访问点。

llc_control

整数

数字

LLC 中的控制字段。

snap

整数

数字

子网访问协议字段。

vlan_id

整数

数字

VLAN ID。

vlan_cos

整数

数字

VLAN COS 字段。

inner_vlan_id

整数

数字

内部 VLAN ID。

inner_vlan_cos

整数

数字

内部 VLAN COS 字段。

class os_ken.lib.packet.bgp.FlowSpecLLCControl(operator, value, type_=None)

以太网帧中 LLC 标头的控制字段。

将 Contorol 字段设置为 value。

class os_ken.lib.packet.bgp.FlowSpecLLCDSAP(operator, value, type_=None)

以太网帧中 LLC 标头中的目标 SAP 字段。

将目标 SAP 的 2 字节值设置为 value。

class os_ken.lib.packet.bgp.FlowSpecLLCSSAP(operator, value, type_=None)

以太网帧的LLC报头中的源SAP字段。

将源SAP的值设置为value。

class os_ken.lib.packet.bgp.FlowSpecNextHeader(operator, value, type_=None)

IPv6数据包中的下一报头值

将IP协议号设置为value

class os_ken.lib.packet.bgp.FlowSpecPacketLen(operator, value, type_=None)

流规范NLRI组件的包长度

将总IP包长度设置为value。

class os_ken.lib.packet.bgp.FlowSpecPort(operator, value, type_=None)

流规范NLRI组件的端口号

将源或目标TCP/UDP端口设置为value。

class os_ken.lib.packet.bgp.FlowSpecSNAP(operator, value, type_=None)

以太网帧中的子网络访问协议字段。

将5字节SNAP字段设置为value。

class os_ken.lib.packet.bgp.FlowSpecSourceMac(length, addr, type_=None)

源MAC地址。

设置 value 处的 MAC 地址。

class os_ken.lib.packet.bgp.FlowSpecSrcPort(operator, value, type_=None)

流规范NLRI组件的源端口号

将TCP或UDP包的源端口设置为value。

class os_ken.lib.packet.bgp.FlowSpecSrcPrefix(length, addr, type_=None)

流规范NLRI组件的源前缀

class os_ken.lib.packet.bgp.FlowSpecTCPFlags(operator, value, type_=None)

流规范NLRI组件的TCP标志

支持的TCP标志是CWR、ECN、URGENT、ACK、PUSH、RST、SYN和FIN。

class os_ken.lib.packet.bgp.FlowSpecVLANCoS(operator, value, type_=None)

以太网帧中的VLAN CoS字段。

将3位CoS字段设置为value。

class os_ken.lib.packet.bgp.FlowSpecVLANID(operator, value, type_=None)

VLAN ID。

将 VLAN ID 设置为 value。

class os_ken.lib.packet.bgp.FlowSpecVPNv4NLRI(length=0, route_dist=None, rules=None)

VPNv4 [RFC 5575]的流规范NLRI类

classmethod from_user(route_dist, **kwargs)

创建 NLRI 实例的实用方法。

此函数从人类可读格式的值返回 NLRI 实例。

参数:

示例

>>> msg = bgp.FlowSpecIPv4NLRI.from_user(
...     route_dist='65000:1000',
...     dst_prefix='10.0.0.0/24',
...     src_prefix='20.0.0.1/24',
...     ip_proto=6,
...     port='80 | 8000',
...     dst_port='>9000 & <9050',
...     src_port='>=8500 & <=9000',
...     icmp_type=0,
...     icmp_code=6,
...     tcp_flags='SYN+ACK & !=URGENT',
...     packet_len=1000,
...     dscp='22 | 24',
...     fragment='LF | ==FF')
>>>
class os_ken.lib.packet.bgp.FlowSpecVPNv6NLRI(length=0, route_dist=None, rules=None)

VPNv6 [draft-ietf-idr-flow-spec-v6-08]的流规范NLRI类

classmethod from_user(route_dist, **kwargs)

创建 NLRI 实例的实用方法。

此函数从人类可读格式的值返回 NLRI 实例。

参数:
exception os_ken.lib.packet.bgp.HoldTimerExpired(data='')

表示保持计时器已过期的错误。

RFC指出:如果系统在OPEN消息的Hold Time字段指定的时间段内没有收到连续的KEEPALIVE、UPDATE和/或NOTIFICATION消息,则将发送带有Hold Timer Expired错误代码的NOTIFICATION消息,并关闭BGP连接。

CODE = 4

BGP 错误码。

SUB_CODE = 1

BGP 错误子码。

exception os_ken.lib.packet.bgp.InvalidNetworkField(data='')
CODE = 3

BGP 错误码。

SUB_CODE = 10

BGP 错误子码。

exception os_ken.lib.packet.bgp.InvalidNextHop(data='')
CODE = 3

BGP 错误码。

SUB_CODE = 8

BGP 错误子码。

exception os_ken.lib.packet.bgp.InvalidOriginError(data='')

错误指示未定义的Origin属性值。

RFC指出:如果ORIGIN属性具有未定义的value,则错误子代码必须设置为Invalid Origin Attribute。数据字段必须包含未识别的属性(类型、长度和值)。

CODE = 3

BGP 错误码。

SUB_CODE = 6

BGP 错误子码。

exception os_ken.lib.packet.bgp.MalformedAsPath(data='')

错误指示AP_PATH属性的语法不正确。

RFC指出:AS_PATH属性会检查其语法是否正确。如果路径的语法不正确,则错误子代码必须设置为Malformed AS_PATH。

CODE = 3

BGP 错误码。

SUB_CODE = 11

BGP 错误子码。

exception os_ken.lib.packet.bgp.MalformedAttrList(data='')

错误指示UPDATE消息格式不正确。

RFC指出:首先检查UPDATE消息的路径属性,以检查错误。如果Withdrawn Routes Length或Total Attribute Length太大(即,Withdrawn Routes Length + Total Attribute Length + 23超过消息Length),则错误子代码必须设置为Malformed Attribute List。

CODE = 3

BGP 错误码。

SUB_CODE = 1

BGP 错误子码。

exception os_ken.lib.packet.bgp.MalformedOptionalParam(data='')

如果识别出的可选参数格式不正确。

RFC指出:如果OPEN消息中的某个可选参数被识别出来,但格式不正确,则错误子代码必须设置为0(未指定)。

CODE = 2

BGP 错误码。

SUB_CODE = 0

BGP 错误子码。

exception os_ken.lib.packet.bgp.MaxPrefixReached(data='')
CODE = 6

BGP 错误码。

SUB_CODE = 1

BGP 错误子码。

exception os_ken.lib.packet.bgp.MissingWellKnown(pattr_type_code)

指示缺少周知属性的错误。

RFC 规定:如果缺少任何周知强制属性,则错误子码必须设置为“缺少周知属性”。数据字段必须包含缺少周知属性的属性类型代码。

CODE = 3

BGP 错误码。

SUB_CODE = 3

BGP 错误子码。

exception os_ken.lib.packet.bgp.NotSync(data='')
CODE = 1

BGP 错误码。

SUB_CODE = 1

BGP 错误子码。

exception os_ken.lib.packet.bgp.OptAttrError(data='')

错误指示可选属性格式不正确。

RFC 规定:如果识别出某个可选属性,则必须检查该属性的值。如果检测到错误,则必须丢弃该属性,并且错误子码必须设置为“可选属性错误”。数据字段必须包含该属性(类型、长度和值)。

CODE = 3

BGP 错误码。

SUB_CODE = 9

BGP 错误子码。

exception os_ken.lib.packet.bgp.OtherConfChange(data='')
CODE = 6

BGP 错误码。

SUB_CODE = 6

BGP 错误子码。

exception os_ken.lib.packet.bgp.OutOfResource(data='')
CODE = 6

BGP 错误码。

SUB_CODE = 8

BGP 错误子码。

exception os_ken.lib.packet.bgp.PeerDeConfig(data='')
CODE = 6

BGP 错误码。

SUB_CODE = 3

BGP 错误子码。

class os_ken.lib.packet.bgp.PmsiTunnelIdUnknown(value)

未知的路由类型特定的 _PmsiTunnelId

class os_ken.lib.packet.bgp.RouteTargetMembershipNLRI(origin_as, route_target)

路由目标成员关系 NLRI。

路由目标成员关系 NLRI 在 BGP UPDATE 消息中使用 MP_REACH_NLRI 和 MP_UNREACH_NLRI 属性进行广播。

exception os_ken.lib.packet.bgp.RoutingLoop(data='')
CODE = 3

BGP 错误码。

SUB_CODE = 7

BGP 错误子码。

class os_ken.lib.packet.bgp.StreamParser

BGP-4 消息的流解析器。

这是 os_ken.lib.packet.stream_parser.StreamParser 的子类。其 parse 方法返回 BGPMessage 子类实例的列表。

try_parse(data)

尝试从给定的字节中提取消息。

这是子类的覆盖点。

此方法尝试从参数给定的字节中提取消息。

如果给定的数据不足以提取完整的消息,但稍后有更多数据到达时仍有机会提取消息,则引发 TooSmallException。

exception os_ken.lib.packet.bgp.UnRegWellKnowAttr(data='')
CODE = 3

BGP 错误码。

SUB_CODE = 2

BGP 错误子码。

exception os_ken.lib.packet.bgp.UnacceptableHoldTime(data='')

指示 OPEN 消息中保持时间不可接受的错误。

RFC 规定:如果 OPEN 消息的保持时间字段不可接受,则错误子码必须设置为“不可接受的保持时间”。

CODE = 2

BGP 错误码。

SUB_CODE = 6

BGP 错误子码。

exception os_ken.lib.packet.bgp.UnsupportedOptParam(data='')

指示不支持可选参数的错误。

RFC 规定:如果 OPEN 消息中的某个可选参数未被识别,则错误子码必须设置为“不支持的可选参数”。

CODE = 2

BGP 错误码。

SUB_CODE = 4

BGP 错误子码。

exception os_ken.lib.packet.bgp.UnsupportedVersion(locally_support_version)

指示不支持的 BGP 版本号的错误。

RFC 规定:如果在收到的 OPEN 消息的版本字段中版本号不受支持,则错误子码必须设置为“不支持的版本号”。数据字段是一个 2 字节无符号整数,指示小于远程 BGP 对等体通告的版本号(如在收到的 OPEN 消息中指示)的本地支持的最大版本号,或者如果本地支持的最小版本号大于远程 BGP 对等体通告的版本号,则指示本地支持的最小版本号。

CODE = 2

BGP 错误码。

SUB_CODE = 1

BGP 错误子码。