diff --git a/include/stellar/packet.h b/include/stellar/packet.h index 2e4b78e..413676a 100644 --- a/include/stellar/packet.h +++ b/include/stellar/packet.h @@ -16,6 +16,9 @@ extern "C" #include #include +#include "stellar/exdata.h" +#include "stellar/module_manager.h" + struct packet; /****************************************************************************** * layer @@ -188,6 +191,34 @@ uint16_t packet_get_payload_len(const struct packet *pkt); void packet_set_exdata(struct packet *pkt, int idx, void *ex_ptr); void *packet_get_exdata(struct packet *pkt, int idx); +/****************************************************************************** + * packet manager + ******************************************************************************/ + +enum packet_stage +{ + PACKET_STAGE_PREROUTING, + PACKET_STAGE_INPUT, + PACKET_STAGE_FORWARD, + PACKET_STAGE_OUTPUT, + PACKET_STAGE_POSTROUTING, + PACKET_STAGE_MAX, +}; + +struct packet_manager; +struct packet_manager *stellar_module_get_packet_manager(struct stellar_module_manager *mod_mgr); +int packet_manager_new_packet_exdata_index(struct packet_manager *pkt_mgr, const char *name, exdata_free *func, void *arg); + +typedef void on_packet_stage_callback(struct packet *pkt, enum packet_stage stage, void *arg); +int packet_manager_subscribe(struct packet_manager *pkt_mgr, enum packet_stage stage, on_packet_stage_callback *cb, void *arg); + +// if two modules claim the same packet at the same stage, the second 'claim' fails. +// return 0 on success +// return -1 on failure +typedef void on_packet_claimed_callback(struct packet *pkt, void *arg); +int packet_manager_claim_packet(struct packet_manager *pkt_mgr, uint16_t thread_id, struct packet *pkt, on_packet_claimed_callback cb, void *arg); +void packet_manager_schedule_packet(struct packet_manager *pkt_mgr, uint16_t thread_id, struct packet *pkt, enum packet_stage stage); + #ifdef __cplusplus } #endif diff --git a/include/stellar/packet_manager.h b/include/stellar/packet_manager.h deleted file mode 100644 index 870eb2a..0000000 --- a/include/stellar/packet_manager.h +++ /dev/null @@ -1,41 +0,0 @@ -#pragma once - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include "stellar/exdata.h" -#include "stellar/packet.h" - -#include "stellar/module_manager.h" - -enum packet_stage -{ - PACKET_STAGE_PREROUTING, - PACKET_STAGE_INPUT, - PACKET_STAGE_FORWARD, - PACKET_STAGE_OUTPUT, - PACKET_STAGE_POSTROUTING, - PACKET_STAGE_MAX, -}; - -struct packet_manager; - -struct packet_manager *stellar_module_get_packet_manager(struct stellar_module_manager *mod_mgr); - -int packet_manager_new_packet_exdata_index(struct packet_manager *pkt_mgr, const char *name, exdata_free *func, void *arg); - -typedef void on_packet_stage_callback(enum packet_stage stage, struct packet *pkt, void *arg); -int packet_manager_subscribe(struct packet_manager *pkt_mgr, enum packet_stage stage, on_packet_stage_callback *cb, void *arg); - -// if two modules claim the same packet at the same stage, the second 'claim' fails. -// return 0 on success -// return -1 on failure -typedef void on_packet_claimed_callback(struct packet *pkt, void *arg); -int packet_manager_claim_packet(struct packet_manager *pkt_mgr, uint16_t thread_id, struct packet *pkt, on_packet_claimed_callback cb, void *arg); -void packet_manager_schedule_packet(struct packet_manager *pkt_mgr, uint16_t thread_id, struct packet *pkt, enum packet_stage stage); - -#ifdef __cplusplus -} -#endif diff --git a/infra/packet_manager/packet_manager.c b/infra/packet_manager/packet_manager.c index ba1c28d..5623107 100644 --- a/infra/packet_manager/packet_manager.c +++ b/infra/packet_manager/packet_manager.c @@ -2,7 +2,7 @@ #include "utils_internal.h" #include "packet_internal.h" -#include "packet_manager_internal.h" +#include "packet_manager.h" #define PACKET_MANAGER_MODULE_NAME "packet_manager_module" @@ -113,7 +113,7 @@ static void on_packet_stage_dispatch(int topic_id, void *msg, on_msg_cb_func *cb } } - ((on_packet_stage_callback *)(void *)cb)(stage, pkt, cb_arg); + ((on_packet_stage_callback *)(void *)cb)(pkt, stage, cb_arg); } static void packet_schema_free(struct packet_manager_schema *pkt_mgr_schema) @@ -223,7 +223,7 @@ int packet_manager_new_packet_exdata_index(struct packet_manager *pkt_mgr, const int packet_manager_subscribe(struct packet_manager *pkt_mgr, enum packet_stage stage, on_packet_stage_callback *cb, void *arg) { assert(pkt_mgr); - return mq_schema_subscribe(pkt_mgr->schema->mq, pkt_mgr->schema->topic_id[stage], (on_msg_cb_func *)cb, arg); + return mq_schema_subscribe(pkt_mgr->schema->mq, pkt_mgr->schema->topic_id[stage], (on_msg_cb_func *)(void *)cb, arg); } int packet_manager_init(struct packet_manager *pkt_mgr, uint16_t thread_id, struct mq_runtime *mq_rt) diff --git a/infra/packet_manager/packet_manager_internal.h b/infra/packet_manager/packet_manager.h similarity index 97% rename from infra/packet_manager/packet_manager_internal.h rename to infra/packet_manager/packet_manager.h index dc7a979..7821758 100644 --- a/infra/packet_manager/packet_manager_internal.h +++ b/infra/packet_manager/packet_manager.h @@ -6,7 +6,7 @@ extern "C" #endif #include "stellar/mq.h" -#include "stellar/packet_manager.h" +#include "stellar/packet.h" #define PACKET_QUEUE_MAX (PACKET_STAGE_MAX + 1) diff --git a/infra/packet_manager/test/gtest_packet_manager.cpp b/infra/packet_manager/test/gtest_packet_manager.cpp index e447c32..902b7c7 100644 --- a/infra/packet_manager/test/gtest_packet_manager.cpp +++ b/infra/packet_manager/test/gtest_packet_manager.cpp @@ -2,7 +2,7 @@ #include "packet_parser.h" #include "packet_internal.h" -#include "packet_manager_internal.h" +#include "packet_manager.h" /****************************************************************************** * [Protocols in frame: eth:ethertype:ip:ipv6:tcp] @@ -99,7 +99,7 @@ TEST(PACKET_MANAGER, NEW_FREE) #endif #if 1 -static void on_packet_stage(enum packet_stage stage, struct packet *pkt, void *args) +static void on_packet_stage(struct packet *pkt, enum packet_stage stage, void *args) { printf("on_packet_stage: %s\n", packet_stage_to_str(stage)); @@ -178,7 +178,7 @@ static void packet_claimed(struct packet *pkt, void *args) free(str); } -static void claim_packet_success(enum packet_stage stage, struct packet *pkt, void *args) +static void claim_packet_success(struct packet *pkt, enum packet_stage stage, void *args) { struct packet_manager *pkt_mgr = (struct packet_manager *)args; @@ -193,7 +193,7 @@ static void claim_packet_success(enum packet_stage stage, struct packet *pkt, vo count++; } -static void claim_packet_failed(enum packet_stage stage, struct packet *pkt, void *args) +static void claim_packet_failed(struct packet *pkt, enum packet_stage stage, void *args) { struct packet_manager *pkt_mgr = (struct packet_manager *)args; @@ -271,7 +271,7 @@ TEST(PACKET_MANAGER, CLAIM_PACKET) #endif #if 1 -static void on_packet_stage_schedule_packet(enum packet_stage stage, struct packet *pkt, void *args) +static void on_packet_stage_schedule_packet(struct packet *pkt, enum packet_stage stage, void *args) { struct packet_manager *pkt_mgr = (struct packet_manager *)args; @@ -365,7 +365,7 @@ static void schedule_claimed_packet(struct packet *pkt, void *args) packet_manager_schedule_packet(pkt_mgr, thread_id, pkt, PACKET_STAGE_POSTROUTING); } -static void on_packet_stage_claim_packet_to_schedule(enum packet_stage stage, struct packet *pkt, void *args) +static void on_packet_stage_claim_packet_to_schedule(struct packet *pkt, enum packet_stage stage, void *args) { struct packet_manager *pkt_mgr = (struct packet_manager *)args; diff --git a/infra/session_manager/session_manager.c b/infra/session_manager/session_manager.c index 11457cf..7a6aabe 100644 --- a/infra/session_manager/session_manager.c +++ b/infra/session_manager/session_manager.c @@ -1,10 +1,8 @@ #include #include -#include "stellar/exdata.h" -#include "stellar/packet_manager.h" +#include "stellar/packet.h" #include "stellar/session_manager.h" -#include "stellar/module_manager.h" #include "utils_internal.h" #include "session_internal.h" @@ -88,7 +86,7 @@ static void on_session_free(void *msg, void *args) session_manager_runtime_free_session(sess_mgr_rt, sess); } -static void on_packet_forward(enum packet_stage stage, struct packet *pkt, void *args) +static void on_packet_forward(struct packet *pkt, enum packet_stage stage, void *args) { struct session_manager *sess_mgr = (struct session_manager *)args; struct stellar_module_manager *mod_mgr = sess_mgr->mod_mgr; @@ -180,7 +178,7 @@ fast_path: return; } -static void on_packet_output(enum packet_stage stage, struct packet *pkt, void *args) +static void on_packet_output(struct packet *pkt, enum packet_stage stage, void *args) { struct session_manager *sess_mgr = (struct session_manager *)args; struct stellar_module_manager *mod_mgr = sess_mgr->mod_mgr; diff --git a/infra/stellar_core.c b/infra/stellar_core.c index 06e91de..ab9a39f 100644 --- a/infra/stellar_core.c +++ b/infra/stellar_core.c @@ -9,7 +9,7 @@ #include "log_internal.h" #include "utils_internal.h" #include "packet_internal.h" -#include "packet_manager_internal.h" +#include "packet_manager.h" #include "module_manager_interna.h" #define CORE_LOG_FATAL(format, ...) STELLAR_LOG_FATAL(__thread_local_logger, "core", format, ##__VA_ARGS__) diff --git a/infra/version.map b/infra/version.map index 28aaa35..9f1ee3a 100644 --- a/infra/version.map +++ b/infra/version.map @@ -2,10 +2,8 @@ LIBSTELLAR_DEVEL { global: packet_get_layer_count; packet_get_layer_by_idx; - packet_get_tunnel_count; packet_get_tunnel_by_idx; - packet_prepend_sids; packet_get_direction; packet_set_action; @@ -17,6 +15,14 @@ global: packet_build_tcp; packet_build_udp; packet_build_l3; + packet_manager_on_init; + packet_manager_on_exit; + packet_manager_on_thread_init; + packet_manager_on_thread_exit; + packet_manager_new_packet_exdata_index; + packet_manager_subscribe; + packet_manager_claim_packet; + packet_manager_schedule_packet; exdata_*; mq_*; @@ -52,15 +58,6 @@ global: log_print; log_check_level; - packet_manager_on_init; - packet_manager_on_exit; - packet_manager_on_thread_init; - packet_manager_on_thread_exit; - packet_manager_new_packet_exdata_index; - packet_manager_subscribe; - packet_manager_claim_packet; - packet_manager_schedule_packet; - session_manager_on_init; session_manager_on_exit; session_manager_on_thread_init;