aboutsummaryrefslogtreecommitdiff
path: root/sys/netinet/in_mcast.c
diff options
context:
space:
mode:
authorAlexander V. Chernikov <melifaro@FreeBSD.org>2020-07-02 21:04:08 +0000
committerAlexander V. Chernikov <melifaro@FreeBSD.org>2020-07-02 21:04:08 +0000
commit6ad7446c6f3ac5636428bc4064a48fb0b65905ae (patch)
treebca4738e23bdfd4958f3c6471b7f772535dc4d4c /sys/netinet/in_mcast.c
parentf60b4812d88581ff7932e4d9d7a50ecccce0e727 (diff)
downloadsrc-6ad7446c6f3ac5636428bc4064a48fb0b65905ae.tar.gz
src-6ad7446c6f3ac5636428bc4064a48fb0b65905ae.zip
Complete conversions from fib<4|6>_lookup_nh_<basic|ext> to fib<4|6>_lookup().
fib[46]_lookup_nh_ represents pre-epoch generation of fib api, providing less guarantees over pointer validness and requiring on-stack data copying. With no callers remaining, remove fib[46]_lookup_nh_ functions. Submitted by: Neel Chauhan <neel AT neelc DOT org> Differential Revision: https://reviews.freebsd.org/D25445
Notes
Notes: svn path=/head/; revision=362900
Diffstat (limited to 'sys/netinet/in_mcast.c')
-rw-r--r--sys/netinet/in_mcast.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/sys/netinet/in_mcast.c b/sys/netinet/in_mcast.c
index 32da7eb0482b..39fc82c53721 100644
--- a/sys/netinet/in_mcast.c
+++ b/sys/netinet/in_mcast.c
@@ -57,6 +57,7 @@ __FBSDID("$FreeBSD$");
#include <net/if_var.h>
#include <net/if_dl.h>
#include <net/route.h>
+#include <net/route/nhop.h>
#include <net/vnet.h>
#include <net/ethernet.h>
@@ -1902,7 +1903,7 @@ inp_lookup_mcast_ifp(const struct inpcb *inp,
{
struct rm_priotracker in_ifa_tracker;
struct ifnet *ifp;
- struct nhop4_basic nh4;
+ struct nhop_object *nh;
uint32_t fibnum;
KASSERT(gsin->sin_family == AF_INET, ("%s: not AF_INET", __func__));
@@ -1916,8 +1917,9 @@ inp_lookup_mcast_ifp(const struct inpcb *inp,
IN_IFADDR_RUNLOCK(&in_ifa_tracker);
} else {
fibnum = inp ? inp->inp_inc.inc_fibnum : 0;
- if (fib4_lookup_nh_basic(fibnum, gsin->sin_addr, 0, 0, &nh4)==0)
- ifp = nh4.nh_ifp;
+ nh = fib4_lookup(fibnum, gsin->sin_addr, 0, 0, 0);
+ if (nh != NULL)
+ ifp = nh->nh_ifp;
else {
struct in_ifaddr *ia;
struct ifnet *mifp;
@@ -2726,6 +2728,7 @@ inp_setmoptions(struct inpcb *inp, struct sockopt *sopt)
{
struct ip_moptions *imo;
int error;
+ struct epoch_tracker et;
error = 0;
@@ -2832,7 +2835,9 @@ inp_setmoptions(struct inpcb *inp, struct sockopt *sopt)
case IP_ADD_SOURCE_MEMBERSHIP:
case MCAST_JOIN_GROUP:
case MCAST_JOIN_SOURCE_GROUP:
+ NET_EPOCH_ENTER(et);
error = inp_join_group(inp, sopt);
+ NET_EPOCH_EXIT(et);
break;
case IP_DROP_MEMBERSHIP: