[API-NEXT,v5] api: ipsec: factor out definitions for feature support levels

Message ID 20170419134127.24269-1-dmitry.ereminsolenikov@linaro.org
State New
Headers show

Commit Message

Dmitry Eremin-Solenikov April 19, 2017, 1:41 p.m.
Instead of having magic 0-1-2 numbers, let's have the special enum for
feature support levels (unsupported/supported/preferred).

Signed-off-by: Dmitry Eremin-Solenikov <dmitry.ereminsolenikov@linaro.org>

---
 include/odp/api/spec/ipsec.h                     | 39 +++++-----------
 include/odp/api/spec/support.h                   | 57 ++++++++++++++++++++++++
 include/odp_api.h                                |  1 +
 platform/Makefile.inc                            |  1 +
 platform/linux-generic/Makefile.am               |  1 +
 platform/linux-generic/include/odp/api/support.h | 34 ++++++++++++++
 6 files changed, 106 insertions(+), 27 deletions(-)
 create mode 100644 include/odp/api/spec/support.h
 create mode 100644 platform/linux-generic/include/odp/api/support.h

-- 
2.11.0

Comments

Maxim Uvarov April 19, 2017, 1:52 p.m. | #1
Dmitry, please name patches as API-NEXT PATH v5, not as API-NEXT.

Maxim.


On 19.04.2017 16:41, Dmitry Eremin-Solenikov wrote:
> Instead of having magic 0-1-2 numbers, let's have the special enum for

> feature support levels (unsupported/supported/preferred).

> 

> Signed-off-by: Dmitry Eremin-Solenikov <dmitry.ereminsolenikov@linaro.org>

> ---

>  include/odp/api/spec/ipsec.h                     | 39 +++++-----------

>  include/odp/api/spec/support.h                   | 57 ++++++++++++++++++++++++

>  include/odp_api.h                                |  1 +

>  platform/Makefile.inc                            |  1 +

>  platform/linux-generic/Makefile.am               |  1 +

>  platform/linux-generic/include/odp/api/support.h | 34 ++++++++++++++

>  6 files changed, 106 insertions(+), 27 deletions(-)

>  create mode 100644 include/odp/api/spec/support.h

>  create mode 100644 platform/linux-generic/include/odp/api/support.h

> 

> diff --git a/include/odp/api/spec/ipsec.h b/include/odp/api/spec/ipsec.h

> index a0ceb11a..ecbf38c6 100644

> --- a/include/odp/api/spec/ipsec.h

> +++ b/include/odp/api/spec/ipsec.h

> @@ -19,6 +19,7 @@ extern "C" {

>  #endif

>  

>  #include <odp/api/crypto.h>

> +#include <odp/api/support.h>

>  #include <odp/api/packet_io.h>

>  #include <odp/api/classification.h>

>  

> @@ -230,38 +231,22 @@ typedef struct odp_ipsec_capability_t {

>  	/** Maximum number of IPSEC SAs */

>  	uint32_t max_num_sa;

>  

> -	/** Synchronous IPSEC operation mode (ODP_IPSEC_OP_MODE_SYNC) support

> -	 *

> -	 *  0: Synchronous mode is not supported

> -	 *  1: Synchronous mode is supported

> -	 *  2: Synchronous mode is supported and preferred

> -	 */

> -	uint8_t op_mode_sync;

> +	/** Synchronous IPSEC operation mode (ODP_IPSEC_OP_MODE_SYNC) support */

> +	odp_support_t op_mode_sync;

>  

> -	/** Asynchronous IPSEC operation mode (ODP_IPSEC_OP_MODE_ASYNC) support

> -	 *

> -	 *  0: Asynchronous mode is not supported

> -	 *  1: Asynchronous mode is supported

> -	 *  2: Asynchronous mode is supported and preferred

> +	/**

> +	 * Asynchronous IPSEC operation mode (ODP_IPSEC_OP_MODE_ASYNC) support

>  	 */

> -	uint8_t op_mode_async;

> +	odp_support_t op_mode_async;

>  

> -	/** Inline IPSEC operation mode (ODP_IPSEC_OP_MODE_INLINE) support

> -	 *

> -	 *  0: Inline IPSEC operation is not supported

> -	 *  1: Inline IPSEC operation is supported

> -	 *  2: Inline IPSEC operation is supported and preferred

> -	 */

> -	uint8_t op_mode_inline;

> +	/** Inline IPSEC operation mode (ODP_IPSEC_OP_MODE_INLINE) support */

> +	odp_support_t op_mode_inline;

>  

> -	/** Support of pipelined classification (ODP_IPSEC_PIPELINE_CLS) of

> -	 *  resulting inbound packets.

> -	 *

> -	 *  0: Classification of resulting packets is not supported

> -	 *  1: Classification of resulting packets is supported

> -	 *  2: Classification of resulting packets is supported and preferred

> +	/**

> +	 * Support of pipelined classification (ODP_IPSEC_PIPELINE_CLS) of

> +	 *  resulting inbound packets

>  	 */

> -	uint8_t pipeline_cls;

> +	odp_support_t pipeline_cls;

>  

>  	/** Soft expiry limit in seconds support

>  	 *

> diff --git a/include/odp/api/spec/support.h b/include/odp/api/spec/support.h

> new file mode 100644

> index 00000000..cc43b6f0

> --- /dev/null

> +++ b/include/odp/api/spec/support.h

> @@ -0,0 +1,57 @@

> +/* Copyright (c) 2017, Linaro Limited

> + * All rights reserved.

> + *

> + * SPDX-License-Identifier:     BSD-3-Clause

> + */

> +

> +/**

> + * @file

> + *

> + * ODP support API

> + */

> +

> +#ifndef ODP_API_SUPPORT_H_

> +#define ODP_API_SUPPORT_H_

> +#include <odp/visibility_begin.h>

> +

> +#ifdef __cplusplus

> +extern "C" {

> +#endif

> +

> +/** @defgroup odp_support ODP support

> + *  Common API

> + *  @{

> + */

> +

> +/**

> + * ODP support support

> + *

> + * Support levels are specified in the relative order, where ODP_SUPPORT_NO is

> + * the lowest level. E.g. if the examined support level is greater than

> + * ODP_SUPPORT_NO, the feature is supported in some form.

> + */

> +typedef enum odp_support_t {

> +	/**

> +	 * Feature is not supported

> +	 */

> +	ODP_SUPPORT_NO = 0,

> +	/**

> +	 * Feature is supported

> +	 */

> +	ODP_SUPPORT_YES,

> +	/**

> +	 * Feature is supported and preferred

> +	 */

> +	ODP_SUPPORT_PREFERRED

> +} odp_support_t;

> +

> +/**

> + * @}

> + */

> +

> +#ifdef __cplusplus

> +}

> +#endif

> +

> +#include <odp/visibility_end.h>

> +#endif

> diff --git a/include/odp_api.h b/include/odp_api.h

> index 73e5309a..e3ffcb1e 100644

> --- a/include/odp_api.h

> +++ b/include/odp_api.h

> @@ -57,6 +57,7 @@ extern "C" {

>  #include <odp/api/spinlock_recursive.h>

>  #include <odp/api/rwlock_recursive.h>

>  #include <odp/api/std_clib.h>

> +#include <odp/api/support.h>

>  #include <odp/api/ipsec.h>

>  

>  #ifdef __cplusplus

> diff --git a/platform/Makefile.inc b/platform/Makefile.inc

> index 874cf887..b4cc2433 100644

> --- a/platform/Makefile.inc

> +++ b/platform/Makefile.inc

> @@ -31,6 +31,7 @@ odpapispecinclude_HEADERS = \

>  		  $(top_srcdir)/include/odp/api/spec/debug.h \

>  		  $(top_srcdir)/include/odp/api/spec/errno.h \

>  		  $(top_srcdir)/include/odp/api/spec/event.h \

> +		  $(top_srcdir)/include/odp/api/spec/support.h \

>  		  $(top_srcdir)/include/odp/api/spec/hash.h \

>  		  $(top_srcdir)/include/odp/api/spec/hints.h \

>  		  $(top_srcdir)/include/odp/api/spec/init.h \

> diff --git a/platform/linux-generic/Makefile.am b/platform/linux-generic/Makefile.am

> index 0d5299cb..3257d261 100644

> --- a/platform/linux-generic/Makefile.am

> +++ b/platform/linux-generic/Makefile.am

> @@ -37,6 +37,7 @@ odpapiinclude_HEADERS = \

>  		  $(srcdir)/include/odp/api/debug.h \

>  		  $(srcdir)/include/odp/api/errno.h \

>  		  $(srcdir)/include/odp/api/event.h \

> +		  $(srcdir)/include/odp/api/support.h \

>  		  $(srcdir)/include/odp/api/hash.h \

>  		  $(srcdir)/include/odp/api/hints.h \

>  		  $(srcdir)/include/odp/api/init.h \

> diff --git a/platform/linux-generic/include/odp/api/support.h b/platform/linux-generic/include/odp/api/support.h

> new file mode 100644

> index 00000000..dd6abab2

> --- /dev/null

> +++ b/platform/linux-generic/include/odp/api/support.h

> @@ -0,0 +1,34 @@

> +/* Copyright (c) 2017, Linaro Limited

> + * All rights reserved.

> + *

> + * SPDX-License-Identifier:     BSD-3-Clause

> + */

> +

> +/**

> + * @file

> + *

> + * ODP support API - platform specific header

> + */

> +

> +#ifndef ODP_PLAT_SUPPORT_H_

> +#define ODP_PLAT_SUPPORT_H_

> +

> +#ifdef __cplusplus

> +extern "C" {

> +#endif

> +

> +/** @ingroup odp_support

> + *  @{

> + */

> +

> +/**

> + * @}

> + */

> +

> +#include <odp/api/spec/support.h>

> +

> +#ifdef __cplusplus

> +}

> +#endif

> +

> +#endif

>
Bill Fischofer April 19, 2017, 11:49 p.m. | #2
On Wed, Apr 19, 2017 at 8:52 AM, Maxim Uvarov <maxim.uvarov@linaro.org>
wrote:

> Dmitry, please name patches as API-NEXT PATH v5, not as API-NEXT.

>


API-NEXT PATCH v5


>

> Maxim.

>

>

> On 19.04.2017 16:41, Dmitry Eremin-Solenikov wrote:

> > Instead of having magic 0-1-2 numbers, let's have the special enum for

> > feature support levels (unsupported/supported/preferred).

> >

> > Signed-off-by: Dmitry Eremin-Solenikov <dmitry.ereminsolenikov@

> linaro.org>

> > ---

> >  include/odp/api/spec/ipsec.h                     | 39 +++++-----------

> >  include/odp/api/spec/support.h                   | 57

> ++++++++++++++++++++++++

> >  include/odp_api.h                                |  1 +

> >  platform/Makefile.inc                            |  1 +

> >  platform/linux-generic/Makefile.am               |  1 +

> >  platform/linux-generic/include/odp/api/support.h | 34 ++++++++++++++

> >  6 files changed, 106 insertions(+), 27 deletions(-)

> >  create mode 100644 include/odp/api/spec/support.h

> >  create mode 100644 platform/linux-generic/include/odp/api/support.h

> >

> > diff --git a/include/odp/api/spec/ipsec.h b/include/odp/api/spec/ipsec.h

> > index a0ceb11a..ecbf38c6 100644

> > --- a/include/odp/api/spec/ipsec.h

> > +++ b/include/odp/api/spec/ipsec.h

> > @@ -19,6 +19,7 @@ extern "C" {

> >  #endif

> >

> >  #include <odp/api/crypto.h>

> > +#include <odp/api/support.h>

> >  #include <odp/api/packet_io.h>

> >  #include <odp/api/classification.h>

> >

> > @@ -230,38 +231,22 @@ typedef struct odp_ipsec_capability_t {

> >       /** Maximum number of IPSEC SAs */

> >       uint32_t max_num_sa;

> >

> > -     /** Synchronous IPSEC operation mode (ODP_IPSEC_OP_MODE_SYNC)

> support

> > -      *

> > -      *  0: Synchronous mode is not supported

> > -      *  1: Synchronous mode is supported

> > -      *  2: Synchronous mode is supported and preferred

> > -      */

> > -     uint8_t op_mode_sync;

> > +     /** Synchronous IPSEC operation mode (ODP_IPSEC_OP_MODE_SYNC)

> support */

> > +     odp_support_t op_mode_sync;

> >

> > -     /** Asynchronous IPSEC operation mode (ODP_IPSEC_OP_MODE_ASYNC)

> support

> > -      *

> > -      *  0: Asynchronous mode is not supported

> > -      *  1: Asynchronous mode is supported

> > -      *  2: Asynchronous mode is supported and preferred

> > +     /**

> > +      * Asynchronous IPSEC operation mode (ODP_IPSEC_OP_MODE_ASYNC)

> support

> >        */

> > -     uint8_t op_mode_async;

> > +     odp_support_t op_mode_async;

> >

> > -     /** Inline IPSEC operation mode (ODP_IPSEC_OP_MODE_INLINE) support

> > -      *

> > -      *  0: Inline IPSEC operation is not supported

> > -      *  1: Inline IPSEC operation is supported

> > -      *  2: Inline IPSEC operation is supported and preferred

> > -      */

> > -     uint8_t op_mode_inline;

> > +     /** Inline IPSEC operation mode (ODP_IPSEC_OP_MODE_INLINE) support

> */

> > +     odp_support_t op_mode_inline;

> >

> > -     /** Support of pipelined classification (ODP_IPSEC_PIPELINE_CLS) of

> > -      *  resulting inbound packets.

> > -      *

> > -      *  0: Classification of resulting packets is not supported

> > -      *  1: Classification of resulting packets is supported

> > -      *  2: Classification of resulting packets is supported and

> preferred

> > +     /**

> > +      * Support of pipelined classification (ODP_IPSEC_PIPELINE_CLS) of

> > +      *  resulting inbound packets

> >        */

> > -     uint8_t pipeline_cls;

> > +     odp_support_t pipeline_cls;

> >

> >       /** Soft expiry limit in seconds support

> >        *

> > diff --git a/include/odp/api/spec/support.h b/include/odp/api/spec/

> support.h

> > new file mode 100644

> > index 00000000..cc43b6f0

> > --- /dev/null

> > +++ b/include/odp/api/spec/support.h

> > @@ -0,0 +1,57 @@

> > +/* Copyright (c) 2017, Linaro Limited

> > + * All rights reserved.

> > + *

> > + * SPDX-License-Identifier:     BSD-3-Clause

> > + */

> > +

> > +/**

> > + * @file

> > + *

> > + * ODP support API

> > + */

> > +

> > +#ifndef ODP_API_SUPPORT_H_

> > +#define ODP_API_SUPPORT_H_

> > +#include <odp/visibility_begin.h>

> > +

> > +#ifdef __cplusplus

> > +extern "C" {

> > +#endif

> > +

> > +/** @defgroup odp_support ODP support

> > + *  Common API

> > + *  @{

> > + */

> > +

> > +/**

> > + * ODP support support

> > + *

> > + * Support levels are specified in the relative order, where

> ODP_SUPPORT_NO is

> > + * the lowest level. E.g. if the examined support level is greater than

> > + * ODP_SUPPORT_NO, the feature is supported in some form.

> > + */

> > +typedef enum odp_support_t {

> > +     /**

> > +      * Feature is not supported

> > +      */

> > +     ODP_SUPPORT_NO = 0,

> > +     /**

> > +      * Feature is supported

> > +      */

> > +     ODP_SUPPORT_YES,

> > +     /**

> > +      * Feature is supported and preferred

> > +      */

> > +     ODP_SUPPORT_PREFERRED

> > +} odp_support_t;

> > +

> > +/**

> > + * @}

> > + */

> > +

> > +#ifdef __cplusplus

> > +}

> > +#endif

> > +

> > +#include <odp/visibility_end.h>

> > +#endif

> > diff --git a/include/odp_api.h b/include/odp_api.h

> > index 73e5309a..e3ffcb1e 100644

> > --- a/include/odp_api.h

> > +++ b/include/odp_api.h

> > @@ -57,6 +57,7 @@ extern "C" {

> >  #include <odp/api/spinlock_recursive.h>

> >  #include <odp/api/rwlock_recursive.h>

> >  #include <odp/api/std_clib.h>

> > +#include <odp/api/support.h>

> >  #include <odp/api/ipsec.h>

> >

> >  #ifdef __cplusplus

> > diff --git a/platform/Makefile.inc b/platform/Makefile.inc

> > index 874cf887..b4cc2433 100644

> > --- a/platform/Makefile.inc

> > +++ b/platform/Makefile.inc

> > @@ -31,6 +31,7 @@ odpapispecinclude_HEADERS = \

> >                 $(top_srcdir)/include/odp/api/spec/debug.h \

> >                 $(top_srcdir)/include/odp/api/spec/errno.h \

> >                 $(top_srcdir)/include/odp/api/spec/event.h \

> > +               $(top_srcdir)/include/odp/api/spec/support.h \

> >                 $(top_srcdir)/include/odp/api/spec/hash.h \

> >                 $(top_srcdir)/include/odp/api/spec/hints.h \

> >                 $(top_srcdir)/include/odp/api/spec/init.h \

> > diff --git a/platform/linux-generic/Makefile.am

> b/platform/linux-generic/Makefile.am

> > index 0d5299cb..3257d261 100644

> > --- a/platform/linux-generic/Makefile.am

> > +++ b/platform/linux-generic/Makefile.am

> > @@ -37,6 +37,7 @@ odpapiinclude_HEADERS = \

> >                 $(srcdir)/include/odp/api/debug.h \

> >                 $(srcdir)/include/odp/api/errno.h \

> >                 $(srcdir)/include/odp/api/event.h \

> > +               $(srcdir)/include/odp/api/support.h \

> >                 $(srcdir)/include/odp/api/hash.h \

> >                 $(srcdir)/include/odp/api/hints.h \

> >                 $(srcdir)/include/odp/api/init.h \

> > diff --git a/platform/linux-generic/include/odp/api/support.h

> b/platform/linux-generic/include/odp/api/support.h

> > new file mode 100644

> > index 00000000..dd6abab2

> > --- /dev/null

> > +++ b/platform/linux-generic/include/odp/api/support.h

> > @@ -0,0 +1,34 @@

> > +/* Copyright (c) 2017, Linaro Limited

> > + * All rights reserved.

> > + *

> > + * SPDX-License-Identifier:     BSD-3-Clause

> > + */

> > +

> > +/**

> > + * @file

> > + *

> > + * ODP support API - platform specific header

> > + */

> > +

> > +#ifndef ODP_PLAT_SUPPORT_H_

> > +#define ODP_PLAT_SUPPORT_H_

> > +

> > +#ifdef __cplusplus

> > +extern "C" {

> > +#endif

> > +

> > +/** @ingroup odp_support

> > + *  @{

> > + */

> > +

> > +/**

> > + * @}

> > + */

> > +

> > +#include <odp/api/spec/support.h>

> > +

> > +#ifdef __cplusplus

> > +}

> > +#endif

> > +

> > +#endif

> >

>

>
Savolainen, Petri (Nokia - FI/Espoo) April 24, 2017, 11:36 a.m. | #3
Reviewed-by: Petri Savolainen <petri.savolainen@linaro.org>



> -----Original Message-----

> From: lng-odp [mailto:lng-odp-bounces@lists.linaro.org] On Behalf Of

> Dmitry Eremin-Solenikov

> Sent: Wednesday, April 19, 2017 4:41 PM

> To: lng-odp@lists.linaro.org

> Subject: [lng-odp] [API-NEXT v5] api: ipsec: factor out definitions for

> feature support levels

> 

> Instead of having magic 0-1-2 numbers, let's have the special enum for

> feature support levels (unsupported/supported/preferred).

> 

> Signed-off-by: Dmitry Eremin-Solenikov <dmitry.ereminsolenikov@linaro.org>

> ---

>  include/odp/api/spec/ipsec.h                     | 39 +++++-----------

>  include/odp/api/spec/support.h                   | 57

> ++++++++++++++++++++++++

>  include/odp_api.h                                |  1 +

>  platform/Makefile.inc                            |  1 +

>  platform/linux-generic/Makefile.am               |  1 +

>  platform/linux-generic/include/odp/api/support.h | 34 ++++++++++++++

>  6 files changed, 106 insertions(+), 27 deletions(-)

>  create mode 100644 include/odp/api/spec/support.h

>  create mode 100644 platform/linux-generic/include/odp/api/support.h

> 

> diff --git a/include/odp/api/spec/ipsec.h b/include/odp/api/spec/ipsec.h

> index a0ceb11a..ecbf38c6 100644

> --- a/include/odp/api/spec/ipsec.h

> +++ b/include/odp/api/spec/ipsec.h

> @@ -19,6 +19,7 @@ extern "C" {

>  #endif

> 

>  #include <odp/api/crypto.h>

> +#include <odp/api/support.h>

>  #include <odp/api/packet_io.h>

>  #include <odp/api/classification.h>

> 

> @@ -230,38 +231,22 @@ typedef struct odp_ipsec_capability_t {

>  	/** Maximum number of IPSEC SAs */

>  	uint32_t max_num_sa;

> 

> -	/** Synchronous IPSEC operation mode (ODP_IPSEC_OP_MODE_SYNC)

> support

> -	 *

> -	 *  0: Synchronous mode is not supported

> -	 *  1: Synchronous mode is supported

> -	 *  2: Synchronous mode is supported and preferred

> -	 */

> -	uint8_t op_mode_sync;

> +	/** Synchronous IPSEC operation mode (ODP_IPSEC_OP_MODE_SYNC)

> support */

> +	odp_support_t op_mode_sync;

> 

> -	/** Asynchronous IPSEC operation mode (ODP_IPSEC_OP_MODE_ASYNC)

> support

> -	 *

> -	 *  0: Asynchronous mode is not supported

> -	 *  1: Asynchronous mode is supported

> -	 *  2: Asynchronous mode is supported and preferred

> +	/**

> +	 * Asynchronous IPSEC operation mode (ODP_IPSEC_OP_MODE_ASYNC)

> support

>  	 */

> -	uint8_t op_mode_async;

> +	odp_support_t op_mode_async;

> 

> -	/** Inline IPSEC operation mode (ODP_IPSEC_OP_MODE_INLINE)

> support

> -	 *

> -	 *  0: Inline IPSEC operation is not supported

> -	 *  1: Inline IPSEC operation is supported

> -	 *  2: Inline IPSEC operation is supported and preferred

> -	 */

> -	uint8_t op_mode_inline;

> +	/** Inline IPSEC operation mode (ODP_IPSEC_OP_MODE_INLINE)

> support */

> +	odp_support_t op_mode_inline;

> 

> -	/** Support of pipelined classification

> (ODP_IPSEC_PIPELINE_CLS) of

> -	 *  resulting inbound packets.

> -	 *

> -	 *  0: Classification of resulting packets is not supported

> -	 *  1: Classification of resulting packets is supported

> -	 *  2: Classification of resulting packets is supported and

> preferred

> +	/**

> +	 * Support of pipelined classification (ODP_IPSEC_PIPELINE_CLS)

> of

> +	 *  resulting inbound packets

>  	 */

> -	uint8_t pipeline_cls;

> +	odp_support_t pipeline_cls;

> 

>  	/** Soft expiry limit in seconds support

>  	 *

> diff --git a/include/odp/api/spec/support.h

> b/include/odp/api/spec/support.h

> new file mode 100644

> index 00000000..cc43b6f0

> --- /dev/null

> +++ b/include/odp/api/spec/support.h

> @@ -0,0 +1,57 @@

> +/* Copyright (c) 2017, Linaro Limited

> + * All rights reserved.

> + *

> + * SPDX-License-Identifier:     BSD-3-Clause

> + */

> +

> +/**

> + * @file

> + *

> + * ODP support API

> + */

> +

> +#ifndef ODP_API_SUPPORT_H_

> +#define ODP_API_SUPPORT_H_

> +#include <odp/visibility_begin.h>

> +

> +#ifdef __cplusplus

> +extern "C" {

> +#endif

> +

> +/** @defgroup odp_support ODP support

> + *  Common API

> + *  @{

> + */

> +

> +/**

> + * ODP support support

> + *

> + * Support levels are specified in the relative order, where

> ODP_SUPPORT_NO is

> + * the lowest level. E.g. if the examined support level is greater than

> + * ODP_SUPPORT_NO, the feature is supported in some form.

> + */

> +typedef enum odp_support_t {

> +	/**

> +	 * Feature is not supported

> +	 */

> +	ODP_SUPPORT_NO = 0,

> +	/**

> +	 * Feature is supported

> +	 */

> +	ODP_SUPPORT_YES,

> +	/**

> +	 * Feature is supported and preferred

> +	 */

> +	ODP_SUPPORT_PREFERRED

> +} odp_support_t;

> +

> +/**

> + * @}

> + */

> +

> +#ifdef __cplusplus

> +}

> +#endif

> +

> +#include <odp/visibility_end.h>

> +#endif

> diff --git a/include/odp_api.h b/include/odp_api.h

> index 73e5309a..e3ffcb1e 100644

> --- a/include/odp_api.h

> +++ b/include/odp_api.h

> @@ -57,6 +57,7 @@ extern "C" {

>  #include <odp/api/spinlock_recursive.h>

>  #include <odp/api/rwlock_recursive.h>

>  #include <odp/api/std_clib.h>

> +#include <odp/api/support.h>

>  #include <odp/api/ipsec.h>

> 

>  #ifdef __cplusplus

> diff --git a/platform/Makefile.inc b/platform/Makefile.inc

> index 874cf887..b4cc2433 100644

> --- a/platform/Makefile.inc

> +++ b/platform/Makefile.inc

> @@ -31,6 +31,7 @@ odpapispecinclude_HEADERS = \

>  		  $(top_srcdir)/include/odp/api/spec/debug.h \

>  		  $(top_srcdir)/include/odp/api/spec/errno.h \

>  		  $(top_srcdir)/include/odp/api/spec/event.h \

> +		  $(top_srcdir)/include/odp/api/spec/support.h \

>  		  $(top_srcdir)/include/odp/api/spec/hash.h \

>  		  $(top_srcdir)/include/odp/api/spec/hints.h \

>  		  $(top_srcdir)/include/odp/api/spec/init.h \

> diff --git a/platform/linux-generic/Makefile.am b/platform/linux-

> generic/Makefile.am

> index 0d5299cb..3257d261 100644

> --- a/platform/linux-generic/Makefile.am

> +++ b/platform/linux-generic/Makefile.am

> @@ -37,6 +37,7 @@ odpapiinclude_HEADERS = \

>  		  $(srcdir)/include/odp/api/debug.h \

>  		  $(srcdir)/include/odp/api/errno.h \

>  		  $(srcdir)/include/odp/api/event.h \

> +		  $(srcdir)/include/odp/api/support.h \

>  		  $(srcdir)/include/odp/api/hash.h \

>  		  $(srcdir)/include/odp/api/hints.h \

>  		  $(srcdir)/include/odp/api/init.h \

> diff --git a/platform/linux-generic/include/odp/api/support.h

> b/platform/linux-generic/include/odp/api/support.h

> new file mode 100644

> index 00000000..dd6abab2

> --- /dev/null

> +++ b/platform/linux-generic/include/odp/api/support.h

> @@ -0,0 +1,34 @@

> +/* Copyright (c) 2017, Linaro Limited

> + * All rights reserved.

> + *

> + * SPDX-License-Identifier:     BSD-3-Clause

> + */

> +

> +/**

> + * @file

> + *

> + * ODP support API - platform specific header

> + */

> +

> +#ifndef ODP_PLAT_SUPPORT_H_

> +#define ODP_PLAT_SUPPORT_H_

> +

> +#ifdef __cplusplus

> +extern "C" {

> +#endif

> +

> +/** @ingroup odp_support

> + *  @{

> + */

> +

> +/**

> + * @}

> + */

> +

> +#include <odp/api/spec/support.h>

> +

> +#ifdef __cplusplus

> +}

> +#endif

> +

> +#endif

> --

> 2.11.0

Patch

diff --git a/include/odp/api/spec/ipsec.h b/include/odp/api/spec/ipsec.h
index a0ceb11a..ecbf38c6 100644
--- a/include/odp/api/spec/ipsec.h
+++ b/include/odp/api/spec/ipsec.h
@@ -19,6 +19,7 @@  extern "C" {
 #endif
 
 #include <odp/api/crypto.h>
+#include <odp/api/support.h>
 #include <odp/api/packet_io.h>
 #include <odp/api/classification.h>
 
@@ -230,38 +231,22 @@  typedef struct odp_ipsec_capability_t {
 	/** Maximum number of IPSEC SAs */
 	uint32_t max_num_sa;
 
-	/** Synchronous IPSEC operation mode (ODP_IPSEC_OP_MODE_SYNC) support
-	 *
-	 *  0: Synchronous mode is not supported
-	 *  1: Synchronous mode is supported
-	 *  2: Synchronous mode is supported and preferred
-	 */
-	uint8_t op_mode_sync;
+	/** Synchronous IPSEC operation mode (ODP_IPSEC_OP_MODE_SYNC) support */
+	odp_support_t op_mode_sync;
 
-	/** Asynchronous IPSEC operation mode (ODP_IPSEC_OP_MODE_ASYNC) support
-	 *
-	 *  0: Asynchronous mode is not supported
-	 *  1: Asynchronous mode is supported
-	 *  2: Asynchronous mode is supported and preferred
+	/**
+	 * Asynchronous IPSEC operation mode (ODP_IPSEC_OP_MODE_ASYNC) support
 	 */
-	uint8_t op_mode_async;
+	odp_support_t op_mode_async;
 
-	/** Inline IPSEC operation mode (ODP_IPSEC_OP_MODE_INLINE) support
-	 *
-	 *  0: Inline IPSEC operation is not supported
-	 *  1: Inline IPSEC operation is supported
-	 *  2: Inline IPSEC operation is supported and preferred
-	 */
-	uint8_t op_mode_inline;
+	/** Inline IPSEC operation mode (ODP_IPSEC_OP_MODE_INLINE) support */
+	odp_support_t op_mode_inline;
 
-	/** Support of pipelined classification (ODP_IPSEC_PIPELINE_CLS) of
-	 *  resulting inbound packets.
-	 *
-	 *  0: Classification of resulting packets is not supported
-	 *  1: Classification of resulting packets is supported
-	 *  2: Classification of resulting packets is supported and preferred
+	/**
+	 * Support of pipelined classification (ODP_IPSEC_PIPELINE_CLS) of
+	 *  resulting inbound packets
 	 */
-	uint8_t pipeline_cls;
+	odp_support_t pipeline_cls;
 
 	/** Soft expiry limit in seconds support
 	 *
diff --git a/include/odp/api/spec/support.h b/include/odp/api/spec/support.h
new file mode 100644
index 00000000..cc43b6f0
--- /dev/null
+++ b/include/odp/api/spec/support.h
@@ -0,0 +1,57 @@ 
+/* Copyright (c) 2017, Linaro Limited
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier:     BSD-3-Clause
+ */
+
+/**
+ * @file
+ *
+ * ODP support API
+ */
+
+#ifndef ODP_API_SUPPORT_H_
+#define ODP_API_SUPPORT_H_
+#include <odp/visibility_begin.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** @defgroup odp_support ODP support
+ *  Common API
+ *  @{
+ */
+
+/**
+ * ODP support support
+ *
+ * Support levels are specified in the relative order, where ODP_SUPPORT_NO is
+ * the lowest level. E.g. if the examined support level is greater than
+ * ODP_SUPPORT_NO, the feature is supported in some form.
+ */
+typedef enum odp_support_t {
+	/**
+	 * Feature is not supported
+	 */
+	ODP_SUPPORT_NO = 0,
+	/**
+	 * Feature is supported
+	 */
+	ODP_SUPPORT_YES,
+	/**
+	 * Feature is supported and preferred
+	 */
+	ODP_SUPPORT_PREFERRED
+} odp_support_t;
+
+/**
+ * @}
+ */
+
+#ifdef __cplusplus
+}
+#endif
+
+#include <odp/visibility_end.h>
+#endif
diff --git a/include/odp_api.h b/include/odp_api.h
index 73e5309a..e3ffcb1e 100644
--- a/include/odp_api.h
+++ b/include/odp_api.h
@@ -57,6 +57,7 @@  extern "C" {
 #include <odp/api/spinlock_recursive.h>
 #include <odp/api/rwlock_recursive.h>
 #include <odp/api/std_clib.h>
+#include <odp/api/support.h>
 #include <odp/api/ipsec.h>
 
 #ifdef __cplusplus
diff --git a/platform/Makefile.inc b/platform/Makefile.inc
index 874cf887..b4cc2433 100644
--- a/platform/Makefile.inc
+++ b/platform/Makefile.inc
@@ -31,6 +31,7 @@  odpapispecinclude_HEADERS = \
 		  $(top_srcdir)/include/odp/api/spec/debug.h \
 		  $(top_srcdir)/include/odp/api/spec/errno.h \
 		  $(top_srcdir)/include/odp/api/spec/event.h \
+		  $(top_srcdir)/include/odp/api/spec/support.h \
 		  $(top_srcdir)/include/odp/api/spec/hash.h \
 		  $(top_srcdir)/include/odp/api/spec/hints.h \
 		  $(top_srcdir)/include/odp/api/spec/init.h \
diff --git a/platform/linux-generic/Makefile.am b/platform/linux-generic/Makefile.am
index 0d5299cb..3257d261 100644
--- a/platform/linux-generic/Makefile.am
+++ b/platform/linux-generic/Makefile.am
@@ -37,6 +37,7 @@  odpapiinclude_HEADERS = \
 		  $(srcdir)/include/odp/api/debug.h \
 		  $(srcdir)/include/odp/api/errno.h \
 		  $(srcdir)/include/odp/api/event.h \
+		  $(srcdir)/include/odp/api/support.h \
 		  $(srcdir)/include/odp/api/hash.h \
 		  $(srcdir)/include/odp/api/hints.h \
 		  $(srcdir)/include/odp/api/init.h \
diff --git a/platform/linux-generic/include/odp/api/support.h b/platform/linux-generic/include/odp/api/support.h
new file mode 100644
index 00000000..dd6abab2
--- /dev/null
+++ b/platform/linux-generic/include/odp/api/support.h
@@ -0,0 +1,34 @@ 
+/* Copyright (c) 2017, Linaro Limited
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier:     BSD-3-Clause
+ */
+
+/**
+ * @file
+ *
+ * ODP support API - platform specific header
+ */
+
+#ifndef ODP_PLAT_SUPPORT_H_
+#define ODP_PLAT_SUPPORT_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** @ingroup odp_support
+ *  @{
+ */
+
+/**
+ * @}
+ */
+
+#include <odp/api/spec/support.h>
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif