@@ -51,9 +51,7 @@ include_HEADERS = \
$(top_srcdir)/platform/linux-generic/include/api/odp_ticketlock.h \
$(top_srcdir)/platform/linux-generic/include/api/odp_time.h \
$(top_srcdir)/platform/linux-generic/include/api/odp_timer.h \
- $(top_srcdir)/platform/linux-generic/include/api/odp_version.h \
- $(top_srcdir)/platform/linux-generic/include/api/odp_pktio_socket.h \
- $(srcdir)/include/api/odp_pktio_types.h
+ $(top_srcdir)/platform/linux-generic/include/api/odp_version.h
subdirheadersdir = $(includedir)/helper
subdirheaders_HEADERS = \
@@ -55,30 +55,76 @@ extern "C" {
#define ODP_STATIC_ASSERT(cond, msg) _Static_assert(1, msg)
/**
+ * ODP log level.
+ */
+typedef enum odp_log_level {
+ ODP_LOG_DBG,
+ ODP_LOG_ERR,
+ ODP_LOG_UNIMPLEMENTED,
+ ODP_LOG_ABORT,
+ ODP_LOG_PRINT
+} odp_log_level_e;
+
+/**
+ * ODP default LOG macro.
+ */
+#define ODP_LOG(level, fmt, ...) \
+do { \
+ switch (level) { \
+ case ODP_LOG_ERR: \
+ fprintf(stderr, "%s:%d:%s():" fmt, __FILE__, \
+ __LINE__, __func__, ##__VA_ARGS__); \
+ break; \
+ case ODP_LOG_DBG: \
+ if (ODP_DEBUG_PRINT == 1) \
+ fprintf(stderr, "%s:%d:%s():" fmt, __FILE__, \
+ __LINE__, __func__, ##__VA_ARGS__); \
+ break; \
+ case ODP_LOG_PRINT: \
+ fprintf(stdout, "%s:%d:%s():" fmt, __FILE__, \
+ __LINE__, __func__, ##__VA_ARGS__); \
+ break; \
+ case ODP_LOG_ABORT: \
+ fprintf(stderr, "%s:%d:%s(): " fmt, __FILE__, \
+ __LINE__, __func__, ##__VA_ARGS__); \
+ abort(); \
+ break; \
+ case ODP_LOG_UNIMPLEMENTED: \
+ fprintf(stderr, \
+ "%s:%d:The function %s() is not implemented\n" \
+ fmt, __FILE__, __LINE__, __func__, ##__VA_ARGS__); \
+ break; \
+ default: \
+ fprintf(stderr, "Unknown LOG level"); \
+ break;\
+ } \
+} while (0)
+
+/**
+ * Printing macro, which prints output when the application
+ * calls one of the ODP APIs specifically for dumping internal data.
+ */
+#define ODP_PRINT(fmt, ...) \
+ ODP_LOG(ODP_LOG_PRINT, fmt, ##__VA_ARGS__)
+
+/**
* Debug printing macro, which prints output when DEBUG flag is set.
*/
#define ODP_DBG(fmt, ...) \
- do { if (ODP_DEBUG_PRINT == 1) \
- printf(fmt, ##__VA_ARGS__); \
- } while (0)
+ ODP_LOG(ODP_LOG_DBG, fmt, ##__VA_ARGS__)
/**
* Print output to stderr (file, line and function).
*/
#define ODP_ERR(fmt, ...) \
-do { fprintf(stderr, "%s:%d:%s(): " fmt, __FILE__, \
- __LINE__, __func__, ##__VA_ARGS__); \
-} while (0)
+ ODP_LOG(ODP_LOG_ERR, fmt, ##__VA_ARGS__)
/**
* Print output to stderr (file, line and function),
* then abort.
*/
#define ODP_ABORT(fmt, ...) \
-do { fprintf(stderr, "%s:%d:%s(): " fmt, __FILE__, \
- __LINE__, __func__, ##__VA_ARGS__); \
- abort(); \
-} while (0)
+ ODP_LOG(ODP_LOG_ABORT, fmt, ##__VA_ARGS__)
#ifdef __cplusplus
}
@@ -60,7 +60,7 @@ odp_packet_t odp_packet_from_buffer(odp_buffer_t buf);
*
* @return Buffer handle
*/
-odp_buffer_t odp_buffer_from_packet(odp_packet_t pkt);
+odp_buffer_t odp_packet_to_buffer(odp_packet_t pkt);
/**
* Set the packet length
@@ -98,53 +98,49 @@ void odp_packet_set_ctx(odp_packet_t buf, const void *ctx);
void *odp_packet_get_ctx(odp_packet_t buf);
/**
- * Get address to the start of the packet buffer
+ * Packet buffer start address
+ *
+ * Returns a pointer to the start of the packet buffer. The address is not
+ * necessarily the same as packet data address. E.g. on a received Ethernet
+ * frame, the protocol header may start 2 or 6 bytes within the buffer to
+ * ensure 32 or 64-bit alignment of the IP header.
*
- * The address of the packet buffer is not necessarily the same as the start
- * address of the received frame, e.g. an eth frame may be offset by 2 or 6
- * bytes to ensure 32 or 64-bit alignment of the IP header.
* Use odp_packet_l2(pkt) to get the start address of a received valid frame
- * or odp_packet_start(pkt) to get the start address even if no valid L2 header
- * could be found.
+ * or odp_packet_data(pkt) to get the current packet data address.
*
* @param pkt Packet handle
*
* @return Pointer to the start of the packet buffer
*
- * @see odp_packet_l2(), odp_packet_start()
+ * @see odp_packet_l2(), odp_packet_data()
*/
-uint8_t *odp_packet_buf_addr(odp_packet_t pkt);
+uint8_t *odp_packet_addr(odp_packet_t pkt);
/**
- * Get pointer to the start of the received frame
- *
- * The address of the packet buffer is not necessarily the same as the start
- * address of the received frame, e.g. an eth frame may be offset by 2 or 6
- * bytes to ensure 32 or 64-bit alignment of the IP header.
- * Use odp_packet_l2(pkt) to get the start address of a received valid eth frame
+ * Packet data address
*
- * odp_packet_start() will always return a pointer to the start of the frame,
- * even if the frame is unrecognized and no valid L2 header could be found.
+ * Returns the current packet data address. When a packet is received from
+ * packet input, the data address points to the first byte of the packet.
*
* @param pkt Packet handle
*
- * @return Pointer to the start of the received frame
+ * @return Pointer to the packet data
*
- * @see odp_packet_l2(), odp_packet_buf_addr()
+ * @see odp_packet_l2(), odp_packet_addr()
*/
-uint8_t *odp_packet_start(odp_packet_t pkt);
+uint8_t *odp_packet_data(odp_packet_t pkt);
/**
* Get pointer to the start of the L2 frame
*
* The L2 frame header address is not necessarily the same as the address of the
- * packet buffer, see odp_packet_buf_addr()
+ * packet buffer, see odp_packet_addr()
*
* @param pkt Packet handle
*
* @return Pointer to L2 header or NULL if not found
*
- * @see odp_packet_buf_addr(), odp_packet_start()
+ * @see odp_packet_addr(), odp_packet_data()
*/
uint8_t *odp_packet_l2(odp_packet_t pkt);
@@ -23,8 +23,6 @@ extern "C" {
#include <odp_packet.h>
#include <odp_queue.h>
-#include <odp_pktio_types.h>
-
/** ODP packet IO handle */
typedef uint32_t odp_pktio_t;
@@ -40,8 +38,7 @@ typedef uint32_t odp_pktio_t;
*
* @return ODP packet IO handle or ODP_PKTIO_INVALID on error
*/
-odp_pktio_t odp_pktio_open(const char *dev, odp_buffer_pool_t pool,
- odp_pktio_params_t *params);
+odp_pktio_t odp_pktio_open(const char *dev, odp_buffer_pool_t pool);
/**
* Close an ODP packet IO instance
deleted file mode 100644
@@ -1,45 +0,0 @@
-
-/* Copyright (c) 2013, Linaro Limited
- * All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-#ifndef ODP_PKTIO_TYPES_H
-#define ODP_PKTIO_TYPES_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* We should ensure that future enum values will never overlap, otherwise
- * applications that want netmap suport might get in trouble if the odp lib
- * was not built with netmap support and there are more types define below
- */
-
-typedef enum {
- ODP_PKTIO_TYPE_SOCKET_BASIC = 0x1,
- ODP_PKTIO_TYPE_SOCKET_MMSG,
- ODP_PKTIO_TYPE_SOCKET_MMAP,
- ODP_PKTIO_TYPE_NETMAP,
- ODP_PKTIO_TYPE_DPDK,
-} odp_pktio_type_t;
-
-#include <odp_pktio_socket.h>
-#ifdef ODP_HAVE_NETMAP
-#include <odp_pktio_netmap.h>
-#endif
-
-typedef union odp_pktio_params_t {
- odp_pktio_type_t type;
- socket_params_t sock_params;
-#ifdef ODP_HAVE_NETMAP
- netmap_params_t nm_params;
-#endif
-} odp_pktio_params_t;
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
@@ -25,12 +25,21 @@ extern "C" {
#endif
#include <odp_packet_dpdk.h>
+/**
+ * Packet IO types
+ */
+typedef enum {
+ ODP_PKTIO_TYPE_SOCKET_BASIC = 0x1,
+ ODP_PKTIO_TYPE_SOCKET_MMSG,
+ ODP_PKTIO_TYPE_SOCKET_MMAP,
+} odp_pktio_type_t;
+
struct pktio_entry {
odp_spinlock_t lock; /**< entry spinlock */
int taken; /**< is entry taken(1) or free(0) */
odp_queue_t inq_default; /**< default input queue, if set */
odp_queue_t outq_default; /**< default out queue */
- odp_pktio_params_t params; /**< pktio parameters */
+ odp_pktio_type_t type; /**< pktio type */
pkt_dpdk_t pkt_dpdk; /**< using DPDK API for IO */
};
@@ -45,7 +45,8 @@ int odp_init_dpdk(void)
return 0;
}
-int odp_init_global(void)
+int odp_init_global(odp_init_t *params ODP_UNUSED,
+ odp_platform_init_t *platform_params ODP_UNUSED)
{
odp_thread_init_global();
@@ -95,9 +96,9 @@ int odp_init_global(void)
}
-int odp_init_local(int thr_id)
+int odp_init_local(void)
{
- odp_thread_init_local(thr_id);
+ odp_thread_init_local();
if (odp_pktio_init_local()) {
ODP_ERR("ODP packet io local init failed.\n");
@@ -35,7 +35,7 @@ static void *odp_run_start_routine(void *arg)
odp_start_args_t *start_args = arg;
/* ODP thread local init */
- odp_init_local(start_args->thr_id);
+ odp_init_local();
return start_args->start_routine(start_args->arg);
}
@@ -66,7 +66,6 @@ void odph_linux_pthread_create(odph_linux_pthread_t *thread_tbl, int num,
start_args->start_routine = start_routine;
start_args->arg = arg;
- odp_thread_create(cpu);
start_args->thr_id = cpu;
/* If not master core */
if (cpu != 0) {
@@ -41,7 +41,7 @@ odp_packet_t odp_packet_from_buffer(odp_buffer_t buf)
return (odp_packet_t)buf;
}
-odp_buffer_t odp_buffer_from_packet(odp_packet_t pkt)
+odp_buffer_t odp_packet_to_buffer(odp_packet_t pkt)
{
return (odp_buffer_t)pkt;
}
@@ -88,12 +88,12 @@ size_t odp_packet_get_len(odp_packet_t pkt)
return mb->pkt_len;
}
-uint8_t *odp_packet_buf_addr(odp_packet_t pkt)
+uint8_t *odp_packet_addr(odp_packet_t pkt)
{
- return odp_buffer_addr(odp_buffer_from_packet(pkt));
+ return odp_buffer_addr(odp_packet_to_buffer(pkt));
}
-uint8_t *odp_packet_start(odp_packet_t pkt)
+uint8_t *odp_packet_data(odp_packet_t pkt)
{
struct rte_mbuf *mb = &(odp_packet_hdr(pkt)->buf_hdr.mb);
return ((uint8_t *)(mb->buf_addr) + mb->data_off);
@@ -107,7 +107,7 @@ uint8_t *odp_packet_l2(odp_packet_t pkt)
if (odp_unlikely(offset == ODP_PACKET_OFFSET_INVALID))
return NULL;
- return odp_packet_start(pkt) + offset;
+ return odp_packet_data(pkt) + offset;
}
size_t odp_packet_l2_offset(odp_packet_t pkt)
@@ -127,7 +127,7 @@ uint8_t *odp_packet_l3(odp_packet_t pkt)
if (odp_unlikely(offset == ODP_PACKET_OFFSET_INVALID))
return NULL;
- return odp_packet_start(pkt) + offset;
+ return odp_packet_data(pkt) + offset;
}
size_t odp_packet_l3_offset(odp_packet_t pkt)
@@ -147,7 +147,7 @@ uint8_t *odp_packet_l4(odp_packet_t pkt)
if (odp_unlikely(offset == ODP_PACKET_OFFSET_INVALID))
return NULL;
- return odp_packet_start(pkt) + offset;
+ return odp_packet_data(pkt) + offset;
}
size_t odp_packet_l4_offset(odp_packet_t pkt)
@@ -200,7 +200,7 @@ void odp_packet_parse(odp_packet_t pkt, size_t len, size_t frame_offset)
pkt_hdr->input_flags.l2 = 1;
pkt_hdr->l2_offset = 0;
- eth = (odph_ethhdr_t *)odp_packet_start(pkt);
+ eth = (odph_ethhdr_t *)odp_packet_data(pkt);
ethtype = odp_be_to_cpu_16(eth->type);
vlan = (odph_vlanhdr_t *)ð->type;
@@ -367,7 +367,7 @@ void odp_packet_print(odp_packet_t pkt)
printf("\n%s\n", str);
rte_pktmbuf_dump(stdout, &hdr->buf_hdr.mb, 32);
- p = odp_packet_start(pkt);
+ p = odp_packet_data(pkt);
printf("00000000: %02X %02X %02X %02X %02X %02X %02X %02X\n",
p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7]);
printf("00000008: %02X %02X %02X %02X %02X %02X %02X %02X\n",
@@ -22,7 +22,6 @@
#include <odp_schedule_internal.h>
#include <odp_debug.h>
-#include <odp_pktio_socket.h>
#ifdef ODP_HAVE_NETMAP
#include <odp_pktio_netmap.h>
#endif
@@ -115,16 +114,14 @@ static void unlock_entry(pktio_entry_t *entry)
odp_spinlock_unlock(&entry->s.lock);
}
-static void init_pktio_entry(pktio_entry_t *entry, odp_pktio_params_t *params)
+static void init_pktio_entry(pktio_entry_t *entry)
{
set_taken(entry);
entry->s.inq_default = ODP_QUEUE_INVALID;
memset(&entry->s.pkt_dpdk, 0, sizeof(entry->s.pkt_dpdk));
- /* Save pktio parameters, type is the most useful */
- memcpy(&entry->s.params, params, sizeof(*params));
}
-static odp_pktio_t alloc_lock_pktio_entry(odp_pktio_params_t *params)
+static odp_pktio_t alloc_lock_pktio_entry(void)
{
odp_pktio_t id;
pktio_entry_t *entry;
@@ -135,7 +132,7 @@ static odp_pktio_t alloc_lock_pktio_entry(odp_pktio_params_t *params)
if (is_free(entry)) {
lock_entry(entry);
if (is_free(entry)) {
- init_pktio_entry(entry, params);
+ init_pktio_entry(entry);
id = i + 1;
return id; /* return with entry locked! */
}
@@ -158,21 +155,15 @@ static int free_pktio_entry(odp_pktio_t id)
return 0;
}
-odp_pktio_t odp_pktio_open(const char *dev, odp_buffer_pool_t pool,
- odp_pktio_params_t *params)
+odp_pktio_t odp_pktio_open(const char *dev, odp_buffer_pool_t pool)
{
odp_pktio_t id;
pktio_entry_t *pktio_entry;
int res;
- if (params == NULL) {
- ODP_ERR("Invalid pktio params\n");
- return ODP_PKTIO_INVALID;
- }
-
ODP_DBG("Allocating dpdk pktio\n");
- id = alloc_lock_pktio_entry(params);
+ id = alloc_lock_pktio_entry();
if (id == ODP_PKTIO_INVALID) {
ODP_ERR("No resources available.\n");
return ODP_PKTIO_INVALID;
@@ -377,11 +368,11 @@ odp_buffer_hdr_t *pktin_dequeue(queue_entry_t *qentry)
if (pkts > 0) {
pkt = pkt_tbl[0];
- buf = odp_buffer_from_packet(pkt);
+ buf = odp_packet_to_buffer(pkt);
buf_hdr = odp_buf_to_hdr(buf);
for (i = 1, j = 0; i < pkts; ++i) {
- buf = odp_buffer_from_packet(pkt_tbl[i]);
+ buf = odp_packet_to_buffer(pkt_tbl[i]);
tmp_hdr_tbl[j++] = odp_buf_to_hdr(buf);
}
queue_enq_multi(qentry, tmp_hdr_tbl, j);
@@ -413,7 +404,7 @@ int pktin_deq_multi(queue_entry_t *qentry, odp_buffer_hdr_t *buf_hdr[], int num)
QUEUE_MULTI_MAX);
if (pkts > 0) {
for (i = 0; i < pkts; ++i) {
- buf = odp_buffer_from_packet(pkt_tbl[i]);
+ buf = odp_packet_to_buffer(pkt_tbl[i]);
tmp_hdr_tbl[i] = odp_buf_to_hdr(buf);
}
queue_enq_multi(qentry, tmp_hdr_tbl, pkts);