#ifndef _MARSIO_H #define _MARSIO_H #ifdef __cpluscplus extern "C" { #endif #include #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 }; 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); // 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