From db8339c3c412c00bf62ff39f5092ace8b255ac5a Mon Sep 17 00:00:00 2001 From: Chas Williams Date: Tue, 19 Dec 2006 04:35:29 +0000 Subject: [PATCH] rx-mtu-fixes-20061218 http://www.openafs.org/pipermail/openafs-devel/2006-November/014487.html --- src/rx/rx.c | 6 +++--- src/rx/rx_user.c | 12 ++++++------ 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/rx/rx.c b/src/rx/rx.c index 669451437..155fdc987 100644 --- a/src/rx/rx.c +++ b/src/rx/rx.c @@ -3957,9 +3957,9 @@ rxi_ReceiveAckPacket(register struct rx_call *call, struct rx_packet *np, sizeof(afs_int32), &tSize); maxDgramPackets = (afs_uint32) ntohl(tSize); maxDgramPackets = MIN(maxDgramPackets, rxi_nDgramPackets); - maxDgramPackets = - MIN(maxDgramPackets, (int)(peer->ifDgramPackets)); - maxDgramPackets = MIN(maxDgramPackets, tSize); + maxDgramPackets = MIN(maxDgramPackets, peer->ifDgramPackets); + if (peer->natMTU < peer->ifMTU) + maxDgramPackets = MIN(maxDgramPackets, rxi_AdjustDgramPackets(1, peer->natMTU)); if (maxDgramPackets > 1) { peer->maxDgramPackets = maxDgramPackets; call->MTU = RX_JUMBOBUFFERSIZE + RX_HEADER_SIZE; diff --git a/src/rx/rx_user.c b/src/rx/rx_user.c index 1ddd778b6..813169591 100644 --- a/src/rx/rx_user.c +++ b/src/rx/rx_user.c @@ -613,11 +613,9 @@ void rxi_InitPeerParams(struct rx_peer *pp) { afs_uint32 ppaddr; - u_short rxmtu; + u_short rxmtu, maxmtu = 0; int ix; - - LOCK_IF_INIT; if (!Inited) { UNLOCK_IF_INIT; @@ -646,6 +644,8 @@ rxi_InitPeerParams(struct rx_peer *pp) LOCK_IF; for (ix = 0; ix < rxi_numNetAddrs; ++ix) { + if (maxmtu < myNetMTUs[ix]) + maxmtu = myNetMTUs[ix] - RX_IPUDP_SIZE; if ((rxi_NetAddrs[ix] & myNetMasks[ix]) == (ppaddr & myNetMasks[ix])) { #ifdef IFF_POINTOPOINT @@ -655,14 +655,14 @@ rxi_InitPeerParams(struct rx_peer *pp) rxmtu = myNetMTUs[ix] - RX_IPUDP_SIZE; if (rxmtu < RX_MIN_PACKET_SIZE) rxmtu = RX_MIN_PACKET_SIZE; - if (pp->ifMTU < rxmtu) - pp->ifMTU = MIN(rx_MyMaxSendSize, rxmtu); } } UNLOCK_IF; + if (rxmtu) + pp->ifMTU = MIN(rx_MyMaxSendSize, rxmtu); if (!pp->ifMTU) { /* not local */ pp->timeout.sec = 3; - pp->ifMTU = MIN(rx_MyMaxSendSize, RX_REMOTE_PACKET_SIZE); + pp->ifMTU = MIN(rx_MyMaxSendSize, maxmtu ? maxmtu : RX_REMOTE_PACKET_SIZE); } break; #ifdef AF_INET6 -- 2.39.5