refactor(session manager): turning the session manager into a stellar module
This commit is contained in:
@@ -18,6 +18,7 @@ struct packet_manager_config
|
||||
|
||||
struct packet_manager_schema
|
||||
{
|
||||
struct exdata_schema *exdata;
|
||||
struct mq_schema *mq;
|
||||
int topic_id[PACKET_STAGE_MAX];
|
||||
};
|
||||
@@ -50,17 +51,17 @@ const char *packet_stage_to_str(enum packet_stage stage)
|
||||
switch (stage)
|
||||
{
|
||||
case PACKET_STAGE_PREROUTING:
|
||||
return "prerouting";
|
||||
return "PACKET_STAGE_PREROUTING";
|
||||
case PACKET_STAGE_INPUT:
|
||||
return "input";
|
||||
return "PACKET_STAGE_INPUT";
|
||||
case PACKET_STAGE_FORWARD:
|
||||
return "forward";
|
||||
return "PACKET_STAGE_FORWARD";
|
||||
case PACKET_STAGE_OUTPUT:
|
||||
return "output";
|
||||
return "PACKET_STAGE_OUTPUT";
|
||||
case PACKET_STAGE_POSTROUTING:
|
||||
return "postrouting";
|
||||
return "PACKET_STAGE_POSTROUTING";
|
||||
default:
|
||||
return "unknown";
|
||||
return "PACKET_STAGE_UNKNOWN";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -102,7 +103,7 @@ static struct packet_manager_config *packet_manager_config_new(const char *toml_
|
||||
* packet manager schema
|
||||
******************************************************************************/
|
||||
|
||||
static void on_packet_stage_dispatch(int topic_id, const void *msg, on_msg_cb_func *cb, void *cb_arg, void *dispatch_arg)
|
||||
static void on_packet_stage_dispatch(int topic_id, void *msg, on_msg_cb_func *cb, void *cb_arg, void *dispatch_arg)
|
||||
{
|
||||
assert(msg);
|
||||
assert(dispatch_arg);
|
||||
@@ -120,7 +121,7 @@ static void on_packet_stage_dispatch(int topic_id, const void *msg, on_msg_cb_fu
|
||||
}
|
||||
}
|
||||
|
||||
((on_packet_stage_callback *)cb)(stage, pkt, cb_arg);
|
||||
((on_packet_stage_callback *)(void *)cb)(stage, pkt, cb_arg);
|
||||
}
|
||||
|
||||
static void packet_manager_schema_free(struct packet_manager_schema *pkt_mgr_schema)
|
||||
@@ -138,6 +139,11 @@ static void packet_manager_schema_free(struct packet_manager_schema *pkt_mgr_sch
|
||||
}
|
||||
}
|
||||
|
||||
if (pkt_mgr_schema->exdata)
|
||||
{
|
||||
exdata_schema_free(pkt_mgr_schema->exdata);
|
||||
}
|
||||
|
||||
free(pkt_mgr_schema);
|
||||
pkt_mgr_schema = NULL;
|
||||
}
|
||||
@@ -152,11 +158,17 @@ static struct packet_manager_schema *packet_manager_schema_new(struct mq_schema
|
||||
return NULL;
|
||||
}
|
||||
|
||||
pkt_mgr_schema->mq = mq;
|
||||
pkt_mgr_schema->exdata = exdata_schema_new();
|
||||
if (pkt_mgr_schema->exdata == NULL)
|
||||
{
|
||||
PACKET_MANAGER_LOG_ERROR("failed to create exdata_schema");
|
||||
goto error_out;
|
||||
}
|
||||
|
||||
pkt_mgr_schema->mq = mq;
|
||||
for (int i = 0; i < PACKET_STAGE_MAX; i++)
|
||||
{
|
||||
pkt_mgr_schema->topic_id[i] = mq_schema_create_topic(pkt_mgr_schema->mq, packet_stage_to_str(i), (on_msg_dispatch_cb_func *)on_packet_stage_dispatch, pkt_mgr_schema, NULL, NULL);
|
||||
pkt_mgr_schema->topic_id[i] = mq_schema_create_topic(pkt_mgr_schema->mq, packet_stage_to_str(i), &on_packet_stage_dispatch, pkt_mgr_schema, NULL, NULL);
|
||||
if (pkt_mgr_schema->topic_id[i] < 0)
|
||||
{
|
||||
PACKET_MANAGER_LOG_ERROR("failed to create topic %s", packet_stage_to_str(i));
|
||||
@@ -276,7 +288,12 @@ void packet_manager_free(struct packet_manager *pkt_mgr)
|
||||
}
|
||||
}
|
||||
|
||||
int packet_manager_subscribe(struct packet_manager *pkt_mgr, enum packet_stage stage, on_packet_stage_callback cb, void *args)
|
||||
int packet_manager_new_packet_exdata_index(struct packet_manager *pkt_mgr, const char *name, exdata_free *func, void *arg)
|
||||
{
|
||||
return exdata_schema_new_index(pkt_mgr->schema->exdata, name, func, arg);
|
||||
}
|
||||
|
||||
int packet_manager_subscribe(struct packet_manager *pkt_mgr, enum packet_stage stage, on_packet_stage_callback *cb, void *args)
|
||||
{
|
||||
return mq_schema_subscribe(pkt_mgr->schema->mq, pkt_mgr->schema->topic_id[stage], (on_msg_cb_func *)cb, args);
|
||||
}
|
||||
@@ -291,6 +308,8 @@ void packet_manager_init(struct packet_manager *pkt_mgr, uint16_t thread_id, str
|
||||
void packet_manager_ingress(struct packet_manager *pkt_mgr, uint16_t thread_id, struct packet *pkt)
|
||||
{
|
||||
struct packet_manager_runtime *runtime = pkt_mgr->runtime[thread_id];
|
||||
struct exdata_runtime *exdata_rt = exdata_runtime_new(pkt_mgr->schema->exdata);
|
||||
packet_set_user_data(pkt, exdata_rt);
|
||||
|
||||
runtime->stat.total.pkts_ingress++;
|
||||
runtime->stat.queue[PACKET_STAGE_PREROUTING].pkts_in++;
|
||||
@@ -307,6 +326,9 @@ struct packet *packet_manager_egress(struct packet_manager *pkt_mgr, uint16_t th
|
||||
runtime->stat.total.pkts_egress++;
|
||||
runtime->stat.queue[PACKET_STAGE_MAX].pkts_out++;
|
||||
TAILQ_REMOVE(&runtime->queue[PACKET_STAGE_MAX], pkt, stage_tqe);
|
||||
|
||||
struct exdata_runtime *exdata_rt = packet_get_user_data(pkt);
|
||||
exdata_runtime_free(exdata_rt);
|
||||
}
|
||||
return pkt;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user