u_short rxmtu;
afs_int32 i, mtu;
+#ifndef AFS_SUN5_ENV
#ifdef AFS_USERSPACE_IP_ADDR
i = rxi_Findcbi(pp->host);
if (i == -1) {
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;
*/
-#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.
*/
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;
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);
#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)
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)
+#if defined(AFS_DARWIN_ENV) || defined(AFS_XBSD_ENV)
TAILQ_FOREACH(ifn, &ifnet, if_link) {
if (i >= ADDRSPERSITE) break;
#else
for (ifn = ifnet; ifn != NULL && i < ADDRSPERSITE; ifn = ifn->if_next) {
#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
/* 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;
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 ) {
#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)
#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);
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);
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);
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);
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;
#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);
rxk_ListenerPid = current->pid;
#endif
#ifdef AFS_SUN5_ENV
- rxk_ListenerPid = ttoproc(curthread)->p_pidp->pid_id;
+ rxk_ListenerPid = curproc->p_pid;
#endif /* AFS_SUN5_ENV */
-#if defined(AFS_DARWIN_ENV) || defined(AFS_FBSD_ENV)
+#ifdef AFS_FBSD_ENV
+ rxk_ListenerPid = curproc->p_pid;
+#endif /* AFS_SUN5_ENV */
+#if defined(AFS_DARWIN_ENV)
rxk_ListenerPid = current_proc()->p_pid;
#endif
#if defined(RX_ENABLE_LOCKS) && !defined(AFS_SUN5_ENV)
rxp = rxi_ReceivePacket(rxp, rx_socket, host, port);
AFS_RXGUNLOCK();
}
- if (afs_termState == AFSOP_STOP_RXK_LISTENER)
- break;
-
}
#ifdef RX_ENABLE_LOCKS
afs_osi_Wakeup(&afs_termState);
}
rxk_ListenerPid = 0;
-#ifdef AFS_LINUX24_ENV
+#if defined(AFS_LINUX22_ENV) || defined(AFS_SUN5_ENV)
afs_osi_Wakeup(&rxk_ListenerPid);
#endif
#ifdef AFS_SUN5_ENV
AFS_GUNLOCK();
+#ifdef HAVE_P_COREFILE
+ if (!curproc->p_corefile) /* newproc doesn't set it, but exit frees it */
+ curproc->p_corefile = refstr_alloc("core");
+#endif
+ exit(CLD_EXITED, 0);
#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.
*/