Non lo so per certo, ma questo mi sembra un riferimento legittimo
Intuizione:
$ grep -A 2 initcwnd `find /usr/src/linux/include -type f -iname '*h'`
fuori:
/usr/src/linux/include/net/tcp.h:
/* TCP initial congestion window as per draft-hkchu-tcpm-initcwnd-01 */
#define TCP_INIT_CWND 10
Beh, non posso dire di essere sicuro al 100% che questa dovrebbe essere la risposta, ma, come spesso accade, ss
è la buona scelta per ottenere alcune informazioni rivelate, ad es. g.:
ss -nli|fgrep cwnd
westwood rto:1000 mss:536 cwnd:10
westwood rto:1000 mss:536 cwnd:10
westwood rto:1000 mss:536 cwnd:10
-n
è tipico per sbarazzarsi della fastidiosa risoluzione DNS, -l
ci atteniamo solo alle prese di ascolto e -i
(la chiave) è "Mostra informazioni TCP interne". Come si può vedere, vengono mostrati sia l'algoritmo di congestione che il cwnd predefinito.
Se ho capito bene, stai cercando il valore iniziale di snd_cwnd
parametro impostato quando viene inizializzato un socket TCP.
Sembra che inizi con il kernel Linux 2.6.39
, una macro TCP_INIT_CWND
è stato introdotto in linux/include/net/tcp.h che popola il valore di snd_cwnd
durante l'inizializzazione di un socket TCP.
So dove si trova questo codice nel kernel per IPv4
, e sfortunatamente non sembra utilizzare alcuna macro per popolare il valore per i kernel più vecchi di 2.6.39
/* net/ipv4/tcp_ipv4.c from 2.6.37 kernel */
static int tcp_v4_init_sock(struct sock *sk)
{
struct inet_connection_sock *icsk = inet_csk(sk);
struct tcp_sock *tp = tcp_sk(sk);
....
....
....
/* So many TCP implementations out there (incorrectly) count the
* initial SYN frame in their delayed-ACK and congestion control
* algorithms that we must have the following bandaid to talk
* efficiently to them. -DaveM
*/
tp->snd_cwnd = 2;
....
....
....
}
Esiste un codice di inizializzazione simile per IPv6
anche all'interno di tcp_v6_init_sock()
funzione in net/ipv6/tcp_ipv6.c