Update the path mtu when turning on/off UDP encapsulation for SCTP.
MFC after: 3 days
This commit is contained in:
parent
0edc8cc831
commit
3cf729a920
@ -5684,11 +5684,18 @@ sctp_common_input_processing(struct mbuf **mm, int iphlen, int offset, int lengt
|
||||
stcb = sctp_findassociation_addr(m, offset, src, dst,
|
||||
sh, ch, &inp, &net, vrf_id);
|
||||
#if defined(INET) || defined(INET6)
|
||||
if ((net != NULL) &&
|
||||
(ch->chunk_type != SCTP_INITIATION) &&
|
||||
(port != 0)) {
|
||||
if ((ch->chunk_type != SCTP_INITIATION) &&
|
||||
(net != NULL) && (net->port != port)) {
|
||||
if (net->port == 0) {
|
||||
sctp_pathmtu_adjustment(stcb, net->mtu - sizeof(struct udphdr));
|
||||
/* UDP encapsulation turned on. */
|
||||
net->mtu -= sizeof(struct udphdr);
|
||||
if (stcb->asoc.smallest_mtu > net->mtu) {
|
||||
sctp_pathmtu_adjustment(stcb, net->mtu);
|
||||
}
|
||||
} else if (port == 0) {
|
||||
/* UDP encapsulation turned off. */
|
||||
net->mtu += sizeof(struct udphdr);
|
||||
/* XXX Update smallest_mtu */
|
||||
}
|
||||
net->port = port;
|
||||
}
|
||||
@ -5717,11 +5724,18 @@ sctp_common_input_processing(struct mbuf **mm, int iphlen, int offset, int lengt
|
||||
stcb = sctp_findassociation_addr(m, offset, src, dst,
|
||||
sh, ch, &inp, &net, vrf_id);
|
||||
#if defined(INET) || defined(INET6)
|
||||
if ((net != NULL) &&
|
||||
(ch->chunk_type != SCTP_INITIATION) &&
|
||||
(port != 0)) {
|
||||
if ((ch->chunk_type != SCTP_INITIATION) &&
|
||||
(net != NULL) && (net->port != port)) {
|
||||
if (net->port == 0) {
|
||||
sctp_pathmtu_adjustment(stcb, net->mtu - sizeof(struct udphdr));
|
||||
/* UDP encapsulation turned on. */
|
||||
net->mtu -= sizeof(struct udphdr);
|
||||
if (stcb->asoc.smallest_mtu > net->mtu) {
|
||||
sctp_pathmtu_adjustment(stcb, net->mtu);
|
||||
}
|
||||
} else if (port == 0) {
|
||||
/* UDP encapsulation turned off. */
|
||||
net->mtu += sizeof(struct udphdr);
|
||||
/* XXX Update smallest_mtu */
|
||||
}
|
||||
net->port = port;
|
||||
}
|
||||
@ -5831,11 +5845,18 @@ sctp_common_input_processing(struct mbuf **mm, int iphlen, int offset, int lengt
|
||||
*/
|
||||
inp = stcb->sctp_ep;
|
||||
#if defined(INET) || defined(INET6)
|
||||
if ((net != NULL) &&
|
||||
(ch->chunk_type != SCTP_INITIATION) &&
|
||||
(port != 0)) {
|
||||
if ((ch->chunk_type != SCTP_INITIATION) &&
|
||||
(net != NULL) && (net->port != port)) {
|
||||
if (net->port == 0) {
|
||||
sctp_pathmtu_adjustment(stcb, net->mtu - sizeof(struct udphdr));
|
||||
/* UDP encapsulation turned on. */
|
||||
net->mtu -= sizeof(struct udphdr);
|
||||
if (stcb->asoc.smallest_mtu > net->mtu) {
|
||||
sctp_pathmtu_adjustment(stcb, net->mtu);
|
||||
}
|
||||
} else if (port == 0) {
|
||||
/* UDP encapsulation turned off. */
|
||||
net->mtu += sizeof(struct udphdr);
|
||||
/* XXX Update smallest_mtu */
|
||||
}
|
||||
net->port = port;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user