taking-rx-back-into-the-20th-century-20061228
authorDerrick Brashear <shadow@dementia.org>
Tue, 2 Jan 2007 17:17:49 +0000 (17:17 +0000)
committerDerrick Brashear <shadow@dementia.org>
Tue, 2 Jan 2007 17:17:49 +0000 (17:17 +0000)
ken's patch is now on the ipv6 branch

====================
This delta was composed from multiple commits as part of the CVS->Git migration.
The checkin message with each commit was inconsistent.
The following are the additional commit messages.
====================

restore deleted taddr declaration.

====================

ken's patch is now on the ipv6 branch

23 files changed:
src/afs/afs_mariner.c
src/bucoord/server.c
src/kauth/admin_tools.c
src/kauth/kalog.c
src/kauth/kalog.h
src/kauth/kaprocs.c
src/rx/DARWIN/rx_knet.c
src/rx/FBSD/rx_knet.c
src/rx/OBSD/rx_knet.c
src/rx/SOLARIS/rx_knet.c
src/rx/UKERNEL/rx_knet.c
src/rx/rx.c
src/rx/rx.h
src/rx/rx_globals.h
src/rx/rx_kcommon.c
src/rx/rx_lwp.c
src/rx/rx_packet.c
src/rx/rx_prototypes.h
src/rx/rx_pthread.c
src/rx/rx_user.c
src/viced/afsfileprocs.c
src/viced/host.c
src/viced/host.h

index e94dbbe..cbdf9ca 100644 (file)
@@ -99,8 +99,7 @@ afs_MarinerLogFetch(register struct vcache *avc, register afs_int32 off,
     dvec.iov_base = tp1;
     dvec.iov_len = len;
     AFS_GUNLOCK();
-    (void)osi_NetSend(afs_server->socket, (struct sockaddr_storage *) &taddr,
-                     sizeof(taddr), &dvec, 1, len, 0);
+    (void)osi_NetSend(afs_server->socket, &taddr, &dvec, 1, len, 0);
     AFS_GLOCK();
     osi_FreeSmallSpace(tp1);
 }                              /*afs_MarinerLogFetch */
@@ -133,8 +132,7 @@ afs_MarinerLog(register char *astring, register struct vcache *avc)
     dvec.iov_base = buf;
     dvec.iov_len = tp - buf;
     AFS_GUNLOCK();
-    (void)osi_NetSend(afs_server->socket, (struct sockaddr_storage *) &taddr,
-                     sizeof(taddr), &dvec, 1, tp - buf, 0);
+    (void)osi_NetSend(afs_server->socket, &taddr, &dvec, 1, tp - buf, 0);
     AFS_GLOCK();
     osi_FreeSmallSpace(buf);
 }                              /*afs_MarinerLog */
index b4ba909..b7672ec 100644 (file)
@@ -32,6 +32,6 @@ BC_Print(acall, acode, aflags, amessage)
 
     tconn = rx_ConnectionOf(acall);
     tpeer = rx_PeerOf(tconn);
-    printf("From %s: %s <%d>\n", rx_AddrStringOf(tpeer), amessage, acode);
+    printf("From %08x: %s <%d>\n", tpeer->host, amessage, acode);
     return 0;
 }
index f22f62f..a1ed521 100644 (file)
@@ -536,7 +536,7 @@ Unlock(struct cmd_syndesc *as, char *arock)
 {
     afs_int32 code, rcode = 0;
     afs_int32 count;
-    char *server;
+    afs_int32 server;
     char name[MAXKTCNAMELEN];
     char instance[MAXKTCNAMELEN];
 
@@ -552,14 +552,16 @@ Unlock(struct cmd_syndesc *as, char *arock)
        code = ubik_CallIter(KAM_Unlock, conn, 0, &count, (long) name, (long) instance,
                             0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
        if (code && (code != UNOSERVERS)) {
-           server = "<unknown>";
+           server = 0;
            if (conn && conn->conns[count - 1]
                && conn->conns[count - 1]->peer) {
-               server = rx_AddrStringOf(conn->conns[count - 1]->peer);
+               server = conn->conns[count - 1]->peer->host;
            }
            com_err(whoami, code,
-                   "so %s.%s may still be locked (on server %s)",
-                   name, instance, server);
+                   "so %s.%s may still be locked (on server %d.%d.%d.%d)",
+                   name, instance, ((server >> 24) & 0xFF),
+                   ((server >> 16) & 0xFF), ((server >> 8) & 0xFF),
+                   (server & 0xFF));
 
            if (!rcode) {
                rcode = code;
index 85b6bea..f70bed5 100644 (file)
@@ -60,9 +60,9 @@ kalog_Init()
 }
 
 /* log a ticket usage */
-void
-kalog_log(char *principal, char *instance, char *sprincipal, char *sinstance,
-         char *realm, int hostaddr, int type)
+kalog_log(principal, instance, sprincipal, sinstance, realm, hostaddr, type)
+     char *principal, *instance, *sprincipal, *sinstance, *realm;
+     int hostaddr, type;
 {
     char keybuf[512];          /* not random! 63 . 63 , 63 . 63 max key */
     datum key, data;
@@ -131,7 +131,7 @@ kalog_log(char *principal, char *instance, char *sprincipal, char *sinstance,
 
     dbm_store(kalog_db, key, data, DBM_REPLACE);
 
-    ViceLog(verbose_track, ("%s from %s\n", keybuf, afs_inet_ntoa(hostaddr)));
+    ViceLog(verbose_track, ("%s from %x\n", keybuf, hostaddr));
 }
 
 
@@ -197,5 +197,5 @@ ka_log(char *principal, char *instance, char *sprincipal, char *sinstance,
        break;
     }
 
-    ViceLog(verbose_track, ("%s from %s\n", logbuf, afs_inet_ntoa(hostaddr)));
+    ViceLog(verbose_track, ("%s from %x\n", logbuf, hostaddr));
 }
index 0ae6c68..ca71fb6 100644 (file)
@@ -47,11 +47,7 @@ typedef struct {
 #endif
 #endif /* AUTH_DBM_LOG */
 
-void ka_log(char *principal, char *instance, char *sprincipal, char *sinstance,
-           char *realm, int hostaddr, int type);
 #ifdef AUTH_DBM_LOG
-void kalog_log(char *principal, char *instance, char *sprincipal,
-              char *sinstance, char *realm, int hostaddr, int type);
 #define KALOG(a,b,c,d,e,f,g) kalog_log(a,b,c,d,e,f,g)
 #else
 #define KALOG(a,b,c,d,e,f,g) ka_log(a,b,c,d,e,f,g)
index 0f7fa42..5fe2fdb 100644 (file)
@@ -659,8 +659,7 @@ kamCreateUser(call, aname, ainstance, ainitpw)
        return code;
     }
     code = ubik_EndTrans(tt);
-    KALOG(aname, ainstance, NULL, NULL, NULL,
-         rx_HostOf(rx_PeerOf(rx_ConnectionOf(call))),
+    KALOG(aname, ainstance, NULL, NULL, NULL, call->conn->peer->host,
          LOG_CRUSER);
     return code;
 }
@@ -958,8 +957,8 @@ kamSetPassword(call, aname, ainstance, akvno, apassword)
        goto abort;
 
     code = ubik_EndTrans(tt);
-    KALOG(aname, ainstance, NULL, NULL, NULL,
-         rx_HostOf(rx_PeerOf(rx_ConnectionOf(call))), LOG_CHPASSWD);
+    KALOG(aname, ainstance, NULL, NULL, NULL, call->conn->peer->host,
+         LOG_CHPASSWD);
     return code;
 
   abort:
@@ -1296,15 +1295,15 @@ Authenticate(version, call, aname, ainstance, start, end, arequest, oanswer)
     des_pcbc_encrypt(oanswer->SeqBody, oanswer->SeqBody, oanswer->SeqLen,
                     user_schedule, &tentry.key, ENCRYPT);
     code = ubik_EndTrans(tt);
-    KALOG(aname, ainstance, sname, sinst, NULL,
-         rx_HostOf(rx_PeerOf(rx_ConnectionOf(call))), LOG_AUTHENTICATE);
+    KALOG(aname, ainstance, sname, sinst, NULL, call->conn->peer->host,
+         LOG_AUTHENTICATE);
     return code;
 
   abort:
     COUNT_ABO;
     ubik_AbortTrans(tt);
-    KALOG(aname, ainstance, sname, sinst, NULL,
-         rx_HostOf(rx_PeerOf(rx_ConnectionOf(call))), LOG_AUTHFAILED);
+    KALOG(aname, ainstance, sname, sinst, NULL, call->conn->peer->host,
+         LOG_AUTHFAILED);
     return code;
 }
 
@@ -1523,8 +1522,8 @@ kamSetFields(call, aname, ainstance, aflags, aexpiration, alifetime,
        goto abort;
 
     code = ubik_EndTrans(tt);
-    KALOG(aname, ainstance, NULL, NULL, NULL,
-         rx_HostOf(rx_PeerOf(rx_ConnectionOf(call))), LOG_SETFIELDS);
+    KALOG(aname, ainstance, NULL, NULL, NULL, call->conn->peer->host,
+         LOG_SETFIELDS);
     return code;
 
   abort:
@@ -1602,8 +1601,8 @@ kamDeleteUser(call, aname, ainstance)
        goto abort;
 
     code = ubik_EndTrans(tt);
-    KALOG(aname, ainstance, NULL, NULL, NULL,
-         rx_HostOf(rx_PeerOf(rx_ConnectionOf(call))), LOG_DELUSER);
+    KALOG(aname, ainstance, NULL, NULL, NULL, call->conn->peer->host,
+         LOG_DELUSER);
     return code;
 }
 
@@ -2012,7 +2011,7 @@ GetTicket(version, call, kvno, authDomain, aticket, sname, sinstance, atimes,
                     schedule, &authSessionKey, ENCRYPT);
     code = ubik_EndTrans(tt);
     KALOG(name, instance, sname, sinstance, (import ? authDomain : NULL),
-         rx_HostOf(rx_PeerOf(rx_ConnectionOf(call))), LOG_GETTICKET);
+         call->conn->peer->host, LOG_GETTICKET);
     return code;
 
   abort:
@@ -2359,8 +2358,8 @@ SKAM_Unlock(call, aname, ainstance, spare1, spare2, spare3, spare4)
     kaux_write(to, 0, 0);      /* zero failure counters at this offset */
 
     code = ubik_EndTrans(tt);
-    KALOG(aname, ainstance, NULL, NULL, NULL,
-         rx_HostOf(rx_PeerOf(rx_ConnectionOf(call))), LOG_UNLOCK);
+    KALOG(aname, ainstance, NULL, NULL, NULL, call->conn->peer->host,
+         LOG_UNLOCK);
     goto exit;
 
   abort:
index 1265dad..cd29950 100644 (file)
@@ -20,12 +20,13 @@ RCSID
 #endif
  
 int
-osi_NetReceive(osi_socket so, struct sockaddr_storage *saddr, int *slen,
-              struct iovec *dvec, int nvecs, int *alength)
+osi_NetReceive(osi_socket so, struct sockaddr_in *addr, struct iovec *dvec,
+              int nvecs, int *alength)
 {
 #ifdef AFS_DARWIN80_ENV
     socket_t asocket = (socket_t)so;
     struct msghdr msg;
+    struct sockaddr_storage ss;
     int rlen;
     mbuf_t m;
 #else
@@ -55,9 +56,9 @@ osi_NetReceive(osi_socket so, struct sockaddr_storage *saddr, int *slen,
 #if 1
     resid = *alength;
     memset(&msg, 0, sizeof(struct msghdr));
-    msg.msg_name = saddr;
+    msg.msg_name = &ss;
     msg.msg_namelen = sizeof(struct sockaddr_storage);
-    sa =(struct sockaddr *) saddr;
+    sa =(struct sockaddr *) &ss;
     code = sock_receivembuf(asocket, &msg, &m, 0, alength);
     if (!code) {
         size_t offset=0,sz;
@@ -150,8 +151,8 @@ osi_StopListener(void)
 }
 
 int
-osi_NetSend(osi_socket so, struct sockaddr_storage *saddr, int salen,
-           struct iovec *dvec, int nvecs, afs_int32 alength, int istack)
+osi_NetSend(osi_socket so, struct sockaddr_in *addr, struct iovec *dvec,
+           int nvecs, afs_int32 alength, int istack)
 {
 #ifdef AFS_DARWIN80_ENV
     socket_t asocket = (socket_t)so;
@@ -173,8 +174,7 @@ osi_NetSend(osi_socket so, struct sockaddr_storage *saddr, int salen,
     for (i = 0; i < nvecs; i++)
        iov[i] = dvec[i];
 
-    saddr->ss_len = saddr->ss_family == AF_INET6 ?
-               sizeof(struct sockaddr_in6) : sizeof(struct sockaddr_in);
+    addr->sin_len = sizeof(struct sockaddr_in);
 
     if (haveGlock)
        AFS_GUNLOCK();
@@ -183,8 +183,8 @@ osi_NetSend(osi_socket so, struct sockaddr_storage *saddr, int salen,
 #endif
 #ifdef AFS_DARWIN80_ENV
     memset(&msg, 0, sizeof(struct msghdr));
-    msg.msg_name = saddr;
-    msg.msg_namelen = saddr->ss_len;
+    msg.msg_name = addr;
+    msg.msg_namelen = ((struct sockaddr *)addr)->sa_len;
     msg.msg_iov = &iov[0];
     msg.msg_iovlen = nvecs;
     code = sock_send(asocket, &msg, 0, &slen);
index c24176f..e70dcb4 100644 (file)
@@ -19,7 +19,7 @@ RCSID
 
 #ifdef RXK_LISTENER_ENV
 int
-osi_NetReceive(osi_socket asocket, struct sockaddr_storage *saddr, int *slen,
+osi_NetReceive(osi_socket asocket, struct sockaddr_in *addr,
               struct iovec *dvec, int nvecs, int *alength)
 {
     struct uio u;
@@ -68,10 +68,8 @@ osi_NetReceive(osi_socket asocket, struct sockaddr_storage *saddr, int *slen,
     *alength -= u.uio_resid;
     if (sa) {
        if (sa->sa_family == AF_INET) {
-           if (saddr) {
-               memcpy(saddr, sa, sa->sa_len);
-               *slen = sa->sa_len;
-           }
+           if (addr)
+               *addr = *(struct sockaddr_in *)sa;
        } else
            printf("Unknown socket family %d in NetReceive\n", sa->sa_family);
        FREE(sa, M_SONAME);
@@ -102,8 +100,8 @@ osi_StopListener(void)
 }
 
 int
-osi_NetSend(osi_socket asocket, struct sockaddr_storage *saddr, int salen,
-           struct iovec *dvec, int nvecs, afs_int32 alength, int istack)
+osi_NetSend(osi_socket asocket, struct sockaddr_in *addr, struct iovec *dvec,
+           int nvecs, afs_int32 alength, int istack)
 {
     register afs_int32 code;
     int i;
@@ -130,8 +128,7 @@ osi_NetSend(osi_socket asocket, struct sockaddr_storage *saddr, int salen,
     u.uio_procp = NULL;
 #endif
 
-    saddr->ss_len = saddr->ss_family == AF_INET6 ?
-               sizeof(struct sockaddr_in6) : sizeof(struct sockaddr_in);
+    addr->sin_len = sizeof(struct sockaddr_in);
 
     if (haveGlock)
        AFS_GUNLOCK();
@@ -140,11 +137,11 @@ osi_NetSend(osi_socket asocket, struct sockaddr_storage *saddr, int salen,
 #endif
 #ifdef AFS_FBSD50_ENV
     code =
-       sosend(asocket, (struct sockaddr *)saddr, &u, NULL, NULL, 0,
+       sosend(asocket, (struct sockaddr *)addr, &u, NULL, NULL, 0,
               curthread);
 #else
     code =
-       sosend(asocket, (struct sockaddr *)saddr, &u, NULL, NULL, 0, curproc);
+       sosend(asocket, (struct sockaddr *)addr, &u, NULL, NULL, 0, curproc);
 #endif
 #if KNET_DEBUG
     if (code) {
index 73934e2..e2fa381 100644 (file)
@@ -16,7 +16,7 @@ RCSID
 #include "../rx/rx_kcommon.h"
 
 int
-osi_NetReceive(osi_socket asocket, struct sockaddr_storage *saddr, int *slen,
+osi_NetReceive(osi_socket asocket, struct sockaddr_in *addr,
               struct iovec *dvec, int nvecs, int *alength)
 {
     struct uio u;
@@ -42,7 +42,7 @@ osi_NetReceive(osi_socket asocket, struct sockaddr_storage *saddr, int *slen,
 
     if (haveGlock)
        AFS_GUNLOCK();
-    code = soreceive(asocket, (saddr ? &nam : NULL), &u, NULL, NULL, NULL);
+    code = soreceive(asocket, (addr ? &nam : NULL), &u, NULL, NULL, NULL);
     if (haveGlock)
        AFS_GLOCK();
 
@@ -56,9 +56,8 @@ osi_NetReceive(osi_socket asocket, struct sockaddr_storage *saddr, int *slen,
     }
 
     *alength -= u.uio_resid;
-    if (saddr && nam) {
-       memcpy(saddr, mtod(nam, caddr_t), nam->m_len);
-       *slen = nam->m_len;
+    if (addr && nam) {
+       memcpy(addr, mtod(nam, caddr_t), nam->m_len);
        m_freem(nam);
     }
 
@@ -82,8 +81,8 @@ osi_StopListener(void)
  */
 
 int
-osi_NetSend(osi_socket asocket, struct sockaddr_storage *addr, int slen,
-           struct iovec *dvec, int nvecs, afs_int32 alength, int istack)
+osi_NetSend(osi_socket asocket, struct sockaddr_in *addr, struct iovec *dvec,
+           int nvecs, afs_int32 alength, int istack)
 {
     int i, code;
     struct iovec iov[RX_MAXIOVECS];
@@ -109,8 +108,8 @@ osi_NetSend(osi_socket asocket, struct sockaddr_storage *addr, int slen,
     nam = m_get(M_DONTWAIT, MT_SONAME);
     if (!nam)
        return ENOBUFS;
-    nam->m_len = slen;
-    memcpy(mtod(nam, caddr_t), addr, slen);
+    nam->m_len = addr->sin_len = sizeof(struct sockaddr_in);
+    memcpy(mtod(nam, caddr_t), addr, addr->sin_len);
 
     if (haveGlock)
        AFS_GUNLOCK();
index 96b2899..85eaa5f 100644 (file)
@@ -222,10 +222,11 @@ struct sockaddr_in rx_sockaddr;
 
 /* Allocate a new socket at specified port in network byte order. */
 osi_socket *
-rxk_NewSocketHost(struct sockaddr_storage *addr, int salen)
+rxk_NewSocketHost(afs_uint32 ahost, short aport)
 {
     vnode_t *accessvp;
     struct sonode *so;
+    struct sockaddr_in addr;
     int error;
     int len;
 
@@ -293,7 +294,11 @@ rxk_NewSocketHost(struct sockaddr_storage *addr, int salen)
        return NULL;
     }
 
-    error = sockfs_sobind(so, (struct sockaddr *)addr, salen, 0, 0);
+    addr.sin_family = AF_INET;
+    addr.sin_port = aport;
+    addr.sin_addr.s_addr = ahost; /* I wonder what the odds are on
+                                    needing to unbyteswap this */
+    error = sockfs_sobind(so, (struct sockaddr *)&addr, sizeof(addr), 0, 0);
     if (error != 0) {
        return NULL;
     }
@@ -339,7 +344,7 @@ osi_FreeSocket(register osi_socket *asocket)
     dvec.iov_len = 1;
 
     while (rxk_ListenerPid) {
-       osi_NetSend(rx_socket, &taddr, sizeof(taddr), &dvec, 1, 1, 0);
+       osi_NetSend(rx_socket, &taddr, &dvec, 1, 1, 0);
        afs_osi_Sleep(&rxk_ListenerPid);
     }
 
@@ -352,8 +357,8 @@ osi_FreeSocket(register osi_socket *asocket)
 }
 
 int
-osi_NetSend(osi_socket asocket, struct sockaddr_storage *saddr, int slen,
-           struct iovec *dvec, int nvecs, afs_int32 asize, int istack)
+osi_NetSend(osi_socket asocket, struct sockaddr_in *addr, struct iovec *dvec,
+           int nvecs, afs_int32 asize, int istack)
 {
     struct sonode *so = (struct sonode *)asocket;
     struct nmsghdr msg;
@@ -366,8 +371,8 @@ osi_NetSend(osi_socket asocket, struct sockaddr_storage *saddr, int slen,
        osi_Panic("osi_NetSend: %d: Too many iovecs.\n", nvecs);
     }
 
-    msg.msg_name = (struct sockaddr *) saddr;
-    msg.msg_namelen = slen;
+    msg.msg_name = (struct sockaddr *)addr;
+    msg.msg_namelen = sizeof(struct sockaddr_in);
     msg.msg_iov = dvec;
     msg.msg_iovlen = nvecs;
     msg.msg_control = NULL;
@@ -392,8 +397,8 @@ osi_NetSend(osi_socket asocket, struct sockaddr_storage *saddr, int slen,
 }
 
 int
-osi_NetReceive(osi_socket so, struct sockaddr_storage *saddr, int *slen,
-              struct iovec *dvec, int nvecs, int *alength)
+osi_NetReceive(osi_socket so, struct sockaddr_in *addr, struct iovec *dvec,
+              int nvecs, int *alength)
 {
     struct sonode *asocket = (struct sonode *)so;
     struct nmsghdr msg;
@@ -407,7 +412,7 @@ osi_NetReceive(osi_socket so, struct sockaddr_storage *saddr, int *slen,
     }
 
     msg.msg_name = NULL;
-    msg.msg_namelen = *slen;
+    msg.msg_namelen = sizeof(struct sockaddr_in);
     msg.msg_iov = NULL;
     msg.msg_iovlen = 0;
     msg.msg_control = NULL;
@@ -431,8 +436,7 @@ osi_NetReceive(osi_socket so, struct sockaddr_storage *saddr, int *slen,
        if (msg.msg_name == NULL) {
            error = -1;
        } else {
-           memcpy(saddr, msg.msg_name, msg.msg_namelen);
-           *slen = msg.msg_namelen;
+           memcpy(addr, msg.msg_name, msg.msg_namelen);
            kmem_free(msg.msg_name, msg.msg_namelen);
            *alength = *alength - uio.uio_resid;
        }
index d484f85..959e9cf 100644 (file)
@@ -64,8 +64,7 @@ void
 rxi_ListenerProc(osi_socket usockp, int *tnop, struct rx_call **newcallp)
 {
     struct rx_packet *tp;
-    struct sockaddr_storage saddr;
-    int slen;
+    afs_uint32 host;
     u_short port;
     int rc;
 
@@ -77,9 +76,9 @@ rxi_ListenerProc(osi_socket usockp, int *tnop, struct rx_call **newcallp)
     while (1) {
        tp = rxi_AllocPacket(RX_PACKET_CLASS_RECEIVE);
        usr_assert(tp != NULL);
-       rc = rxi_ReadPacket(usockp, tp, &saddr, &slen);
+       rc = rxi_ReadPacket(usockp, tp, &host, &port);
        if (rc != 0) {
-           tp = rxi_ReceivePacket(tp, usockp, &saddr, slen, tnop, newcallp);
+           tp = rxi_ReceivePacket(tp, usockp, host, port, tnop, newcallp);
            if (newcallp && *newcallp) {
                if (tp) {
                    rxi_FreePacket(tp);
@@ -280,8 +279,8 @@ osi_StopListener(void)
 }
 
 int
-osi_NetSend(osi_socket sockp, struct sockaddr_storage *addr, int addrlen,
-           struct iovec *iov, int nio, afs_int32 size, int stack)
+osi_NetSend(osi_socket sockp, struct sockaddr_in *addr, struct iovec *iov,
+           int nio, afs_int32 size, int stack)
 {
     int rc;
     int i;
@@ -301,7 +300,7 @@ osi_NetSend(osi_socket sockp, struct sockaddr_storage *addr, int addrlen,
 
     memset(&msg, 0, sizeof(msg));
     msg.msg_name = (void *)addr;
-    msg.msg_namelen = addrlen;
+    msg.msg_namelen = sizeof(struct sockaddr_in);
     msg.msg_iov = &tmpiov[0];
     msg.msg_iovlen = nio;
 
index 155fdc9..51fbced 100644 (file)
@@ -373,58 +373,19 @@ static int rxinit_status = 1;
 #define UNLOCK_RX_INIT
 #endif
 
-/*
- * Now, rx_InitHost is just a stub for rx_InitAddrs
- * Parameters are in network byte order.
- */
-
 int
 rx_InitHost(u_int host, u_int port)
 {
-    struct sockaddr_storage saddr;
-    int type = SOCK_DGRAM, len = sizeof(struct sockaddr_in);
-
-    memset((void *) &saddr, 0, sizeof(saddr));
-    rx_ssfamily(&saddr) = AF_INET;
-    ((struct sockaddr_in *) &saddr)->sin_addr.s_addr = host;
-    ((struct sockaddr_in *) &saddr)->sin_port = (u_short)port;
-#ifdef STRUCT_SOCKADDR_HAS_SA_LEN
-    ((struct sockaddr_in *) &saddr)->sin_len = sizeof(struct sockaddr_in);
-#endif
-    return rx_InitAddrs(&saddr, &type, &len, 1);
-}
-
-/*
- * New API: rx_InitAddrs(struct sockaddr_storage *, int *, int)
- *
- * Arguments:
- *
- * struct sockaddr_storage - array of struct sockaddr_storage elements,
- *                          each one listing an interface/protocol to
- *                          be listened on.
- * int *                  - array of integers listing the socket type
- *                          (SOCK_STREAM or SOCK_DGRAM) to be used
- *                          by the corresponding struct sockaddr_storage
- * int *                  - array of integers listing saddr sizes
- * int                    - Number of elements in sockaddr_storage array.
- *
- * Note that in general only servers should call this function; clients
- * should (for now) continue to call rx_Init().
- */
-
-int rx_InitAddrs(struct sockaddr_storage *saddrs, int *types, int *salens,
-                int nelem)
-{
 #ifdef KERNEL
     osi_timeval_t tv;
 #else /* KERNEL */
     struct timeval tv;
 #endif /* KERNEL */
     char *htable, *ptable;
-    int tmp_status, i;
-
+    int tmp_status;
+    
     SPLVAR;
-
+    
     INIT_PTHREAD_LOCKS;
     LOCK_RX_INIT;
     if (rxinit_status == 0) {
@@ -439,7 +400,7 @@ int rx_InitAddrs(struct sockaddr_storage *saddrs, int *types, int *salens,
     if (afs_winsockInit() < 0)
        return -1;
 #endif
-
+    
 #ifndef KERNEL
     /*
      * Initialize anything necessary to provide a non-premptive threading
@@ -447,29 +408,15 @@ int rx_InitAddrs(struct sockaddr_storage *saddrs, int *types, int *salens,
      */
     rxi_InitializeThreadSupport();
 #endif
-
+    
     /* Allocate and initialize a socket for client and perhaps server
      * connections. */
-
-    rx_socket = OSI_NULLSOCKET;
-    rx_port = 0;
-
-    for (i = 0; i < nelem; i++) {
-       switch (types[i]) {
-       case SOCK_DGRAM:
-           rx_socket = rxi_GetHostUDPSocket(&saddrs[i], salens[i]);
-           if (rx_socket == OSI_NULLSOCKET) {
-               UNLOCK_RX_INIT;
-               return RX_ADDRINUSE;
-           }
-           rx_port = rx_ss2pn(&saddrs[i]);
-           break;
-       default:
-           return RX_INVALID_OPERATION;
-       }
-
+    
+    rx_socket = rxi_GetHostUDPSocket(host, (u_short) port);
+    if (rx_socket == OSI_NULLSOCKET) {
+       UNLOCK_RX_INIT;
+       return RX_ADDRINUSE;
     }
-
 #ifdef RX_ENABLE_LOCKS
 #ifdef RX_LOCKS_DB
     rxdb_init();
@@ -532,19 +479,20 @@ int rx_InitAddrs(struct sockaddr_storage *saddrs, int *types, int *salens,
 #else
     osi_GetTime(&tv);
 #endif
-
-    if (! rx_port) {
+    if (port) {
+       rx_port = port;
+    } else {
 #if defined(KERNEL) && !defined(UKERNEL)
        /* Really, this should never happen in a real kernel */
        rx_port = 0;
 #else
-       struct sockaddr_storage sn;
-       socklen_t addrlen = sizeof(sn);
-       if (getsockname((int)rx_socket, (struct sockaddr *)&sn, &addrlen)) {
+       struct sockaddr_in addr;
+       int addrlen = sizeof(addr);
+       if (getsockname((int)rx_socket, (struct sockaddr *)&addr, &addrlen)) {
            rx_Finalize();
            return -1;
        }
-       rx_port = rx_ss2pn(&sn);
+       rx_port = addr.sin_port;
 #endif
     }
     rx_stats.minRtt.sec = 9999999;
@@ -598,7 +546,6 @@ rx_Init(u_int port)
     return rx_InitHost(htonl(INADDR_ANY), port);
 }
 
-
 /* called with unincremented nRequestsRunning to see if it is OK to start
  * a new thread in this service.  Could be "no" for two reasons: over the
  * max quota, or would prevent others from reaching their min quota.
@@ -788,50 +735,22 @@ rx_StartServer(int donateMe)
     return;
 }
 
-/*
- * Now, rx_NewConnection is just a stub for rx_NewConnectionAddrs()
- */
-
+/* Create a new client connection to the specified service, using the
+ * specified security object to implement the security model for this
+ * connection. */
 struct rx_connection *
 rx_NewConnection(register afs_uint32 shost, u_short sport, u_short sservice,
                 register struct rx_securityClass *securityObject,
                 int serviceSecurityIndex)
 {
-    struct sockaddr_in sin;
-    int len = sizeof(sin), type = SOCK_DGRAM;
-
-    memset((void *) &sin, 0, sizeof(sin));
-
-    sin.sin_family = AF_INET;
-    sin.sin_addr.s_addr = shost;
-    sin.sin_port = sport;
-
-    return rx_NewConnectionAddrs((struct sockaddr_storage *) &sin, &type,
-                                &len, 1, sservice, securityObject,
-                                serviceSecurityIndex);
-}
-
-/* Create a new client connection to the specified service, using the
- * specified security object to implement the security model for this
- * connection
- *
- * This follows the same logic as rx_InitAddrs() for the first four
- * arguments.
- */
-struct rx_connection *
-rx_NewConnectionAddrs(struct sockaddr_storage *saddr, int *type, int *slen,
-                     int nelem, u_short sservice,
-                     struct rx_securityClass *securityObject,
-                     int serviceSecurityIndex)
-{
-    int hashindex, i;
+    int hashindex;
     afs_int32 cid;
     register struct rx_connection *conn;
 
     SPLVAR;
 
     clock_NewTime();
-    dpf(("rx_NewConnection(host %x, port %u, service %u, securityObject %x, serviceSecurityIndex %d)\n", ntohl(rx_ss2v4addr(saddr)), ntohs(rx_ss2pn(saddr)), sservice, securityObject, serviceSecurityIndex));
+    dpf(("rx_NewConnection(host %x, port %u, service %u, securityObject %x, serviceSecurityIndex %d)\n", ntohl(shost), ntohs(sport), sservice, securityObject, serviceSecurityIndex));
 
     /* Vasilsi said: "NETPRI protects Cid and Alloc", but can this be true in
      * the case of kmem_alloc? */
@@ -847,16 +766,7 @@ rx_NewConnectionAddrs(struct sockaddr_storage *saddr, int *type, int *slen,
     conn->type = RX_CLIENT_CONNECTION;
     conn->cid = cid;
     conn->epoch = rx_epoch;
-    /*
-     * Right now we're going to just call rxi_FindPeer for UDP connections
-     * We're only going to support one.
-     */
-    for (i = 0; i < nelem; i++) {
-       if (type[i] == SOCK_DGRAM) {
-           conn->peer = rxi_FindPeer(&saddr[i], slen[i], type[i], 0, 1);
-           break;
-       }
-    }
+    conn->peer = rxi_FindPeer(shost, sport, 0, 1);
     conn->serviceId = sservice;
     conn->securityObject = securityObject;
     /* This doesn't work in all compilers with void (they're buggy), so fake it
@@ -1400,17 +1310,7 @@ rx_NewServiceHost(afs_uint32 host, u_short port, u_short serviceId,
            if (socket == OSI_NULLSOCKET) {
                /* If we don't already have a socket (from another
                 * service on same port) get a new one */
-               struct sockaddr_in sin;
-
-               memset((void *) &sin, 0, sizeof(sin));
-               sin.sin_family = AF_INET;
-               sin.sin_addr.s_addr = htonl(INADDR_ANY);
-               sin.sin_port = port;
-#ifdef STRUCT_SOCKADDR_HAS_SA_LEN
-               sin.sin_len = sizeof(sin);
-#endif
-               socket = rxi_GetHostUDPSocket((struct sockaddr_storage *) &sin,
-                                             sizeof(sin));
+               socket = rxi_GetHostUDPSocket(htonl(INADDR_ANY), port);
                if (socket == OSI_NULLSOCKET) {
                    USERPRI;
                    rxi_FreeService(tservice);
@@ -2361,62 +2261,22 @@ rxi_Free(void *addr, register size_t size)
  * refcount will be be decremented. This is used to replace the peer
  * structure hanging off a connection structure */
 struct rx_peer *
-rxi_FindPeer(struct sockaddr_storage *saddr, int slen, int stype,
-            struct rx_peer *origPeer, int create)
+rxi_FindPeer(register afs_uint32 host, register u_short port,
+             struct rx_peer *origPeer, int create)
 {
     register struct rx_peer *pp;
-    int hashIndex, i, j;
-    for (i = 0, j = 0; i < slen; i++)
-       j += ((unsigned char *) saddr)[i];
-    hashIndex = j % rx_hashTableSize;
+    int hashIndex;
+    hashIndex = PEER_HASH(host, port);
     MUTEX_ENTER(&rx_peerHashTable_lock);
     for (pp = rx_peerHashTable[hashIndex]; pp; pp = pp->next) {
-       if (memcmp(saddr, &pp->saddr, slen) == 0 && stype == pp->socktype)
-           break;
+       if ((pp->host == host) && (pp->port == port))
+            break;
     }
     if (!pp) {
-       if (create) {
-           pp = rxi_AllocPeer();       /* This bzero's *pp */
-           memcpy(&pp->saddr, saddr, slen);
-           pp->saddrlen = slen;
-           pp->socktype = stype;
-           switch (rx_ssfamily(saddr)) {
-           case AF_INET:
-               /*
-                * Should be enough storage for a dotted quad
-                */
-               snprintf(pp->addrstring, sizeof pp->addrstring, "%d.%d.%d.%d",
-                       rx_ss2addrp(saddr)[0], rx_ss2addrp(saddr)[1],
-                       rx_ss2addrp(saddr)[2], rx_ss2addrp(saddr)[3]);
-               break;
-#ifdef AF_INET6
-           case AF_INET6:
-               /*
-                * This gets more complicated, unfortunately
-                */
-               if (IN6_IS_ADDR_V4COMPAT(&(rx_ss2sin6(saddr)->sin6_addr))) {
-                   snprintf(pp->addrstring,
-                           sizeof pp->addrstring, "%d.%d.%d.%d",
-                           rx_ss2addrp(saddr)[12], rx_ss2addrp(saddr)[13],
-                           rx_ss2addrp(saddr)[14], rx_ss2addrp(saddr)[15]);
-               } else {
-                   snprintf(pp->addrstring,
-                            sizeof pp->addrstring, "%x:%x:%x:%x:%x:%x:%x:%x",
-                            ntohs(rx_ss2addrp6(saddr)[0]),
-                            ntohs(rx_ss2addrp6(saddr)[1]),
-                            ntohs(rx_ss2addrp6(saddr)[2]),
-                            ntohs(rx_ss2addrp6(saddr)[3]),
-                            ntohs(rx_ss2addrp6(saddr)[4]),
-                            ntohs(rx_ss2addrp6(saddr)[5]),
-                            ntohs(rx_ss2addrp6(saddr)[6]),
-                            ntohs(rx_ss2addrp6(saddr)[7]));
-               }
-               break;
-#endif /* AF_INET6 */
-           default:
-               strcpy(pp->addrstring, "??.??.??.??");
-               break;
-           }
+        if (create) {
+            pp = rxi_AllocPeer();       /* This bzero's *pp */
+           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);
@@ -2451,8 +2311,8 @@ rxi_FindPeer(struct sockaddr_storage *saddr, int slen, int stype,
  * server connection is created, it will be created using the supplied
  * index, if the index is valid for this service */
 struct rx_connection *
-rxi_FindConnection(osi_socket socket, struct sockaddr_storage *saddr,
-                  int slen, int socktype, u_short serviceId, afs_uint32 cid,
+rxi_FindConnection(osi_socket socket, register afs_int32 host,
+                  register u_short port, u_short serviceId, afs_uint32 cid,
                   afs_uint32 epoch, int type, u_int securityIndex)
 {
     int hashindex, flag;
@@ -2474,11 +2334,9 @@ rxi_FindConnection(osi_socket socket, struct sockaddr_storage *saddr,
                MUTEX_EXIT(&rx_connHashTable_lock);
                return (struct rx_connection *)0;
            }
-           if (memcmp(&pp->saddr, saddr, slen) == 0 &&
-                                               socktype == pp->socktype)
+           if (pp->host == host && pp->port == port)
                break;
-           if (type == RX_CLIENT_CONNECTION &&
-                                       rx_ss2pn(&pp->saddr) == rx_ss2pn(saddr))
+           if (type == RX_CLIENT_CONNECTION && pp->port == port)
                break;
            /* So what happens when it's a callback connection? */
            if (                /*type == RX_CLIENT_CONNECTION && */
@@ -2511,7 +2369,7 @@ rxi_FindConnection(osi_socket socket, struct sockaddr_storage *saddr,
        CV_INIT(&conn->conn_call_cv, "conn call cv", CV_DEFAULT, 0);
        conn->next = rx_connHashTable[hashindex];
        rx_connHashTable[hashindex] = conn;
-       conn->peer = rxi_FindPeer(saddr, slen, socktype, 0, 1);
+       conn->peer = rxi_FindPeer(host, port, 0, 1);
        conn->type = RX_SERVER_CONNECTION;
        conn->lastSendTime = clock_Sec();       /* don't GC immediately */
        conn->epoch = epoch;
@@ -2565,7 +2423,7 @@ int (*rx_almostSent) () = 0;
 
 struct rx_packet *
 rxi_ReceivePacket(register struct rx_packet *np, osi_socket socket,
-                 struct sockaddr_storage *saddr, int slen, int *tnop,
+                 afs_uint32 host, u_short port, int *tnop,
                  struct rx_call **newcallp)
 {
     register struct rx_call *call;
@@ -2587,29 +2445,36 @@ rxi_ReceivePacket(register struct rx_packet *np, osi_socket socket,
     packetType = (np->header.type > 0 && np->header.type < RX_N_PACKET_TYPES)
        ? rx_packetTypes[np->header.type - 1] : "*UNKNOWN*";
     dpf(("R %d %s: %x.%d.%d.%d.%d.%d.%d flags %d, packet %x",
-        np->header.serial, packetType, ntohl(rx_ss2v4addr(saddr)),
-        ntohs(rx_ss2pn(saddr)), np->header.serviceId,
+        np->header.serial, packetType, ntohl(host), ntohs(port), np->header.serviceId,
         np->header.epoch, np->header.cid, np->header.callNumber,
         np->header.seq, np->header.flags, np));
 #endif
 
     if (np->header.type == RX_PACKET_TYPE_VERSION) {
-       return rxi_ReceiveVersionPacket(np, socket, saddr, slen, 1);
+       return rxi_ReceiveVersionPacket(np, socket, host, port, 1);
     }
 
     if (np->header.type == RX_PACKET_TYPE_DEBUG) {
-       return rxi_ReceiveDebugPacket(np, socket, saddr, slen, 1);
+       return rxi_ReceiveDebugPacket(np, socket, host, port, 1);
     }
 #ifdef RXDEBUG
     /* If an input tracer function is defined, call it with the packet and
      * network address.  Note this function may modify its arguments. */
     if (rx_justReceived) {
-       struct sockaddr_in *addr = (struct sockaddr_in *) saddr;
+       struct sockaddr_in addr;
        int drop;
-       drop = (*rx_justReceived) (np, addr);
+       addr.sin_family = AF_INET;
+       addr.sin_port = port;
+       addr.sin_addr.s_addr = host;
+#ifdef STRUCT_SOCKADDR_HAS_SA_LEN
+       addr.sin_len = sizeof(addr);
+#endif /* AFS_OSF_ENV */
+       drop = (*rx_justReceived) (np, &addr);
        /* drop packet if return value is non-zero */
        if (drop)
            return np;
+       port = addr.sin_port;   /* in case fcn changed addr */
+       host = addr.sin_addr.s_addr;
     }
 #endif
 
@@ -2620,9 +2485,9 @@ rxi_ReceivePacket(register struct rx_packet *np, osi_socket socket,
     /* Find the connection (or fabricate one, if we're the server & if
      * necessary) associated with this packet */
     conn =
-       rxi_FindConnection(socket, saddr, slen, SOCK_DGRAM,
-                          np->header.serviceId, np->header.cid,
-                          np->header.epoch, type, np->header.securityIndex);
+       rxi_FindConnection(socket, host, port, np->header.serviceId,
+                          np->header.cid, np->header.epoch, type,
+                          np->header.securityIndex);
 
     if (!conn) {
        /* If no connection found or fabricated, just ignore the packet.
@@ -2757,7 +2622,7 @@ rxi_ReceivePacket(register struct rx_packet *np, osi_socket socket,
            MUTEX_EXIT(&conn->conn_call_lock);
            *call->callNumber = np->header.callNumber;
            if (np->header.callNumber == 0) 
-               dpf(("RecPacket call 0 %d %s: %s.%u.%u.%u.%u.%u.%u flags %d, packet %lx resend %d.%0.3d len %d", np->header.serial, rx_packetTypes[np->header.type - 1], rx_AddrStringOf(conn->peer), ntohs(rx_PortOf(conn->peer)), np->header.serial, np->header.epoch, np->header.cid, np->header.callNumber, np->header.seq, np->header.flags, (unsigned long)np, np->retryTime.sec, np->retryTime.usec / 1000, np->length));
+               dpf(("RecPacket call 0 %d %s: %x.%u.%u.%u.%u.%u.%u flags %d, packet %lx resend %d.%0.3d len %d", np->header.serial, rx_packetTypes[np->header.type - 1], ntohl(conn->peer->host), ntohs(conn->peer->port), np->header.serial, np->header.epoch, np->header.cid, np->header.callNumber, np->header.seq, np->header.flags, (unsigned long)np, np->retryTime.sec, np->retryTime.usec / 1000, np->length));
 
            call->state = RX_STATE_PRECALL;
            clock_GetTime(&call->queueTime);
@@ -2822,7 +2687,7 @@ rxi_ReceivePacket(register struct rx_packet *np, osi_socket socket,
            rxi_ResetCall(call, 0);
            *call->callNumber = np->header.callNumber;
            if (np->header.callNumber == 0) 
-               dpf(("RecPacket call 0 %d %s: %s.%u.%u.%u.%u.%u.%u flags %d, packet %lx resend %d.%0.3d len %d", np->header.serial, rx_packetTypes[np->header.type - 1], rx_AddrStringOf(conn->peer), ntohs(rx_PortOf(conn->peer)), np->header.serial, np->header.epoch, np->header.cid, np->header.callNumber, np->header.seq, np->header.flags, (unsigned long)np, np->retryTime.sec, np->retryTime.usec / 1000, np->length));
+               dpf(("RecPacket call 0 %d %s: %x.%u.%u.%u.%u.%u.%u flags %d, packet %lx resend %d.%0.3d len %d", np->header.serial, rx_packetTypes[np->header.type - 1], ntohl(conn->peer->host), ntohs(conn->peer->port), np->header.serial, np->header.epoch, np->header.cid, np->header.callNumber, np->header.seq, np->header.flags, (unsigned long)np, np->retryTime.sec, np->retryTime.usec / 1000, np->length));
 
            call->state = RX_STATE_PRECALL;
            clock_GetTime(&call->queueTime);
@@ -2983,7 +2848,7 @@ rxi_ReceivePacket(register struct rx_packet *np, osi_socket socket,
     /* Now do packet type-specific processing */
     switch (np->header.type) {
     case RX_PACKET_TYPE_DATA:
-       np = rxi_ReceiveDataPacket(call, np, 1, socket, saddr, slen, tnop,
+       np = rxi_ReceiveDataPacket(call, np, 1, socket, host, port, tnop,
                                   newcallp);
        break;
     case RX_PACKET_TYPE_ACK:
@@ -3227,8 +3092,8 @@ TryAttach(register struct rx_call *acall, register osi_socket socket,
 struct rx_packet *
 rxi_ReceiveDataPacket(register struct rx_call *call,
                      register struct rx_packet *np, int istack,
-                     osi_socket socket, struct sockaddr_storage *saddr,
-                     int slen, int *tnop, struct rx_call **newcallp)
+                     osi_socket socket, afs_uint32 host, u_short port,
+                     int *tnop, struct rx_call **newcallp)
 {
     int ackNeeded = 0;         /* 0 means no, otherwise ack_reason */
     int newPackets = 0;
@@ -3299,7 +3164,7 @@ rxi_ReceiveDataPacket(register struct rx_call *call,
        /* The RX_JUMBO_PACKET is set in all but the last packet in each
         * AFS 3.5 jumbogram. */
        if (flags & RX_JUMBO_PACKET) {
-           tnp = rxi_SplitJumboPacket(np, saddr, slen, isFirst);
+           tnp = rxi_SplitJumboPacket(np, host, port, isFirst);
        } else {
            tnp = NULL;
        }
@@ -6432,9 +6297,9 @@ rx_PrintStats(FILE * file)
 void
 rx_PrintPeerStats(FILE * file, struct rx_peer *peer)
 {
-/*    fprintf(file, "Peer %x.%d.  " "Burst size %d, " "burst wait %u.%d.\n",
+    fprintf(file, "Peer %x.%d.  " "Burst size %d, " "burst wait %u.%d.\n",
            ntohl(peer->host), (int)peer->port, (int)peer->burstSize,
-           (int)peer->burstWait.sec, (int)peer->burstWait.usec); */
+           (int)peer->burstWait.sec, (int)peer->burstWait.usec);
 
     fprintf(file,
            "   Rtt %d, " "retry time %u.%06d, " "total sent %d, "
@@ -7064,7 +6929,7 @@ rxi_AddRpcStat(struct rx_queue *stats, afs_uint32 rxInterface,
               afs_uint32 currentFunc, afs_uint32 totalFunc,
               struct clock *queueTime, struct clock *execTime,
               afs_hyper_t * bytesSent, afs_hyper_t * bytesRcvd, int isServer,
-              struct sockaddr_storage *saddr,
+              afs_uint32 remoteHost, afs_uint32 remotePort,
               int addToPeerList, unsigned int *counter)
 {
     int rc = 0;
@@ -7102,19 +6967,8 @@ rxi_AddRpcStat(struct rx_queue *stats, afs_uint32 rxInterface,
        }
        *counter += totalFunc;
        for (i = 0; i < totalFunc; i++) {
-           switch (rx_ssfamily(saddr)) {
-           case AF_INET:
-               rpc_stat->stats[i].remote_peer =
-                                       rx_ss2sin(saddr)->sin_addr.s_addr;
-               break;
-           default:
-#ifdef AF_INET6
-           case AF_INET6:
-               rpc_stat->stats[i].remote_peer = 0xffffffff;
-               break;
-#endif /* AF_INET6 */
-           }
-           rpc_stat->stats[i].remote_port = rx_ss2pn(saddr);
+           rpc_stat->stats[i].remote_peer = remoteHost;
+           rpc_stat->stats[i].remote_port = remotePort;
            rpc_stat->stats[i].remote_is_server = isServer;
            rpc_stat->stats[i].interfaceId = rxInterface;
            rpc_stat->stats[i].func_total = totalFunc;
@@ -7217,18 +7071,13 @@ rx_IncrementTimeAndCount(struct rx_peer *peer, afs_uint32 rxInterface,
     if (rxi_monitor_peerStats) {
        rxi_AddRpcStat(&peer->rpcStats, rxInterface, currentFunc, totalFunc,
                       queueTime, execTime, bytesSent, bytesRcvd, isServer,
-                      &peer->saddr, 1, &rxi_rpc_peer_stat_cnt);
+                      peer->host, peer->port, 1, &rxi_rpc_peer_stat_cnt);
     }
 
     if (rxi_monitor_processStats) {
-       struct sockaddr_in sin;
-       sin.sin_family = AF_INET;
-       sin.sin_addr.s_addr = 0xffffffff;
-       sin.sin_port = 0xffff;
        rxi_AddRpcStat(&processStats, rxInterface, currentFunc, totalFunc,
                       queueTime, execTime, bytesSent, bytesRcvd, isServer,
-                      (struct sockaddr_storage *) &sin, 0,
-                      &rxi_rpc_process_stat_cnt);
+                      0xffffffff, 0xffffffff, 0, &rxi_rpc_process_stat_cnt);
     }
 
     MUTEX_EXIT(&peer->peer_lock);
index f17a87d..016fe7d 100644 (file)
@@ -98,7 +98,7 @@
 #ifndef KERNEL
 typedef void (*rx_destructor_t) (void *);
 int rx_KeyCreate(rx_destructor_t);
-osi_socket rxi_GetHostUDPSocket(struct sockaddr_storage *saddr, int salen);
+osi_socket rxi_GetHostUDPSocket(u_int host, u_short port);
 osi_socket rxi_GetUDPSocket(u_short port);
 #endif /* KERNEL */
 
@@ -110,18 +110,8 @@ int ntoh_syserr_conv(int error);
 
 #define        rx_ConnectionOf(call)           ((call)->conn)
 #define        rx_PeerOf(conn)                 ((conn)->peer)
-#ifdef AF_INET6
-#define        rx_HostOf(peer)                 ((peer)->saddr.ss_family == AF_INET ? \
-               ((struct sockaddr_in *) &(peer)->saddr)->sin_addr.s_addr : \
-                                                               0xffffffff)
-#define        rx_PortOf(peer)                 ((peer)->saddr.ss_family == AF_INET ? \
-               ((struct sockaddr_in *) &(peer)->saddr)->sin_port : \
-               ((struct sockaddr_in6 *) &(peer)->saddr)->sin6_port)
-#else /* AF_INET6 */
-#define rx_HostOf(peer)                        (((struct sockaddr_in *) &(peer)->saddr)->sin_addr.saddr)
-#define rx_PortOf(peer)                        (((struct sockaddr_in *) &(peer)->saddr)->sin_port)
-#endif /* AF_INET6 */
-#define rx_AddrStringOf(peer)          ((peer)->addrstring)
+#define        rx_HostOf(peer)                 ((peer)->host)
+#define        rx_PortOf(peer)                 ((peer)->port)
 #define        rx_SetLocalStatus(call, status) ((call)->localStatus = (status))
 #define rx_GetLocalStatus(call, status) ((call)->localStatus)
 #define        rx_GetRemoteStatus(call)        ((call)->remoteStatus)
@@ -358,10 +348,6 @@ struct rx_serverQueueEntry {
     osi_socket *socketp;
 };
 
-/* If we don't support IPv6, use this as a fallback */
-#ifndef INET6_ADDRSTRLEN
-#define INET6_ADDRSTRLEN 46
-#endif /* INET6_ADDRSTRLEN */
 
 /* A peer refers to a peer process, specified by a (host,port) pair.  There may be more than one peer on a given host. */
 #ifdef KDUMP_RX_LOCK
@@ -374,10 +360,8 @@ struct rx_peer {
 #ifdef RX_ENABLE_LOCKS
     afs_kmutex_t peer_lock;    /* Lock peer */
 #endif                         /* RX_ENABLE_LOCKS */
-    struct sockaddr_storage saddr;     /* Remote address structure */
-    int saddrlen;                      /* Length of saddr */
-    int socktype;                      /* Socket type (SOCK_DGRAM, etc) */
-    char addrstring[INET6_ADDRSTRLEN];  /* Printable address format */
+    afs_uint32 host;           /* Remote IP address, in net byte order */
+    u_short port;              /* Remote UDP port, in net byte order */
 
     /* interface mtu probably used for this host  -  includes RX Header */
     u_short ifMTU;             /* doesn't include IP header */
@@ -1051,27 +1035,7 @@ typedef struct rx_interface_stat {
 
 #define RX_STATS_SERVICE_ID 409
 
-/*
- * Definitions for handling struct sockaddr_storage casts, and IPv6
- */
 
-#ifdef AF_INET6
-#define rx_ss2pn(x) ((x)->ss_family == AF_INET6 ? \
-                       ((struct sockaddr_in6 *) (x))->sin6_port : \
-                       ((struct sockaddr_in *) (x))->sin_port)
-#define rx_ss2sin6(x) ((struct sockaddr_in6 *) (x))
-#define rx_ssfamily(x) ((x)->ss_family)
-#define rx_ss2addrp6(x) ((afs_uint16 *) &(((struct sockaddr_in6 *) (x))->sin6_addr.s6_addr))
-#define rx_ss2v4addr(x) ((x)->ss_family == AF_INET ? \
-                       ((struct sockaddr_in *) (x))->sin_addr.s_addr : \
-                       0xffffffff)
-#else /* AF_INET6 */
-#define rx_ss2pn(x) (((struct sockaddr_in *) (x))->sin_port)
-#define rx_ssfamily(x) (((struct sockaddr_in *) (x))->sin_family)
-#define rx_ss2v4addr(x) (((struct sockaddr_in *) (x))->sin_addr.s_addr)
-#endif /* AF_INET6 */
-#define rx_ss2sin(x) ((struct sockaddr_in *) (x))
-#define rx_ss2addrp(x) ((unsigned char *) &(((struct sockaddr_in *) (x))->sin_addr.s_addr))
 
 #endif /* _RX_   End of rx.h */
 
index c8de2ac..7367198 100644 (file)
@@ -493,9 +493,7 @@ EXT afs_kmutex_t rx_connHashTable_lock;
 
 #define CONN_HASH(host, port, cid, epoch, type) ((((cid)>>RX_CIDSHIFT)%rx_hashTableSize))
 
-#if 0
 #define PEER_HASH(host, port)  ((host ^ port) % rx_hashTableSize)
-#endif
 
 /* Forward definitions of internal procedures */
 #define        rxi_ChallengeOff(conn)  rxevent_Cancel((conn)->challengeEvent, (struct rx_call*)0, 0);
index 37997db..a63c279 100644 (file)
@@ -30,7 +30,7 @@ int (*rxk_PacketArrivalProc) (struct rx_packet * ahandle, struct sockaddr_in * a
 int (*rxk_GetPacketProc) (struct rx_packet **ahandle, int asize);
 #endif
 
-osi_socket *rxk_NewSocketHost(struct sockaddr_storage *saddr, int salen);
+osi_socket *rxk_NewSocketHost(afs_uint32 ahost, short aport);
 extern struct interfaceAddr afs_cb_interface;
 
 rxk_ports_t rxk_ports;
@@ -108,29 +108,20 @@ rxk_shutdownPorts(void)
 }
 
 osi_socket
-rxi_GetHostUDPSocket(struct sockaddr_storage *saddr, int salen)
+rxi_GetHostUDPSocket(u_int host, u_short port)
 {
     osi_socket *sockp;
-    sockp = (osi_socket *)rxk_NewSocketHost(saddr, salen);
+    sockp = (osi_socket *)rxk_NewSocketHost(host, port);
     if (sockp == (osi_socket *)0)
        return OSI_NULLSOCKET;
-    rxk_AddPort(rx_ss2pn(saddr), (char *)sockp);
+    rxk_AddPort(port, (char *)sockp);
     return (osi_socket) sockp;
 }
 
 osi_socket
 rxi_GetUDPSocket(u_short port)
 {
-    struct sockaddr_storage saddr;
-    struct sockaddr_in *sin = (struct sockaddr_in *) &saddr;
-
-    memset((void *) &saddr, 0, sizeof(saddr));
-
-    sin->sin_family = AF_INET;
-    sin->sin_addr.s_addr = htonl(INADDR_ANY);
-    sin->sin_port = port;
-
-    return rxi_GetHostUDPSocket(&saddr, sizeof(struct sockaddr_in));
+    return rxi_GetHostUDPSocket(htonl(INADDR_ANY), port);
 }
 
 #if !defined(AFS_LINUX26_ENV)
@@ -359,8 +350,9 @@ MyArrivalProc(struct rx_packet *ahandle,
     ahandle->length = asize - RX_HEADER_SIZE;
     rxi_DecodePacketHeader(ahandle);
     ahandle =
-       rxi_ReceivePacket(ahandle, arock, (struct sockaddr_storage *) afrom,
-                         NULL, NULL);
+       rxi_ReceivePacket(ahandle, arock,
+                         afrom->sin_addr.s_addr, afrom->sin_port, NULL,
+                         NULL);
 
     /* free the packet if it has been returned */
     if (ahandle)
@@ -391,7 +383,7 @@ rxi_InitPeerParams(register struct rx_peer *pp)
 #ifdef ADAPT_MTU
 #ifndef AFS_SUN5_ENV
 #ifdef AFS_USERSPACE_IP_ADDR
-    i = rxi_Findcbi(rx_HostOf(pp));
+    i = rxi_Findcbi(pp->host);
     if (i == -1) {
        pp->timeout.sec = 3;
        /* pp->timeout.usec = 0; */
@@ -421,7 +413,7 @@ rxi_InitPeerParams(register struct rx_peer *pp)
        (void)rxi_GetIFInfo();
 #endif
 
-    ifn = rxi_FindIfnet(rx_HostOf(pp), NULL);
+    ifn = rxi_FindIfnet(pp->host, NULL);
     if (ifn) {
        pp->timeout.sec = 2;
        /* pp->timeout.usec = 0; */
@@ -447,7 +439,7 @@ rxi_InitPeerParams(register struct rx_peer *pp)
     }
 #endif /* else AFS_USERSPACE_IP_ADDR */
 #else /* AFS_SUN5_ENV */
-    mtu = rxi_FindIfMTU(rx_HostOf(pp));
+    mtu = rxi_FindIfMTU(pp->host);
 
     if (mtu <= 0) {
        pp->timeout.sec = 3;
@@ -851,7 +843,7 @@ rxi_FindIfnet(afs_uint32 addr, afs_uint32 * maskp)
  * in network byte order.
  */
 osi_socket *
-rxk_NewSocketHost(struct sockaddr_storage *saddr, int salen)
+rxk_NewSocketHost(afs_uint32 ahost, short aport)
 {
     register afs_int32 code;
 #ifdef AFS_DARWIN80_ENV
@@ -862,6 +854,7 @@ rxk_NewSocketHost(struct sockaddr_storage *saddr, int salen)
 #if (!defined(AFS_HPUX1122_ENV) && !defined(AFS_FBSD50_ENV))
     struct mbuf *nam;
 #endif
+    struct sockaddr_in myaddr;
 #ifdef AFS_HPUX110_ENV
     /* prototype copied from kernel source file streams/str_proto.h */
     extern MBLKP allocb_wait(int, int);
@@ -885,7 +878,7 @@ rxk_NewSocketHost(struct sockaddr_storage *saddr, int salen)
     /* we need a file associated with the socket so sosend in NetSend 
      * will not fail */
     /* blocking socket */
-    code = socreate(rx_ssfamily(saddr), &newSocket, SOCK_DGRAM, 0, 0);
+    code = socreate(AF_INET, &newSocket, SOCK_DGRAM, 0, 0);
     fp = falloc();
     if (!fp)
        goto bad;
@@ -897,32 +890,38 @@ rxk_NewSocketHost(struct sockaddr_storage *saddr, int salen)
     newSocket->so_fp = (void *)fp;
 
 #else /* AFS_HPUX110_ENV */
-    code = socreate(rx_ssfamilty(saddr), &newSocket, SOCK_DGRAM, 0, SS_NOWAIT);
+    code = socreate(AF_INET, &newSocket, SOCK_DGRAM, 0, SS_NOWAIT);
 #endif /* else AFS_HPUX110_ENV */
 #elif defined(AFS_SGI65_ENV) || defined(AFS_OBSD_ENV)
-    code = socreate(rx_ssfamily(saddr), &newSocket, SOCK_DGRAM, IPPROTO_UDP);
+    code = socreate(AF_INET, &newSocket, SOCK_DGRAM, IPPROTO_UDP);
 #elif defined(AFS_FBSD50_ENV)
-    code = socreate(rx_ssfamily(saddr), &newSocket, SOCK_DGRAM, IPPROTO_UDP,
+    code = socreate(AF_INET, &newSocket, SOCK_DGRAM, IPPROTO_UDP,
                    afs_osi_credp, curthread);
 #elif defined(AFS_FBSD40_ENV)
-    code = socreate(rx_ssfamily(saddr), &newSocket, SOCK_DGRAM, IPPROTO_UDP,
-                   curproc);
+    code = socreate(AF_INET, &newSocket, SOCK_DGRAM, IPPROTO_UDP, curproc);
 #elif defined(AFS_DARWIN80_ENV)
-    code = sock_socket(rx_ssfamily(saddr), SOCK_DGRAM, IPPROTO_UDP, NULL, NULL,
-                      &newSocket);
+    code = sock_socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP, NULL, NULL, &newSocket);
 #else
-    code = socreate(rx_ssfamily(saddr), &newSocket, SOCK_DGRAM, 0);
+    code = socreate(AF_INET, &newSocket, SOCK_DGRAM, 0);
 #endif /* AFS_HPUX102_ENV */
     if (code)
        goto bad;
 
+    memset(&myaddr, 0, sizeof myaddr);
+    myaddr.sin_family = AF_INET;
+    myaddr.sin_port = aport;
+    myaddr.sin_addr.s_addr = ahost;
+#ifdef STRUCT_SOCKADDR_HAS_SA_LEN
+    myaddr.sin_len = sizeof(myaddr);
+#endif
+
 #ifdef AFS_HPUX110_ENV
     bindnam = allocb_wait((addrsize + SO_MSGOFFSET + 1), BPRI_MED);
     if (!bindnam) {
        setuerror(ENOBUFS);
        goto bad;
     }
-    memcpy((caddr_t) bindnam->b_rptr + SO_MSGOFFSET, (caddr_t) addr,
+    memcpy((caddr_t) bindnam->b_rptr + SO_MSGOFFSET, (caddr_t) & myaddr,
           addrsize);
     bindnam->b_wptr = bindnam->b_rptr + (addrsize + SO_MSGOFFSET + 1);
 
@@ -963,11 +962,11 @@ rxk_NewSocketHost(struct sockaddr_storage *saddr, int salen)
 #endif
 #if defined(AFS_DARWIN_ENV) || defined(AFS_FBSD_ENV)
 #if defined(AFS_FBSD50_ENV)
-    code = sobind(newSocket, (struct sockaddr *) saddr, curthread);
+    code = sobind(newSocket, (struct sockaddr *)&myaddr, curthread);
 #elif defined(AFS_FBSD40_ENV)
-    code = sobind(newSocket, (struct sockaddr *) saddr, curproc);
+    code = sobind(newSocket, (struct sockaddr *)&myaddr, curproc);
 #else
-    code = sobind(newSocket, (struct sockaddr *) saddr);
+    code = sobind(newSocket, (struct sockaddr *)&myaddr);
 #endif
     if (code) {
        dpf(("sobind fails (%d)\n", (int)code));
@@ -987,8 +986,8 @@ rxk_NewSocketHost(struct sockaddr_storage *saddr, int salen)
 #endif
        goto bad;
     }
-    nam->m_len = salen;
-    memcpy(mtod(nam, caddr_t), saddr, salen);
+    nam->m_len = sizeof(myaddr);
+    memcpy(mtod(nam, caddr_t), &myaddr, sizeof(myaddr));
 #ifdef AFS_SGI65_ENV
     BHV_PDATA(&bhv) = (void *)newSocket;
     code = sobind(&bhv, nam);
@@ -1024,16 +1023,7 @@ rxk_NewSocketHost(struct sockaddr_storage *saddr, int salen)
 osi_socket *
 rxk_NewSocket(short aport)
 {
-    struct sockaddr_storage saddr;
-    struct sockaddr_in *sin = (struct sockaddr_in *) &saddr;
-
-    memset((void *) &saddr, 0, sizeof(saddr));
-
-    sin->sin_family = AF_INET;
-    sin->sin_addr.s_addr = 0;
-    sin->sin_port = aport;
-
-    return rxk_NewSocketHost(&saddr, sizeof(struct sockaddr_in));
+    return rxk_NewSocketHost(0, aport);
 }
 
 /* free socket allocated by rxk_NewSocket */
@@ -1110,10 +1100,10 @@ afs_rxevent_daemon(void)
 
 /* rxk_ReadPacket returns 1 if valid packet, 0 on error. */
 int
-rxk_ReadPacket(osi_socket so, struct rx_packet *p,
-              struct sockaddr_storage *saddr, int *slen)
+rxk_ReadPacket(osi_socket so, struct rx_packet *p, int *host, int *port)
 {
     int code;
+    struct sockaddr_in from;
     int nbytes;
     afs_int32 rlen;
     register afs_int32 tlen;
@@ -1149,8 +1139,7 @@ rxk_ReadPacket(osi_socket so, struct rx_packet *p,
        AFS_GUNLOCK();
     }
 #endif
-    code = osi_NetReceive(rx_socket, saddr, slen, p->wirevec, p->niovecs,
-                         &nbytes);
+    code = osi_NetReceive(rx_socket, &from, p->wirevec, p->niovecs, &nbytes);
 
 #ifdef RX_KERNEL_TRACE
     if (ICL_SETACTIVE(afs_iclSetp)) {
@@ -1169,26 +1158,18 @@ rxk_ReadPacket(osi_socket so, struct rx_packet *p,
            if (nbytes <= 0) {
                MUTEX_ENTER(&rx_stats_mutex);
                rx_stats.bogusPacketOnRead++;
-               switch (rx_ssfamily(saddr)) {
-               case AF_INET:
-                   rx_stats.bogusHost = rx_ss2sin(saddr)->sin_addr.s_addr;
-                   break;
-               default:
-#ifdef AF_INET6
-               case AF_INET6:
-#endif /* AF_INET6 */
-                   rx_stats.bogusHost = 0xffffffff;
-               }
+               rx_stats.bogusHost = from.sin_addr.s_addr;
                MUTEX_EXIT(&rx_stats_mutex);
                dpf(("B: bogus packet from [%x,%d] nb=%d",
-                   ntohl(rx_ss2v4addr(saddr)), ntohs(rx_ss2pn(saddr)),
-                   nbytes));
+                    from.sin_addr.s_addr, from.sin_port, nbytes));
            }
            return -1;
        } else {
            /* Extract packet header. */
            rxi_DecodePacketHeader(p);
 
+           *host = from.sin_addr.s_addr;
+           *port = from.sin_port;
            if (p->header.type > 0 && p->header.type < RX_N_PACKET_TYPES) {
                MUTEX_ENTER(&rx_stats_mutex);
                rx_stats.packetsRead[p->header.type - 1]++;
@@ -1243,8 +1224,8 @@ rxk_Listener(void)
 #endif                         /* AFS_SUN5_ENV */
 {
     struct rx_packet *rxp = NULL;
-    struct sockaddr_storage saddr;
-    int code, slen;
+    int code;
+    int host, port;
 
 #ifdef AFS_LINUX20_ENV
     rxk_ListenerPid = current->pid;
@@ -1271,8 +1252,8 @@ rxk_Listener(void)
            if (!rxp)
                osi_Panic("rxk_Listener: No more Rx buffers!\n");
        }
-       if (!(code = rxk_ReadPacket(rx_socket, rxp, &saddr, &slen))) {
-           rxp = rxi_ReceivePacket(rxp, rx_socket, &saddr, slen, 0, 0);
+       if (!(code = rxk_ReadPacket(rx_socket, rxp, &host, &port))) {
+           rxp = rxi_ReceivePacket(rxp, rx_socket, host, port, 0, 0);
        }
     }
 
index 40b01db..4861410 100644 (file)
@@ -163,8 +163,8 @@ rxi_StartListener(void)
 static void
 rxi_ListenerProc(fd_set * rfds, int *tnop, struct rx_call **newcallp)
 {
-    struct sockaddr_storage saddr;
-    int slen;
+    afs_uint32 host;
+    u_short port;
     register struct rx_packet *p = (struct rx_packet *)0;
     osi_socket socket;
     struct clock cv;
@@ -274,10 +274,9 @@ rxi_ListenerProc(fd_set * rfds, int *tnop, struct rx_call **newcallp)
 #ifdef AFS_NT40_ENV
            for (i = 0; p && i < rfds->fd_count; i++) {
                socket = rfds->fd_array[i];
-               slen = sizeof(saddr);
-               if (rxi_ReadPacket(socket, p, &saddr, &slen)) {
+               if (rxi_ReadPacket(socket, p, &host, &port)) {
                    *newcallp = NULL;
-                   p = rxi_ReceivePacket(p, socket, &saddr, slen, tnop,
+                   p = rxi_ReceivePacket(p, socket, host, port, tnop,
                                          newcallp);
                    if (newcallp && *newcallp) {
                        if (p) {
@@ -296,9 +295,8 @@ rxi_ListenerProc(fd_set * rfds, int *tnop, struct rx_call **newcallp)
                 p && socket <= rx_maxSocketNumber; socket++) {
                if (!FD_ISSET(socket, rfds))
                    continue;
-               slen = sizeof(saddr);
-               if (rxi_ReadPacket(socket, p, &saddr, &slen)) {
-                   p = rxi_ReceivePacket(p, socket, &saddr, slen, tnop,
+               if (rxi_ReadPacket(socket, p, &host, &port)) {
+                   p = rxi_ReceivePacket(p, socket, host, port, tnop,
                                          newcallp);
                    if (newcallp && *newcallp) {
                        if (p) {
index 804cf38..64b79f1 100644 (file)
@@ -112,7 +112,7 @@ extern int (*rx_almostSent) ();
 static int AllocPacketBufs(int class, int num_pkts, struct rx_queue *q);
 
 static void rxi_SendDebugPacket(struct rx_packet *apacket, osi_socket asocket,
-                               struct sockaddr_storage *saddr, int slen,
+                               afs_int32 ahost, short aport,
                                afs_int32 istack);
 
 static int rxi_FreeDataBufsToQueue(struct rx_packet *p, int first, 
@@ -1350,9 +1350,10 @@ CountFDs(register int amax)
  * the data length of the packet is stored in the packet structure.
  * The header is decoded. */
 int
-rxi_ReadPacket(osi_socket socket, register struct rx_packet *p,
-              struct sockaddr_storage *saddr, int *slen)
+rxi_ReadPacket(osi_socket socket, register struct rx_packet *p, afs_uint32 * host,
+              u_short * port)
 {
+    struct sockaddr_in from;
     int nbytes;
     afs_int32 rlen;
     register afs_int32 tlen, savelen;
@@ -1382,12 +1383,11 @@ rxi_ReadPacket(osi_socket socket, register struct rx_packet *p,
     p->wirevec[p->niovecs - 1].iov_len += RX_EXTRABUFFERSIZE;
 
     memset((char *)&msg, 0, sizeof(msg));
-    msg.msg_name = (char *)saddr;
-    msg.msg_namelen = *slen;
+    msg.msg_name = (char *)&from;
+    msg.msg_namelen = sizeof(struct sockaddr_in);
     msg.msg_iov = p->wirevec;
     msg.msg_iovlen = p->niovecs;
     nbytes = rxi_Recvmsg(socket, &msg, 0);
-    *slen = msg.msg_namelen;
 
     /* restore the vec to its correct state */
     p->wirevec[p->niovecs - 1].iov_len = savelen;
@@ -1401,20 +1401,10 @@ rxi_ReadPacket(osi_socket socket, register struct rx_packet *p,
        } else if (nbytes <= 0) {
            MUTEX_ENTER(&rx_stats_mutex);
            rx_stats.bogusPacketOnRead++;
-           switch (rx_ssfamily(saddr)) {
-               case AF_INET:
-                   rx_stats.bogusHost = rx_ss2sin(saddr)->sin_addr.s_addr;
-                   break;
-               default:
-#ifdef AF_INET6
-               case AF_INET6:
-#endif /* AF_INET6 */
-                   rx_stats.bogusHost = 0xffffffff;
-               break;
-           }
+           rx_stats.bogusHost = from.sin_addr.s_addr;
            MUTEX_EXIT(&rx_stats_mutex);
-           dpf(("B: bogus packet from [%x,%d] nb=%d",
-                ntohl(rx_ss2v4addr(saddr)), ntohs(rx_ss2pn(saddr)), nbytes));
+           dpf(("B: bogus packet from [%x,%d] nb=%d", ntohl(from.sin_addr.s_addr),
+                ntohs(from.sin_port), nbytes));
        }
        return 0;
     } 
@@ -1423,8 +1413,11 @@ rxi_ReadPacket(osi_socket socket, register struct rx_packet *p,
                && (random() % 100 < rx_intentionallyDroppedOnReadPer100)) {
        rxi_DecodePacketHeader(p);
 
+       *host = from.sin_addr.s_addr;
+       *port = from.sin_port;
+
        dpf(("Dropped %d %s: %x.%u.%u.%u.%u.%u.%u flags %d len %d",
-             p->header.serial, rx_packetTypes[p->header.type - 1], ntohl(rx_ss2v4addr(saddr)), ntohs(rx_ss2pn(saddr)), p->header.serial, 
+             p->header.serial, rx_packetTypes[p->header.type - 1], ntohl(*host), ntohs(*port), p->header.serial, 
              p->header.epoch, p->header.cid, p->header.callNumber, p->header.seq, p->header.flags, 
              p->length));
        rxi_TrimDataBufs(p, 1);
@@ -1435,6 +1428,8 @@ rxi_ReadPacket(osi_socket socket, register struct rx_packet *p,
        /* Extract packet header. */
        rxi_DecodePacketHeader(p);
 
+       *host = from.sin_addr.s_addr;
+       *port = from.sin_port;
        if (p->header.type > 0 && p->header.type < RX_N_PACKET_TYPES) {
            struct rx_peer *peer;
            MUTEX_ENTER(&rx_stats_mutex);
@@ -1451,7 +1446,7 @@ rxi_ReadPacket(osi_socket socket, register struct rx_packet *p,
             * and this packet was an rxdebug packet, the peer structure would
             * never be cleaned up.
             */
-           peer = rxi_FindPeer(saddr, *slen, SOCK_DGRAM, 0, 0);
+           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
@@ -1481,8 +1476,8 @@ rxi_ReadPacket(osi_socket socket, register struct rx_packet *p,
  * last two pad bytes. */
 
 struct rx_packet *
-rxi_SplitJumboPacket(register struct rx_packet *p,
-                    struct sockaddr_storage *saddr, int slen, int first)
+rxi_SplitJumboPacket(register struct rx_packet *p, afs_int32 host, short port,
+                    int first)
 {
     struct rx_packet *np;
     struct rx_jumboHeader *jp;
@@ -1544,8 +1539,8 @@ rxi_SplitJumboPacket(register struct rx_packet *p,
 #ifndef KERNEL
 /* Send a udp datagram */
 int
-osi_NetSend(osi_socket socket, void *addr, int addrlen, struct iovec *dvec,
-           int nvecs, int length, int istack)
+osi_NetSend(osi_socket socket, void *addr, struct iovec *dvec, int nvecs,
+           int length, int istack)
 {
     struct msghdr msg;
        int ret;
@@ -1554,7 +1549,7 @@ osi_NetSend(osi_socket socket, void *addr, int addrlen, struct iovec *dvec,
     msg.msg_iov = dvec;
     msg.msg_iovlen = nvecs;
     msg.msg_name = addr;
-    msg.msg_namelen = addrlen;
+    msg.msg_namelen = sizeof(struct sockaddr_in);
 
     ret = rxi_Sendmsg(socket, &msg, 0);
 
@@ -1712,7 +1707,7 @@ rx_mb_to_packet(amb, free, hdr_len, data_len, phandle)
 
 struct rx_packet *
 rxi_ReceiveDebugPacket(register struct rx_packet *ap, osi_socket asocket,
-                      struct sockaddr_storage *saddr, int slen, int istack)
+                      afs_int32 ahost, short aport, int istack)
 {
     struct rx_debugIn tin;
     afs_int32 tl;
@@ -1765,7 +1760,7 @@ rxi_ReceiveDebugPacket(register struct rx_packet *ap, osi_socket asocket,
                rx_packetwrite(ap, 0, sizeof(struct rx_debugStats),
                               (char *)&tstat);
                ap->length = sizeof(struct rx_debugStats);
-               rxi_SendDebugPacket(ap, asocket, saddr, slen, istack);
+               rxi_SendDebugPacket(ap, asocket, ahost, aport, istack);
                rx_computelen(ap, ap->length);
            }
            break;
@@ -1806,18 +1801,8 @@ rxi_ReceiveDebugPacket(register struct rx_packet *ap, osi_socket asocket,
                for (tc = rx_connHashTable[i]; tc; tc = tc->next) {
                    if ((all || rxi_IsConnInteresting(tc))
                        && tin.index-- <= 0) {
-                       switch (rx_ssfamily(&tc->peer->saddr)) {
-                       case AF_INET:
-                           tconn.host = rx_ss2sin(&tc->peer->saddr)->sin_addr.s_addr;
-                           break;
-                       default:
-#ifdef AF_INET6
-                       case AF_INET6:
-#endif /* AF_INET6 */
-                           tconn.host = 0xffffffff;
-                           break;
-                       }
-                       tconn.port = rx_ss2pn(&tc->peer->saddr);
+                       tconn.host = tc->peer->host;
+                       tconn.port = tc->peer->port;
                        tconn.cid = htonl(tc->cid);
                        tconn.epoch = htonl(tc->epoch);
                        tconn.serial = htonl(tc->serial);
@@ -1868,7 +1853,7 @@ rxi_ReceiveDebugPacket(register struct rx_packet *ap, osi_socket asocket,
                                       (char *)&tconn);
                        tl = ap->length;
                        ap->length = sizeof(struct rx_debugConn);
-                       rxi_SendDebugPacket(ap, asocket, saddr, slen,
+                       rxi_SendDebugPacket(ap, asocket, ahost, aport,
                                            istack);
                        ap->length = tl;
                        return ap;
@@ -1882,7 +1867,7 @@ rxi_ReceiveDebugPacket(register struct rx_packet *ap, osi_socket asocket,
                           (char *)&tconn);
            tl = ap->length;
            ap->length = sizeof(struct rx_debugConn);
-           rxi_SendDebugPacket(ap, asocket, saddr, slen, istack);
+           rxi_SendDebugPacket(ap, asocket, ahost, aport, istack);
            ap->length = tl;
            break;
        }
@@ -1924,18 +1909,8 @@ rxi_ReceiveDebugPacket(register struct rx_packet *ap, osi_socket asocket,
                MUTEX_ENTER(&rx_peerHashTable_lock);
                for (tp = rx_peerHashTable[i]; tp; tp = tp->next) {
                    if (tin.index-- <= 0) {
-                       switch (rx_ssfamily(&tp->saddr)) {
-                       case AF_INET:
-                           tpeer.host = rx_ss2sin(&tp->saddr)->sin_addr.s_addr;
-                           break;
-                       default:
-#ifdef AF_INET6
-                       case AF_INET6:
-#endif /* AF_INET6 */
-                           tpeer.host = 0xffffffff;
-                           break;
-                       }
-                       tpeer.port = rx_ss2pn(&tp->saddr);
+                       tpeer.host = tp->host;
+                       tpeer.port = tp->port;
                        tpeer.ifMTU = htons(tp->ifMTU);
                        tpeer.idleWhen = htonl(tp->idleWhen);
                        tpeer.refCount = htons(tp->refCount);
@@ -1972,7 +1947,7 @@ rxi_ReceiveDebugPacket(register struct rx_packet *ap, osi_socket asocket,
                                       (char *)&tpeer);
                        tl = ap->length;
                        ap->length = sizeof(struct rx_debugPeer);
-                       rxi_SendDebugPacket(ap, asocket, saddr, slen,
+                       rxi_SendDebugPacket(ap, asocket, ahost, aport,
                                            istack);
                        ap->length = tl;
                        return ap;
@@ -1986,7 +1961,7 @@ rxi_ReceiveDebugPacket(register struct rx_packet *ap, osi_socket asocket,
                           (char *)&tpeer);
            tl = ap->length;
            ap->length = sizeof(struct rx_debugPeer);
-           rxi_SendDebugPacket(ap, asocket, saddr, slen, istack);
+           rxi_SendDebugPacket(ap, asocket, ahost, aport, istack);
            ap->length = tl;
            break;
        }
@@ -2010,7 +1985,7 @@ rxi_ReceiveDebugPacket(register struct rx_packet *ap, osi_socket asocket,
            tl = ap->length;
            ap->length = sizeof(rx_stats);
            MUTEX_EXIT(&rx_stats_mutex);
-           rxi_SendDebugPacket(ap, asocket, saddr, slen, istack);
+           rxi_SendDebugPacket(ap, asocket, ahost, aport, istack);
            ap->length = tl;
            break;
        }
@@ -2022,7 +1997,7 @@ rxi_ReceiveDebugPacket(register struct rx_packet *ap, osi_socket asocket,
        rx_packetwrite(ap, 0, sizeof(struct rx_debugIn), (char *)&tin);
        tl = ap->length;
        ap->length = sizeof(struct rx_debugIn);
-       rxi_SendDebugPacket(ap, asocket, saddr, slen, istack);
+       rxi_SendDebugPacket(ap, asocket, ahost, aport, istack);
        ap->length = tl;
        break;
     }
@@ -2031,7 +2006,7 @@ rxi_ReceiveDebugPacket(register struct rx_packet *ap, osi_socket asocket,
 
 struct rx_packet *
 rxi_ReceiveVersionPacket(register struct rx_packet *ap, osi_socket asocket,
-                        struct sockaddr_storage *saddr, int slen, int istack)
+                        afs_int32 ahost, short aport, int istack)
 {
     afs_int32 tl;
 
@@ -2049,7 +2024,7 @@ rxi_ReceiveVersionPacket(register struct rx_packet *ap, osi_socket asocket,
        rx_packetwrite(ap, 0, 65, buf);
        tl = ap->length;
        ap->length = 65;
-       rxi_SendDebugPacket(ap, asocket, saddr, slen, istack);
+       rxi_SendDebugPacket(ap, asocket, ahost, aport, istack);
        ap->length = tl;
     }
 
@@ -2060,8 +2035,9 @@ rxi_ReceiveVersionPacket(register struct rx_packet *ap, osi_socket asocket,
 /* send a debug packet back to the sender */
 static void
 rxi_SendDebugPacket(struct rx_packet *apacket, osi_socket asocket,
-                   struct sockaddr_storage *saddr, int slen, afs_int32 istack)
+                   afs_int32 ahost, short aport, afs_int32 istack)
 {
+    struct sockaddr_in taddr;
     int i;
     int nbytes;
     int saven = 0;
@@ -2070,6 +2046,13 @@ rxi_SendDebugPacket(struct rx_packet *apacket, osi_socket asocket,
     int waslocked = ISAFS_GLOCK();
 #endif
 
+    taddr.sin_family = AF_INET;
+    taddr.sin_port = aport;
+    taddr.sin_addr.s_addr = ahost;
+#ifdef STRUCT_SOCKADDR_HAS_SA_LEN
+    taddr.sin_len = sizeof(struct sockaddr_in);
+#endif
+
     /* We need to trim the niovecs. */
     nbytes = apacket->length;
     for (i = 1; i < apacket->niovecs; i++) {
@@ -2096,7 +2079,7 @@ rxi_SendDebugPacket(struct rx_packet *apacket, osi_socket asocket,
 #endif
 #endif
     /* debug packets are not reliably delivered, hence the cast below. */
-    (void)osi_NetSend(asocket, saddr, slen, apacket->wirevec, apacket->niovecs,
+    (void)osi_NetSend(asocket, &taddr, apacket->wirevec, apacket->niovecs,
                      apacket->length + RX_HEADER_SIZE, istack);
 #ifdef KERNEL
 #ifdef RX_KERNEL_TRACE
@@ -2130,11 +2113,18 @@ rxi_SendPacket(struct rx_call *call, struct rx_connection *conn,
     int waslocked;
 #endif
     int code;
+    struct sockaddr_in addr;
     register struct rx_peer *peer = conn->peer;
     osi_socket socket;
 #ifdef RXDEBUG
     char deliveryType = 'S';
 #endif
+    /* The address we're sending the packet to */
+    memset(&addr, 0, sizeof(addr));
+    addr.sin_family = AF_INET;
+    addr.sin_port = peer->port;
+    addr.sin_addr.s_addr = peer->host;
+
     /* This stuff should be revamped, I think, so that most, if not
      * all, of the header stuff is always added here.  We could
      * probably do away with the encode/decode routines. XXXXX */
@@ -2159,7 +2149,7 @@ rxi_SendPacket(struct rx_call *call, struct rx_connection *conn,
     /* If an output tracer function is defined, call it with the packet and
      * network address.  Note this function may modify its arguments. */
     if (rx_almostSent) {
-       int drop = (*rx_almostSent) (p, &peer->saddr);
+       int drop = (*rx_almostSent) (p, &addr);
        /* drop packet if return value is non-zero? */
        if (drop)
            deliveryType = 'D'; /* Drop the packet */
@@ -2206,9 +2196,8 @@ rxi_SendPacket(struct rx_call *call, struct rx_connection *conn,
 #endif
 #endif
        if ((code =
-            osi_NetSend(socket, &peer->saddr, peer->saddrlen, p->wirevec,
-                        p->niovecs, p->length + RX_HEADER_SIZE,
-                        istack)) != 0) {
+            osi_NetSend(socket, &addr, p->wirevec, p->niovecs,
+                        p->length + RX_HEADER_SIZE, istack)) != 0) {
            /* send failed, so let's hurry up the resend, eh? */
            MUTEX_ENTER(&rx_stats_mutex);
            rx_stats.netSendFailures++;
@@ -2252,7 +2241,7 @@ rxi_SendPacket(struct rx_call *call, struct rx_connection *conn,
 #endif
 #ifdef RXDEBUG
     }
-    dpf(("%c %d %s: %s.%u.%u.%u.%u.%u.%u flags %d, packet %lx resend %d.%0.3d len %d", deliveryType, p->header.serial, rx_packetTypes[p->header.type - 1], rx_AddrStringOf(peer), ntohs(rx_PortOf(peer)), p->header.serial, p->header.epoch, p->header.cid, p->header.callNumber, p->header.seq, p->header.flags, (unsigned long)p, p->retryTime.sec, p->retryTime.usec / 1000, p->length));
+    dpf(("%c %d %s: %x.%u.%u.%u.%u.%u.%u flags %d, packet %lx resend %d.%0.3d len %d", deliveryType, p->header.serial, rx_packetTypes[p->header.type - 1], ntohl(peer->host), ntohs(peer->port), p->header.serial, p->header.epoch, p->header.cid, p->header.callNumber, p->header.seq, p->header.flags, (unsigned long)p, p->retryTime.sec, p->retryTime.usec / 1000, p->length));
 #endif
     MUTEX_ENTER(&rx_stats_mutex);
     rx_stats.packetsSent[p->header.type - 1]++;
@@ -2272,6 +2261,7 @@ rxi_SendPacketList(struct rx_call *call, struct rx_connection *conn,
 #if     defined(AFS_SUN5_ENV) && defined(KERNEL)
     int waslocked;
 #endif
+    struct sockaddr_in addr;
     register struct rx_peer *peer = conn->peer;
     osi_socket socket;
     struct rx_packet *p = NULL;
@@ -2283,6 +2273,10 @@ rxi_SendPacketList(struct rx_call *call, struct rx_connection *conn,
 #ifdef RXDEBUG
     char deliveryType = 'S';
 #endif
+    /* The address we're sending the packet to */
+    addr.sin_family = AF_INET;
+    addr.sin_port = peer->port;
+    addr.sin_addr.s_addr = peer->host;
 
     if (len + 1 > RX_MAXIOVECS) {
        osi_Panic("rxi_SendPacketList, len > RX_MAXIOVECS\n");
@@ -2355,7 +2349,7 @@ rxi_SendPacketList(struct rx_call *call, struct rx_connection *conn,
        /* If an output tracer function is defined, call it with the packet and
         * network address.  Note this function may modify its arguments. */
        if (rx_almostSent) {
-           int drop = (*rx_almostSent) (p, &peer->saddr);
+           int drop = (*rx_almostSent) (p, &addr);
            /* drop packet if return value is non-zero? */
            if (drop)
                deliveryType = 'D';     /* Drop the packet */
@@ -2393,8 +2387,8 @@ rxi_SendPacketList(struct rx_call *call, struct rx_connection *conn,
            AFS_GUNLOCK();
 #endif
        if ((code =
-            osi_NetSend(socket, &peer->saddr, peer->saddrlen, &wirevec[0],
-                        len + 1, length, istack)) != 0) {
+            osi_NetSend(socket, &addr, &wirevec[0], len + 1, length,
+                        istack)) != 0) {
            /* send failed, so let's hurry up the resend, eh? */
            MUTEX_ENTER(&rx_stats_mutex);
            rx_stats.netSendFailures++;
@@ -2433,7 +2427,7 @@ rxi_SendPacketList(struct rx_call *call, struct rx_connection *conn,
 
     assert(p != NULL);
 
-    dpf(("%c %d %s: %s.%u.%u.%u.%u.%u.%u flags %d, packet %lx resend %d.%0.3d len %d", deliveryType, p->header.serial, rx_packetTypes[p->header.type - 1], rx_AddrStringOf(peer), ntohs(rx_PortOf(peer)), p->header.serial, p->header.epoch, p->header.cid, p->header.callNumber, p->header.seq, p->header.flags, (unsigned long)p, p->retryTime.sec, p->retryTime.usec / 1000, p->length));
+    dpf(("%c %d %s: %x.%u.%u.%u.%u.%u.%u flags %d, packet %lx resend %d.%0.3d len %d", deliveryType, p->header.serial, rx_packetTypes[p->header.type - 1], ntohl(peer->host), ntohs(peer->port), p->header.serial, p->header.epoch, p->header.cid, p->header.callNumber, p->header.seq, p->header.flags, (unsigned long)p, p->retryTime.sec, p->retryTime.usec / 1000, p->length));
 
 #endif
     MUTEX_ENTER(&rx_stats_mutex);
index 2b70886..40441f3 100644 (file)
@@ -14,8 +14,6 @@
 extern void rx_SetEpoch(afs_uint32 epoch);
 extern int rx_Init(u_int port);
 extern int rx_InitHost(u_int host, u_int port);
-extern int rx_InitAddrs(struct sockaddr_storage *saddrs, int *types,
-                       int *salens, int nelem);
 #ifdef AFS_NT40_ENV
 extern void rx_DebugOnOff(int on);
 #endif
@@ -28,11 +26,6 @@ extern struct rx_connection *rx_NewConnection(register afs_uint32 shost,
                                              register struct rx_securityClass
                                              *securityObject,
                                              int serviceSecurityIndex);
-extern struct rx_connection *rx_NewConnectionAddrs(struct sockaddr_storage *,
-                                                  int *types, int *salens,
-                                                  int nelem, u_short,
-                                                  struct rx_securityClass *,
-                                                  int);
 extern void rx_SetConnDeadTime(register struct rx_connection *conn,
                               register int seconds);
 extern void rxi_CleanupConnection(struct rx_connection *conn);
@@ -90,27 +83,26 @@ extern void rxi_FreeCall(register struct rx_call *call);
 
 extern char *rxi_Alloc(register size_t size);
 extern void rxi_Free(void *addr, register size_t size);
-extern struct rx_peer *rxi_FindPeer(struct sockaddr_storage *saddr, int slen,
-                                   int stype, struct rx_peer *origPeer,
-                                   int create);
+extern struct rx_peer *rxi_FindPeer(register afs_uint32 host,
+                                   register u_short port,
+                                   struct rx_peer *origPeer, int create);
 extern struct rx_connection *rxi_FindConnection(osi_socket socket,
-                                               struct sockaddr_storage *saddr,
-                                               int slen, int socktype,
+                                               register afs_int32 host,
+                                               register u_short port,
                                                u_short serviceId,
                                                afs_uint32 cid,
                                                afs_uint32 epoch, int type,
                                                u_int securityIndex);
 extern struct rx_packet *rxi_ReceivePacket(register struct rx_packet *np,
-                                          osi_socket socket,
-                                          struct sockaddr_storage *saddr,
-                                          int slen, int *tnop,
+                                          osi_socket socket, afs_uint32 host,
+                                          u_short port, int *tnop,
                                           struct rx_call **newcallp);
 extern int rxi_IsConnInteresting(struct rx_connection *aconn);
 extern struct rx_packet *rxi_ReceiveDataPacket(register struct rx_call *call,
                                               register struct rx_packet *np,
                                               int istack, osi_socket socket,
-                                              struct sockaddr_storage *saddr,
-                                              int slen, int *tnop,
+                                              afs_uint32 host, u_short port,
+                                              int *tnop,
                                               struct rx_call **newcallp);
 extern struct rx_packet *rxi_ReceiveAckPacket(register struct rx_call *call,
                                              struct rx_packet *np,
@@ -344,8 +336,7 @@ extern int rxk_initDone;
 extern int rxk_DelPort(u_short aport);
 extern void rxk_shutdownPorts(void);
 extern osi_socket rxi_GetUDPSocket(u_short port);
-extern osi_socket rxi_GetHostUDPSocket(struct sockaddr_storage *saddr,
-                                      int salen);
+extern osi_socket rxi_GetHostUDPSocket(u_int host, u_short port);
 #if defined(KERNEL) && defined(AFS_LINUX26_ENV)
 #define osi_Panic(msg...) do { printk(KERN_CRIT "openafs: " msg); BUG(); } while (0)
 #undef osi_Assert
@@ -371,8 +362,8 @@ extern int rxk_FreeSocket(register struct socket *asocket);
 extern osi_socket *rxk_NewSocket(short aport);
 #endif
 #endif
-extern int rxk_ReadPacket(osi_socket so, struct rx_packet *p,
-                         struct sockaddr_storage *saddr, int *slen);
+extern int rxk_ReadPacket(osi_socket so, struct rx_packet *p, int *host,
+                         int *port);
 #ifdef UKERNEL
 extern void rx_ServerProc(void);
 #endif
@@ -405,13 +396,12 @@ extern void afs_cv_timedwait(afs_kcondvar_t * cv, afs_kmutex_t * l,
 
 /* ARCH/rx_knet.c */
 #if defined(KERNEL) && !defined(AFS_SGI_ENV)
-extern int osi_NetSend(osi_socket asocket, struct sockaddr_storage *addr,
-                      int addrlen, struct iovec *dvec, int nvecs,
-                      afs_int32 asize, int istack);
+extern int osi_NetSend(osi_socket asocket, struct sockaddr_in *addr,
+                      struct iovec *dvec, int nvecs, afs_int32 asize,
+                      int istack);
 #endif
-extern int osi_NetReceive(osi_socket so, struct sockaddr_storage *saddr,
-                         int *slen, struct iovec *dvec, int nvecs,
-                         int *lengthp);
+extern int osi_NetReceive(osi_socket so, struct sockaddr_in *addr,
+                         struct iovec *dvec, int nvecs, int *lengthp);
 extern void osi_StopListener(void);
 extern int rxi_FindIfMTU(afs_uint32 addr);
 #ifndef RXK_LISTENER_ENV
@@ -495,22 +485,22 @@ extern int rxi_FreePackets(int num_pkts, struct rx_queue *q);
 extern struct rx_packet *rxi_AllocSendPacket(register struct rx_call *call,
                                             int want);
 extern int rxi_ReadPacket(osi_socket socket, register struct rx_packet *p,
-                         struct sockaddr_storage *saddr, int *slen);
+                         afs_uint32 * host, u_short * port);
 extern struct rx_packet *rxi_SplitJumboPacket(register struct rx_packet *p,
-                                             struct sockaddr_storage *saddr,
-                                             int slen, int first);
+                                             afs_int32 host, short port,
+                                             int first);
 #ifndef KERNEL
-extern int osi_NetSend(osi_socket socket, void *addr, int addrlen,
-                      struct iovec *dvec, int nvecs, int length, int istack);
+extern int osi_NetSend(osi_socket socket, void *addr, struct iovec *dvec,
+                      int nvecs, int length, int istack);
 #endif
 extern struct rx_packet *rxi_ReceiveDebugPacket(register struct rx_packet *ap,
                                                osi_socket asocket,
-                                               struct sockaddr_storage *saddr,
-                                               int slen, int istack);
+                                               afs_int32 ahost, short aport,
+                                               int istack);
 extern struct rx_packet *rxi_ReceiveVersionPacket(register struct rx_packet
                                                  *ap, osi_socket asocket,
-                                                 struct sockaddr_storage *,
-                                                 int slen, int istack);
+                                                 afs_int32 ahost,
+                                                 short aport, int istack);
 extern void rxi_SendPacket(struct rx_call *call, struct rx_connection *conn,
                           struct rx_packet *p, int istack);
 extern void rxi_SendPacketList(struct rx_call *call,
index b5cc1da..a03a5a0 100644 (file)
@@ -203,8 +203,8 @@ rxi_ReScheduleEvents(void)
 static void
 rxi_ListenerProc(int sock, int *tnop, struct rx_call **newcallp)
 {
-    struct sockaddr_storage saddr;
-    int slen;
+    unsigned int host;
+    u_short port;
     register struct rx_packet *p = (struct rx_packet *)0;
 
     assert(pthread_mutex_lock(&listener_mutex) == 0);
@@ -227,10 +227,9 @@ rxi_ListenerProc(int sock, int *tnop, struct rx_call **newcallp)
            }
        }
 
-       slen = sizeof(saddr);
-       if (rxi_ReadPacket(sock, p, &saddr, &slen)) {
+       if (rxi_ReadPacket(sock, p, &host, &port)) {
            clock_NewTime();
-           p = rxi_ReceivePacket(p, sock, &saddr, slen, tnop, newcallp);
+           p = rxi_ReceivePacket(p, sock, host, port, tnop, newcallp);
            if (newcallp && *newcallp) {
                if (p)
                    rxi_FreePacket(p);
index 8131695..bd59a87 100644 (file)
@@ -94,16 +94,16 @@ pthread_mutex_t rx_if_mutex;
  * failure. Port must be in network byte order.        
  */
 osi_socket
-rxi_GetHostUDPSocket(struct sockaddr_storage *saddr, int salen)
+rxi_GetHostUDPSocket(u_int ahost, u_short port)
 {
     int binds, code = 0;
     osi_socket socketFd = OSI_NULLSOCKET;
+    struct sockaddr_in taddr;
     char *name = "rxi_GetUDPSocket: ";
 #ifdef AFS_LINUX22_ENV
     int pmtu=IP_PMTUDISC_DONT;
 #endif
 
-#if 0
 #if !defined(AFS_NT40_ENV) 
     if (ntohs(port) >= IPPORT_RESERVED && ntohs(port) < IPPORT_USERRESERVED) {
 /*     (osi_Msg "%s*WARNING* port number %d is not a reserved port number.  Use port numbers above %d\n", name, port, IPPORT_USERRESERVED);
@@ -116,19 +116,24 @@ rxi_GetHostUDPSocket(struct sockaddr_storage *saddr, int salen)
        goto error;
     }
 #endif
-#endif
-    socketFd = socket(rx_ssfamily(saddr), SOCK_DGRAM, 0);
+    socketFd = socket(AF_INET, SOCK_DGRAM, 0);
 
     if (socketFd < 0) {
        perror("socket");
        goto error;
     }
 
+    taddr.sin_addr.s_addr = ahost;
+    taddr.sin_family = AF_INET;
+    taddr.sin_port = (u_short) port;
+#ifdef STRUCT_SOCKADDR_HAS_SA_LEN
+    taddr.sin_len = sizeof(struct sockaddr_in);
+#endif
 #define MAX_RX_BINDS 10
     for (binds = 0; binds < MAX_RX_BINDS; binds++) {
        if (binds)
            rxi_Delay(10);
-       code = bind(socketFd, (struct sockaddr *) saddr, salen);
+       code = bind(socketFd, (struct sockaddr *)&taddr, sizeof(taddr));
        if (!code)
            break;
     }
@@ -202,16 +207,7 @@ rxi_GetHostUDPSocket(struct sockaddr_storage *saddr, int salen)
 osi_socket
 rxi_GetUDPSocket(u_short port)
 {
-    struct sockaddr_storage saddr;
-    struct sockaddr_in *sin = (struct sockaddr_in *) &saddr;
-
-    memset((void *) &saddr, 0, sizeof(saddr));
-
-    sin->sin_family = AF_INET;
-    sin->sin_addr.s_addr = htonl(INADDR_ANY);
-    sin->sin_port = port;
-
-    return rxi_GetHostUDPSocket(&saddr, sizeof(struct sockaddr_in));
+    return rxi_GetHostUDPSocket(htonl(INADDR_ANY), port);
 }
 
 void
@@ -613,7 +609,7 @@ void
 rxi_InitPeerParams(struct rx_peer *pp)
 {
     afs_uint32 ppaddr;
-    u_short rxmtu, maxmtu = 0;
+    u_short rxmtu;
     int ix;
 
     LOCK_IF_INIT;
@@ -631,48 +627,33 @@ rxi_InitPeerParams(struct rx_peer *pp)
 #ifdef ADAPT_MTU
     /* try to second-guess IP, and identify which link is most likely to
      * be used for traffic to/from this host. */
-    switch (rx_ssfamily(&pp->saddr)) {
-    case AF_INET:
-       ppaddr = ntohl(((struct sockaddr_in * ) &pp->saddr)->sin_addr.s_addr);
-
-       pp->ifMTU = 0;
-       pp->timeout.sec = 2;
-       pp->rateFlag = 2;       /* start timing after two full packets */
-       /* I don't initialize these, because I presume they are bzero'd... 
-       * pp->burstSize pp->burst pp->burstWait.sec pp->burstWait.usec
-       * pp->timeout.usec */
-
-       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])) {
+    ppaddr = ntohl(pp->host);
+    
+    pp->ifMTU = 0;
+    pp->timeout.sec = 2;
+    pp->rateFlag = 2;         /* start timing after two full packets */
+    /* I don't initialize these, because I presume they are bzero'd... 
+     * pp->burstSize pp->burst pp->burstWait.sec pp->burstWait.usec
+     * pp->timeout.usec */
+    
+    LOCK_IF;
+    for (ix = 0; ix < rxi_numNetAddrs; ++ix) {
+       if ((rxi_NetAddrs[ix] & myNetMasks[ix]) == (ppaddr & myNetMasks[ix])) {
 #ifdef IFF_POINTOPOINT
-               if (myNetFlags[ix] & IFF_POINTOPOINT)
-                   pp->timeout.sec = 4;
+           if (myNetFlags[ix] & IFF_POINTOPOINT)
+               pp->timeout.sec = 4;
 #endif /* IFF_POINTOPOINT */
-               rxmtu = myNetMTUs[ix] - RX_IPUDP_SIZE;
-               if (rxmtu < RX_MIN_PACKET_SIZE)
-                   rxmtu = RX_MIN_PACKET_SIZE;
-           }
-       }
-       UNLOCK_IF;
-       if (rxmtu)
-           pp->ifMTU = MIN(rx_MyMaxSendSize, rxmtu);
-       if (!pp->ifMTU) {               /* not local */
-           pp->timeout.sec = 3;
-           pp->ifMTU = MIN(rx_MyMaxSendSize, maxmtu ? maxmtu : RX_REMOTE_PACKET_SIZE);
+           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);
        }
-       break;
-#ifdef AF_INET6
-    case AF_INET6:
-#endif 
-    default:
-       pp->rateFlag = 2;       /* start timing after two full packets */
-       pp->timeout.sec = 2;
-       pp->ifMTU = MIN(rx_MyMaxSendSize, OLD_MAX_PACKET_SIZE);
-       break;
+    }
+    UNLOCK_IF;
+    if (!pp->ifMTU) {         /* not local */
+       pp->timeout.sec = 3;
+       pp->ifMTU = MIN(rx_MyMaxSendSize, RX_REMOTE_PACKET_SIZE);
     }
 #else /* ADAPT_MTU */
     pp->rateFlag = 2;          /* start timing after two full packets */
index 098d7e8..3339853 100644 (file)
@@ -379,7 +379,7 @@ CallPreamble(register struct rx_call *acall, int activecall,
        if (BreakDelayedCallBacks_r(thost)) {
            ViceLog(0,
                    ("BreakDelayedCallbacks FAILED for host %s:%d which IS UP.  Connection from %s:%d.  Possible network or routing failure.\n",
-                    afs_inet_ntoa_r(thost->host, hoststr), ntohs(thost->port), rxr_AddrStringOf(*tconn), 
+                    afs_inet_ntoa_r(thost->host, hoststr), ntohs(thost->port), afs_inet_ntoa_r(rxr_HostOf(*tconn), hoststr2), 
                     ntohs(rxr_PortOf(*tconn))));
            if (MultiProbeAlternateAddress_r(thost)) {
                ViceLog(0,
@@ -395,7 +395,7 @@ CallPreamble(register struct rx_call *acall, int activecall,
                if (BreakDelayedCallBacks_r(thost)) {
                    ViceLog(0,
                            ("BreakDelayedCallbacks FAILED AGAIN for host %s:%d which IS UP.  Connection from %s:%d.  Possible network or routing failure.\n",
-                             afs_inet_ntoa_r(thost->host, hoststr), ntohs(thost->port), rxr_AddrStringOf(*tconn), 
+                             afs_inet_ntoa_r(thost->host, hoststr), ntohs(thost->port), afs_inet_ntoa_r(rxr_HostOf(*tconn), hoststr2), 
                              ntohs(rxr_PortOf(*tconn))));
                    code = -1;
                }
@@ -2028,6 +2028,7 @@ common_FetchData64(struct rx_call *acall, struct AFSFid *Fid,
     struct host *thost;
     afs_int32 rights, anyrights;       /* rights for this and any user */
     struct client *t_client = NULL;    /* tmp ptr to client data */
+    struct in_addr logHostAddr;        /* host ip holder for inet_ntoa */
 #if FS_STATS_DETAILED
     struct fs_stats_opTimingData *opP; /* Ptr to this op's timing struct */
     struct fs_stats_xferData *xferP;   /* Ptr to this op's byte size struct */
@@ -2062,9 +2063,10 @@ common_FetchData64(struct rx_call *acall, struct AFSFid *Fid,
 
     /* Get ptr to client data for user Id for logging */
     t_client = (struct client *)rx_GetSpecific(tcon, rxcon_client_key);
+    logHostAddr.s_addr = rxr_HostOf(tcon);
     ViceLog(5,
            ("SRXAFS_FetchData, Fid = %u.%u.%u, Host %s:%d, Id %d\n",
-            Fid->Volume, Fid->Vnode, Fid->Unique, rxr_AddrStringOf(tcon),
+            Fid->Volume, Fid->Vnode, Fid->Unique, inet_ntoa(logHostAddr),
             ntohs(rxr_PortOf(tcon)), t_client->ViceId));
     /*
      * Get volume/vnode for the fetched file; caller's access rights to
@@ -2290,6 +2292,7 @@ SRXAFS_FetchACL(struct rx_call * acall, struct AFSFid * Fid,
     struct rx_connection *tcon = rx_ConnectionOf(acall);
     struct host *thost;
     struct client *t_client = NULL;    /* tmp ptr to client data */
+    struct in_addr logHostAddr;        /* host ip holder for inet_ntoa */
 #if FS_STATS_DETAILED
     struct fs_stats_opTimingData *opP; /* Ptr to this op's timing struct */
     struct timeval opStartTime, opStopTime;    /* Start/stop times for RPC op */
@@ -2317,9 +2320,10 @@ SRXAFS_FetchACL(struct rx_call * acall, struct AFSFid * Fid,
 
     /* Get ptr to client data for user Id for logging */
     t_client = (struct client *)rx_GetSpecific(tcon, rxcon_client_key);
+    logHostAddr.s_addr = rxr_HostOf(tcon);
     ViceLog(5,
            ("SAFS_FetchACL, Fid = %u.%u.%u, Host %s:%d, Id %d\n", Fid->Volume,
-            Fid->Vnode, Fid->Unique, rxr_AddrStringOf(tcon),
+            Fid->Vnode, Fid->Unique, inet_ntoa(logHostAddr),
             ntohs(rxr_PortOf(tcon)), t_client->ViceId));
 
     AccessList->AFSOpaque_len = 0;
@@ -2407,13 +2411,15 @@ SAFSS_FetchStatus(struct rx_call *acall, struct AFSFid *Fid,
     struct client *client = 0; /* pointer to the client data */
     afs_int32 rights, anyrights;       /* rights for this and any user */
     struct client *t_client = NULL;    /* tmp ptr to client data */
+    struct in_addr logHostAddr;        /* host ip holder for inet_ntoa */
     struct rx_connection *tcon = rx_ConnectionOf(acall);
 
     /* Get ptr to client data for user Id for logging */
     t_client = (struct client *)rx_GetSpecific(tcon, rxcon_client_key);
+    logHostAddr.s_addr = rxr_HostOf(tcon);
     ViceLog(1,
            ("SAFS_FetchStatus,  Fid = %u.%u.%u, Host %s:%d, Id %d\n",
-            Fid->Volume, Fid->Vnode, Fid->Unique, rxr_AddrStringOf(tcon),
+            Fid->Volume, Fid->Vnode, Fid->Unique, inet_ntoa(logHostAddr),
             ntohs(rxr_PortOf(tcon)), t_client->ViceId));
     FS_LOCK;
     AFSCallStats.FetchStatus++, AFSCallStats.TotalCalls++;
@@ -2859,6 +2865,7 @@ common_StoreData64(struct rx_call *acall, struct AFSFid *Fid,
     struct client *client = 0; /* pointer to client structure */
     afs_int32 rights, anyrights;       /* rights for this and any user */
     struct client *t_client = NULL;    /* tmp ptr to client data */
+    struct in_addr logHostAddr;        /* host ip holder for inet_ntoa */
     struct rx_connection *tcon;
     struct host *thost;
 #if FS_STATS_DETAILED
@@ -2894,9 +2901,10 @@ common_StoreData64(struct rx_call *acall, struct AFSFid *Fid,
 
     /* Get ptr to client data for user Id for logging */
     t_client = (struct client *)rx_GetSpecific(tcon, rxcon_client_key);
+    logHostAddr.s_addr = rxr_HostOf(tcon);
     ViceLog(5,
            ("StoreData: Fid = %u.%u.%u, Host %s:%d, Id %d\n", Fid->Volume,
-            Fid->Vnode, Fid->Unique, rxr_AddrStringOf(tcon),
+            Fid->Vnode, Fid->Unique, inet_ntoa(logHostAddr),
             ntohs(rxr_PortOf(tcon)), t_client->ViceId));
 
     /*
@@ -3125,6 +3133,7 @@ SRXAFS_StoreACL(struct rx_call * acall, struct AFSFid * Fid,
     struct rx_connection *tcon;
     struct host *thost;
     struct client *t_client = NULL;    /* tmp ptr to client data */
+    struct in_addr logHostAddr;        /* host ip holder for inet_ntoa */
 #if FS_STATS_DETAILED
     struct fs_stats_opTimingData *opP; /* Ptr to this op's timing struct */
     struct timeval opStartTime, opStopTime;    /* Start/stop times for RPC op */
@@ -3145,10 +3154,11 @@ SRXAFS_StoreACL(struct rx_call * acall, struct AFSFid * Fid,
 
     /* Get ptr to client data for user Id for logging */
     t_client = (struct client *)rx_GetSpecific(tcon, rxcon_client_key);
+    logHostAddr.s_addr = rxr_HostOf(tcon);
     ViceLog(1,
            ("SAFS_StoreACL, Fid = %u.%u.%u, ACL=%s, Host %s:%d, Id %d\n",
             Fid->Volume, Fid->Vnode, Fid->Unique, AccessList->AFSOpaque_val,
-            rxr_AddrStringOf(tcon), ntohs(rxr_PortOf(tcon)), t_client->ViceId));
+            inet_ntoa(logHostAddr), ntohs(rxr_PortOf(tcon)), t_client->ViceId));
     FS_LOCK;
     AFSCallStats.StoreACL++, AFSCallStats.TotalCalls++;
     FS_UNLOCK;
@@ -3241,13 +3251,15 @@ SAFSS_StoreStatus(struct rx_call *acall, struct AFSFid *Fid,
     struct client *client = 0; /* pointer to client structure */
     afs_int32 rights, anyrights;       /* rights for this and any user */
     struct client *t_client = NULL;    /* tmp ptr to client data */
+    struct in_addr logHostAddr;        /* host ip holder for inet_ntoa */
     struct rx_connection *tcon = rx_ConnectionOf(acall);
 
     /* Get ptr to client data for user Id for logging */
     t_client = (struct client *)rx_GetSpecific(tcon, rxcon_client_key);
+    logHostAddr.s_addr = rxr_HostOf(tcon);
     ViceLog(1,
            ("SAFS_StoreStatus,  Fid    = %u.%u.%u, Host %s:%d, Id %d\n",
-            Fid->Volume, Fid->Vnode, Fid->Unique, rxr_AddrStringOf(tcon),
+            Fid->Volume, Fid->Vnode, Fid->Unique, inet_ntoa(logHostAddr),
             ntohs(rxr_PortOf(tcon)), t_client->ViceId));
     FS_LOCK;
     AFSCallStats.StoreStatus++, AFSCallStats.TotalCalls++;
@@ -3387,15 +3399,17 @@ SAFSS_RemoveFile(struct rx_call *acall, struct AFSFid *DirFid, char *Name,
     struct client *client = 0; /* pointer to client structure */
     afs_int32 rights, anyrights;       /* rights for this and any user */
     struct client *t_client;   /* tmp ptr to client data */
+    struct in_addr logHostAddr;        /* host ip holder for inet_ntoa */
     struct rx_connection *tcon = rx_ConnectionOf(acall);
 
     FidZero(&dir);
     /* Get ptr to client data for user Id for logging */
     t_client = (struct client *)rx_GetSpecific(tcon, rxcon_client_key);
+    logHostAddr.s_addr = rxr_HostOf(tcon);
     ViceLog(1,
            ("SAFS_RemoveFile %s,  Did = %u.%u.%u, Host %s:%d, Id %d\n", Name,
             DirFid->Volume, DirFid->Vnode, DirFid->Unique,
-            rxr_AddrStringOf(tcon), ntohs(rxr_PortOf(tcon)), t_client->ViceId));
+            inet_ntoa(logHostAddr), ntohs(rxr_PortOf(tcon)), t_client->ViceId));
     FS_LOCK;
     AFSCallStats.RemoveFile++, AFSCallStats.TotalCalls++;
     FS_UNLOCK;
@@ -3550,16 +3564,18 @@ SAFSS_CreateFile(struct rx_call *acall, struct AFSFid *DirFid, char *Name,
     struct client *client = 0; /* pointer to client structure */
     afs_int32 rights, anyrights;       /* rights for this and any user */
     struct client *t_client;   /* tmp ptr to client data */
+    struct in_addr logHostAddr;        /* host ip holder for inet_ntoa */
     struct rx_connection *tcon = rx_ConnectionOf(acall);
 
     FidZero(&dir);
 
     /* Get ptr to client data for user Id for logging */
     t_client = (struct client *)rx_GetSpecific(tcon, rxcon_client_key);
+    logHostAddr.s_addr = rxr_HostOf(tcon);
     ViceLog(1,
            ("SAFS_CreateFile %s,  Did = %u.%u.%u, Host %s:%d, Id %d\n", Name,
             DirFid->Volume, DirFid->Vnode, DirFid->Unique,
-            rxr_AddrStringOf(tcon), ntohs(rxr_PortOf(tcon)), t_client->ViceId));
+            inet_ntoa(logHostAddr), ntohs(rxr_PortOf(tcon)), t_client->ViceId));
     FS_LOCK;
     AFSCallStats.CreateFile++, AFSCallStats.TotalCalls++;
     FS_UNLOCK;
@@ -3732,6 +3748,7 @@ SAFSS_Rename(struct rx_call *acall, struct AFSFid *OldDirFid, char *OldName,
     int doDelete;              /* deleted the rename target (ref count now 0) */
     int code;
     struct client *t_client;   /* tmp ptr to client data */
+    struct in_addr logHostAddr;        /* host ip holder for inet_ntoa */
     struct rx_connection *tcon = rx_ConnectionOf(acall);
 
     FidZero(&olddir);
@@ -3741,11 +3758,12 @@ SAFSS_Rename(struct rx_call *acall, struct AFSFid *OldDirFid, char *OldName,
 
     /* Get ptr to client data for user Id for logging */
     t_client = (struct client *)rx_GetSpecific(tcon, rxcon_client_key);
+    logHostAddr.s_addr = rxr_HostOf(tcon);
     ViceLog(1,
            ("SAFS_Rename %s    to %s,  Fid = %u.%u.%u to %u.%u.%u, Host %s:%d, Id %d\n",
             OldName, NewName, OldDirFid->Volume, OldDirFid->Vnode,
             OldDirFid->Unique, NewDirFid->Volume, NewDirFid->Vnode,
-            NewDirFid->Unique, rxr_AddrStringOf(tcon), ntohs(rxr_PortOf(tcon)), t_client->ViceId));
+            NewDirFid->Unique, inet_ntoa(logHostAddr), ntohs(rxr_PortOf(tcon)), t_client->ViceId));
     FS_LOCK;
     AFSCallStats.Rename++, AFSCallStats.TotalCalls++;
     FS_UNLOCK;
@@ -4206,6 +4224,7 @@ SAFSS_Symlink(struct rx_call *acall, struct AFSFid *DirFid, char *Name,
     struct client *client = 0; /* pointer to client structure */
     afs_int32 rights, anyrights;       /* rights for this and any user */
     struct client *t_client;   /* tmp ptr to client data */
+    struct in_addr logHostAddr;        /* host ip holder for inet_ntoa */
     FdHandle_t *fdP;
     struct rx_connection *tcon = rx_ConnectionOf(acall);
 
@@ -4213,10 +4232,11 @@ SAFSS_Symlink(struct rx_call *acall, struct AFSFid *DirFid, char *Name,
 
     /* Get ptr to client data for user Id for logging */
     t_client = (struct client *)rx_GetSpecific(tcon, rxcon_client_key);
+    logHostAddr.s_addr = rxr_HostOf(tcon);
     ViceLog(1,
            ("SAFS_Symlink %s to %s,  Did = %u.%u.%u, Host %s:%d, Id %d\n", Name,
             LinkContents, DirFid->Volume, DirFid->Vnode, DirFid->Unique,
-            rxr_AddrStringOf(tcon), ntohs(rxr_PortOf(tcon)), t_client->ViceId));
+            inet_ntoa(logHostAddr), ntohs(rxr_PortOf(tcon)), t_client->ViceId));
     FS_LOCK;
     AFSCallStats.Symlink++, AFSCallStats.TotalCalls++;
     FS_UNLOCK;
@@ -4409,17 +4429,19 @@ SAFSS_Link(struct rx_call *acall, struct AFSFid *DirFid, char *Name,
     struct client *client = 0; /* pointer to client structure */
     afs_int32 rights, anyrights;       /* rights for this and any user */
     struct client *t_client;   /* tmp ptr to client data */
+    struct in_addr logHostAddr;        /* host ip holder for inet_ntoa */
     struct rx_connection *tcon = rx_ConnectionOf(acall);
 
     FidZero(&dir);
 
     /* Get ptr to client data for user Id for logging */
     t_client = (struct client *)rx_GetSpecific(tcon, rxcon_client_key);
+    logHostAddr.s_addr = rxr_HostOf(tcon);
     ViceLog(1,
            ("SAFS_Link %s,     Did = %u.%u.%u, Fid = %u.%u.%u, Host %s:%d, Id %d\n",
             Name, DirFid->Volume, DirFid->Vnode, DirFid->Unique,
             ExistingFid->Volume, ExistingFid->Vnode, ExistingFid->Unique,
-            rxr_AddrStringOf(tcon), ntohs(rxr_PortOf(tcon)), t_client->ViceId));
+            inet_ntoa(logHostAddr), ntohs(rxr_PortOf(tcon)), t_client->ViceId));
     FS_LOCK;
     AFSCallStats.Link++, AFSCallStats.TotalCalls++;
     FS_UNLOCK;
@@ -4613,6 +4635,7 @@ SAFSS_MakeDir(struct rx_call *acall, struct AFSFid *DirFid, char *Name,
     struct client *client = 0; /* pointer to client structure */
     afs_int32 rights, anyrights;       /* rights for this and any user */
     struct client *t_client;   /* tmp ptr to client data */
+    struct in_addr logHostAddr;        /* host ip holder for inet_ntoa */
     struct rx_connection *tcon = rx_ConnectionOf(acall);
 
     FidZero(&dir);
@@ -4620,10 +4643,11 @@ SAFSS_MakeDir(struct rx_call *acall, struct AFSFid *DirFid, char *Name,
 
     /* Get ptr to client data for user Id for logging */
     t_client = (struct client *)rx_GetSpecific(tcon, rxcon_client_key);
+    logHostAddr.s_addr = rxr_HostOf(tcon);
     ViceLog(1,
            ("SAFS_MakeDir %s,  Did = %u.%u.%u, Host %s:%d, Id %d\n", Name,
             DirFid->Volume, DirFid->Vnode, DirFid->Unique,
-            rxr_AddrStringOf(tcon), ntohs(rxr_PortOf(tcon)), t_client->ViceId));
+            inet_ntoa(logHostAddr), ntohs(rxr_PortOf(tcon)), t_client->ViceId));
     FS_LOCK;
     AFSCallStats.MakeDir++, AFSCallStats.TotalCalls++;
     FS_UNLOCK;
@@ -4807,16 +4831,18 @@ SAFSS_RemoveDir(struct rx_call *acall, struct AFSFid *DirFid, char *Name,
     afs_int32 rights, anyrights;       /* rights for this and any user */
     Vnode debugvnode1, debugvnode2;
     struct client *t_client;   /* tmp ptr to client data */
+    struct in_addr logHostAddr;        /* host ip holder for inet_ntoa */
     struct rx_connection *tcon = rx_ConnectionOf(acall);
 
     FidZero(&dir);
 
     /* Get ptr to client data for user Id for logging */
     t_client = (struct client *)rx_GetSpecific(tcon, rxcon_client_key);
+    logHostAddr.s_addr = rxr_HostOf(tcon);
     ViceLog(1,
            ("SAFS_RemoveDir    %s,  Did = %u.%u.%u, Host %s:%d, Id %d\n", Name,
             DirFid->Volume, DirFid->Vnode, DirFid->Unique,
-            rxr_AddrStringOf(tcon), ntohs(rxr_PortOf(tcon)), t_client->ViceId));
+            inet_ntoa(logHostAddr), ntohs(rxr_PortOf(tcon)), t_client->ViceId));
     FS_LOCK;
     AFSCallStats.RemoveDir++, AFSCallStats.TotalCalls++;
     FS_UNLOCK;
@@ -4962,6 +4988,7 @@ SAFSS_SetLock(struct rx_call *acall, struct AFSFid *Fid, ViceLockType type,
     struct client *client = 0; /* pointer to client structure */
     afs_int32 rights, anyrights;       /* rights for this and any user */
     struct client *t_client;   /* tmp ptr to client data */
+    struct in_addr logHostAddr;        /* host ip holder for inet_ntoa */
     static char *locktype[4] = { "LockRead", "LockWrite", "LockExtend", "LockRelease" };
     struct rx_connection *tcon = rx_ConnectionOf(acall);
 
@@ -4971,10 +4998,11 @@ SAFSS_SetLock(struct rx_call *acall, struct AFSFid *Fid, ViceLockType type,
     }
     /* Get ptr to client data for user Id for logging */
     t_client = (struct client *)rx_GetSpecific(tcon, rxcon_client_key);
+    logHostAddr.s_addr = rxr_HostOf(tcon);
     ViceLog(1,
            ("SAFS_SetLock type = %s Fid = %u.%u.%u, Host %s:%d, Id %d\n",
             locktype[(int)type], Fid->Volume, Fid->Vnode, Fid->Unique,
-            rxr_AddrStringOf(tcon), ntohs(rxr_PortOf(tcon)), t_client->ViceId));
+            inet_ntoa(logHostAddr), ntohs(rxr_PortOf(tcon)), t_client->ViceId));
     FS_LOCK;
     AFSCallStats.SetLock++, AFSCallStats.TotalCalls++;
     FS_UNLOCK;
@@ -5091,13 +5119,15 @@ SAFSS_ExtendLock(struct rx_call *acall, struct AFSFid *Fid,
     struct client *client = 0; /* pointer to client structure */
     afs_int32 rights, anyrights;       /* rights for this and any user */
     struct client *t_client;   /* tmp ptr to client data */
+    struct in_addr logHostAddr;        /* host ip holder for inet_ntoa */
     struct rx_connection *tcon = rx_ConnectionOf(acall);
 
     /* Get ptr to client data for user Id for logging */
     t_client = (struct client *)rx_GetSpecific(tcon, rxcon_client_key);
+    logHostAddr.s_addr = rxr_HostOf(tcon);
     ViceLog(1,
            ("SAFS_ExtendLock Fid = %u.%u.%u, Host %s:%d, Id %d\n", Fid->Volume,
-            Fid->Vnode, Fid->Unique, rxr_AddrStringOf(tcon),
+            Fid->Vnode, Fid->Unique, inet_ntoa(logHostAddr),
             ntohs(rxr_PortOf(tcon)), t_client->ViceId));
     FS_LOCK;
     AFSCallStats.ExtendLock++, AFSCallStats.TotalCalls++;
@@ -5216,13 +5246,15 @@ SAFSS_ReleaseLock(struct rx_call *acall, struct AFSFid *Fid,
     struct client *client = 0; /* pointer to client structure */
     afs_int32 rights, anyrights;       /* rights for this and any user */
     struct client *t_client;   /* tmp ptr to client data */
+    struct in_addr logHostAddr;        /* host ip holder for inet_ntoa */
     struct rx_connection *tcon = rx_ConnectionOf(acall);
 
     /* Get ptr to client data for user Id for logging */
     t_client = (struct client *)rx_GetSpecific(tcon, rxcon_client_key);
+    logHostAddr.s_addr = rxr_HostOf(tcon);
     ViceLog(1,
            ("SAFS_ReleaseLock Fid = %u.%u.%u, Host %s:%d, Id %d\n", Fid->Volume,
-            Fid->Vnode, Fid->Unique, rxr_AddrStringOf(tcon),
+            Fid->Vnode, Fid->Unique, inet_ntoa(logHostAddr),
             ntohs(rxr_PortOf(tcon)), t_client->ViceId));
     FS_LOCK;
     AFSCallStats.ReleaseLock++, AFSCallStats.TotalCalls++;
@@ -5922,8 +5954,8 @@ common_GiveUpCallBacks(struct rx_call *acall, struct AFSCBFids *FidArray,
 
     if (!FidArray && !CallBackArray) {
        ViceLog(1,
-               ("SAFS_GiveUpAllCallBacks: host=%s\n",
-                (tcon->peer ? rx_AddrStringOf(tcon->peer) : "<unknown>")));
+               ("SAFS_GiveUpAllCallBacks: host=%x\n",
+                (tcon->peer ? tcon->peer->host : 0)));
        errorCode = GetClient(tcon, &client);
        if (!errorCode) {
            DeleteAllCallBacks_r(client->host, 1);
@@ -5932,9 +5964,9 @@ common_GiveUpCallBacks(struct rx_call *acall, struct AFSCBFids *FidArray,
     } else {
        if (FidArray->AFSCBFids_len < CallBackArray->AFSCBs_len) {
            ViceLog(0,
-                   ("GiveUpCallBacks: #Fids %d < #CallBacks %d, host=%s\n",
+                   ("GiveUpCallBacks: #Fids %d < #CallBacks %d, host=%x\n",
                     FidArray->AFSCBFids_len, CallBackArray->AFSCBs_len,
-                    (tcon->peer ? rx_AddrStringOf(tcon->peer) : "<unknown>")));
+                    (tcon->peer ? tcon->peer->host : 0)));
            errorCode = EINVAL;
            goto Bad_GiveUpCallBacks;
        }
@@ -6964,6 +6996,7 @@ StoreData_RXStyle(Volume * volptr, Vnode * targetptr, struct AFSFid * Fid,
     afs_sfsize_t adjustSize;   /* bytes to call VAdjust... with */
     int linkCount;             /* link count on inode */
     FdHandle_t *fdP;
+    struct in_addr logHostAddr;        /* host ip holder for inet_ntoa */
 
 #if FS_STATS_DETAILED
     /*
@@ -6981,12 +7014,12 @@ StoreData_RXStyle(Volume * volptr, Vnode * targetptr, struct AFSFid * Fid,
 
     if (Pos == -1 || VN_GET_INO(targetptr) == 0) {
        /* the inode should have been created in Alloc_NewVnode */
+       logHostAddr.s_addr = rxr_HostOf(rx_ConnectionOf(Call));
        ViceLog(0,
                ("StoreData_RXStyle : Inode non-existent Fid = %u.%u.%u, inode = %llu, Pos %llu Host %s:%d\n",
                 Fid->Volume, Fid->Vnode, Fid->Unique,
                 (afs_uintmax_t) VN_GET_INO(targetptr), (afs_uintmax_t) Pos,
-                rxr_AddrStringOf(rx_ConnectionOf(Call)),
-                ntohs(rxr_PortOf(rx_ConnectionOf(Call)))));
+                inet_ntoa(logHostAddr), ntohs(rxr_PortOf(rx_ConnectionOf(Call)))));
        return ENOENT;          /* is this proper error code? */
     } else {
        /*
index 14fe833..80f8e82 100644 (file)
@@ -2025,7 +2025,7 @@ h_FindClient_r(struct rx_connection *tcon)
            if (created) {
                ViceLog(0, ("FindClient: stillborn client %x(%x); conn %x (host %s:%d) had client %x(%x)\n", 
                            client, client->sid, tcon, 
-                           rxr_AddrStringOf(tcon),
+                           afs_inet_ntoa_r(rxr_HostOf(tcon), hoststr),
                            ntohs(rxr_PortOf(tcon)),
                            oldClient, oldClient->sid));
                if ((client->ViceId != ANONYMOUSID) && client->CPS.prlist_val)
@@ -2048,7 +2048,7 @@ h_FindClient_r(struct rx_connection *tcon)
        } else {
            ViceLog(0, ("FindClient: deleted client %x(%x) already had conn %x (host %s:%d), stolen by client %x(%x)\n", 
                        oldClient, oldClient->sid, tcon, 
-                       rxr_AddrStringOf(tcon),
+                       afs_inet_ntoa_r(rxr_HostOf(tcon), hoststr),
                        ntohs(rxr_PortOf(tcon)),
                        client, client->sid));
            /* rx_SetSpecific will be done immediately below */
@@ -2095,8 +2095,8 @@ GetClient(struct rx_connection *tcon, struct client **cp)
     client = (struct client *)rx_GetSpecific(tcon, rxcon_client_key);
     if (client == NULL) {
        ViceLog(0,
-               ("GetClient: no client in conn %x (host %s:%d), VBUSYING\n",
-                tcon, rxr_AddrStringOf(tcon),ntohs(rxr_PortOf(tcon))));
+               ("GetClient: no client in conn %x (host %x:%d), VBUSYING\n",
+                tcon, rxr_HostOf(tcon),ntohs(rxr_PortOf(tcon))));
        H_UNLOCK;
        return VBUSY;
     }
index d1bb96f..9a797b9 100644 (file)
@@ -277,9 +277,6 @@ struct host *(hosttableptrs[h_MAXHOSTTABLES]);      /* Used by h_itoh */
 #define rxr_HostOf(aconn) \
     rx_HostOf(rx_PeerOf((struct rx_connection *)(aconn)))
 
-#define rxr_AddrStringOf(aconn) \
-    rx_AddrStringOf(rx_PeerOf((struct rx_connection *)(aconn)))
-
 #define HCPS_INPROGRESS                        0x01    /*set when CPS is being updated */
 #define HCPS_WAITING                   0x02    /*waiting for CPS to get updated */
 #define ALTADDR                                0x04    /*InitCallBack is being done */