summaryrefslogtreecommitdiffstats
path: root/freebsd/sys/netinet6/scope6.c
diff options
context:
space:
mode:
Diffstat (limited to 'freebsd/sys/netinet6/scope6.c')
-rw-r--r--freebsd/sys/netinet6/scope6.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/freebsd/sys/netinet6/scope6.c b/freebsd/sys/netinet6/scope6.c
index 64b866dd..d556f3a4 100644
--- a/freebsd/sys/netinet6/scope6.c
+++ b/freebsd/sys/netinet6/scope6.c
@@ -211,19 +211,20 @@ scope6_set(struct ifnet *ifp, struct scope6_id *idlist)
static int
scope6_get(struct ifnet *ifp, struct scope6_id *idlist)
{
+ struct epoch_tracker et;
struct scope6_id *sid;
/* We only need to lock the interface's afdata for SID() to work. */
- IF_AFDATA_RLOCK(ifp);
+ NET_EPOCH_ENTER(et);
sid = SID(ifp);
if (sid == NULL) { /* paranoid? */
- IF_AFDATA_RUNLOCK(ifp);
+ NET_EPOCH_EXIT(et);
return (EINVAL);
}
*idlist = *sid;
- IF_AFDATA_RUNLOCK(ifp);
+ NET_EPOCH_EXIT(et);
return (0);
}
@@ -420,10 +421,12 @@ in6_setscope(struct in6_addr *in6, struct ifnet *ifp, u_int32_t *ret_id)
zoneid = ifp->if_index;
in6->s6_addr16[1] = htons(zoneid & 0xffff); /* XXX */
} else if (scope != IPV6_ADDR_SCOPE_GLOBAL) {
- IF_AFDATA_RLOCK(ifp);
+ struct epoch_tracker et;
+
+ NET_EPOCH_ENTER(et);
sid = SID(ifp);
zoneid = sid->s6id_list[scope];
- IF_AFDATA_RUNLOCK(ifp);
+ NET_EPOCH_EXIT(et);
}
}