diff --git a/src/app.toml b/src/app.toml index ac30016..83a8f4b 100644 --- a/src/app.toml +++ b/src/app.toml @@ -5,12 +5,15 @@ thread_num = 1 [PACKET_IO] """ example1: - run_mode = pcap_live interface = [eth0, eth1] +example2: +run_mode = marsio +work_thread_num = 10 # Prompt marsio how many threads to start to receive packets +interface = [eth0] - -""" -run_mode = pcap_live # three mode: pcap_file/pcap_live/marsio -interface = [eth0, eth1] +example3: +run_mode = pcap_file +pcap_file_path = /tmp/pcapfile/001.pcap # if single file, specify dir+filename; if pcapfile directory, specify dir +""" \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index 5b2e558..e47815a 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -55,7 +55,7 @@ void packet_io_loop(struct packet_io_loop_arg *arg) struct packet_io_device * packet_io_init(const char *instance_name, const enum packet_io_run_mode mode, const int wrk_thread_num) { - struct packet_io_instance *ppio_inst = packet_io_instance_create(instance_name, mode, wrk_thread_num); + struct packet_io_instance *ppio_inst = packet_io_instance_create(instance_name, mode); if (nullptr == ppio_inst) { log_error(ST_ERR_PIO_INSTANCE, "packet_io instance init failed."); return nullptr; diff --git a/src/packet_io/marsio_mode/pio_marsio.cpp b/src/packet_io/marsio_mode/pio_marsio.cpp index b94dd77..73c9f31 100644 --- a/src/packet_io/marsio_mode/pio_marsio.cpp +++ b/src/packet_io/marsio_mode/pio_marsio.cpp @@ -283,7 +283,7 @@ int pio_marsio_device_open(struct packet_io_device *pdev) } pdev->entity.marsio_dev_ctx->pio_dev = pdev; - + struct mr_instance *mr_inst_handle = pdev->ppio_inst->entity.marsio_inst_ctx->mr_inst_handle; /* marsio_open_device() return marsio device handle*/ pdev->entity.marsio_dev_ctx->mr_dev_handle = \ @@ -353,7 +353,7 @@ void pio_marsio_device_pkt_free(struct packet_io_device *pdev, uint32_t qid, str g_marsio_dll_func.marsio_buff_free(mr_inst, (marsio_buff_t **)pkts, nr_pkts, MARSIO_SOCKET_ID_ANY, qid); } -static int marsio_instance_init(struct packet_io_instance *pinst, int wrk_thread_num) +static int marsio_instance_init(struct packet_io_instance *pinst) { int ret = -1; ret = pio_get_marsio_dll_function_entries(); @@ -368,6 +368,7 @@ static int marsio_instance_init(struct packet_io_instance *pinst, int wrk_thread return -1; } + int wrk_thread_num = g_engine_instance.config.packet_io.thread_num; /* TODO: MARSIO_OPT_THREAD_NUM */ ret = g_marsio_dll_func.marsio_option_set(pinst->entity.marsio_inst_ctx->mr_inst_handle, MARSIO_OPT_THREAD_NUM, @@ -394,7 +395,7 @@ static int marsio_instance_init(struct packet_io_instance *pinst, int wrk_thread * * @param: pinst(in/out) */ -int pio_marsio_instance_create(struct packet_io_instance *pinst, int wrk_thread_num) +int pio_marsio_instance_create(struct packet_io_instance *pinst) { if (nullptr == pinst) { log_error(ST_ERR_PIO_MARSIO_INSTANCE, "invalid marsio instance pointer."); @@ -408,7 +409,7 @@ int pio_marsio_instance_create(struct packet_io_instance *pinst, int wrk_thread_ } /* instance init */ - int ret = marsio_instance_init(pinst, wrk_thread_num); + int ret = marsio_instance_init(pinst); if (ret < 0) { log_error(ST_ERR_PIO_MARSIO_INSTANCE, "marsio instance init failed."); return -1; diff --git a/src/packet_io/marsio_mode/pio_marsio.h b/src/packet_io/marsio_mode/pio_marsio.h index fa6d736..f10e160 100644 --- a/src/packet_io/marsio_mode/pio_marsio.h +++ b/src/packet_io/marsio_mode/pio_marsio.h @@ -83,7 +83,7 @@ struct pio_marsio_instance_context { }; /** - * struct pio_marsio_device_context - marsio device context + * @brief struct pio_marsio_device_context - marsio device context * @mr_dev_handle: marsio device handle * if marsio device receive packets, use mr_dev_handle * @mr_sendpath_handle: marsio sendpath handle @@ -96,6 +96,21 @@ struct pio_marsio_device_context { struct packet_io_device *pio_dev; }; +/** + * @brief + * + * @param pinst + * @return int + */ +int pio_marsio_instance_create(struct packet_io_instance *pinst); + +/** + * @brief + * + * @param pinst + */ +void pio_marsio_instance_destroy(struct packet_io_instance *pinst); + /** * @brief open marsio device * @@ -145,10 +160,6 @@ int pio_marsio_device_send(struct packet_io_device *pdev, uint32_t txq_id, struc */ void pio_marsio_device_pkt_free(struct packet_io_device *pdev, uint32_t qid, struct packet **pkts, int nr_pkts); -int pio_marsio_instance_create(struct packet_io_instance *pinst, int wrk_thread_num); - -void pio_marsio_instance_destroy(struct packet_io_instance *pinst); - void *pio_marsio_device_buff_ctrlzone(struct packet *p); char *pio_marsio_device_buff_mtod(struct packet *p); diff --git a/src/packet_io/packet_io.cpp b/src/packet_io/packet_io.cpp index 56ec943..770c5b4 100644 --- a/src/packet_io/packet_io.cpp +++ b/src/packet_io/packet_io.cpp @@ -72,17 +72,9 @@ struct pio_instance_operations pio_instance_ops_array[PACKET_IO_RUN_MODE_MAX] = }; struct packet_io_instance * -packet_io_instance_create(const char *inst_name, const enum packet_io_run_mode mode, const int wrk_thread_num) +packet_io_instance_create(const char *inst_name, const enum packet_io_run_mode mode) { - if (nullptr == inst_name) { - return nullptr; - } - - if (mode < PACKET_IO_RUN_MODE_PCAP_FILE || mode >= PACKET_IO_RUN_MODE_MAX) { - return nullptr; - } - - if (wrk_thread_num < 0) { + if (nullptr == inst_name || mode < PACKET_IO_RUN_MODE_PCAP_FILE || mode >= PACKET_IO_RUN_MODE_MAX) { return nullptr; } @@ -96,7 +88,7 @@ packet_io_instance_create(const char *inst_name, const enum packet_io_run_mode m pio_instance->mode = mode; pio_instance->inst_ops = &pio_instance_ops_array[mode]; - int ret = pio_instance->inst_ops->create(pio_instance, wrk_thread_num); + int ret = pio_instance->inst_ops->create(pio_instance); if (ret < 0) { log_error(ST_ERR_PIO_INSTANCE, "packet_io instance create failed."); return nullptr; diff --git a/src/packet_io/packet_io.h b/src/packet_io/packet_io.h index abbc815..9c58192 100644 --- a/src/packet_io/packet_io.h +++ b/src/packet_io/packet_io.h @@ -26,7 +26,7 @@ **/ struct pio_instance_operations { - int (*create)(struct packet_io_instance *pinst, int wrk_thread_num); + int (*create)(struct packet_io_instance *pinst); void (*destroy)(struct packet_io_instance *pinst); }; @@ -104,11 +104,9 @@ struct packet_io_device { * * @param instance_name: packet_io instance name * @param mode: packet_io run mode - * @param wrk_thread_num: expected number of packet receiving threads, which will be created by packet_io, - * this param is useful only in marsio mode **/ struct packet_io_instance * -packet_io_instance_create(const char *instance_name, const enum packet_io_run_mode mode, const int wrk_thread_num); +packet_io_instance_create(const char *instance_name, const enum packet_io_run_mode mode); /* destroy packet_io instance */ void packet_io_instance_destroy(struct packet_io_instance *pinst); diff --git a/src/packet_io/pcap_file_mode/pio_pcap_file.cpp b/src/packet_io/pcap_file_mode/pio_pcap_file.cpp index 14c8eea..d84f227 100644 --- a/src/packet_io/pcap_file_mode/pio_pcap_file.cpp +++ b/src/packet_io/pcap_file_mode/pio_pcap_file.cpp @@ -612,7 +612,7 @@ void pio_pcap_file_device_pkt_free(__unused struct packet_io_device *pdev, __unu } } -int pio_pcap_file_instance_create(struct packet_io_instance *pinst, __unused int wrk_thread_num) +int pio_pcap_file_instance_create(struct packet_io_instance *pinst) { if (nullptr == pinst) { log_error(ST_ERR_PIO_PCAP_FILE_INSTANCE, "invalid pcap file instance pointer."); diff --git a/src/packet_io/pcap_file_mode/pio_pcap_file.h b/src/packet_io/pcap_file_mode/pio_pcap_file.h index b47bb78..498cda6 100644 --- a/src/packet_io/pcap_file_mode/pio_pcap_file.h +++ b/src/packet_io/pcap_file_mode/pio_pcap_file.h @@ -97,6 +97,21 @@ struct pio_pcap_file_device_context { struct packet_io_device *pio_dev; }; +/** + * @brief + * + * @param pinst + * @return int + */ +int pio_pcap_file_instance_create(struct packet_io_instance *pinst); + +/** + * @brief + * + * @param pinst + */ +void pio_pcap_file_instance_destroy(struct packet_io_instance *pinst); + /** * @brief open pcap_file device * @@ -116,10 +131,6 @@ int pio_pcap_file_device_receive(struct packet_io_device *pdev, uint32_t rxq_id, void pio_pcap_file_device_pkt_free(struct packet_io_device *pdev, uint32_t qid, struct packet **pkts, int nr_pkts); -int pio_pcap_file_instance_create(struct packet_io_instance *pinst, int wrk_thread_num); - -void pio_pcap_file_instance_destroy(struct packet_io_instance *pinst); - void *pio_pcap_file_device_buff_ctrlzone(struct packet *p); char *pio_pcap_file_device_buff_mtod(struct packet *p); diff --git a/src/packet_io/pcap_live_mode/pio_pcap_live.cpp b/src/packet_io/pcap_live_mode/pio_pcap_live.cpp index 1833b53..c896fe7 100644 --- a/src/packet_io/pcap_live_mode/pio_pcap_live.cpp +++ b/src/packet_io/pcap_live_mode/pio_pcap_live.cpp @@ -243,7 +243,7 @@ void pio_pcap_live_device_pkt_free(__unused struct packet_io_device *pdev, __unu } } -int pio_pcap_live_instance_create(struct packet_io_instance *pinst, __unused int wrk_thread_num) +int pio_pcap_live_instance_create(struct packet_io_instance *pinst) { if (nullptr == pinst) { log_error(ST_ERR_PIO_PCAP_LIVE_INSTANCE, "invalid pcap live instance pointer."); diff --git a/src/packet_io/pcap_live_mode/pio_pcap_live.h b/src/packet_io/pcap_live_mode/pio_pcap_live.h index a9f351d..02bf4cc 100644 --- a/src/packet_io/pcap_live_mode/pio_pcap_live.h +++ b/src/packet_io/pcap_live_mode/pio_pcap_live.h @@ -56,6 +56,22 @@ struct pio_pcap_live_device_context { struct packet_io_device *pio_dev; }; +/** + * @brief + * + * @param pinst + * @param wrk_thread_num + * @return int + */ +int pio_pcap_live_instance_create(struct packet_io_instance *pinst); + +/** + * @brief + * + * @param pinst + */ +void pio_pcap_live_instance_destroy(struct packet_io_instance *pinst); + /** * @brief open pcap_live device * @@ -77,10 +93,6 @@ int pio_pcap_live_device_send(struct packet_io_device *pdev, uint32_t txq_id, st void pio_pcap_live_device_pkt_free(struct packet_io_device *pdev, uint32_t qid, struct packet **pkts, int nr_pkts); -int pio_pcap_live_instance_create(struct packet_io_instance *pinst, int wrk_thread_num); - -void pio_pcap_live_instance_destroy(struct packet_io_instance *pinst); - void *pio_pcap_live_device_buff_ctrlzone(struct packet *p); char *pio_pcap_live_device_buff_mtod(struct packet *p); diff --git a/src/packet_io/test/gtest_packet_io.cpp b/src/packet_io/test/gtest_packet_io.cpp index 31f3052..7bbe42f 100644 --- a/src/packet_io/test/gtest_packet_io.cpp +++ b/src/packet_io/test/gtest_packet_io.cpp @@ -4,13 +4,13 @@ TEST(PACKET_IO_Test, packet_io_instance_create) { struct packet_io_config ppio_config; - struct packet_io_instance *ppio_inst = packet_io_instance_create("stellar", PACKET_IO_RUN_MODE_PCAP_FILE, 2); + struct packet_io_instance *ppio_inst = packet_io_instance_create("stellar", PACKET_IO_RUN_MODE_PCAP_FILE); EXPECT_NE(ppio_inst, nullptr); } TEST(PACKET_IO_Test, packet_io_open_device) { struct packet_io_config ppio_config; - struct packet_io_instance *ppio_inst = packet_io_instance_create("stellar", PACKET_IO_RUN_MODE_PCAP_FILE, 2); + struct packet_io_instance *ppio_inst = packet_io_instance_create("stellar", PACKET_IO_RUN_MODE_PCAP_FILE); EXPECT_EQ(packet_io_device_open(ppio_inst, nullptr, 1, 1), nullptr); }