> -----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