> -----Original Message-----
> From: lng-odp [mailto:lng-odp-boun...@lists.linaro.org] On Behalf Of
> Bogdan Pricope
> Sent: Thursday, June 22, 2017 9:56 AM
> To: lng-odp@lists.linaro.org
> Subject: [lng-odp] [API-NEXTv2] api: ipsec: reorganize
> odp_ipsec_sa_param_t structure based on SA direction
> 
> Signed-off-by: Bogdan Pricope <bogdan.pric...@linaro.org>
> ---
>  include/odp/api/spec/ipsec.h | 114 ++++++++++++++++++++++++--------------
> -----
>  1 file changed, 63 insertions(+), 51 deletions(-)
> 
> diff --git a/include/odp/api/spec/ipsec.h b/include/odp/api/spec/ipsec.h
> index e602e4b..5373ede 100644
> --- a/include/odp/api/spec/ipsec.h
> +++ b/include/odp/api/spec/ipsec.h
> @@ -604,8 +604,8 @@ typedef enum odp_ipsec_ip_version_t {
>   * IPSEC Security Association (SA) parameters
>   */
>  typedef struct odp_ipsec_sa_param_t {
> -     /** IPSEC SA direction: inbound or outbound */
> -     odp_ipsec_dir_t dir;

Direction is important for selecting parameters. It should remain the first 
field of the struct.


> +     /** SPI value */
> +     uint32_t spi;

SPI is simple value and should remain after more complex configuration options, 
which define how the SA works.


> 
>       /** IPSEC protocol: ESP or AH */
>       odp_ipsec_protocol_t proto;
> @@ -616,51 +616,12 @@ typedef struct odp_ipsec_sa_param_t {
>       /** Parameters for crypto and authentication algorithms */
>       odp_ipsec_crypto_param_t crypto;
> 
> -     /** Parameters for tunnel mode */
> -     odp_ipsec_tunnel_param_t tunnel;
> -
> -     /** Fragmentation mode */
> -     odp_ipsec_frag_mode_t frag_mode;
> -
> -     /** Various SA option flags */
> -     odp_ipsec_sa_opt_t opt;
> -

Keep opt here before the union. The inbound/outbound union should be the last 
thing in the struct. Everything before it is common for both directions.


>       /** SA lifetime parameters */
>       odp_ipsec_lifetime_t lifetime;
> 
> -     /** SA lookup mode */
> -     odp_ipsec_lookup_mode_t lookup_mode;
> -
> -     /** Minimum anti-replay window size. Use 0 to disable anti-
> replay
> -       * service. */
> -     uint32_t antireplay_ws;
> -
>       /** Initial sequence number */
>       uint64_t seq;

This may be moved to outbound struct.


> 
> -     /** SPI value */
> -     uint32_t spi;
> -
> -     /** Additional inbound SA lookup parameters. Values are
> considered
> -      *  only in ODP_IPSEC_LOOKUP_DSTADDR_SPI lookup mode. */
> -     struct {
> -             /** Select IP version
> -              */
> -             odp_ipsec_ip_version_t ip_version;
> -
> -             /** IP destination address (NETWORK ENDIAN) */
> -             void    *dst_addr;
> -
> -     } lookup_param;
> -
> -     /** MTU for outbound IP fragmentation offload
> -      *
> -      *  This is the maximum length of IP packets that outbound
> IPSEC
> -      *  operations may produce. The value may be updated later with
> -      *  odp_ipsec_mtu_update().
> -      */
> -     uint32_t mtu;
> -
>       /** Select pipelined destination for resulting events
>        *
>        *  Asynchronous and inline modes generate events. Select where
> @@ -677,16 +638,67 @@ typedef struct odp_ipsec_sa_param_t {
>        */
>       odp_queue_t dest_queue;
> 
> -     /** Classifier destination CoS for resulting packets
> -      *
> -      *  Successfully decapsulated packets are sent to
> classification
> -      *  through this CoS. Other resulting events are sent to
> 'dest_queue'.
> -      *  This field is considered only when 'pipeline' is
> -      *  ODP_IPSEC_PIPELINE_CLS. The CoS must not be shared between
> any pktio
> -      *  interface default CoS. The maximum number of different CoS
> supported
> -      *  is defined by IPSEC capability max_cls_cos.
> -      */
> -     odp_cos_t dest_cos;
> +     /** IPSEC SA direction: inbound or outbound */
> +     odp_ipsec_dir_t dir;
> +
> +     /** IPSEC SA direction dependent parameters */
> +     union {
> +             /** Inbound specific parameters */
> +             struct {
> +                     /** SA lookup mode */
> +                     odp_ipsec_lookup_mode_t lookup_mode;
> +
> +                     /** Additional inbound SA lookup
> parameters. Values are
> +                     *  considered only in
> ODP_IPSEC_LOOKUP_DSTADDR_SPI
> +                     *  lookup mode. */
> +                     struct {
> +                             /** Select IP version
> +                             */
> +                             odp_ipsec_ip_version_t
> ip_version;
> +
> +                             /** IP destination address
> (NETWORK ENDIAN) */
> +                             void    *dst_addr;
> +
> +                     } lookup_param;
> +
> +                     /** Minimum anti-replay window size. Use 0
> to disable
> +                     *  anti-replay service. */
> +                     uint32_t antireplay_ws;
> +
> +                     /** Classifier destination CoS for
> resulting packets
> +                     *
> +                     *  Successfully decapsulated packets are
> sent to
> +                     *  classification through this CoS. Other
> resulting
> +                     *  events are sent to 'dest_queue'.
> +                     *  This field is considered only when
> 'pipeline' is
> +                     *  ODP_IPSEC_PIPELINE_CLS. The CoS must
> not be shared
> +                     *  between any pktio interface default
> CoS. The maximum
> +                     *  number of different CoS supported is
> defined by
> +                     *  IPSEC capability max_cls_cos.
> +                     */
> +                     odp_cos_t dest_cos;
> +             } inbound;
> +
> +             /** Outbound specific parameters */
> +             struct {
> +                     /** Parameters for tunnel mode */
> +                     odp_ipsec_tunnel_param_t tunnel;
> +
> +                     /** MTU for outbound IP fragmentation
> offload
> +                     *
> +                     *  This is the maximum length of IP
> packets that
> +                     *  outbound IPSEC operations may produce.
> The value may
> +                     *  be updated later with
> odp_ipsec_mtu_update().
> +                     */
> +                     uint32_t mtu;
> +
> +                     /** Fragmentation mode */
> +                     odp_ipsec_frag_mode_t frag_mode;
> +             } outbound;
> +     };


The union should be the last field on the SA struct.

-Petri

> +
> +     /** Various SA option flags */
> +     odp_ipsec_sa_opt_t opt;
> 
>       /** User defined SA context pointer
>        *
> --
> 1.9.1

Reply via email to