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:
@@ -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
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user