зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1613765 - Cherry pick upstream sctp revision 0d166e; r=ng
Depends on D62071 Differential Revision: https://phabricator.services.mozilla.com/D62072 --HG-- extra : moz-landing-system : lando
This commit is contained in:
Родитель
397f865671
Коммит
d7acfc2b3b
|
@ -1,3 +1,4 @@
|
||||||
|
|
||||||
/*-
|
/*-
|
||||||
* SPDX-License-Identifier: BSD-3-Clause
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
*
|
*
|
||||||
|
@ -34,7 +35,7 @@
|
||||||
|
|
||||||
#ifdef __FreeBSD__
|
#ifdef __FreeBSD__
|
||||||
#include <sys/cdefs.h>
|
#include <sys/cdefs.h>
|
||||||
__FBSDID("$FreeBSD: head/sys/netinet/sctp.h 323657 2017-09-16 21:26:06Z tuexen $");
|
__FBSDID("$FreeBSD: head/sys/netinet/sctp.h 356270 2020-01-02 13:55:10Z tuexen $");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef _NETINET_SCTP_H_
|
#ifndef _NETINET_SCTP_H_
|
||||||
|
@ -607,7 +608,10 @@ struct sctp_error_auth_invalid_hmac {
|
||||||
#define SCTP_MOBILITY_PRIM_DELETED 0x00000004
|
#define SCTP_MOBILITY_PRIM_DELETED 0x00000004
|
||||||
|
|
||||||
|
|
||||||
#define SCTP_SMALLEST_PMTU 512 /* smallest pmtu allowed when disabling PMTU discovery */
|
/* Smallest PMTU allowed when disabling PMTU discovery */
|
||||||
|
#define SCTP_SMALLEST_PMTU 512
|
||||||
|
/* Largest PMTU allowed when disabling PMTU discovery */
|
||||||
|
#define SCTP_LARGEST_PMTU 65536
|
||||||
|
|
||||||
#if defined(__Userspace_os_Windows)
|
#if defined(__Userspace_os_Windows)
|
||||||
#pragma pack(pop)
|
#pragma pack(pop)
|
||||||
|
|
|
@ -34,7 +34,7 @@
|
||||||
|
|
||||||
#ifdef __FreeBSD__
|
#ifdef __FreeBSD__
|
||||||
#include <sys/cdefs.h>
|
#include <sys/cdefs.h>
|
||||||
__FBSDID("$FreeBSD: head/sys/netinet/sctp_usrreq.c 345525 2019-03-26 08:27:00Z tuexen $");
|
__FBSDID("$FreeBSD: head/sys/netinet/sctp_usrreq.c 356270 2020-01-02 13:55:10Z tuexen $");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <netinet/sctp_os.h>
|
#include <netinet/sctp_os.h>
|
||||||
|
@ -6113,6 +6113,14 @@ sctp_setopt(struct socket *so, int optname, void *optval, size_t optsize,
|
||||||
SCTP_LTRACE_ERR_RET(inp, NULL, NULL, SCTP_FROM_SCTP_USRREQ, EINVAL);
|
SCTP_LTRACE_ERR_RET(inp, NULL, NULL, SCTP_FROM_SCTP_USRREQ, EINVAL);
|
||||||
return (EINVAL);
|
return (EINVAL);
|
||||||
}
|
}
|
||||||
|
if ((paddrp->spp_flags & SPP_PMTUD_DISABLE) &&
|
||||||
|
((paddrp->spp_pathmtu < SCTP_SMALLEST_PMTU) ||
|
||||||
|
(paddrp->spp_pathmtu > SCTP_LARGEST_PMTU))) {
|
||||||
|
if (stcb)
|
||||||
|
SCTP_TCB_UNLOCK(stcb);
|
||||||
|
SCTP_LTRACE_ERR_RET(inp, NULL, NULL, SCTP_FROM_SCTP_USRREQ, EINVAL);
|
||||||
|
return (EINVAL);
|
||||||
|
}
|
||||||
|
|
||||||
if (stcb != NULL) {
|
if (stcb != NULL) {
|
||||||
/************************TCB SPECIFIC SET ******************/
|
/************************TCB SPECIFIC SET ******************/
|
||||||
|
@ -6143,7 +6151,7 @@ sctp_setopt(struct socket *so, int optname, void *optval, size_t optsize,
|
||||||
sctp_chunk_output(inp, stcb, SCTP_OUTPUT_FROM_SOCKOPT, SCTP_SO_LOCKED);
|
sctp_chunk_output(inp, stcb, SCTP_OUTPUT_FROM_SOCKOPT, SCTP_SO_LOCKED);
|
||||||
sctp_timer_start(SCTP_TIMER_TYPE_HEARTBEAT, inp, stcb, net);
|
sctp_timer_start(SCTP_TIMER_TYPE_HEARTBEAT, inp, stcb, net);
|
||||||
}
|
}
|
||||||
if ((paddrp->spp_flags & SPP_PMTUD_DISABLE) && (paddrp->spp_pathmtu >= SCTP_SMALLEST_PMTU)) {
|
if (paddrp->spp_flags & SPP_PMTUD_DISABLE) {
|
||||||
if (SCTP_OS_TIMER_PENDING(&net->pmtu_timer.timer)) {
|
if (SCTP_OS_TIMER_PENDING(&net->pmtu_timer.timer)) {
|
||||||
sctp_timer_stop(SCTP_TIMER_TYPE_PATHMTURAISE, inp, stcb, net,
|
sctp_timer_stop(SCTP_TIMER_TYPE_PATHMTURAISE, inp, stcb, net,
|
||||||
SCTP_FROM_SCTP_USRREQ + SCTP_LOC_11);
|
SCTP_FROM_SCTP_USRREQ + SCTP_LOC_11);
|
||||||
|
@ -6290,7 +6298,7 @@ sctp_setopt(struct socket *so, int optname, void *optval, size_t optsize,
|
||||||
}
|
}
|
||||||
sctp_stcb_feature_on(inp, stcb, SCTP_PCB_FLAGS_DONOT_HEARTBEAT);
|
sctp_stcb_feature_on(inp, stcb, SCTP_PCB_FLAGS_DONOT_HEARTBEAT);
|
||||||
}
|
}
|
||||||
if ((paddrp->spp_flags & SPP_PMTUD_DISABLE) && (paddrp->spp_pathmtu >= SCTP_SMALLEST_PMTU)) {
|
if (paddrp->spp_flags & SPP_PMTUD_DISABLE) {
|
||||||
TAILQ_FOREACH(net, &stcb->asoc.nets, sctp_next) {
|
TAILQ_FOREACH(net, &stcb->asoc.nets, sctp_next) {
|
||||||
if (SCTP_OS_TIMER_PENDING(&net->pmtu_timer.timer)) {
|
if (SCTP_OS_TIMER_PENDING(&net->pmtu_timer.timer)) {
|
||||||
sctp_timer_stop(SCTP_TIMER_TYPE_PATHMTURAISE, inp, stcb, net,
|
sctp_timer_stop(SCTP_TIMER_TYPE_PATHMTURAISE, inp, stcb, net,
|
||||||
|
@ -6392,9 +6400,7 @@ sctp_setopt(struct socket *so, int optname, void *optval, size_t optsize,
|
||||||
inp->sctp_ep.default_mtu = 0;
|
inp->sctp_ep.default_mtu = 0;
|
||||||
sctp_feature_off(inp, SCTP_PCB_FLAGS_DO_NOT_PMTUD);
|
sctp_feature_off(inp, SCTP_PCB_FLAGS_DO_NOT_PMTUD);
|
||||||
} else if (paddrp->spp_flags & SPP_PMTUD_DISABLE) {
|
} else if (paddrp->spp_flags & SPP_PMTUD_DISABLE) {
|
||||||
if (paddrp->spp_pathmtu >= SCTP_SMALLEST_PMTU) {
|
inp->sctp_ep.default_mtu = paddrp->spp_pathmtu;
|
||||||
inp->sctp_ep.default_mtu = paddrp->spp_pathmtu;
|
|
||||||
}
|
|
||||||
sctp_feature_on(inp, SCTP_PCB_FLAGS_DO_NOT_PMTUD);
|
sctp_feature_on(inp, SCTP_PCB_FLAGS_DO_NOT_PMTUD);
|
||||||
}
|
}
|
||||||
if (paddrp->spp_flags & SPP_DSCP) {
|
if (paddrp->spp_flags & SPP_DSCP) {
|
||||||
|
|
Загрузка…
Ссылка в новой задаче