On Tue, Aug 29, 2017 at 6:06 PM, shally verma <shallyvermacav...@gmail.com> wrote: > On Tue, Aug 29, 2017 at 5:02 PM, Savolainen, Petri (Nokia - FI/Espoo) > <petri.savolai...@nokia.com> wrote: >> >> >>> -----Original Message----- >>> From: shally verma [mailto:shallyvermacav...@gmail.com] >>> Sent: Tuesday, August 29, 2017 10:26 AM >>> To: Narayana Prasad Athreya <pathr...@caviumnetworks.com> >>> Cc: Savolainen, Petri (Nokia - FI/Espoo) <petri.savolai...@nokia.com>; >>> Github ODP bot <odp...@yandex.ru>; lng-odp@lists.linaro.org; Narayana, >>> Prasad Athreya <prasadathreya.naray...@cavium.com>; Mahipal Challa >>> <mcha...@cavium.com>; Verma, Shally <shally.ve...@cavium.com> >>> Subject: Re: [lng-odp] [PATCH API-NEXT v8 1/1] comp: compression spec >>> >>> Based on last discussion, I was reworking to add odp_comp_op_pkt () >>> API based on Crypto design. Help me to answer with these questions: >>> >>> 1. Current crypto packet base API is not giving Error code as an >>> output to its sync version i.e. in int odp_crypto_op(const >>> odp_packet_t pkt_in[],......), I do not see where it is returning >>> odp_crypto_packet_result_t. Can anyone help? >> >> Error codes are part of operation results: >> >> /** >> * Get crypto operation results from an crypto processed packet >> * >> * Successful crypto operations of all types (SYNC and ASYNC) produce packets >> * which contain crypto result metadata. This function copies the operation >> * results from an crypto processed packet. Event subtype of this kind of >> * packet is ODP_EVENT_PACKET_crypto. Results are undefined if a non-crypto >> * processed packet is passed as input. >> * >> * @param packet An crypto processed packet >> (ODP_EVENT_PACKET_CRYPTO) >> * @param[out] result Pointer to operation result for output >> * >> * @retval 0 On success >> * @retval <0 On failure >> */ >> int odp_crypto_result(odp_crypto_packet_result_t *result, >> odp_packet_t packet); > > Ok. That seems user need to make explicit call to this API to get > result, if he want. > So this is optional call in crypto context? > Alongside a question of retrieving results for synchronous operations, have one more questions - in crypto, I dont see separate output packet data range. So, does it mean it writes to same offset and uses same length as mentioned for input packet?
Thanks Shally >> >> /** >> * Crypto packet API operation result >> */ >> typedef struct odp_crypto_packet_result_t { >> /** Request completed successfully */ >> odp_bool_t ok; >> >> /** Cipher status */ >> odp_crypto_op_status_t cipher_status; >> >> /** Authentication status */ >> odp_crypto_op_status_t auth_status; >> >> } odp_crypto_packet_result_t; >> >> /** >> * Cryto API per packet operation completion status >> */ >> typedef struct odp_crypto_op_status { >> /** Algorithm specific return code */ >> odp_crypto_alg_err_t alg_err; >> >> /** Hardware specific return code */ >> odp_crypto_hw_err_t hw_err; >> >> } odp_crypto_op_status_t; >> >> /** >> * Crypto API algorithm return code >> */ >> typedef enum { >> /** Algorithm successful */ >> ODP_CRYPTO_ALG_ERR_NONE, >> /** Invalid data block size */ >> ODP_CRYPTO_ALG_ERR_DATA_SIZE, >> /** Key size invalid for algorithm */ >> ODP_CRYPTO_ALG_ERR_KEY_SIZE, >> /** Computed ICV value mismatch */ >> ODP_CRYPTO_ALG_ERR_ICV_CHECK, >> /** IV value not specified */ >> ODP_CRYPTO_ALG_ERR_IV_INVALID, >> } odp_crypto_alg_err_t; >> >> >>> >>> 2. Current crypto version of odp_crypto_op(odp_pkt_t pkt_in[] ...) >>> does not have two separate version for encryption and decryption where >>> as in Compression, we added two. One for compress and another for >>> decompress. >>> So do we want to retain two separate flavor or unify like crypto >>> packet based api? Ex. >>> odp_comp_op_pkt ( ... ) OR >>> odp_comp_compress_pkt( ...), >>> odp_comp_decompress_pkt(), >>> odp_comp_compress_pkt_enq() and so on...? >> >> Crypto has single operation, IPSEC has two operations (inbound vs outbound). >> So, both styles are used today. Benefits of an operation per direction are: >> * more readable code: odp_comp_compress() vs odp_comp_op() >> * possibility to have different set of arguments (parameters) for each >> direction. E.g. IPSEC does IP fragmentation on output direction and thus >> needs extra parameters for that, those params are not defined on inbound >> direction. >> * cleaner specification of different operations e.g. "... output of >> odp_comp_compress()..." vs "... output of odp_comp_op() in compress mode >> ...." >> * easier to extend since a new feature can be added to one side without >> changing the spec for the other side >> >> >> BTW, since most of our operations process packets, we don't need to >> highlight it with "pkt". I'd name odp_comp_compress() for packets, and then >> later on add odp_comp_compress_mem(), odp_comp_compress_from_mem(), etc for >> mem -> mem, pkt -> mem operations. > > Ok. no issues. I will retain separate flavor and keep API name in sync > to crypto. > > Thanks > Shally > >> >> -Petri