+ /* Recursion and resubmission levels carried over from a pre-existing
+ * translation of a related flow. An example of when this can occur is
+ * the translation of an ARP packet that was generated as the result of
+ * outputting to a tunnel port. In this case, the original flow going to
+ * the tunnel is the related flow. Since the two flows are different, they
+ * should not use the same xlate_ctx structure. However, we still need
+ * limit the maximum recursion across the entire translation.
+ *
+ * These fields are normally set to zero, so the client has to set them
+ * manually after calling xlate_in_init(). In that case, they should be
+ * copied from the same-named fields in the related flow's xlate_ctx. */
+ int recurse;
+ int resubmits;
+
+ /* If nonnull, flow translation populates this cache with references to all
+ * modules that are affected by translation. This 'xlate_cache' may be
+ * passed to xlate_push_stats() to perform the same function as
+ * xlate_actions() without the full cost of translation.
+ *
+ * This is normally null so the client has to set it manually after
+ * calling xlate_in_init(). */
+ struct xlate_cache *xcache;
+
+ /* If nonnull, flow translation puts the resulting datapath actions in this
+ * buffer. If null, flow translation will not produce datapath actions. */
+ struct ofpbuf *odp_actions;
+
+ /* If nonnull, flow translation populates this with wildcards relevant in
+ * translation. Any fields that were used to calculate the action are set,
+ * to allow caching and kernel wildcarding to work. For example, if the
+ * flow lookup involved performing the "normal" action on IPv4 and ARP
+ * packets, 'wc' would have the 'in_port' (always set), 'dl_type' (flow
+ * match), 'vlan_tci' (normal action), and 'dl_dst' (normal action) fields
+ * set. */
+ struct flow_wildcards *wc;