rte_free(te);
return -1;
}
+
+const struct rte_mbuf_dynfield rte_mbuf_dynfield_timestamp = {
+ .name = "rte_mbuf_dynfield_timestamp",
+ .size = sizeof(uint64_t),
+ .align = __alignof__(uint64_t),
+ .flags = 0,
+};
+int rte_mbuf_dynfield_timestamp_offset = -1;
+
+const struct rte_mbuf_dynflag rte_mbuf_dynflag_timestamp = {
+ .name = "rte_mbuf_dynflag_timestamp",
+ .flags = 0,
+};
+int rte_mbuf_dynflag_timestamp_bitnum = -1;
+
+__rte_experimental
+int rte_mbuf_dyn_timestamp_register(void)
+{
+ rte_mbuf_dynfield_timestamp_offset = rte_mbuf_dynfield_register(
+ &rte_mbuf_dynfield_timestamp);
+ if (rte_mbuf_dynfield_timestamp_offset < 0)
+ return -1;
+
+ rte_mbuf_dynflag_timestamp_bitnum = rte_mbuf_dynflag_register(
+ &rte_mbuf_dynflag_timestamp);
+ if (rte_mbuf_dynflag_timestamp_bitnum < 0)
+ return -1;
+
+ return 0;
+}
*/
#include <sys/types.h>
+#include <stdint.h>
+#include <stdbool.h>
+
/**
* Maximum length of the dynamic field or flag string.
*/
*/
#define RTE_MBUF_DYNFIELD(m, offset, type) ((type)((uintptr_t)(m) + (offset)))
+/* Placeholder for dynamic fields and flags declarations. */
+extern const struct rte_mbuf_dynfield rte_mbuf_dynfield_timestamp;
+extern int rte_mbuf_dynfield_timestamp_offset;
+extern const struct rte_mbuf_dynflag rte_mbuf_dynflag_timestamp;
+extern int rte_mbuf_dynflag_timestamp_bitnum;
+
+/**
+ * Register timestamp dynamic field and flag.
+ *
+ * @return
+ * 0 on success, or -1 on error (rte_errno is set, see
+ * rte_mbuf_dynfield_register() and rte_mbuf_dynflag_register()
+ * for details).
+ */
+__rte_experimental
+int rte_mbuf_dyn_timestamp_register(void);
+
+/**
+ * Set timestamp dynamic field and flag in mbuf.
+ *
+ * rte_mbuf_dyn_timestamp_register() must have been called first.
+ */
+__rte_experimental
+static inline void rte_mbuf_dyn_timestamp_set(struct rte_mbuf *m,
+ uint64_t timestamp)
+{
+ *RTE_MBUF_DYNFIELD(m, rte_mbuf_dynfield_timestamp_offset,
+ uint64_t *) = timestamp;
+ m->ol_flags |= (1UL << rte_mbuf_dynflag_timestamp_bitnum);
+}
+
+/**
+ * Get timestamp dynamic field value in mbuf.
+ *
+ * rte_mbuf_dyn_timestamp_register() must have been called first.
+ */
+__rte_experimental
+static inline uint64_t rte_mbuf_dyn_timestamp_get(const struct rte_mbuf *m)
+{
+ return *RTE_MBUF_DYNFIELD(m, rte_mbuf_dynfield_timestamp_offset,
+ uint64_t *);
+}
+
+/**
+ * Delete the timestamp dynamic flag in mbuf.
+ *
+ * rte_mbuf_dyn_timestamp_register() must have been called first.
+ */
+__rte_experimental
+static inline void rte_mbuf_dyn_timestamp_del(struct rte_mbuf *m)
+{
+ m->ol_flags &= ~(1UL << rte_mbuf_dynflag_timestamp_bitnum);
+}
+
+/**
+ * Check timestamp dynamic flag value in mbuf.
+ *
+ * rte_mbuf_dyn_timestamp_register() must have been called first.
+ */
+__rte_experimental
+static inline bool rte_mbuf_dyn_timestamp_avail(const struct rte_mbuf *m)
+{
+ return m->ol_flags & (1UL << rte_mbuf_dynflag_timestamp_bitnum);
+}
+
+
#endif