70 lines
2.4 KiB
C
70 lines
2.4 KiB
C
#pragma once
|
|
|
|
#ifdef __cplusplus
|
|
extern "C"
|
|
{
|
|
#endif
|
|
|
|
#include <sys/queue.h>
|
|
|
|
#include "log_internal.h"
|
|
#include "stellar/mq.h"
|
|
#include "stellar/packet_manager.h"
|
|
|
|
#define PACKET_MANAGER_LOG_ERROR(format, ...) STELLAR_LOG_ERROR(__thread_local_logger, "packet manager", format, ##__VA_ARGS__)
|
|
#define PACKET_MANAGER_LOG_DEBUG(format, ...) STELLAR_LOG_DEBUG(__thread_local_logger, "packet manager", format, ##__VA_ARGS__)
|
|
#define PACKET_MANAGER_LOG_FATAL(format, ...) STELLAR_LOG_FATAL(__thread_local_logger, "packet manager", format, ##__VA_ARGS__)
|
|
#define PACKET_MANAGER_LOG_INFO(format, ...) STELLAR_LOG_INFO(__thread_local_logger, "packet manager", format, ##__VA_ARGS__)
|
|
|
|
#define PACKET_QUEUE_MAX (PACKET_STAGE_MAX + 1)
|
|
|
|
TAILQ_HEAD(packet_queue, packet);
|
|
|
|
struct packet_manager_stat
|
|
{
|
|
struct
|
|
{
|
|
uint64_t pkts_ingress;
|
|
uint64_t pkts_egress;
|
|
} total;
|
|
struct
|
|
{
|
|
uint64_t pkts_in; // include the packets that are scheduled
|
|
uint64_t pkts_out; // include the packets that are claimed
|
|
uint64_t pkts_claim;
|
|
uint64_t pkts_schedule;
|
|
} queue[PACKET_QUEUE_MAX]; // the last queue is for sending packets
|
|
};
|
|
|
|
struct packet_manager_runtime
|
|
{
|
|
enum packet_stage stage;
|
|
struct packet_queue queue[PACKET_QUEUE_MAX];
|
|
|
|
void *cb_args;
|
|
on_packet_claimed_callback *claimed_cb;
|
|
|
|
struct mq_runtime *mq;
|
|
struct packet_manager_stat stat;
|
|
};
|
|
|
|
struct packet_manager_runtime *packet_manager_runtime_new();
|
|
void packet_manager_runtime_free(struct packet_manager_runtime *pkt_mgr_rt);
|
|
|
|
void packet_manager_runtime_init(struct packet_manager_runtime *pkt_mgr_rt, struct mq_runtime *mq_rt);
|
|
void packet_manager_runtime_ingress(struct packet_manager_runtime *pkt_mgr_rt, struct packet *pkt);
|
|
struct packet *packet_manager_runtime_egress(struct packet_manager_runtime *pkt_mgr_rt);
|
|
void packet_manager_runtime_dispatch(struct packet_manager_runtime *pkt_mgr_rt);
|
|
|
|
int packet_manager_runtime_claim_packet(struct packet_manager_runtime *pkt_mgr_rt, struct packet *pkt, on_packet_claimed_callback cb, void *args);
|
|
void packet_manager_runtime_schedule_packet(struct packet_manager_runtime *pkt_mgr_rt, struct packet *pkt, enum packet_stage stage);
|
|
|
|
struct packet_manager_stat *packet_manager_runtime_get_stat(struct packet_manager_runtime *pkt_mgr_rt);
|
|
void packet_manager_runtime_print_stat(struct packet_manager_runtime *pkt_mgr_rt);
|
|
|
|
const char *packet_stage_to_str(enum packet_stage stage);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|