svn commit: r324521 - stable/11/sys/netinet
Sepherosa Ziehau
sephe at FreeBSD.org
Wed Oct 11 06:46:40 UTC 2017
Author: sephe
Date: Wed Oct 11 06:46:39 2017
New Revision: 324521
URL: https://svnweb.freebsd.org/changeset/base/324521
Log:
MFC 324050
tcp: Don't "negotiate" MSS.
_NO_ OSes actually "negotiate" MSS.
RFC 879:
"... This Maximum Segment Size (MSS) announcement (often mistakenly
called a negotiation) ..."
This negotiation behaviour was introduced 11 years ago by r159955
without any explaination about why FreeBSD had to "negotiate" MSS:
In syncache_respond() do not reply with a MSS that is larger than what
the peer announced to us but make it at least tcp_minmss in size.
Sponsored by: TCP/IP Optimization Fundraise 2005
The tcp_minmss behaviour is still kept.
Syncookie fix was prodded by tuexen, who also helped to test this
patch w/ packetdrill.
Reviewed by: tuexen, karels, bz (previous version)
Sponsored by: Microsoft
Differential Revision: https://reviews.freebsd.org/D12430
Modified:
stable/11/sys/netinet/tcp_syncache.c
Directory Properties:
stable/11/ (props changed)
Modified: stable/11/sys/netinet/tcp_syncache.c
==============================================================================
--- stable/11/sys/netinet/tcp_syncache.c Wed Oct 11 06:28:46 2017 (r324520)
+++ stable/11/sys/netinet/tcp_syncache.c Wed Oct 11 06:46:39 2017 (r324521)
@@ -1612,9 +1612,7 @@ syncache_respond(struct syncache *sc, struct syncache_
tlen = hlen + sizeof(struct tcphdr);
/* Determine MSS we advertize to other end of connection. */
- mssopt = tcp_mssopt(&sc->sc_inc);
- if (sc->sc_peer_mss)
- mssopt = max( min(sc->sc_peer_mss, mssopt), V_tcp_minmss);
+ mssopt = max(tcp_mssopt(&sc->sc_inc), V_tcp_minmss);
/* XXX: Assume that the entire packet will fit in a header mbuf. */
KASSERT(max_linkhdr + tlen + TCP_MAXOLEN <= MHLEN,
@@ -1963,7 +1961,7 @@ syncookie_mac(struct in_conninfo *inc, tcp_seq irs, ui
static tcp_seq
syncookie_generate(struct syncache_head *sch, struct syncache *sc)
{
- u_int i, mss, secbit, wscale;
+ u_int i, secbit, wscale;
uint32_t iss, hash;
uint8_t *secbits;
union syncookie cookie;
@@ -1973,8 +1971,8 @@ syncookie_generate(struct syncache_head *sch, struct s
cookie.cookie = 0;
/* Map our computed MSS into the 3-bit index. */
- mss = min(tcp_mssopt(&sc->sc_inc), max(sc->sc_peer_mss, V_tcp_minmss));
- for (i = nitems(tcp_sc_msstab) - 1; tcp_sc_msstab[i] > mss && i > 0;
+ for (i = nitems(tcp_sc_msstab) - 1;
+ tcp_sc_msstab[i] > sc->sc_peer_mss && i > 0;
i--)
;
cookie.flags.mss_idx = i;
More information about the svn-src-stable-11
mailing list