app/eventdev: switch sequence number to dynamic mbuf field
[dpdk.git] / lib / librte_security / rte_security.h
index 16839e5..88d31de 100644 (file)
@@ -1,5 +1,5 @@
 /* SPDX-License-Identifier: BSD-3-Clause
- * Copyright 2017,2019 NXP
+ * Copyright 2017,2019-2020 NXP
  * Copyright(c) 2017-2020 Intel Corporation.
  */
 
@@ -27,6 +27,7 @@ extern "C" {
 #include <rte_common.h>
 #include <rte_crypto.h>
 #include <rte_mbuf.h>
+#include <rte_mbuf_dyn.h>
 #include <rte_memory.h>
 #include <rte_mempool.h>
 
@@ -290,7 +291,15 @@ struct rte_security_pdcp_xform {
         * per packet HFN in place of IV. PMDs will extract the HFN
         * and perform operations accordingly.
         */
-       uint32_t hfn_ovrd;
+       uint8_t hfn_ovrd;
+       /** In case of 5G NR, a new protocol (SDAP) header may be set
+        * inside PDCP payload which should be authenticated but not
+        * encrypted. Hence, driver should be notified if SDAP is
+        * enabled or not, so that SDAP header is not encrypted.
+        */
+       uint8_t sdap_enabled;
+       /** Reserved for future */
+       uint16_t reserved;
 };
 
 /** DOCSIS direction */
@@ -386,6 +395,7 @@ struct rte_security_session {
  * @param   instance   security instance
  * @param   conf       session configuration parameters
  * @param   mp         mempool to allocate session objects from
+ * @param   priv_mp    mempool to allocate session private data objects from
  * @return
  *  - On success, pointer to session
  *  - On failure, NULL
@@ -393,7 +403,8 @@ struct rte_security_session {
 struct rte_security_session *
 rte_security_session_create(struct rte_security_ctx *instance,
                            struct rte_security_session_conf *conf,
-                           struct rte_mempool *mp);
+                           struct rte_mempool *mp,
+                           struct rte_mempool *priv_mp);
 
 /**
  * Update security session as specified by the session configuration
@@ -441,6 +452,47 @@ int
 rte_security_session_destroy(struct rte_security_ctx *instance,
                             struct rte_security_session *sess);
 
+/** Device-specific metadata field type */
+typedef uint64_t rte_security_dynfield_t;
+/** Dynamic mbuf field for device-specific metadata */
+extern int rte_security_dynfield_offset;
+
+/**
+ * @warning
+ * @b EXPERIMENTAL: this API may change without prior notice
+ *
+ * Get pointer to mbuf field for device-specific metadata.
+ *
+ * For performance reason, no check is done,
+ * the dynamic field may not be registered.
+ * @see rte_security_dynfield_is_registered
+ *
+ * @param      mbuf    packet to access
+ * @return pointer to mbuf field
+ */
+__rte_experimental
+static inline rte_security_dynfield_t *
+rte_security_dynfield(struct rte_mbuf *mbuf)
+{
+       return RTE_MBUF_DYNFIELD(mbuf,
+               rte_security_dynfield_offset,
+               rte_security_dynfield_t *);
+}
+
+/**
+ * @warning
+ * @b EXPERIMENTAL: this API may change without prior notice
+ *
+ * Check whether the dynamic field is registered.
+ *
+ * @return true if rte_security_dynfield_register() has been called.
+ */
+__rte_experimental
+static inline bool rte_security_dynfield_is_registered(void)
+{
+       return rte_security_dynfield_offset >= 0;
+}
+
 /**
  *  Updates the buffer with device-specific defined metadata
  *