tcp_syncache
static struct tcp_syncache tcp_syncache;
&tcp_syncache.bucket_limit, 0, "Per-bucket hash limit for syncache");
&tcp_syncache.cache_limit, 0, "Overall entry limit for syncache");
&tcp_syncache.hashsize, 0, "Size of TCP syncache hashtable");
&tcp_syncache.rexmt_limit, 0, "Limit on SYN/ACK retransmissions");
((tcp_syncache.hash_secret ^ \
((tcp_syncache.hash_secret ^ \
syncache_percpu->hashbase = kmalloc(tcp_syncache.hashsize *
for (i = 0; i < tcp_syncache.hashsize; i++) {
tcp_syncache.hashsize = TCP_SYNCACHE_HASHSIZE;
tcp_syncache.bucket_limit = TCP_SYNCACHE_BUCKETLIMIT;
tcp_syncache.cache_limit =
tcp_syncache.hashsize * tcp_syncache.bucket_limit;
tcp_syncache.rexmt_limit = SYNCACHE_MAXREXMTS;
tcp_syncache.hash_secret = karc4random();
&tcp_syncache.hashsize);
&tcp_syncache.cache_limit);
&tcp_syncache.bucket_limit);
if (!powerof2(tcp_syncache.hashsize)) {
tcp_syncache.hashsize = 512; /* safe default */
tcp_syncache.hashmask = tcp_syncache.hashsize - 1;
if (sch->sch_length >= tcp_syncache.bucket_limit) {
} else if (syncache_percpu->cache_count >= tcp_syncache.cache_limit) {
for (i = 0; i < tcp_syncache.hashsize; i++) {
SYNCACHE_HASH6(&sc->sc_inc, tcp_syncache.hashmask)];
SYNCACHE_HASH(&sc->sc_inc, tcp_syncache.hashmask)];
slot >= tcp_syncache.rexmt_limit ||
SYNCACHE_HASH6(inc, tcp_syncache.hashmask)];
SYNCACHE_HASH(inc, tcp_syncache.hashmask)];