76 lines
2.1 KiB
C
76 lines
2.1 KiB
C
#ifndef _PACKET_IO_H
|
|
#define _PACKET_IO_H
|
|
|
|
#ifdef __cplusplus
|
|
extern "C"
|
|
{
|
|
#endif
|
|
|
|
#include <marsio.h>
|
|
|
|
/******************************************************************************
|
|
* Packet IO API for gtest
|
|
******************************************************************************/
|
|
|
|
struct sids
|
|
{
|
|
sid_t elems[MR_SID_LIST_MAXLEN];
|
|
int num;
|
|
};
|
|
|
|
struct route_ctx
|
|
{
|
|
char data[64];
|
|
int len;
|
|
};
|
|
|
|
struct metadata
|
|
{
|
|
uint64_t session_id;
|
|
uint32_t rehash_index;
|
|
|
|
char *raw_data; // refer to current packet data
|
|
int raw_len;
|
|
uint16_t l7offset;
|
|
uint16_t link_id;
|
|
|
|
int direction; // 1: E2I; 0: I2E
|
|
int is_ctrl_pkt;
|
|
int is_decrypted;
|
|
|
|
struct sids sids;
|
|
struct route_ctx route_ctx;
|
|
};
|
|
|
|
int mbuff_get_metadata(marsio_buff_t *rx_buff, struct metadata *meta);
|
|
int mbuff_set_metadata(marsio_buff_t *tx_buff, struct metadata *meta);
|
|
void vlan_encapsulate(marsio_buff_t *mbuff, int vlan_id, int replace_orig_vlan_header);
|
|
struct mr_instance *packet_io_get_mr_instance(struct packet_io *handle);
|
|
|
|
/******************************************************************************
|
|
* Packet IO API for global
|
|
******************************************************************************/
|
|
|
|
struct packet_io *packet_io_create(const char *profile, int thread_num, cpu_set_t *coremask);
|
|
void packet_io_destory(struct packet_io *handle);
|
|
|
|
/******************************************************************************
|
|
* Packet IO API for thread
|
|
******************************************************************************/
|
|
|
|
// return 0 for success
|
|
// return -1 for error
|
|
int packet_io_init(struct packet_io *handle, struct thread_ctx *thread_ctx);
|
|
void packet_io_wait(struct packet_io *handle, struct thread_ctx *thread_ctx, int timeout_ms);
|
|
|
|
// return n_packet_recved
|
|
int packet_io_polling_nf(struct packet_io *handle, struct thread_ctx *thread_ctx);
|
|
int packet_io_polling_endpoint_l3(struct packet_io *handle, struct thread_ctx *thread_ctx);
|
|
int packet_io_polling_endpoint_l2(struct packet_io *handle, struct thread_ctx *thread_ctx);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|