[ovs-dev] [PATCH v7 3/9] dp-packet: Refactor offloading API.
Ian Stokes
ian.stokes at intel.com
Wed Mar 13 10:13:03 UTC 2019
On 3/13/2019 10:09 AM, Ian Stokes wrote:
> On 2/26/2019 10:38 AM, Ilya Maximets wrote:
>> 1. No reason to have mbuf related APIs in a generic code.
>> 2. Not only RSS/checksums should be invalidated in case of tunnel
>> decapsulation or sending to 'ring' ports.
>>
>> In order to fix two above issues, new function
>> 'dp_packet_reset_offload' introduced. In order to clean up/unify
>> the code and simplify addition of new offloading features to non-DPDK
>> version of dp_packet, introduced 'ol_flags' bitmask. Additionally
>> reduced code complexity in 'dp_packet_clone_with_headroom' by using
>> already existent generic APIs.
>> > Unfortunately, we still need to have a special case for mbuf
>> initialization inside 'dp_packet_init__()'.
>> 'dp_packet_init_specific()' introduced for this purpose as a generic
>> API for initialization of the implementation-specific fields.
>>
>
> Thanks for this Ilya, apologies for the delay with the series, should
> have more time to look at it this week.
>
> One minor comment below, but other than that seems ok.
>
>> Acked-by: Flavio Leitner <fbl at sysclose.org>
>> Signed-off-by: Ilya Maximets <i.maximets at samsung.com>
>> ---
>> lib/dp-packet.c | 15 ++++------
>> lib/dp-packet.h | 75 ++++++++++++++++++++---------------------------
>> lib/netdev-dpdk.c | 6 ++--
>> lib/netdev.c | 4 +--
>> 4 files changed, 41 insertions(+), 59 deletions(-)
>>
>> diff --git a/lib/dp-packet.c b/lib/dp-packet.c
>> index 93b0e9c84..f8207ffc2 100644
>> --- a/lib/dp-packet.c
>> +++ b/lib/dp-packet.c
>> @@ -30,9 +30,10 @@ dp_packet_init__(struct dp_packet *b, size_t
>> allocated, enum dp_packet_source so
>> b->source = source;
>> dp_packet_reset_offsets(b);
>> pkt_metadata_init(&b->md, 0);
>> - dp_packet_rss_invalidate(b);
>> - dp_packet_mbuf_init(b);
>> dp_packet_reset_cutlen(b);
>> + dp_packet_reset_offload(b);
>> + /* Initialize implementation-specific fields of dp_packet. */
>> + dp_packet_init_specific(b);
>> /* By default assume the packet type to be Ethernet. */
>> b->packet_type = htonl(PT_ETH);
>> }
>> @@ -173,16 +174,10 @@ dp_packet_clone_with_headroom(const struct
>> dp_packet *buffer, size_t headroom)
>> #ifdef DPDK_NETDEV
>> new_buffer->mbuf.ol_flags = buffer->mbuf.ol_flags;
>> -#else
>> - new_buffer->rss_hash_valid = buffer->rss_hash_valid;
>> #endif
>> - if (dp_packet_rss_valid(new_buffer)) {
>> -#ifdef DPDK_NETDEV
>> - new_buffer->mbuf.hash.rss = buffer->mbuf.hash.rss;
>> -#else
>> - new_buffer->rss_hash = buffer->rss_hash;
>> -#endif
>> + if (dp_packet_rss_valid(buffer)) {
>> + dp_packet_set_rss_hash(new_buffer,
>> dp_packet_get_rss_hash(buffer));
>> }
>> return new_buffer;
>> diff --git a/lib/dp-packet.h b/lib/dp-packet.h
>> index c6672f6be..b34dada78 100644
>> --- a/lib/dp-packet.h
>> +++ b/lib/dp-packet.h
>> @@ -46,6 +46,13 @@ enum OVS_PACKED_ENUM dp_packet_source {
>> #define DP_PACKET_CONTEXT_SIZE 64
>> +#ifndef DPDK_NETDEV
>> +/* 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? */
>> +};
>
> Is there a specific reason you've used an enum instead of a define here
> as its just a single value.
>
> Is the expectation that the entries for the offload mask will be
> expanded in the future to be more than just RSS_HASH_MASK?
>
Ah, please disregard, I've just spotted that it is expanded later in the
series.
I've applied this to master.
Thanks
Ian
More information about the dev
mailing list