flow: Exclude mpls_depth and encap_dl_type from flow match

mpls_depth is not required as part of the match and in some cases can lead
to a false negative.

For example, a packet with two MPLS label stack entries will be have a flow
with mpls_depth calculated by flow_extract() which uses eth_type_mpls() to
count the number of MPLS LSE present. However a key received from the
datapath for a facet may only have a single MPLS attribute present and
odp_flow_key_to_flow() will create a flow with an mpls_depth of only 1.

It would probably be nicer to move mpls_depth out of struct flow, however
this appears to require a rather invasive refactoring in order to provide
an alternate place to store mpls_depth and encap_dl_type. So instead struct
flow has been partitioned into portions to match followed by portions not
to match.

Signed-off-by: Simon Horman <horms@verge.net.au>
Revert "flow: Exclude mpls_depth and encap_dl_type from flow match"

This reverts commit 78feeb01a5012a6100ea9f600019fb49ce2a2f36.
Add netlink attribute for recirculate action

Recirculation is a technique to allow a frame to re-enter
frame processing. This is intended to be used after actions
have been applied to the frame with modify the frame in
some way that makes it possible for richer processing to occur.

An example is and indeed targeted use case is MPLS. If an MPLS frame has an
mpls_pop action applied with the IPv4 ethernet type then it becomes
possible to decode the IPv4 portion of the frame. This may be used to
construct a facet that modifies the IPv4 portion of the frame. This is not
possible prior to the mpls_pop action as the contents of the frame after
the MPLS stack is not known to be IPv4.

Signed-off-by: Simon Horman <horms@verge.net.au>
Recirculation (wip)