Hi, A few questions and comments:
Can there be VLAN tags in the received packets? How do I know what L2 headers a received packet originally had and through which interface it was received? How do I fall back to look-a-side mode when e.g. an IPsec packet came in inside other tunnel (e.g. VxLAN, GRE) that I need to terminate first in SW and then give the packet to ODP for IPsec decapsulation using the same SA that is also used in inline acceleration? And the same for outbound processing. What happens when there is a policy but no session (since IKE has not negotiated the SA yet and expects a traffic based trigger)? How do I get to know which SA I need to negotiate? How do I implement byte based SA lifetimes? I think some sort of advance notification about impending byte based life time expiry (and also seqno overflow) would be needed. Should there be support for ordering/prioritization of policy selectors so that overlapping policies could be supported? Should there be discard rules? Does ODP check that a decapsulated packet matches a policy associated with the SA the packet used? Virtual routing and forwarding support (i.e. multiple IPsec instances) would be nice. That would mean that all lookups should take also VRF ID (or IPsec context) into account. VRF ID would be derived from network port plus VLAN tag. Keys for crypto-algorithms seem to be missing. Where is MTU information for the fragmentation decision? How can I control which packets can be fragmented and which not (handling of locally originated and forwarded traffic may have to be different). > Application creates an odp_ipsec_session_t handle which is configured > with [...] and additionally an output queue Is there any practical scalability limit on the number of queues? What if I have 100 k inbodund SAs and want to know through which SA each packet was received? Can I just create 100 k queues and let the scheduler handle it? > ODP_IPSEC_PROTO_AH_ESP Doesn't this need two separate SA (and thus two SPIs etc)? In that case single session cannot contain the parameters for both. > /* In tunnel mode source and destination address are copied > * from inner header to outer header */ > odp_bool_t header_preservation; I am not sure if this is very useful. How are the tunnel endpoints specified in the general case when they cannot be copied from the inner header? > int odp_ipsec_send(odp_packet_t pkt); A packet that is sent out needs an ethernet header. Where does it come from? I suppose it could be part of the session data, but that would imply that it must be possible to update the session data on the fly when routes change. BR, Janne -----Original Message----- From: lng-odp [mailto:lng-odp-boun...@lists.linaro.org] On Behalf Of Bala Manoharan Sent: Monday, September 26, 2016 6:51 PM To: LNG ODP Mailman List <lng-odp@lists.linaro.org> Subject: [lng-odp] IpSec protocol offload proposal Hi Team, Pls find the link to IpSec protocol offload proposal. https://docs.google.com/document/d/1G6IXm9ydpFZNKU_J5G8HVCkILmddq0GiJ36qhrfzmpw/edit?usp=sharing Regards, Bala