/* * include/proto/quic_cc.h * This file contains prototypes for QUIC congestion control. * * Copyright 2019 HAProxy Technologies, Frédéric Lécaille * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation, version 2.1 * exclusively. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef _PROTO_QUIC_CC_H #define _PROTO_QUIC_CC_H #ifdef USE_QUIC #ifndef USE_OPENSSL #error "Must define USE_OPENSSL" #endif #include #include #include #include void quic_cc_init(struct quic_cc *cc, struct quic_cc_algo *algo, struct quic_conn *qc); void quic_cc_event(struct quic_cc *cc, struct quic_cc_event *ev); void quic_cc_state_trace(struct buffer *buf, const struct quic_cc *cc); static inline const char *quic_cc_state_str(enum quic_cc_algo_state_type state) { switch (state) { case QUIC_CC_ST_SS: return "ss"; case QUIC_CC_ST_CA: return "ca"; default: return "unknown"; } } /* Return a human readable string from control congestion event type. */ static inline void quic_cc_event_trace(struct buffer *buf, const struct quic_cc_event *ev) { chunk_appendf(buf, " event type="); switch (ev->type) { case QUIC_CC_EVT_ACK: chunk_appendf(buf, "ack acked=%llu time_sent:%u", (unsigned long long)ev->ack.acked, ev->ack.time_sent); break; case QUIC_CC_EVT_LOSS: chunk_appendf(buf, "loss now_ms=%u max_ack_delay=%u lost_bytes=%llu" " time_sent=%u period=%u", ev->loss.now_ms, ev->loss.max_ack_delay, (unsigned long long)ev->loss.lost_bytes, ev->loss.newest_time_sent, ev->loss.period); break; case QUIC_CC_EVT_ECN_CE: chunk_appendf(buf, "ecn_ce"); break; } } #endif /* USE_QUIC */ #endif /* _PROTO_QUIC_CC_H */