From 873b25794bb155a26abf28e59b8cd0cc36362031 Mon Sep 17 00:00:00 2001 From: liuwentan Date: Tue, 9 Aug 2022 18:32:25 +0800 Subject: [PATCH] [PACKET_IO] add function for operating packets --- src/common/pio_packet_queue.cpp | 16 ++++++- src/common/pio_packet_queue.h | 8 ++-- src/packet_io/marsio_mode/pio_marsio.cpp | 24 ++++++++++ src/packet_io/marsio_mode/pio_marsio.h | 30 ++++++++----- src/packet_io/packet_io.cpp | 39 +++++++++++----- src/packet_io/packet_io.h | 41 ++++++++++++++--- .../pcap_file_mode/pio_pcap_file.cpp | 45 ++++++++++++++----- src/packet_io/pcap_file_mode/pio_pcap_file.h | 21 ++++++--- .../pcap_live_mode/pio_pcap_live.cpp | 31 ++++++++++++- src/packet_io/pcap_live_mode/pio_pcap_live.h | 18 ++++++-- 10 files changed, 218 insertions(+), 55 deletions(-) diff --git a/src/common/pio_packet_queue.cpp b/src/common/pio_packet_queue.cpp index b7bb12d..297e029 100644 --- a/src/common/pio_packet_queue.cpp +++ b/src/common/pio_packet_queue.cpp @@ -1,6 +1,6 @@ /* ********************************************************************************************** -* File: packet_queue.cpp +* File: pio_packet_queue.cpp * Description: * Authors: Liu WenTan * Date: 2022-07-15 @@ -8,9 +8,23 @@ *********************************************************************************************** */ +#include + #include "../../sdk/include/utils.h" #include "pio_packet_queue.h" +static int packet_copy_data_offset(uint8_t *ptr, uint32_t offset, const uint8_t *data, uint32_t data_len) +{ + memcpy(ptr + offset, data, data_len); + + return 0; +} + +int packet_copy_data(uint8_t *ptr, const uint8_t *pkt_data, uint32_t pkt_len) +{ + return packet_copy_data_offset(ptr, 0, pkt_data, pkt_len); +} + void pio_packet_enqueue(struct pio_packet_queue *q, struct pio_packet *p) { if (nullptr == p) diff --git a/src/common/pio_packet_queue.h b/src/common/pio_packet_queue.h index b719eec..970bc02 100644 --- a/src/common/pio_packet_queue.h +++ b/src/common/pio_packet_queue.h @@ -21,7 +21,7 @@ #define SIZE_OF_PIO_PACKET (DEFAULT_PACKET_SIZE + sizeof(struct pio_packet)) -/* +/** * @brief pcap_live/pcap_file mode packet structure * * |<-pkt_hdr |<-pkt_payload @@ -37,13 +37,13 @@ struct pio_packet { void *pkt_hdr; /* pkt length */ - uint64_t pkt_len; + uint32_t pkt_len; /* pkt payload pointer */ void *pkt_payload; /* reference counts */ - uint64_t ref_cnt; + uint32_t ref_cnt; struct pio_packet *prev; @@ -57,6 +57,8 @@ struct pio_packet_queue { pthread_mutex_t mutex_q; }; +int packet_copy_data(uint8_t *ptr, const uint8_t *pkt_data, uint32_t pkt_len); + void pio_packet_enqueue(struct pio_packet_queue *, struct pio_packet *); struct pio_packet *pio_packet_dequeue(struct pio_packet_queue *); void release_pio_packet_queue(struct pio_packet_queue *); \ No newline at end of file diff --git a/src/packet_io/marsio_mode/pio_marsio.cpp b/src/packet_io/marsio_mode/pio_marsio.cpp index f0159a5..b94dd77 100644 --- a/src/packet_io/marsio_mode/pio_marsio.cpp +++ b/src/packet_io/marsio_mode/pio_marsio.cpp @@ -282,6 +282,8 @@ int pio_marsio_device_open(struct packet_io_device *pdev) return -1; } + pdev->entity.marsio_dev_ctx->pio_dev = pdev; + struct mr_instance *mr_inst_handle = pdev->ppio_inst->entity.marsio_inst_ctx->mr_inst_handle; /* marsio_open_device() return marsio device handle*/ pdev->entity.marsio_dev_ctx->mr_dev_handle = \ @@ -424,4 +426,26 @@ void pio_marsio_instance_destroy(struct packet_io_instance *pinst) pio_marsio_device_close(pinst->devices[i]); FREE(pinst->devices[i]); } +} + +void *pio_marsio_device_buff_ctrlzone(struct packet *p) +{ + int zone_id = 0; + + return g_marsio_dll_func.marsio_buff_ctrlzone((marsio_buff_t *)p, zone_id); +} + +char *pio_marsio_device_buff_mtod(struct packet *p) +{ + return g_marsio_dll_func.marsio_buff_mtod((marsio_buff_t *)p); +} + +uint32_t pio_marsio_device_buff_buflen(struct packet *p) +{ + return g_marsio_dll_func.marsio_buff_buflen((marsio_buff_t *)p); +} + +uint32_t pio_marsio_device_buff_datalen(struct packet *p) +{ + return g_marsio_dll_func.marsio_buff_datalen((marsio_buff_t *)p); } \ 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 04a58f0..fa6d736 100644 --- a/src/packet_io/marsio_mode/pio_marsio.h +++ b/src/packet_io/marsio_mode/pio_marsio.h @@ -14,9 +14,9 @@ #include -/* - * dll is short for dynamic link lib - * the following entries is supported by marsio system +/** + * @brief dll is short for dynamic link lib + * the following entries is supported by marsio system **/ struct marsio_dll_function_entries { @@ -82,7 +82,7 @@ struct pio_marsio_instance_context { struct mr_instance *mr_inst_handle; }; -/* +/** * struct pio_marsio_device_context - marsio device context * @mr_dev_handle: marsio device handle * if marsio device receive packets, use mr_dev_handle @@ -92,13 +92,15 @@ struct pio_marsio_instance_context { struct pio_marsio_device_context { struct mr_vdev *mr_dev_handle; struct mr_sendpath * mr_sendpath_handle; + + struct packet_io_device *pio_dev; }; -/* +/** * @brief open marsio device * * @param pdev: the marsio device's pointer -* pdev->dev_name: the name of marsio device, such as eth1, eth2, ... + * pdev->dev_name: the name of marsio device, such as eth1, eth2, ... * pdev->rxq_num: number of the packet receiving queues for the device * pdev->txq_num: number of the packet sending queues for the device **/ @@ -109,7 +111,7 @@ int pio_marsio_device_open(struct packet_io_device *pdev); **/ int pio_marsio_device_close(struct packet_io_device *pdev); -/* +/** * @brief receive packets from device's single rx queue which specified by rxq_id * * @param pdev: the marsio device's pointer @@ -121,7 +123,7 @@ int pio_marsio_device_close(struct packet_io_device *pdev); */ int pio_marsio_device_receive(struct packet_io_device *pdev, uint32_t rxq_id, struct packet **pkts, int nr_pkts); -/* +/** * @brief send packets by device's single tx queue which specified by txq_id * * @param pdev: the marsio device's pointer @@ -133,7 +135,7 @@ int pio_marsio_device_receive(struct packet_io_device *pdev, uint32_t rxq_id, st */ int pio_marsio_device_send(struct packet_io_device *pdev, uint32_t txq_id, struct packet **pkts, int nr_pkts); -/* +/** * @brief manually free packet's memory * * @param pdev: the marsio device's pointer @@ -145,4 +147,12 @@ void pio_marsio_device_pkt_free(struct packet_io_device *pdev, uint32_t qid, str int pio_marsio_instance_create(struct packet_io_instance *pinst, int wrk_thread_num); -void pio_marsio_instance_destroy(struct packet_io_instance *pinst); \ No newline at end of file +void pio_marsio_instance_destroy(struct packet_io_instance *pinst); + +void *pio_marsio_device_buff_ctrlzone(struct packet *p); + +char *pio_marsio_device_buff_mtod(struct packet *p); + +uint32_t pio_marsio_device_buff_buflen(struct packet *p); + +uint32_t pio_marsio_device_buff_datalen(struct packet *p); \ No newline at end of file diff --git a/src/packet_io/packet_io.cpp b/src/packet_io/packet_io.cpp index a88fc20..56ec943 100644 --- a/src/packet_io/packet_io.cpp +++ b/src/packet_io/packet_io.cpp @@ -21,8 +21,11 @@ struct pio_device_operations pio_device_ops_array[PACKET_IO_RUN_MODE_MAX] = .open = pio_pcap_file_device_open, .close = pio_pcap_file_device_close, .recv = pio_pcap_file_device_receive, - .send = pio_pcap_file_device_send, .pkt_free = pio_pcap_file_device_pkt_free, + .buff_ctrlzone = pio_pcap_file_device_buff_ctrlzone, + .buff_mtod = pio_pcap_file_device_buff_mtod, + .buff_buflen = pio_pcap_file_device_buff_buflen, + .buff_datalen = pio_pcap_file_device_buff_datalen, }, { @@ -31,6 +34,10 @@ struct pio_device_operations pio_device_ops_array[PACKET_IO_RUN_MODE_MAX] = .recv = pio_pcap_live_device_receive, .send = pio_pcap_live_device_send, .pkt_free = pio_pcap_live_device_pkt_free, + .buff_ctrlzone = pio_pcap_live_device_buff_ctrlzone, + .buff_mtod = pio_pcap_live_device_buff_mtod, + .buff_buflen = pio_pcap_live_device_buff_buflen, + .buff_datalen = pio_pcap_live_device_buff_datalen, }, { @@ -39,6 +46,10 @@ struct pio_device_operations pio_device_ops_array[PACKET_IO_RUN_MODE_MAX] = .recv = pio_marsio_device_receive, .send = pio_marsio_device_send, .pkt_free = pio_marsio_device_pkt_free, + .buff_ctrlzone = pio_marsio_device_buff_ctrlzone, + .buff_mtod = pio_marsio_device_buff_mtod, + .buff_buflen = pio_marsio_device_buff_buflen, + .buff_datalen = pio_marsio_device_buff_datalen, } }; @@ -163,19 +174,27 @@ int packet_io_device_tx(struct packet_io_device *pdev, uint32_t txq_id, struct p return pdev->dev_ops->send(pdev, txq_id, pkts, nr_pkts); } -void packet_io_pkts_free(struct packet_io_instance *pinst, uint32_t qid, struct packet **pkts, int nr_pkts) +void packet_io_pkts_free(struct packet_io_device *pdev, uint32_t qid, struct packet **pkts, int nr_pkts) { - + return pdev->dev_ops->pkt_free(pdev, qid, pkts, nr_pkts); } -static int packet_copy_data_offset(uint8_t *ptr, uint32_t offset, const uint8_t *data, uint32_t data_len) +void *packet_io_buff_ctrlzone(struct packet_io_device *pdev, struct packet *p) { - memcpy(ptr + offset, data, data_len); - - return 0; + return pdev->dev_ops->buff_ctrlzone(p); } -int packet_copy_data(uint8_t *ptr, const uint8_t *pkt_data, uint32_t pkt_len) -{ - return packet_copy_data_offset(ptr, 0, pkt_data, pkt_len); +char *packet_io_buff_mtod(struct packet_io_device *pdev, struct packet *p) +{ + return pdev->dev_ops->buff_mtod(p); +} + +uint32_t packet_io_buff_buflen(struct packet_io_device *pdev, struct packet *p) +{ + return pdev->dev_ops->buff_buflen(p); +} + +uint32_t packet_io_buff_datalen(struct packet_io_device *pdev, struct packet *p) +{ + return pdev->dev_ops->buff_datalen(p); } \ No newline at end of file diff --git a/src/packet_io/packet_io.h b/src/packet_io/packet_io.h index ed8bb6d..abbc815 100644 --- a/src/packet_io/packet_io.h +++ b/src/packet_io/packet_io.h @@ -19,7 +19,7 @@ #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 @@ -65,6 +65,14 @@ struct pio_device_operations { int (*send)(struct packet_io_device *pdev, uint32_t txq_id, struct packet **pkts, int nr_pkts); void (*pkt_free)(struct packet_io_device *pdev, uint32_t qid, struct packet **pkts, int nr_pkts); + + void *(*buff_ctrlzone)(struct packet *p); + + char *(*buff_mtod)(struct packet *p); + + uint32_t (*buff_buflen)(struct packet *p); + + uint32_t (*buff_datalen)(struct packet *p); }; struct packet_io_device { @@ -91,7 +99,7 @@ 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 @@ -105,7 +113,7 @@ packet_io_instance_create(const char *instance_name, const enum packet_io_run_mo /* destroy packet_io instance */ void packet_io_instance_destroy(struct packet_io_instance *pinst); -/* +/** * @brief open packet_io device for send/receive packets * * @param pinst: packet_io instance pointer @@ -116,10 +124,10 @@ void packet_io_instance_destroy(struct packet_io_instance *pinst); struct packet_io_device * packet_io_device_open(struct packet_io_instance *pinst, const char *dev_name, uint32_t nr_rxq, uint32_t nr_txq); -/* close packet_io device */ +/** close packet_io device */ void packet_io_device_close(struct packet_io_device *dev); -/* +/** * @brief packet_io device receive function * * @param pdev: packet_io device pointer @@ -129,7 +137,7 @@ void packet_io_device_close(struct packet_io_device *dev); **/ int packet_io_device_rx(struct packet_io_device *pdev, uint32_t rxq_id, struct packet **pkts, int nr_pkts); -/* +/** * @brief packet_io device send function * * @param pdev: packet_io device pointer @@ -144,4 +152,23 @@ int packet_io_device_tx(struct packet_io_device *pdev, uint32_t txq_id, struct p **/ void packet_io_pkts_free(struct packet_io_device *pdev, uint32_t qid, struct packet **pkts, int nr_pkts); -int packet_copy_data(uint8_t *ptr, const uint8_t *pkt_data, uint32_t pkt_len); \ No newline at end of file +/** + * @brief get packet_io packet's ctrlzone + * @note ctrlzone's memory is 64 bytes, do not exceed it + */ +void *packet_io_buff_ctrlzone(struct packet_io_device *pdev, struct packet *p); + +/** + * @brief get packet_io packet's data pointer + */ +char *packet_io_buff_mtod(struct packet_io_device *pdev, struct packet *p); + +/** + * @brief get packet_io packet's buffer length + */ +uint32_t packet_io_buff_buflen(struct packet_io_device *pdev, struct packet *p); + +/** + * @brief get packet_io packet's data length + */ +uint32_t packet_io_buff_datalen(struct packet_io_device *pdev, struct packet *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 2ef7fce..14c8eea 100644 --- a/src/packet_io/pcap_file_mode/pio_pcap_file.cpp +++ b/src/packet_io/pcap_file_mode/pio_pcap_file.cpp @@ -240,6 +240,8 @@ int pio_pcap_file_device_open(struct packet_io_device *pdev) return -1; } + pdev->entity.pcap_file_dev_ctx->pio_dev = pdev; + status = pcap_file_shared_init(pdev->entity.pcap_file_dev_ctx, pdev->rxq_num); if (status < 0) { log_error(ST_ERR_PIO_PCAP_FILE_DEVICE, "pcap file shared init failed."); @@ -313,6 +315,7 @@ void pcap_file_pkt_callback_oneshot(char *user, struct pcap_pkthdr *pkt_hdr, u_c return; } + uint32_t nr_rxq = pfile_dev_ctx->pio_dev->rxq_num; /* hash to specific queue id and enqueue hash_id = decode_packet(p) % nr_rxq; @@ -324,7 +327,7 @@ void pcap_file_pkt_callback_oneshot(char *user, struct pcap_pkthdr *pkt_hdr, u_c pthread_mutex_unlock(&pfile_dev_ctx->pkt_queues[rxq_id].mutex_q); } -static int pcap_file_dispatch(struct pio_pcap_file_device_context *pfile_dev_ctx, uint32_t nr_rxq, uint32_t rxq_id, +static int pcap_file_dispatch(struct pio_pcap_file_device_context *pfile_dev_ctx, uint32_t rxq_id, struct packet **pkts, int nr_pkts) { if (pfile_dev_ctx->entity.file->first_pkt_hdr != nullptr) { @@ -495,7 +498,7 @@ static int pcap_directory_collect_pending_files(struct pio_pcap_file_device_cont return 0; } -static int pcap_directory_dispatch(struct pio_pcap_file_device_context *pfile_dev_ctx, uint32_t nr_rxq, uint32_t rxq_id, +static int pcap_directory_dispatch(struct pio_pcap_file_device_context *pfile_dev_ctx, uint32_t rxq_id, struct packet **pkts, int nr_pkts) { int res = -1; @@ -542,7 +545,7 @@ static int pcap_directory_dispatch(struct pio_pcap_file_device_context *pfile_de return -1; } else { pfile_dev_ctx->entity.dir->current_file = pfile_info; - res = pcap_file_dispatch(pfile_dev_ctx, nr_rxq, rxq_id, pkts, nr_pkts); + res = pcap_file_dispatch(pfile_dev_ctx, rxq_id, pkts, nr_pkts); if (res < 0) { FREE(current_file); return -1; @@ -559,7 +562,7 @@ static int pcap_directory_dispatch(struct pio_pcap_file_device_context *pfile_de } } else { /* file has been opened */ - res = pcap_file_dispatch(pfile_dev_ctx, nr_rxq, rxq_id, pkts, nr_pkts); + res = pcap_file_dispatch(pfile_dev_ctx, rxq_id, pkts, nr_pkts); if (res < 0) { return -1; } @@ -590,10 +593,10 @@ int pio_pcap_file_device_receive(struct packet_io_device *pdev, uint32_t rxq_id, int res = -1; if (pfile_dev_ctx->is_dir == 0) { log_info("Start reading file:%s", pfile_dev_ctx->entity.file->file_name); - res = pcap_file_dispatch(pfile_dev_ctx, pdev->rxq_num, rxq_id, pkts, nr_pkts); + res = pcap_file_dispatch(pfile_dev_ctx, rxq_id, pkts, nr_pkts); } else { log_info("Start reading directory:%s", pfile_dev_ctx->entity.dir->dir_name); - res = pcap_directory_dispatch(pfile_dev_ctx, pdev->rxq_num, rxq_id, pkts, nr_pkts); + res = pcap_directory_dispatch(pfile_dev_ctx, rxq_id, pkts, nr_pkts); } //pcap_file_exit(status, &pfile_dev_ctx->shared.last_processed_ts); @@ -601,12 +604,6 @@ int pio_pcap_file_device_receive(struct packet_io_device *pdev, uint32_t rxq_id, return res; } -int pio_pcap_file_device_send(struct packet_io_device *pdev, uint32_t txq_id, struct packet **pkts, int nr_pkts) -{ - - return 0; -} - void pio_pcap_file_device_pkt_free(__unused struct packet_io_device *pdev, __unused uint32_t qid, struct packet **pkts, int nr_pkts) { for (uint32_t i = 0; i < nr_pkts; i++) { @@ -643,4 +640,28 @@ void pio_pcap_file_instance_destroy(struct packet_io_instance *pinst) pio_pcap_file_device_close(pinst->devices[i]); FREE(pinst->devices[i]); } +} + +void *pio_pcap_file_device_buff_ctrlzone(struct packet *p) +{ + struct pio_packet *pkt = (struct pio_packet *)p; + return pkt->pkt_hdr; +} + +char *pio_pcap_file_device_buff_mtod(struct packet *p) +{ + struct pio_packet *pkt = (struct pio_packet *)p; + return (char *)pkt->pkt_payload; +} + +uint32_t pio_pcap_file_device_buff_buflen(struct packet *p) +{ + struct pio_packet *pkt = (struct pio_packet *)p; + return (pkt->pkt_len + CUSTOM_ZONE_LEN); +} + +uint32_t pio_pcap_file_device_buff_datalen(struct packet *p) +{ + struct pio_packet *pkt = (struct pio_packet *)p; + return (pkt->pkt_len); } \ No newline at end of file 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 228ad91..b47bb78 100644 --- a/src/packet_io/pcap_file_mode/pio_pcap_file.h +++ b/src/packet_io/pcap_file_mode/pio_pcap_file.h @@ -77,7 +77,7 @@ struct pcap_file_directory_info { struct pcap_file_shared_info *shared; }; -/* +/** * @brief pio_pcap_file_device_context - pcap file device context **/ struct pio_pcap_file_device_context { @@ -92,9 +92,12 @@ struct pio_pcap_file_device_context { struct pio_packet_queue pkt_queues[PKT_QUEUE_MAX_NUM]; struct pcap_file_shared_info shared; + + /* point to packet_io device it belongs to */ + struct packet_io_device *pio_dev; }; -/* +/** * @brief open pcap_file device * * @param pdev: pcap_file device's pointer which support following params @@ -104,17 +107,23 @@ struct pio_pcap_file_device_context { **/ int pio_pcap_file_device_open(struct packet_io_device *pdev); -/* +/** * @brief close pcap_live device **/ int pio_pcap_file_device_close(struct packet_io_device *pdev); int pio_pcap_file_device_receive(struct packet_io_device *pdev, uint32_t rxq_id, struct packet **pkts, int nr_pkts); -int pio_pcap_file_device_send(struct packet_io_device *pdev, uint32_t txq_id, struct packet **pkts, int nr_pkts); - void pio_pcap_file_device_pkt_free(struct packet_io_device *pdev, uint32_t qid, struct packet **pkts, int nr_pkts); int pio_pcap_file_instance_create(struct packet_io_instance *pinst, int wrk_thread_num); -void pio_pcap_file_instance_destroy(struct packet_io_instance *pinst); \ No newline at end of file +void pio_pcap_file_instance_destroy(struct packet_io_instance *pinst); + +void *pio_pcap_file_device_buff_ctrlzone(struct packet *p); + +char *pio_pcap_file_device_buff_mtod(struct packet *p); + +uint32_t pio_pcap_file_device_buff_buflen(struct packet *p); + +uint32_t pio_pcap_file_device_buff_datalen(struct packet *p); \ 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 e8b77cb..1833b53 100644 --- a/src/packet_io/pcap_live_mode/pio_pcap_live.cpp +++ b/src/packet_io/pcap_live_mode/pio_pcap_live.cpp @@ -21,7 +21,7 @@ #define DEFAULT_MAX_PACKET_SIZE 65535 #define TIMEOUT_MS 500 -static int pcap_live_init(struct pio_pcap_live_device_context *pcap_live_dev_ctx, const char *dev_name, uint32_t nr_rxq) +static int pcap_live_init(struct pio_pcap_live_device_context *pcap_live_dev_ctx, const char *dev_name) { if (nullptr == pcap_live_dev_ctx) { return -1; @@ -114,7 +114,9 @@ int pio_pcap_live_device_open(struct packet_io_device *pdev) pthread_mutex_init(&pdev->entity.pcap_live_dev_ctx->handle_mutex, nullptr); - res = pcap_live_init(pdev->entity.pcap_live_dev_ctx, pdev->dev_name, pdev->rxq_num); + pdev->entity.pcap_live_dev_ctx->pio_dev = pdev; + + res = pcap_live_init(pdev->entity.pcap_live_dev_ctx, pdev->dev_name); if (res < 0) { log_error(ST_ERR_PIO_PCAP_LIVE_DEVICE, "init pcap live failed."); FREE(pdev->entity.pcap_live_dev_ctx); @@ -158,6 +160,7 @@ static void pcap_live_pkt_callback_oneshot(char *user, struct pcap_pkthdr *pkt_h return; } + uint32_t nr_rxq = plive_dev_ctx->pio_dev->rxq_num; /* hash to specific queue id and enqueue hash_id = decode_packet(p) % nr_rxq; @@ -268,4 +271,28 @@ void pio_pcap_live_instance_destroy(struct packet_io_instance *pinst) pio_pcap_live_device_close(pinst->devices[i]); FREE(pinst->devices[i]); } +} + +void *pio_pcap_live_device_buff_ctrlzone(struct packet *p) +{ + struct pio_packet *pkt = (struct pio_packet *)p; + return pkt->pkt_hdr; +} + +char *pio_pcap_live_device_buff_mtod(struct packet *p) +{ + struct pio_packet *pkt = (struct pio_packet *)p; + return (char *)pkt->pkt_payload; +} + +uint32_t pio_pcap_live_device_buff_buflen(struct packet *p) +{ + struct pio_packet *pkt = (struct pio_packet *)p; + return (pkt->pkt_len + CUSTOM_ZONE_LEN); +} + +uint32_t pio_pcap_live_device_buff_datalen(struct packet *p) +{ + struct pio_packet *pkt = (struct pio_packet *)p; + return (pkt->pkt_len); } \ No newline at end of file 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 d25be0a..a9f351d 100644 --- a/src/packet_io/pcap_live_mode/pio_pcap_live.h +++ b/src/packet_io/pcap_live_mode/pio_pcap_live.h @@ -23,7 +23,7 @@ struct pio_pcap_live_instance_context { }; -/* +/** * @brief pio_pcap_file_device_context - pcap file device context **/ struct pio_pcap_live_device_context { @@ -52,9 +52,11 @@ struct pio_pcap_live_device_context { /* rx packet queue */ struct pio_packet_queue pkt_queues[PKT_QUEUE_MAX_NUM]; + + struct packet_io_device *pio_dev; }; -/* +/** * @brief open pcap_live device * * @param pdev: pcap_live device's pointer which support following params @@ -64,7 +66,7 @@ struct pio_pcap_live_device_context { **/ int pio_pcap_live_device_open(struct packet_io_device *pdev); -/* +/** * @brief close pcap_live device **/ int pio_pcap_live_device_close(struct packet_io_device *pdev); @@ -77,4 +79,12 @@ void pio_pcap_live_device_pkt_free(struct packet_io_device *pdev, uint32_t qid, int pio_pcap_live_instance_create(struct packet_io_instance *pinst, int wrk_thread_num); -void pio_pcap_live_instance_destroy(struct packet_io_instance *pinst); \ No newline at end of file +void pio_pcap_live_instance_destroy(struct packet_io_instance *pinst); + +void *pio_pcap_live_device_buff_ctrlzone(struct packet *p); + +char *pio_pcap_live_device_buff_mtod(struct packet *p); + +uint32_t pio_pcap_live_device_buff_buflen(struct packet *p); + +uint32_t pio_pcap_live_device_buff_datalen(struct packet *p); \ No newline at end of file