diff options
author | adrian <adrian@FreeBSD.org> | 2014-09-09 00:19:02 +0000 |
---|---|---|
committer | adrian <adrian@FreeBSD.org> | 2014-09-09 00:19:02 +0000 |
commit | aab402c146b80d8b48db0272ba9cbab2988b4377 (patch) | |
tree | 7aba7a7a4e6378e8eac798450a1c25ad5af7ae98 | |
parent | 9e256816098c0a563ba7699913d93ec66f08d422 (diff) | |
download | FreeBSD-src-aab402c146b80d8b48db0272ba9cbab2988b4377.zip FreeBSD-src-aab402c146b80d8b48db0272ba9cbab2988b4377.tar.gz |
Add a flag to ip_output() - IP_NODEFAULTFLOWID - which prevents it from
overriding an existing flowid/flowtype field in the outbound mbuf with
the inp_flowid/inp_flowtype details.
The upcoming RSS UDP support calculates a valid RSS value for outbound
mbufs and since it may change per send, it doesn't cache it in the inpcb.
So overriding it here would be wrong.
Differential Revision: https://reviews.freebsd.org/D527
Reviewed by: grehan
-rw-r--r-- | sys/netinet/ip_output.c | 3 | ||||
-rw-r--r-- | sys/netinet/ip_var.h | 1 |
2 files changed, 3 insertions, 1 deletions
diff --git a/sys/netinet/ip_output.c b/sys/netinet/ip_output.c index 8503b2f..99d3886 100644 --- a/sys/netinet/ip_output.c +++ b/sys/netinet/ip_output.c @@ -145,7 +145,8 @@ ip_output(struct mbuf *m, struct mbuf *opt, struct route *ro, int flags, if (inp != NULL) { INP_LOCK_ASSERT(inp); M_SETFIB(m, inp->inp_inc.inc_fibnum); - if (inp->inp_flags & (INP_HW_FLOWID|INP_SW_FLOWID)) { + if (((flags & IP_NODEFAULTFLOWID) == 0) && + inp->inp_flags & (INP_HW_FLOWID|INP_SW_FLOWID)) { m->m_pkthdr.flowid = inp->inp_flowid; M_HASHTYPE_SET(m, inp->inp_flowtype); m->m_flags |= M_FLOWID; diff --git a/sys/netinet/ip_var.h b/sys/netinet/ip_var.h index c2ab8b4..9f44101 100644 --- a/sys/netinet/ip_var.h +++ b/sys/netinet/ip_var.h @@ -161,6 +161,7 @@ void kmod_ipstat_dec(int statnum); #define IP_SENDTOIF 0x8 /* send on specific ifnet */ #define IP_ROUTETOIF SO_DONTROUTE /* 0x10 bypass routing tables */ #define IP_ALLOWBROADCAST SO_BROADCAST /* 0x20 can send broadcast packets */ +#define IP_NODEFAULTFLOWID 0x40 /* Don't set the flowid from inp */ #ifdef __NO_STRICT_ALIGNMENT #define IP_HDR_ALIGNED_P(ip) 1 |