mirror of
https://git.hardenedbsd.org/hardenedbsd/HardenedBSD.git
synced 2025-01-05 14:09:48 +01:00
cxgbe/tom: fix the MSS calculation for IPv6 connections handled by the TOE.
MFC after: 1 week
This commit is contained in:
parent
af80e5148c
commit
402873f32a
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=276574
@ -44,6 +44,7 @@ __FBSDID("$FreeBSD$");
|
|||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
#include <netinet/in_pcb.h>
|
#include <netinet/in_pcb.h>
|
||||||
#include <netinet/ip.h>
|
#include <netinet/ip.h>
|
||||||
|
#include <netinet/ip6.h>
|
||||||
#include <netinet/tcp_var.h>
|
#include <netinet/tcp_var.h>
|
||||||
#define TCPSTATES
|
#define TCPSTATES
|
||||||
#include <netinet/tcp_fsm.h>
|
#include <netinet/tcp_fsm.h>
|
||||||
@ -236,11 +237,20 @@ static void
|
|||||||
assign_rxopt(struct tcpcb *tp, unsigned int opt)
|
assign_rxopt(struct tcpcb *tp, unsigned int opt)
|
||||||
{
|
{
|
||||||
struct toepcb *toep = tp->t_toe;
|
struct toepcb *toep = tp->t_toe;
|
||||||
|
struct inpcb *inp = tp->t_inpcb;
|
||||||
struct adapter *sc = td_adapter(toep->td);
|
struct adapter *sc = td_adapter(toep->td);
|
||||||
|
int n;
|
||||||
|
|
||||||
INP_LOCK_ASSERT(tp->t_inpcb);
|
INP_LOCK_ASSERT(inp);
|
||||||
|
|
||||||
tp->t_maxseg = tp->t_maxopd = sc->params.mtus[G_TCPOPT_MSS(opt)] - 40;
|
if (inp->inp_inc.inc_flags & INC_ISIPV6)
|
||||||
|
n = sizeof(struct ip6_hdr) + sizeof(struct tcphdr);
|
||||||
|
else
|
||||||
|
n = sizeof(struct ip) + sizeof(struct tcphdr);
|
||||||
|
tp->t_maxseg = tp->t_maxopd = sc->params.mtus[G_TCPOPT_MSS(opt)] - n;
|
||||||
|
|
||||||
|
CTR4(KTR_CXGBE, "%s: tid %d, mtu_idx %u (%u)", __func__, toep->tid,
|
||||||
|
G_TCPOPT_MSS(opt), sc->params.mtus[G_TCPOPT_MSS(opt)]);
|
||||||
|
|
||||||
if (G_TCPOPT_TSTAMP(opt)) {
|
if (G_TCPOPT_TSTAMP(opt)) {
|
||||||
tp->t_flags |= TF_RCVD_TSTMP; /* timestamps ok */
|
tp->t_flags |= TF_RCVD_TSTMP; /* timestamps ok */
|
||||||
|
Loading…
Reference in New Issue
Block a user