diff options
author | Simon Horman <horms@verge.net.au> | 2013-09-27 06:55:19 +0900 |
---|---|---|
committer | Ben Pfaff <blp@nicira.com> | 2013-09-27 09:18:06 -0700 |
commit | b0a17866c3145fd35e844e1b66c499c55ecf6f1d (patch) | |
tree | 3446a17bda4a9a0194f9d1ead184d3b4e297d9f2 /lib/flow.h | |
parent | e15653c927a9aed6bf0e88b0ea49a665c7131e5d (diff) | |
download | openvswitch-b0a17866c3145fd35e844e1b66c499c55ecf6f1d.tar.gz |
Remove mpls_depth field from flow
Rather than tracking the MPLS depth as a field in the
flow, which is an entirely poor place for it, just track
the delta to the MPLS depth during translation.
This logic was developed while implementing recirculation
and intended to be used to detect when recirculation should
occur. This variant of the patch uses the logic to determine
if processing of actions should stop due to an MPLS
action which cannot be translated (without recirculation).
A side-effect of this patch is that it resolves a bug
whereby ovs-vswitchd will abort due to to an assertion
on eth_type_mpls(ctx->xin->flow.dl_type) in compose_mpls_pop_action(()
if the actions of a flow include pop_mpls twice without
a push_mpls in between.
Signed-off-by: Simon Horman <horms@verge.net.au>
Signed-off-by: Ben Pfaff <blp@nicira.com>
Diffstat (limited to 'lib/flow.h')
-rw-r--r-- | lib/flow.h | 8 |
1 files changed, 3 insertions, 5 deletions
diff --git a/lib/flow.h b/lib/flow.h index d05066344..4bd1504ee 100644 --- a/lib/flow.h +++ b/lib/flow.h @@ -37,7 +37,7 @@ struct ofpbuf; /* This sequence number should be incremented whenever anything involving flows * or the wildcarding of flows changes. This will cause build assertion * failures in places which likely need to be updated. */ -#define FLOW_WC_SEQ 20 +#define FLOW_WC_SEQ 21 #define FLOW_N_REGS 8 BUILD_ASSERT_DECL(FLOW_N_REGS <= NXM_NX_MAX_REGS); @@ -99,7 +99,6 @@ struct flow { union flow_in_port in_port; /* Input port.*/ uint32_t pkt_mark; /* Packet mark. */ ovs_be32 mpls_lse; /* MPLS label stack entry. */ - uint16_t mpls_depth; /* Depth of MPLS stack. */ ovs_be16 vlan_tci; /* If 802.1Q, TCI | VLAN_CFI; otherwise 0. */ ovs_be16 dl_type; /* Ethernet frame type. */ ovs_be16 tp_src; /* TCP/UDP/SCTP source port. */ @@ -112,15 +111,14 @@ struct flow { uint8_t arp_tha[6]; /* ARP/ND target hardware address. */ uint8_t nw_ttl; /* IP TTL/Hop Limit. */ uint8_t nw_frag; /* FLOW_FRAG_* flags. */ - uint8_t zeros[6]; }; BUILD_ASSERT_DECL(sizeof(struct flow) % 4 == 0); #define FLOW_U32S (sizeof(struct flow) / 4) /* Remember to update FLOW_WC_SEQ when changing 'struct flow'. */ -BUILD_ASSERT_DECL(sizeof(struct flow) == sizeof(struct flow_tnl) + 160 && - FLOW_WC_SEQ == 20); +BUILD_ASSERT_DECL(sizeof(struct flow) == sizeof(struct flow_tnl) + 152 && + FLOW_WC_SEQ == 21); /* Represents the metadata fields of struct flow. */ struct flow_metadata { |