#include <afsconfig.h>
#include "afs/param.h"
-RCSID
- ("$Header$");
#include "rx/rx_kcommon.h"
int
rxk_DelPort(u_short aport)
{
- register int i;
- register unsigned short *tsp;
+ int i;
+ unsigned short *tsp;
for (i = 0, tsp = rxk_ports; i < MAXRXPORTS; i++, tsp++) {
if (*tsp == aport) {
#if !defined(AFS_LINUX26_ENV)
void
-#ifdef AFS_AIX_ENV
+#if defined(AFS_AIX_ENV) || defined(AFS_SGI_ENV)
osi_Panic(char *msg, void *a1, void *a2, void *a3)
#else
osi_Panic(char *msg, ...)
#endif
{
-#ifdef AFS_AIX_ENV
+#if defined(AFS_AIX_ENV) || defined(AFS_SGI_ENV)
if (!msg)
msg = "Unknown AFS panic";
printf(msg, a1, a2, a3);
#undef ADDBUF
- osi_Panic(buf);
+ osi_Panic("%s", buf);
}
#else
void
/* Called from rxi_FindPeer, when initializing a clear rx_peer structure,
to get interesting information. */
void
-rxi_InitPeerParams(register struct rx_peer *pp)
+rxi_InitPeerParams(struct rx_peer *pp)
{
u_short rxmtu;
- afs_int32 i, mtu;
#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; */
- pp->ifMTU = RX_REMOTE_PACKET_SIZE;
+ pp->ifMTU = MIN(RX_REMOTE_PACKET_SIZE, rx_MyMaxSendSize);
} else {
pp->timeout.sec = 2;
/* pp->timeout.usec = 0; */
pp->ifMTU = rxmtu;
}
} else { /* couldn't find the interface, so assume the worst */
- pp->ifMTU = RX_REMOTE_PACKET_SIZE;
+ pp->ifMTU = MIN(RX_REMOTE_PACKET_SIZE, rx_MyMaxSendSize);
}
-#else /* AFS_USERSPACE_IP_ADDR */
- AFS_IFNET_T ifn;
+# 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; */
pp->ifMTU = MIN(RX_MAX_PACKET_SIZE, rx_MyMaxSendSize);
-#ifdef IFF_POINTOPOINT
- if (ifnet_flags(ifn) & 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;
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 (ifnet_mtu(ifn) > (RX_IPUDP_SIZE + RX_HEADER_SIZE)) {
- rxmtu = ifnet_mtu(ifn) - RX_IPUDP_SIZE;
+ if (rx_ifnet_mtu(ifn) > (RX_IPUDP_SIZE + RX_HEADER_SIZE)) {
+ rxmtu = rx_ifnet_mtu(ifn) - RX_IPUDP_SIZE;
if (rxmtu < pp->ifMTU)
pp->ifMTU = rxmtu;
}
} else { /* couldn't find the interface, so assume the worst */
pp->timeout.sec = 3;
/* pp->timeout.usec = 0; */
- pp->ifMTU = RX_REMOTE_PACKET_SIZE;
+ pp->ifMTU = MIN(RX_REMOTE_PACKET_SIZE, rx_MyMaxSendSize);
}
-#endif /* else AFS_USERSPACE_IP_ADDR */
-#else /* AFS_SUN5_ENV */
+# 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; */
- pp->ifMTU = RX_REMOTE_PACKET_SIZE;
+ pp->ifMTU = MIN(RX_REMOTE_PACKET_SIZE, rx_MyMaxSendSize);
} else {
pp->timeout.sec = 2;
/* pp->timeout.usec = 0; */
pp->ifMTU = rxmtu;
}
} else { /* couldn't find the interface, so assume the worst */
- pp->ifMTU = RX_REMOTE_PACKET_SIZE;
+ pp->ifMTU = MIN(RX_REMOTE_PACKET_SIZE,rx_MyMaxSendSize);
}
-#endif /* AFS_SUN5_ENV */
+# endif /* AFS_SUN5_ENV */
#else /* ADAPT_MTU */
pp->rateFlag = 2; /* start timing after two full packets */
pp->timeout.sec = 2;
void
shutdown_rxkernel(void)
{
- register struct protosw *tpro, *last;
+ struct protosw *tpro, *last;
last = inetdomain.dom_protoswNPROTOSW;
for (tpro = inetdomain.dom_protosw; tpro < last; tpro++)
if (tpro->pr_protocol == IPPROTO_UDP) {
int i = 0;
int different = 0;
- register int rxmtu, maxmtu;
+ int rxmtu, maxmtu;
afs_uint32 addrs[ADDRSPERSITE];
int mtus[ADDRSPERSITE];
afs_uint32 ifinaddr;
errno_t t;
unsigned int count;
int cnt=0, m, j;
- ifaddr_t *ifads;
- ifnet_t *ifn;
+ rx_ifaddr_t *ifads;
+ rx_ifnet_t *ifns;
struct sockaddr sout;
struct sockaddr_in *sin;
struct in_addr pin;
#else
- struct ifaddr *ifad; /* ifnet points to a if_addrlist of ifaddrs */
- register struct ifnet *ifn;
+ rx_ifaddr_t ifad; /* ifnet points to a if_addrlist of ifaddrs */
+ rx_ifnet_t ifn;
#endif
memset(addrs, 0, sizeof(addrs));
memset(mtus, 0, sizeof(mtus));
#if defined(AFS_DARWIN80_ENV)
- if (!ifnet_list_get(AF_INET, &ifn, &count)) {
+ if (!ifnet_list_get(AF_INET, &ifns, &count)) {
for (m = 0; m < count; m++) {
- if (!ifnet_get_address_list(ifn[m], &ifads)) {
+ if (!ifnet_get_address_list(ifns[m], &ifads)) {
for (j = 0; ifads[j] != NULL && cnt < ADDRSPERSITE; j++) {
if ((t = ifaddr_address(ifads[j], &sout, sizeof(struct sockaddr))) == 0) {
sin = (struct sockaddr_in *)&sout;
- rxmtu = ifnet_mtu(ifaddr_ifnet(ifads[j])) - RX_IPUDP_SIZE;
+ rxmtu = rx_ifnet_mtu(rx_ifaddr_ifnet(ifads[j])) - RX_IPUDP_SIZE;
ifinaddr = ntohl(sin->sin_addr.s_addr);
if (myNetAddrs[i] != ifinaddr) {
different++;
ifnet_free_address_list(ifads);
}
}
- ifnet_list_free(ifn);
+ ifnet_list_free(ifns);
}
#else
#if defined(AFS_DARWIN_ENV) || defined(AFS_FBSD_ENV)
#if defined(AFS_DARWIN60_ENV) || defined(AFS_XBSD_ENV)
/* Returns ifnet which best matches address */
-#ifdef AFS_DARWIN80_ENV
-ifnet_t
-#else
-struct ifnet *
-#endif
+rx_ifnet_t
rxi_FindIfnet(afs_uint32 addr, afs_uint32 * maskp)
{
struct sockaddr_in s, sr;
-#ifdef AFS_DARWIN80_ENV
- ifaddr_t ifad;
-#else
- struct ifaddr *ifad;
-#endif
+ rx_ifaddr_t ifad;
s.sin_family = AF_INET;
s.sin_addr.s_addr = addr;
-#ifdef AFS_DARWIN80_ENV
- ifad = ifaddr_withnet((struct sockaddr *)&s);
-#else
- ifad = ifa_ifwithnet((struct sockaddr *)&s);
-#endif
+ ifad = rx_ifaddr_withnet((struct sockaddr *)&s);
-#ifdef AFS_DARWIN80_ENV
if (ifad && maskp) {
- ifaddr_netmask(ifad, (struct sockaddr *)&sr, sizeof(sr));
+ rx_ifaddr_netmask(ifad, (struct sockaddr *)&sr, sizeof(sr));
*maskp = sr.sin_addr.s_addr;
}
- return (ifad ? ifaddr_ifnet(ifad) : NULL);
-#else
- if (ifad && maskp)
- *maskp = ((struct sockaddr_in *)ifad->ifa_netmask)->sin_addr.s_addr;
- return (ifad ? ifad->ifa_ifp : NULL);
-#endif
+ return (ifad ? rx_ifaddr_ifnet(ifad) : NULL);
}
#else /* DARWIN60 || XBSD */
/* Returns ifnet which best matches address */
-struct ifnet *
+rx_ifnet_t
rxi_FindIfnet(afs_uint32 addr, afs_uint32 * maskp)
{
int match_value = 0;
osi_socket *
rxk_NewSocketHost(afs_uint32 ahost, short aport)
{
- register afs_int32 code;
+ afs_int32 code;
#ifdef AFS_DARWIN80_ENV
socket_t newSocket;
#else
/* free socket allocated by rxk_NewSocket */
int
-rxk_FreeSocket(register struct socket *asocket)
+rxk_FreeSocket(struct socket *asocket)
{
AFS_STATCNT(osi_FreeSocket);
#if defined(AFS_DARWIN_ENV) && defined(KERNEL_FUNNEL)
#endif /* !SUN5 && !LINUX20 */
#if defined(RXK_LISTENER_ENV) || defined(AFS_SUN5_ENV)
+#ifdef AFS_DARWIN80_ENV
+/* Shutting down should wake us up, as should an earlier event. */
+void
+rxi_ReScheduleEvents(void)
+{
+ /* needed to allow startup */
+ int glock = ISAFS_GLOCK();
+ if (!glock)
+ AFS_GLOCK();
+ osi_rxWakeup(&afs_termState);
+ if (!glock)
+ AFS_GUNLOCK();
+}
+#endif
/*
* Run RX event daemon every second (5 times faster than rest of systems)
*/
afs_Trace1(afs_iclSetp, CM_TRACE_TIMESTAMP, ICL_TYPE_STRING,
"before afs_osi_Wait()");
#endif
+#ifdef AFS_DARWIN80_ENV
+ afs_osi_TimedSleep(&afs_termState, ((temp.sec * 1000) +
+ (temp.usec / 1000)), 0);
+#else
afs_osi_Wait(500, NULL, 0);
+#endif
#ifdef RX_KERNEL_TRACE
afs_Trace1(afs_iclSetp, CM_TRACE_TIMESTAMP, ICL_TYPE_STRING,
"after afs_osi_Wait()");
struct sockaddr_in from;
int nbytes;
afs_int32 rlen;
- register afs_int32 tlen;
+ afs_int32 tlen;
afs_int32 savelen; /* was using rlen but had aliasing problems */
rx_computelen(p, tlen);
rx_SetDataSize(p, tlen); /* this is the size of the user data area */
if (nbytes <= 0) {
if (rx_stats_active) {
MUTEX_ENTER(&rx_stats_mutex);
- rx_AtomicIncrement_NL(rx_stats.bogusPacketOnRead);
- rx_AtomicSwap_NL(&rx_stats.bogusHost, from.sin_addr.s_addr);
+ rx_stats.bogusPacketOnRead++;
+ rx_stats.bogusHost = from.sin_addr.s_addr;
MUTEX_EXIT(&rx_stats_mutex);
}
dpf(("B: bogus packet from [%x,%d] nb=%d",
*host = from.sin_addr.s_addr;
*port = from.sin_port;
if (p->header.type > 0 && p->header.type < RX_N_PACKET_TYPES) {
- if (rx_stats_active)
- rx_AtomicIncrement(rx_stats.packetsRead[p->header.type - 1], rx_stats_mutex);
+ if (rx_stats_active) {
+ MUTEX_ENTER(&rx_stats_mutex);
+ rx_stats.packetsRead[p->header.type - 1]++;
+ MUTEX_EXIT(&rx_stats_mutex);
+ }
}
+#ifdef RX_TRIMDATABUFS
/* Free any empty packet buffers at the end of this packet */
rxi_TrimDataBufs(p, 1);
-
+#endif
return 0;
}
} else