[PACKET_IO] add pio_packet structure for pcap_live/pcap_file mode
This commit is contained in:
@@ -58,6 +58,9 @@ struct packet_io_config {
|
||||
|
||||
/* promiscuous value */
|
||||
int promisc;
|
||||
|
||||
/* marsio ctrlzone id */
|
||||
int mr_ctrlzone_id;
|
||||
};
|
||||
|
||||
struct lib_config {
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
/*
|
||||
**********************************************************************************************
|
||||
* File: packet_queue.h
|
||||
* Description: packet queue structure and api
|
||||
* Authors: Liu WenTan <liuwentan@geedgenetworks.com>
|
||||
* Date: 2022-07-15
|
||||
* Copyright: (c) 2018-2022 Geedge Networks, Inc. All rights reserved.
|
||||
***********************************************************************************************
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "../../sdk/include/packet.h"
|
||||
|
||||
#define PKT_QUEUE_MAX_NUM 256
|
||||
|
||||
#define SET_PKT_LEN(p, len) do { \
|
||||
(p)->pkt_len = (len); \
|
||||
} while(0)
|
||||
|
||||
#define GET_PKT_DIRECT_DATA(p) (uint8_t *)((p) + 1)
|
||||
|
||||
struct packet_queue {
|
||||
struct packet *top;
|
||||
struct packet *bot;
|
||||
uint32_t len;
|
||||
pthread_mutex_t mutex_q;
|
||||
};
|
||||
|
||||
void packet_enqueue(struct packet_queue *, struct packet *);
|
||||
struct packet *packet_dequeue(struct packet_queue *);
|
||||
void release_packet_queue(struct packet_queue *);
|
||||
@@ -9,9 +9,9 @@
|
||||
*/
|
||||
|
||||
#include "../../sdk/include/utils.h"
|
||||
#include "packet_queue.h"
|
||||
#include "pio_packet_queue.h"
|
||||
|
||||
void packet_enqueue(struct packet_queue *q, struct packet *p)
|
||||
void pio_packet_enqueue(struct pio_packet_queue *q, struct pio_packet *p)
|
||||
{
|
||||
if (nullptr == p)
|
||||
return;
|
||||
@@ -32,9 +32,9 @@ void packet_enqueue(struct packet_queue *q, struct packet *p)
|
||||
q->len++;
|
||||
}
|
||||
|
||||
struct packet *packet_dequeue(struct packet_queue *q)
|
||||
struct pio_packet *pio_packet_dequeue(struct pio_packet_queue *q)
|
||||
{
|
||||
struct packet *p = NULL;
|
||||
struct pio_packet *p = NULL;
|
||||
|
||||
/* if the queue is empty there are no packets left. */
|
||||
if (q->len == 0) {
|
||||
@@ -58,17 +58,19 @@ struct packet *packet_dequeue(struct packet_queue *q)
|
||||
|
||||
p->next = nullptr;
|
||||
p->prev = nullptr;
|
||||
|
||||
return p;
|
||||
}
|
||||
|
||||
void release_packet_queue(struct packet_queue *q)
|
||||
void release_pio_packet_queue(struct pio_packet_queue *q)
|
||||
{
|
||||
if (nullptr == q) {
|
||||
return;
|
||||
}
|
||||
|
||||
while (q->len != 0) {
|
||||
struct packet *p = packet_dequeue(q);
|
||||
struct pio_packet *p = pio_packet_dequeue(q);
|
||||
q->len--;
|
||||
FREE(p);
|
||||
}
|
||||
}
|
||||
62
src/common/pio_packet_queue.h
Normal file
62
src/common/pio_packet_queue.h
Normal file
@@ -0,0 +1,62 @@
|
||||
/*
|
||||
**********************************************************************************************
|
||||
* File: pio_packet_queue.h
|
||||
* Description: pio packet queue structure and api
|
||||
* Authors: Liu WenTan <liuwentan@geedgenetworks.com>
|
||||
* Date: 2022-07-15
|
||||
* Copyright: (c) 2018-2022 Geedge Networks, Inc. All rights reserved.
|
||||
***********************************************************************************************
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#define PKT_QUEUE_MAX_NUM 256
|
||||
|
||||
#define CUSTOM_ZONE_LEN 64
|
||||
#define ETHERNET_HEADER_LEN 14
|
||||
#define DEFAULT_MTU 1500
|
||||
#define DEFAULT_PACKET_SIZE (CUSTOM_ZONE_LEN + DEFAULT_MTU + ETHERNET_HEADER_LEN)
|
||||
|
||||
#define SIZE_OF_PIO_PACKET (DEFAULT_PACKET_SIZE + sizeof(struct pio_packet))
|
||||
|
||||
/*
|
||||
* @brief pcap_live/pcap_file mode packet structure
|
||||
*
|
||||
* |<-pkt_hdr |<-pkt_payload
|
||||
* | |
|
||||
* | struct pio_packet | custom zone | L2 header | ...... |
|
||||
* 64bytes 14bytes 1500bytes
|
||||
*
|
||||
* custom zone: user can set custom field
|
||||
* pkt_payload: received packet data
|
||||
**/
|
||||
struct pio_packet {
|
||||
/* pkt header pointer */
|
||||
void *pkt_hdr;
|
||||
|
||||
/* pkt length */
|
||||
uint64_t pkt_len;
|
||||
|
||||
/* pkt payload pointer */
|
||||
void *pkt_payload;
|
||||
|
||||
/* reference counts */
|
||||
uint64_t ref_cnt;
|
||||
|
||||
struct pio_packet *prev;
|
||||
|
||||
struct pio_packet *next;
|
||||
};
|
||||
|
||||
struct pio_packet_queue {
|
||||
struct pio_packet *top;
|
||||
struct pio_packet *bot;
|
||||
uint32_t len;
|
||||
pthread_mutex_t mutex_q;
|
||||
};
|
||||
|
||||
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 *);
|
||||
Reference in New Issue
Block a user