Hi David,

> >
> > >
> > >  /** Status of crypto operation */
> > > @@ -121,6 +123,13 @@ struct rte_crypto_op {
> > >           struct rte_crypto_asym_op asym[0];
> > >           /**< Asymmetric operation parameters */
> > >
> > > +#ifdef RTE_LIBRTE_SECURITY
> > > +         uint8_t security[0];
> > > +         /**< Security operation parameters
> > > +          * - Must be accessed through a rte_security_op pointer
> > > +          */
> > > +#endif
> > > +
> > >   }; /**< operation specific parameters */  };
> >
> > Is there any point to have this extra level of indirection?
> > Might be simply:
> >
> > enum rte_crypto_op_type {
> >     ....
> > +   RTE_CRYPTO_OP_TYPE_SEC_DOCSIS,
> > };
> > ...
> > struct rte_crypto_op {
> >     ....
> >     __extension__
> >         union {
> >                 struct rte_crypto_sym_op sym[0];
> >                 /**< Symmetric operation parameters */
> >
> >                 struct rte_crypto_asym_op asym[0];
> >                 /**< Asymmetric operation parameters */
> >
> > +   struct rte_security_docsis_op docsis[0];
> >
> >         }; /**< operation specific parameters */
> >
> > ?
> [DC] This was to allow some form of extensibility and not to limit this to 
> just DOCSIS.
> If it's felt that having the extra level of indirection is overkill, it can 
> be easily changed.
> 
> However, we cannot include a struct of type 'struct rte_security_docsis_op' 
> (or 'struct rte_security_op')
> directly here, without creating nasty circular dependency of includes between 
> rte_cryptodev and
> rte_security.
> 
> I had tried defining an opaque version 'struct rte_security_op' (i.e. no 
> fields within the struct) here
> in rte_crypto.h, but the compiler complained that it couldn't determine the 
> size of the struct,
> even though it's a zero length array.
> 
> That is why I had to use the uint8_t in 'uint8_t security[0];' - I don't like 
> this, but I couldn't find
> another way that kept the compiler happy and didn't create a circular 
> dependency.

I see... would it be an option to name this struct 'struct rte_sym_docsis_op and
and move actual definition inside lib/librte_cryptodev/rte_crypto_sym.h? 



Reply via email to