It's (v2) on the list (since last Thu):

[lng-odp] [API-NEXT PATCH v2 4/5] api: packet_io: added parse mode


-Petri


> -----Original Message-----
> From: ext Zoltan Kiss [mailto:[email protected]]
> Sent: Tuesday, April 28, 2015 9:17 PM
> To: Savolainen, Petri (Nokia - FI/Espoo); [email protected]
> Subject: Re: [lng-odp] [PATCH API-NEXT 4/5] api: packet_io: added parse
> mode
> 
> 
> 
> On 28/04/15 08:09, Savolainen, Petri (Nokia - FI/Espoo) wrote:
> > Hi Zoltan,
> >
> > You should implement the latest version of the patch, which has only
> ALL/NONE defined. We can leave SELECTED for later.
> Ok, but where is that version? I could only find this one.
> 
> >
> > Briefly about SELECTED. The idea is that the application lists all
> odp_packet_has_xxx() calls that it will call during packet processing.
> Implementation can use that information to optimize parser functionality,
> if it can. So, application is not telling to implementation what to do or
> how to do it, but what information application is expecting from packets.
> If application lies (indicates that it will not call xxx, but still calls
> it), results are undefined.
> >
> > -Petri
> >
> >
> >> -----Original Message-----
> >> From: ext Zoltan Kiss [mailto:[email protected]]
> >> Sent: Monday, April 27, 2015 8:29 PM
> >> To: Savolainen, Petri (Nokia - FI/Espoo); [email protected]
> >> Subject: Re: [lng-odp] [PATCH API-NEXT 4/5] api: packet_io: added parse
> >> mode
> >>
> >>
> >>
> >> On 20/04/15 13:10, Petri Savolainen wrote:
> >>> Application can indicate which packet parsing results it is
> >>> interested in (all, none or selected).
> >>>
> >>> Signed-off-by: Petri Savolainen <[email protected]>
> >>> ---
> >>>    include/odp/api/packet_flags.h | 26 ++++++++++++++++++++++++++
> >>>    include/odp/api/packet_io.h    | 19 +++++++++++++++++++
> >>>    2 files changed, 45 insertions(+)
> >>>
> >>> diff --git a/include/odp/api/packet_flags.h
> >> b/include/odp/api/packet_flags.h
> >>> index bfbcc94..9444fdc 100644
> >>> --- a/include/odp/api/packet_flags.h
> >>> +++ b/include/odp/api/packet_flags.h
> >>> @@ -26,6 +26,32 @@ extern "C" {
> >>>     *  @{
> >>>     */
> >>>
> >>> +
> >>> +/**
> >>> + * Packet input parsing flags
> >>> + *
> >>> + * Each flag represents a parser output. See parser output functions
> >> for
> >>> + * details.
> >>
> >> Now that I implement this for linux-generic, I realized this is
> >> ambiguous: does disabling a lower layer's parsing means that the parser
> >> stops looking into upper layers? Even if their parsing is enabled?
> >> E.g. if (jumbo == 0 && ipv4 == 1), we won't parse the ethernet header
> if
> >> it's a jumbo frame, that's fine. But do we continue to look into the
> >> rest of the packet for the IPv4 header?
> >> I would say no, but it should be mentioned here explicitly.
> >>
> >>> + */
> >>> +typedef struct odp_packet_parse_flags_t {
> >>> + uint32_t eth:1;       /**< See odp_packet_has_eth() */
> >>> + uint32_t jumbo:1;     /**< See odp_packet_has_jumbo() */
> >>> + uint32_t vlan:1;      /**< See odp_packet_has_vlan() */
> >>> + uint32_t vlan_qinq:1; /**< See odp_packet_has_vlan_qinq() */
> >>> + uint32_t arp:1;       /**< See odp_packet_has_arp() */
> >>> + uint32_t ipv4:1;      /**< See odp_packet_has_ipv4() */
> >>> + uint32_t ipv6:1;      /**< See odp_packet_has_ipv6() */
> >>> + uint32_t ipfrag:1;    /**< See odp_packet_has_ipfrag() */
> >>> + uint32_t ipopt:1;     /**< See odp_packet_has_ipopt() */
> >>> + uint32_t ipsec:1;     /**< See odp_packet_has_ipsec() */
> >>> + uint32_t udp:1;       /**< See odp_packet_has_udp() */
> >>> + uint32_t tcp:1;       /**< See odp_packet_has_tcp() */
> >>> + uint32_t sctp:1;      /**< See odp_packet_has_sctp() */
> >>> + uint32_t icmp:1;      /**< See odp_packet_has_icmp() */
> >>> +
> >>> + uint32_t _reserved1:18; /**< Reserved. Do not use. */
> >>> +} odp_packet_parse_flags_t;
> >>> +
> >>>    /**
> >>>     * Check for packet errors
> >>>     *
> >>> diff --git a/include/odp/api/packet_io.h b/include/odp/api/packet_io.h
> >>> index 77c207e..97f79ee 100644
> >>> --- a/include/odp/api/packet_io.h
> >>> +++ b/include/odp/api/packet_io.h
> >>> @@ -18,6 +18,8 @@
> >>>    extern "C" {
> >>>    #endif
> >>>
> >>> +#include <odp/packet_flags.h>
> >>> +
> >>>    /** @defgroup odp_packet_io ODP PACKET IO
> >>>     *  Operations on a packet.
> >>>     *  @{
> >>> @@ -58,6 +60,19 @@ enum odp_pktio_input_mode {
> >>>    };
> >>>
> >>>    /**
> >>> + * Packet parsing mode
> >>> + */
> >>> +enum odp_pktio_parse_mode {
> >>> + /** Parse all protocols */
> >>> + ODP_PKTIN_PARSE_ALL = 0,
> >>> + /** Parsing not needed */
> >>> + ODP_PKTIN_PARSE_NONE,
> >>> + /** Parsing can be limited to the flags set in
> >>> +     odp_packet_parse_flags_t */
> >>> + ODP_PKTIN_PARSE_SELECTED
> >>> +};
> >>> +
> >>> +/**
> >>>     * Packet IO parameters
> >>>     *
> >>>     * In minimum, user must select the input mode. Use 0 for defaults.
> >> Initialize
> >>> @@ -66,6 +81,10 @@ enum odp_pktio_input_mode {
> >>>    typedef struct odp_pktio_param_t {
> >>>           /** Packet input mode */
> >>>           enum odp_pktio_input_mode in_mode;
> >>> + /** Packet parse mode */
> >>> + enum odp_pktio_parse_mode parse_mode;
> >>> + /** Parse selection when parse_mode is ODP_PKTIN_PARSE_SELECTED */
> >>> + odp_packet_parse_flags_t parse;
> >>>    } odp_pktio_param_t;
> >>>
> >>>    /**
> >>>
_______________________________________________
lng-odp mailing list
[email protected]
https://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to