diff options
| author | liuwentan <[email protected]> | 2022-07-28 21:22:44 +0800 |
|---|---|---|
| committer | liuwentan <[email protected]> | 2022-07-28 21:22:44 +0800 |
| commit | 90b60f637e17752e3342c6204032c78aa380f59d (patch) | |
| tree | fa0dab1db7aefdc69ceb41c6ba9d79935d2d3879 /src/packet_io | |
| parent | 536bf31be1637eb53bdec75fe305bd386824aac7 (diff) | |
[PACKET_IO] finish marsio mode
Diffstat (limited to 'src/packet_io')
| -rw-r--r-- | src/packet_io/marsio_mode/marsio.h | 268 | ||||
| -rw-r--r-- | src/packet_io/marsio_mode/pio_marsio.cpp | 54 | ||||
| -rw-r--r-- | src/packet_io/marsio_mode/pio_marsio.h | 8 | ||||
| -rw-r--r-- | src/packet_io/packet_io.cpp | 14 | ||||
| -rw-r--r-- | src/packet_io/packet_io.h | 25 | ||||
| -rw-r--r-- | src/packet_io/pcap_file_mode/pio_pcap_file.cpp | 4 | ||||
| -rw-r--r-- | src/packet_io/pcap_file_mode/pio_pcap_file.h | 4 | ||||
| -rw-r--r-- | src/packet_io/pcap_live_mode/pio_pcap_live.cpp | 4 | ||||
| -rw-r--r-- | src/packet_io/pcap_live_mode/pio_pcap_live.h | 4 |
9 files changed, 77 insertions, 308 deletions
diff --git a/src/packet_io/marsio_mode/marsio.h b/src/packet_io/marsio_mode/marsio.h deleted file mode 100644 index 8ecd844..0000000 --- a/src/packet_io/marsio_mode/marsio.h +++ /dev/null @@ -1,268 +0,0 @@ -/* - * \brief MARSIO Userspace ZeroCopy Driver Version 4 - * - * This is the user api header file of MARSIOv4 ZeroCopy Driver - * - * \author Qiuwen Lu<[email protected]> - * Institute of Information Engineering, Chinese Academy of Sciences - * - * \date 2016-12-01 - */ - -#pragma once - -typedef enum -{ - /* 数据面线程数,没有缺省值 */ - MARSIO_OPT_THREAD_NUM, - /* 数据面线程绑定掩码,没有缺省值,设置该掩码后,数据面线程数选项将被忽略。*/ - MARSIO_OPT_THREAD_MASK, - /* 线程绑定模式,类型:uint32_t */ - MARSIO_OPT_THREAD_AFFINITY_MODE, - - /* 处理SIG信号,缺省值:类型:uint32_t,关闭(0) - * 启用该选项后,将自动处理SIGINT、SIGTERM信号 - */ - MARSIO_OPT_EXIT_WHEN_ERR, - - /* 拓展数据面线程绑定掩码,适应大于64个核处理器的硬件平台 - * 设置该掩码后,数据面线程数选项将被忽略 - */ - MARSIO_OPT_THREAD_MASK_IN_CPUSET, - -} marsio_opt_type_t; - -typedef enum -{ - /* 发送后不释放数据包,由应用自行释放数据包 */ - MARSIO_SEND_OPT_NO_FREE = 1 << 0, - /* 发送时计算发包哈希值,用于分流 */ - MARSIO_SEND_OPT_REHASH = 1 << 1, - /* 快速报文路径 */ - MARSIO_SEND_OPT_FAST = 1 << 2, - /* 报文追踪标记 */ - MARSIO_SEND_OPT_TRACE = 1 << 3, - /* 控制报文标记 */ - MARSIO_SEND_OPT_CTRL = 1 << 4 - -} marsio_opt_send_t; - -enum mr_sendpath_type -{ - /* 去往特定虚设备的发包路径 */ - MR_SENDPATH_VDEV, - /* 路由查表确定发包路径 */ - MR_SENDPATH_ROUTE_NORMAL, - /* 特定设备路由查表确定发包路径 */ - MR_SENDPATH_ROUTE_SPEC_DEV, - /* MAX标记 */ - MR_SENDPATH_MAX -}; - -enum mr_sendpath_option -{ - /* 构建四层报文头 */ - MR_SENDPATH_OPT_BUILD_L4 = 0, - /* 构建三层报文头 */ - MR_SENDPATH_OPT_BUILD_L3 = 1, - /* 构建二层报文头 */ - MR_SENDPATH_OPT_BUILD_L2 = 2, - /* 构建前Hook点回调 */ - MR_SENDPATH_OPT_HOOK_PREBUILD = 50, - /* 构建后Hook点回调 */ - MR_SENDPATH_OPT_HOOK_POSTBUILD = 51, -}; - -enum mr_clone_options -{ - /* 拷贝区域 */ - MR_BUFF_CLONE_DATA = 1 << 0, - MR_BUFF_CLONE_BUFF = 1 << 1, - MR_BUFF_CLONE_CTRLZONE = 1 << 2, -}; - -enum mr_thread_affinity_mode -{ - /* 禁用线程亲和性设置 */ - MR_THREAD_AFFINITY_DISABLE = 0, - /* 自动线程亲和性设置 */ - MR_THREAD_AFFINITY_AUTO = 1, - /* 自定义线程亲和性设置 */ - MR_THREAD_AFFINITY_USER = 255 -}; - -enum mr_timestamp_type -{ - /* 从网卡收取时或报文缓冲区申请时的时间戳 */ - MR_TIMESTAMP_RX_OR_ALLOC = 0, -}; - -enum mr_buff_metadata_type -{ - /* 分流哈希值,会根据该值计算分流队列 */ - MR_BUFF_REHASH_INDEX = 0, - /* 网卡剥离的VLAN标签 */ - MR_BUFF_METADATA_VLAN_TCI = 1, -}; - -#ifdef __cplusplus -extern "C" { -#endif - -#include <netinet/in.h> -#include <stddef.h> -#include <stdint.h> -#include <stdio.h> - -#ifndef MARSIO_SOCKET_ID_ANY -#define MARSIO_SOCKET_ID_ANY -1 -#endif - -#ifndef MARSIO_LCORE_ID_ANY -#define MARSIO_LCORE_ID_ANY -1 -#endif - -typedef uint32_t device_id_t; -typedef uint32_t port_id_t; -typedef uint32_t queue_id_t; -typedef uint32_t thread_id_t; -typedef void marsio_buff_t; - -struct mr_sendpath; -struct mr_instance; -struct mr_vdev; - -struct mr_instance * marsio_create(); -struct mr_instance * marsio_current(); - -typedef int (*fn_sendpath_hook_t)(struct mr_sendpath * sendpath, marsio_buff_t * mbuf[], unsigned int nr_mbuf, - void * arg); - -int marsio_option_get(struct mr_instance * instance, int opt_type, void * out_opt, size_t out_opt_buffer); -int marsio_option_set(struct mr_instance * instance, marsio_opt_type_t opt_type, void * opt, size_t sz_opt); -int marsio_init(struct mr_instance * instance, const char * appsym); -int marsio_thread_init(struct mr_instance * instance); -int marsio_destory(struct mr_instance * instance); - -struct mr_vdev * marsio_open_device(struct mr_instance * instance, const char * devsym, unsigned int nr_rxstream, - unsigned int nr_txstream); - -void marsio_close_device(struct mr_vdev * vdev); - -struct mr_vdev * marsio_device_lookup(struct mr_instance * instance, const char * devsym); - -int marsio_recv_burst(struct mr_vdev * vdev, queue_id_t qid, marsio_buff_t * mbufs[], int nr_mbufs); -int marsio_recv_all_burst(struct mr_instance * instance, queue_id_t qid, marsio_buff_t * mbufs[], int nr_mbufs); -int marsio_send_burst(struct mr_sendpath * sendpath, queue_id_t qid, marsio_buff_t * mbufs[], int nr_mbufs); -int marsio_send_burst_with_options(struct mr_sendpath * sendpath, queue_id_t sid, marsio_buff_t * mbufs[], int nr_mbufs, - uint16_t options); -void marsio_send_burst_flush(struct mr_sendpath * sendpath, queue_id_t sid); - -int marsio_udp_header_construct(marsio_buff_t * buff, uint16_t s_port, uint16_t d_port); -int marsio_ipv4_header_construct(marsio_buff_t * buff, uint32_t s_ip, uint32_t d_ip, uint8_t proto); - -struct mr_sendpath * marsio_sendpath_create_by_droute(struct mr_vdev * dest_device, struct in_addr addr); -struct mr_sendpath * marsio_sendpath_create_by_route(struct mr_instance * instance, struct in_addr addr); -struct mr_sendpath * marsio_sendpath_create_by_vdev(struct mr_vdev * dest_device); - -struct mr_sendpath * marsio_sendpath_create(struct mr_instance * instance, int type, ...); -int marsio_sendpath_option_set(struct mr_instance * instance, struct mr_sendpath * sendpath, int opt, ...); -int marsio_sendpath_option_get(struct mr_instance * instance, struct mr_sendpath * sendpath, int opt, ...); -void marsio_sendpath_destory(struct mr_sendpath * sendpath); - -// simply get control zone data ptr. -void * marsio_buff_ctrlzone(marsio_buff_t * m, uint8_t id); - -// a safe way to read control zone data. -void * marsio_buff_ctrlzone_data(marsio_buff_t * m, uint8_t id, uint8_t * size); - -// a safe way to set control zone data. -void marsio_buff_ctrlzone_set(marsio_buff_t * m, uint8_t id, void * ptr_data, uint8_t size); - -void marsio_buff_reset(marsio_buff_t * m); - -marsio_buff_t * marsio_buff_getnext_seg(marsio_buff_t * m); -marsio_buff_t * marsio_buff_getnext_pkt(marsio_buff_t * m); - -void marsio_buff_append_pkt(marsio_buff_t * head, marsio_buff_t * next); -void marsio_buff_append_seg(marsio_buff_t * head, marsio_buff_t * next); -void marsio_buff_chain_pkt(marsio_buff_t * pkt, marsio_buff_t * next); - -uint16_t marsio_buff_headroom(const marsio_buff_t * m); -uint16_t marsio_buff_tailroom(const marsio_buff_t * m); - -marsio_buff_t * marsio_buff_getnext_seg(marsio_buff_t * m); -marsio_buff_t * marsio_buff_getnext_pkt(marsio_buff_t * m); - -char * marsio_buff_mtod(marsio_buff_t * m); - -uint32_t marsio_buff_buflen(marsio_buff_t * m); - -uint32_t marsio_buff_datalen(marsio_buff_t * m); - -char * marsio_buff_prepend(marsio_buff_t * m, uint16_t len); - -char * marsio_buff_append(marsio_buff_t * m, uint16_t len); - -char * marsio_buff_adj(marsio_buff_t * m, uint16_t len); - -int marsio_buff_trim(marsio_buff_t * m, uint16_t len); - -char * marsio_buff_offset_set(marsio_buff_t * m, off_t offset, int is_relative); - -off_t marsio_buff_offset_get(marsio_buff_t * m); - -/* 支持写时复制的报文修改裁剪函数 */ -marsio_buff_t * marsio_buff_prepend_cw(struct mr_instance * instance, marsio_buff_t * m, uint16_t len, void ** ptr_out); - -marsio_buff_t * marsio_buff_append_cw(struct mr_instance * instance, marsio_buff_t * m, uint16_t len, void ** ptr_out); - -marsio_buff_t * marsio_buff_adj_cw(struct mr_instance * instance, marsio_buff_t * m, uint16_t len, void ** ptr_out); - -marsio_buff_t * marsio_buff_trim_cw(struct mr_instance * instance, marsio_buff_t * m, uint16_t len, void ** ptr_out); - -uint16_t marsio_buff_headroom(const marsio_buff_t * m); - -uint16_t marsio_buff_tailroom(const marsio_buff_t * m); - -uint32_t marsio_get_pkt_type(marsio_buff_t * m); - -void marsio_pktmbuf_dump(FILE * f, const marsio_buff_t * m, unsigned dump_len); - -marsio_buff_t * marsio_buff_clone_deep(struct mr_instance * instance, marsio_buff_t * md, int socket_id, int thread_id); - -marsio_buff_t * marsio_buff_clone_with_options(struct mr_instance * instance, marsio_buff_t * md, int socket_id, - int thread_id, uint16_t options); - -int marsio_buff_malloc_device(struct mr_vdev * vdev, marsio_buff_t * marsio_buff[], unsigned int nr_mbufs, - int socket_id, int thread_id); - -int marsio_buff_malloc_global(struct mr_instance * instance, marsio_buff_t * marsio_buff[], unsigned int nr_mbufs, - int socket_id, int thread_id); - -void marsio_buff_free(struct mr_instance * instance, marsio_buff_t * marsio_buff[], unsigned int nr_mbufs, - int socket_id, int thread_id); - -int marsio_buff_is_ctrlbuf(marsio_buff_t * m); - -void marsio_buff_set_ctrlbuf(marsio_buff_t * m); - -marsio_buff_t * marsio_buff_malloc_smartoffload(struct mr_vdev * vdev, const char * pkt, unsigned int pkt_len); - -uint64_t marsio_buff_get_timestamp(marsio_buff_t * m); -void marsio_buff_set_timestamp(marsio_buff_t * m, uint64_t timestamp); -int marsio_buff_get_timestamp_ex(marsio_buff_t * m, enum mr_timestamp_type ts_type, struct timespec * ts); - -void marsio_buff_set_rehash_index(marsio_buff_t * m, uint32_t hash); -uint32_t marsio_buff_get_rehash_index(marsio_buff_t * m); - -int marsio_buff_get_metadata(marsio_buff_t * m, enum mr_buff_metadata_type type, void * data, unsigned int sz_data); -int marsio_buff_set_metadata(marsio_buff_t * m, enum mr_buff_metadata_type type, void * data, unsigned int sz_data); -int marsio_buff_unset_metadata(marsio_buff_t * m, enum mr_buff_metadata_type type); - -void * marsio_shared_mem_alloc(struct mr_instance * instance, size_t len); -void marsio_shared_mem_free(struct mr_instance * instance, void * mem); - -#ifdef __cplusplus -} -#endif diff --git a/src/packet_io/marsio_mode/pio_marsio.cpp b/src/packet_io/marsio_mode/pio_marsio.cpp index 0bb712f..0e2d4bc 100644 --- a/src/packet_io/marsio_mode/pio_marsio.cpp +++ b/src/packet_io/marsio_mode/pio_marsio.cpp @@ -18,6 +18,8 @@ #include "../../sdk/include/utils.h" #include "../../sdk/include/util_errors.h" +#define MARSIO_BURST_PKT_MAX (256) + static struct marsio_dll_function_entries shared_marsio_dll_func_entries; static void fake_marsio_buff_set_rehash_index(marsio_buff_t *m, uint32_t hash) @@ -257,32 +259,50 @@ static int pio_get_marsio_dll_function_entries(void) int pio_marsio_device_open(struct packet_io_device *pdev, const char *dev_name, uint32_t nr_rxq, uint32_t nr_txq) { - struct mr_instance *mr_inst_handle = pdev->ppio_inst->entity.marsio_inst->mr_inst; - struct mr_vdev *mr_dev_handle = \ + struct mr_instance *mr_inst_handle = pdev->ppio_inst->entity.marsio_inst->mr_inst_handle; + pdev->entity.marsio_dev->mr_dev_handle = \ shared_marsio_dll_func_entries.ptr_marsio_open_device(mr_inst_handle, dev_name, nr_rxq, nr_txq); + if (nullptr == pdev->entity.marsio_dev->mr_dev_handle) { + fprintf(stderr,"marsio_open_device:%s error\n", dev_name); + return -1; + } return 0; } -int pio_marsio_device_close(const void *init_data) +int pio_marsio_device_close(const struct packet_io_device *pdev) { + if (nullptr == pdev) { + log_error(ST_ERR_PIO_DEVICE, "invalid pdev pointer so close marsio device failed!"); + return -1; + } + + shared_marsio_dll_func_entries.ptr_marsio_close_device(pdev->entity.marsio_dev->mr_dev_handle); return 0; } int pio_marsio_device_receive(struct packet_io_device *pdev, uint32_t rxq_id, struct packet *p[], int nr_p) { - - return 0; + return shared_marsio_dll_func_entries.ptr_marsio_recv_burst(pdev->entity.marsio_dev->mr_dev_handle, + rxq_id, (marsio_buff_t **)p, nr_p); } int pio_marsio_device_send(struct packet_io_device *pdev, uint32_t txq_id, struct packet *p[], int nr_p) { + struct mr_sendpath *sendpath = \ + shared_marsio_dll_func_entries.ptr_marsio_sendpath_create_by_vdev(pdev->entity.marsio_dev->mr_dev_handle); + if (nullptr == sendpath) { + log_error(ST_ERR_PIO_DEVICE, "device:%s marsio_sendpath_create_by_vdev failed!", pdev->dev_name); + return -1; + } + shared_marsio_dll_func_entries.ptr_marsio_send_burst(sendpath, txq_id, (marsio_buff_t **)p, nr_p); + return 0; } -static int marsio_instance_init(struct packet_io_instance *pinst, int worker_thread_num) +static int marsio_instance_init(struct packet_io_instance *pinst, int wrk_thread_num) { int ret = -1; ret = pio_get_marsio_dll_function_entries(); @@ -291,21 +311,25 @@ static int marsio_instance_init(struct packet_io_instance *pinst, int worker_thr return -1; } - pinst->entity.marsio_inst->mr_inst = shared_marsio_dll_func_entries.ptr_marsio_create(); - if (nullptr == pinst->entity.marsio_inst->mr_inst) { + pinst->entity.marsio_inst->mr_inst_handle = shared_marsio_dll_func_entries.ptr_marsio_create(); + if (nullptr == pinst->entity.marsio_inst->mr_inst_handle) { fprintf(stderr,"%s\n","marsio_create error!\n"); return -1; } /* TODO: MARSIO_OPT_THREAD_NUM */ - shared_marsio_dll_func_entries.ptr_marsio_option_set(pinst->entity.marsio_inst->mr_inst, - MARSIO_OPT_THREAD_NUM, - &worker_thread_num, sizeof(int)); + ret = shared_marsio_dll_func_entries.ptr_marsio_option_set(pinst->entity.marsio_inst->mr_inst_handle, + MARSIO_OPT_THREAD_NUM, + &wrk_thread_num, sizeof(int)); + if (ret < 0) { + fprintf(stderr,"%s\n","marsio_option_set MARSIO_OPT_THREAD_NUM error!\n"); + return -1; + } /* TODO: MARSIO_OPT_THREAD_MASK_IN_CPUSET */ /* marsio_init */ - ret = shared_marsio_dll_func_entries.ptr_marsio_init(pinst->entity.marsio_inst->mr_inst, pinst->inst_name); + ret = shared_marsio_dll_func_entries.ptr_marsio_init(pinst->entity.marsio_inst->mr_inst_handle, pinst->inst_name); if (ret < 0) { fprintf(stderr,"%s\n","marsio_init error!\n"); return -1; @@ -319,10 +343,10 @@ static int marsio_instance_init(struct packet_io_instance *pinst, int worker_thr * * @param: pinst(in/out) */ -int pio_marsio_instance_create(struct packet_io_instance *pinst, int worker_thread_num) +int pio_marsio_instance_create(struct packet_io_instance *pinst, int wrk_thread_num) { /* instance init */ - int ret = marsio_instance_init(pinst, worker_thread_num); + int ret = marsio_instance_init(pinst, wrk_thread_num); if (ret < 0) { log_error(ST_ERR_PIO_INSTANCE, "marsio instance init failed."); return -1; @@ -334,4 +358,4 @@ int pio_marsio_instance_create(struct packet_io_instance *pinst, int worker_thre void pio_marsio_instance_destroy(void) { -} +}
\ No newline at end of file diff --git a/src/packet_io/marsio_mode/pio_marsio.h b/src/packet_io/marsio_mode/pio_marsio.h index f9b4847..360d485 100644 --- a/src/packet_io/marsio_mode/pio_marsio.h +++ b/src/packet_io/marsio_mode/pio_marsio.h @@ -103,11 +103,11 @@ struct marsio_dll_function_entries { }; struct pio_marsio_instance { - struct mr_instance *mr_inst; + struct mr_instance *mr_inst_handle; }; struct pio_marsio_device { - struct mr_vdev *mr_dev; + struct mr_vdev *mr_dev_handle; }; struct pio_marsio_device_context { @@ -127,12 +127,12 @@ int pio_marsio_device_open(struct packet_io_device *pdev, const char *dev_name, /* @brief close pcap_live device */ -int pio_marsio_device_close(const void *init_data); +int pio_marsio_device_close(const struct packet_io_device *pdev); int pio_marsio_device_receive(struct packet_io_device *pdev, uint32_t rxq_id, struct packet *p[], int nr_p); int pio_marsio_device_send(struct packet_io_device *pdev, uint32_t txq_id, struct packet *p[], int nr_p); -int pio_marsio_instance_create(struct packet_io_instance *pinst, int worker_thread_num); +int pio_marsio_instance_create(struct packet_io_instance *pinst, int wrk_thread_num); void pio_marsio_instance_destroy(void);
\ No newline at end of file diff --git a/src/packet_io/packet_io.cpp b/src/packet_io/packet_io.cpp index 6129cbe..29763e6 100644 --- a/src/packet_io/packet_io.cpp +++ b/src/packet_io/packet_io.cpp @@ -59,7 +59,7 @@ struct pio_instance_operations pio_instance_ops_array[PACKET_IO_RUN_MODE_MAX] = }; struct packet_io_instance * -packet_io_instance_create(const char *instance_name, const enum packet_io_run_mode mode, const int worker_thread_num) +packet_io_instance_create(const char *instance_name, const enum packet_io_run_mode mode, const int wrk_thread_num) { struct packet_io_instance *pio_instance = CALLOC(struct packet_io_instance, 1); if (nullptr == pio_instance) { @@ -72,7 +72,7 @@ packet_io_instance_create(const char *instance_name, const enum packet_io_run_mo pio_instance->mode = mode; pio_instance->inst_ops = &pio_instance_ops_array[mode]; - int ret = pio_instance->inst_ops->create(pio_instance, worker_thread_num); + int ret = pio_instance->inst_ops->create(pio_instance, wrk_thread_num); if (ret < 0) { log_error(ST_ERR_PIO_INSTANCE, "packet_io instance create failed."); return nullptr; @@ -83,7 +83,7 @@ packet_io_instance_create(const char *instance_name, const enum packet_io_run_mo void packet_io_instance_destroy(struct packet_io_instance *pinst) { if (nullptr != pinst) { - if (nullptr != pinst->device_handle) { + if (nullptr != pinst->devices) { } } @@ -106,10 +106,10 @@ packet_io_open_device(struct packet_io_instance *pinst, const char *dev_name, ui ppio_dev->dev_ops = &pio_device_ops_array[pinst->mode]; /* - ppio_inst->device_handle --> | struct packet_io_device * | struct packet_io_device * | struct packet_io_device * | + ppio_inst->devices --> | struct packet_io_device * | struct packet_io_device * | struct packet_io_device * | array[0] array[1] array[2] */ - pinst->device_handle[pinst->dev_cnt++] = ppio_dev; + pinst->devices[pinst->dev_cnt++] = ppio_dev; int ret = ppio_dev->dev_ops->open(ppio_dev, dev_name, nr_rxq, nr_txq); if (ret < 0) { @@ -133,12 +133,12 @@ void packet_io_close_device(struct packet_io_device *pdev) } } -int packet_io_rx(struct packet_io_device *pdev, uint32_t rxq_id, struct packet *p[], int nr_p) +int packet_io_device_rx(struct packet_io_device *pdev, uint32_t rxq_id, struct packet *p[], int nr_p) { return pdev->dev_ops->recv(pdev, rxq_id, p, nr_p); } -int packet_io_tx(struct packet_io_device *pdev, uint32_t txq_id, struct packet *p[], int nr_p) +int packet_io_device_tx(struct packet_io_device *pdev, uint32_t txq_id, struct packet *p[], int nr_p) { return pdev->dev_ops->send(pdev, txq_id, p, nr_p); }
\ No newline at end of file diff --git a/src/packet_io/packet_io.h b/src/packet_io/packet_io.h index 7f5b98b..ec8d10c 100644 --- a/src/packet_io/packet_io.h +++ b/src/packet_io/packet_io.h @@ -19,8 +19,13 @@ #include "./pcap_file_mode/pio_pcap_file.h" #include "./marsio_mode/pio_marsio.h" +/* + note: + 1. packet_io_XXX function is supported by packet_io.h + 2. pio_XXX function is supported by pio_pcap_live.h/pio_pcap_file.h/pio_marsio.h +*/ struct pio_instance_operations { - int (*create)(struct packet_io_instance *instance, int worker_thread_num); + int (*create)(struct packet_io_instance *instance, int wrk_thread_num); void (*destroy)(void); }; @@ -33,7 +38,7 @@ struct packet_io_instance { enum packet_io_run_mode mode; /* device handle set in this instance */ - struct packet_io_device *device_handle[DEV_MAX_CNT]; + struct packet_io_device *devices[DEV_MAX_CNT]; /* device's exactly count */ uint32_t dev_cnt; @@ -52,7 +57,7 @@ struct packet_io_instance { struct pio_device_operations { int (*open)(struct packet_io_device *pinst, const char *dev_name, uint32_t nr_rxq, uint32_t nr_txq); - int (*close)(const void *init_data); + int (*close)(const struct packet_io_device *pdev); int (*recv)(struct packet_io_device *pdev, uint32_t rxq_id, struct packet *p[], int pkt_cnt); @@ -79,8 +84,15 @@ struct packet_io_device { struct packet_io_instance *ppio_inst; }; +/* + @brief create packet_io instance which will manage packet_io device + + @param instance_name: packet_io instance name + @param mode: packet_io run mode + @param wrk_thread_num: expected number of packet receiving threads, which will be created by packet_io +*/ struct packet_io_instance * -packet_io_instance_create(const char *instance_name, const enum packet_io_run_mode mode, const int worker_thread_num); +packet_io_instance_create(const char *instance_name, const enum packet_io_run_mode mode, const int wrk_thread_num); void packet_io_instance_destroy(struct packet_io_instance *pinst); @@ -89,5 +101,6 @@ packet_io_open_device(struct packet_io_instance *instance, const char *dev_name, void packet_io_close_device(struct packet_io_device *dev); -int packet_io_rx(struct packet_io_device *dev, uint32_t rx_queue_id, struct packet *p[], int nr_p); -int packet_io_tx(struct packet_io_device *dev, uint32_t rx_queue_id, struct packet *p[], int nr_p);
\ No newline at end of file +int packet_io_device_rx(struct packet_io_device *dev, uint32_t rx_queue_id, struct packet *p[], int nr_p); + +int packet_io_device_tx(struct packet_io_device *dev, uint32_t rx_queue_id, struct packet *p[], int nr_p);
\ No newline at end of file diff --git a/src/packet_io/pcap_file_mode/pio_pcap_file.cpp b/src/packet_io/pcap_file_mode/pio_pcap_file.cpp index 2a6e8db..fdd3c4f 100644 --- a/src/packet_io/pcap_file_mode/pio_pcap_file.cpp +++ b/src/packet_io/pcap_file_mode/pio_pcap_file.cpp @@ -17,7 +17,7 @@ int pio_pcap_file_device_open(struct packet_io_device *pdev, const char *path, u return 0; } -int pio_pcap_file_device_close(const void *init_data) { +int pio_pcap_file_device_close(const struct packet_io_device *pdev) { return 0; } @@ -33,7 +33,7 @@ int pio_pcap_file_device_send(struct packet_io_device *pdev, uint32_t txq_id, st } -int pio_pcap_file_instance_create(struct packet_io_instance *pinst, int worker_thread_num) { +int pio_pcap_file_instance_create(struct packet_io_instance *pinst, int wrk_thread_num) { return 0; } diff --git a/src/packet_io/pcap_file_mode/pio_pcap_file.h b/src/packet_io/pcap_file_mode/pio_pcap_file.h index 11b3467..2906c7e 100644 --- a/src/packet_io/pcap_file_mode/pio_pcap_file.h +++ b/src/packet_io/pcap_file_mode/pio_pcap_file.h @@ -39,12 +39,12 @@ int pio_pcap_file_device_open(struct packet_io_device *pdev, const char *path, u /* @brief close pcap_live device */ -int pio_pcap_file_device_close(const void *init_data); +int pio_pcap_file_device_close(const struct packet_io_device *pdev); int pio_pcap_file_device_receive(struct packet_io_device *pdev, uint32_t rxq_id, struct packet *p[], int nr_p); int pio_pcap_file_device_send(struct packet_io_device *pdev, uint32_t txq_id, struct packet *p[], int nr_p); -int pio_pcap_file_instance_create(struct packet_io_instance *pinst, int worker_thread_num); +int pio_pcap_file_instance_create(struct packet_io_instance *pinst, int wrk_thread_num); void pio_pcap_file_instance_destroy(void);
\ No newline at end of file diff --git a/src/packet_io/pcap_live_mode/pio_pcap_live.cpp b/src/packet_io/pcap_live_mode/pio_pcap_live.cpp index d78e029..33af4db 100644 --- a/src/packet_io/pcap_live_mode/pio_pcap_live.cpp +++ b/src/packet_io/pcap_live_mode/pio_pcap_live.cpp @@ -15,7 +15,7 @@ int pio_pcap_live_device_open(struct packet_io_device *pdev, const char *dev_nam return 0; } -int pio_pcap_live_device_close(const void *init_data) { +int pio_pcap_live_device_close(const struct packet_io_device *pdev) { return 0; } @@ -30,7 +30,7 @@ int pio_pcap_live_device_send(struct packet_io_device *pdev, uint32_t txq_id, st return 0; } -int pio_pcap_live_instance_create(struct packet_io_instance *pinst, int worker_thread_num) { +int pio_pcap_live_instance_create(struct packet_io_instance *pinst, int wrk_thread_num) { return 0; } diff --git a/src/packet_io/pcap_live_mode/pio_pcap_live.h b/src/packet_io/pcap_live_mode/pio_pcap_live.h index e07bc3d..f6968c5 100644 --- a/src/packet_io/pcap_live_mode/pio_pcap_live.h +++ b/src/packet_io/pcap_live_mode/pio_pcap_live.h @@ -37,12 +37,12 @@ int pio_pcap_live_device_open(struct packet_io_device *pdev, const char *dev_nam /* @brief close pcap_live device */ -int pio_pcap_live_device_close(const void *init_data); +int pio_pcap_live_device_close(const struct packet_io_device *pdev); int pio_pcap_live_device_receive(struct packet_io_device *pdev, uint32_t rxq_id, struct packet *p[], int nr_p); int pio_pcap_live_device_send(struct packet_io_device *pdev, uint32_t txq_id, struct packet *p[], int nr_p); -int pio_pcap_live_instance_create(struct packet_io_instance *pinst, int worker_thread_num); +int pio_pcap_live_instance_create(struct packet_io_instance *pinst, int wrk_thread_num); void pio_pcap_live_instance_destroy(void);
\ No newline at end of file |
