October 15, 2006 TCP_CONGCTL 9

### NAME

tcp_congctl - TCP congestion control API

### SYNOPSIS

```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)