From 0f706b37d82ae802db6750840ede99e85def1d82 Mon Sep 17 00:00:00 2001 From: Ilya Maximets Date: Tue, 26 Feb 2019 13:38:38 +0300 Subject: [PATCH] dp-packet: Add flow_mark support for non-DPDK case. Additionally, new API call 'dp_packet_set_flow_mark' is needed for packet clone. Mostly for dummy HWOL implementation. Acked-by: Flavio Leitner Signed-off-by: Ilya Maximets Signed-off-by: Ian Stokes --- lib/dp-packet.h | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/lib/dp-packet.h b/lib/dp-packet.h index b34dada78a4..a5e9ade1244 100644 --- a/lib/dp-packet.h +++ b/lib/dp-packet.h @@ -50,6 +50,7 @@ enum OVS_PACKED_ENUM dp_packet_source { /* Bit masks for the 'ol_flags' member of the 'dp_packet' structure. */ enum dp_packet_offload_mask { DP_PACKET_OL_RSS_HASH_MASK = 0x1, /* Is the 'rss_hash' valid? */ + DP_PACKET_OL_FLOW_MARK_MASK = 0x2, /* Is the 'flow_mark' valid? */ }; #endif @@ -67,6 +68,7 @@ struct dp_packet { uint32_t size_; /* Number of bytes in use. */ uint32_t ol_flags; /* Offloading flags. */ uint32_t rss_hash; /* Packet hash. */ + uint32_t flow_mark; /* Packet flow mark. */ #endif enum dp_packet_source source; /* Source of memory allocated as 'base'. */ @@ -562,6 +564,13 @@ dp_packet_has_flow_mark(const struct dp_packet *p, uint32_t *mark) return false; } +static inline void +dp_packet_set_flow_mark(struct dp_packet *p, uint32_t mark) +{ + p->mbuf.hash.fdir.hi = mark; + p->mbuf.ol_flags |= PKT_RX_FDIR_ID; +} + #else /* DPDK_NETDEV */ static inline void @@ -670,11 +679,21 @@ dp_packet_l4_checksum_bad(const struct dp_packet *p OVS_UNUSED) } static inline bool -dp_packet_has_flow_mark(const struct dp_packet *p OVS_UNUSED, - uint32_t *mark OVS_UNUSED) +dp_packet_has_flow_mark(const struct dp_packet *p, uint32_t *mark) { + if (p->ol_flags & DP_PACKET_OL_FLOW_MARK_MASK) { + *mark = p->flow_mark; + return true; + } return false; } + +static inline void +dp_packet_set_flow_mark(struct dp_packet *p, uint32_t mark) +{ + p->flow_mark = mark; + p->ol_flags |= DP_PACKET_OL_FLOW_MARK_MASK; +} #endif /* DPDK_NETDEV */ static inline void