[Differential] D6120: tcp/syncache: Set flowid and hash type properly for SYN|ACK
sepherosa_gmail.com (Sepherosa Ziehau)
phabric-noreply at FreeBSD.org
Wed Apr 27 08:45:18 UTC 2016
sepherosa_gmail.com created this revision.
sepherosa_gmail.com added reviewers: network, adrian, rwatson, gnn, lstewart, glebius, delphij, mike-karels.net, jtl, hiren.
sepherosa_gmail.com added a subscriber: freebsd-net-list.
Herald added a reviewer: transport.
REVISION DETAIL
https://reviews.freebsd.org/D6120
AFFECTED FILES
sys/netinet/tcp_syncache.c
CHANGE DETAILS
diff --git a/sys/netinet/tcp_syncache.c b/sys/netinet/tcp_syncache.c
--- a/sys/netinet/tcp_syncache.c
+++ b/sys/netinet/tcp_syncache.c
@@ -127,7 +127,8 @@
static void syncache_drop(struct syncache *, struct syncache_head *);
static void syncache_free(struct syncache *);
static void syncache_insert(struct syncache *, struct syncache_head *);
-static int syncache_respond(struct syncache *, struct syncache_head *, int);
+static int syncache_respond(struct syncache *, struct syncache_head *, int,
+ const struct mbuf *);
static struct socket *syncache_socket(struct syncache *, struct socket *,
struct mbuf *m);
static void syncache_timeout(struct syncache *sc, struct syncache_head *sch,
@@ -457,7 +458,7 @@
free(s, M_TCPLOG);
}
- syncache_respond(sc, sch, 1);
+ syncache_respond(sc, sch, 1, NULL);
TCPSTAT_INC(tcps_sc_retransmitted);
syncache_timeout(sc, sch, 0);
}
@@ -1307,7 +1308,7 @@
s, __func__);
free(s, M_TCPLOG);
}
- if (syncache_respond(sc, sch, 1) == 0) {
+ if (syncache_respond(sc, sch, 1, m) == 0) {
sc->sc_rxmits = 0;
syncache_timeout(sc, sch, 1);
TCPSTAT_INC(tcps_sndacks);
@@ -1474,7 +1475,7 @@
/*
* Do a standard 3-way handshake.
*/
- if (syncache_respond(sc, sch, 0) == 0) {
+ if (syncache_respond(sc, sch, 0, m) == 0) {
if (V_tcp_syncookies && V_tcp_syncookiesonly && sc != &scs)
syncache_free(sc);
else if (sc != &scs)
@@ -1505,7 +1506,8 @@
}
static int
-syncache_respond(struct syncache *sc, struct syncache_head *sch, int locked)
+syncache_respond(struct syncache *sc, struct syncache_head *sch, int locked,
+ const struct mbuf *m0)
{
struct ip *ip = NULL;
struct mbuf *m;
@@ -1686,6 +1688,10 @@
M_SETFIB(m, sc->sc_inc.inc_fibnum);
m->m_pkthdr.csum_data = offsetof(struct tcphdr, th_sum);
+ if (m0 != NULL && M_HASHTYPE_GET(m0) != M_HASHTYPE_NONE) {
+ m->m_pkthdr.flowid = m0->m_pkthdr.flowid;
+ M_HASHTYPE_SET(m, M_HASHTYPE_GET(m0));
+ }
#ifdef INET6
if (sc->sc_inc.inc_flags & INC_ISIPV6) {
m->m_pkthdr.csum_flags = CSUM_TCP_IPV6;
EMAIL PREFERENCES
https://reviews.freebsd.org/settings/panel/emailpreferences/
To: sepherosa_gmail.com, network, transport, adrian, rwatson, gnn, lstewart, glebius, delphij, mike-karels.net, jtl, hiren
Cc: freebsd-net-list
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D6120.15647.patch
Type: text/x-patch
Size: 2074 bytes
Desc: not available
URL: <http://lists.freebsd.org/pipermail/freebsd-net/attachments/20160427/90b7e0ca/attachment.bin>
More information about the freebsd-net
mailing list