rx: Remove surplus call to FindPeer
[openafs.git] / src / rx / rx.c
index 14d5186..ca563f7 100644 (file)
@@ -80,6 +80,7 @@ extern afs_int32 afs_termState;
 #include "rx_stats.h"
 #include "rx_event.h"
 
+#include "rx_peer.h"
 #include "rx_conn.h"
 #include "rx_call.h"
 #include "rx_packet.h"
@@ -113,9 +114,45 @@ static void rxi_SendDelayedConnAbort(struct rxevent *event, void *arg1,
                                     void *unused, int unused2);
 static void rxi_ReapConnections(struct rxevent *unused, void *unused1,
                                void *unused2, int unused3);
+static struct rx_packet *rxi_SendCallAbort(struct rx_call *call,
+                                          struct rx_packet *packet,
+                                          int istack, int force);
+static void rxi_AckAll(struct rx_call *call);
+static struct rx_connection
+       *rxi_FindConnection(osi_socket socket, afs_uint32 host, u_short port,
+                           u_short serviceId, afs_uint32 cid,
+                           afs_uint32 epoch, int type, u_int securityIndex);
+static struct rx_packet
+       *rxi_ReceiveDataPacket(struct rx_call *call, struct rx_packet *np,
+                              int istack, osi_socket socket,
+                              afs_uint32 host, u_short port, int *tnop,
+                              struct rx_call **newcallp);
+static struct rx_packet
+       *rxi_ReceiveAckPacket(struct rx_call *call, struct rx_packet *np,
+                             int istack);
+static struct rx_packet
+       *rxi_ReceiveResponsePacket(struct rx_connection *conn,
+                                  struct rx_packet *np, int istack);
+static struct rx_packet
+       *rxi_ReceiveChallengePacket(struct rx_connection *conn,
+                                   struct rx_packet *np, int istack);
+static void rxi_AttachServerProc(struct rx_call *call, osi_socket socket,
+                                int *tnop, struct rx_call **newcallp);
+static void rxi_ClearTransmitQueue(struct rx_call *call, int force);
+static void rxi_ClearReceiveQueue(struct rx_call *call);
+static void rxi_ResetCall(struct rx_call *call, int newcall);
+static void rxi_ScheduleKeepAliveEvent(struct rx_call *call);
+static void rxi_ScheduleNatKeepAliveEvent(struct rx_connection *conn);
+static void rxi_ScheduleGrowMTUEvent(struct rx_call *call, int secs);
+static void rxi_KeepAliveOn(struct rx_call *call);
+static void rxi_GrowMTUOn(struct rx_call *call);
+static void rxi_ChallengeOn(struct rx_connection *conn);
 
 #ifdef RX_ENABLE_LOCKS
+static int rxi_CheckCall(struct rx_call *call, int haveCTLock);
 static void rxi_SetAcksInTransmitQueue(struct rx_call *call);
+#else
+static int rxi_CheckCall(struct rx_call *call);
 #endif
 
 #ifdef AFS_GLOBAL_RXLOCK_KERNEL
@@ -1262,7 +1299,7 @@ rxi_DestroyConnectionNoLock(struct rx_connection *conn)
                        || call->state == RX_STATE_ACTIVE) {
                        rxi_SendAck(call, 0, 0, RX_ACK_DELAY, 0);
                    } else {
-                       rxi_AckAll(NULL, call, 0);
+                       rxi_AckAll(call);
                    }
                }
                MUTEX_EXIT(&call->lock);
@@ -1495,7 +1532,6 @@ rx_NewCall(struct rx_connection *conn)
                          * effect on overall system performance.
                          */
                         call->state = RX_STATE_RESET;
-                        CALL_HOLD(call, RX_CALL_REFCOUNT_BEGIN);
                         (*call->callNumber)++;
                         MUTEX_EXIT(&conn->conn_call_lock);
                         CALL_HOLD(call, RX_CALL_REFCOUNT_BEGIN);
@@ -2897,7 +2933,6 @@ rxi_FindPeer(afs_uint32 host, u_short port,
            pp->host = host;    /* set here or in InitPeerParams is zero */
            pp->port = port;
            MUTEX_INIT(&pp->peer_lock, "peer_lock", MUTEX_DEFAULT, 0);
-           queue_Init(&pp->congestionQueue);
            queue_Init(&pp->rpcStats);
            pp->next = rx_peerHashTable[hashIndex];
            rx_peerHashTable[hashIndex] = pp;
@@ -2928,7 +2963,7 @@ rxi_FindPeer(afs_uint32 host, u_short port,
  * parameter must match the existing index for the connection.  If a
  * server connection is created, it will be created using the supplied
  * index, if the index is valid for this service */
-struct rx_connection *
+static struct rx_connection *
 rxi_FindConnection(osi_socket socket, afs_uint32 host,
                   u_short port, u_short serviceId, afs_uint32 cid,
                   afs_uint32 epoch, int type, u_int securityIndex)
@@ -2992,8 +3027,6 @@ rxi_FindConnection(osi_socket socket, afs_uint32 host,
        conn->lastSendTime = clock_Sec();       /* don't GC immediately */
        conn->epoch = epoch;
        conn->cid = cid & RX_CIDMASK;
-       /* conn->serial = conn->lastSerial = 0; */
-       /* conn->timeout = 0; */
        conn->ackRate = RX_FAST_ACK_RATE;
        conn->service = service;
        conn->serviceId = serviceId;
@@ -3134,7 +3167,6 @@ rxi_ReceivePacket(struct rx_packet *np, osi_socket socket,
     int channel;
     afs_uint32 currentCallNumber;
     int type;
-    int skew;
 #ifdef RXDEBUG
     char *packetType;
 #endif
@@ -3153,6 +3185,26 @@ rxi_ReceivePacket(struct rx_packet *np, osi_socket socket,
         np->header.seq, np->header.flags, np));
 #endif
 
+    /* Account for connectionless packets */
+    if (rx_stats_active &&
+       ((np->header.type == RX_PACKET_TYPE_VERSION) ||
+         (np->header.type == RX_PACKET_TYPE_DEBUG))) {
+       struct rx_peer *peer;
+
+       /* Try to look up the peer structure, but don't create one */
+       peer = rxi_FindPeer(host, port, 0, 0);
+
+       /* Since this may not be associated with a connection, it may have
+        * no refCount, meaning we could race with ReapConnections
+        */
+
+       if (peer && (peer->refCount > 0)) {
+           MUTEX_ENTER(&peer->peer_lock);
+           hadd32(peer->bytesReceived, np->length);
+           MUTEX_EXIT(&peer->peer_lock);
+       }
+    }
+
     if (np->header.type == RX_PACKET_TYPE_VERSION) {
        return rxi_ReceiveVersionPacket(np, socket, host, port, 1);
     }
@@ -3199,6 +3251,13 @@ rxi_ReceivePacket(struct rx_packet *np, osi_socket socket,
        return np;
     }
 
+    /* If we're doing statistics, then account for the incoming packet */
+    if (rx_stats_active) {
+       MUTEX_ENTER(&conn->peer->peer_lock);
+       hadd32(conn->peer->bytesReceived, np->length);
+       MUTEX_EXIT(&conn->peer->peer_lock);
+    }
+
     /* If the connection is in an error state, send an abort packet and ignore
      * the incoming packet */
     if (conn->error) {
@@ -3302,6 +3361,7 @@ rxi_ReceivePacket(struct rx_packet *np, osi_socket socket,
          * then, since this is a client connection we're getting data for
          * it must be for the previous call.
          */
+        MUTEX_EXIT(&conn->conn_call_lock);
         if (rx_stats_active)
             rx_atomic_inc(&rx_stats.spuriousPacketsRead);
        putConnection(conn);
@@ -3473,31 +3533,6 @@ rxi_ReceivePacket(struct rx_packet *np, osi_socket socket,
     /* Set remote user defined status from packet */
     call->remoteStatus = np->header.userStatus;
 
-    /* Note the gap between the expected next packet and the actual
-     * packet that arrived, when the new packet has a smaller serial number
-     * than expected.  Rioses frequently reorder packets all by themselves,
-     * so this will be quite important with very large window sizes.
-     * Skew is checked against 0 here to avoid any dependence on the type of
-     * inPacketSkew (which may be unsigned).  In C, -1 > (unsigned) 0 is always
-     * true!
-     * The inPacketSkew should be a smoothed running value, not just a maximum.  MTUXXX
-     * see CalculateRoundTripTime for an example of how to keep smoothed values.
-     * I think using a beta of 1/8 is probably appropriate.  93.04.21
-     */
-    MUTEX_ENTER(&conn->conn_data_lock);
-    skew = conn->lastSerial - np->header.serial;
-    conn->lastSerial = np->header.serial;
-    MUTEX_EXIT(&conn->conn_data_lock);
-    if (skew > 0) {
-       struct rx_peer *peer;
-       peer = conn->peer;
-       if (skew > peer->inPacketSkew) {
-           dpf(("*** In skew changed from %d to %d\n",
-                  peer->inPacketSkew, skew));
-           peer->inPacketSkew = skew;
-       }
-    }
-
     /* Now do packet type-specific processing */
     switch (np->header.type) {
     case RX_PACKET_TYPE_DATA:
@@ -3788,7 +3823,7 @@ TryAttach(struct rx_call *acall, osi_socket socket,
  * appropriate to the call (the call is in the right state, etc.).  This
  * routine can return a packet to the caller, for re-use */
 
-struct rx_packet *
+static struct rx_packet *
 rxi_ReceiveDataPacket(struct rx_call *call,
                      struct rx_packet *np, int istack,
                      osi_socket socket, afs_uint32 host, u_short port,
@@ -4181,7 +4216,7 @@ rx_ack_reason(int reason)
 
 
 /* The real smarts of the whole thing.  */
-struct rx_packet *
+static struct rx_packet *
 rxi_ReceiveAckPacket(struct rx_call *call, struct rx_packet *np,
                     int istack)
 {
@@ -4195,8 +4230,6 @@ rxi_ReceiveAckPacket(struct rx_call *call, struct rx_packet *np,
     afs_uint32 first;
     afs_uint32 prev;
     afs_uint32 serial;
-    /* because there are CM's that are bogus, sending weird values for this. */
-    afs_uint32 skew = 0;
     int nbytes;
     int missing;
     int acked;
@@ -4218,8 +4251,6 @@ rxi_ReceiveAckPacket(struct rx_call *call, struct rx_packet *np,
     first = ntohl(ap->firstPacket);
     prev = ntohl(ap->previousPacket);
     serial = ntohl(ap->serial);
-    /* temporarily disabled -- needs to degrade over time
-     * skew = ntohs(ap->maxSkew); */
 
     /* Ignore ack packets received out of order */
     if (first < call->tfirst ||
@@ -4267,11 +4298,11 @@ rxi_ReceiveAckPacket(struct rx_call *call, struct rx_packet *np,
        size_t len;
 
        len = _snprintf(msg, sizeof(msg),
-                       "tid[%d] RACK: reason %s serial %u previous %u seq %u skew %d first %u acks %u space %u ",
+                       "tid[%d] RACK: reason %s serial %u previous %u seq %u first %u acks %u space %u ",
                         GetCurrentThreadId(), rx_ack_reason(ap->reason),
                         ntohl(ap->serial), ntohl(ap->previousPacket),
-                        (unsigned int)np->header.seq, (unsigned int)skew,
-                        ntohl(ap->firstPacket), ap->nAcks, ntohs(ap->bufferSpace) );
+                        (unsigned int)np->header.seq, ntohl(ap->firstPacket),
+                        ap->nAcks, ntohs(ap->bufferSpace) );
        if (nAcks) {
            int offset;
 
@@ -4285,10 +4316,10 @@ rxi_ReceiveAckPacket(struct rx_call *call, struct rx_packet *np,
 #else /* AFS_NT40_ENV */
     if (rx_Log) {
        fprintf(rx_Log,
-               "RACK: reason %x previous %u seq %u serial %u skew %d first %u",
+               "RACK: reason %x previous %u seq %u serial %u first %u",
                ap->reason, ntohl(ap->previousPacket),
                (unsigned int)np->header.seq, (unsigned int)serial,
-               (unsigned int)skew, ntohl(ap->firstPacket));
+               ntohl(ap->firstPacket));
        if (nAcks) {
            int offset;
            for (offset = 0; offset < nAcks; offset++)
@@ -4319,13 +4350,6 @@ rxi_ReceiveAckPacket(struct rx_call *call, struct rx_packet *np,
        }
     }
 
-    /* Update the outgoing packet skew value to the latest value of
-     * the peer's incoming packet skew value.  The ack packet, of
-     * course, could arrive out of order, but that won't affect things
-     * much */
-    peer->outPacketSkew = skew;
-
-
     clock_GetTime(&now);
 
     /* The transmit queue splits into 4 sections.
@@ -4686,7 +4710,7 @@ rxi_ReceiveAckPacket(struct rx_call *call, struct rx_packet *np,
 }
 
 /* Received a response to a challenge packet */
-struct rx_packet *
+static struct rx_packet *
 rxi_ReceiveResponsePacket(struct rx_connection *conn,
                          struct rx_packet *np, int istack)
 {
@@ -4743,7 +4767,7 @@ rxi_ReceiveResponsePacket(struct rx_connection *conn,
  * back to the server.  The server is responsible for retrying the
  * challenge if it fails to get a response. */
 
-struct rx_packet *
+static struct rx_packet *
 rxi_ReceiveChallengePacket(struct rx_connection *conn,
                           struct rx_packet *np, int istack)
 {
@@ -4781,7 +4805,7 @@ rxi_ReceiveChallengePacket(struct rx_connection *conn,
 /* Find an available server process to service the current request in
  * the given call structure.  If one isn't available, queue up this
  * call so it eventually gets one */
-void
+static void
 rxi_AttachServerProc(struct rx_call *call,
                     osi_socket socket, int *tnop,
                     struct rx_call **newcallp)
@@ -4835,10 +4859,9 @@ rxi_AttachServerProc(struct rx_call *call,
        if (call->flags & RX_CALL_WAIT_PROC) {
            /* Conservative:  I don't think this should happen */
            call->flags &= ~RX_CALL_WAIT_PROC;
+           rx_atomic_dec(&rx_nWaiting);
            if (queue_IsOnQueue(call)) {
                queue_Remove(call);
-
-               rx_atomic_dec(&rx_nWaiting);
            }
        }
        call->state = RX_STATE_ACTIVE;
@@ -4879,33 +4902,15 @@ rxi_AttachServerProc(struct rx_call *call,
  * a new call is being prepared (in the case of a client) or a reply
  * is being prepared (in the case of a server).  Rather than sending
  * an ack packet, an ACKALL packet is sent. */
-void
-rxi_AckAll(struct rxevent *event, struct rx_call *call, char *dummy)
+static void
+rxi_AckAll(struct rx_call *call)
 {
-#ifdef RX_ENABLE_LOCKS
-    if (event) {
-       MUTEX_ENTER(&call->lock);
-       rxevent_Put(call->delayedAckEvent);
-       call->delayedAckEvent = NULL;
-       CALL_RELE(call, RX_CALL_REFCOUNT_ACKALL);
-    }
-    rxi_SendSpecial(call, call->conn, (struct rx_packet *)0,
-                   RX_PACKET_TYPE_ACKALL, NULL, 0, 0);
-    call->flags |= RX_CALL_ACKALL_SENT;
-    if (event)
-       MUTEX_EXIT(&call->lock);
-#else /* RX_ENABLE_LOCKS */
-    if (event) {
-       rxevent_Put(call->delayedAckEvent);
-       call->delayedAckEvent = NULL;
-    }
-    rxi_SendSpecial(call, call->conn, (struct rx_packet *)0,
-                   RX_PACKET_TYPE_ACKALL, NULL, 0, 0);
+    rxi_SendSpecial(call, call->conn, NULL, RX_PACKET_TYPE_ACKALL, 
+                   NULL, 0, 0);
     call->flags |= RX_CALL_ACKALL_SENT;
-#endif /* RX_ENABLE_LOCKS */
 }
 
-void
+static void
 rxi_SendDelayedAck(struct rxevent *event, void *arg1, void *unused1,
                   int unused2)
 {
@@ -4968,7 +4973,7 @@ rxi_SetAcksInTransmitQueue(struct rx_call *call)
 
 /* Clear out the transmit queue for the current call (all packets have
  * been received by peer) */
-void
+static void
 rxi_ClearTransmitQueue(struct rx_call *call, int force)
 {
 #ifdef AFS_GLOBAL_RXLOCK_KERNEL
@@ -5011,7 +5016,7 @@ rxi_ClearTransmitQueue(struct rx_call *call, int force)
 #endif
 }
 
-void
+static void
 rxi_ClearReceiveQueue(struct rx_call *call)
 {
     if (queue_IsNotEmpty(&call->rq)) {
@@ -5032,7 +5037,7 @@ rxi_ClearReceiveQueue(struct rx_call *call)
 }
 
 /* Send an abort packet for the specified call */
-struct rx_packet *
+static struct rx_packet *
 rxi_SendCallAbort(struct rx_call *call, struct rx_packet *packet,
                  int istack, int force)
 {
@@ -5206,7 +5211,7 @@ rxi_CallError(struct rx_call *call, afs_int32 error)
  * unprotected macros, and may only be reset by non-interrupting code.
  */
 
-void
+static void
 rxi_ResetCall(struct rx_call *call, int newcall)
 {
     int flags;
@@ -5332,6 +5337,9 @@ rxi_ResetCall(struct rx_call *call, int newcall)
        osi_rxWakeup(&call->twind);
 #endif
 
+    if (flags & RX_CALL_WAIT_PROC) {
+       rx_atomic_dec(&rx_nWaiting);
+    }
 #ifdef RX_ENABLE_LOCKS
     /* The following ensures that we don't mess with any queue while some
      * other thread might also be doing so. The call_queue_lock field is
@@ -5346,9 +5354,6 @@ rxi_ResetCall(struct rx_call *call, int newcall)
        MUTEX_ENTER(call->call_queue_lock);
        if (queue_IsOnQueue(call)) {
            queue_Remove(call);
-           if (flags & RX_CALL_WAIT_PROC) {
-               rx_atomic_dec(&rx_nWaiting);
-           }
        }
        MUTEX_EXIT(call->call_queue_lock);
        CLEAR_CALL_QUEUE_LOCK(call);
@@ -5356,8 +5361,6 @@ rxi_ResetCall(struct rx_call *call, int newcall)
 #else /* RX_ENABLE_LOCKS */
     if (queue_IsOnQueue(call)) {
        queue_Remove(call);
-       if (flags & RX_CALL_WAIT_PROC)
-           rx_atomic_dec(&rx_nWaiting);
     }
 #endif /* RX_ENABLE_LOCKS */
 
@@ -6156,10 +6159,10 @@ rxi_Send(struct rx_call *call, struct rx_packet *p,
  */
 #ifdef RX_ENABLE_LOCKS
 int
-rxi_CheckCall(struct rx_call *call, int haveCTLock)
+static rxi_CheckCall(struct rx_call *call, int haveCTLock)
 #else /* RX_ENABLE_LOCKS */
 int
-rxi_CheckCall(struct rx_call *call)
+static rxi_CheckCall(struct rx_call *call)
 #endif                         /* RX_ENABLE_LOCKS */
 {
     struct rx_connection *conn = call->conn;
@@ -6399,7 +6402,7 @@ rxi_NatKeepAliveEvent(struct rxevent *event, void *arg1,
     }
 }
 
-void
+static void
 rxi_ScheduleNatKeepAliveEvent(struct rx_connection *conn)
 {
     if (!conn->natKeepAliveEvent && conn->secondsUntilNatPing) {
@@ -6429,18 +6432,6 @@ rx_SetConnSecondsUntilNatPing(struct rx_connection *conn, afs_int32 seconds)
     MUTEX_EXIT(&conn->conn_data_lock);
 }
 
-void
-rxi_NatKeepAliveOn(struct rx_connection *conn)
-{
-    MUTEX_ENTER(&conn->conn_data_lock);
-    /* if it's already attached */
-    if (!(conn->flags & RX_CONN_ATTACHWAIT))
-       rxi_ScheduleNatKeepAliveEvent(conn);
-    else
-       conn->flags |= RX_CONN_NAT_PING;
-    MUTEX_EXIT(&conn->conn_data_lock);
-}
-
 /* When a call is in progress, this routine is called occasionally to
  * make sure that some traffic has arrived (or been sent to) the peer.
  * If nothing has arrived in a reasonable amount of time, the call is
@@ -6537,7 +6528,7 @@ rxi_GrowMTUEvent(struct rxevent *event, void *arg1, void *dummy, int dummy2)
     MUTEX_EXIT(&call->lock);
 }
 
-void
+static void
 rxi_ScheduleKeepAliveEvent(struct rx_call *call)
 {
     if (!call->keepAliveEvent) {
@@ -6551,7 +6542,7 @@ rxi_ScheduleKeepAliveEvent(struct rx_call *call)
     }
 }
 
-void
+static void
 rxi_ScheduleGrowMTUEvent(struct rx_call *call, int secs)
 {
     if (!call->growMTUEvent) {
@@ -6575,7 +6566,7 @@ rxi_ScheduleGrowMTUEvent(struct rx_call *call, int secs)
 }
 
 /* N.B. rxi_KeepAliveOff:  is defined earlier as a macro */
-void
+static void
 rxi_KeepAliveOn(struct rx_call *call)
 {
     /* Pretend last packet received was received now--i.e. if another
@@ -6601,7 +6592,7 @@ rx_KeepAliveOn(struct rx_call *call)
     rxi_KeepAliveOn(call);
 }
 
-void
+static void
 rxi_GrowMTUOn(struct rx_call *call)
 {
     struct rx_connection *conn = call->conn;
@@ -6613,7 +6604,7 @@ rxi_GrowMTUOn(struct rx_call *call)
 
 /* This routine is called to send connection abort messages
  * that have been delayed to throttle looping clients. */
-void
+static void
 rxi_SendDelayedConnAbort(struct rxevent *event, void *arg1, void *unused,
                         int unused2)
 {
@@ -6669,7 +6660,7 @@ rxi_SendDelayedCallAbort(struct rxevent *event, void *arg1, void *dummy,
  * seconds) to ask the client to authenticate itself.  The routine
  * issues a challenge to the client, which is obtained from the
  * security object associated with the connection */
-void
+static void
 rxi_ChallengeEvent(struct rxevent *event,
                   void *arg0, void *arg1, int tries)
 {
@@ -6730,7 +6721,7 @@ rxi_ChallengeEvent(struct rxevent *event,
  * security object associated with the connection is asked to create
  * the challenge at this time.  N.B.  rxi_ChallengeOff is a macro,
  * defined earlier. */
-void
+static void
 rxi_ChallengeOn(struct rx_connection *conn)
 {
     if (!conn->challengeEvent) {
@@ -6898,7 +6889,7 @@ rxi_ComputeRoundTripTime(struct rx_packet *p,
 
 /* Find all server connections that have not been active for a long time, and
  * toss them */
-void
+static void
 rxi_ReapConnections(struct rxevent *unused, void *unused1, void *unused2,
                    int unused3)
 {
@@ -7308,18 +7299,14 @@ rx_PrintStats(FILE * file)
 void
 rx_PrintPeerStats(FILE * file, struct rx_peer *peer)
 {
-    fprintf(file, "Peer %x.%d.  " "Burst size %d, " "burst wait %d.%06d.\n",
-           ntohl(peer->host), (int)ntohs(peer->port), (int)peer->burstSize,
-           (int)peer->burstWait.sec, (int)peer->burstWait.usec);
+    fprintf(file, "Peer %x.%d.\n",
+           ntohl(peer->host), (int)ntohs(peer->port));
 
     fprintf(file,
            "   Rtt %d, " "total sent %d, " "resent %d\n",
            peer->rtt, peer->nSent, peer->reSends);
 
-    fprintf(file,
-           "   Packet size %d, " "max in packet skew %d, "
-           "max out packet skew %d\n", peer->ifMTU, (int)peer->inPacketSkew,
-           (int)peer->outPacketSkew);
+    fprintf(file, "   Packet size %d\n", peer->ifMTU);
 }
 #endif
 
@@ -7688,16 +7675,12 @@ rx_GetServerPeers(osi_socket socket, afs_uint32 remoteAddr,
        peer->ifMTU = ntohs(peer->ifMTU);
        peer->idleWhen = ntohl(peer->idleWhen);
        peer->refCount = ntohs(peer->refCount);
-       peer->burstWait.sec = ntohl(peer->burstWait.sec);
-       peer->burstWait.usec = ntohl(peer->burstWait.usec);
        peer->rtt = ntohl(peer->rtt);
        peer->rtt_dev = ntohl(peer->rtt_dev);
        peer->timeout.sec = 0;
        peer->timeout.usec = 0;
        peer->nSent = ntohl(peer->nSent);
        peer->reSends = ntohl(peer->reSends);
-       peer->inPacketSkew = ntohl(peer->inPacketSkew);
-       peer->outPacketSkew = ntohl(peer->outPacketSkew);
        peer->natMTU = ntohs(peer->natMTU);
        peer->maxMTU = ntohs(peer->maxMTU);
        peer->maxDgramPackets = ntohs(peer->maxDgramPackets);
@@ -7744,18 +7727,16 @@ rx_GetLocalPeers(afs_uint32 peerHost, afs_uint16 peerPort,
                peerStats->ifMTU = tp->ifMTU;
                peerStats->idleWhen = tp->idleWhen;
                peerStats->refCount = tp->refCount;
-               peerStats->burstSize = tp->burstSize;
-               peerStats->burst = tp->burst;
-               peerStats->burstWait.sec = tp->burstWait.sec;
-               peerStats->burstWait.usec = tp->burstWait.usec;
+               peerStats->burstSize = 0;
+               peerStats->burst = 0;
+               peerStats->burstWait.sec = 0;
+               peerStats->burstWait.usec = 0;
                peerStats->rtt = tp->rtt;
                peerStats->rtt_dev = tp->rtt_dev;
                peerStats->timeout.sec = 0;
                peerStats->timeout.usec = 0;
                peerStats->nSent = tp->nSent;
                peerStats->reSends = tp->reSends;
-               peerStats->inPacketSkew = tp->inPacketSkew;
-               peerStats->outPacketSkew = tp->outPacketSkew;
                peerStats->natMTU = tp->natMTU;
                peerStats->maxMTU = tp->maxMTU;
                peerStats->maxDgramPackets = tp->maxDgramPackets;