If a packet is marked as dropped, the packet manager will destroy it and its exdata at the end of the current stage, preventing it from entering the next stage.
This commit is contained in:
@@ -353,6 +353,7 @@ void packet_manager_dispatch(struct packet_manager *pkt_mgr, uint16_t thread_id)
|
||||
mq_runtime_publish_message(pkt_mgr_rte->mq_rte, pkt_mgr_rte->curr_stage, pkt);
|
||||
mq_runtime_dispatch(pkt_mgr_rte->mq_rte);
|
||||
|
||||
// packet has been claimed and cannot be released
|
||||
if (packet_is_claim(pkt))
|
||||
{
|
||||
if (pkt_mgr_rte->claim_cb)
|
||||
@@ -365,6 +366,12 @@ void packet_manager_dispatch(struct packet_manager *pkt_mgr, uint16_t thread_id)
|
||||
continue;
|
||||
}
|
||||
|
||||
if (packet_get_action(pkt) == PACKET_ACTION_DROP)
|
||||
{
|
||||
packet_manager_free_packet(pkt_mgr, thread_id, pkt);
|
||||
continue;
|
||||
}
|
||||
|
||||
TAILQ_INSERT_TAIL(&pkt_mgr_rte->queue[pkt_mgr_rte->curr_stage + 1], pkt, stage_tqe);
|
||||
pkt_mgr_rte->stat.queue[pkt_mgr_rte->curr_stage + 1].pkts_in++;
|
||||
}
|
||||
@@ -424,24 +431,43 @@ void packet_manager_print_stat(struct packet_manager *pkt_mgr, uint16_t thread_i
|
||||
pkt_mgr_rte->stat.pkts_egress);
|
||||
for (int i = 0; i < PACKET_QUEUE_MAX; i++)
|
||||
{
|
||||
PACKET_MANAGER_LOG_INFO("runtime: %p, %-24s stat => pkts_in: %lu, pkts_out: %lu, pkts_claim: %lu, pkts_schedule: %lu",
|
||||
PACKET_MANAGER_LOG_INFO("runtime: %p, %-24s stat => "
|
||||
"pkts_in: %lu, pkts_out: %lu, pkts_claim: %lu, pkts_schedule: %lu, pkts_drop: %lu, "
|
||||
"pkts_dup_succ: %lu, pkts_dup_fail: %lu, "
|
||||
"pkts_build_tcp_succ: %lu, pkts_build_tcp_fail: %lu, "
|
||||
"pkts_build_udp_succ: %lu, pkts_build_udp_fail: %lu, "
|
||||
"pkts_build_l3_succ: %lu, pkts_build_l3_fail: %lu",
|
||||
pkt_mgr_rte,
|
||||
packet_stage_to_str(i),
|
||||
pkt_mgr_rte->stat.queue[i].pkts_in,
|
||||
pkt_mgr_rte->stat.queue[i].pkts_out,
|
||||
pkt_mgr_rte->stat.queue[i].pkts_claim,
|
||||
pkt_mgr_rte->stat.queue[i].pkts_schedule);
|
||||
pkt_mgr_rte->stat.queue[i].pkts_schedule,
|
||||
pkt_mgr_rte->stat.queue[i].pkts_drop,
|
||||
pkt_mgr_rte->stat.queue[i].pkts_dup_succ,
|
||||
pkt_mgr_rte->stat.queue[i].pkts_dup_fail,
|
||||
pkt_mgr_rte->stat.queue[i].pkts_build_tcp_succ,
|
||||
pkt_mgr_rte->stat.queue[i].pkts_build_tcp_fail,
|
||||
pkt_mgr_rte->stat.queue[i].pkts_build_udp_succ,
|
||||
pkt_mgr_rte->stat.queue[i].pkts_build_udp_fail,
|
||||
pkt_mgr_rte->stat.queue[i].pkts_build_l3_succ,
|
||||
pkt_mgr_rte->stat.queue[i].pkts_build_l3_fail);
|
||||
}
|
||||
}
|
||||
|
||||
struct packet *packet_manager_build_tcp_packet(struct packet_manager *pkt_mgr, const struct packet *origin_pkt, uint32_t tcp_seq, uint32_t tcp_ack, uint8_t tcp_flags,
|
||||
const char *tcp_options, uint16_t tcp_options_len, const char *tcp_payload, uint16_t tcp_payload_len)
|
||||
struct packet *packet_manager_build_tcp_packet(struct packet_manager *pkt_mgr, uint16_t thread_id, const struct packet *origin_pkt,
|
||||
uint32_t tcp_seq, uint32_t tcp_ack, uint8_t tcp_flags,
|
||||
const char *tcp_options, uint16_t tcp_options_len,
|
||||
const char *tcp_payload, uint16_t tcp_payload_len)
|
||||
{
|
||||
struct packet_manager_rte *pkt_mgr_rte = pkt_mgr->rte[thread_id];
|
||||
struct packet *pkt = packet_build_tcp(origin_pkt, tcp_seq, tcp_ack, tcp_flags, tcp_options, tcp_options_len, tcp_payload, tcp_payload_len);
|
||||
if (pkt == NULL)
|
||||
{
|
||||
pkt_mgr_rte->stat.queue[pkt_mgr_rte->curr_stage].pkts_build_tcp_fail++;
|
||||
return NULL;
|
||||
}
|
||||
pkt_mgr_rte->stat.queue[pkt_mgr_rte->curr_stage].pkts_build_tcp_succ++;
|
||||
|
||||
struct exdata_runtime *ex_rte = exdata_runtime_new(pkt_mgr->sche->ex_sche);
|
||||
packet_set_user_data(pkt, ex_rte);
|
||||
@@ -449,13 +475,17 @@ struct packet *packet_manager_build_tcp_packet(struct packet_manager *pkt_mgr, c
|
||||
return pkt;
|
||||
}
|
||||
|
||||
struct packet *packet_manager_build_udp_packet(struct packet_manager *pkt_mgr, const struct packet *origin_pkt, const char *udp_payload, uint16_t udp_payload_len)
|
||||
struct packet *packet_manager_build_udp_packet(struct packet_manager *pkt_mgr, uint16_t thread_id, const struct packet *origin_pkt,
|
||||
const char *udp_payload, uint16_t udp_payload_len)
|
||||
{
|
||||
struct packet_manager_rte *pkt_mgr_rte = pkt_mgr->rte[thread_id];
|
||||
struct packet *pkt = packet_build_udp(origin_pkt, udp_payload, udp_payload_len);
|
||||
if (pkt == NULL)
|
||||
{
|
||||
pkt_mgr_rte->stat.queue[pkt_mgr_rte->curr_stage].pkts_build_udp_fail++;
|
||||
return NULL;
|
||||
}
|
||||
pkt_mgr_rte->stat.queue[pkt_mgr_rte->curr_stage].pkts_build_udp_succ++;
|
||||
|
||||
struct exdata_runtime *ex_rte = exdata_runtime_new(pkt_mgr->sche->ex_sche);
|
||||
packet_set_user_data(pkt, ex_rte);
|
||||
@@ -463,13 +493,17 @@ struct packet *packet_manager_build_udp_packet(struct packet_manager *pkt_mgr, c
|
||||
return pkt;
|
||||
}
|
||||
|
||||
struct packet *packet_manager_build_l3_packet(struct packet_manager *pkt_mgr, const struct packet *origin_pkt, uint8_t ip_proto, const char *l3_payload, uint16_t l3_payload_len)
|
||||
struct packet *packet_manager_build_l3_packet(struct packet_manager *pkt_mgr, uint16_t thread_id, const struct packet *origin_pkt,
|
||||
uint8_t ip_proto, const char *l3_payload, uint16_t l3_payload_len)
|
||||
{
|
||||
struct packet_manager_rte *pkt_mgr_rte = pkt_mgr->rte[thread_id];
|
||||
struct packet *pkt = packet_build_l3(origin_pkt, ip_proto, l3_payload, l3_payload_len);
|
||||
if (pkt == NULL)
|
||||
{
|
||||
pkt_mgr_rte->stat.queue[pkt_mgr_rte->curr_stage].pkts_build_l3_fail++;
|
||||
return NULL;
|
||||
}
|
||||
pkt_mgr_rte->stat.queue[pkt_mgr_rte->curr_stage].pkts_build_l3_succ++;
|
||||
|
||||
struct exdata_runtime *ex_rte = exdata_runtime_new(pkt_mgr->sche->ex_sche);
|
||||
packet_set_user_data(pkt, ex_rte);
|
||||
@@ -477,13 +511,16 @@ struct packet *packet_manager_build_l3_packet(struct packet_manager *pkt_mgr, co
|
||||
return pkt;
|
||||
}
|
||||
|
||||
struct packet *packet_manager_dup_packet(struct packet_manager *pkt_mgr, const struct packet *origin_pkt)
|
||||
struct packet *packet_manager_dup_packet(struct packet_manager *pkt_mgr, uint16_t thread_id, const struct packet *origin_pkt)
|
||||
{
|
||||
struct packet_manager_rte *pkt_mgr_rte = pkt_mgr->rte[thread_id];
|
||||
struct packet *pkt = packet_dup(origin_pkt);
|
||||
if (pkt == NULL)
|
||||
{
|
||||
pkt_mgr_rte->stat.queue[pkt_mgr_rte->curr_stage].pkts_dup_fail++;
|
||||
return NULL;
|
||||
}
|
||||
pkt_mgr_rte->stat.queue[pkt_mgr_rte->curr_stage].pkts_dup_succ++;
|
||||
|
||||
struct exdata_runtime *ex_rte = exdata_runtime_new(pkt_mgr->sche->ex_sche);
|
||||
packet_set_user_data(pkt, ex_rte);
|
||||
@@ -491,10 +528,13 @@ struct packet *packet_manager_dup_packet(struct packet_manager *pkt_mgr, const s
|
||||
return pkt;
|
||||
}
|
||||
|
||||
void packet_manager_free_packet(struct packet_manager *pkt_mgr __attribute__((unused)), struct packet *pkt)
|
||||
void packet_manager_free_packet(struct packet_manager *pkt_mgr, uint16_t thread_id, struct packet *pkt)
|
||||
{
|
||||
if (pkt)
|
||||
{
|
||||
struct packet_manager_rte *pkt_mgr_rte = pkt_mgr->rte[thread_id];
|
||||
pkt_mgr_rte->stat.queue[pkt_mgr_rte->curr_stage].pkts_drop++;
|
||||
|
||||
struct exdata_runtime *ex_rte = packet_get_user_data(pkt);
|
||||
exdata_runtime_free(ex_rte);
|
||||
|
||||
|
||||
@@ -20,38 +20,92 @@ struct packet_manager_stat
|
||||
uint64_t pkts_out; // include the packets that are claimed
|
||||
uint64_t pkts_claim;
|
||||
uint64_t pkts_schedule;
|
||||
uint64_t pkts_drop;
|
||||
uint64_t pkts_dup_succ;
|
||||
uint64_t pkts_dup_fail;
|
||||
uint64_t pkts_build_tcp_succ;
|
||||
uint64_t pkts_build_tcp_fail;
|
||||
uint64_t pkts_build_udp_succ;
|
||||
uint64_t pkts_build_udp_fail;
|
||||
uint64_t pkts_build_l3_succ;
|
||||
uint64_t pkts_build_l3_fail;
|
||||
} queue[PACKET_QUEUE_MAX]; // the last queue is for sending packets
|
||||
};
|
||||
|
||||
// XX(type, name, val)
|
||||
#define PKT_MGR_STAT_MAP(XX) \
|
||||
XX(PKT_MGR_STAT_PKTS_INGRESS, pkts_ingress, pkts_ingress) \
|
||||
XX(PKT_MGR_STAT_PKTS_EGRESS, pkts_egress, pkts_egress) \
|
||||
/* PREROUTING */ \
|
||||
XX(PKT_MGR_STAT_PKTS_IN_ON_PREROUTING, pkts_in_on_prerouting, queue[PACKET_STAGE_PREROUTING].pkts_in) \
|
||||
XX(PKT_MGR_STAT_PKTS_OUT_ON_PREROUTING, pkts_out_on_prerouting, queue[PACKET_STAGE_PREROUTING].pkts_out) \
|
||||
XX(PKT_MGR_STAT_PKTS_CLAIM_ON_PREROUTING, pkts_claim_on_prerouting, queue[PACKET_STAGE_PREROUTING].pkts_claim) \
|
||||
XX(PKT_MGR_STAT_PKTS_SCHEDULE_ON_PREROUTING, pkts_schedule_on_prerouting, queue[PACKET_STAGE_PREROUTING].pkts_schedule) \
|
||||
/* INPUT */ \
|
||||
XX(PKT_MGR_STAT_PKTS_IN_ON_INPUT, pkts_in_on_input, queue[PACKET_STAGE_INPUT].pkts_in) \
|
||||
XX(PKT_MGR_STAT_PKTS_OUT_ON_INPUT, pkts_out_on_input, queue[PACKET_STAGE_INPUT].pkts_out) \
|
||||
XX(PKT_MGR_STAT_PKTS_CLAIM_ON_INPUT, pkts_claim_on_input, queue[PACKET_STAGE_INPUT].pkts_claim) \
|
||||
XX(PKT_MGR_STAT_PKTS_SCHEDULE_ON_INPUT, pkts_schedule_on_input, queue[PACKET_STAGE_INPUT].pkts_schedule) \
|
||||
/* FORWARD */ \
|
||||
XX(PKT_MGR_STAT_PKTS_IN_ON_FORWARD, pkts_in_on_forward, queue[PACKET_STAGE_FORWARD].pkts_in) \
|
||||
XX(PKT_MGR_STAT_PKTS_OUT_ON_FORWARD, pkts_out_on_forward, queue[PACKET_STAGE_FORWARD].pkts_out) \
|
||||
XX(PKT_MGR_STAT_PKTS_CLAIM_ON_FORWARD, pkts_claim_on_forward, queue[PACKET_STAGE_FORWARD].pkts_claim) \
|
||||
XX(PKT_MGR_STAT_PKTS_SCHEDULE_ON_FORWARD, pkts_schedule_on_forward, queue[PACKET_STAGE_FORWARD].pkts_schedule) \
|
||||
/* OUTPUT */ \
|
||||
XX(PKT_MGR_STAT_PKTS_IN_ON_OUTPUT, pkts_in_on_output, queue[PACKET_STAGE_OUTPUT].pkts_in) \
|
||||
XX(PKT_MGR_STAT_PKTS_OUT_ON_OUTPUT, pkts_out_on_output, queue[PACKET_STAGE_OUTPUT].pkts_out) \
|
||||
XX(PKT_MGR_STAT_PKTS_CLAIM_ON_OUTPUT, pkts_claim_on_output, queue[PACKET_STAGE_OUTPUT].pkts_claim) \
|
||||
XX(PKT_MGR_STAT_PKTS_SCHEDULE_ON_OUTPUT, pkts_schedule_on_output, queue[PACKET_STAGE_OUTPUT].pkts_schedule) \
|
||||
/* POSTROUTING */ \
|
||||
XX(PKT_MGR_STAT_PKTS_IN_ON_POSTROUTING, pkts_in_on_postrouting, queue[PACKET_STAGE_POSTROUTING].pkts_in) \
|
||||
XX(PKT_MGR_STAT_PKTS_OUT_ON_POSTROUTING, pkts_out_on_postrouting, queue[PACKET_STAGE_POSTROUTING].pkts_out) \
|
||||
XX(PKT_MGR_STAT_PKTS_CLAIM_ON_POSTROUTING, pkts_claim_on_postrouting, queue[PACKET_STAGE_POSTROUTING].pkts_claim) \
|
||||
XX(PKT_MGR_STAT_PKTS_SCHEDULE_ON_POSTROUTING, pkts_schedule_on_postrouting, queue[PACKET_STAGE_POSTROUTING].pkts_schedule)
|
||||
#define PKT_MGR_STAT_MAP(XX) \
|
||||
XX(PKT_MGR_STAT_PKTS_INGRESS, pkts_ingress, pkts_ingress) \
|
||||
XX(PKT_MGR_STAT_PKTS_EGRESS, pkts_egress, pkts_egress) \
|
||||
/* PREROUTING */ \
|
||||
XX(PKT_MGR_STAT_PKTS_IN_ON_PREROUTING, pkts_in_on_prerouting, queue[PACKET_STAGE_PREROUTING].pkts_in) \
|
||||
XX(PKT_MGR_STAT_PKTS_OUT_ON_PREROUTING, pkts_out_on_prerouting, queue[PACKET_STAGE_PREROUTING].pkts_out) \
|
||||
XX(PKT_MGR_STAT_PKTS_CLAIM_ON_PREROUTING, pkts_claim_on_prerouting, queue[PACKET_STAGE_PREROUTING].pkts_claim) \
|
||||
XX(PKT_MGR_STAT_PKTS_SCHEDULE_ON_PREROUTING, pkts_schedule_on_prerouting, queue[PACKET_STAGE_PREROUTING].pkts_schedule) \
|
||||
XX(PKT_MGR_STAT_PKTS_DROP_ON_PREROUTING, pkts_drop_on_prerouting, queue[PACKET_STAGE_PREROUTING].pkts_drop) \
|
||||
XX(PKT_MGR_STAT_PKTS_DUP_SUCC_ON_PREROUTING, pkts_dup_succ_on_prerouting, queue[PACKET_STAGE_PREROUTING].pkts_dup_succ) \
|
||||
XX(PKT_MGR_STAT_PKTS_DUP_FAIL_ON_PREROUTING, pkts_dup_fail_on_prerouting, queue[PACKET_STAGE_PREROUTING].pkts_dup_fail) \
|
||||
XX(PKT_MGR_STAT_PKTS_BUILD_TCP_SUCC_ON_PREROUTING, pkts_build_tcp_succ_on_prerouting, queue[PACKET_STAGE_PREROUTING].pkts_build_tcp_succ) \
|
||||
XX(PKT_MGR_STAT_PKTS_BUILD_TCP_FAIL_ON_PREROUTING, pkts_build_tcp_fail_on_prerouting, queue[PACKET_STAGE_PREROUTING].pkts_build_tcp_fail) \
|
||||
XX(PKT_MGR_STAT_PKTS_BUILD_UDP_SUCC_ON_PREROUTING, pkts_build_udp_succ_on_prerouting, queue[PACKET_STAGE_PREROUTING].pkts_build_udp_succ) \
|
||||
XX(PKT_MGR_STAT_PKTS_BUILD_UDP_FAIL_ON_PREROUTING, pkts_build_udp_fail_on_prerouting, queue[PACKET_STAGE_PREROUTING].pkts_build_udp_fail) \
|
||||
XX(PKT_MGR_STAT_PKTS_BUILD_L3_SUCC_ON_PREROUTING, pkts_build_l3_succ_on_prerouting, queue[PACKET_STAGE_PREROUTING].pkts_build_l3_succ) \
|
||||
XX(PKT_MGR_STAT_PKTS_BUILD_L3_FAIL_ON_PREROUTING, pkts_build_l3_fail_on_prerouting, queue[PACKET_STAGE_PREROUTING].pkts_build_l3_fail) \
|
||||
/* INPUT */ \
|
||||
XX(PKT_MGR_STAT_PKTS_IN_ON_INPUT, pkts_in_on_input, queue[PACKET_STAGE_INPUT].pkts_in) \
|
||||
XX(PKT_MGR_STAT_PKTS_OUT_ON_INPUT, pkts_out_on_input, queue[PACKET_STAGE_INPUT].pkts_out) \
|
||||
XX(PKT_MGR_STAT_PKTS_CLAIM_ON_INPUT, pkts_claim_on_input, queue[PACKET_STAGE_INPUT].pkts_claim) \
|
||||
XX(PKT_MGR_STAT_PKTS_SCHEDULE_ON_INPUT, pkts_schedule_on_input, queue[PACKET_STAGE_INPUT].pkts_schedule) \
|
||||
XX(PKT_MGR_STAT_PKTS_DROP_ON_INPUT, pkts_drop_on_input, queue[PACKET_STAGE_INPUT].pkts_drop) \
|
||||
XX(PKT_MGR_STAT_PKTS_DUP_SUCC_ON_INPUT, pkts_dup_succ_on_input, queue[PACKET_STAGE_INPUT].pkts_dup_succ) \
|
||||
XX(PKT_MGR_STAT_PKTS_DUP_FAIL_ON_INPUT, pkts_dup_fail_on_input, queue[PACKET_STAGE_INPUT].pkts_dup_fail) \
|
||||
XX(PKT_MGR_STAT_PKTS_BUILD_TCP_SUCC_ON_INPUT, pkts_build_tcp_succ_on_input, queue[PACKET_STAGE_INPUT].pkts_build_tcp_succ) \
|
||||
XX(PKT_MGR_STAT_PKTS_BUILD_TCP_FAIL_ON_INPUT, pkts_build_tcp_fail_on_input, queue[PACKET_STAGE_INPUT].pkts_build_tcp_fail) \
|
||||
XX(PKT_MGR_STAT_PKTS_BUILD_UDP_SUCC_ON_INPUT, pkts_build_udp_succ_on_input, queue[PACKET_STAGE_INPUT].pkts_build_udp_succ) \
|
||||
XX(PKT_MGR_STAT_PKTS_BUILD_UDP_FAIL_ON_INPUT, pkts_build_udp_fail_on_input, queue[PACKET_STAGE_INPUT].pkts_build_udp_fail) \
|
||||
XX(PKT_MGR_STAT_PKTS_BUILD_L3_SUCC_ON_INPUT, pkts_build_l3_succ_on_input, queue[PACKET_STAGE_INPUT].pkts_build_l3_succ) \
|
||||
XX(PKT_MGR_STAT_PKTS_BUILD_L3_FAIL_ON_INPUT, pkts_build_l3_fail_on_input, queue[PACKET_STAGE_INPUT].pkts_build_l3_fail) \
|
||||
/* FORWARD */ \
|
||||
XX(PKT_MGR_STAT_PKTS_IN_ON_FORWARD, pkts_in_on_forward, queue[PACKET_STAGE_FORWARD].pkts_in) \
|
||||
XX(PKT_MGR_STAT_PKTS_OUT_ON_FORWARD, pkts_out_on_forward, queue[PACKET_STAGE_FORWARD].pkts_out) \
|
||||
XX(PKT_MGR_STAT_PKTS_CLAIM_ON_FORWARD, pkts_claim_on_forward, queue[PACKET_STAGE_FORWARD].pkts_claim) \
|
||||
XX(PKT_MGR_STAT_PKTS_SCHEDULE_ON_FORWARD, pkts_schedule_on_forward, queue[PACKET_STAGE_FORWARD].pkts_schedule) \
|
||||
XX(PKT_MGR_STAT_PKTS_DROP_ON_FORWARD, pkts_drop_on_forward, queue[PACKET_STAGE_FORWARD].pkts_drop) \
|
||||
XX(PKT_MGR_STAT_PKTS_DUP_SUCC_ON_FORWARD, pkts_dup_succ_on_forward, queue[PACKET_STAGE_FORWARD].pkts_dup_succ) \
|
||||
XX(PKT_MGR_STAT_PKTS_DUP_FAIL_ON_FORWARD, pkts_dup_fail_on_forward, queue[PACKET_STAGE_FORWARD].pkts_dup_fail) \
|
||||
XX(PKT_MGR_STAT_PKTS_BUILD_TCP_SUCC_ON_FORWARD, pkts_build_tcp_succ_on_forward, queue[PACKET_STAGE_FORWARD].pkts_build_tcp_succ) \
|
||||
XX(PKT_MGR_STAT_PKTS_BUILD_TCP_FAIL_ON_FORWARD, pkts_build_tcp_fail_on_forward, queue[PACKET_STAGE_FORWARD].pkts_build_tcp_fail) \
|
||||
XX(PKT_MGR_STAT_PKTS_BUILD_UDP_SUCC_ON_FORWARD, pkts_build_udp_succ_on_forward, queue[PACKET_STAGE_FORWARD].pkts_build_udp_succ) \
|
||||
XX(PKT_MGR_STAT_PKTS_BUILD_UDP_FAIL_ON_FORWARD, pkts_build_udp_fail_on_forward, queue[PACKET_STAGE_FORWARD].pkts_build_udp_fail) \
|
||||
XX(PKT_MGR_STAT_PKTS_BUILD_L3_SUCC_ON_FORWARD, pkts_build_l3_succ_on_forward, queue[PACKET_STAGE_FORWARD].pkts_build_l3_succ) \
|
||||
XX(PKT_MGR_STAT_PKTS_BUILD_L3_FAIL_ON_FORWARD, pkts_build_l3_fail_on_forward, queue[PACKET_STAGE_FORWARD].pkts_build_l3_fail) \
|
||||
/* OUTPUT */ \
|
||||
XX(PKT_MGR_STAT_PKTS_IN_ON_OUTPUT, pkts_in_on_output, queue[PACKET_STAGE_OUTPUT].pkts_in) \
|
||||
XX(PKT_MGR_STAT_PKTS_OUT_ON_OUTPUT, pkts_out_on_output, queue[PACKET_STAGE_OUTPUT].pkts_out) \
|
||||
XX(PKT_MGR_STAT_PKTS_CLAIM_ON_OUTPUT, pkts_claim_on_output, queue[PACKET_STAGE_OUTPUT].pkts_claim) \
|
||||
XX(PKT_MGR_STAT_PKTS_SCHEDULE_ON_OUTPUT, pkts_schedule_on_output, queue[PACKET_STAGE_OUTPUT].pkts_schedule) \
|
||||
XX(PKT_MGR_STAT_PKTS_DROP_ON_OUTPUT, pkts_drop_on_output, queue[PACKET_STAGE_OUTPUT].pkts_drop) \
|
||||
XX(PKT_MGR_STAT_PKTS_DUP_SUCC_ON_OUTPUT, pkts_dup_succ_on_output, queue[PACKET_STAGE_OUTPUT].pkts_dup_succ) \
|
||||
XX(PKT_MGR_STAT_PKTS_DUP_FAIL_ON_OUTPUT, pkts_dup_fail_on_output, queue[PACKET_STAGE_OUTPUT].pkts_dup_fail) \
|
||||
XX(PKT_MGR_STAT_PKTS_BUILD_TCP_SUCC_ON_OUTPUT, pkts_build_tcp_succ_on_output, queue[PACKET_STAGE_OUTPUT].pkts_build_tcp_succ) \
|
||||
XX(PKT_MGR_STAT_PKTS_BUILD_TCP_FAIL_ON_OUTPUT, pkts_build_tcp_fail_on_output, queue[PACKET_STAGE_OUTPUT].pkts_build_tcp_fail) \
|
||||
XX(PKT_MGR_STAT_PKTS_BUILD_UDP_SUCC_ON_OUTPUT, pkts_build_udp_succ_on_output, queue[PACKET_STAGE_OUTPUT].pkts_build_udp_succ) \
|
||||
XX(PKT_MGR_STAT_PKTS_BUILD_UDP_FAIL_ON_OUTPUT, pkts_build_udp_fail_on_output, queue[PACKET_STAGE_OUTPUT].pkts_build_udp_fail) \
|
||||
XX(PKT_MGR_STAT_PKTS_BUILD_L3_SUCC_ON_OUTPUT, pkts_build_l3_succ_on_output, queue[PACKET_STAGE_OUTPUT].pkts_build_l3_succ) \
|
||||
XX(PKT_MGR_STAT_PKTS_BUILD_L3_FAIL_ON_OUTPUT, pkts_build_l3_fail_on_output, queue[PACKET_STAGE_OUTPUT].pkts_build_l3_fail) \
|
||||
/* POSTROUTING */ \
|
||||
XX(PKT_MGR_STAT_PKTS_IN_ON_POSTROUTING, pkts_in_on_postrouting, queue[PACKET_STAGE_POSTROUTING].pkts_in) \
|
||||
XX(PKT_MGR_STAT_PKTS_OUT_ON_POSTROUTING, pkts_out_on_postrouting, queue[PACKET_STAGE_POSTROUTING].pkts_out) \
|
||||
XX(PKT_MGR_STAT_PKTS_CLAIM_ON_POSTROUTING, pkts_claim_on_postrouting, queue[PACKET_STAGE_POSTROUTING].pkts_claim) \
|
||||
XX(PKT_MGR_STAT_PKTS_SCHEDULE_ON_POSTROUTING, pkts_schedule_on_postrouting, queue[PACKET_STAGE_POSTROUTING].pkts_schedule) \
|
||||
XX(PKT_MGR_STAT_PKTS_DROP_ON_POSTROUTING, pkts_drop_on_postrouting, queue[PACKET_STAGE_POSTROUTING].pkts_drop) \
|
||||
XX(PKT_MGR_STAT_PKTS_DUP_SUCC_ON_POSTROUTING, pkts_dup_succ_on_postrouting, queue[PACKET_STAGE_POSTROUTING].pkts_dup_succ) \
|
||||
XX(PKT_MGR_STAT_PKTS_DUP_FAIL_ON_POSTROUTING, pkts_dup_fail_on_postrouting, queue[PACKET_STAGE_POSTROUTING].pkts_dup_fail) \
|
||||
XX(PKT_MGR_STAT_PKTS_BUILD_TCP_SUCC_ON_POSTROUTING, pkts_build_tcp_succ_on_postrouting, queue[PACKET_STAGE_POSTROUTING].pkts_build_tcp_succ) \
|
||||
XX(PKT_MGR_STAT_PKTS_BUILD_TCP_FAIL_ON_POSTROUTING, pkts_build_tcp_fail_on_postrouting, queue[PACKET_STAGE_POSTROUTING].pkts_build_tcp_fail) \
|
||||
XX(PKT_MGR_STAT_PKTS_BUILD_UDP_SUCC_ON_POSTROUTING, pkts_build_udp_succ_on_postrouting, queue[PACKET_STAGE_POSTROUTING].pkts_build_udp_succ) \
|
||||
XX(PKT_MGR_STAT_PKTS_BUILD_UDP_FAIL_ON_POSTROUTING, pkts_build_udp_fail_on_postrouting, queue[PACKET_STAGE_POSTROUTING].pkts_build_udp_fail) \
|
||||
XX(PKT_MGR_STAT_PKTS_BUILD_L3_SUCC_ON_POSTROUTING, pkts_build_l3_succ_on_postrouting, queue[PACKET_STAGE_POSTROUTING].pkts_build_l3_succ) \
|
||||
XX(PKT_MGR_STAT_PKTS_BUILD_L3_FAIL_ON_POSTROUTING, pkts_build_l3_fail_on_postrouting, queue[PACKET_STAGE_POSTROUTING].pkts_build_l3_fail)
|
||||
|
||||
enum pkt_mgr_stat_type
|
||||
{
|
||||
|
||||
@@ -78,8 +78,23 @@ static void check_stat(struct packet_manager_stat *curr_stat, struct packet_mana
|
||||
{
|
||||
EXPECT_TRUE(curr_stat->queue[i].pkts_in == expect_stat->queue[i].pkts_in);
|
||||
EXPECT_TRUE(curr_stat->queue[i].pkts_out == expect_stat->queue[i].pkts_out);
|
||||
|
||||
EXPECT_TRUE(curr_stat->queue[i].pkts_claim == expect_stat->queue[i].pkts_claim);
|
||||
EXPECT_TRUE(curr_stat->queue[i].pkts_schedule == expect_stat->queue[i].pkts_schedule);
|
||||
|
||||
EXPECT_TRUE(curr_stat->queue[i].pkts_drop == expect_stat->queue[i].pkts_drop);
|
||||
|
||||
EXPECT_TRUE(curr_stat->queue[i].pkts_dup_succ == expect_stat->queue[i].pkts_dup_succ);
|
||||
EXPECT_TRUE(curr_stat->queue[i].pkts_dup_fail == expect_stat->queue[i].pkts_dup_fail);
|
||||
|
||||
EXPECT_TRUE(curr_stat->queue[i].pkts_build_tcp_succ == expect_stat->queue[i].pkts_build_tcp_succ);
|
||||
EXPECT_TRUE(curr_stat->queue[i].pkts_build_tcp_fail == expect_stat->queue[i].pkts_build_tcp_fail);
|
||||
|
||||
EXPECT_TRUE(curr_stat->queue[i].pkts_build_udp_succ == expect_stat->queue[i].pkts_build_udp_succ);
|
||||
EXPECT_TRUE(curr_stat->queue[i].pkts_build_udp_fail == expect_stat->queue[i].pkts_build_udp_fail);
|
||||
|
||||
EXPECT_TRUE(curr_stat->queue[i].pkts_build_l3_succ == expect_stat->queue[i].pkts_build_l3_succ);
|
||||
EXPECT_TRUE(curr_stat->queue[i].pkts_build_l3_fail == expect_stat->queue[i].pkts_build_l3_fail);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -146,12 +161,86 @@ TEST(PACKET_MANAGER, SUBSCRIBER_PACKET_STAGE)
|
||||
.pkts_ingress = 1,
|
||||
.pkts_egress = 1,
|
||||
.queue = {
|
||||
[PACKET_STAGE_PREROUTING] = {.pkts_in = 1, .pkts_out = 1, .pkts_claim = 0, .pkts_schedule = 0},
|
||||
[PACKET_STAGE_INPUT] = {.pkts_in = 1, .pkts_out = 1, .pkts_claim = 0, .pkts_schedule = 0},
|
||||
[PACKET_STAGE_FORWARD] = {.pkts_in = 1, .pkts_out = 1, .pkts_claim = 0, .pkts_schedule = 0},
|
||||
[PACKET_STAGE_OUTPUT] = {.pkts_in = 1, .pkts_out = 1, .pkts_claim = 0, .pkts_schedule = 0},
|
||||
[PACKET_STAGE_POSTROUTING] = {.pkts_in = 1, .pkts_out = 1, .pkts_claim = 0, .pkts_schedule = 0},
|
||||
[PACKET_STAGE_MAX] = {.pkts_in = 1, .pkts_out = 1, .pkts_claim = 0, .pkts_schedule = 0},
|
||||
[PACKET_STAGE_PREROUTING] = {.pkts_in = 1, .pkts_out = 1, .pkts_claim = 0, .pkts_schedule = 0, .pkts_drop = 0, .pkts_dup_succ = 0, .pkts_dup_fail = 0, .pkts_build_tcp_succ = 0, .pkts_build_tcp_fail = 0, .pkts_build_udp_succ = 0, .pkts_build_udp_fail = 0, .pkts_build_l3_succ = 0, .pkts_build_l3_fail = 0},
|
||||
[PACKET_STAGE_INPUT] = {.pkts_in = 1, .pkts_out = 1, .pkts_claim = 0, .pkts_schedule = 0, .pkts_drop = 0, .pkts_dup_succ = 0, .pkts_dup_fail = 0, .pkts_build_tcp_succ = 0, .pkts_build_tcp_fail = 0, .pkts_build_udp_succ = 0, .pkts_build_udp_fail = 0, .pkts_build_l3_succ = 0, .pkts_build_l3_fail = 0},
|
||||
[PACKET_STAGE_FORWARD] = {.pkts_in = 1, .pkts_out = 1, .pkts_claim = 0, .pkts_schedule = 0, .pkts_drop = 0, .pkts_dup_succ = 0, .pkts_dup_fail = 0, .pkts_build_tcp_succ = 0, .pkts_build_tcp_fail = 0, .pkts_build_udp_succ = 0, .pkts_build_udp_fail = 0, .pkts_build_l3_succ = 0, .pkts_build_l3_fail = 0},
|
||||
[PACKET_STAGE_OUTPUT] = {.pkts_in = 1, .pkts_out = 1, .pkts_claim = 0, .pkts_schedule = 0, .pkts_drop = 0, .pkts_dup_succ = 0, .pkts_dup_fail = 0, .pkts_build_tcp_succ = 0, .pkts_build_tcp_fail = 0, .pkts_build_udp_succ = 0, .pkts_build_udp_fail = 0, .pkts_build_l3_succ = 0, .pkts_build_l3_fail = 0},
|
||||
[PACKET_STAGE_POSTROUTING] = {.pkts_in = 1, .pkts_out = 1, .pkts_claim = 0, .pkts_schedule = 0, .pkts_drop = 0, .pkts_dup_succ = 0, .pkts_dup_fail = 0, .pkts_build_tcp_succ = 0, .pkts_build_tcp_fail = 0, .pkts_build_udp_succ = 0, .pkts_build_udp_fail = 0, .pkts_build_l3_succ = 0, .pkts_build_l3_fail = 0},
|
||||
[PACKET_STAGE_MAX] = {.pkts_in = 1, .pkts_out = 1, .pkts_claim = 0, .pkts_schedule = 0, .pkts_drop = 0, .pkts_dup_succ = 0, .pkts_dup_fail = 0, .pkts_build_tcp_succ = 0, .pkts_build_tcp_fail = 0, .pkts_build_udp_succ = 0, .pkts_build_udp_fail = 0, .pkts_build_l3_succ = 0, .pkts_build_l3_fail = 0},
|
||||
},
|
||||
};
|
||||
check_stat(curr_stat, &expect_stat);
|
||||
|
||||
// per-thread free
|
||||
packet_manager_clean(pkt_mgr, thread_id);
|
||||
|
||||
// module free
|
||||
packet_manager_free(pkt_mgr);
|
||||
|
||||
// global free
|
||||
mq_runtime_free(mq_rt);
|
||||
mq_schema_free(mq_schema);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if 1
|
||||
static void on_forward_stage_drop_packet(struct packet *pkt, enum packet_stage stage, void *args)
|
||||
{
|
||||
printf("on_packet_stage: %s\n", packet_stage_to_str(stage));
|
||||
|
||||
static int count = 0;
|
||||
EXPECT_TRUE(count == stage);
|
||||
EXPECT_TRUE(packet_get_type(pkt) == PACKET_TYPE_PSEUDO);
|
||||
EXPECT_TRUE(args == NULL);
|
||||
count++;
|
||||
|
||||
if (stage == PACKET_STAGE_FORWARD)
|
||||
{
|
||||
packet_set_action(pkt, PACKET_ACTION_DROP);
|
||||
}
|
||||
}
|
||||
|
||||
TEST(PACKET_MANAGER, DROP_PACKET)
|
||||
{
|
||||
// global init
|
||||
struct mq_schema *mq_schema = mq_schema_new();
|
||||
EXPECT_TRUE(mq_schema);
|
||||
struct mq_runtime *mq_rt = mq_runtime_new(mq_schema);
|
||||
EXPECT_TRUE(mq_rt);
|
||||
|
||||
// module init
|
||||
struct packet_manager *pkt_mgr = packet_manager_new(mq_schema, 1);
|
||||
EXPECT_TRUE(pkt_mgr);
|
||||
EXPECT_TRUE(packet_manager_subscribe(pkt_mgr, PACKET_STAGE_PREROUTING, on_forward_stage_drop_packet, NULL) == 0);
|
||||
EXPECT_TRUE(packet_manager_subscribe(pkt_mgr, PACKET_STAGE_INPUT, on_forward_stage_drop_packet, NULL) == 0);
|
||||
EXPECT_TRUE(packet_manager_subscribe(pkt_mgr, PACKET_STAGE_FORWARD, on_forward_stage_drop_packet, NULL) == 0);
|
||||
EXPECT_TRUE(packet_manager_subscribe(pkt_mgr, PACKET_STAGE_OUTPUT, on_forward_stage_drop_packet, NULL) == 0);
|
||||
EXPECT_TRUE(packet_manager_subscribe(pkt_mgr, PACKET_STAGE_POSTROUTING, on_forward_stage_drop_packet, NULL) == 0);
|
||||
|
||||
// per-thread init
|
||||
packet_manager_init(pkt_mgr, thread_id, mq_rt);
|
||||
|
||||
// per-thread run
|
||||
struct packet pkt;
|
||||
memset(&pkt, 0, sizeof(pkt));
|
||||
packet_parse(&pkt, (const char *)data, sizeof(data));
|
||||
packet_set_type(&pkt, PACKET_TYPE_PSEUDO);
|
||||
|
||||
struct packet_manager_stat *curr_stat = packet_manager_get_stat(pkt_mgr, thread_id);
|
||||
check_stat(curr_stat, &init_stat);
|
||||
packet_manager_ingress(pkt_mgr, thread_id, &pkt);
|
||||
packet_manager_dispatch(pkt_mgr, thread_id);
|
||||
EXPECT_TRUE(packet_manager_egress(pkt_mgr, thread_id) == NULL);
|
||||
struct packet_manager_stat expect_stat = {
|
||||
.pkts_ingress = 1,
|
||||
.pkts_egress = 0,
|
||||
.queue = {
|
||||
[PACKET_STAGE_PREROUTING] = {.pkts_in = 1, .pkts_out = 1, .pkts_claim = 0, .pkts_schedule = 0, .pkts_drop = 0, .pkts_dup_succ = 0, .pkts_dup_fail = 0, .pkts_build_tcp_succ = 0, .pkts_build_tcp_fail = 0, .pkts_build_udp_succ = 0, .pkts_build_udp_fail = 0, .pkts_build_l3_succ = 0, .pkts_build_l3_fail = 0},
|
||||
[PACKET_STAGE_INPUT] = {.pkts_in = 1, .pkts_out = 1, .pkts_claim = 0, .pkts_schedule = 0, .pkts_drop = 0, .pkts_dup_succ = 0, .pkts_dup_fail = 0, .pkts_build_tcp_succ = 0, .pkts_build_tcp_fail = 0, .pkts_build_udp_succ = 0, .pkts_build_udp_fail = 0, .pkts_build_l3_succ = 0, .pkts_build_l3_fail = 0},
|
||||
[PACKET_STAGE_FORWARD] = {.pkts_in = 1, .pkts_out = 1, .pkts_claim = 0, .pkts_schedule = 0, .pkts_drop = 1, .pkts_dup_succ = 0, .pkts_dup_fail = 0, .pkts_build_tcp_succ = 0, .pkts_build_tcp_fail = 0, .pkts_build_udp_succ = 0, .pkts_build_udp_fail = 0, .pkts_build_l3_succ = 0, .pkts_build_l3_fail = 0},
|
||||
[PACKET_STAGE_OUTPUT] = {.pkts_in = 0, .pkts_out = 0, .pkts_claim = 0, .pkts_schedule = 0, .pkts_drop = 0, .pkts_dup_succ = 0, .pkts_dup_fail = 0, .pkts_build_tcp_succ = 0, .pkts_build_tcp_fail = 0, .pkts_build_udp_succ = 0, .pkts_build_udp_fail = 0, .pkts_build_l3_succ = 0, .pkts_build_l3_fail = 0},
|
||||
[PACKET_STAGE_POSTROUTING] = {.pkts_in = 0, .pkts_out = 0, .pkts_claim = 0, .pkts_schedule = 0, .pkts_drop = 0, .pkts_dup_succ = 0, .pkts_dup_fail = 0, .pkts_build_tcp_succ = 0, .pkts_build_tcp_fail = 0, .pkts_build_udp_succ = 0, .pkts_build_udp_fail = 0, .pkts_build_l3_succ = 0, .pkts_build_l3_fail = 0},
|
||||
[PACKET_STAGE_MAX] = {.pkts_in = 0, .pkts_out = 0, .pkts_claim = 0, .pkts_schedule = 0, .pkts_drop = 0, .pkts_dup_succ = 0, .pkts_dup_fail = 0, .pkts_build_tcp_succ = 0, .pkts_build_tcp_fail = 0, .pkts_build_udp_succ = 0, .pkts_build_udp_fail = 0, .pkts_build_l3_succ = 0, .pkts_build_l3_fail = 0},
|
||||
},
|
||||
};
|
||||
check_stat(curr_stat, &expect_stat);
|
||||
@@ -250,12 +339,12 @@ TEST(PACKET_MANAGER, CLAIM_PACKET)
|
||||
.pkts_ingress = 1,
|
||||
.pkts_egress = 0,
|
||||
.queue = {
|
||||
[PACKET_STAGE_PREROUTING] = {.pkts_in = 1, .pkts_out = 1, .pkts_claim = 1, .pkts_schedule = 0},
|
||||
[PACKET_STAGE_INPUT] = {.pkts_in = 0, .pkts_out = 0, .pkts_claim = 0, .pkts_schedule = 0},
|
||||
[PACKET_STAGE_FORWARD] = {.pkts_in = 0, .pkts_out = 0, .pkts_claim = 0, .pkts_schedule = 0},
|
||||
[PACKET_STAGE_OUTPUT] = {.pkts_in = 0, .pkts_out = 0, .pkts_claim = 0, .pkts_schedule = 0},
|
||||
[PACKET_STAGE_POSTROUTING] = {.pkts_in = 0, .pkts_out = 0, .pkts_claim = 0, .pkts_schedule = 0},
|
||||
[PACKET_STAGE_MAX] = {.pkts_in = 0, .pkts_out = 0, .pkts_claim = 0, .pkts_schedule = 0},
|
||||
[PACKET_STAGE_PREROUTING] = {.pkts_in = 1, .pkts_out = 1, .pkts_claim = 1, .pkts_schedule = 0, .pkts_drop = 0, .pkts_dup_succ = 0, .pkts_dup_fail = 0, .pkts_build_tcp_succ = 0, .pkts_build_tcp_fail = 0, .pkts_build_udp_succ = 0, .pkts_build_udp_fail = 0, .pkts_build_l3_succ = 0, .pkts_build_l3_fail = 0},
|
||||
[PACKET_STAGE_INPUT] = {.pkts_in = 0, .pkts_out = 0, .pkts_claim = 0, .pkts_schedule = 0, .pkts_drop = 0, .pkts_dup_succ = 0, .pkts_dup_fail = 0, .pkts_build_tcp_succ = 0, .pkts_build_tcp_fail = 0, .pkts_build_udp_succ = 0, .pkts_build_udp_fail = 0, .pkts_build_l3_succ = 0, .pkts_build_l3_fail = 0},
|
||||
[PACKET_STAGE_FORWARD] = {.pkts_in = 0, .pkts_out = 0, .pkts_claim = 0, .pkts_schedule = 0, .pkts_drop = 0, .pkts_dup_succ = 0, .pkts_dup_fail = 0, .pkts_build_tcp_succ = 0, .pkts_build_tcp_fail = 0, .pkts_build_udp_succ = 0, .pkts_build_udp_fail = 0, .pkts_build_l3_succ = 0, .pkts_build_l3_fail = 0},
|
||||
[PACKET_STAGE_OUTPUT] = {.pkts_in = 0, .pkts_out = 0, .pkts_claim = 0, .pkts_schedule = 0, .pkts_drop = 0, .pkts_dup_succ = 0, .pkts_dup_fail = 0, .pkts_build_tcp_succ = 0, .pkts_build_tcp_fail = 0, .pkts_build_udp_succ = 0, .pkts_build_udp_fail = 0, .pkts_build_l3_succ = 0, .pkts_build_l3_fail = 0},
|
||||
[PACKET_STAGE_POSTROUTING] = {.pkts_in = 0, .pkts_out = 0, .pkts_claim = 0, .pkts_schedule = 0, .pkts_drop = 0, .pkts_dup_succ = 0, .pkts_dup_fail = 0, .pkts_build_tcp_succ = 0, .pkts_build_tcp_fail = 0, .pkts_build_udp_succ = 0, .pkts_build_udp_fail = 0, .pkts_build_l3_succ = 0, .pkts_build_l3_fail = 0},
|
||||
[PACKET_STAGE_MAX] = {.pkts_in = 0, .pkts_out = 0, .pkts_claim = 0, .pkts_schedule = 0, .pkts_drop = 0, .pkts_dup_succ = 0, .pkts_dup_fail = 0, .pkts_build_tcp_succ = 0, .pkts_build_tcp_fail = 0, .pkts_build_udp_succ = 0, .pkts_build_udp_fail = 0, .pkts_build_l3_succ = 0, .pkts_build_l3_fail = 0},
|
||||
},
|
||||
};
|
||||
check_stat(curr_stat, &expect_stat);
|
||||
@@ -334,12 +423,12 @@ TEST(PACKET_MANAGER, SCHEDULE_PACKET)
|
||||
.pkts_ingress = 1,
|
||||
.pkts_egress = 5,
|
||||
.queue = {
|
||||
[PACKET_STAGE_PREROUTING] = {.pkts_in = 1, .pkts_out = 1, .pkts_claim = 0, .pkts_schedule = 0},
|
||||
[PACKET_STAGE_INPUT] = {.pkts_in = 2, .pkts_out = 2, .pkts_claim = 0, .pkts_schedule = 1},
|
||||
[PACKET_STAGE_FORWARD] = {.pkts_in = 3, .pkts_out = 3, .pkts_claim = 0, .pkts_schedule = 1},
|
||||
[PACKET_STAGE_OUTPUT] = {.pkts_in = 4, .pkts_out = 4, .pkts_claim = 0, .pkts_schedule = 1},
|
||||
[PACKET_STAGE_POSTROUTING] = {.pkts_in = 5, .pkts_out = 5, .pkts_claim = 0, .pkts_schedule = 1},
|
||||
[PACKET_STAGE_MAX] = {.pkts_in = 5, .pkts_out = 5, .pkts_claim = 0, .pkts_schedule = 0},
|
||||
[PACKET_STAGE_PREROUTING] = {.pkts_in = 1, .pkts_out = 1, .pkts_claim = 0, .pkts_schedule = 0, .pkts_drop = 0, .pkts_dup_succ = 0, .pkts_dup_fail = 0, .pkts_build_tcp_succ = 0, .pkts_build_tcp_fail = 0, .pkts_build_udp_succ = 0, .pkts_build_udp_fail = 0, .pkts_build_l3_succ = 0, .pkts_build_l3_fail = 0},
|
||||
[PACKET_STAGE_INPUT] = {.pkts_in = 2, .pkts_out = 2, .pkts_claim = 0, .pkts_schedule = 1, .pkts_drop = 0, .pkts_dup_succ = 0, .pkts_dup_fail = 0, .pkts_build_tcp_succ = 0, .pkts_build_tcp_fail = 0, .pkts_build_udp_succ = 0, .pkts_build_udp_fail = 0, .pkts_build_l3_succ = 0, .pkts_build_l3_fail = 0},
|
||||
[PACKET_STAGE_FORWARD] = {.pkts_in = 3, .pkts_out = 3, .pkts_claim = 0, .pkts_schedule = 1, .pkts_drop = 0, .pkts_dup_succ = 0, .pkts_dup_fail = 0, .pkts_build_tcp_succ = 0, .pkts_build_tcp_fail = 0, .pkts_build_udp_succ = 0, .pkts_build_udp_fail = 0, .pkts_build_l3_succ = 0, .pkts_build_l3_fail = 0},
|
||||
[PACKET_STAGE_OUTPUT] = {.pkts_in = 4, .pkts_out = 4, .pkts_claim = 0, .pkts_schedule = 1, .pkts_drop = 0, .pkts_dup_succ = 0, .pkts_dup_fail = 0, .pkts_build_tcp_succ = 0, .pkts_build_tcp_fail = 0, .pkts_build_udp_succ = 0, .pkts_build_udp_fail = 0, .pkts_build_l3_succ = 0, .pkts_build_l3_fail = 0},
|
||||
[PACKET_STAGE_POSTROUTING] = {.pkts_in = 5, .pkts_out = 5, .pkts_claim = 0, .pkts_schedule = 1, .pkts_drop = 0, .pkts_dup_succ = 0, .pkts_dup_fail = 0, .pkts_build_tcp_succ = 0, .pkts_build_tcp_fail = 0, .pkts_build_udp_succ = 0, .pkts_build_udp_fail = 0, .pkts_build_l3_succ = 0, .pkts_build_l3_fail = 0},
|
||||
[PACKET_STAGE_MAX] = {.pkts_in = 5, .pkts_out = 5, .pkts_claim = 0, .pkts_schedule = 0, .pkts_drop = 0, .pkts_dup_succ = 0, .pkts_dup_fail = 0, .pkts_build_tcp_succ = 0, .pkts_build_tcp_fail = 0, .pkts_build_udp_succ = 0, .pkts_build_udp_fail = 0, .pkts_build_l3_succ = 0, .pkts_build_l3_fail = 0},
|
||||
},
|
||||
};
|
||||
check_stat(curr_stat, &expect_stat);
|
||||
@@ -429,12 +518,12 @@ TEST(PACKET_MANAGER, SCHEDULE_CLAIMED_PACKET)
|
||||
.pkts_ingress = 1,
|
||||
.pkts_egress = 1,
|
||||
.queue = {
|
||||
[PACKET_STAGE_PREROUTING] = {.pkts_in = 1, .pkts_out = 1, .pkts_claim = 1, .pkts_schedule = 0},
|
||||
[PACKET_STAGE_INPUT] = {.pkts_in = 0, .pkts_out = 0, .pkts_claim = 0, .pkts_schedule = 0},
|
||||
[PACKET_STAGE_FORWARD] = {.pkts_in = 0, .pkts_out = 0, .pkts_claim = 0, .pkts_schedule = 0},
|
||||
[PACKET_STAGE_OUTPUT] = {.pkts_in = 0, .pkts_out = 0, .pkts_claim = 0, .pkts_schedule = 0},
|
||||
[PACKET_STAGE_POSTROUTING] = {.pkts_in = 1, .pkts_out = 1, .pkts_claim = 0, .pkts_schedule = 1},
|
||||
[PACKET_STAGE_MAX] = {.pkts_in = 1, .pkts_out = 1, .pkts_claim = 0, .pkts_schedule = 0},
|
||||
[PACKET_STAGE_PREROUTING] = {.pkts_in = 1, .pkts_out = 1, .pkts_claim = 1, .pkts_schedule = 0, .pkts_drop = 0, .pkts_dup_succ = 0, .pkts_dup_fail = 0, .pkts_build_tcp_succ = 0, .pkts_build_tcp_fail = 0, .pkts_build_udp_succ = 0, .pkts_build_udp_fail = 0, .pkts_build_l3_succ = 0, .pkts_build_l3_fail = 0},
|
||||
[PACKET_STAGE_INPUT] = {.pkts_in = 0, .pkts_out = 0, .pkts_claim = 0, .pkts_schedule = 0, .pkts_drop = 0, .pkts_dup_succ = 0, .pkts_dup_fail = 0, .pkts_build_tcp_succ = 0, .pkts_build_tcp_fail = 0, .pkts_build_udp_succ = 0, .pkts_build_udp_fail = 0, .pkts_build_l3_succ = 0, .pkts_build_l3_fail = 0},
|
||||
[PACKET_STAGE_FORWARD] = {.pkts_in = 0, .pkts_out = 0, .pkts_claim = 0, .pkts_schedule = 0, .pkts_drop = 0, .pkts_dup_succ = 0, .pkts_dup_fail = 0, .pkts_build_tcp_succ = 0, .pkts_build_tcp_fail = 0, .pkts_build_udp_succ = 0, .pkts_build_udp_fail = 0, .pkts_build_l3_succ = 0, .pkts_build_l3_fail = 0},
|
||||
[PACKET_STAGE_OUTPUT] = {.pkts_in = 0, .pkts_out = 0, .pkts_claim = 0, .pkts_schedule = 0, .pkts_drop = 0, .pkts_dup_succ = 0, .pkts_dup_fail = 0, .pkts_build_tcp_succ = 0, .pkts_build_tcp_fail = 0, .pkts_build_udp_succ = 0, .pkts_build_udp_fail = 0, .pkts_build_l3_succ = 0, .pkts_build_l3_fail = 0},
|
||||
[PACKET_STAGE_POSTROUTING] = {.pkts_in = 1, .pkts_out = 1, .pkts_claim = 0, .pkts_schedule = 1, .pkts_drop = 0, .pkts_dup_succ = 0, .pkts_dup_fail = 0, .pkts_build_tcp_succ = 0, .pkts_build_tcp_fail = 0, .pkts_build_udp_succ = 0, .pkts_build_udp_fail = 0, .pkts_build_l3_succ = 0, .pkts_build_l3_fail = 0},
|
||||
[PACKET_STAGE_MAX] = {.pkts_in = 1, .pkts_out = 1, .pkts_claim = 0, .pkts_schedule = 0, .pkts_drop = 0, .pkts_dup_succ = 0, .pkts_dup_fail = 0, .pkts_build_tcp_succ = 0, .pkts_build_tcp_fail = 0, .pkts_build_udp_succ = 0, .pkts_build_udp_fail = 0, .pkts_build_l3_succ = 0, .pkts_build_l3_fail = 0},
|
||||
},
|
||||
};
|
||||
check_stat(curr_stat, &expect_stat);
|
||||
|
||||
Reference in New Issue
Block a user