mtu = ((i == -1) ? htonl(1500) : afs_cb_interface.mtu[i]);
# else /* AFS_USERSPACE_IP_ADDR */
rx_ifnet_t tifnp;
+ RX_NET_EPOCH_ENTER();
tifnp = rxi_FindIfnet(parm2, NULL); /* make iterative */
mtu = (tifnp ? rx_ifnet_mtu(tifnp) : htonl(1500));
+
+ RX_NET_EPOCH_EXIT();
# endif /* else AFS_USERSPACE_IP_ADDR */
#endif /* !AFS_SUN5_ENV */
if (!code)
}
# else /* AFS_USERSPACE_IP_ADDR */
rx_ifnet_t tifnp;
+ RX_NET_EPOCH_ENTER();
tifnp = rxi_FindIfnet(parm2, &mask); /* make iterative */
if (!tifnp)
code = -1;
+
+ RX_NET_EPOCH_EXIT();
# endif /* else AFS_USERSPACE_IP_ADDR */
#endif /* !AFS_SUN5_ENV */
if (!code)
# elif defined(AFS_FBSD_ENV)
{
struct in_ifaddr *ifa;
+ struct rm_priotracker in_ifa_tracker;
CURVNET_SET(rx_socket->so_vnet);
+ IN_IFADDR_RLOCK(&in_ifa_tracker);
TAILQ_FOREACH(ifa, &V_in_ifaddrhead, ia_link) {
afsi_SetServerIPRank(sa, &ifa->ia_ifa);
}
+ IN_IFADDR_RUNLOCK(&in_ifa_tracker);
CURVNET_RESTORE();
}
# elif defined(AFS_OBSD_ENV)
# else /* AFS_USERSPACE_IP_ADDR */
rx_ifnet_t ifn;
+ RX_NET_EPOCH_ENTER();
+
# if !defined(AFS_SGI62_ENV)
if (numMyNetAddrs == 0)
(void)rxi_GetIFInfo();
rx_rto_setPeerTimeoutSecs(pp, 3);
pp->ifMTU = MIN(RX_REMOTE_PACKET_SIZE, rx_MyMaxSendSize);
}
+
+ RX_NET_EPOCH_EXIT();
+
# endif /* else AFS_USERSPACE_IP_ADDR */
#else /* AFS_SUN5_ENV */
afs_int32 mtu;
ifnet_list_free(ifns);
}
# else /* AFS_DARWIN80_ENV */
-# if defined(AFS_DARWIN_ENV) || defined(AFS_FBSD_ENV)
-# if defined(AFS_FBSD_ENV)
+# if defined(AFS_DARWIN_ENV)
+ TAILQ_FOREACH(ifn, &ifnet, if_link) {
+ if (i >= ADDRSPERSITE)
+ break;
+# elif defined(AFS_FBSD_ENV)
CURVNET_SET(rx_socket->so_vnet);
+ IFNET_RLOCK();
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)
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)
+ TAILQ_FOREACH(ifad, &ifn->if_addrhead, ifa_link) {
+ if (i >= ADDRSPERSITE)
+ break;
+# elif defined(AFS_FBSD_ENV)
+ if_addr_rlock(ifn);
TAILQ_FOREACH(ifad, &ifn->if_addrhead, ifa_link) {
if (i >= ADDRSPERSITE)
break;
}
}
}
+# ifdef AFS_FBSD_ENV
+ if_addr_runlock(ifn);
+# endif
}
# endif /* !AFS_DARWIN80_ENV */
}
# ifdef AFS_FBSD_ENV
+ IFNET_RUNLOCK();
CURVNET_RESTORE();
# endif
#define osi_YieldIfPossible()
#define osi_WakeupAndYieldIfPossible(x) rx_Wakeup(x)
+#ifdef AFS_FBSD120_ENV
+# define RX_NET_EPOCH_ENTER() NET_EPOCH_ENTER()
+# define RX_NET_EPOCH_EXIT() NET_EPOCH_EXIT()
+#else
+# define RX_NET_EPOCH_ENTER() do { } while(0)
+# define RX_NET_EPOCH_EXIT() do { } while(0)
+#endif
+
#if !defined(AFS_DARWIN80_ENV) || defined(UKERNEL)
# ifdef UKERNEL
# define rx_ifnet_t struct usr_ifnet *