aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorBen Pfaff <blp@nicira.com>2010-04-13 10:12:25 -0700
committerBen Pfaff <blp@nicira.com>2010-04-13 10:12:25 -0700
commit999f0d4588503af5a7645ed2f64764bd48c29b9b (patch)
tree6cb733a7ebee642cb18f5e1068033bcdc33a91e2 /include
parente18fe8a220f268624e5b670d6adcf2d4080866aa (diff)
ofproto: Make NXAST_RESUBMIT take header modifications into account.
Until now, the NXAST_RESUBMIT action has always looked up the original flow except for the updated in_port. This commit changes the semantics to instead look up the flow as modified by any preceding actions that affect it, e.g. if OFPAT_SET_VLAN_VID precedes NXAST_RESUBMIT, then NXAST_RESUBMIT now looks up the flow with the modified VLAN, not the original (as well as the modified in_port). Also, document how NXAST_RESUBMIT is supposed to work. Suggested-by: Paul Ingram <paul@nicira.com>
Diffstat (limited to 'include')
-rw-r--r--include/openflow/nicira-ext.h23
1 files changed, 22 insertions, 1 deletions
diff --git a/include/openflow/nicira-ext.h b/include/openflow/nicira-ext.h
index 7232d570..535cfc3a 100644
--- a/include/openflow/nicira-ext.h
+++ b/include/openflow/nicira-ext.h
@@ -57,7 +57,28 @@ OFP_ASSERT(sizeof(struct nicira_header) == 16);
enum nx_action_subtype {
NXAST_SNAT__OBSOLETE, /* No longer used. */
- NXAST_RESUBMIT /* Throw against flow table again. */
+
+ /* Searches the flow table again, using a flow that is slightly modified
+ * from the original lookup:
+ *
+ * - The flow's in_port is changed to that specified in the 'in_port'
+ * member of struct nx_action_resubmit.
+ *
+ * - If NXAST_RESUBMIT is preceded by actions that affect the flow
+ * (e.g. OFPAT_SET_VLAN_VID), then the flow is updated with the new
+ * values.
+ *
+ * If the modified flow matches in the flow table, then the corresponding
+ * actions are executed, except that NXAST_RESUBMIT actions found in the
+ * secondary set of actions are ignored. Afterward, actions following
+ * NXAST_RESUBMIT in the original set of actions, if any, are executed; any
+ * changes made to the packet (e.g. changes to VLAN) by secondary actions
+ * persist when those actions are executed, although the original in_port
+ * is restored.
+ *
+ * NXAST_RESUBMIT may be used any number of times within a set of actions.
+ */
+ NXAST_RESUBMIT
};
/* Action structure for NXAST_RESUBMIT. */