*/
#include <afsconfig.h>
-#include "afs/param.h"
+#include <afs/param.h>
#include "rx/rx_kcommon.h"
#include "rx_atomic.h"
+#include "rx_packet.h"
+#include "rx_internal.h"
#include "rx_stats.h"
+#include "rx_peer.h"
#ifdef AFS_HPUX110_ENV
#include "h/tihdr.h"
sockp = (osi_socket *)rxk_NewSocketHost(host, port);
if (sockp == (osi_socket *)0)
return OSI_NULLSOCKET;
- rxk_AddPort(port, (char *)sockp);
+ rxk_AddPort(port, (char *)sockp);
return (osi_socket) sockp;
}
void
rxi_StartListener(void)
{
+#if !defined(RXK_LISTENER_ENV) && !defined(RXK_UPCALL_ENV)
/* if kernel, give name of appropriate procedures */
-#ifndef RXK_LISTENER_ENV
rxk_GetPacketProc = MyPacketProc;
rxk_PacketArrivalProc = MyArrivalProc;
rxk_init();
{
u_short rxmtu;
-#ifdef ADAPT_MTU
-# ifndef AFS_SUN5_ENV
-# ifdef AFS_USERSPACE_IP_ADDR
+#ifndef AFS_SUN5_ENV
+# ifdef AFS_USERSPACE_IP_ADDR
afs_int32 i;
afs_int32 mtu;
i = rxi_Findcbi(pp->host);
if (i == -1) {
- pp->timeout.sec = 3;
- /* pp->timeout.usec = 0; */
+ rx_rto_setPeerTimeoutSecs(pp, 3);
pp->ifMTU = MIN(RX_REMOTE_PACKET_SIZE, rx_MyMaxSendSize);
} else {
- pp->timeout.sec = 2;
- /* pp->timeout.usec = 0; */
+ rx_rto_setPeerTimeoutSecs(pp, 2);
pp->ifMTU = MIN(RX_MAX_PACKET_SIZE, rx_MyMaxSendSize);
mtu = ntohl(afs_cb_interface.mtu[i]);
/* Diminish the packet size to one based on the MTU given by
pp->ifMTU = rxmtu;
}
}
-# else /* AFS_USERSPACE_IP_ADDR */
+# else /* AFS_USERSPACE_IP_ADDR */
rx_ifnet_t ifn;
-# if !defined(AFS_SGI62_ENV)
+# if !defined(AFS_SGI62_ENV)
if (numMyNetAddrs == 0)
(void)rxi_GetIFInfo();
-# endif
+# endif
ifn = rxi_FindIfnet(pp->host, NULL);
if (ifn) {
- pp->timeout.sec = 2;
- /* pp->timeout.usec = 0; */
+ rx_rto_setPeerTimeoutSecs(pp, 2);
pp->ifMTU = MIN(RX_MAX_PACKET_SIZE, rx_MyMaxSendSize);
-# ifdef IFF_POINTOPOINT
+# ifdef IFF_POINTOPOINT
if (rx_ifnet_flags(ifn) & IFF_POINTOPOINT) {
/* wish we knew the bit rate and the chunk size, sigh. */
- pp->timeout.sec = 4;
+ rx_rto_setPeerTimeoutSecs(pp, 4);
pp->ifMTU = RX_PP_PACKET_SIZE;
}
-# endif /* IFF_POINTOPOINT */
+# endif /* IFF_POINTOPOINT */
/* Diminish the packet size to one based on the MTU given by
* the interface. */
if (rx_ifnet_mtu(ifn) > (RX_IPUDP_SIZE + RX_HEADER_SIZE)) {
pp->ifMTU = rxmtu;
}
} else { /* couldn't find the interface, so assume the worst */
- pp->timeout.sec = 3;
- /* pp->timeout.usec = 0; */
+ rx_rto_setPeerTimeoutSecs(pp, 3);
pp->ifMTU = MIN(RX_REMOTE_PACKET_SIZE, rx_MyMaxSendSize);
}
-# endif /* else AFS_USERSPACE_IP_ADDR */
-# else /* AFS_SUN5_ENV */
+# endif /* else AFS_USERSPACE_IP_ADDR */
+#else /* AFS_SUN5_ENV */
afs_int32 mtu;
mtu = rxi_FindIfMTU(pp->host);
if (mtu <= 0) {
- pp->timeout.sec = 3;
- /* pp->timeout.usec = 0; */
+ rx_rto_setPeerTimeoutSecs(pp, 3);
pp->ifMTU = MIN(RX_REMOTE_PACKET_SIZE, rx_MyMaxSendSize);
} else {
- pp->timeout.sec = 2;
- /* pp->timeout.usec = 0; */
+ rx_rto_setPeerTimeoutSecs(pp, 2);
pp->ifMTU = MIN(RX_MAX_PACKET_SIZE, rx_MyMaxSendSize);
/* Diminish the packet size to one based on the MTU given by
pp->ifMTU = rxmtu;
}
}
-# endif /* AFS_SUN5_ENV */
-#else /* ADAPT_MTU */
- pp->rateFlag = 2; /* start timing after two full packets */
- pp->timeout.sec = 2;
- pp->ifMTU = OLD_MAX_PACKET_SIZE;
-#endif /* else ADAPT_MTU */
+#endif /* AFS_SUN5_ENV */
pp->ifMTU = rxi_AdjustIfMTU(pp->ifMTU);
pp->maxMTU = OLD_MAX_PACKET_SIZE; /* for compatibility with old guys */
pp->natMTU = MIN(pp->ifMTU, OLD_MAX_PACKET_SIZE);
#else /* AFS_USERSPACE_IP_ADDR */
-#if !defined(AFS_AIX41_ENV) && !defined(AFS_DUX40_ENV) && !defined(AFS_DARWIN_ENV) && !defined(AFS_XBSD_ENV)
+#if !defined(AFS_AIX41_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)
}
#else
#if defined(AFS_DARWIN_ENV) || defined(AFS_FBSD_ENV)
+#if defined(AFS_FBSD80_ENV)
+ TAILQ_FOREACH(ifn, &V_ifnet, if_link) {
+#else
TAILQ_FOREACH(ifn, &ifnet, if_link) {
+#endif
if (i >= ADDRSPERSITE)
break;
#elif defined(AFS_OBSD_ENV) || defined(AFS_NBSD_ENV)
addr = ntohl(addr);
-#if defined(AFS_DARWIN_ENV)
- for (ifa = TAILQ_FIRST(&in_ifaddrhead); ifa;
- ifa = TAILQ_NEXT(ifa, ia_link)) {
-#else
for (ifa = in_ifaddr; ifa; ifa = ifa->ia_next) {
-#endif
if ((addr & ifa->ia_netmask) == ifa->ia_net) {
if ((addr & ifa->ia_subnetmask) == ifa->ia_subnet) {
if (IA_SIN(ifa)->sin_addr.s_addr == addr) { /* ie, ME!!! */
code = socreate(AF_INET, &newSocket, SOCK_DGRAM, IPPROTO_UDP,
afs_osi_credp, curthread);
#elif defined(AFS_DARWIN80_ENV)
+#ifdef RXK_LISTENER_ENV
code = sock_socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP, NULL, NULL, &newSocket);
+#else
+ code = sock_socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP, rx_upcall, NULL, &newSocket);
+#endif
#elif defined(AFS_NBSD50_ENV)
- code = socreate(AF_INET, &newSocket, SOCK_DGRAM, 0, osi_curproc(), NULL);
+ code = socreate(AF_INET, &newSocket, SOCK_DGRAM, 0, osi_curproc(), NULL);
#elif defined(AFS_NBSD40_ENV)
code = socreate(AF_INET, &newSocket, SOCK_DGRAM, 0, osi_curproc());
#else
memcpy((caddr_t) bindnam->b_rptr + SO_MSGOFFSET, (caddr_t) & myaddr,
addrsize);
bindnam->b_wptr = bindnam->b_rptr + (addrsize + SO_MSGOFFSET + 1);
-#if defined(AFS_NBSD40_ENV)
- code = sobind(newSocket, bindnam, addrsize, osi_curproc());
-#else
code = sobind(newSocket, bindnam, addrsize);
-#endif
if (code) {
soclose(newSocket);
#if !defined(AFS_HPUX1122_ENV)
}
}
#else
+#if defined(AFS_NBSD_ENV)
+ solock(newSocket);
+#endif
code = soreserve(newSocket, 50000, 50000);
if (code) {
code = soreserve(newSocket, 32766, 32766);
if (code)
osi_Panic("osi_NewSocket: last attempt to reserve 32K failed!\n");
}
+#if defined(AFS_NBSD_ENV)
+ sounlock(newSocket);
+#endif
#endif
#if defined(AFS_DARWIN_ENV) || defined(AFS_FBSD_ENV)
#if defined(AFS_FBSD_ENV)
goto bad;
}
#else /* defined(AFS_DARWIN_ENV) || defined(AFS_FBSD_ENV) */
-#ifdef AFS_OSF_ENV
- nam = m_getclr(M_WAIT, MT_SONAME);
-#else /* AFS_OSF_ENV */
nam = m_get(M_WAIT, MT_SONAME);
-#endif
if (nam == NULL) {
#if defined(KERNEL_HAVE_UERROR)
setuerror(ENOBUFS);
}
#endif /* !SUN5 && !LINUX20 */
-#if defined(RXK_LISTENER_ENV) || defined(AFS_SUN5_ENV)
-#ifdef AFS_DARWIN80_ENV
+#if defined(RXK_LISTENER_ENV) || defined(AFS_SUN5_ENV) || defined(RXK_UPCALL_ENV)
+#ifdef RXK_TIMEDSLEEP_ENV
/* Shutting down should wake us up, as should an earlier event. */
void
rxi_ReScheduleEvents(void)
afs_Trace1(afs_iclSetp, CM_TRACE_TIMESTAMP, ICL_TYPE_STRING,
"before afs_osi_Wait()");
#endif
-#ifdef AFS_DARWIN80_ENV
+#ifdef RXK_TIMEDSLEEP_ENV
afs_osi_TimedSleep(&afs_termState, MAX(500, ((temp.sec * 1000) +
(temp.usec / 1000))), 0);
#else
if (afs_termState == AFSOP_STOP_RXEVENT) {
#ifdef RXK_LISTENER_ENV
afs_termState = AFSOP_STOP_RXK_LISTENER;
-#else
-#ifdef AFS_SUN510_ENV
+#elif defined(AFS_SUN510_ENV) || defined(RXK_UPCALL_ENV)
afs_termState = AFSOP_STOP_NETIF;
#else
afs_termState = AFSOP_STOP_COMPLETE;
#endif
-#endif
osi_rxWakeup(&afs_termState);
return;
}
struct task_struct *rxk_ListenerTask;
#endif
-#ifdef AFS_SUN5_ENV
-/*
- * Run the listener as a kernel thread.
- */
-void
-rxk_Listener(void)
-{
- extern id_t syscid;
- void rxk_ListenerProc(void);
- 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)
-#else /* AFS_SUN5_ENV */
void
rxk_Listener(void)
-#endif /* AFS_SUN5_ENV */
{
struct rx_packet *rxp = NULL;
int code;
#elif defined(AFS_DARWIN_ENV)
rxk_ListenerPid = current_proc()->p_pid;
#endif
-#if defined(RX_ENABLE_LOCKS) && !defined(AFS_SUN5_ENV)
+#ifdef RX_ENABLE_LOCKS
AFS_GUNLOCK();
-#endif /* RX_ENABLE_LOCKS && !AFS_SUN5_ENV */
+#endif /* RX_ENABLE_LOCKS */
while (afs_termState != AFSOP_STOP_RXK_LISTENER) {
/* See if a check for additional packets was issued */
rx_CheckPackets();
#if defined(AFS_SUN5_ENV) || defined(AFS_FBSD_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_XBSD_ENV)
icmn_err(CE_PANIC, msg, ap);
va_end(ap);
}
-#elif defined(AFS_DARWIN80_ENV) || (defined(AFS_LINUX22_ENV) && !defined(AFS_LINUX_26_ENV))
+#elif defined(AFS_DARWIN80_ENV) || defined(AFS_LINUX22_ENV) || defined(AFS_FBSD_ENV) || defined(UKERNEL)
char buf[256];
va_list ap;
if (!msg)
vsnprintf(buf, sizeof(buf), msg, ap);
va_end(ap);
printf("%s", buf);
- panic(buf);
+ panic("%s", buf);
#else
va_list ap;
if (!msg)
# ifdef AFS_LINUX20_ENV
* ((char *) 0) = 0;
# else
- panic(msg);
+ panic("%s", msg);
# endif
#endif
}