On Fri, Mar 13, 2015 at 04:52:00PM -0700, Jarno Rajahalme wrote: > xlate_actions() now considers an optional recirculation context (via > 'xin') and restores OpenFlow pipeline metadata (registers, 'metadata', > etc.) based on it. The recirculation context may contain an action > set and stack to be restored and further actions to be executed upon > recirculation. It also contains a table_id number to be used for rule > lookup in cases where no post-recirculation actions are used. > > The translation context internal metadata is restored using a new > internal action: UNROLL_XLATE action stores the translation context > data visible to OpenFlow controllers via PACKET_IN messages. This > includes the current table number and the current rule cookie. > UNROLL_XLATE actions are inserted only when the remaining actions may > generate PACKET_IN messages. > > These changes allow the post-MPLS recirculation to properly continue > with the pipeline metadata that existed at the time of recirculation. > > The internal table is still consulted for bonds. > > Signed-off-by: Jarno Rajahalme <jrajaha...@nicira.com>
I'm a little concerned about ukey_create_from_dpif_flow(), which seems to get called whenever the datapath does not support ufids. It seems to reject recirculation actions in that case. Does that mean that userspace becomes incompatible (if any recirculation is attempted) with older datapaths? I think that is what happens, but I don't think that is the intent. Here in upcall_cb(), I think I understand the idea--that when we can't look up the recirculation ID, it's a problematic situation, so we shouldn't install its flow--but I'm not sure how that helps with anything. Doesn't that just mean that the problematic situation recurs slowly in userspace (sending lots of upcalls) instead of quickly in the datapath? + /* Prevent miss flow installation if the key has recirculation ID but we + * were not able to get a reference on it. */ + if (type == DPIF_UC_MISS && upcall.recirc && !upcall.have_recirc_ref) { error = ENOSPC; + goto out; } In recirc_free_id, s/non-exiting/nonexistent/ in the log message. _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev