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