summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorliuwentan <[email protected]>2022-08-09 18:32:25 +0800
committerliuwentan <[email protected]>2022-08-09 18:32:25 +0800
commit873b25794bb155a26abf28e59b8cd0cc36362031 (patch)
tree152193c996549368033e81a9ddff8161498a8434
parentc2d5b9cdb700da2ba2cca4105200248632f024d6 (diff)
[PACKET_IO] add function for operating packets
-rw-r--r--src/common/pio_packet_queue.cpp16
-rw-r--r--src/common/pio_packet_queue.h8
-rw-r--r--src/packet_io/marsio_mode/pio_marsio.cpp24
-rw-r--r--src/packet_io/marsio_mode/pio_marsio.h30
-rw-r--r--src/packet_io/packet_io.cpp39
-rw-r--r--src/packet_io/packet_io.h41
-rw-r--r--src/packet_io/pcap_file_mode/pio_pcap_file.cpp45
-rw-r--r--src/packet_io/pcap_file_mode/pio_pcap_file.h21
-rw-r--r--src/packet_io/pcap_live_mode/pio_pcap_live.cpp31
-rw-r--r--src/packet_io/pcap_live_mode/pio_pcap_live.h18
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 <[email protected]>
* Date: 2022-07-15
@@ -8,9 +8,23 @@
***********************************************************************************************
*/
+#include <string.h>
+
#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 <marsio.h>
-/*
- * 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);
+}
+
+char *packet_io_buff_mtod(struct packet_io_device *pdev, struct packet *p)
+{
+ return pdev->dev_ops->buff_mtod(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);
+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