|
|
|
|
@@ -109,7 +109,7 @@ TEST(PACKET_MANAGER, NEW_FREE)
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#if 1
|
|
|
|
|
static void on_packet(struct packet *pkt, void *args)
|
|
|
|
|
static void on_packet(struct packet *pkt, struct module *mod)
|
|
|
|
|
{
|
|
|
|
|
enum packet_stage stage = packet_get_stage(pkt);
|
|
|
|
|
printf("on_packet_stage: %s\n", packet_stage_to_str(stage));
|
|
|
|
|
@@ -123,7 +123,7 @@ static void on_packet(struct packet *pkt, void *args)
|
|
|
|
|
static int count = 0;
|
|
|
|
|
EXPECT_TRUE(count == stage);
|
|
|
|
|
EXPECT_TRUE(packet_get_type(pkt) == PACKET_TYPE_PSEUDO);
|
|
|
|
|
EXPECT_TRUE(args == NULL);
|
|
|
|
|
EXPECT_TRUE(mod == NULL);
|
|
|
|
|
count++;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -176,7 +176,7 @@ TEST(PACKET_MANAGER, REGISTER)
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#if 1
|
|
|
|
|
static void drop_packet(struct packet *pkt, void *args)
|
|
|
|
|
static void drop_packet(struct packet *pkt, struct module *mod)
|
|
|
|
|
{
|
|
|
|
|
enum packet_stage stage = packet_get_stage(pkt);
|
|
|
|
|
printf("on_packet_stage: %s\n", packet_stage_to_str(stage));
|
|
|
|
|
@@ -190,7 +190,7 @@ static void drop_packet(struct packet *pkt, void *args)
|
|
|
|
|
static int count = 0;
|
|
|
|
|
EXPECT_TRUE(count == stage);
|
|
|
|
|
EXPECT_TRUE(packet_get_type(pkt) == PACKET_TYPE_PSEUDO);
|
|
|
|
|
EXPECT_TRUE(args == NULL);
|
|
|
|
|
EXPECT_TRUE(mod == NULL);
|
|
|
|
|
count++;
|
|
|
|
|
|
|
|
|
|
if (stage == PACKET_STAGE_FORWARD)
|
|
|
|
|
@@ -247,9 +247,9 @@ TEST(PACKET_MANAGER, DROP_PACKET)
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#if 1
|
|
|
|
|
static void packet_claimed(struct packet *pkt, void *args)
|
|
|
|
|
static void packet_claimed(struct packet *pkt, struct module *mod)
|
|
|
|
|
{
|
|
|
|
|
char *str = (char *)args;
|
|
|
|
|
char *str = (char *)mod;
|
|
|
|
|
EXPECT_STREQ(str, "hello");
|
|
|
|
|
printf("packet_claimed: with ctx %s\n", str);
|
|
|
|
|
EXPECT_TRUE(packet_get_type(pkt) == PACKET_TYPE_PSEUDO);
|
|
|
|
|
@@ -257,9 +257,9 @@ static void packet_claimed(struct packet *pkt, void *args)
|
|
|
|
|
free(str);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void claim_packet_success(struct packet *pkt, void *args)
|
|
|
|
|
static void claim_packet_success(struct packet *pkt, struct module *mod)
|
|
|
|
|
{
|
|
|
|
|
struct packet_manager *pkt_mgr = (struct packet_manager *)args;
|
|
|
|
|
struct packet_manager *pkt_mgr = (struct packet_manager *)module_get_ctx(mod);
|
|
|
|
|
enum packet_stage stage = packet_get_stage(pkt);
|
|
|
|
|
printf("on_packet_stage: %s\n", packet_stage_to_str(stage));
|
|
|
|
|
|
|
|
|
|
@@ -278,9 +278,9 @@ static void claim_packet_success(struct packet *pkt, void *args)
|
|
|
|
|
count++;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void claim_packet_failed(struct packet *pkt, void *args)
|
|
|
|
|
static void claim_packet_failed(struct packet *pkt, struct module *mod)
|
|
|
|
|
{
|
|
|
|
|
struct packet_manager *pkt_mgr = (struct packet_manager *)args;
|
|
|
|
|
struct packet_manager *pkt_mgr = (struct packet_manager *)module_get_ctx(mod);
|
|
|
|
|
enum packet_stage stage = packet_get_stage(pkt);
|
|
|
|
|
printf("on_packet_stage: %s\n", packet_stage_to_str(stage));
|
|
|
|
|
|
|
|
|
|
@@ -303,18 +303,19 @@ TEST(PACKET_MANAGER, CLAIM_PACKET)
|
|
|
|
|
{
|
|
|
|
|
// module init
|
|
|
|
|
struct packet_manager *pkt_mgr = packet_manager_new(1);
|
|
|
|
|
struct module *pkt_mgr_mod = module_new("packet_manager", pkt_mgr);
|
|
|
|
|
EXPECT_TRUE(pkt_mgr);
|
|
|
|
|
EXPECT_TRUE(packet_manager_register_node(pkt_mgr, "name", PACKET_STAGE_PREROUTING, PKT_TAG_KEY_IPPROTO, PKT_TAG_VAL_IPPROTO_TCP, claim_packet_success, pkt_mgr) == 0);
|
|
|
|
|
EXPECT_TRUE(packet_manager_register_node(pkt_mgr, "name", PACKET_STAGE_INPUT, PKT_TAG_KEY_IPPROTO, PKT_TAG_VAL_IPPROTO_TCP, claim_packet_success, pkt_mgr) == 0);
|
|
|
|
|
EXPECT_TRUE(packet_manager_register_node(pkt_mgr, "name", PACKET_STAGE_FORWARD, PKT_TAG_KEY_IPPROTO, PKT_TAG_VAL_IPPROTO_TCP, claim_packet_success, pkt_mgr) == 0);
|
|
|
|
|
EXPECT_TRUE(packet_manager_register_node(pkt_mgr, "name", PACKET_STAGE_OUTPUT, PKT_TAG_KEY_IPPROTO, PKT_TAG_VAL_IPPROTO_TCP, claim_packet_success, pkt_mgr) == 0);
|
|
|
|
|
EXPECT_TRUE(packet_manager_register_node(pkt_mgr, "name", PACKET_STAGE_POSTROUTING, PKT_TAG_KEY_IPPROTO, PKT_TAG_VAL_IPPROTO_TCP, claim_packet_success, pkt_mgr) == 0);
|
|
|
|
|
EXPECT_TRUE(packet_manager_register_node(pkt_mgr, "name", PACKET_STAGE_PREROUTING, PKT_TAG_KEY_IPPROTO, PKT_TAG_VAL_IPPROTO_TCP, claim_packet_success, pkt_mgr_mod) == 0);
|
|
|
|
|
EXPECT_TRUE(packet_manager_register_node(pkt_mgr, "name", PACKET_STAGE_INPUT, PKT_TAG_KEY_IPPROTO, PKT_TAG_VAL_IPPROTO_TCP, claim_packet_success, pkt_mgr_mod) == 0);
|
|
|
|
|
EXPECT_TRUE(packet_manager_register_node(pkt_mgr, "name", PACKET_STAGE_FORWARD, PKT_TAG_KEY_IPPROTO, PKT_TAG_VAL_IPPROTO_TCP, claim_packet_success, pkt_mgr_mod) == 0);
|
|
|
|
|
EXPECT_TRUE(packet_manager_register_node(pkt_mgr, "name", PACKET_STAGE_OUTPUT, PKT_TAG_KEY_IPPROTO, PKT_TAG_VAL_IPPROTO_TCP, claim_packet_success, pkt_mgr_mod) == 0);
|
|
|
|
|
EXPECT_TRUE(packet_manager_register_node(pkt_mgr, "name", PACKET_STAGE_POSTROUTING, PKT_TAG_KEY_IPPROTO, PKT_TAG_VAL_IPPROTO_TCP, claim_packet_success, pkt_mgr_mod) == 0);
|
|
|
|
|
|
|
|
|
|
EXPECT_TRUE(packet_manager_register_node(pkt_mgr, "name", PACKET_STAGE_PREROUTING, PKT_TAG_KEY_IPPROTO, PKT_TAG_VAL_IPPROTO_TCP, claim_packet_failed, pkt_mgr) == 0);
|
|
|
|
|
EXPECT_TRUE(packet_manager_register_node(pkt_mgr, "name", PACKET_STAGE_INPUT, PKT_TAG_KEY_IPPROTO, PKT_TAG_VAL_IPPROTO_TCP, claim_packet_failed, pkt_mgr) == 0);
|
|
|
|
|
EXPECT_TRUE(packet_manager_register_node(pkt_mgr, "name", PACKET_STAGE_FORWARD, PKT_TAG_KEY_IPPROTO, PKT_TAG_VAL_IPPROTO_TCP, claim_packet_failed, pkt_mgr) == 0);
|
|
|
|
|
EXPECT_TRUE(packet_manager_register_node(pkt_mgr, "name", PACKET_STAGE_OUTPUT, PKT_TAG_KEY_IPPROTO, PKT_TAG_VAL_IPPROTO_TCP, claim_packet_failed, pkt_mgr) == 0);
|
|
|
|
|
EXPECT_TRUE(packet_manager_register_node(pkt_mgr, "name", PACKET_STAGE_POSTROUTING, PKT_TAG_KEY_IPPROTO, PKT_TAG_VAL_IPPROTO_TCP, claim_packet_failed, pkt_mgr) == 0);
|
|
|
|
|
EXPECT_TRUE(packet_manager_register_node(pkt_mgr, "name", PACKET_STAGE_PREROUTING, PKT_TAG_KEY_IPPROTO, PKT_TAG_VAL_IPPROTO_TCP, claim_packet_failed, pkt_mgr_mod) == 0);
|
|
|
|
|
EXPECT_TRUE(packet_manager_register_node(pkt_mgr, "name", PACKET_STAGE_INPUT, PKT_TAG_KEY_IPPROTO, PKT_TAG_VAL_IPPROTO_TCP, claim_packet_failed, pkt_mgr_mod) == 0);
|
|
|
|
|
EXPECT_TRUE(packet_manager_register_node(pkt_mgr, "name", PACKET_STAGE_FORWARD, PKT_TAG_KEY_IPPROTO, PKT_TAG_VAL_IPPROTO_TCP, claim_packet_failed, pkt_mgr_mod) == 0);
|
|
|
|
|
EXPECT_TRUE(packet_manager_register_node(pkt_mgr, "name", PACKET_STAGE_OUTPUT, PKT_TAG_KEY_IPPROTO, PKT_TAG_VAL_IPPROTO_TCP, claim_packet_failed, pkt_mgr_mod) == 0);
|
|
|
|
|
EXPECT_TRUE(packet_manager_register_node(pkt_mgr, "name", PACKET_STAGE_POSTROUTING, PKT_TAG_KEY_IPPROTO, PKT_TAG_VAL_IPPROTO_TCP, claim_packet_failed, pkt_mgr_mod) == 0);
|
|
|
|
|
|
|
|
|
|
// per-thread init
|
|
|
|
|
packet_manager_init(pkt_mgr, thread_id);
|
|
|
|
|
@@ -349,13 +350,14 @@ TEST(PACKET_MANAGER, CLAIM_PACKET)
|
|
|
|
|
|
|
|
|
|
// module free
|
|
|
|
|
packet_manager_free(pkt_mgr);
|
|
|
|
|
module_free(pkt_mgr_mod);
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#if 1
|
|
|
|
|
static void schedule_packet(struct packet *pkt, void *args)
|
|
|
|
|
static void schedule_packet(struct packet *pkt, struct module *mod)
|
|
|
|
|
{
|
|
|
|
|
struct packet_manager *pkt_mgr = (struct packet_manager *)args;
|
|
|
|
|
struct packet_manager *pkt_mgr = (struct packet_manager *)module_get_ctx(mod);
|
|
|
|
|
enum packet_stage stage = packet_get_stage(pkt);
|
|
|
|
|
printf("on_packet_stage: %s\n", packet_stage_to_str(stage));
|
|
|
|
|
|
|
|
|
|
@@ -380,12 +382,13 @@ TEST(PACKET_MANAGER, SCHEDULE_PACKET)
|
|
|
|
|
{
|
|
|
|
|
// module init
|
|
|
|
|
struct packet_manager *pkt_mgr = packet_manager_new(1);
|
|
|
|
|
struct module *pkt_mgr_mod = module_new("packet_manager", pkt_mgr);
|
|
|
|
|
EXPECT_TRUE(pkt_mgr);
|
|
|
|
|
EXPECT_TRUE(packet_manager_register_node(pkt_mgr, "name", PACKET_STAGE_PREROUTING, PKT_TAG_KEY_IPPROTO, PKT_TAG_VAL_IPPROTO_TCP, schedule_packet, pkt_mgr) == 0);
|
|
|
|
|
EXPECT_TRUE(packet_manager_register_node(pkt_mgr, "name", PACKET_STAGE_INPUT, PKT_TAG_KEY_IPPROTO, PKT_TAG_VAL_IPPROTO_TCP, schedule_packet, pkt_mgr) == 0);
|
|
|
|
|
EXPECT_TRUE(packet_manager_register_node(pkt_mgr, "name", PACKET_STAGE_FORWARD, PKT_TAG_KEY_IPPROTO, PKT_TAG_VAL_IPPROTO_TCP, schedule_packet, pkt_mgr) == 0);
|
|
|
|
|
EXPECT_TRUE(packet_manager_register_node(pkt_mgr, "name", PACKET_STAGE_OUTPUT, PKT_TAG_KEY_IPPROTO, PKT_TAG_VAL_IPPROTO_TCP, schedule_packet, pkt_mgr) == 0);
|
|
|
|
|
EXPECT_TRUE(packet_manager_register_node(pkt_mgr, "name", PACKET_STAGE_POSTROUTING, PKT_TAG_KEY_IPPROTO, PKT_TAG_VAL_IPPROTO_TCP, schedule_packet, pkt_mgr) == 0);
|
|
|
|
|
EXPECT_TRUE(packet_manager_register_node(pkt_mgr, "name", PACKET_STAGE_PREROUTING, PKT_TAG_KEY_IPPROTO, PKT_TAG_VAL_IPPROTO_TCP, schedule_packet, pkt_mgr_mod) == 0);
|
|
|
|
|
EXPECT_TRUE(packet_manager_register_node(pkt_mgr, "name", PACKET_STAGE_INPUT, PKT_TAG_KEY_IPPROTO, PKT_TAG_VAL_IPPROTO_TCP, schedule_packet, pkt_mgr_mod) == 0);
|
|
|
|
|
EXPECT_TRUE(packet_manager_register_node(pkt_mgr, "name", PACKET_STAGE_FORWARD, PKT_TAG_KEY_IPPROTO, PKT_TAG_VAL_IPPROTO_TCP, schedule_packet, pkt_mgr_mod) == 0);
|
|
|
|
|
EXPECT_TRUE(packet_manager_register_node(pkt_mgr, "name", PACKET_STAGE_OUTPUT, PKT_TAG_KEY_IPPROTO, PKT_TAG_VAL_IPPROTO_TCP, schedule_packet, pkt_mgr_mod) == 0);
|
|
|
|
|
EXPECT_TRUE(packet_manager_register_node(pkt_mgr, "name", PACKET_STAGE_POSTROUTING, PKT_TAG_KEY_IPPROTO, PKT_TAG_VAL_IPPROTO_TCP, schedule_packet, pkt_mgr_mod) == 0);
|
|
|
|
|
|
|
|
|
|
// per-thread init
|
|
|
|
|
packet_manager_init(pkt_mgr, thread_id);
|
|
|
|
|
@@ -429,13 +432,15 @@ TEST(PACKET_MANAGER, SCHEDULE_PACKET)
|
|
|
|
|
|
|
|
|
|
// module free
|
|
|
|
|
packet_manager_free(pkt_mgr);
|
|
|
|
|
|
|
|
|
|
module_free(pkt_mgr_mod);
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#if 1
|
|
|
|
|
static void schedule_claimed_packet(struct packet *pkt, void *args)
|
|
|
|
|
static void schedule_claimed_packet(struct packet *pkt, struct module *mod)
|
|
|
|
|
{
|
|
|
|
|
struct packet_manager *pkt_mgr = (struct packet_manager *)args;
|
|
|
|
|
struct packet_manager *pkt_mgr = (struct packet_manager *)module_get_ctx(mod);
|
|
|
|
|
|
|
|
|
|
printf("schedule_claimed_packet: %p\n", pkt);
|
|
|
|
|
EXPECT_TRUE(packet_get_type(pkt) == PACKET_TYPE_PSEUDO);
|
|
|
|
|
@@ -444,9 +449,9 @@ static void schedule_claimed_packet(struct packet *pkt, void *args)
|
|
|
|
|
packet_manager_schedule_packet(pkt_mgr, thread_id, pkt, PACKET_STAGE_POSTROUTING);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void claim_packet_to_schedule(struct packet *pkt, void *args)
|
|
|
|
|
static void claim_packet_to_schedule(struct packet *pkt, struct module *mod)
|
|
|
|
|
{
|
|
|
|
|
struct packet_manager *pkt_mgr = (struct packet_manager *)args;
|
|
|
|
|
struct packet_manager *pkt_mgr = (struct packet_manager *)module_get_ctx(mod);
|
|
|
|
|
enum packet_stage stage = packet_get_stage(pkt);
|
|
|
|
|
printf("on_packet_stage: %s\n", packet_stage_to_str(stage));
|
|
|
|
|
|
|
|
|
|
@@ -462,7 +467,7 @@ static void claim_packet_to_schedule(struct packet *pkt, void *args)
|
|
|
|
|
if (stage == PACKET_STAGE_PREROUTING)
|
|
|
|
|
{
|
|
|
|
|
EXPECT_TRUE(count == 0); // packet not claim
|
|
|
|
|
EXPECT_TRUE(packet_manager_claim_packet(pkt_mgr, thread_id, pkt, schedule_claimed_packet, pkt_mgr) == 0); // claim packet success
|
|
|
|
|
EXPECT_TRUE(packet_manager_claim_packet(pkt_mgr, thread_id, pkt, schedule_claimed_packet, mod) == 0); // claim packet success
|
|
|
|
|
}
|
|
|
|
|
else if (stage == PACKET_STAGE_POSTROUTING)
|
|
|
|
|
{
|
|
|
|
|
@@ -480,12 +485,13 @@ TEST(PACKET_MANAGER, SCHEDULE_CLAIMED_PACKET)
|
|
|
|
|
{
|
|
|
|
|
// module init
|
|
|
|
|
struct packet_manager *pkt_mgr = packet_manager_new(1);
|
|
|
|
|
struct module *pkt_mgr_mod=module_new("packet_manager", pkt_mgr);
|
|
|
|
|
EXPECT_TRUE(pkt_mgr);
|
|
|
|
|
EXPECT_TRUE(packet_manager_register_node(pkt_mgr, "name", PACKET_STAGE_PREROUTING, PKT_TAG_KEY_IPPROTO, PKT_TAG_VAL_IPPROTO_TCP, claim_packet_to_schedule, pkt_mgr) == 0);
|
|
|
|
|
EXPECT_TRUE(packet_manager_register_node(pkt_mgr, "name", PACKET_STAGE_INPUT, PKT_TAG_KEY_IPPROTO, PKT_TAG_VAL_IPPROTO_TCP, claim_packet_to_schedule, pkt_mgr) == 0);
|
|
|
|
|
EXPECT_TRUE(packet_manager_register_node(pkt_mgr, "name", PACKET_STAGE_FORWARD, PKT_TAG_KEY_IPPROTO, PKT_TAG_VAL_IPPROTO_TCP, claim_packet_to_schedule, pkt_mgr) == 0);
|
|
|
|
|
EXPECT_TRUE(packet_manager_register_node(pkt_mgr, "name", PACKET_STAGE_OUTPUT, PKT_TAG_KEY_IPPROTO, PKT_TAG_VAL_IPPROTO_TCP, claim_packet_to_schedule, pkt_mgr) == 0);
|
|
|
|
|
EXPECT_TRUE(packet_manager_register_node(pkt_mgr, "name", PACKET_STAGE_POSTROUTING, PKT_TAG_KEY_IPPROTO, PKT_TAG_VAL_IPPROTO_TCP, claim_packet_to_schedule, pkt_mgr) == 0);
|
|
|
|
|
EXPECT_TRUE(packet_manager_register_node(pkt_mgr, "name", PACKET_STAGE_PREROUTING, PKT_TAG_KEY_IPPROTO, PKT_TAG_VAL_IPPROTO_TCP, claim_packet_to_schedule, pkt_mgr_mod) == 0);
|
|
|
|
|
EXPECT_TRUE(packet_manager_register_node(pkt_mgr, "name", PACKET_STAGE_INPUT, PKT_TAG_KEY_IPPROTO, PKT_TAG_VAL_IPPROTO_TCP, claim_packet_to_schedule, pkt_mgr_mod) == 0);
|
|
|
|
|
EXPECT_TRUE(packet_manager_register_node(pkt_mgr, "name", PACKET_STAGE_FORWARD, PKT_TAG_KEY_IPPROTO, PKT_TAG_VAL_IPPROTO_TCP, claim_packet_to_schedule, pkt_mgr_mod) == 0);
|
|
|
|
|
EXPECT_TRUE(packet_manager_register_node(pkt_mgr, "name", PACKET_STAGE_OUTPUT, PKT_TAG_KEY_IPPROTO, PKT_TAG_VAL_IPPROTO_TCP, claim_packet_to_schedule, pkt_mgr_mod) == 0);
|
|
|
|
|
EXPECT_TRUE(packet_manager_register_node(pkt_mgr, "name", PACKET_STAGE_POSTROUTING, PKT_TAG_KEY_IPPROTO, PKT_TAG_VAL_IPPROTO_TCP, claim_packet_to_schedule, pkt_mgr_mod) == 0);
|
|
|
|
|
|
|
|
|
|
// per-thread init
|
|
|
|
|
packet_manager_init(pkt_mgr, thread_id);
|
|
|
|
|
@@ -520,6 +526,8 @@ TEST(PACKET_MANAGER, SCHEDULE_CLAIMED_PACKET)
|
|
|
|
|
|
|
|
|
|
// module free
|
|
|
|
|
packet_manager_free(pkt_mgr);
|
|
|
|
|
|
|
|
|
|
module_free(pkt_mgr_mod);
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|