diff options
| author | Ben Pfaff <blp@nicira.com> | 2011-05-18 14:01:13 -0700 |
|---|---|---|
| committer | Ben Pfaff <blp@nicira.com> | 2011-05-18 14:01:13 -0700 |
| commit | b2fda3effc787f265b5ad5dfa967ac00627bd075 (patch) | |
| tree | 5c0017aedd36c0d9088dcd67a79beb8ff69bd4f9 /include | |
| parent | 827ab71c97f25b77c94a1158834cdad35df6806f (diff) | |
| parent | 2e281761473ed67ecae00205f62180e9a21c9ade (diff) | |
| download | openvswitch-b2fda3effc787f265b5ad5dfa967ac00627bd075.tar.gz | |
Merge 'next' into 'master'.
I know already that this breaks the statsfixes that were implemented by the
following commits:
827ab71c97f "ofproto: Datapath statistics accounted twice."
6f1435fc8f7 "ofproto: Resubmit statistics improperly account during..."
These were already broken in a previous merge. I will work on a fix.
Diffstat (limited to 'include')
| -rw-r--r-- | include/openflow/nicira-ext.h | 62 |
1 files changed, 58 insertions, 4 deletions
diff --git a/include/openflow/nicira-ext.h b/include/openflow/nicira-ext.h index 241cfe99f..738fd90d8 100644 --- a/include/openflow/nicira-ext.h +++ b/include/openflow/nicira-ext.h @@ -108,9 +108,7 @@ enum nx_flow_mod_failed_code { NXFMFC_HARDWARE = 0x100, /* A nonexistent table ID was specified in the "command" field of struct - * ofp_flow_mod, when the nxt_flow_mod_table_id extension is enabled. - * (This extension is not yet implemented on this branch of Open - * vSwitch.) */ + * ofp_flow_mod, when the nxt_flow_mod_table_id extension is enabled. */ NXFMFC_BAD_TABLE_ID = 0x101 }; @@ -143,8 +141,17 @@ enum nicira_type { NXT_ROLE_REQUEST, NXT_ROLE_REPLY, + /* Use the upper 8 bits of the 'command' member in struct ofp_flow_mod to + * designate the table to which a flow is to be added? See the big comment + * on struct nxt_flow_mod_table_id for more information. + * + * A screwup caused this extension to be assigned the same value as + * NXT_SET_FLOW_FORMAT (see below). The two extensions do have different + * lengths, so they can still be distinguished. */ + NXT_FLOW_MOD_TABLE_ID, + /* Flexible flow specification (aka NXM = Nicira Extended Match). */ - NXT_SET_FLOW_FORMAT, /* Set flow format. */ + NXT_SET_FLOW_FORMAT = NXT_FLOW_MOD_TABLE_ID, /* Set flow format. */ NXT_FLOW_MOD, /* Analogous to OFPT_FLOW_MOD. */ NXT_FLOW_REMOVED /* Analogous to OFPT_FLOW_REMOVED. */ }; @@ -167,6 +174,53 @@ enum nicira_stats_type { NXST_AGGREGATE /* Analogous to OFPST_AGGREGATE. */ }; +/* This command enables or disables an Open vSwitch extension that allows a + * controller to specify the OpenFlow table to which a flow should be added, + * instead of having the switch decide which table is most appropriate as + * required by OpenFlow 1.0. By default, the extension is disabled. + * + * When this feature is enabled, Open vSwitch treats struct ofp_flow_mod's + * 16-bit 'command' member as two separate fields. The upper 8 bits are used + * as the table ID, the lower 8 bits specify the command as usual. A table ID + * of 0xff is treated like a wildcarded table ID. + * + * The specific treatment of the table ID depends on the type of flow mod: + * + * - OFPFC_ADD: Given a specific table ID, the flow is always placed in that + * table. If an identical flow already exists in that table only, then it + * is replaced. If the flow cannot be placed in the specified table, + * either because the table is full or because the table cannot support + * flows of the given type, the switch replies with an + * OFPFMFC_ALL_TABLES_FULL error. (A controller can distinguish these + * cases by comparing the current and maximum number of entries reported + * in ofp_table_stats.) + * + * If the table ID is wildcarded, the switch picks an appropriate table + * itself. If an identical flow already exist in the selected flow table, + * then it is replaced. The choice of table might depend on the flows + * that are already in the switch; for example, if one table fills up then + * the switch might fall back to another one. + * + * - OFPFC_MODIFY, OFPFC_DELETE: Given a specific table ID, only flows + * within that table are matched and modified or deleted. If the table ID + * is wildcarded, flows within any table may be matched and modified or + * deleted. + * + * - OFPFC_MODIFY_STRICT, OFPFC_DELETE_STRICT: Given a specific table ID, + * only a flow within that table may be matched and modified or deleted. + * If the table ID is wildcarded and exactly one flow within any table + * matches, then it is modified or deleted; if flows in more than one + * table match, then none is modified or deleted. + */ +struct nxt_flow_mod_table_id { + struct ofp_header header; + uint32_t vendor; /* NX_VENDOR_ID. */ + uint32_t subtype; /* NXT_FLOW_MOD_TABLE_ID. */ + uint8_t set; /* Nonzero to enable, zero to disable. */ + uint8_t pad[7]; +}; +OFP_ASSERT(sizeof(struct nxt_flow_mod_table_id) == 24); + /* Configures the "role" of the sending controller. The default role is: * * - Other (NX_ROLE_OTHER), which allows the controller access to all |
