diff mbox series

[ovs-dev,v5,4/9] dp-packet: Add flow_mark support for non-DPDK case.

Message ID 20190218160025.29904-5-i.maximets@samsung.com
State Superseded
Headers show
Series dpif-netdev: Partial HWOL fixes/refactoring/unit-tests. | expand

Commit Message

Ilya Maximets Feb. 18, 2019, 4 p.m. UTC
Additionally, new API call 'dp_packet_set_flow_mark' is needed
for packet clone. Mostly for dummy HWOL implementation.

Signed-off-by: Ilya Maximets <i.maximets@samsung.com>
---
 lib/dp-packet.h | 23 +++++++++++++++++++++--
 1 file changed, 21 insertions(+), 2 deletions(-)

Comments

Flavio Leitner Feb. 19, 2019, 9:02 p.m. UTC | #1
On Mon, Feb 18, 2019 at 07:00:20PM +0300, Ilya Maximets wrote:
> Additionally, new API call 'dp_packet_set_flow_mark' is needed
> for packet clone. Mostly for dummy HWOL implementation.
> 
> Signed-off-by: Ilya Maximets <i.maximets@samsung.com>
> ---

Acked-by: Flavio Leitner <fbl@sysclose.org>
diff mbox series

Patch

diff --git a/lib/dp-packet.h b/lib/dp-packet.h
index b34dada78..a5e9ade12 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