struct dpif_sflow;
struct mac_learning;
+struct xlate_recirc {
+ uint32_t recirc_id; /* !0 Use recirculation instead of output. */
+ uint8_t hash_alg; /* !0 Compute hash for recirc before. */
+ uint32_t hash_bias; /* Compute hash for recirc before. */
+};
+
struct xlate_out {
/* Wildcards relevant in translation. Any fields that were used to
* calculate the action must be set for caching and kernel
ofp_port_t nf_output_iface; /* Output interface index for NetFlow. */
mirror_mask_t mirrors; /* Bitmap of associated mirrors. */
+ bool use_recirc; /* Should generate recirc? */
+ struct xlate_recirc recirc; /* Information used for generating
+ * recirculation actions */
uint64_t odp_actions_stub[256 / 8];
struct ofpbuf odp_actions;
};
* not if we are just revalidating. */
bool may_learn;
+ /* If the caller of xlate_actions() doesn't need the flow_wildcards
+ * contained in struct xlate_out. 'skip_wildcards' can be set to true
+ * disabling the expensive wildcard computation. When true, 'wc' in struct
+ * xlate_out is undefined and should not be read. */
+ bool skip_wildcards;
+
/* The rule initiating translation or NULL. If both 'rule' and 'ofpacts'
* are NULL, xlate_actions() will do the initial rule lookup itself. */
struct rule_dpif *rule;
const struct mbridge *, const struct dpif_sflow *,
const struct dpif_ipfix *, const struct netflow *,
enum ofp_config_flags, bool forward_bpdu,
- bool has_in_band)
+ bool has_in_band, bool enable_recirc,
+ bool variable_length_userdata,
+ size_t mpls_label_stack_length)
OVS_REQ_WRLOCK(xlate_rwlock);
void xlate_remove_ofproto(struct ofproto_dpif *) OVS_REQ_WRLOCK(xlate_rwlock);
int xlate_receive(const struct dpif_backer *, struct ofpbuf *packet,
const struct nlattr *key, size_t key_len,
- struct flow *, enum odp_key_fitness *,
- struct ofproto_dpif **, struct dpif_ipfix **,
+ struct flow *, struct ofproto_dpif **, struct dpif_ipfix **,
struct dpif_sflow **, struct netflow **,
odp_port_t *odp_in_port)
OVS_EXCLUDED(xlate_rwlock);