openbsd-20021011
[openafs.git] / src / rx / rx_kcommon.c
index 3eb361d..c306672 100644 (file)
@@ -21,18 +21,24 @@ RCSID("$Header$");
 #ifdef AFS_HPUX110_ENV
 #include "../h/tihdr.h"
 #include <xti.h>
-#include "../afs/hpux_110.h"
 #endif
 #include "../afsint/afsint.h"
 
-afs_int32 rxi_Findcbi();
-extern  struct interfaceAddr afs_cb_interface;
+#ifdef AFS_DARWIN60_ENV
+struct ifnet *rxi_FindIfnet(afs_uint32 addr, struct ifaddr **pifad);
+#else
+struct ifnet *rxi_FindIfnet(afs_uint32 addr, struct in_ifaddr **pifad);
+#endif
 
 #ifndef RXK_LISTENER_ENV
-int (*rxk_GetPacketProc)(); /* set to packet allocation procedure */
-int (*rxk_PacketArrivalProc)();
+int (*rxk_PacketArrivalProc)(register struct rx_packet *ahandle,
+        register struct sockaddr_in *afrom, char *arock,
+        afs_int32 asize); /* set to packet allocation procedure */
+int (*rxk_GetPacketProc)(char **ahandle, int asize);
 #endif
 
+extern  struct interfaceAddr afs_cb_interface;
+
 rxk_ports_t rxk_ports;
 rxk_portRocks_t rxk_portRocks;
 
@@ -61,8 +67,8 @@ static int rxk_AddPort(u_short aport, char * arock)
 }
 
 /* remove as port from the monitored list, port # is in network order */
-rxk_DelPort(aport)
-u_short aport; {
+int rxk_DelPort(u_short aport)
+{
     register int i;
     register unsigned short *tsp;
 
@@ -86,13 +92,12 @@ void rxk_shutdownPorts(void)
 #if ! defined(AFS_SUN5_ENV) && ! defined(UKERNEL) && ! defined(RXK_LISTENER_ENV)
            soclose((struct socket *)rxk_portRocks[i]);
 #endif
-           rxk_portRocks[i] = (char *)0;
+           rxk_portRocks[i] = NULL;
        }
     }
 }
 
-osi_socket rxi_GetUDPSocket(port)
-    u_short port;
+osi_socket rxi_GetUDPSocket(u_short port)
 {
     struct osi_socket *sockp;
     sockp = (struct osi_socket *) rxk_NewSocket(port);
@@ -123,8 +128,7 @@ char *msg;
  * defined only on success.
  */
 
-int
-osi_utoa(char *buf, size_t len, unsigned long val)
+int osi_utoa(char *buf, size_t len, unsigned long val)
 {
        long k; /* index of first byte of string value */
 
@@ -197,8 +201,7 @@ osi_utoa(char *buf, size_t len, unsigned long val)
  * argument to the native panic(), we construct a single string and hand
  * that to osi_Panic().
  */
-void
-osi_AssertFailK(const char *expr, const char *file, int line)
+void osi_AssertFailK(const char *expr, const char *file, int line)
 {
        static const char msg0[] = "assertion failed: ";
        static const char msg1[] = ", file: ";
@@ -242,7 +245,7 @@ osi_AssertFailK(const char *expr, const char *file, int line)
 #ifndef UKERNEL
 /* This is the server process request loop. Kernel server
  * processes never become listener threads */
-void rx_ServerProc()
+void rx_ServerProc(void)
 {
     int threadID;
 
@@ -263,9 +266,8 @@ void rx_ServerProc()
 #endif /* !UKERNEL */
 
 #ifndef RXK_LISTENER_ENV
-static int MyPacketProc(ahandle, asize)
-int asize;   /* this includes the Rx header */
-char **ahandle;
+/* asize includes the Rx header */
+static int MyPacketProc(char **ahandle, int asize)
 {
     register struct rx_packet *tp;
 
@@ -306,11 +308,10 @@ char **ahandle;
     return 0;
 }
 
-static int MyArrivalProc(ahandle, afrom, arock, asize)
-register struct rx_packet *ahandle;
-register struct sockaddr_in *afrom;
-char *arock;
-afs_int32 asize; {
+static int MyArrivalProc(register struct rx_packet *ahandle, 
+       register struct sockaddr_in *afrom, char *arock, 
+       afs_int32 asize)
+{
     /* handle basic rx packet */
     ahandle->length = asize - RX_HEADER_SIZE;
     rxi_DecodePacketHeader(ahandle);
@@ -324,8 +325,8 @@ afs_int32 asize; {
 }
 #endif /* !RXK_LISTENER_ENV */
 
-void
-rxi_StartListener() {
+void rxi_StartListener(void)
+{
     /* if kernel, give name of appropriate procedures */
 #ifndef RXK_LISTENER_ENV
     rxk_GetPacketProc = MyPacketProc;
@@ -336,13 +337,13 @@ rxi_StartListener() {
 
 /* Called from rxi_FindPeer, when initializing a clear rx_peer structure,
   to get interesting information. */
-void rxi_InitPeerParams(pp)
-register struct rx_peer *pp;
+void rxi_InitPeerParams(register struct rx_peer *pp)
 {
 #ifdef ADAPT_MTU
     u_short rxmtu;
     afs_int32 i, mtu;
 
+#ifndef AFS_SUN5_ENV
 #ifdef AFS_USERSPACE_IP_ADDR   
     i = rxi_Findcbi(pp->host);
     if (i == -1) {
@@ -367,7 +368,11 @@ register struct rx_peer *pp;
       pp->ifMTU = RX_REMOTE_PACKET_SIZE;
     }
 #else /* AFS_USERSPACE_IP_ADDR */
+#ifdef AFS_DARWIN60_ENV
+    struct ifaddr *ifad = (struct ifaddr *) 0;
+#else
     struct in_ifaddr *ifad = (struct in_ifaddr *) 0;
+#endif
     struct ifnet *ifn;
 
     /* At some time we need to iterate through rxi_FindIfnet() to find the
@@ -402,6 +407,30 @@ register struct rx_peer *pp;
       pp->ifMTU = RX_REMOTE_PACKET_SIZE;
     }
 #endif/* else AFS_USERSPACE_IP_ADDR */
+#else /* AFS_SUN5_ENV */
+    mtu = rxi_FindIfMTU(pp->host);
+
+    if (mtu <= 0) {
+       pp->timeout.sec = 3;
+       /* pp->timeout.usec = 0; */
+       pp->ifMTU = RX_REMOTE_PACKET_SIZE;
+    } else {
+       pp->timeout.sec = 2;
+       /* pp->timeout.usec = 0; */
+       pp->ifMTU = MIN(RX_MAX_PACKET_SIZE, rx_MyMaxSendSize);
+    }
+
+    if (mtu > 0) {
+       /* Diminish the packet size to one based on the MTU given by
+        * the interface. */
+       if (mtu > (RX_IPUDP_SIZE + RX_HEADER_SIZE)) {
+           rxmtu = mtu - RX_IPUDP_SIZE;
+           if (rxmtu < pp->ifMTU) pp->ifMTU = rxmtu;
+       }
+    } else {   /* couldn't find the interface, so assume the worst */
+       pp->ifMTU = RX_REMOTE_PACKET_SIZE;
+    }
+#endif /* AFS_SUN5_ENV */
 #else /* ADAPT_MTU */
     pp->rateFlag = 2;   /* start timing after two full packets */
     pp->timeout.sec = 2;
@@ -427,7 +456,7 @@ register struct rx_peer *pp;
  */
 
 
-#if ! defined(AFS_AIX_ENV) && ! defined(AFS_SUN5_ENV) && ! defined(UKERNEL) && ! defined(AFS_LINUX20_ENV) && !defined (AFS_DARWIN_ENV) && !defined (AFS_FBSD_ENV)
+#if ! defined(AFS_AIX_ENV) && ! defined(AFS_SUN5_ENV) && ! defined(UKERNEL) && ! defined(AFS_LINUX20_ENV) && !defined (AFS_DARWIN_ENV) && !defined (AFS_XBSD_ENV)
 /* Routine called during the afsd "-shutdown" process to put things back to
  * the initial state.
  */
@@ -440,8 +469,8 @@ void shutdown_rxkernel(void)
     for (tpro = inetdomain.dom_protosw; tpro < last; tpro++)
        if (tpro->pr_protocol == IPPROTO_UDP) {
            /* restore original udp protocol switch */
-           bcopy((void *)&parent_proto, (void *)tpro, sizeof(parent_proto));
-           bzero((void *)&parent_proto, sizeof(parent_proto));
+           memcpy((void *)tpro, (void *)&parent_proto, sizeof(parent_proto));
+           memset((void *)&parent_proto, 0, sizeof(parent_proto));
            rxk_initDone = 0;
            rxk_shutdownPorts();
            return;
@@ -456,11 +485,10 @@ void shutdown_rxkernel(void)
 #define ADDRSPERSITE 16
 static afs_uint32 myNetAddrs[ADDRSPERSITE];
 static int myNetMTUs[ADDRSPERSITE];
-static int myNetFlags[ADDRSPERSITE];
 static int numMyNetAddrs = 0;
 
 #ifdef AFS_USERSPACE_IP_ADDR   
-int rxi_GetcbiInfo()
+int rxi_GetcbiInfo(void)
 {
    int     i, j, different = 0;
    int     rxmtu, maxmtu;
@@ -468,8 +496,8 @@ int rxi_GetcbiInfo()
    afs_uint32 addrs[ADDRSPERSITE];
    int     mtus[ADDRSPERSITE];
 
-   bzero((void *)addrs, sizeof(addrs));
-   bzero((void *)mtus,  sizeof(mtus));
+   memset((void *)addrs, 0, sizeof(addrs));
+   memset((void *)mtus, 0, sizeof(mtus));
 
    for (i=0; i<afs_cb_interface.numberOfInterfaces; i++) {
       rxmtu    = (ntohl(afs_cb_interface.mtu[i]) - RX_IPUDP_SIZE);
@@ -505,8 +533,7 @@ int rxi_GetcbiInfo()
 /* Returns the afs_cb_interface inxex which best matches address.
  * If none is found, we return -1.
  */
-afs_int32 rxi_Findcbi(addr)
-     afs_uint32 addr;
+afs_int32 rxi_Findcbi(afs_uint32 addr)
 {
    int j;
    afs_uint32 myAddr, thisAddr, netMask, subnetMask;
@@ -546,19 +573,18 @@ afs_int32 rxi_Findcbi(addr)
       }
    }
 
- done:
    return(rvalue);
 }
 
 #else /* AFS_USERSPACE_IP_ADDR */
 
-#if !defined(AFS_AIX41_ENV) && !defined(AFS_DUX40_ENV) && !defined(AFS_DARWIN_ENV) && !defined(AFS_FBSD_ENV)
+#if !defined(AFS_AIX41_ENV) && !defined(AFS_DUX40_ENV) && !defined(AFS_DARWIN_ENV) && !defined(AFS_XBSD_ENV)
 #define IFADDR2SA(f) (&((f)->ifa_addr))
 #else /* AFS_AIX41_ENV */
 #define IFADDR2SA(f) ((f)->ifa_addr)
 #endif
 
-int rxi_GetIFInfo()
+int rxi_GetIFInfo(void)
 {
     int i = 0;
     int different = 0;
@@ -570,17 +596,21 @@ int rxi_GetIFInfo()
     struct ifaddr *ifad;  /* ifnet points to a if_addrlist of ifaddrs */
     afs_uint32 ifinaddr;
 
-    bzero(addrs, sizeof(addrs));
-    bzero(mtus, sizeof(mtus));
+    memset(addrs, 0, sizeof(addrs));
+    memset(mtus, 0, sizeof(mtus));
 
 #if defined(AFS_DARWIN_ENV) || defined(AFS_FBSD_ENV)
     TAILQ_FOREACH(ifn, &ifnet, if_link) {
       if (i >= ADDRSPERSITE) break;
-#else 
+#else
+#if defined(AFS_OBSD_ENV)
+    for (ifn = ifnet.tqh_first; i < ADDRSPERSITE && ifn != NULL; ifn = ifn->if_list.tqe_next) {
+#else
     for (ifn = ifnet; ifn != NULL && i < ADDRSPERSITE; ifn = ifn->if_next) {
 #endif
+#endif
       rxmtu = (ifn->if_mtu - RX_IPUDP_SIZE);
-#if defined(AFS_DARWIN_ENV) || defined(AFS_FBSD_ENV)
+#if defined(AFS_DARWIN_ENV) || defined(AFS_XBSD_ENV)
       TAILQ_FOREACH(ifad, &ifn->if_addrhead, ifa_link) {
       if (i >= ADDRSPERSITE) break;
 #else
@@ -620,12 +650,27 @@ int rxi_GetIFInfo()
     }
    return different;
 }
-
+#ifdef AFS_DARWIN60_ENV
 /* Returns ifnet which best matches address */
 struct ifnet *
 rxi_FindIfnet(addr, pifad) 
      afs_uint32 addr;
-     struct in_ifaddr **pifad;
+     struct ifaddr **pifad;
+{
+  struct sockaddr_in s;
+
+  if (numMyNetAddrs == 0)
+    (void) rxi_GetIFInfo();
+
+  s.sin_family=AF_INET;
+  s.sin_addr.s_addr=addr;
+  *pifad=ifa_ifwithnet((struct sockaddr *)&s);
+ done:
+  return (*pifad ?  (*pifad)->ifa_ifp : NULL );
+}
+#else
+/* Returns ifnet which best matches address */
+struct ifnet *rxi_FindIfnet(afs_uint32 addr, struct in_ifaddr **pifad) 
 {
   afs_uint32 ppaddr;
   int match_value = 0;
@@ -640,7 +685,7 @@ rxi_FindIfnet(addr, pifad)
 
   /* if we're given an address, skip everything until we find it */
   if (!*pifad)
-#if defined(AFS_DARWIN_ENV) || defined(AFS_FBSD_ENV)
+#if defined(AFS_DARWIN_ENV) || defined(AFS_XBSD_ENV)
     *pifad = TAILQ_FIRST(&in_ifaddrhead);
 #else 
     *pifad = in_ifaddr;
@@ -648,14 +693,14 @@ rxi_FindIfnet(addr, pifad)
   else {
     if (((ppaddr & (*pifad)->ia_subnetmask) == (*pifad)->ia_subnet))
       match_value = 2; /* don't find matching nets, just subnets */
-#if defined(AFS_DARWIN_ENV) || defined(AFS_FBSD_ENV)
+#if defined(AFS_DARWIN_ENV) || defined(AFS_XBSD_ENV)
     *pifad = TAILQ_NEXT(*pifad, ia_link);
 #else   
     *pifad = (*pifad)->ia_next;
 #endif
   }
     
-#if defined(AFS_DARWIN_ENV) || defined(AFS_FBSD_ENV)
+#if defined(AFS_DARWIN_ENV) || defined(AFS_XBSD_ENV)
   for (ifa = *pifad; ifa; ifa = TAILQ_NEXT(ifa, ia_link) ) {
 #else
   for (ifa = *pifad; ifa; ifa = ifa->ia_next ) {
@@ -685,6 +730,7 @@ rxi_FindIfnet(addr, pifad)
  done:
   return (*pifad ?  (*pifad)->ia_ifp : NULL );
 }
+#endif
 #endif /* else AFS_USERSPACE_IP_ADDR */
 #endif /* !SUN5 && !SGI62 */
 
@@ -717,7 +763,7 @@ struct osi_socket *rxk_NewSocket(short aport)
 #endif
 
     AFS_STATCNT(osi_NewSocket);
-#if (defined(AFS_DARWIN_ENV) || defined(AFS_FBSD_ENV)) && defined(KERNEL_FUNNEL)
+#if (defined(AFS_DARWIN_ENV) || defined(AFS_XBSD_ENV)) && defined(KERNEL_FUNNEL)
     thread_funnel_switch(KERNEL_FUNNEL, NETWORK_FUNNEL);
 #endif
 #if    defined(AFS_HPUX102_ENV)
@@ -730,7 +776,7 @@ struct osi_socket *rxk_NewSocket(short aport)
 #else
 #ifdef AFS_SGI65_ENV
     code = socreate(AF_INET, &newSocket, SOCK_DGRAM,IPPROTO_UDP);
-#elif defined(AFS_FBSD_ENV)
+#elif defined(AFS_XBSD_ENV)
     code = socreate(AF_INET, &newSocket, SOCK_DGRAM,IPPROTO_UDP, curproc);
 #else
     code = socreate(AF_INET, &newSocket, SOCK_DGRAM, 0);
@@ -741,6 +787,9 @@ struct osi_socket *rxk_NewSocket(short aport)
     myaddr.sin_family = AF_INET;
     myaddr.sin_port = aport;
     myaddr.sin_addr.s_addr = 0;
+#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);
@@ -748,7 +797,7 @@ struct osi_socket *rxk_NewSocket(short aport)
        setuerror(ENOBUFS);
        goto bad;
     }
-    bcopy((caddr_t)&myaddr, (caddr_t)bindnam->b_rptr+SO_MSGOFFSET, addrsize);
+    memcpy((caddr_t)bindnam->b_rptr+SO_MSGOFFSET, (caddr_t)&myaddr, addrsize);
     bindnam->b_wptr = bindnam->b_rptr + (addrsize+SO_MSGOFFSET+1);
 
     code = sobind(newSocket, bindnam, addrsize);
@@ -766,9 +815,8 @@ struct osi_socket *rxk_NewSocket(short aport)
        if (code)
            osi_Panic("osi_NewSocket: last attempt to reserve 32K failed!\n");
     }
-#if defined(AFS_DARWIN_ENV) || defined(AFS_FBSD_ENV)
-    myaddr.sin_len = sizeof(myaddr);
-#if defined(AFS_FBSD_ENV)
+#if defined(AFS_DARWIN_ENV) || defined(AFS_XBSD_ENV)
+#if defined(AFS_XBSD_ENV)
     code = sobind(newSocket, (struct sockaddr *)&myaddr, curproc);
 #else
     code = sobind(newSocket, (struct sockaddr *)&myaddr);
@@ -785,7 +833,7 @@ struct osi_socket *rxk_NewSocket(short aport)
     nam = m_get(M_WAIT, MT_SONAME);
 #endif
     if (nam == NULL) {
-#if !defined(AFS_SUN5_ENV) && !defined(AFS_OSF_ENV) && !defined(AFS_SGI64_ENV) && !defined(AFS_FBSD_ENV)
+#if !defined(AFS_SUN5_ENV) && !defined(AFS_OSF_ENV) && !defined(AFS_SGI64_ENV) && !defined(AFS_XBSD_ENV)
        setuerror(ENOBUFS);
 #endif
        goto bad;
@@ -794,12 +842,12 @@ struct osi_socket *rxk_NewSocket(short aport)
 #ifdef  AFS_OSF_ENV
     myaddr.sin_len = nam->m_len;
 #endif  /* AFS_OSF_ENV */
-    bcopy(&myaddr, mtod(nam, caddr_t), sizeof(myaddr));
+    memcpy(mtod(nam, caddr_t), &myaddr, sizeof(myaddr));
 #ifdef AFS_SGI65_ENV
     BHV_PDATA(&bhv) = (void*)newSocket;
     code = sobind(&bhv, nam);
     m_freem(nam);
-#elif defined(AFS_FBSD_ENV)
+#elif defined(AFS_XBSD_ENV)
     code = sobind(newSocket, nam, curproc);
 #else
     code = sobind(newSocket, nam);
@@ -828,8 +876,7 @@ bad:
 
 
 /* free socket allocated by rxk_NewSocket */
-int rxk_FreeSocket(asocket)
-    register struct socket *asocket;
+int rxk_FreeSocket(register struct socket *asocket)
 {
     AFS_STATCNT(osi_FreeSocket);
 #if defined(AFS_DARWIN_ENV) && defined(KERNEL_FUNNEL)
@@ -847,9 +894,8 @@ int rxk_FreeSocket(asocket)
 /*
  * Run RX event daemon every second (5 times faster than rest of systems)
  */
-afs_rxevent_daemon() 
+void afs_rxevent_daemon(void) 
 {
-    int s, code;
     struct clock temp;
     SPLVAR;
 
@@ -865,7 +911,15 @@ afs_rxevent_daemon()
 #ifdef RX_ENABLE_LOCKS
        AFS_GLOCK();
 #endif /* RX_ENABLE_LOCKS */
-       afs_osi_Wait(500, (char *)0, 0);
+#ifdef RX_KERNEL_TRACE
+       afs_Trace1(afs_iclSetp, CM_TRACE_TIMESTAMP,
+                  ICL_TYPE_STRING, "before afs_osi_Wait()");
+#endif
+       afs_osi_Wait(500, NULL, 0);
+#ifdef RX_KERNEL_TRACE
+       afs_Trace1(afs_iclSetp, CM_TRACE_TIMESTAMP,
+                  ICL_TYPE_STRING, "after afs_osi_Wait()");
+#endif
        if (afs_termState == AFSOP_STOP_RXEVENT )
        {
 #ifdef RXK_LISTENER_ENV
@@ -873,7 +927,7 @@ afs_rxevent_daemon()
 #else
                afs_termState = AFSOP_STOP_COMPLETE;
 #endif
-               afs_osi_Wakeup(&afs_termState);
+               osi_rxWakeup(&afs_termState);
                return;
        }
     }
@@ -914,9 +968,21 @@ int rxk_ReadPacket(osi_socket so, struct rx_packet *p, int *host, int *port)
     p->wirevec[p->niovecs-1].iov_len = savelen + RX_EXTRABUFFERSIZE;
 
     nbytes = tlen + sizeof(afs_int32);
+#ifdef RX_KERNEL_TRACE
+    AFS_GLOCK();
+    afs_Trace1(afs_iclSetp, CM_TRACE_TIMESTAMP,
+               ICL_TYPE_STRING, "before osi_NetRecive()");
+    AFS_GUNLOCK();
+#endif
     code = osi_NetReceive(rx_socket, &from, p->wirevec, p->niovecs,
                            &nbytes);
 
+#ifdef RX_KERNEL_TRACE
+    AFS_GLOCK();
+    afs_Trace1(afs_iclSetp, CM_TRACE_TIMESTAMP,
+               ICL_TYPE_STRING, "after osi_NetRecive()");
+    AFS_GUNLOCK();
+#endif
    /* restore the vec to its correct state */
     p->wirevec[p->niovecs-1].iov_len = savelen;
 
@@ -975,14 +1041,15 @@ int rxk_ListenerPid; /* Used to signal process to wakeup at shutdown */
 
 #ifdef AFS_SUN5_ENV
 /*
- * Run the listener as a kernel process.
+ * Run the listener as a kernel thread.
  */
 void rxk_Listener(void)
 {
     extern id_t syscid;
     void rxk_ListenerProc(void);
-    if (newproc(rxk_ListenerProc, syscid, 59))
-       osi_Panic("rxk_Listener: failed to fork listener process!\n");
+    if (thread_create(NULL, DEFAULTSTKSZ, rxk_ListenerProc,
+       0, 0, &p0, TS_RUN, minclsyspri) == NULL)
+       osi_Panic("rxk_Listener: failed to start listener thread!\n");
 }
 
 void rxk_ListenerProc(void)
@@ -998,9 +1065,12 @@ void rxk_Listener(void)
     rxk_ListenerPid = current->pid;
 #endif
 #ifdef AFS_SUN5_ENV
-    rxk_ListenerPid = ttoproc(curthread)->p_pidp->pid_id;
+    rxk_ListenerPid = 1;       /* No PID, just a flag that we're alive */
 #endif /* AFS_SUN5_ENV */
-#if defined(AFS_DARWIN_ENV) || defined(AFS_FBSD_ENV)
+#ifdef AFS_XBSD_ENV
+    rxk_ListenerPid = curproc->p_pid;
+#endif /* AFS_FBSD_ENV */
+#if defined(AFS_DARWIN_ENV)
     rxk_ListenerPid = current_proc()->p_pid;
 #endif
 #if defined(RX_ENABLE_LOCKS) && !defined(AFS_SUN5_ENV)
@@ -1018,12 +1088,9 @@ void rxk_Listener(void)
        }
        if (!(code = rxk_ReadPacket(rx_socket, rxp, &host, &port))) {
            AFS_RXGLOCK();
-           rxp = rxi_ReceivePacket(rxp, rx_socket, host, port);
+           rxp = rxi_ReceivePacket(rxp, rx_socket, host, port, 0, 0);
            AFS_RXGUNLOCK();
        }
-       if (afs_termState == AFSOP_STOP_RXK_LISTENER)
-           break;
-
     }
 
 #ifdef RX_ENABLE_LOCKS
@@ -1031,18 +1098,18 @@ void rxk_Listener(void)
 #endif /* RX_ENABLE_LOCKS */
     if (afs_termState == AFSOP_STOP_RXK_LISTENER) {
        afs_termState = AFSOP_STOP_COMPLETE;
-       afs_osi_Wakeup(&afs_termState);
+       osi_rxWakeup(&afs_termState);
     }
     rxk_ListenerPid = 0;
-#ifdef AFS_LINUX24_ENV
-    afs_osi_Wakeup(&rxk_ListenerPid);
+#if defined(AFS_LINUX22_ENV) || defined(AFS_SUN5_ENV)
+    osi_rxWakeup(&rxk_ListenerPid);
 #endif
 #ifdef AFS_SUN5_ENV
     AFS_GUNLOCK();
 #endif /* AFS_SUN5_ENV */
 }
 
-#if !defined(AFS_LINUX20_ENV) && !defined(AFS_SUN5_ENV) && !defined(AFS_DARWIN_ENV) && !defined(AFS_FBSD_ENV)
+#if !defined(AFS_LINUX20_ENV) && !defined(AFS_SUN5_ENV) && !defined(AFS_DARWIN_ENV) && !defined(AFS_XBSD_ENV)
 /* The manner of stopping the rx listener thread may vary. Most unix's should
  * be able to call soclose.
  */