Hi,

I think this should be typed (as bit field) and part of the odp_pktio_param_t 
params that I introduced in patch "api: packet_io: added odp_pktio_param_t". I 
could rework those patches and add it there.

Something like this,

typedef struct odp_pktio_input_flags_t {
        struct {
                uint64_t eth:1;
                uint64_t jumbo:1;
                uint64_t vlan:1;
                ...

                uint64_t _reserved:27;
        };
} odp_pktio_input_flags_t;


typedef struct odp_pktio_param_t {
        /** Packet input mode */
        enum odp_pktio_input_mode in_mode;
        /** Packet input parser flags */
        odp_pktio_input_flags_t flags;
} odp_pktio_param_t;


odp_pktio_t odp_pktio_open(const char *dev, odp_pool_t pool,
                           const odp_pktio_param_t *param);


-Petri


> -----Original Message-----
> From: lng-odp [mailto:[email protected]] On Behalf Of ext
> Zoltan Kiss
> Sent: Wednesday, April 15, 2015 7:01 PM
> To: [email protected]
> Subject: [lng-odp] [RFC API-NEXT PATCH] packet_io: add bitmap to specify
> what level of parsing needed
> 
> odp_pktio_open() will have a 32 bit bitmask to specify what kind of header
> parsing is required by the application.
> 
> Signed-off-by: Zoltan Kiss <[email protected]>
> ---
>  include/odp/api/packet_flags.h | 49
> ++++++++++++++++++++++++++++++++++++++++++
>  include/odp/api/packet_io.h    | 14 ++++++++----
>  2 files changed, 59 insertions(+), 4 deletions(-)
> 
> diff --git a/include/odp/api/packet_flags.h
> b/include/odp/api/packet_flags.h
> index b1e179e..467d4f1 100644
> --- a/include/odp/api/packet_flags.h
> +++ b/include/odp/api/packet_flags.h
> @@ -327,6 +327,55 @@ void odp_packet_has_sctp_set(odp_packet_t pkt, int
> val);
>  void odp_packet_has_icmp_set(odp_packet_t pkt, int val);
> 
>  /**
> + * Shift values for enum odp_packet_parse. Has to be updated together
> with
> + * odp_packet_parse_e type. The parameter passed to odp_pktio_open is a
> 32 bit
> + * mask.
> + */
> +typedef enum odp_packet_parse_shift {
> +  ODP_PARSE_SHIFT_ETH,
> +  ODP_PARSE_SHIFT_JUMBO,
> +  ODP_PARSE_SHIFT_VLAN,
> +  ODP_PARSE_SHIFT_VLAN_QINQ,
> +  ODP_PARSE_SHIFT_ARP,
> +  ODP_PARSE_SHIFT_IPV4,
> +  ODP_PARSE_SHIFT_IPV6,
> +  ODP_PARSE_SHIFT_IPFRAG,
> +  ODP_PARSE_SHIFT_IPOPT,
> +  ODP_PARSE_SHIFT_IPSEC,
> +  ODP_PARSE_SHIFT_UDP,
> +  ODP_PARSE_SHIFT_TCP,
> +  ODP_PARSE_SHIFT_SCTP,
> +  ODP_PARSE_SHIFT_ICMP,
> +  ODP_PARSE_SHIFT_MAX = 31
> +} odp_packet_parse_shift_e;
> +
> +#define ODP_PARSE(FIELD) ODP_PARSE_##FIELD = (ODP_PARSE_SHIFT_##FIELD <<
> 1)
> +
> +/**
> + * Values to be used when calling odp_pktio_open. The parser_mask
> parameter has
> + * to be one or more of these values joined with bitwise OR. Or one of
> the two
> + * special values: ODP_PARSE_NONE or ODP_PARSE_ALL.
> + * Has to be updated together with odp_packet_parse_shift_e
> + */
> +typedef enum odp_packet_parse {
> +  ODP_PARSE_NONE = 0,                /* The application don't want any 
> parsing */
> +  ODP_PARSE(ETH),            /* Parse Ethernet header */
> +  ODP_PARSE(JUMBO),          /* Parse Ethernet header if a jumbo frame */
> +  ODP_PARSE(VLAN),           /* Parse VLAN header */
> +  ODP_PARSE(VLAN_QINQ),              /* Parse VLAN QinQ header */
> +  ODP_PARSE(ARP),            /* Parse ARP header */
> +  ODP_PARSE(IPV4),           /* Parse IPv4 header */
> +  ODP_PARSE(IPV6),           /* Parse IPv6 header */
> +  ODP_PARSE(IPFRAG),         /* Parse IPv4 header if fragmented */
> +  ODP_PARSE(IPOPT),          /* Parse IP options */
> +  ODP_PARSE(IPSEC),          /* Parse IPsec header */
> +  ODP_PARSE(UDP),            /* Parse UDP header */
> +  ODP_PARSE(TCP),            /* Parse TCP header */
> +  ODP_PARSE(SCTP),           /* Parse SCTP header */
> +  ODP_PARSE(ICMP),           /* Parse ICMP header */
> +  ODP_PARSE_ALL = UINT32_MAX /* The application wants full parsing */
> +} odp_packet_parse_e;
> +/**
>   * @}
>   */
> 
> diff --git a/include/odp/api/packet_io.h b/include/odp/api/packet_io.h
> index 6d31aeb..8c989f3 100644
> --- a/include/odp/api/packet_io.h
> +++ b/include/odp/api/packet_io.h
> @@ -51,9 +51,14 @@ extern "C" {
>   * open device will fail, returning ODP_PKTIO_INVALID with errno set.
>   * odp_pktio_lookup() may be used to obtain a handle to an already open
> device.
>   *
> - * @param dev    Packet IO device name
> - * @param pool   Pool from which to allocate buffers for storing packets
> - *               received over this packet IO
> + * @param dev           Packet IO device name
> + * @param pool          Pool from which to allocate buffers for storing
> packets
> + *                      received over this packet IO
> + * @param parsing_mask  Mask to request parsing. Must be one or more
> ODP_PARSE_*
> + *                      value joined with bitwise OR to request
> particular
> + *                      fields to be parsed. Or one of two special
> values:
> + *                      ODP_PARSE_NONE or ODP_PARSE_ALL. See
> odp_packet_parse_e
> + *                      in packet_flags.h for more details
>   *
>   * @return ODP packet IO handle
>   * @retval ODP_PKTIO_INVALID on failure
> @@ -62,7 +67,8 @@ extern "C" {
>   *    device used for testing. Usually it's loop back
>   *    interface.
>   */
> -odp_pktio_t odp_pktio_open(const char *dev, odp_pool_t pool);
> +odp_pktio_t odp_pktio_open(const char *dev, odp_pool_t pool,
> +                        uint32_t parsing_mask);
> 
>  /**
>   * Close an ODP packet IO instance
> --
> 1.9.1
> 
> _______________________________________________
> lng-odp mailing list
> [email protected]
> https://lists.linaro.org/mailman/listinfo/lng-odp
_______________________________________________
lng-odp mailing list
[email protected]
https://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to