Nicira Extension Structures¶
Nicira Extension Actions Structures¶
以下显示了仅在 OpenFlow1.0 中支持的 NXAction 类。¶
- class os_ken.ofproto.ofproto_v1_0_parser.NXActionSetQueue(queue_id, type_=None, len_=None, vendor=None, subtype=None)¶
设置队列动作
此操作设置在输出数据包时应使用的队列。
与 ovs-ofctl 命令的以下操作等效。
set_queue:queue
属性
描述
queue_id
数据包的队列 ID
注意
此操作受 OpenFlow1.2 或更高版本中的
OFPActionSetQueue支持。示例
actions += [parser.NXActionSetQueue(queue_id=10)]
- class os_ken.ofproto.ofproto_v1_0_parser.NXActionDecTtl(type_=None, len_=None, vendor=None, subtype=None)¶
减少 IP TTL 动作
此操作递减 IPv4 数据包的 TTL 或 IPv6 数据包的 hop limit。
与 ovs-ofctl 命令的以下操作等效。
dec_ttl
注意
此操作受 OpenFlow1.2 或更高版本中的
OFPActionDecNwTtl支持。示例
actions += [parser.NXActionDecTtl()]
- class os_ken.ofproto.ofproto_v1_0_parser.NXActionPushMpls(ethertype, type_=None, len_=None, vendor=None, subtype=None)¶
推送 MPLS 动作
此动作将新的 MPLS 头部推送到数据包。
与 ovs-ofctl 命令的以下操作等效。
push_mpls:ethertype
属性
描述
ethertype
以太类型(该值必须为 0x8847 或 0x8848)
注意
此操作受 OpenFlow1.2 或更高版本中的
OFPActionPushMpls支持。示例
match = parser.OFPMatch(dl_type=0x0800) actions += [parser.NXActionPushMpls(ethertype=0x8847)]
- class os_ken.ofproto.ofproto_v1_0_parser.NXActionPopMpls(ethertype, type_=None, len_=None, vendor=None, subtype=None)¶
弹出 MPLS 动作
此动作从数据包中弹出 MPLS 头部。
与 ovs-ofctl 命令的以下操作等效。
pop_mpls:ethertype
属性
描述
ethertype
以太类型
注意
此操作受 OpenFlow1.2 或更高版本中的
OFPActionPopMpls支持。示例
match = parser.OFPMatch(dl_type=0x8847) actions += [parser.NXActionPushMpls(ethertype=0x0800)]
- class os_ken.ofproto.ofproto_v1_0_parser.NXActionSetMplsTtl(ttl, type_=None, len_=None, vendor=None, subtype=None)¶
设置 MPLS TTL 动作
此动作设置 MPLS TTL。
与 ovs-ofctl 命令的以下操作等效。
set_mpls_ttl:ttl
属性
描述
ttl
MPLS TTL
注意
此操作受 OpenFlow1.2 或更高版本中的
OFPActionSetMplsTtl支持。示例
actions += [parser.NXActionSetMplsTil(ttl=128)]
- class os_ken.ofproto.ofproto_v1_0_parser.NXActionDecMplsTtl(type_=None, len_=None, vendor=None, subtype=None)¶
减少 MPLS TTL 动作
此动作减少 MPLS TTL。
与 ovs-ofctl 命令的以下操作等效。
dec_mpls_ttl
注意
此操作受 OpenFlow1.2 或更高版本中的
OFPActionDecMplsTtl支持。示例
actions += [parser.NXActionDecMplsTil()]
- class os_ken.ofproto.ofproto_v1_0_parser.NXActionSetMplsLabel(label, type_=None, len_=None, vendor=None, subtype=None)¶
设置 MPLS 标签操作
此操作设置 MPLS 标签。
与 ovs-ofctl 命令的以下操作等效。
set_mpls_label:label
属性
描述
标签
MPLS 标签
注意
此操作受 OpenFlow1.2 或更高版本中的
OFPActionSetField(mpls_label=label)支持。示例
actions += [parser.NXActionSetMplsLabel(label=0x10)]
- class os_ken.ofproto.ofproto_v1_0_parser.NXActionSetMplsTc(tc, type_=None, len_=None, vendor=None, subtype=None)¶
设置 MPLS Tc 操作
此操作设置 MPLS Tc。
与 ovs-ofctl 命令的以下操作等效。
set_mpls_tc:tc
属性
描述
tc
MPLS Tc
注意
此操作受 OpenFlow1.2 或更高版本中的
OFPActionSetField(mpls_label=tc)支持。示例
actions += [parser.NXActionSetMplsLabel(tc=0x10)]
以下显示了在 OpenFlow1.0 或更高版本中支持的 NXAction 类。¶
- class os_ken.ofproto.ofproto_v1_3_parser.NXActionPopQueue(type_=None, len_=None, experimenter=None, subtype=None)¶
弹出队列操作
此操作将队列恢复为在应用任何 set_queue 操作之前的值。
与 ovs-ofctl 命令的以下操作等效。
pop_queue
示例
actions += [parser.NXActionPopQueue()]
- class os_ken.ofproto.ofproto_v1_3_parser.NXActionRegLoad(ofs_nbits, dst, value, type_=None, len_=None, experimenter=None, subtype=None)¶
加载字面值操作
此操作将字面值加载到字段或字段的一部分。
与 ovs-ofctl 命令的以下操作等效。
load:value->dst[start..end]
属性
描述
ofs_nbits
开始和结束用于 OXM/NXM 字段。设置方法请参考
nicira_ext.ofs_nbitsdst
目标字段的 OXM/NXM 标头
value
要加载的 OXM/NXM 值
示例
actions += [parser.NXActionRegLoad( ofs_nbits=nicira_ext.ofs_nbits(4, 31), dst="eth_dst", value=0x112233)]
- class os_ken.ofproto.ofproto_v1_3_parser.NXActionRegLoad2(dst, value, mask=None, type_=None, len_=None, experimenter=None, subtype=None)¶
加载字面值操作
此操作将字面值加载到字段或字段的一部分。
与 ovs-ofctl 命令的以下操作等效。
set_field:value[/mask]->dst
属性
描述
value
要加载的 OXM/NXM 值
mask
目标字段的掩码
dst
目标字段的 OXM/NXM 标头
示例
actions += [parser.NXActionRegLoad2(dst="tun_ipv4_src", value="192.168.10.0", mask="255.255.255.0")]
- class os_ken.ofproto.ofproto_v1_3_parser.NXActionNote(note, type_=None, len_=None, experimenter=None, subtype=None)¶
注释操作
此操作什么也不做。
与 ovs-ofctl 命令的以下操作等效。
note:[hh]..
属性
描述
note
一个整数类型值的列表
示例
actions += [parser.NXActionNote(note=[0xaa,0xbb,0xcc,0xdd])]
- class os_ken.ofproto.ofproto_v1_3_parser.NXActionSetTunnel(tun_id, type_=None, len_=None, experimenter=None, subtype=None)¶
设置隧道操作
此操作将标识符(例如 GRE)设置为指定的 ID。
与 ovs-ofctl 命令的以下操作等效。
注意
此操作受 OpenFlow1.2 或更高版本中的
OFPActionSetField支持。set_tunnel:id
属性
描述
tun_id
隧道 ID(32 位)
示例
actions += [parser.NXActionSetTunnel(tun_id=0xa)]
- class os_ken.ofproto.ofproto_v1_3_parser.NXActionSetTunnel64(tun_id, type_=None, len_=None, experimenter=None, subtype=None)¶
设置隧道操作
此操作以隧道封装数据包后输出到端口。
与 ovs-ofctl 命令的以下操作等效。
注意
此操作受 OpenFlow1.2 或更高版本中的
OFPActionSetField支持。set_tunnel64:id
属性
描述
tun_id
隧道 ID(64 位)
示例
actions += [parser.NXActionSetTunnel64(tun_id=0xa)]
- class os_ken.ofproto.ofproto_v1_3_parser.NXActionRegMove(src_field, dst_field, n_bits, src_ofs=0, dst_ofs=0, type_=None, len_=None, experimenter=None, subtype=None)¶
移动寄存器动作
此动作将 src 复制到 dst。
与 ovs-ofctl 命令的以下操作等效。
move:src[start..end]->dst[start..end ]
属性
描述
src_field
源字段的 OXM/NXM 头部
dst_field
目标字段的 OXM/NXM 标头
n_bits
位数
src_ofs
源中的起始位偏移量
dst_ofs
目标中的起始位偏移量
警告
- src_start 和 src_end 的差值以及 dst_start
和 dst_end 的差值必须相同。
示例
actions += [parser.NXActionRegMove(src_field="reg0", dst_field="reg1", n_bits=5, src_ofs=0 dst_ofs=10)]
- class os_ken.ofproto.ofproto_v1_3_parser.NXActionResubmit(in_port=65528, type_=None, len_=None, experimenter=None, subtype=None)¶
重新提交动作
此动作搜索交换机的某个流表。
与 ovs-ofctl 命令的以下操作等效。
resubmit:port
属性
描述
in_port
用于检查流表的新的 in_port
示例
actions += [parser.NXActionResubmit(in_port=8080)]
- class os_ken.ofproto.ofproto_v1_3_parser.NXActionResubmitTable(in_port=65528, table_id=255, type_=None, len_=None, experimenter=None, subtype=None)¶
重新提交动作
此动作搜索交换机的某个流表。
与 ovs-ofctl 命令的以下操作等效。
resubmit([port],[table])
属性
描述
in_port
用于检查流表的新的 in_port
table_id
检查流表
示例
actions += [parser.NXActionResubmitTable(in_port=8080, table_id=10)]
- class os_ken.ofproto.ofproto_v1_3_parser.NXActionOutputReg(ofs_nbits, src, max_len, type_=None, len_=None, experimenter=None, subtype=None)¶
添加输出动作
此动作将数据包输出到从 src 读取的 OpenFlow 端口号。
与 ovs-ofctl 命令的以下操作等效。
output:src[start...end]
属性
描述
ofs_nbits
开始和结束用于 OXM/NXM 字段。设置方法请参考
nicira_ext.ofs_nbitssrc
源字段的 OXM/NXM 头部
max_len
发送到控制器的最大长度
示例
actions += [parser.NXActionOutputReg( ofs_nbits=nicira_ext.ofs_nbits(4, 31), src="reg0", max_len=1024)]
- class os_ken.ofproto.ofproto_v1_3_parser.NXActionOutputReg2(ofs_nbits, src, max_len, type_=None, len_=None, experimenter=None, subtype=None)¶
添加输出动作
此动作将数据包输出到从 src 读取的 OpenFlow 端口号。
与 ovs-ofctl 命令的以下操作等效。
output:src[start...end]
注意
类似于
NXActionOutputReg,但组织方式允许为 'src' 预留 64 位实验者 OXM。属性
描述
ofs_nbits
开始和结束用于 OXM/NXM 字段。设置方法请参考
nicira_ext.ofs_nbitssrc
源字段的 OXM/NXM 头部
max_len
发送到控制器的最大长度
示例
actions += [parser.NXActionOutputReg2( ofs_nbits=nicira_ext.ofs_nbits(4, 31), src="reg0", max_len=1024)]
- class os_ken.ofproto.ofproto_v1_3_parser.NXActionLearn(table_id, specs, idle_timeout=0, hard_timeout=0, priority=32768, cookie=0, flags=0, fin_idle_timeout=0, fin_hard_timeout=0, type_=None, len_=None, experimenter=None, subtype=None)¶
添加或修改流动作
此动作在 OpenFlow 表中添加或修改流。
与 ovs-ofctl 命令的以下操作等效。
learn(argument[,argument]...)
属性
描述
table_id
新流应插入的表
specs
添加匹配标准到新流
请使用
NXFlowSpecMatch以设置以下格式field=valuefield[start..end] =src[start..end]field[start..end]请使用
NXFlowSpecLoad以设置以下格式load:value->dst[start..end]load:src[start..end] ->dst[start..end]请使用
NXFlowSpecOutput以设置以下格式output:field[start..end]idle_timeout
空闲时间后丢弃(秒)
hard_timeout
最大时间后丢弃(秒)
priority
流条目的优先级
cookie
新流的 Cookie
flags
send_flow_rem
fin_idle_timeout
FIN 后的空闲超时(秒)
fin_hard_timeout
FIN 后的硬超时(秒)
警告
参数指定流的匹配字段、动作和其他属性,如下所示。通常应指定至少一个匹配标准和一个动作参数。
示例
actions += [ parser.NXActionLearn(able_id=10, specs=[parser.NXFlowSpecMatch(src=0x800, dst=('eth_type_nxm', 0), n_bits=16), parser.NXFlowSpecMatch(src=('reg1', 1), dst=('reg2', 3), n_bits=5), parser.NXFlowSpecMatch(src=('reg3', 1), dst=('reg3', 1), n_bits=5), parser.NXFlowSpecLoad(src=0, dst=('reg4', 3), n_bits=5), parser.NXFlowSpecLoad(src=('reg5', 1), dst=('reg6', 3), n_bits=5), parser.NXFlowSpecOutput(src=('reg7', 1), dst="", n_bits=5)], idle_timeout=180, hard_timeout=300, priority=1, cookie=0x64, flags=ofproto.OFPFF_SEND_FLOW_REM, fin_idle_timeout=180, fin_hard_timeout=300)]
- class os_ken.ofproto.ofproto_v1_3_parser.NXActionExit(type_=None, len_=None, experimenter=None, subtype=None)¶
停止动作
此动作导致 OpenvSwitch 立即停止执行进一步的动作。
与 ovs-ofctl 命令的以下操作等效。
exit
示例
actions += [parser.NXActionExit()]
- class os_ken.ofproto.ofproto_v1_3_parser.NXActionController(max_len, controller_id, reason, type_=None, len_=None, experimenter=None, subtype=None)¶
发送数据包入消息动作
此动作将数据包作为数据包入消息发送到 OpenFlow 控制器。
与 ovs-ofctl 命令的以下操作等效。
controller(key=value...)
属性
描述
max_len
发送到控制器的最大长度
controller_id
发送数据包入的控制器 ID
reason
发送消息的原因
示例
actions += [ parser.NXActionController(max_len=1024, controller_id=1, reason=ofproto.OFPR_INVALID_TTL)]
- class os_ken.ofproto.ofproto_v1_3_parser.NXActionController2(type_=None, len_=None, vendor=None, subtype=None, **kwargs)¶
发送数据包入消息动作
此动作将数据包作为数据包入消息发送到 OpenFlow 控制器。
与 ovs-ofctl 命令的以下操作等效。
controller(key=value...)
属性
描述
max_len
发送到控制器的最大长度
controller_id
发送数据包入的控制器 ID
reason
发送消息的原因
userdata
附加到数据包入消息中的控制器中的额外数据
暂停
暂停管道以稍后恢复的标志
示例
actions += [ parser.NXActionController(max_len=1024, controller_id=1, reason=ofproto.OFPR_INVALID_TTL, userdata=[0xa,0xb,0xc], pause=True)]
- class os_ken.ofproto.ofproto_v1_3_parser.NXActionDecTtlCntIds(cnt_ids, type_=None, len_=None, experimenter=None, subtype=None)¶
减少 TTL 动作
此动作减少 IPv4 数据包的 TTL 或 IPv6 数据包的 hop limits。
与 ovs-ofctl 命令的以下操作等效。
dec_ttl(id1[,id2]...)
属性
描述
cnt_ids
控制器 ID
示例
actions += [parser.NXActionDecTtlCntIds(cnt_ids=[1,2,3])]
注意
如果要设置以下 ovs-ofctl 命令。请使用
OFPActionDecNwTtl。dec_ttl
- class os_ken.ofproto.ofproto_v1_3_parser.NXActionStackPush(field, start, end, type_=None, len_=None, experimenter=None, subtype=None)¶
将字段推入堆栈的操作
此操作将字段推入堆栈顶部。
与 ovs-ofctl 命令的以下操作等效。
pop:dst[start...end]
属性
描述
字段
源字段的 OXM/NXM 头部
start
源字段的起始位
end
源字段的结束位
示例
actions += [parser.NXActionStackPush(field="reg2", start=0, end=5)]
- class os_ken.ofproto.ofproto_v1_3_parser.NXActionStackPop(field, start, end, type_=None, len_=None, experimenter=None, subtype=None)¶
从堆栈中弹出字段的操作
此操作从堆栈顶部弹出字段。
与 ovs-ofctl 命令的以下操作等效。
pop:src[start...end]
属性
描述
字段
目标字段的 OXM/NXM 标头
start
目标字段的起始位
end
目标字段的结束位
示例
actions += [parser.NXActionStackPop(field="reg2", start=0, end=5)]
- class os_ken.ofproto.ofproto_v1_3_parser.NXActionSample(probability, collector_set_id=0, obs_domain_id=0, obs_point_id=0, type_=None, len_=None, experimenter=None, subtype=None)¶
采样数据包的操作
此操作对数据包进行采样,并对每个采样的数据包发送一个样本。
与 ovs-ofctl 命令的以下操作等效。
sample(argument[,argument]...)
属性
描述
概率
采样的数量
collector_set_id
将采样的数据包发送到的样本收集器集合的无符号 32 位整数标识符
obs_domain_id
无符号 32 位整数观察域 ID
obs_point_id
无符号 32 位整数观察点 ID
示例
actions += [parser.NXActionSample(probability=3, collector_set_id=1, obs_domain_id=2, obs_point_id=3,)]
- class os_ken.ofproto.ofproto_v1_3_parser.NXActionSample2(probability, collector_set_id=0, obs_domain_id=0, obs_point_id=0, sampling_port=0, type_=None, len_=None, experimenter=None, subtype=None)¶
采样数据包的操作
此操作对数据包进行采样,并对每个采样的数据包发送一个样本。'sampling_port' 可以等于入端口或一个或多个出端口。
与 ovs-ofctl 命令的以下操作等效。
sample(argument[,argument]...)
属性
描述
概率
采样的数量
collector_set_id
将采样的数据包发送到的样本收集器集合的无符号 32 位整数标识符
obs_domain_id
无符号 32 位整数观察域 ID
obs_point_id
无符号 32 位整数观察点 ID
sampling_port
采样端口号
示例
actions += [parser.NXActionSample2(probability=3, collector_set_id=1, obs_domain_id=2, obs_point_id=3, sampling_port=8080)]
- class os_ken.ofproto.ofproto_v1_3_parser.NXActionFinTimeout(fin_idle_timeout, fin_hard_timeout, type_=None, len_=None, experimenter=None, subtype=None)¶
更改 TCP 超时操作
当规则匹配带有 FIN 或 RST 标志的 TCP 数据包时,此操作会更改此 OpenFlow 规则的空闲超时或硬超时,或两者都更改。
与 ovs-ofctl 命令的以下操作等效。
fin_timeout(argument[,argument]...)
属性
描述
fin_idle_timeout
在不活动argument秒后使流过期
fin_idle_timeout
无论活动状态如何,在argument秒后使流过期
示例
match = parser.OFPMatch(ip_proto=6, eth_type=0x0800) actions += [parser.NXActionFinTimeout(fin_idle_timeout=30, fin_hard_timeout=60)]
- class os_ken.ofproto.ofproto_v1_3_parser.NXActionConjunction(clause, n_clauses, id_, type_=None, len_=None, experimenter=None, subtype=None)¶
连词匹配操作
此操作将单个 OpenFlow 流的组绑定到更高层次的连词流中。有关详细信息,请参阅 ovs-ofctl 命令手册。
与 ovs-ofctl 命令的以下操作等效。
conjunction(id,k/n)
属性
描述
子句
分配给流维度的数字
n_clauses
指定连词流的匹配条件
id_
连词 ID
示例
actions += [parser.NXActionConjunction(clause=1, n_clauses=2, id_=10)]
- class os_ken.ofproto.ofproto_v1_3_parser.NXActionMultipath(fields, basis, algorithm, max_link, arg, ofs_nbits, dst, type_=None, len_=None, experimenter=None, subtype=None)¶
选择多路径链路操作
此操作根据指定的参数选择多路径链路。有关详细信息,请参阅 ovs-ofctl 命令手册。
与 ovs-ofctl 命令的以下操作等效。
multipath(fields, basis, algorithm, n_links, arg, dst[start..end])
属性
描述
fields
NX_HASH_FIELDS_* 中的一个
basis
通用哈希参数
algorithm
NX_MP_ALG_* 中的一个。
max_link
输出链路的数量
arg
特定于算法的参数
ofs_nbits
开始和结束用于 OXM/NXM 字段。设置方法请参考
nicira_ext.ofs_nbitsdst
源字段的 OXM/NXM 头部
示例
actions += [parser.NXActionMultipath( fields=nicira_ext.NX_HASH_FIELDS_SYMMETRIC_L4, basis=1024, algorithm=nicira_ext.NX_MP_ALG_HRW, max_link=5, arg=0, ofs_nbits=nicira_ext.ofs_nbits(4, 31), dst="reg2")]
- class os_ken.ofproto.ofproto_v1_3_parser.NXActionBundle(algorithm, fields, basis, slave_type, n_slaves, ofs_nbits, dst, slaves)¶
选择捆绑链路操作
此操作根据指定的参数选择捆绑链路。有关详细信息,请参阅 ovs-ofctl 命令手册。
与 ovs-ofctl 命令的以下操作等效。
bundle(fields, basis, algorithm, slave_type, slaves:[ s1, s2,...])
属性
描述
algorithm
NX_MP_ALG_* 中的一个。
fields
NX_HASH_FIELDS_* 中的一个
basis
通用哈希参数
slave_type
从属类型(必须是 NXM_OF_IN_PORT)
n_slaves
从属的数量
ofs_nbits
OXM/NXM 字段的起始和结束位置。(必须为零)
dst
源字段的 OXM/NXM 标头(必须为零)
slaves
从属列表
示例
actions += [parser.NXActionBundle( algorithm=nicira_ext.NX_MP_ALG_HRW, fields=nicira_ext.NX_HASH_FIELDS_ETH_SRC, basis=0, slave_type=nicira_ext.NXM_OF_IN_PORT, n_slaves=2, ofs_nbits=0, dst=0, slaves=[2, 3])]
- class os_ken.ofproto.ofproto_v1_3_parser.NXActionBundleLoad(algorithm, fields, basis, slave_type, n_slaves, ofs_nbits, dst, slaves)¶
选择捆绑链路操作
此操作的行为与捆绑操作相同,只有一个例外。有关详细信息,请参阅 ovs-ofctl 命令手册。
与 ovs-ofctl 命令的以下操作等效。
bundle_load(fields, basis, algorithm, slave_type, dst[start... *emd*], slaves:[ s1, s2,...]) |
属性
描述
algorithm
NX_MP_ALG_* 中的一个。
fields
NX_HASH_FIELDS_* 中的一个
basis
通用哈希参数
slave_type
从属类型(必须是 NXM_OF_IN_PORT)
n_slaves
从属的数量
ofs_nbits
开始和结束用于 OXM/NXM 字段。设置方法请参考
nicira_ext.ofs_nbitsdst
源字段的 OXM/NXM 头部
slaves
从属列表
示例
actions += [parser.NXActionBundleLoad( algorithm=nicira_ext.NX_MP_ALG_HRW, fields=nicira_ext.NX_HASH_FIELDS_ETH_SRC, basis=0, slave_type=nicira_ext.NXM_OF_IN_PORT, n_slaves=2, ofs_nbits=nicira_ext.ofs_nbits(4, 31), dst="reg0", slaves=[2, 3])]
- class os_ken.ofproto.ofproto_v1_3_parser.NXActionCT(flags, zone_src, zone_ofs_nbits, recirc_table, alg, actions, type_=None, len_=None, experimenter=None, subtype=None)¶
将流量传递到连接跟踪器操作
此操作通过连接跟踪器发送数据包。
与 ovs-ofctl 命令的以下操作等效。
ct(argument[,argument]...)
属性
描述
flags
零个或多个(未指定的标志位必须为零。)
zone_src
源字段的 OXM/NXM 头部
zone_ofs_nbits
OXM/NXM 字段的起始和结束位置。设置方法参考
nicira_ext.ofs_nbits。如果您需要为区域设置 Immediate 值,则 zone_src 必须设置为 None 或空字符串。recirc_table
循环到特定表
alg
协议的知名端口号
动作
零个或多个操作可以紧随此操作之后
注意
如果您将数字设置为 zone_src,则在运行 to_jsondict 时会发生 Traceback。
示例
match = parser.OFPMatch(eth_type=0x0800, ct_state=(0,32)) actions += [parser.NXActionCT( flags = 1, zone_src = "reg0", zone_ofs_nbits = nicira_ext.ofs_nbits(4, 31), recirc_table = 4, alg = 0, actions = [])]
- class os_ken.ofproto.ofproto_v1_3_parser.NXActionNAT(flags, range_ipv4_min='', range_ipv4_max='', range_ipv6_min='', range_ipv6_max='', range_proto_min=None, range_proto_max=None, type_=None, len_=None, experimenter=None, subtype=None)¶
网络地址转换操作
此操作通过连接跟踪器发送数据包。
与 ovs-ofctl 命令的以下操作等效。
注意
以下命令图像在 ovs-ofctl 命令手册中不存在,并且已从命令响应中创建。
nat(src=ip_min-ip_max : proto_min-proto_max)
属性
描述
flags
零个或多个(未指定的标志位必须为零。)
range_ipv4_min
IPv4地址范围最小值
range_ipv4_max
IPv4地址范围最大值
range_ipv6_min
IPv6地址范围最小值
range_ipv6_max
IPv6地址范围最大值
range_proto_min
协议范围最小值
range_proto_max
协议范围最大值
警告
NXActionNAT必须在NXActionCT的 actions 中定义。示例
match = parser.OFPMatch(eth_type=0x0800) actions += [ parser.NXActionCT( flags = 1, zone_src = "reg0", zone_ofs_nbits = nicira_ext.ofs_nbits(4, 31), recirc_table = 255, alg = 0, actions = [ parser.NXActionNAT( flags = 1, range_ipv4_min = "10.1.12.0", range_ipv4_max = "10.1.13.255", range_ipv6_min = "", range_ipv6_max = "", range_proto_min = 1, range_proto_max = 1023 ) ] ) ]
- class os_ken.ofproto.ofproto_v1_3_parser.NXActionOutputTrunc(port, max_len, type_=None, len_=None, experimenter=None, subtype=None)¶
截断输出动作
此动作将数据包截断为指定大小并输出。
与 ovs-ofctl 命令的以下操作等效。
output(port=port,max_len=max_len)
属性
描述
port
输出端口
max_len
最大发送字节数
示例
actions += [parser.NXActionOutputTrunc(port=8080, max_len=1024)]
- class os_ken.ofproto.ofproto_v1_3_parser.NXActionDecNshTtl(type_=None, len_=None, vendor=None, subtype=None)¶
减少 NSH TTL 动作
此动作减少网络服务头 (NSH) 中的 TTL。
此动作是在 OVS v2.9 中添加的。
与 ovs-ofctl 命令的以下操作等效。
dec_nsh_ttl示例
actions += [parser.NXActionDecNshTtl()]
- class os_ken.ofproto.ofproto_v1_3_parser.NXFlowSpecMatch(src, dst, n_bits)¶
添加匹配标准的规范
此类由
NXActionLearn使用。有关此类的用法,请参阅
NXActionLearn。属性
描述
src
OXM/NXM 头部和源字段的起始位
dst
OXM/NXM 头部和目标字段的起始位
n_bits
从起始位开始的位数
- class os_ken.ofproto.ofproto_v1_3_parser.NXFlowSpecLoad(src, dst, n_bits)¶
添加 NXAST_REG_LOAD 动作
此类由
NXActionLearn使用。有关此类的用法,请参阅
NXActionLearn。属性
描述
src
OXM/NXM 头部和源字段的起始位
dst
OXM/NXM 头部和目标字段的起始位
n_bits
从起始位开始的位数
- class os_ken.ofproto.ofproto_v1_3_parser.NXFlowSpecOutput(src, n_bits, dst='')¶
添加 OFPAT_OUTPUT 动作
此类由
NXActionLearn使用。有关此类的用法,请参阅
NXActionLearn。属性
描述
src
OXM/NXM 头部和源字段的起始位
dst
必须为空
n_bits
从起始位开始的位数
- os_ken.ofproto.nicira_ext.ofs_nbits(start, end)¶
ofs_nbits 的实用方法
此方法在类中用于设置 ofs_nbits。
此方法将 start/end 位转换为指定 OXM/NXM 字段的位范围所需的 ofs_nbits。
ofs_nbits 可以按以下方式计算
ofs_nbits = (start << 6) + (end - start)
参数 start/end 指的是 ovs-ofctl 命令的 OXM/NXM 字段。
field[start..end]
属性
描述
start
OXM/NXM 字段的起始位
end
OXM/NXM 字段的结束位
Nicira 扩展匹配结构¶
此类的 API 与 OFPMatch 相同。
您可以通过关键字参数定义流匹配。以下参数可用:
参数 |
值 |
描述 |
|---|---|---|
in_port_nxm |
整数 16 位 |
OpenFlow 端口号。 |
eth_dst_nxm |
MAC 地址 |
以太网目标地址。 |
eth_src_nxm |
MAC 地址 |
以太网源地址。 |
eth_type_nxm |
整数 16 位 |
以太网类型。需要支持需要设置 eth_type 的 Nicira 扩展 (例如 tcp_flags_nxm)。 |
vlan_tci |
整数 16 位 |
VLAN TCI。基本上与 vlan_vid 加上 vlan_pcp 相同。 |
nw_tos |
整数 8 位 |
IP ToS 或 IPv6 流量类别字段 dscp。需要设置字段:eth_type_nxm = [0x0800 (IPv4)|0x86dd (IPv6)] |
ip_proto_nxm |
整数 8 位 |
IP 协议。需要支持需要设置 ip_proto 的 Nicira 扩展 (例如 tcp_flags_nxm)。需要设置字段:eth_type_nxm = [0x0800 (IPv4)|0x86dd (IPv6)] |
ipv4_src_nxm |
IPv4 地址 |
IPv4 源地址。需要设置字段:eth_type_nxm = 0x0800 (IPv4) |
ipv4_dst_nxm |
IPv4 地址 |
IPv4 目标地址。需要设置字段:eth_type_nxm = 0x0800 (IPv4) |
tcp_src_nxm |
整数 16 位 |
TCP 源端口。需要设置字段:eth_type_nxm = [0x0800 (IPv4)|0x86dd (IPv6)] 和 ip_proto_nxm = 6 (TCP) |
tcp_dst_nxm |
整数 16 位 |
TCP 目标端口。需要设置字段:eth_type_nxm = [0x0800 (IPv4)|0x86dd (IPv6)] 和 ip_proto_nxm = 6 (TCP) |
udp_src_nxm |
整数 16 位 |
UDP 源端口。需要设置字段:eth_type_nxm = [0x0800 (IPv4)|0x86dd (IPv6)] 和 ip_proto_nxm = 17 (UDP) |
udp_dst_nxm |
整数 16 位 |
UDP 目标端口。eth_type_nxm = [0x0800 (IPv4)|0x86dd (IPv6)] 和 ip_proto_nxm = 17 (UDP) |
icmpv4_type_nxm |
整数 8 位 |
类型匹配 ICMP 类型,代码匹配 ICMP 代码。需要设置字段:eth_type_nxm = 0x0800 (IPv4) 和 ip_proto_nxm = 1 (ICMP) |
icmpv4_code_nxm |
整数 8 位 |
类型匹配 ICMP 类型,代码匹配 ICMP 代码。需要设置字段:eth_type_nxm = 0x0800 (IPv4) 和 ip_proto_nxm = 1 (ICMP) |
arp_op_nxm |
整数 16 位 |
仅应指定 1 到 255 之间的 ARP 操作码进行匹配。需要设置字段:eth_type_nxm = 0x0806 (ARP) |
arp_spa_nxm |
IPv4 地址 |
地址可以指定为 IP 地址或主机名。需要设置字段:eth_type_nxm = 0x0806 (ARP) |
arp_tpa_nxm |
IPv4 地址 |
地址可以指定为 IP 地址或主机名。需要设置字段:eth_type_nxm = 0x0806 (ARP) |
tunnel_id_nxm |
整数 64 位 |
隧道标识符。 |
arp_sha_nxm |
MAC 地址 |
地址指定为以冒号分隔的 6 对十六进制数字。需要设置字段:eth_type_nxm = 0x0806 (ARP) |
arp_tha_nxm |
MAC 地址 |
地址指定为以冒号分隔的 6 对十六进制数字。需要设置字段:eth_type_nxm = 0x0806 (ARP) |
ipv6_src_nxm |
IPv6 地址 |
IPv6 源地址。需要设置字段:eth_type_nxm = 0x86dd (IPv6) |
ipv6_dst_nxm |
IPv6 地址 |
IPv6 目标地址。需要设置字段:eth_type_nxm = 0x86dd (IPv6) |
icmpv6_type_nxm |
整数 8 位 |
类型匹配 ICMP 类型,代码匹配 ICMP 代码。需要设置字段:eth_type_nxm = 0x86dd (IPv6) 和 ip_proto_nxm = 58 (IPv6 的 ICMP) |
icmpv6_code_nxm |
整数 8 位 |
类型匹配 ICMP 类型,代码匹配 ICMP 代码。需要设置字段:eth_type_nxm = 0x86dd (IPv6) 和 ip_proto_nxm = 58 (IPv6 的 ICMP) |
nd_target |
IPv6 地址 |
目标地址 ipv6。需要设置字段:eth_type_nxm = 0x86dd (IPv6) 和 ip_proto_nxm = 58 (IPv6 的 ICMP) |
nd_sll |
MAC 地址 |
源链路层地址选项。需要设置字段:eth_type_nxm = 0x86dd (IPv6) 和 ip_proto_nxm = 58 (IPv6 的 ICMP) 和 icmpv6_type_nxm = 135 (邻居请求) |
nd_tll |
MAC 地址 |
目标链路层地址选项。需要设置字段:eth_type_nxm = 0x86dd (IPv6) 和 ip_proto_nxm = 58 (IPv6 的 ICMP) 和 icmpv6_type_nxm = 136 (邻居通告) |
ip_frag |
整数 8 位 |
frag_type 指定要匹配的 IP 片段或非片段的类型。需要设置字段:eth_type_nxm = [0x0800 (IPv4)|0x86dd (IPv6)] |
ipv6_label |
整数 32 位 |
匹配 IPv6 流标签。需要设置字段:eth_type_nxm = 0x86dd (IPv6) |
ip_ecn_nxm |
整数 8 位 |
匹配 IP ToS 或 IPv6 流量类别字段中的 ecn 位。需要设置字段:eth_type_nxm = [0x0800 (IPv4)|0x86dd (IPv6)] |
nw_ttl |
整数 8 位 |
IP TTL 或 IPv6 跃点限制值 ttl。需要设置字段:eth_type_nxm = [0x0800 (IPv4)|0x86dd (IPv6)] |
mpls_ttl |
整数 8 位 |
数据包外 MPLS 标签堆栈条目的 TTL。需要设置字段:eth_type_nxm = 0x8847 (MPLS 单播) |
tun_ipv4_src |
IPv4 地址 |
隧道 IPv4 源地址。需要设置字段:eth_type_nxm = 0x0800 (IPv4) |
tun_ipv4_dst |
IPv4 地址 |
隧道 IPv4 目标地址。需要设置字段:eth_type_nxm = 0x0800 (IPv4) |
pkt_mark |
整数 32 位 |
数据包元数据标记。 |
tcp_flags_nxm |
整数 16 位 |
TCP 标志。需要设置字段:eth_type_nxm = [0x0800 (IP)|0x86dd (IPv6)] 和 ip_proto_nxm = 6 (TCP) |
conj_id |
整数 32 位 |
仅与组合动作一起使用的组合 ID |
tun_gbp_id |
整数 16 位 |
VXLAN 标头中的组策略标识符。 |
tun_gbp_flags |
整数 8 位 |
VXLAN 标头中的组策略标志。 |
tun_flags |
整数 16 位 |
指示隧道封装各个方面的标志。 |
ct_state |
整数 32 位 |
Conntrack 状态。 |
ct_zone |
整数 16 位 |
Conntrack 区域。 |
ct_mark |
整数 32 位 |
Conntrack 标记。 |
ct_label |
整数 128 位 |
Conntrack 标签。 |
tun_ipv6_src |
IPv6 地址 |
隧道 IPv6 源地址。需要设置字段:eth_type_nxm = 0x86dd (IPv6) |
tun_ipv6_dst |
IPv6 地址 |
隧道 IPv6 目标地址。需要设置字段:eth_type_nxm = 0x86dd (IPv6) |
_recirc_id |
整数 32 位 |
用于循环的 ID。 |
_dp_hash |
整数 32 位 |
数据平面中计算的流哈希。 |
nsh_flags |
整数 8 位 |
NSH 基本标头中的标志字段。需要 eth_type_nxm = 0x894f (NSH)。从 OpenFlow 1.3 和 OVS v2.8 开始。 |
nsh_mdtype |
整数 8 位 |
NSH 基本标头中的元数据类型。需要 eth_type_nxm = 0x894f (NSH)。从 OpenFlow 1.3 和 OVS v2.8 开始。 |
nsh_np |
整数 8 位 |
NSH 基本标头中的下一协议类型。需要 eth_type_nxm = 0x894f (NSH)。从 OpenFlow 1.3 和 OVS v2.8 开始。 |
nsh_spi |
整数 32 位 |
NSH 服务路径标头中的服务路径标识符。需要 eth_type_nxm = 0x894f (NSH)。从 OpenFlow 1.3 和 OVS v2.8 开始。 |
nsh_si |
整数 8 位 |
NSH 服务路径标头中的服务索引。需要 eth_type_nxm = 0x894f (NSH)。从 OpenFlow 1.3 和 OVS v2.8 开始。 |
nsh_c<N> |
整数 32 位 |
NSH 上下文标头中的上下文字段。<N> 是 1-4 的数字。需要 eth_type_nxm = 0x894f (NSH)。从 OpenFlow 1.3 和 OVS v2.8 开始。 |
nsh_ttl |
整数 8 位 |
NSH 基本标头中的 TTL 字段。需要 eth_type_nxm = 0x894f (NSH)。从 OpenFlow 1.3 和 OVS v2.9 开始。 |
reg<idx> |
整数 32 位 |
数据包寄存器。<idx> 是寄存器号 0-15。 |
xxreg<idx> |
整数 128 位 |
数据包扩展寄存器。<idx> 是寄存器号 0-3。 |
注意
通过 nicira 扩展设置 TCP 标志。当使用低于 2.4 版本的 OVS 时需要这样做。当使用 nxm 字段时,您需要同时使用任何 nxm 先决条件字段,否则将收到 OFPBMC_BAD_PREREQ 错误
示例
# WILL NOT work
flag = tcp.TCP_ACK
match = parser.OFPMatch(
tcp_flags_nxm=(flag, flag),
ip_proto=inet.IPPROTO_TCP,
eth_type=eth_type)
# Works
flag = tcp.TCP_ACK
match = parser.OFPMatch(
tcp_flags_nxm=(flag, flag),
ip_proto_nxm=inet.IPPROTO_TCP,
eth_type_nxm=eth_type)