On 26/10/17 14:55, Savolainen, Petri (Nokia - FI/Espoo) wrote: > > >> -----Original Message----- >> From: lng-odp [mailto:lng-odp-boun...@lists.linaro.org] On Behalf Of >> Github ODP bot >> Sent: Wednesday, October 25, 2017 12:00 PM >> To: lng-odp@lists.linaro.org >> Subject: [lng-odp] [PATCH API-NEXT v4 1/3] api: ipsec: rework >> ODP_IPSEC_SA_DISABLE into packet error >> >> From: Dmitry Eremin-Solenikov <dmitry.ereminsoleni...@linaro.org> >> >> According to the discussion on mailing list, most of implementations >> will not be able to support odp_ipsec_sa_disable() status event >> directly. Instead they will submit a dummy packet to that SA. Then >> after receiving this packet after odp_ipsec_result() will detect this >> packet and will report it as a packet with >> odp_ipsec_error_t->sa_disabled bit set. >> >> Signed-off-by: Dmitry Eremin-Solenikov <dmitry.ereminsoleni...@linaro.org> >> Cc: Nikhil Agarwal <nikhil.agar...@linaro.org> >> Cc: Balasubramanian Manoharan <bala.manoha...@linaro.org> >> --- >> /** Email created from pull request 256 (lumag:ipsec_sa_disable_v2) >> ** https://github.com/Linaro/odp/pull/256 >> ** Patch: https://github.com/Linaro/odp/pull/256.patch >> ** Base sha: 825f75ed8644ef57c5648961e7982daf13cd9375 >> ** Merge commit sha: ba520d0a3f4c46777c7aedca029e9979a89c69e7 >> **/ >> include/odp/api/spec/ipsec.h | 44 ++++++++++++++++++++------------------- >> ----- >> 1 file changed, 20 insertions(+), 24 deletions(-) >> >> diff --git a/include/odp/api/spec/ipsec.h b/include/odp/api/spec/ipsec.h >> index 26e852fca..b9ad282ce 100644 >> --- a/include/odp/api/spec/ipsec.h >> +++ b/include/odp/api/spec/ipsec.h >> @@ -843,10 +843,12 @@ odp_ipsec_sa_t odp_ipsec_sa_create(const >> odp_ipsec_sa_param_t *param); >> * >> * When in synchronous operation mode, the call will return when it's >> possible >> * to destroy the SA. In asynchronous mode, the same is indicated by an >> - * ODP_EVENT_IPSEC_STATUS event sent to the queue specified for the SA. >> The >> - * status event is guaranteed to be the last event for the SA, i.e. all >> - * in-progress operations have completed and resulting events (including >> status >> - * events) have been enqueued before it. >> + * artificial packet event sent to the queue specified for the SA having >> + * sa_disabled error bit set in the odp_ipsec_packet_result_t returned by >> + * odp_ipsec_result(). The packet is guaranteed to be the last event for >> + * the SA, i.e. all in-progress operations have completed and resulting >> events >> + * (including status events) have been enqueued before it. No packets >> will come >> + * from SA after this one. > > This still lacks the definition of what is the difference between an > artificial packet vs a normal packet. We could define it e.g. by saying that > length is always zero and application must not do anything else with it than > free it. But then, why it's a packet anyway? Why it would not then be e.g. a > ipsec status event (which is not a packet, but could be implemented as an > artificial packet).
No difference from my POV. Processing path for all packets coming from IPsec: - Error packet. Process error flags, drop the packet. - Not an error. Process warning flags, forward the packet. > > The idea of event type vs sub-event type is that: > 1) all events of the same base type (e.g. packet) contain the same metadata > and can be processed the same way. For example, someone may write a generic > packet statistics (application) module, and plug that before and after an > ipsec termination (application) module, without need to know that packets > before ipsec module carry extra ipsec metadata (from inline inbound ipsec). As long as they don't carry error flag. odp_packet_has_error(), etc. BTW: I should check that my implementation sets that flag. > 2) sub-type adds metadata and other properties to the base type > > An artificial packet would not fit in either category, it would be a > non-packet. I somewhat agree with you here. I would prefer separate event for SA_DISABLE. However some (most?) hardware ATM will not be able to support such an event directly. And an application will need separate processing for error packets anyway. > Usually, application receives multiple event types anyway: e.g. packets and > timeouts. So, for application it would not be an issue to have one additional > switch-case for IPSEC status events. API integrity is more important than > (potential) save of couple if-else branches. It is not a problem of application, but rather an implementation problem. > So, I think this solution is not complete yet and I don't see how it would in > the end make a real difference to the current status event API. -- With best wishes Dmitry