X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=lib%2Fflow.h;h=0fdf4ef971c94b55545c55928a83524efe96ba8a;hb=f40869bdf6feca4d3ff7c59a1fb1f7ac101bc967;hp=e6da48050290de790eeda4dd9acab72a7f461590;hpb=b02475c53b3ca857c45eb5e17d12fdf233a9dac8;p=sliver-openvswitch.git diff --git a/lib/flow.h b/lib/flow.h index e6da48050..0fdf4ef97 100644 --- a/lib/flow.h +++ b/lib/flow.h @@ -36,7 +36,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 19 +#define FLOW_WC_SEQ 20 #define FLOW_N_REGS 8 BUILD_ASSERT_DECL(FLOW_N_REGS <= NXM_NX_MAX_REGS); @@ -95,7 +95,6 @@ struct flow { 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 encap_dl_type; /* MPLS encapsulated Ethernet frame type */ ovs_be16 tp_src; /* TCP/UDP source port. */ ovs_be16 tp_dst; /* TCP/UDP destination port. */ uint8_t dl_src[6]; /* Ethernet source address. */ @@ -106,7 +105,7 @@ 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[4]; + uint8_t zeros[6]; }; BUILD_ASSERT_DECL(sizeof(struct flow) % 4 == 0); @@ -114,11 +113,13 @@ BUILD_ASSERT_DECL(sizeof(struct flow) % 4 == 0); /* Remember to update FLOW_WC_SEQ when changing 'struct flow'. */ BUILD_ASSERT_DECL(sizeof(struct flow) == sizeof(struct flow_tnl) + 160 && - FLOW_WC_SEQ == 19); + FLOW_WC_SEQ == 20); /* Represents the metadata fields of struct flow. */ struct flow_metadata { ovs_be64 tun_id; /* Encapsulating tunnel ID. */ + ovs_be32 tun_src; /* Tunnel outer IPv4 src addr */ + ovs_be32 tun_dst; /* Tunnel outer IPv4 dst addr */ ovs_be64 metadata; /* OpenFlow 1.1+ metadata field. */ uint32_t regs[FLOW_N_REGS]; /* Registers. */ uint16_t in_port; /* OpenFlow port or zero. */ @@ -126,19 +127,6 @@ struct flow_metadata { void flow_extract(struct ofpbuf *, uint32_t priority, uint32_t mark, const struct flow_tnl *, uint16_t in_port, struct flow *); -void flow_extract_l3_onwards(struct ofpbuf *, struct flow *, - ovs_be16 dl_type); - -/* Returns the innermost dl_type. - * If there's an outer and an inner type then the inner type is returned. - * Otherwise, if there is only one type then it is returned. */ -static inline ovs_be16 -flow_innermost_dl_type(const struct flow *flow) -{ - return (flow->encap_dl_type == htons(0) - ? flow->dl_type - : flow->encap_dl_type); -} void flow_zero_wildcards(struct flow *, const struct flow_wildcards *); void flow_get_metadata(const struct flow *, struct flow_metadata *);