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

Ilya Maximets i.maximets at samsung.com
Wed Mar 13 11:23:48 UTC 2019


On 13.03.2019 14:14, Ian Stokes wrote:
> On 2/26/2019 10:38 AM, Ilya Maximets wrote:
>> Additionally, new API call 'dp_packet_set_flow_mark' is needed
>> for packet clone. Mostly for dummy HWOL implementation.
>>
>> Acked-by: Flavio Leitner <fbl at sysclose.org>
>> Signed-off-by: Ilya Maximets <i.maximets at samsung.com>
>> ---
>>   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 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;
> 
> Just a query query, these functions only set the hi mark, not the lo, is the expectation that lo is not needed or is it that the id and hash would be used instead of lo?

hash.fdir.lo overlaps with hash.rss. So, we should not touch it.
And MARK action sets the hash.fdir.hi field only.

> 
> Ian
> 
>> +    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
>>
> 
> 
> 


More information about the dev mailing list