use crate::congestion::{
count_tp, fps_tp, rate_tp, size_tp, time_tp, PRAGUE_INITMTU, PRAGUE_MAXRATE,
};
pub const RFC8888_ACKPERIOD: u32 = 25_000;
pub const FRAME_PER_SECOND: fps_tp = 60;
pub const FRAME_DURATION: u32 = 10_000;
pub const PORT: u16 = 8080;
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct RunnerConfig {
pub rcv_addr: String,
pub rcv_port: u32,
pub connect: bool,
pub startup_wait_timeout_us: Option<u32>,
pub max_pkt: size_tp,
pub max_rate: rate_tp,
pub rfc8888_ack: bool,
pub rfc8888_ackperiod: u32,
pub rt_mode: bool,
pub rt_fps: fps_tp,
pub rt_frameduration: u32,
}
impl Default for RunnerConfig {
fn default() -> Self {
Self {
rcv_addr: "0.0.0.0".to_string(),
rcv_port: u32::from(PORT),
connect: false,
startup_wait_timeout_us: None,
max_pkt: PRAGUE_INITMTU,
max_rate: PRAGUE_MAXRATE,
rfc8888_ack: false,
rfc8888_ackperiod: RFC8888_ACKPERIOD,
rt_mode: false,
rt_fps: FRAME_PER_SECOND,
rt_frameduration: FRAME_DURATION,
}
}
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct PragueAckCounters {
pub packets_received: count_tp,
pub packets_ce: count_tp,
pub packets_lost: count_tp,
pub error_l4s: bool,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct PraguePacketWindowMetrics {
pub pacing_rate: rate_tp,
pub packet_window: count_tp,
pub packet_burst: count_tp,
pub packet_inflight: count_tp,
pub packet_inburst: count_tp,
pub next_send: time_tp,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct PragueFrameWindowMetrics {
pub frame_window: count_tp,
pub frame_inflight: count_tp,
pub frame_sending: bool,
pub sent_frame: count_tp,
pub lost_frame: count_tp,
pub recv_frame: count_tp,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct PragueSendDataEvent {
pub now: time_tp,
pub timestamp: time_tp,
pub echoed_timestamp: time_tp,
pub seqnr: count_tp,
pub pkt_size: size_tp,
pub transport: PraguePacketWindowMetrics,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct PragueSendFrameDataEvent {
pub now: time_tp,
pub timestamp: time_tp,
pub echoed_timestamp: time_tp,
pub seqnr: count_tp,
pub pkt_size: size_tp,
pub pacing_rate: rate_tp,
pub frame_window: count_tp,
pub frame_size: count_tp,
pub packet_burst: count_tp,
pub frame_inflight: count_tp,
pub frame_sent: size_tp,
pub packet_inburst: count_tp,
pub next_send: time_tp,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct PragueRecvDataEvent {
pub now: time_tp,
pub timestamp: time_tp,
pub echoed_timestamp: time_tp,
pub seqnr: count_tp,
pub bytes_received: size_tp,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct PragueSendAckEvent {
pub now: time_tp,
pub timestamp: time_tp,
pub echoed_timestamp: time_tp,
pub seqnr: count_tp,
pub packet_size: size_tp,
pub counters: PragueAckCounters,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct PragueSendRfc8888AckEvent<'a> {
pub now: time_tp,
pub seqnr: count_tp,
pub packet_size: size_tp,
pub begin_seq: count_tp,
pub num_reports: u16,
pub report: &'a [u8],
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct PragueRecvAckEvent {
pub now: time_tp,
pub timestamp: time_tp,
pub echoed_timestamp: time_tp,
pub seqnr: count_tp,
pub bytes_received: size_tp,
pub counters: PragueAckCounters,
pub transport: PraguePacketWindowMetrics,
pub frames: PragueFrameWindowMetrics,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct PragueRecvRfc8888AckEvent<'a> {
pub now: time_tp,
pub seqnr: count_tp,
pub bytes_received: size_tp,
pub begin_seq: count_tp,
pub num_reports: u16,
pub num_rtt: u16,
pub rtts: &'a [time_tp],
pub counters: PragueAckCounters,
pub transport: PraguePacketWindowMetrics,
pub frames: PragueFrameWindowMetrics,
}
pub trait Reporter {
fn LogSendData(&mut self, _event: &PragueSendDataEvent) {}
fn LogSendFrameData(&mut self, _event: &PragueSendFrameDataEvent) {}
fn LogRecvData(&mut self, _event: &PragueRecvDataEvent) {}
fn LogSendACK(&mut self, _event: &PragueSendAckEvent) {}
fn LogSendRFC8888ACK(&mut self, _event: &PragueSendRfc8888AckEvent<'_>) {}
fn LogRecvACK(&mut self, _event: &PragueRecvAckEvent) {}
fn LogRecvRFC8888ACK(&mut self, _event: &PragueRecvRfc8888AckEvent<'_>) {}
}