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 <[email protected]>
>> Signed-off-by: Ilya Maximets <[email protected]>
>> ---
>>   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
>>
> 
> 
> 
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to