- bool may_enable) OVS_REQ_WRLOCK(xlate_rwlock);
-void xlate_ofport_remove(struct ofport_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 *, struct ofproto_dpif **, struct dpif_ipfix **,
- struct dpif_sflow **, struct netflow **,
- odp_port_t *odp_in_port)
- OVS_EXCLUDED(xlate_rwlock);
-
-void xlate_actions(struct xlate_in *, struct xlate_out *)
- OVS_EXCLUDED(xlate_rwlock);
+ bool may_enable);
+void xlate_ofport_remove(struct ofport_dpif *);
+
+struct ofproto_dpif * xlate_lookup_ofproto(const struct dpif_backer *,
+ const struct flow *,
+ ofp_port_t *ofp_in_port);
+int xlate_lookup(const struct dpif_backer *, const struct flow *,
+ struct ofproto_dpif **, struct dpif_ipfix **,
+ struct dpif_sflow **, struct netflow **,
+ ofp_port_t *ofp_in_port);
+
+enum xlate_error {
+ XLATE_OK = 0,
+ XLATE_BRIDGE_NOT_FOUND,
+ XLATE_RECURSION_TOO_DEEP,
+ XLATE_TOO_MANY_RESUBMITS,
+ XLATE_STACK_TOO_DEEP,
+ XLATE_NO_RECIRCULATION_CONTEXT,
+ XLATE_RECIRCULATION_CONFLICT,
+ XLATE_TOO_MANY_MPLS_LABELS,
+};
+
+const char *xlate_strerror(enum xlate_error error);
+
+enum xlate_error xlate_actions(struct xlate_in *, struct xlate_out *);
+