]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
rx-mtu-fixes-20061218
authorChas Williams <chas@cmf.nrl.navy.mil>
Tue, 19 Dec 2006 04:35:29 +0000 (04:35 +0000)
committerDerrick Brashear <shadow@dementia.org>
Tue, 19 Dec 2006 04:35:29 +0000 (04:35 +0000)
http://www.openafs.org/pipermail/openafs-devel/2006-November/014487.html

src/rx/rx.c
src/rx/rx_user.c

index 6694514375036e1e0b003de2e8c2552548fd47c2..155fdc98792b1828c4cd38ab17d8900c52a7bf3f 100644 (file)
@@ -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;
index 1ddd778b688e27eafacfdff25b1376b447d4c746..8131695917bdf23d1cb174791e6ab525ac3a8580 100644 (file)
@@ -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