afsd-allow-maxmtu-override-20090530
[openafs.git] / src / rx / rx_kcommon.c
index 8d174be..9d55474 100644 (file)
@@ -78,8 +78,8 @@ rxk_AddPort(u_short aport, char *arock)
 int
 rxk_DelPort(u_short aport)
 {
-    register int i;
-    register unsigned short *tsp;
+    int i;
+    unsigned short *tsp;
 
     for (i = 0, tsp = rxk_ports; i < MAXRXPORTS; i++, tsp++) {
        if (*tsp == aport) {
@@ -137,7 +137,7 @@ osi_Panic(char *msg, ...)
         msg = "Unknown AFS panic";
     printf(msg, a1, a2, a3);
     panic(msg);
-#elif defined(AFS_DARWIN80_ENV) && !defined(AFS_DARWIN90_ENV)
+#elif (defined(AFS_DARWIN80_ENV) && !defined(AFS_DARWIN90_ENV)) || (defined(AFS_LINUX22_ENV) && !defined(AFS_LINUX_26_ENV))
     char buf[256];
     va_list ap;
     if (!msg)
@@ -406,7 +406,7 @@ rxi_StartListener(void)
 /* Called from rxi_FindPeer, when initializing a clear rx_peer structure,
   to get interesting information. */
 void
-rxi_InitPeerParams(register struct rx_peer *pp)
+rxi_InitPeerParams(struct rx_peer *pp)
 {
     u_short rxmtu;
     afs_int32 i, mtu;
@@ -418,7 +418,7 @@ rxi_InitPeerParams(register struct rx_peer *pp)
     if (i == -1) {
        pp->timeout.sec = 3;
        /* pp->timeout.usec = 0; */
-       pp->ifMTU = RX_REMOTE_PACKET_SIZE;
+       pp->ifMTU = MIN(RX_REMOTE_PACKET_SIZE, rx_MyMaxSendSize);
     } else {
        pp->timeout.sec = 2;
        /* pp->timeout.usec = 0; */
@@ -434,7 +434,7 @@ rxi_InitPeerParams(register struct rx_peer *pp)
                pp->ifMTU = rxmtu;
        }
     } else {                   /* couldn't find the interface, so assume the worst */
-       pp->ifMTU = RX_REMOTE_PACKET_SIZE;
+       pp->ifMTU = MIN(RX_REMOTE_PACKET_SIZE, rx_MyMaxSendSize);
     }
 #else /* AFS_USERSPACE_IP_ADDR */
     AFS_IFNET_T ifn;
@@ -466,7 +466,7 @@ rxi_InitPeerParams(register struct rx_peer *pp)
     } else {                   /* couldn't find the interface, so assume the worst */
        pp->timeout.sec = 3;
        /* pp->timeout.usec = 0; */
-       pp->ifMTU = RX_REMOTE_PACKET_SIZE;
+       pp->ifMTU = MIN(RX_REMOTE_PACKET_SIZE, rx_MyMaxSendSize);
     }
 #endif /* else AFS_USERSPACE_IP_ADDR */
 #else /* AFS_SUN5_ENV */
@@ -475,7 +475,7 @@ rxi_InitPeerParams(register struct rx_peer *pp)
     if (mtu <= 0) {
        pp->timeout.sec = 3;
        /* pp->timeout.usec = 0; */
-       pp->ifMTU = RX_REMOTE_PACKET_SIZE;
+       pp->ifMTU = MIN(RX_REMOTE_PACKET_SIZE, rx_MyMaxSendSize);
     } else {
        pp->timeout.sec = 2;
        /* pp->timeout.usec = 0; */
@@ -491,7 +491,7 @@ rxi_InitPeerParams(register struct rx_peer *pp)
                pp->ifMTU = rxmtu;
        }
     } else {                   /* couldn't find the interface, so assume the worst */
-       pp->ifMTU = RX_REMOTE_PACKET_SIZE;
+       pp->ifMTU = MIN(RX_REMOTE_PACKET_SIZE,rx_MyMaxSendSize);
     }
 #endif /* AFS_SUN5_ENV */
 #else /* ADAPT_MTU */
@@ -529,7 +529,7 @@ static struct protosw parent_proto; /* udp proto switch */
 void
 shutdown_rxkernel(void)
 {
-    register struct protosw *tpro, *last;
+    struct protosw *tpro, *last;
     last = inetdomain.dom_protoswNPROTOSW;
     for (tpro = inetdomain.dom_protosw; tpro < last; tpro++)
        if (tpro->pr_protocol == IPPROTO_UDP) {
@@ -662,7 +662,7 @@ rxi_GetIFInfo(void)
     int i = 0;
     int different = 0;
 
-    register int rxmtu, maxmtu;
+    int rxmtu, maxmtu;
     afs_uint32 addrs[ADDRSPERSITE];
     int mtus[ADDRSPERSITE];
     afs_uint32 ifinaddr;
@@ -677,7 +677,7 @@ rxi_GetIFInfo(void)
     struct in_addr pin;
 #else
     struct ifaddr *ifad;       /* ifnet points to a if_addrlist of ifaddrs */
-    register struct ifnet *ifn;
+    struct ifnet *ifn;
 #endif
 
     memset(addrs, 0, sizeof(addrs));
@@ -878,7 +878,7 @@ rxi_FindIfnet(afs_uint32 addr, afs_uint32 * maskp)
 osi_socket *
 rxk_NewSocketHost(afs_uint32 ahost, short aport)
 {
-    register afs_int32 code;
+    afs_int32 code;
 #ifdef AFS_DARWIN80_ENV
     socket_t newSocket;
 #else
@@ -1063,7 +1063,7 @@ rxk_NewSocket(short aport)
 
 /* free socket allocated by rxk_NewSocket */
 int
-rxk_FreeSocket(register struct socket *asocket)
+rxk_FreeSocket(struct socket *asocket)
 {
     AFS_STATCNT(osi_FreeSocket);
 #if defined(AFS_DARWIN_ENV) && defined(KERNEL_FUNNEL)
@@ -1145,7 +1145,7 @@ rxk_ReadPacket(osi_socket so, struct rx_packet *p, int *host, int *port)
     struct sockaddr_in from;
     int nbytes;
     afs_int32 rlen;
-    register afs_int32 tlen;
+    afs_int32 tlen;
     afs_int32 savelen;         /* was using rlen but had aliasing problems */
     rx_computelen(p, tlen);
     rx_SetDataSize(p, tlen);   /* this is the size of the user data area */
@@ -1197,8 +1197,8 @@ rxk_ReadPacket(osi_socket so, struct rx_packet *p, int *host, int *port)
            if (nbytes <= 0) {
                 if (rx_stats_active) {
                     MUTEX_ENTER(&rx_stats_mutex);
-                    rx_stats.bogusPacketOnRead++;
-                    rx_stats.bogusHost = from.sin_addr.s_addr;
+                    rx_AtomicIncrement_NL(rx_stats.bogusPacketOnRead);
+                    rx_AtomicSwap_NL(&rx_stats.bogusHost, from.sin_addr.s_addr);
                     MUTEX_EXIT(&rx_stats_mutex);
                 }
                dpf(("B: bogus packet from [%x,%d] nb=%d",
@@ -1212,16 +1212,14 @@ rxk_ReadPacket(osi_socket so, struct rx_packet *p, int *host, int *port)
            *host = from.sin_addr.s_addr;
            *port = from.sin_port;
            if (p->header.type > 0 && p->header.type < RX_N_PACKET_TYPES) {
-                if (rx_stats_active) {
-                    MUTEX_ENTER(&rx_stats_mutex);
-                    rx_stats.packetsRead[p->header.type - 1]++;
-                    MUTEX_EXIT(&rx_stats_mutex);
-                }
+                if (rx_stats_active) 
+                    rx_AtomicIncrement(rx_stats.packetsRead[p->header.type - 1], rx_stats_mutex);
            }
 
+#ifdef RX_TRIMDATABUFS
            /* Free any empty packet buffers at the end of this packet */
            rxi_TrimDataBufs(p, 1);
-
+#endif
            return 0;
        }
     } else