diff options
author | Ben Pfaff <blp@nicira.com> | 2010-04-13 10:12:25 -0700 |
---|---|---|
committer | Ben Pfaff <blp@nicira.com> | 2010-04-13 10:12:25 -0700 |
commit | 999f0d4588503af5a7645ed2f64764bd48c29b9b (patch) | |
tree | 6cb733a7ebee642cb18f5e1068033bcdc33a91e2 /include | |
parent | e18fe8a220f268624e5b670d6adcf2d4080866aa (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.h | 23 |
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. */ |