#include <linux/kernel.h>
#include <linux/random.h>
#include <linux/module.h>
#include <linux/sched/clock.h>
#include <net/tcp.h>
#define HYSTART_ACK_TRAIN …
#define HYSTART_DELAY …
static int window __read_mostly = …;
static unsigned int backoff_beta __read_mostly = …;
static unsigned int backoff_factor __read_mostly = …;
static unsigned int hystart_detect __read_mostly = …;
static unsigned int use_ineff __read_mostly = …;
static bool use_shadow __read_mostly = …;
static bool use_tolerance __read_mostly;
module_param(window, int, 0444);
MODULE_PARM_DESC(…) …;
module_param(backoff_beta, uint, 0644);
MODULE_PARM_DESC(…) …;
module_param(backoff_factor, uint, 0644);
MODULE_PARM_DESC(…) …;
module_param(hystart_detect, uint, 0644);
MODULE_PARM_DESC(…) …;
module_param(use_ineff, uint, 0644);
MODULE_PARM_DESC(…) …;
module_param(use_shadow, bool, 0644);
MODULE_PARM_DESC(…) …;
module_param(use_tolerance, bool, 0644);
MODULE_PARM_DESC(…) …;
struct cdg_minmax { … };
enum cdg_state { … };
struct cdg { … };
static u32 __pure nexp_u32(u32 ux)
{ … }
static void tcp_cdg_hystart_update(struct sock *sk)
{ … }
static s32 tcp_cdg_grad(struct cdg *ca)
{ … }
static bool tcp_cdg_backoff(struct sock *sk, u32 grad)
{ … }
static void tcp_cdg_cong_avoid(struct sock *sk, u32 ack, u32 acked)
{ … }
static void tcp_cdg_acked(struct sock *sk, const struct ack_sample *sample)
{ … }
static u32 tcp_cdg_ssthresh(struct sock *sk)
{ … }
static void tcp_cdg_cwnd_event(struct sock *sk, const enum tcp_ca_event ev)
{ … }
static void tcp_cdg_init(struct sock *sk)
{ … }
static void tcp_cdg_release(struct sock *sk)
{ … }
static struct tcp_congestion_ops tcp_cdg __read_mostly = …;
static int __init tcp_cdg_register(void)
{ … }
static void __exit tcp_cdg_unregister(void)
{ … }
module_init(…) …;
module_exit(tcp_cdg_unregister);
MODULE_AUTHOR(…) …;
MODULE_LICENSE(…) …;
MODULE_DESCRIPTION(…) …;