From 18561bc4fe2ec08cf470599732fca1f31d41d5fa Mon Sep 17 00:00:00 2001 From: luwenpeng Date: Mon, 23 Oct 2023 19:25:30 +0800 Subject: perf: gmock marsio --- test/CMakeLists.txt | 4 +- test/gmock_marsio.cpp | 476 +++++++++++++++++++++++++++++++++++++++++++++++++ test/gtest_utils.h | 8 + test/marsio.cpp | 477 -------------------------------------------------- test/marsio.h | 114 ------------ 5 files changed, 486 insertions(+), 593 deletions(-) create mode 100644 test/gmock_marsio.cpp delete mode 100644 test/marsio.cpp delete mode 100644 test/marsio.h diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index c29cfa0..134d0de 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -2,8 +2,8 @@ # gmock_marsio ############################################################################### -add_library(gmock_marsio marsio.cpp) -target_include_directories(gmock_marsio PUBLIC ${CMAKE_CURRENT_LIST_DIR}) +add_library(gmock_marsio gmock_marsio.cpp) +target_include_directories(gmock_marsio PUBLIC /opt/mrzcpd/include) ############################################################################### # temp_platform diff --git a/test/gmock_marsio.cpp b/test/gmock_marsio.cpp new file mode 100644 index 0000000..40992eb --- /dev/null +++ b/test/gmock_marsio.cpp @@ -0,0 +1,476 @@ +#include +#include +#include +#include +#include "marsio.h" + +struct mr_instance +{ + marsio_buff_t *current_recv_mbuff_ptr; + marsio_buff_t *current_send_mbuff_ptr[128]; + int send_mbuff_ptr_index; + int send_mbuff_ptr_number; +}; + +struct mr_vdev +{ + struct mr_instance *mr_instance; +}; + +struct mr_sendpath +{ + struct mr_instance *mr_instance; +}; + +struct mrb_metadata_route_ctx +{ + uint8_t dir; + uint8_t link_id; + uint16_t port_ingress; + uint16_t port_egress; + uint16_t link_db_index; + uint32_t hash_usr; +}; + +struct mrb_metadata +{ + uint8_t dir : 1; + uint8_t packet_create_from_nf : 1; + uint8_t link_id : 6; + + uint8_t is_ctrlbuf : 1; + uint8_t un_used : 7; + + uint16_t payload_offset; + + uint64_t session_id; + + uint8_t start_sid; + uint8_t nr_sid; + uint16_t cur_sid; + uint16_t sids[8]; + + uint16_t port_ingress; + uint16_t port_egress; + + uint16_t link_db_index; + uint16_t user_data_0; +}; + +struct mock_marsio_buff_t +{ + struct mrb_metadata metadata; + + char *raw_data; + int raw_len; + + int buff_size; + char *buff_start; +} __attribute__((__packed__)); + +struct mr_instance *marsio_create() +{ + struct mr_instance *instance = (struct mr_instance *)calloc(1, sizeof(struct mr_instance)); + instance->send_mbuff_ptr_index = 0; + instance->send_mbuff_ptr_number = 0; + + return instance; +} + +int marsio_destory(struct mr_instance *instance) +{ + if (instance) + { + free(instance); + instance = NULL; + } + + return 0; +} + +struct mr_vdev *marsio_open_device(struct mr_instance *instance, const char *devsym, unsigned int nr_rxstream, unsigned int nr_txstream) +{ + struct mr_vdev *vdev = (struct mr_vdev *)calloc(1, sizeof(struct mr_vdev)); + vdev->mr_instance = instance; + + return vdev; +} + +void marsio_close_device(struct mr_vdev *vdev) +{ + if (vdev) + { + free(vdev); + vdev = NULL; + } +} + +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) +{ + struct mr_sendpath *sendpath = (struct mr_sendpath *)calloc(1, sizeof(struct mr_sendpath)); + sendpath->mr_instance = dest_device->mr_instance; + + return sendpath; +} + +void marsio_sendpath_destory(struct mr_sendpath *sendpath) +{ + if (sendpath) + { + free(sendpath); + sendpath = NULL; + } +} + +int marsio_init(struct mr_instance *instance, const char *appsym) +{ + return 0; +} + +int marsio_option_set(struct mr_instance *instance, marsio_opt_type_t opt_type, void *opt, size_t sz_opt) +{ + return 0; +} + +int marsio_thread_init(struct mr_instance *instance) +{ + return 0; +} + +int marsio_poll_wait(struct mr_instance *instance, struct mr_vdev *vdevs[], unsigned int nr_vdevs, unsigned int tid, int timeout) +{ + return 0; +} + +int marsio_buff_set_metadata(marsio_buff_t *m, enum mr_buff_metadata_type type, void *data, unsigned int sz_data) +{ + struct mock_marsio_buff_t *mbuf = (struct mock_marsio_buff_t *)m; + struct mrb_metadata *mrb_metadata = &mbuf->metadata; + struct mrb_metadata_route_ctx *route_ctx = NULL; + + switch (type) + { + case MR_BUFF_ROUTE_CTX: + route_ctx = (struct mrb_metadata_route_ctx *)data; + assert(route_ctx != NULL); + + mrb_metadata->packet_create_from_nf = 1; + mrb_metadata->dir = route_ctx->dir; + mrb_metadata->port_ingress = route_ctx->port_ingress; + mrb_metadata->port_egress = route_ctx->port_egress; + mrb_metadata->link_db_index = route_ctx->link_db_index; + mrb_metadata->link_id = route_ctx->link_id; + return 0; + case MR_BUFF_SESSION_ID: + mrb_metadata->session_id = *(uint64_t *)data; + return 0; + case MR_BUFF_PAYLOAD_OFFSET: + mrb_metadata->payload_offset = *(uint16_t *)data; + return 0; + case MR_BUFF_USER_0: + mrb_metadata->user_data_0 = *(uint16_t *)data; + return 0; + default: + return -1; + } + + return 0; +} + +int marsio_buff_get_metadata(marsio_buff_t *m, enum mr_buff_metadata_type type, void *data, unsigned int sz_data) +{ + struct mock_marsio_buff_t *mbuf = (struct mock_marsio_buff_t *)m; + struct mrb_metadata *mrb_metadata = &mbuf->metadata; + struct mrb_metadata_route_ctx *route_ctx = NULL; + + switch (type) + { + case MR_BUFF_ROUTE_CTX: + if (sz_data < sizeof(struct mrb_metadata_route_ctx)) + { + return -1; + } + + route_ctx = (struct mrb_metadata_route_ctx *)data; + if (route_ctx != NULL) + { + route_ctx->dir = mrb_metadata->dir; + route_ctx->port_ingress = mrb_metadata->port_ingress; + route_ctx->port_egress = mrb_metadata->port_egress; + route_ctx->link_db_index = mrb_metadata->link_db_index; + route_ctx->link_id = mrb_metadata->link_id; + route_ctx->hash_usr = 0; + } + return sizeof(struct mrb_metadata_route_ctx); + case MR_BUFF_DIR: + if (sz_data < sizeof(unsigned int)) + { + return -1; + } + *(unsigned int *)(data) = (unsigned int)mrb_metadata->dir; + return sizeof(unsigned int); + case MR_BUFF_SESSION_ID: + if (sz_data < sizeof(uint64_t)) + { + return -1; + } + *(uint64_t *)(data) = (uint64_t)mrb_metadata->session_id; + return sizeof(uint64_t); + case MR_BUFF_PAYLOAD_OFFSET: + if (sz_data < sizeof(uint16_t)) + { + return -1; + } + *(uint16_t *)(data) = (uint16_t)mrb_metadata->payload_offset; + return sizeof(uint16_t); + case MR_BUFF_USER_0: + if (sz_data < sizeof(uint16_t)) + { + return -1; + } + *(uint16_t *)(data) = (uint16_t)mrb_metadata->user_data_0; + return sizeof(uint16_t); + default: + return -1; + } + + return 0; +} + +int marsio_buff_set_sid_list(marsio_buff_t *m, sid_t *slist, uint8_t sz_slist) +{ + struct mock_marsio_buff_t *mbuf = (struct mock_marsio_buff_t *)m; + struct mrb_metadata *mrb_metadata = &mbuf->metadata; + + if (sz_slist > sizeof(mrb_metadata->sids) / sizeof(mrb_metadata->sids[0])) + { + return -1; + } + + for (uint8_t i = 0; i < sz_slist; i++) + { + mrb_metadata->sids[i] = slist[i]; + } + + mrb_metadata->start_sid = 0; + mrb_metadata->nr_sid = sz_slist; + return 0; +} + +int marsio_buff_get_sid_list(marsio_buff_t *m, sid_t *out_slist, uint8_t sz_out_slist) +{ + struct mock_marsio_buff_t *mbuf = (struct mock_marsio_buff_t *)m; + struct mrb_metadata *mrb_metadata = &mbuf->metadata; + + uint8_t out_i = 0; + for (uint8_t i = mrb_metadata->start_sid; i < mrb_metadata->start_sid + mrb_metadata->nr_sid && out_i < sz_out_slist; i++, out_i++) + { + out_slist[out_i] = mrb_metadata->sids[i]; + } + + return out_i; +} + +int marsio_buff_malloc_global(struct mr_instance *instance, marsio_buff_t *marsio_buff[], unsigned int nr_mbufs, int socket_id, int thread_id) +{ + for (unsigned int i = 0; i < nr_mbufs; i++) + { + struct mock_marsio_buff_t *mbuf = (struct mock_marsio_buff_t *)calloc(1, sizeof(struct mock_marsio_buff_t) + 4096); + + mbuf->buff_size = 4096; + mbuf->buff_start = (char *)mbuf + sizeof(struct mock_marsio_buff_t); + mbuf->raw_data = mbuf->buff_start + 50; + + marsio_buff[i] = mbuf; + } + return nr_mbufs; +} + +void marsio_buff_free(struct mr_instance *instance, marsio_buff_t *marsio_buff[], unsigned int nr_mbufs, int socket_id, int thread_id) +{ + for (unsigned int i = 0; i < nr_mbufs; i++) + { + struct mock_marsio_buff_t *mbuf = (struct mock_marsio_buff_t *)marsio_buff[i]; + if (mbuf) + { + memset(mbuf, 0, sizeof(struct mock_marsio_buff_t)); + + free(mbuf); + mbuf = NULL; + } + } +} + +char *marsio_buff_mtod(marsio_buff_t *m) +{ + struct mock_marsio_buff_t *mbuf = (struct mock_marsio_buff_t *)m; + + return mbuf->raw_data; +} + +uint32_t marsio_buff_datalen(marsio_buff_t *m) +{ + struct mock_marsio_buff_t *mbuf = (struct mock_marsio_buff_t *)m; + + return mbuf->raw_len; +} + +char *marsio_buff_adj(marsio_buff_t *m, uint16_t len) +{ + struct mock_marsio_buff_t *mbuf = (struct mock_marsio_buff_t *)m; + + mbuf->raw_data += len; + mbuf->raw_len -= len; + return mbuf->raw_data; +} + +char *marsio_buff_append(marsio_buff_t *m, uint16_t len) +{ + struct mock_marsio_buff_t *mbuf = (struct mock_marsio_buff_t *)m; + + mbuf->raw_len += len; + return mbuf->raw_data; +} + +char *marsio_buff_prepend(marsio_buff_t *m, uint16_t len) +{ + struct mock_marsio_buff_t *mbuf = (struct mock_marsio_buff_t *)m; + + mbuf->raw_len += len; + mbuf->raw_data -= len; + return mbuf->raw_data; +} + +void marsio_buff_ctrlzone_reset(marsio_buff_t *m) +{ + struct mock_marsio_buff_t *mbuf = (struct mock_marsio_buff_t *)m; + struct mrb_metadata *mrb_metadata = &mbuf->metadata; + + memset(mrb_metadata, 0, sizeof(struct mrb_metadata)); +} + +int marsio_buff_is_ctrlbuf(marsio_buff_t *m) +{ + struct mock_marsio_buff_t *mbuf = (struct mock_marsio_buff_t *)m; + struct mrb_metadata *mrb_metadata = &mbuf->metadata; + + return mrb_metadata->is_ctrlbuf; +} + +void marsio_buff_set_ctrlbuf(marsio_buff_t *m) +{ + struct mock_marsio_buff_t *mbuf = (struct mock_marsio_buff_t *)m; + struct mrb_metadata *mrb_metadata = &mbuf->metadata; + + mrb_metadata->is_ctrlbuf = 1; +} + +int marsio_recv_burst(struct mr_vdev *vdev, queue_id_t qid, marsio_buff_t *mbufs[], int nr_mbufs) +{ + mbufs[0] = vdev->mr_instance->current_recv_mbuff_ptr; + + return 1; +} + +int marsio_send_burst(struct mr_sendpath *sendpath, queue_id_t qid, marsio_buff_t *mbufs[], int nr_mbufs) +{ + assert(nr_mbufs == 1); + sendpath->mr_instance->current_send_mbuff_ptr[sendpath->mr_instance->send_mbuff_ptr_index] = mbufs[0]; + sendpath->mr_instance->send_mbuff_ptr_index++; + sendpath->mr_instance->send_mbuff_ptr_number++; + + return marsio_buff_datalen(mbufs[0]); +} + +int marsio_send_burst_with_options(struct mr_sendpath *sendpath, queue_id_t sid, marsio_buff_t *mbufs[], int nr_mbufs, uint16_t options) +{ + return marsio_send_burst(sendpath, sid, mbufs, nr_mbufs); +} + +// new add, only for gtest +void marsio_set_recv_mbuff(struct mr_instance *instance, marsio_buff_t *mbuff) +{ + instance->current_recv_mbuff_ptr = mbuff; +} + +void marsio_set_send_mbuff(struct mr_instance *instance, marsio_buff_t *mbuff) +{ + instance->current_send_mbuff_ptr[instance->send_mbuff_ptr_index] = mbuff; + instance->send_mbuff_ptr_index++; + instance->send_mbuff_ptr_number++; +} + +marsio_buff_t *marsio_get_recv_mbuff(struct mr_instance *instance) +{ + return instance->current_recv_mbuff_ptr; +} + +marsio_buff_t *marsio_get_send_mbuff(struct mr_instance *instance) +{ + if (instance->send_mbuff_ptr_number) + { + marsio_buff_t *buff = instance->current_send_mbuff_ptr[instance->send_mbuff_ptr_index - instance->send_mbuff_ptr_number]; + instance->send_mbuff_ptr_number--; + return buff; + } + else + { + return NULL; + } +} + +int marsio_mbuff_cmp(marsio_buff_t *mbuff1, marsio_buff_t *mbuff2) +{ + struct mock_marsio_buff_t *mbuf1 = (struct mock_marsio_buff_t *)mbuff1; + struct mock_marsio_buff_t *mbuf2 = (struct mock_marsio_buff_t *)mbuff2; + + if (mbuf1 == mbuf2) + { + return 0; + } + + if (mbuf1 && mbuf2) + { + if (memcmp(&mbuf1->metadata, &mbuf2->metadata, sizeof(struct mrb_metadata)) != 0) + { + return 1; + } + + if (mbuf1->raw_len != mbuf2->raw_len) + { + return 1; + } + if (memcmp(mbuf1->raw_data, mbuf2->raw_data, mbuf2->raw_len) != 0) + { + return 1; + } + else + { + return 0; + } + } + else + { + return 1; + } +} + +marsio_buff_t *marsio_mbuff_dup(marsio_buff_t *m) +{ + struct mock_marsio_buff_t *orig = (struct mock_marsio_buff_t *)m; + struct mock_marsio_buff_t *mbuf = (struct mock_marsio_buff_t *)calloc(1, sizeof(struct mock_marsio_buff_t) + 4096); + + mbuf->buff_size = 4096; + mbuf->buff_start = (char *)mbuf + sizeof(struct mock_marsio_buff_t); + mbuf->raw_data = mbuf->buff_start + 50; + + memcpy(&mbuf->metadata, &orig->metadata, sizeof(struct mrb_metadata)); + memcpy(mbuf->raw_data, orig->raw_data, orig->raw_len); + mbuf->raw_len = orig->raw_len; + + return mbuf; +} \ No newline at end of file diff --git a/test/gtest_utils.h b/test/gtest_utils.h index cc214f5..73dac58 100644 --- a/test/gtest_utils.h +++ b/test/gtest_utils.h @@ -18,6 +18,14 @@ extern "C" #include "health_check.h" #include "global_metrics.h" +// new add, only for gtest +extern void marsio_set_recv_mbuff(struct mr_instance *instance, marsio_buff_t *mbuff); +extern void marsio_set_send_mbuff(struct mr_instance *instance, marsio_buff_t *mbuff); +extern marsio_buff_t *marsio_get_recv_mbuff(struct mr_instance *instance); +extern marsio_buff_t *marsio_get_send_mbuff(struct mr_instance *instance); +extern int marsio_mbuff_cmp(marsio_buff_t *mbuff1, marsio_buff_t *mbuff2); +extern marsio_buff_t *marsio_mbuff_dup(marsio_buff_t *m); + #define set_metadata(meta, id, offset, is_ctrl, is_decrypt) \ { \ memset(&meta, 0, sizeof(meta)); \ diff --git a/test/marsio.cpp b/test/marsio.cpp deleted file mode 100644 index c58e61e..0000000 --- a/test/marsio.cpp +++ /dev/null @@ -1,477 +0,0 @@ -#include -#include -#include -#include - -#include "marsio.h" - -struct mr_instance -{ - marsio_buff_t *current_recv_mbuff_ptr; - marsio_buff_t *current_send_mbuff_ptr[128]; - int send_mbuff_ptr_index; - int send_mbuff_ptr_number; -}; - -struct mr_vdev -{ - struct mr_instance *mr_instance; -}; - -struct mr_sendpath -{ - struct mr_instance *mr_instance; -}; - -struct mrb_metadata_route_ctx -{ - uint8_t dir; - uint8_t link_id; - uint16_t port_ingress; - uint16_t port_egress; - uint16_t link_db_index; - uint32_t hash_usr; -}; - -struct mrb_metadata -{ - uint8_t dir : 1; - uint8_t packet_create_from_nf : 1; - uint8_t link_id : 6; - - uint8_t is_ctrlbuf : 1; - uint8_t un_used : 7; - - uint16_t payload_offset; - - uint64_t session_id; - - uint8_t start_sid; - uint8_t nr_sid; - uint16_t cur_sid; - uint16_t sids[8]; - - uint16_t port_ingress; - uint16_t port_egress; - - uint16_t link_db_index; - uint16_t user_data_0; -}; - -struct mock_marsio_buff_t -{ - struct mrb_metadata metadata; - - char *raw_data; - int raw_len; - - int buff_size; - char *buff_start; -} __attribute__((__packed__)); - -struct mr_instance *marsio_create() -{ - struct mr_instance *instance = (struct mr_instance *)calloc(1, sizeof(struct mr_instance)); - instance->send_mbuff_ptr_index = 0; - instance->send_mbuff_ptr_number = 0; - - return instance; -} - -int marsio_destory(struct mr_instance *instance) -{ - if (instance) - { - free(instance); - instance = NULL; - } - - return 0; -} - -struct mr_vdev *marsio_open_device(struct mr_instance *instance, const char *devsym, unsigned int nr_rxstream, unsigned int nr_txstream) -{ - struct mr_vdev *vdev = (struct mr_vdev *)calloc(1, sizeof(struct mr_vdev)); - vdev->mr_instance = instance; - - return vdev; -} - -void marsio_close_device(struct mr_vdev *vdev) -{ - if (vdev) - { - free(vdev); - vdev = NULL; - } -} - -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) -{ - struct mr_sendpath *sendpath = (struct mr_sendpath *)calloc(1, sizeof(struct mr_sendpath)); - sendpath->mr_instance = dest_device->mr_instance; - - return sendpath; -} - -void marsio_sendpath_destory(struct mr_sendpath *sendpath) -{ - if (sendpath) - { - free(sendpath); - sendpath = NULL; - } -} - -int marsio_init(struct mr_instance *instance, const char *appsym) -{ - return 0; -} - -int marsio_option_set(struct mr_instance *instance, marsio_opt_type_t opt_type, void *opt, size_t sz_opt) -{ - return 0; -} - -int marsio_thread_init(struct mr_instance *instance) -{ - return 0; -} - -int marsio_poll_wait(struct mr_instance *instance, struct mr_vdev *vdevs[], unsigned int nr_vdevs, unsigned int tid, int timeout) -{ - return 0; -} - -int marsio_buff_set_metadata(marsio_buff_t *m, enum mr_buff_metadata_type type, void *data, unsigned int sz_data) -{ - struct mock_marsio_buff_t *mbuf = (struct mock_marsio_buff_t *)m; - struct mrb_metadata *mrb_metadata = &mbuf->metadata; - struct mrb_metadata_route_ctx *route_ctx = NULL; - - switch (type) - { - case MR_BUFF_ROUTE_CTX: - route_ctx = (struct mrb_metadata_route_ctx *)data; - assert(route_ctx != NULL); - - mrb_metadata->packet_create_from_nf = 1; - mrb_metadata->dir = route_ctx->dir; - mrb_metadata->port_ingress = route_ctx->port_ingress; - mrb_metadata->port_egress = route_ctx->port_egress; - mrb_metadata->link_db_index = route_ctx->link_db_index; - mrb_metadata->link_id = route_ctx->link_id; - return 0; - case MR_BUFF_SESSION_ID: - mrb_metadata->session_id = *(uint64_t *)data; - return 0; - case MR_BUFF_PAYLOAD_OFFSET: - mrb_metadata->payload_offset = *(uint16_t *)data; - return 0; - case MR_BUFF_USER_0: - mrb_metadata->user_data_0 = *(uint16_t *)data; - return 0; - default: - return -1; - } - - return 0; -} - -int marsio_buff_get_metadata(marsio_buff_t *m, enum mr_buff_metadata_type type, void *data, unsigned int sz_data) -{ - struct mock_marsio_buff_t *mbuf = (struct mock_marsio_buff_t *)m; - struct mrb_metadata *mrb_metadata = &mbuf->metadata; - struct mrb_metadata_route_ctx *route_ctx = NULL; - - switch (type) - { - case MR_BUFF_ROUTE_CTX: - if (sz_data < sizeof(struct mrb_metadata_route_ctx)) - { - return -1; - } - - route_ctx = (struct mrb_metadata_route_ctx *)data; - if (route_ctx != NULL) - { - route_ctx->dir = mrb_metadata->dir; - route_ctx->port_ingress = mrb_metadata->port_ingress; - route_ctx->port_egress = mrb_metadata->port_egress; - route_ctx->link_db_index = mrb_metadata->link_db_index; - route_ctx->link_id = mrb_metadata->link_id; - route_ctx->hash_usr = 0; - } - return sizeof(struct mrb_metadata_route_ctx); - case MR_BUFF_DIR: - if (sz_data < sizeof(unsigned int)) - { - return -1; - } - *(unsigned int *)(data) = (unsigned int)mrb_metadata->dir; - return sizeof(unsigned int); - case MR_BUFF_SESSION_ID: - if (sz_data < sizeof(uint64_t)) - { - return -1; - } - *(uint64_t *)(data) = (uint64_t)mrb_metadata->session_id; - return sizeof(uint64_t); - case MR_BUFF_PAYLOAD_OFFSET: - if (sz_data < sizeof(uint16_t)) - { - return -1; - } - *(uint16_t *)(data) = (uint16_t)mrb_metadata->payload_offset; - return sizeof(uint16_t); - case MR_BUFF_USER_0: - if (sz_data < sizeof(uint16_t)) - { - return -1; - } - *(uint16_t *)(data) = (uint16_t)mrb_metadata->user_data_0; - return sizeof(uint16_t); - default: - return -1; - } - - return 0; -} - -int marsio_buff_set_sid_list(marsio_buff_t *m, sid_t *slist, uint8_t sz_slist) -{ - struct mock_marsio_buff_t *mbuf = (struct mock_marsio_buff_t *)m; - struct mrb_metadata *mrb_metadata = &mbuf->metadata; - - if (sz_slist > sizeof(mrb_metadata->sids) / sizeof(mrb_metadata->sids[0])) - { - return -1; - } - - for (uint8_t i = 0; i < sz_slist; i++) - { - mrb_metadata->sids[i] = slist[i]; - } - - mrb_metadata->start_sid = 0; - mrb_metadata->nr_sid = sz_slist; - return 0; -} - -int marsio_buff_get_sid_list(marsio_buff_t *m, sid_t *out_slist, uint8_t sz_out_slist) -{ - struct mock_marsio_buff_t *mbuf = (struct mock_marsio_buff_t *)m; - struct mrb_metadata *mrb_metadata = &mbuf->metadata; - - uint8_t out_i = 0; - for (uint8_t i = mrb_metadata->start_sid; i < mrb_metadata->start_sid + mrb_metadata->nr_sid && out_i < sz_out_slist; i++, out_i++) - { - out_slist[out_i] = mrb_metadata->sids[i]; - } - - return out_i; -} - -int marsio_buff_malloc_global(struct mr_instance *instance, marsio_buff_t *marsio_buff[], unsigned int nr_mbufs, int socket_id, int thread_id) -{ - for (unsigned int i = 0; i < nr_mbufs; i++) - { - struct mock_marsio_buff_t *mbuf = (struct mock_marsio_buff_t *)calloc(1, sizeof(struct mock_marsio_buff_t) + 4096); - - mbuf->buff_size = 4096; - mbuf->buff_start = (char *)mbuf + sizeof(struct mock_marsio_buff_t); - mbuf->raw_data = mbuf->buff_start + 50; - - marsio_buff[i] = mbuf; - } - return nr_mbufs; -} - -void marsio_buff_free(struct mr_instance *instance, marsio_buff_t *marsio_buff[], unsigned int nr_mbufs, int socket_id, int thread_id) -{ - for (unsigned int i = 0; i < nr_mbufs; i++) - { - struct mock_marsio_buff_t *mbuf = (struct mock_marsio_buff_t *)marsio_buff[i]; - if (mbuf) - { - memset(mbuf, 0, sizeof(struct mock_marsio_buff_t)); - - free(mbuf); - mbuf = NULL; - } - } -} - -char *marsio_buff_mtod(marsio_buff_t *m) -{ - struct mock_marsio_buff_t *mbuf = (struct mock_marsio_buff_t *)m; - - return mbuf->raw_data; -} - -uint32_t marsio_buff_datalen(marsio_buff_t *m) -{ - struct mock_marsio_buff_t *mbuf = (struct mock_marsio_buff_t *)m; - - return mbuf->raw_len; -} - -char *marsio_buff_adj(marsio_buff_t *m, uint16_t len) -{ - struct mock_marsio_buff_t *mbuf = (struct mock_marsio_buff_t *)m; - - mbuf->raw_data += len; - mbuf->raw_len -= len; - return mbuf->raw_data; -} - -char *marsio_buff_append(marsio_buff_t *m, uint16_t len) -{ - struct mock_marsio_buff_t *mbuf = (struct mock_marsio_buff_t *)m; - - mbuf->raw_len += len; - return mbuf->raw_data; -} - -char *marsio_buff_prepend(marsio_buff_t *m, uint16_t len) -{ - struct mock_marsio_buff_t *mbuf = (struct mock_marsio_buff_t *)m; - - mbuf->raw_len += len; - mbuf->raw_data -= len; - return mbuf->raw_data; -} - -void marsio_buff_ctrlzone_reset(marsio_buff_t *m) -{ - struct mock_marsio_buff_t *mbuf = (struct mock_marsio_buff_t *)m; - struct mrb_metadata *mrb_metadata = &mbuf->metadata; - - memset(mrb_metadata, 0, sizeof(struct mrb_metadata)); -} - -int marsio_buff_is_ctrlbuf(marsio_buff_t *m) -{ - struct mock_marsio_buff_t *mbuf = (struct mock_marsio_buff_t *)m; - struct mrb_metadata *mrb_metadata = &mbuf->metadata; - - return mrb_metadata->is_ctrlbuf; -} - -void marsio_buff_set_ctrlbuf(marsio_buff_t *m) -{ - struct mock_marsio_buff_t *mbuf = (struct mock_marsio_buff_t *)m; - struct mrb_metadata *mrb_metadata = &mbuf->metadata; - - mrb_metadata->is_ctrlbuf = 1; -} - -int marsio_recv_burst(struct mr_vdev *vdev, queue_id_t qid, marsio_buff_t *mbufs[], int nr_mbufs) -{ - mbufs[0] = vdev->mr_instance->current_recv_mbuff_ptr; - - return 1; -} - -int marsio_send_burst(struct mr_sendpath *sendpath, queue_id_t qid, marsio_buff_t *mbufs[], int nr_mbufs) -{ - assert(nr_mbufs == 1); - sendpath->mr_instance->current_send_mbuff_ptr[sendpath->mr_instance->send_mbuff_ptr_index] = mbufs[0]; - sendpath->mr_instance->send_mbuff_ptr_index++; - sendpath->mr_instance->send_mbuff_ptr_number++; - - return marsio_buff_datalen(mbufs[0]); -} - -int marsio_send_burst_with_options(struct mr_sendpath *sendpath, queue_id_t sid, marsio_buff_t *mbufs[], int nr_mbufs, uint16_t options) -{ - return marsio_send_burst(sendpath, sid, mbufs, nr_mbufs); -} - -// new add, only for gtest -void marsio_set_recv_mbuff(struct mr_instance *instance, marsio_buff_t *mbuff) -{ - instance->current_recv_mbuff_ptr = mbuff; -} - -void marsio_set_send_mbuff(struct mr_instance *instance, marsio_buff_t *mbuff) -{ - instance->current_send_mbuff_ptr[instance->send_mbuff_ptr_index] = mbuff; - instance->send_mbuff_ptr_index++; - instance->send_mbuff_ptr_number++; -} - -marsio_buff_t *marsio_get_recv_mbuff(struct mr_instance *instance) -{ - return instance->current_recv_mbuff_ptr; -} - -marsio_buff_t *marsio_get_send_mbuff(struct mr_instance *instance) -{ - if (instance->send_mbuff_ptr_number) - { - marsio_buff_t *buff = instance->current_send_mbuff_ptr[instance->send_mbuff_ptr_index - instance->send_mbuff_ptr_number]; - instance->send_mbuff_ptr_number--; - return buff; - } - else - { - return NULL; - } -} - -int marsio_mbuff_cmp(marsio_buff_t *mbuff1, marsio_buff_t *mbuff2) -{ - struct mock_marsio_buff_t *mbuf1 = (struct mock_marsio_buff_t *)mbuff1; - struct mock_marsio_buff_t *mbuf2 = (struct mock_marsio_buff_t *)mbuff2; - - if (mbuf1 == mbuf2) - { - return 0; - } - - if (mbuf1 && mbuf2) - { - if (memcmp(&mbuf1->metadata, &mbuf2->metadata, sizeof(struct mrb_metadata)) != 0) - { - return 1; - } - - if (mbuf1->raw_len != mbuf2->raw_len) - { - return 1; - } - if (memcmp(mbuf1->raw_data, mbuf2->raw_data, mbuf2->raw_len) != 0) - { - return 1; - } - else - { - return 0; - } - } - else - { - return 1; - } -} - -marsio_buff_t *marsio_mbuff_dup(marsio_buff_t *m) -{ - struct mock_marsio_buff_t *orig = (struct mock_marsio_buff_t *)m; - struct mock_marsio_buff_t *mbuf = (struct mock_marsio_buff_t *)calloc(1, sizeof(struct mock_marsio_buff_t) + 4096); - - mbuf->buff_size = 4096; - mbuf->buff_start = (char *)mbuf + sizeof(struct mock_marsio_buff_t); - mbuf->raw_data = mbuf->buff_start + 50; - - memcpy(&mbuf->metadata, &orig->metadata, sizeof(struct mrb_metadata)); - memcpy(mbuf->raw_data, orig->raw_data, orig->raw_len); - mbuf->raw_len = orig->raw_len; - - return mbuf; -} \ No newline at end of file diff --git a/test/marsio.h b/test/marsio.h deleted file mode 100644 index 9c522f6..0000000 --- a/test/marsio.h +++ /dev/null @@ -1,114 +0,0 @@ -#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, - 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 -- cgit v1.2.3