BGP¶
RFC 4271 BGP-4
- 异常 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.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)¶
用于流量操作的流规范流量过滤操作。
属性
描述
动作
应用操作。支持的操作是
SAMPLE和TERMINAL。
- 类 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
操作的位表示形式。支持的操作是
POP、PUSH、SWAP、REWRITE_INNER、REWRITE_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 标志。支持的值为
CWR、ECN、URGENT、ACK、PUSH、RST、SYN和FIN。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 标志。支持的值为
CWR、ECN、URGENT、ACK、PUSH、RST、SYN和FIN。packet_len
整数
数字
数据包长度。
dscp
整数
数字
差异服务代码点。
fragment
固定字符串
位掩码
分片。支持的值为
ISF(是一个分片)、FF(第一个分片)和LF(最后一个分片)flow_label
整数
数字
流标签。
注意
对于
dst_prefix和src_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 实例。
- 参数:
route_dist -- 路由区分符。
kwargs -- 请参阅
os_ken.lib.packet.bgp.FlowSpecIPv4NLRI
示例
>>> 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 实例。
- 参数:
route_dist -- 路由区分符。
kwargs -- 请参阅
os_ken.lib.packet.bgp.FlowSpecIPv6NLRI
- 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.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.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 错误子码。
- 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 属性进行广播。
- 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 错误子码。