Module Name: src
Committed By: maxv
Date: Thu Mar 29 08:11:41 UTC 2018
Modified Files:
src/sys/netinet: tcp_subr.c
Log Message:
Misc changes; no real functional change.
To generate a diff of this commit:
cvs rdiff -u -r1.274 -r1.275 src/sys/netinet/tcp_subr.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/netinet/tcp_subr.c
diff -u src/sys/netinet/tcp_subr.c:1.274 src/sys/netinet/tcp_subr.c:1.275
--- src/sys/netinet/tcp_subr.c:1.274 Thu Mar 29 07:46:43 2018
+++ src/sys/netinet/tcp_subr.c Thu Mar 29 08:11:41 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: tcp_subr.c,v 1.274 2018/03/29 07:46:43 maxv Exp $ */
+/* $NetBSD: tcp_subr.c,v 1.275 2018/03/29 08:11:41 maxv Exp $ */
/*
* Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
@@ -29,7 +29,7 @@
* SUCH DAMAGE.
*/
-/*-
+/*
* Copyright (c) 1997, 1998, 2000, 2001, 2008 The NetBSD Foundation, Inc.
* All rights reserved.
*
@@ -91,7 +91,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tcp_subr.c,v 1.274 2018/03/29 07:46:43 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tcp_subr.c,v 1.275 2018/03/29 08:11:41 maxv Exp $");
#ifdef _KERNEL_OPT
#include "opt_inet.h"
@@ -210,7 +210,7 @@ int tcp_msl_enable = 1; /* enable TIME_
int tcp_msl_loop = PR_SLOWHZ; /* MSL for loopback */
int tcp_msl_local = 5 * PR_SLOWHZ; /* MSL for 'local' */
int tcp_msl_remote = TCPTV_MSL; /* MSL otherwise */
-int tcp_msl_remote_threshold = TCPTV_SRTTDFLT; /* RTT threshold */
+int tcp_msl_remote_threshold = TCPTV_SRTTDFLT; /* RTT threshold */
int tcp_rttlocal = 0; /* Use RTT to decide who's 'local' */
int tcp4_vtw_enable = 0; /* 1 to enable */
@@ -488,17 +488,15 @@ tcp_template(struct tcpcb *tp)
return NULL; /*EINVAL*/
#endif
default:
- hlen = 0; /*pacify gcc*/
return NULL; /*EAFNOSUPPORT*/
}
-#ifdef DIAGNOSTIC
- if (hlen + sizeof(struct tcphdr) > MCLBYTES)
- panic("mclbytes too small for t_template");
-#endif
+
+ KASSERT(hlen + sizeof(struct tcphdr) <= MCLBYTES);
+
m = tp->t_template;
- if (m && m->m_len == hlen + sizeof(struct tcphdr))
+ if (m && m->m_len == hlen + sizeof(struct tcphdr)) {
;
- else {
+ } else {
if (m)
m_freem(m);
m = tp->t_template = NULL;
@@ -542,6 +540,7 @@ tcp_template(struct tcpcb *tp)
sizeof(ipov->ih_dst));
}
#endif
+
/*
* Compute the pseudo-header portion of the checksum
* now. We incrementally add in the TCP option and
@@ -587,6 +586,7 @@ tcp_template(struct tcpcb *tp)
}
#endif
}
+
if (inp) {
n->th_sport = inp->inp_lport;
n->th_dport = inp->inp_fport;
@@ -597,6 +597,7 @@ tcp_template(struct tcpcb *tp)
n->th_dport = in6p->in6p_fport;
}
#endif
+
n->th_seq = 0;
n->th_ack = 0;
n->th_x2 = 0;
@@ -604,7 +605,7 @@ tcp_template(struct tcpcb *tp)
n->th_flags = 0;
n->th_win = 0;
n->th_urp = 0;
- return (m);
+ return m;
}
/*
@@ -635,10 +636,8 @@ tcp_respond(struct tcpcb *tp, struct mbu
struct tcphdr *th;
if (tp != NULL && (flags & TH_RST) == 0) {
-#ifdef DIAGNOSTIC
- if (tp->t_inpcb && tp->t_in6pcb)
- panic("tcp_respond: both t_inpcb and t_in6pcb are set");
-#endif
+ KASSERT(!(tp->t_inpcb && tp->t_in6pcb));
+
if (tp->t_inpcb)
win = sbspace(&tp->t_inpcb->inp_socket->so_rcv);
#ifdef INET6
@@ -652,7 +651,7 @@ tcp_respond(struct tcpcb *tp, struct mbu
#ifdef INET6
ip6 = NULL;
#endif
- if (m == 0) {
+ if (m == NULL) {
if (!mtemplate)
return EINVAL;
@@ -682,7 +681,7 @@ tcp_respond(struct tcpcb *tp, struct mbu
}
}
if (m == NULL)
- return (ENOBUFS);
+ return ENOBUFS;
tlen = 0;
@@ -700,27 +699,14 @@ tcp_respond(struct tcpcb *tp, struct mbu
th = (struct tcphdr *)(ip6 + 1);
break;
#endif
-#if 0
- default:
- /* noone will visit here */
- m_freem(m);
- return EAFNOSUPPORT;
-#endif
}
flags = TH_ACK;
} else {
-
if ((m->m_flags & M_PKTHDR) == 0) {
-#if 0
- printf("non PKTHDR to tcp_respond\n");
-#endif
m_freem(m);
return EINVAL;
}
-#ifdef DIAGNOSTIC
- if (!th0)
- panic("th0 == NULL in tcp_respond");
-#endif
+ KASSERT(th0 != NULL);
/* get family information from m */
switch (mtod(m, struct ip *)->ip_v) {
@@ -756,12 +742,8 @@ tcp_respond(struct tcpcb *tp, struct mbu
} else {
struct mbuf *n;
-#ifdef DIAGNOSTIC
- if (max_linkhdr + hlen + tlen > MCLBYTES) {
- m_freem(m);
- return EMSGSIZE;
- }
-#endif
+ KASSERT(max_linkhdr + hlen + tlen <= MCLBYTES);
+
MGETHDR(n, M_DONTWAIT, MT_HEADER);
if (n && max_linkhdr + hlen + tlen > MHLEN) {
MCLGET(n, M_DONTWAIT);
@@ -804,12 +786,6 @@ tcp_respond(struct tcpcb *tp, struct mbu
ip6->ip6_nxt = IPPROTO_TCP;
break;
#endif
-#if 0
- default:
- /* noone will visit here */
- m_freem(m);
- return EAFNOSUPPORT;
-#endif
}
xchg(th->th_dport, th->th_sport, u_int16_t);
#undef xchg
@@ -826,8 +802,9 @@ tcp_respond(struct tcpcb *tp, struct mbu
th->th_win = htons((u_int16_t)win);
th->th_off = sizeof (struct tcphdr) >> 2;
tlen += sizeof(*th);
- } else
+ } else {
tlen += th->th_off << 2;
+ }
m->m_len = hlen + tlen;
m->m_pkthdr.len = hlen + tlen;
m_reset_rcvif(m);
@@ -852,7 +829,7 @@ tcp_respond(struct tcpcb *tp, struct mbu
{
th->th_sum = 0;
th->th_sum = in6_cksum(m, IPPROTO_TCP, sizeof(struct ip6_hdr),
- tlen);
+ tlen);
ip6->ip6_plen = htons(tlen);
if (tp && tp->t_in6pcb)
ip6->ip6_hlim = in6_selecthlim_rt(tp->t_in6pcb);
@@ -870,19 +847,13 @@ tcp_respond(struct tcpcb *tp, struct mbu
if (tp != NULL && tp->t_inpcb != NULL) {
ro = &tp->t_inpcb->inp_route;
-#ifdef DIAGNOSTIC
- if (family != AF_INET)
- panic("tcp_respond: address family mismatch");
- if (!in_hosteq(ip->ip_dst, tp->t_inpcb->inp_faddr)) {
- panic("tcp_respond: ip_dst %x != inp_faddr %x",
- ntohl(ip->ip_dst.s_addr),
- ntohl(tp->t_inpcb->inp_faddr.s_addr));
- }
-#endif
+ KASSERT(family == AF_INET);
+ KASSERT(in_hosteq(ip->ip_dst, tp->t_inpcb->inp_faddr));
}
#ifdef INET6
else if (tp != NULL && tp->t_in6pcb != NULL) {
ro = (struct route *)&tp->t_in6pcb->in6p_route;
+
#ifdef DIAGNOSTIC
if (family == AF_INET) {
if (!IN6_IS_ADDR_V4MAPPED(&tp->t_in6pcb->in6p_faddr))
@@ -921,7 +892,7 @@ tcp_respond(struct tcpcb *tp, struct mbu
break;
}
- return (error);
+ return error;
}
/*
@@ -1004,7 +975,7 @@ tcp_newtcpcb(int family, void *aux)
/* XXX Consider using a pool_cache for speed. */
tp = pool_get(&tcpcb_pool, PR_NOWAIT); /* splsoftnet via tcp_usrreq */
if (tp == NULL)
- return (NULL);
+ return NULL;
memcpy(tp, &tcpcb_template, sizeof(*tp));
TAILQ_INIT(&tp->segq);
TAILQ_INIT(&tp->timeq);
@@ -1050,7 +1021,7 @@ tcp_newtcpcb(int family, void *aux)
callout_destroy(&tp->t_timer[i]);
callout_destroy(&tp->t_delack_ch);
pool_put(&tcpcb_pool, tp); /* splsoftnet via tcp_usrreq */
- return (NULL);
+ return NULL;
}
/*
@@ -1065,10 +1036,10 @@ tcp_newtcpcb(int family, void *aux)
* timestamps.
*/
tp->ts_timebase = tcp_now - 1;
-
+
tcp_congctl_select(tp, tcp_congctl_global_name);
- return (tp);
+ return tp;
}
/*
@@ -1081,10 +1052,8 @@ tcp_drop(struct tcpcb *tp, int errno)
{
struct socket *so = NULL;
-#ifdef DIAGNOSTIC
- if (tp->t_inpcb && tp->t_in6pcb)
- panic("tcp_drop: both t_inpcb and t_in6pcb are set");
-#endif
+ KASSERT(!(tp->t_inpcb && tp->t_in6pcb));
+
if (tp->t_inpcb)
so = tp->t_inpcb->inp_socket;
#ifdef INET6
@@ -1218,7 +1187,7 @@ tcp_close(struct tcpcb *tp)
TCP_REASS_UNLOCK(tp);
/* free the SACK holes list. */
- tcp_free_sackholes(tp);
+ tcp_free_sackholes(tp);
tcp_congctl_release(tp);
syn_cache_cleanup(tp);
@@ -1433,7 +1402,7 @@ tcp6_ctlinput(int cmd, const struct sock
if ((unsigned)cmd >= PRC_NCMDS)
return NULL;
else if (cmd == PRC_QUENCH) {
- /*
+ /*
* Don't honor ICMP Source Quench messages meant for
* TCP connections.
*/
@@ -1551,7 +1520,7 @@ tcp_ctlinput(int cmd, const struct socka
return NULL;
errno = inetctlerrmap[cmd];
if (cmd == PRC_QUENCH)
- /*
+ /*
* Don't honor ICMP Source Quench messages meant for
* TCP connections.
*/
@@ -1572,7 +1541,7 @@ tcp_ctlinput(int cmd, const struct socka
in6_in_2_v4mapin6(&ip->ip_dst, &dst6);
#endif
if ((inp = in_pcblookup_connect(&tcbtable, ip->ip_dst,
- th->th_dport, ip->ip_src, th->th_sport, 0)) != NULL)
+ th->th_dport, ip->ip_src, th->th_sport, 0)) != NULL)
#ifdef INET6
in6p = NULL;
#else
@@ -1580,7 +1549,7 @@ tcp_ctlinput(int cmd, const struct socka
#endif
#ifdef INET6
else if ((in6p = in6_pcblookup_connect(&tcbtable, &dst6,
- th->th_dport, &src6, th->th_sport, 0, 0)) != NULL)
+ th->th_dport, &src6, th->th_sport, 0, 0)) != NULL)
;
#endif
else
@@ -1609,7 +1578,7 @@ tcp_ctlinput(int cmd, const struct socka
seq = ntohl(th->th_seq);
if (SEQ_LT(seq, tp->snd_una) || SEQ_GT(seq, tp->snd_max))
return NULL;
- /*
+ /*
* If the ICMP message advertises a Next-Hop MTU
* equal or larger than the maximum packet size we have
* ever sent, drop the message.
@@ -1618,7 +1587,7 @@ tcp_ctlinput(int cmd, const struct socka
if (mtu >= tp->t_pmtud_mtu_sent)
return NULL;
if (mtu >= tcp_hdrsz(tp) + tp->t_pmtud_mss_acked) {
- /*
+ /*
* Calculate new MTU, and create corresponding
* route (traditional PMTUD).
*/
@@ -1927,10 +1896,8 @@ tcp_mss_from_peer(struct tcpcb *tp, int
u_long bufsize;
int mss;
-#ifdef DIAGNOSTIC
- if (tp->t_inpcb && tp->t_in6pcb)
- panic("tcp_mss_from_peer: both t_inpcb and t_in6pcb are set");
-#endif
+ KASSERT(!(tp->t_inpcb && tp->t_in6pcb));
+
so = NULL;
rt = NULL;
@@ -2025,10 +1992,8 @@ tcp_established(struct tcpcb *tp)
#endif
u_long bufsize;
-#ifdef DIAGNOSTIC
- if (tp->t_inpcb && tp->t_in6pcb)
- panic("tcp_established: both t_inpcb and t_in6pcb are set");
-#endif
+ KASSERT(!(tp->t_inpcb && tp->t_in6pcb));
+
so = NULL;
rt = NULL;
@@ -2067,9 +2032,9 @@ tcp_established(struct tcpcb *tp)
#endif
if (__predict_true(tcp_msl_enable)) {
extern const struct in6_addr in6addr_loopback;
-
+
if (IN6_ARE_ADDR_EQUAL(&tp->t_in6pcb->in6p_laddr,
- &in6addr_loopback)) {
+ &in6addr_loopback)) {
tp->t_msl = tcp_msl_loop ? tcp_msl_loop : (TCPTV_MSL >> 2);
break;
}
@@ -2129,10 +2094,8 @@ tcp_rmx_rtt(struct tcpcb *tp)
struct rtentry *rt = NULL;
int rtt;
-#ifdef DIAGNOSTIC
- if (tp->t_inpcb && tp->t_in6pcb)
- panic("tcp_rmx_rtt: both t_inpcb and t_in6pcb are set");
-#endif
+ KASSERT(!(tp->t_inpcb && tp->t_in6pcb));
+
if (tp->t_inpcb)
rt = in_pcbrtentry(tp->t_inpcb);
#ifdef INET6
@@ -2198,8 +2161,8 @@ tcp_new_iss(struct tcpcb *tp, tcp_seq ad
addin));
}
#endif
- /* Not possible. */
- panic("tcp_new_iss");
+
+ panic("tcp_new_iss: unreachable");
}
static u_int8_t tcp_iss_secret[16]; /* 128 bits; should be plenty */
@@ -2379,7 +2342,7 @@ tcp_optlen(struct tcpcb *tp)
#ifdef TCP_SIGNATURE
if (tp->t_flags & TF_SIGNATURE)
optlen += TCPOLEN_SIGLEN;
-#endif /* TCP_SIGNATURE */
+#endif
return optlen;
}