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_nbits

dst

目标字段的 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_startsrc_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_nbits

src

源字段的 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_nbits

src

源字段的 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=value
field[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_nbits

dst

源字段的 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_nbits

dst

源字段的 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)