115 lines
3.9 KiB
C
115 lines
3.9 KiB
C
#ifndef _MARSIO_H
|
|
#define _MARSIO_H
|
|
|
|
#ifdef __cpluscplus
|
|
extern "C"
|
|
{
|
|
#endif
|
|
|
|
#include <stdint.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
|
|
|
|
#define MR_SID_LIST_MAXLEN 8
|
|
|
|
typedef uint16_t sid_t;
|
|
typedef uint32_t queue_id_t;
|
|
typedef void marsio_buff_t;
|
|
|
|
typedef enum
|
|
{
|
|
MARSIO_OPT_THREAD_NUM,
|
|
MARSIO_OPT_THREAD_MASK,
|
|
MARSIO_OPT_THREAD_AFFINITY_MODE,
|
|
MARSIO_OPT_EXIT_WHEN_ERR,
|
|
MARSIO_OPT_THREAD_MASK_IN_CPUSET,
|
|
} marsio_opt_type_t;
|
|
|
|
enum mr_buff_metadata_type
|
|
{
|
|
MR_BUFF_REHASH_INDEX = 0,
|
|
MR_BUFF_METADATA_VLAN_TCI = 1,
|
|
MR_BUFF_ROUTE_CTX = 2,
|
|
MR_BUFF_SESSION_ID = 3,
|
|
MR_BUFF_DIR = 4,
|
|
MR_BUFF_PAYLOAD_OFFSET = 5,
|
|
MR_BUFF_USER_0 = 254,
|
|
};
|
|
|
|
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;
|
|
|
|
struct mr_instance *marsio_create();
|
|
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);
|
|
|
|
void marsio_get_device_ether_addr(struct mr_vdev *vdev, void *str_ether_addr, uint8_t size);
|
|
|
|
struct mr_sendpath *marsio_sendpath_create_by_vdev(struct mr_vdev *dest_device);
|
|
void marsio_sendpath_destory(struct mr_sendpath *sendpath);
|
|
|
|
int marsio_init(struct mr_instance *instance, const char *appsym);
|
|
int marsio_option_set(struct mr_instance *instance, marsio_opt_type_t opt_type, void *opt, size_t sz_opt);
|
|
int marsio_thread_init(struct mr_instance *instance);
|
|
int marsio_poll_wait(struct mr_instance *instance, struct mr_vdev *vdevs[], unsigned int nr_vdevs, unsigned int tid, int timeout);
|
|
|
|
int marsio_buff_set_metadata(marsio_buff_t *m, enum mr_buff_metadata_type type, void *data, unsigned int sz_data);
|
|
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_sid_list(marsio_buff_t *m, sid_t *slist, uint8_t sz_slist);
|
|
int marsio_buff_get_sid_list(marsio_buff_t *m, sid_t *out_slist, uint8_t sz_out_slist);
|
|
|
|
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);
|
|
|
|
char *marsio_buff_mtod(marsio_buff_t *m);
|
|
uint32_t marsio_buff_datalen(marsio_buff_t *m);
|
|
|
|
char *marsio_buff_adj(marsio_buff_t *m, uint16_t len);
|
|
char *marsio_buff_append(marsio_buff_t *m, uint16_t len);
|
|
char *marsio_buff_prepend(marsio_buff_t *m, uint16_t len);
|
|
|
|
void marsio_buff_ctrlzone_reset(marsio_buff_t *m);
|
|
|
|
int marsio_buff_is_ctrlbuf(marsio_buff_t *m);
|
|
void marsio_buff_set_ctrlbuf(marsio_buff_t *m);
|
|
|
|
int marsio_recv_burst(struct mr_vdev *vdev, 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);
|
|
|
|
// new add, only for gtest
|
|
void marsio_set_recv_mbuff(struct mr_instance *instance, marsio_buff_t *mbuff);
|
|
void marsio_set_send_mbuff(struct mr_instance *instance, marsio_buff_t *mbuff);
|
|
marsio_buff_t *marsio_get_recv_mbuff(struct mr_instance *instance);
|
|
marsio_buff_t *marsio_get_send_mbuff(struct mr_instance *instance);
|
|
|
|
int marsio_mbuff_cmp(marsio_buff_t *mbuff1, marsio_buff_t *mbuff2);
|
|
marsio_buff_t *marsio_mbuff_dup(marsio_buff_t *m);
|
|
|
|
#ifdef __cpluscplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|