TCP_CONGCTL(9)

TCP_CONGCTL(9) | Kernel Developer's Manual | TCP_CONGCTL(9)

# NAME

`tcp_congctl` —
TCP congestion control API

# SYNOPSIS

`#include <netinet/tcp_congctl.h>`

int
`tcp_congctl_register`(const char *, struct tcp_congctl *);

int
`tcp_congctl_unregister`(const char *);

# DESCRIPTION

The `tcp_congctrl` API is used to add or remove TCP congestion control algorithms on-the-fly and to modularize them. It includes basically two functions:

`tcp_congctl_register`(const char *, struct tcp_congctl *)
  Registers a new congestion control algorithm. The struct tcp_congctl argument must contain a list of callbacks like the following:

      struct tcp_congctl {
      	int  (*fast_retransmit)(struct tcpcb *,
      	    struct tcphdr *);
      	void (*slow_retransmit)(struct tcpcb *);
      	void (*fast_retransmit_newack)(struct tcpcb *,
      	    struct tcphdr *);
      	void (*newack)(struct tcpcb *,
      	    struct tcphdr *);
      	void (*cong_exp)(struct tcpcb *);
      };

`tcp_congctl_unregister`(const char *)
  If found, unregister the selected TCP congestion control algorithm.

# RETURN VALUES

`tcp_congctl_register`() and `tcp_congctl_unregister`() both return `0` when there is no error. If the name is already registered, `tcp_congctl_register`() will return `EEXIST`. `tcp_congctl_unregister`() can return `ENOENT` if there is no congestion control algorithm by that name and can return `EBUSY` if the matched algorithm is being used by userspace applications.

# FILES

Implementation is in sys/netinet/tcp_congctl.c and the interface is in sys/netinet/tcp_congctl.h.

# SEE ALSO

tcp(4)

October 15, 2006 | NetBSD 9.0