Date: Thu, 20 Nov 2014 22:42:00 +0000 (UTC) From: "Alexander V. Chernikov" <melifaro@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r274763 - in projects/routing/sys: contrib/ipfilter/netinet net netinet netinet6 netpfil/ipfw netpfil/pf Message-ID: <201411202242.sAKMg0LZ097576@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: melifaro Date: Thu Nov 20 22:41:59 2014 New Revision: 274763 URL: https://svnweb.freebsd.org/changeset/base/274763 Log: Simplify API: use new NHOP_LOOKUP_AIFP flag to select what ifp we need to return. Rename fib[64]_lookup_nh_basic to fib[64]_lookup_nh, add flags fields for all relevant functions. Modified: projects/routing/sys/contrib/ipfilter/netinet/ip_fil_freebsd.c projects/routing/sys/net/if_stf.c projects/routing/sys/net/rt_nhops.c projects/routing/sys/net/rt_nhops.h projects/routing/sys/netinet/in.c projects/routing/sys/netinet/in_gif.c projects/routing/sys/netinet/in_mcast.c projects/routing/sys/netinet/ip_input.c projects/routing/sys/netinet6/icmp6.c projects/routing/sys/netinet6/in6.c projects/routing/sys/netinet6/in6_gif.c projects/routing/sys/netinet6/in6_mcast.c projects/routing/sys/netinet6/in6_src.c projects/routing/sys/netinet6/ip6_output.c projects/routing/sys/netpfil/ipfw/ip_fw2.c projects/routing/sys/netpfil/pf/pf.c Modified: projects/routing/sys/contrib/ipfilter/netinet/ip_fil_freebsd.c ============================================================================== --- projects/routing/sys/contrib/ipfilter/netinet/ip_fil_freebsd.c Thu Nov 20 21:54:32 2014 (r274762) +++ projects/routing/sys/contrib/ipfilter/netinet/ip_fil_freebsd.c Thu Nov 20 22:41:59 2014 (r274763) @@ -958,7 +958,7 @@ ipf_verifysrc(fin) struct nhop4_basic nh4; memset(&nh4, 0, sizeof(nh4)); - if (fib4_lookup_nh_basic(RT_DEFAULT_FIB, fin->fin_src, 0, &nh4) != 0) + if (fib4_lookup_nh(RT_DEFAULT_FIB, fin->fin_src, 0, 0, &nh4) != 0) return (0); return (fin->fin_ifp == nh4.nh_ifp); Modified: projects/routing/sys/net/if_stf.c ============================================================================== --- projects/routing/sys/net/if_stf.c Thu Nov 20 21:54:32 2014 (r274762) +++ projects/routing/sys/net/if_stf.c Thu Nov 20 22:41:59 2014 (r274763) @@ -574,7 +574,7 @@ stf_checkaddr4(sc, in, inifp) if (sc && (STF2IFP(sc)->if_flags & IFF_LINK2) == 0 && inifp) { struct nhop4_basic nh4; - if (fib4_lookup_nh_basic(sc->sc_fibnum, *in, 0, &nh4) != 0) + if (fib4_lookup_nh(sc->sc_fibnum, *in, 0, 0, &nh4) != 0) return (-1); if (nh4.nh_ifp != inifp) return (-1); Modified: projects/routing/sys/net/rt_nhops.c ============================================================================== --- projects/routing/sys/net/rt_nhops.c Thu Nov 20 21:54:32 2014 (r274762) +++ projects/routing/sys/net/rt_nhops.c Thu Nov 20 22:41:59 2014 (r274763) @@ -123,22 +123,22 @@ static inline uint16_t fib_rte_to_nh_fla static void rib4_rte_to_nh_extended(struct rtentry *rte, struct in_addr dst, struct rt4_extended *prt4); static void fib4_rte_to_nh_extended(struct rtentry *rte, struct in_addr dst, - struct nhop4_extended *pnh4); -static void fib4_rte_to_nh_basic(struct rtentry *rte, struct in_addr dst, - struct nhop4_basic *pnh4); + uint32_t flags, struct nhop4_extended *pnh4); +static void fib4_rte_to_nh(struct rtentry *rte, struct in_addr dst, + uint32_t flags, struct nhop4_basic *pnh4); #endif #ifdef INET6 static void fib6_rte_to_nh_extended(struct rtentry *rte, struct in6_addr *dst, - struct nhop6_extended *pnh6); -static void fib6_rte_to_nh_basic(struct rtentry *rte, struct in6_addr *dst, - struct nhop6_basic *pnh6); + uint32_t flags, struct nhop6_extended *pnh6); +static void fib6_rte_to_nh(struct rtentry *rte, struct in6_addr *dst, + uint32_t flags, struct nhop6_basic *pnh6); static int fib6_storelladdr(struct ifnet *ifp, struct in6_addr *dst, int mm_flags, u_char *desten); static uint16_t fib6_get_ifa(struct rtentry *rte); static int fib6_lla_to_nh_basic(struct in6_addr *dst, uint32_t scopeid, - struct nhop6_basic *pnh6); + uint32_t flags, struct nhop6_basic *pnh6); static int fib6_lla_to_nh_extended(struct in6_addr *dst, uint32_t scopeid, - struct nhop6_extended *pnh6); + uint32_t flags, struct nhop6_extended *pnh6); static int fib6_lla_to_nh(struct in6_addr *dst, uint32_t scopeid, struct nhop_prepend *nh, struct ifnet **lifp); #endif @@ -321,7 +321,7 @@ fib4_lookup_prepend(uint32_t fibnum, str if (nh_ext != NULL) { /* Fill in extended info */ - fib4_rte_to_nh_extended(rte, dst, nh_ext); + fib4_rte_to_nh_extended(rte, dst, 0, nh_ext); } RIB_RUNLOCK(rh); @@ -413,12 +413,15 @@ fib_rte_to_nh_flags(int rt_flags) } static void -fib4_rte_to_nh_basic(struct rtentry *rte, struct in_addr dst, - struct nhop4_basic *pnh4) +fib4_rte_to_nh(struct rtentry *rte, struct in_addr dst, + uint32_t flags, struct nhop4_basic *pnh4) { struct sockaddr_in *gw; - pnh4->nh_ifp = rte->rt_ifa->ifa_ifp; + if ((flags & NHOP_LOOKUP_AIFP) == 0) + pnh4->nh_ifp = rte->rt_ifp; + else + pnh4->nh_ifp = rte->rt_ifa->ifa_ifp; pnh4->nh_mtu = min(rte->rt_mtu, rte->rt_ifp->if_mtu); if (rte->rt_flags & RTF_GATEWAY) { gw = (struct sockaddr_in *)rte->rt_gateway; @@ -435,12 +438,15 @@ fib4_rte_to_nh_basic(struct rtentry *rte static void fib4_rte_to_nh_extended(struct rtentry *rte, struct in_addr dst, - struct nhop4_extended *pnh4) + uint32_t flags, struct nhop4_extended *pnh4) { struct sockaddr_in *gw; struct in_ifaddr *ia; - pnh4->nh_ifp = rte->rt_ifa->ifa_ifp; + if ((flags & NHOP_LOOKUP_AIFP) == 0) + pnh4->nh_ifp = rte->rt_ifp; + else + pnh4->nh_ifp = rte->rt_ifa->ifa_ifp; pnh4->nh_mtu = min(rte->rt_mtu, rte->rt_ifp->if_mtu); if (rte->rt_flags & RTF_GATEWAY) { gw = (struct sockaddr_in *)rte->rt_gateway; @@ -502,8 +508,8 @@ rib4_rte_to_nh_extended(struct rtentry * * - howewer mtu from "transmit" interface will be returned. */ int -fib4_lookup_nh_basic(uint32_t fibnum, struct in_addr dst, uint32_t flowid, - struct nhop4_basic *pnh4) +fib4_lookup_nh(uint32_t fibnum, struct in_addr dst, uint32_t flowid, + uint32_t flags, struct nhop4_basic *pnh4) { struct rib_head *rh; struct radix_node *rn; @@ -511,7 +517,7 @@ fib4_lookup_nh_basic(uint32_t fibnum, st struct rtentry *rte; RIB_LOCK_READER; - KASSERT((fibnum < rt_numfibs), ("fib4_lookup_nh_basic: bad fibnum")); + KASSERT((fibnum < rt_numfibs), ("fib4_lookup_nh: bad fibnum")); rh = rt_tables_get_rnh(fibnum, AF_INET); if (rh == NULL) return (ENOENT); @@ -527,7 +533,7 @@ fib4_lookup_nh_basic(uint32_t fibnum, st rte = RNTORT(rn); /* Ensure route & ifp is UP */ if (RT_LINK_IS_UP(rte->rt_ifp)) { - fib4_rte_to_nh_basic(rte, dst, pnh4); + fib4_rte_to_nh(rte, dst, flags, pnh4); RIB_RUNLOCK(rh); return (0); @@ -538,43 +544,6 @@ fib4_lookup_nh_basic(uint32_t fibnum, st return (ENOENT); } -int -fib4_lookup_nh_ifp(uint32_t fibnum, struct in_addr dst, uint32_t flowid, - struct nhop4_basic *pnh4) -{ - struct rib_head *rh; - struct radix_node *rn; - struct sockaddr_in sin; - struct rtentry *rte; - RIB_LOCK_READER; - - KASSERT((fibnum < rt_numfibs), ("fib4_lookup_nh_ifp: bad fibnum")); - rh = rt_tables_get_rnh(fibnum, AF_INET); - if (rh == NULL) - return (ENOENT); - - /* Prepare lookup key */ - memset(&sin, 0, sizeof(sin)); - sin.sin_len = sizeof(struct sockaddr_in); - sin.sin_addr = dst; - - RIB_RLOCK(rh); - rn = rh->rnh_matchaddr((void *)&sin, &rh->head); - if (rn != NULL && ((rn->rn_flags & RNF_ROOT) == 0)) { - rte = RNTORT(rn); - /* Ensure route & ifp is UP */ - if (RT_LINK_IS_UP(rte->rt_ifp)) { - fib4_rte_to_nh_basic(rte, dst, pnh4); - RIB_RUNLOCK(rh); - pnh4->nh_ifp = rte->rt_ifp; - return (0); - } - } - RIB_RUNLOCK(rh); - - return (ENOENT); -} - /* * Performs IPv4 route table lookup on @dst. Returns 0 on success. * Stores extende nexthop info provided @pnh4 structure. @@ -610,7 +579,7 @@ fib4_lookup_nh_ext(uint32_t fibnum, stru rte = RNTORT(rn); /* Ensure route & ifp is UP */ if (RT_LINK_IS_UP(rte->rt_ifp)) { - fib4_rte_to_nh_extended(rte, dst, pnh4); + fib4_rte_to_nh_extended(rte, dst, flags, pnh4); if ((flags & NHOP_LOOKUP_REF) != 0) { /* TODO: Do lwref on egress ifp's */ } @@ -946,7 +915,7 @@ fib6_get_ifa(struct rtentry *rte) static int fib6_lla_to_nh_basic(struct in6_addr *dst, uint32_t scopeid, - struct nhop6_basic *pnh6) + uint32_t flags, struct nhop6_basic *pnh6) { struct ifnet *ifp; @@ -957,8 +926,13 @@ fib6_lla_to_nh_basic(struct in6_addr *ds /* Do explicit nexthop zero unless we're copying it */ memset(pnh6, 0, sizeof(*pnh6)); - pnh6->nh_ifp = ifp; pnh6->nh_mtu = IN6_LINKMTU(ifp); + pnh6->nh_ifp = ifp; + if ((flags & NHOP_LOOKUP_AIFP)!=0 && in6_ifawithifp_lla(ifp, dst) != 0){ + if ((ifp = V_loif) != NULL) + pnh6->nh_ifp = ifp; + } + /* No flags set */ pnh6->nh_addr = *dst; @@ -967,7 +941,7 @@ fib6_lla_to_nh_basic(struct in6_addr *ds static int fib6_lla_to_nh_extended(struct in6_addr *dst, uint32_t scopeid, - struct nhop6_extended *pnh6) + uint32_t flags, struct nhop6_extended *pnh6) { struct ifnet *ifp; @@ -978,8 +952,12 @@ fib6_lla_to_nh_extended(struct in6_addr /* Do explicit nexthop zero unless we're copying it */ memset(pnh6, 0, sizeof(*pnh6)); - pnh6->nh_ifp = ifp; pnh6->nh_mtu = IN6_LINKMTU(ifp); + pnh6->nh_ifp = ifp; + if ((flags & NHOP_LOOKUP_AIFP)!=0 && in6_ifawithifp_lla(ifp, dst) != 0){ + if ((ifp = V_loif) != NULL) + pnh6->nh_ifp = ifp; + } /* No flags set */ pnh6->nh_addr = *dst; @@ -988,7 +966,7 @@ fib6_lla_to_nh_extended(struct in6_addr static int rib6_lla_to_nh_extended(struct in6_addr *dst, uint32_t scopeid, - struct rt6_extended *prt6) + uint32_t flags, struct rt6_extended *prt6) { struct ifnet *ifp; @@ -1047,15 +1025,18 @@ fib6_lla_to_nh(struct in6_addr *dst, uin static void -fib6_rte_to_nh_basic(struct rtentry *rte, struct in6_addr *dst, - struct nhop6_basic *pnh6) +fib6_rte_to_nh(struct rtentry *rte, struct in6_addr *dst, + uint32_t flags, struct nhop6_basic *pnh6) { struct sockaddr_in6 *gw; /* Do explicit nexthop zero unless we're copying it */ memset(pnh6, 0, sizeof(*pnh6)); - pnh6->nh_ifp = ifnet_byindex(fib6_get_ifa(rte)); + if ((flags & NHOP_LOOKUP_AIFP) == 0) + pnh6->nh_ifp = rte->rt_ifp; + else + pnh6->nh_ifp = ifnet_byindex(fib6_get_ifa(rte)); pnh6->nh_mtu = min(rte->rt_mtu, IN6_LINKMTU(rte->rt_ifp)); if (rte->rt_flags & RTF_GATEWAY) { @@ -1073,7 +1054,7 @@ fib6_rte_to_nh_basic(struct rtentry *rte static void fib6_rte_to_nh_extended(struct rtentry *rte, struct in6_addr *dst, - struct nhop6_extended *pnh6) + uint32_t flags, struct nhop6_extended *pnh6) { struct sockaddr_in6 *gw; struct in6_ifaddr *ia; @@ -1081,7 +1062,11 @@ fib6_rte_to_nh_extended(struct rtentry * /* Do explicit nexthop zero unless we're copying it */ memset(pnh6, 0, sizeof(*pnh6)); - pnh6->nh_ifp = ifnet_byindex(fib6_get_ifa(rte)); + if ((flags & NHOP_LOOKUP_AIFP) == 0) + pnh6->nh_ifp = rte->rt_ifp; + else + pnh6->nh_ifp = ifnet_byindex(fib6_get_ifa(rte)); + pnh6->nh_mtu = min(rte->rt_mtu, IN6_LINKMTU(rte->rt_ifp)); if (rte->rt_flags & RTF_GATEWAY) { gw = (struct sockaddr_in6 *)rte->rt_gateway; @@ -1104,7 +1089,7 @@ fib6_rte_to_nh_extended(struct rtentry * bitcount32((x).__u6_addr.__u6_addr32[3]) static void rib6_rte_to_nh_extended(struct rtentry *rte, struct in6_addr *dst, - struct rt6_extended *prt6) + uint32_t flags, struct rt6_extended *prt6) { struct sockaddr_in6 *gw; @@ -1130,52 +1115,8 @@ rib6_rte_to_nh_extended(struct rtentry * } int -fib6_lookup_nh_ifp(uint32_t fibnum, struct in6_addr *dst, uint32_t scopeid, - uint32_t flowid, struct nhop6_basic *pnh6) -{ - struct rib_head *rh; - struct radix_node *rn; - struct sockaddr_in6 sin6; - struct rtentry *rte; - RIB_LOCK_READER; - - if (IN6_IS_SCOPE_LINKLOCAL(dst)) { - /* Do not lookup link-local addresses in rtable */ - /* XXX: Check if dst is local */ - return (fib6_lla_to_nh_basic(dst, scopeid, pnh6)); - } - - KASSERT((fibnum < rt_numfibs), ("fib6_lookup_nh_basic: bad fibnum")); - rh = rt_tables_get_rnh(fibnum, AF_INET6); - if (rh == NULL) - return (ENOENT); - - /* Prepare lookup key */ - memset(&sin6, 0, sizeof(sin6)); - sin6.sin6_addr = *dst; - sin6.sin6_scope_id = scopeid; - sa6_embedscope(&sin6, 0); - - RIB_RLOCK(rh); - rn = rh->rnh_matchaddr((void *)&sin6, &rh->head); - if (rn != NULL && ((rn->rn_flags & RNF_ROOT) == 0)) { - rte = RNTORT(rn); - /* Ensure route & ifp is UP */ - if (RT_LINK_IS_UP(rte->rt_ifp)) { - fib6_rte_to_nh_basic(rte, dst, pnh6); - pnh6->nh_ifp = rte->rt_ifp; - RIB_RUNLOCK(rh); - return (0); - } - } - RIB_RUNLOCK(rh); - - return (ENOENT); -} - -int -fib6_lookup_nh_basic(uint32_t fibnum, struct in6_addr *dst, uint32_t scopeid, - uint32_t flowid, struct nhop6_basic *pnh6) +fib6_lookup_nh(uint32_t fibnum, struct in6_addr *dst, uint32_t scopeid, + uint32_t flowid, uint32_t flags, struct nhop6_basic *pnh6) { struct rib_head *rh; struct radix_node *rn; @@ -1185,10 +1126,10 @@ fib6_lookup_nh_basic(uint32_t fibnum, st if (IN6_IS_SCOPE_LINKLOCAL(dst)) { /* Do not lookup link-local addresses in rtable */ - return (fib6_lla_to_nh_basic(dst, scopeid, pnh6)); + return (fib6_lla_to_nh_basic(dst, scopeid, flags, pnh6)); } - KASSERT((fibnum < rt_numfibs), ("fib6_lookup_nh_basic: bad fibnum")); + KASSERT((fibnum < rt_numfibs), ("fib6_lookup_nh: bad fibnum")); rh = rt_tables_get_rnh(fibnum, AF_INET6); if (rh == NULL) return (ENOENT); @@ -1205,7 +1146,7 @@ fib6_lookup_nh_basic(uint32_t fibnum, st rte = RNTORT(rn); /* Ensure route & ifp is UP */ if (RT_LINK_IS_UP(rte->rt_ifp)) { - fib6_rte_to_nh_basic(rte, dst, pnh6); + fib6_rte_to_nh(rte, dst, flags, pnh6); RIB_RUNLOCK(rh); return (0); } @@ -1237,7 +1178,7 @@ fib6_lookup_nh_ext(uint32_t fibnum, stru if (IN6_IS_SCOPE_LINKLOCAL(dst)) { /* Do not lookup link-local addresses in rtable */ /* XXX: Do lwref on egress ifp */ - return (fib6_lla_to_nh_extended(dst, scopeid, pnh6)); + return (fib6_lla_to_nh_extended(dst, scopeid, flags, pnh6)); } KASSERT((fibnum < rt_numfibs), ("fib4_lookup_nh_ext: bad fibnum")); @@ -1258,7 +1199,7 @@ fib6_lookup_nh_ext(uint32_t fibnum, stru rte = RNTORT(rn); /* Ensure route & ifp is UP */ if (RT_LINK_IS_UP(rte->rt_ifp)) { - fib6_rte_to_nh_extended(rte, dst, pnh6); + fib6_rte_to_nh_extended(rte, dst, flags, pnh6); if ((flags & NHOP_LOOKUP_REF) != 0) { /* TODO: Do lwref on egress ifp's */ } @@ -1291,7 +1232,7 @@ rib6_lookup_nh_ext(uint32_t fibnum, stru if (IN6_IS_SCOPE_LINKLOCAL(dst)) { /* Do not lookup link-local addresses in rtable */ /* XXX: Do lwref on egress ifp */ - return (rib6_lla_to_nh_extended(dst, scopeid, prt6)); + return (rib6_lla_to_nh_extended(dst, scopeid, flags, prt6)); } KASSERT((fibnum < rt_numfibs), ("rib6_lookup_nh_ext: bad fibnum")); @@ -1312,7 +1253,7 @@ rib6_lookup_nh_ext(uint32_t fibnum, stru rte = RNTORT(rn); /* Ensure route & ifp is UP */ if (RT_LINK_IS_UP(rte->rt_ifp)) { - rib6_rte_to_nh_extended(rte, dst, prt6); + rib6_rte_to_nh_extended(rte, dst, flags, prt6); if ((flags & NHOP_LOOKUP_REF) != 0) { /* TODO: Do lwref on egress ifp's */ } Modified: projects/routing/sys/net/rt_nhops.h ============================================================================== --- projects/routing/sys/net/rt_nhops.h Thu Nov 20 21:54:32 2014 (r274762) +++ projects/routing/sys/net/rt_nhops.h Thu Nov 20 22:41:59 2014 (r274763) @@ -216,23 +216,21 @@ struct route_info { uint32_t scopeid; /* Desired scope id to use */ }; -int fib4_lookup_nh_ifp(uint32_t fibnum, struct in_addr dst, uint32_t flowid, - struct nhop4_basic *pnh4); -int fib4_lookup_nh_basic(uint32_t fibnum, struct in_addr dst, uint32_t flowid, - struct nhop4_basic *pnh4); +#define NHOP_LOOKUP_REF 0x01 /* reference objects in passed structure */ +#define NHOP_LOOKUP_AIFP 0x02 /* return route "address" interface */ + +int fib4_lookup_nh(uint32_t fibnum, struct in_addr dst, uint32_t flowid, + uint32_t flags, struct nhop4_basic *pnh4); int fib4_lookup_nh_ext(uint32_t fibnum, struct in_addr dst, uint32_t flowid, uint32_t flags, struct nhop4_extended *pnh4); void fib4_free_nh_ext(uint32_t fibnum, struct nhop4_extended *pnh4); -#define NHOP_LOOKUP_REF 0x01 int rib4_lookup_nh_ext(uint32_t fibnum, struct in_addr dst, uint32_t flowid, uint32_t flags, struct rt4_extended *prt4); void rib4_free_nh_ext(uint32_t fibnum, struct rt4_extended *prt4); -int fib6_lookup_nh_ifp(uint32_t fibnum, struct in6_addr *dst, uint32_t scopeid, - uint32_t flowid, struct nhop6_basic *pnh6); -int fib6_lookup_nh_basic(uint32_t fibnum, struct in6_addr *dst, - uint32_t scopeid, uint32_t flowid, struct nhop6_basic *pnh6); +int fib6_lookup_nh(uint32_t fibnum, struct in6_addr *dst, uint32_t scopeid, + uint32_t flowid, uint32_t flags, struct nhop6_basic *pnh6); int fib6_lookup_nh_ext(uint32_t fibnum, struct in6_addr *dst, uint32_t scopeid, uint32_t flowid, uint32_t flags, struct nhop6_extended *pnh6); Modified: projects/routing/sys/netinet/in.c ============================================================================== --- projects/routing/sys/netinet/in.c Thu Nov 20 21:54:32 2014 (r274762) +++ projects/routing/sys/netinet/in.c Thu Nov 20 22:41:59 2014 (r274763) @@ -1024,7 +1024,7 @@ in_lltable_rtcheck(struct ifnet *ifp, u_ ("sin_family %d", l3addr->sa_family)); dst = ((struct sockaddr_in *)l3addr)->sin_addr; - if (fib4_lookup_nh_ifp(ifp->if_fib, dst, 0, &nh4) != 0) + if (fib4_lookup_nh(ifp->if_fib, dst, 0, 0, &nh4) != 0) return (EINVAL); /* Modified: projects/routing/sys/netinet/in_gif.c ============================================================================== --- projects/routing/sys/netinet/in_gif.c Thu Nov 20 21:54:32 2014 (r274762) +++ projects/routing/sys/netinet/in_gif.c Thu Nov 20 22:41:59 2014 (r274763) @@ -193,7 +193,7 @@ gif_validate4(const struct ip *ip, struc fibnum = sc->gif_fibnum; - if (fib4_lookup_nh_basic(fibnum, ip->ip_src, 0, &nh4) != 0) + if (fib4_lookup_nh(fibnum, ip->ip_src, 0, 0, &nh4) != 0) return (0); if (nh4.nh_ifp != ifp) return (0); Modified: projects/routing/sys/netinet/in_mcast.c ============================================================================== --- projects/routing/sys/netinet/in_mcast.c Thu Nov 20 21:54:32 2014 (r274762) +++ projects/routing/sys/netinet/in_mcast.c Thu Nov 20 22:41:59 2014 (r274763) @@ -1898,8 +1898,8 @@ inp_lookup_mcast_ifp(const struct inpcb } else { struct nhop4_basic nh4; - if (fib4_lookup_nh_basic(inp ? inp->inp_inc.inc_fibnum : 0, - gsin->sin_addr, 0, &nh4) != 0) { + if (fib4_lookup_nh(inp ? inp->inp_inc.inc_fibnum : 0, + gsin->sin_addr, 0, 0, &nh4) != 0) { return (nh4.nh_ifp); } else { struct in_ifaddr *ia; Modified: projects/routing/sys/netinet/ip_input.c ============================================================================== --- projects/routing/sys/netinet/ip_input.c Thu Nov 20 21:54:32 2014 (r274762) +++ projects/routing/sys/netinet/ip_input.c Thu Nov 20 22:41:59 2014 (r274763) @@ -1466,7 +1466,8 @@ ip_forward(struct mbuf *m, int srcrt) #endif pnh4 = &nh4; - if (fib4_lookup_nh_basic(M_GETFIB(m), ip->ip_dst, 0, &nh4) != 0) + if (fib4_lookup_nh(M_GETFIB(m), ip->ip_dst, 0, NHOP_LOOKUP_AIFP, + &nh4) != 0) pnh4 = NULL; #ifndef IPSEC /* Modified: projects/routing/sys/netinet6/icmp6.c ============================================================================== --- projects/routing/sys/netinet6/icmp6.c Thu Nov 20 21:54:32 2014 (r274762) +++ projects/routing/sys/netinet6/icmp6.c Thu Nov 20 22:41:59 2014 (r274763) @@ -2401,7 +2401,7 @@ icmp6_redirect_input(struct mbuf *m, int /* ip6->ip6_src must be equal to gw for icmp6->icmp6_reddst */ struct nhop6_basic nh6; - if (fib6_lookup_nh_basic(RT_DEFAULT_FIB, &reddst6, 0, 0, &nh6)==0) { + if (fib6_lookup_nh(RT_DEFAULT_FIB, &reddst6, 0, 0, 0, &nh6)==0) { /* XXX: Think about AF_LINK GW */ if ((nh6.nh_flags & NHF_GATEWAY) == 0) { nd6log((LOG_ERR, Modified: projects/routing/sys/netinet6/in6.c ============================================================================== --- projects/routing/sys/netinet6/in6.c Thu Nov 20 21:54:32 2014 (r274762) +++ projects/routing/sys/netinet6/in6.c Thu Nov 20 22:41:59 2014 (r274763) @@ -2188,7 +2188,7 @@ in6_lltable_rtcheck(struct ifnet *ifp, /* Our local addresses are always only installed on the default FIB. */ in6_splitscope(&((struct sockaddr_in6 *)l3addr)->sin6_addr, &dst, &scopeid); - error = fib6_lookup_nh_ifp(RT_DEFAULT_FIB, &dst, scopeid, 0, &nh6); + error = fib6_lookup_nh(RT_DEFAULT_FIB, &dst, scopeid, 0, 0, &nh6); if (error != 0 || ((nh6.nh_flags & NHF_GATEWAY) != 0) || nh6.nh_ifp != ifp) { struct ifaddr *ifa; /* Modified: projects/routing/sys/netinet6/in6_gif.c ============================================================================== --- projects/routing/sys/netinet6/in6_gif.c Thu Nov 20 21:54:32 2014 (r274762) +++ projects/routing/sys/netinet6/in6_gif.c Thu Nov 20 22:41:59 2014 (r274763) @@ -203,7 +203,7 @@ gif_validate6(const struct ip6_hdr *ip6, fibnum = sc->gif_fibnum; in6_splitscope(&ip6->ip6_src, &src, &scopeid); - if (fib6_lookup_nh_basic(fibnum, &src, scopeid, 0, &nh6) != 0) + if (fib6_lookup_nh(fibnum, &src, scopeid, 0, 0, &nh6) != 0) return (0); if (nh6.nh_ifp != ifp) return (0); Modified: projects/routing/sys/netinet6/in6_mcast.c ============================================================================== --- projects/routing/sys/netinet6/in6_mcast.c Thu Nov 20 21:54:32 2014 (r274762) +++ projects/routing/sys/netinet6/in6_mcast.c Thu Nov 20 22:41:59 2014 (r274763) @@ -1786,7 +1786,7 @@ in6p_lookup_mcast_ifp(const struct inpcb in6_splitscope(&gsin6->sin6_addr, &dst, &scopeid); fibnum = in6p ? in6p->inp_inc.inc_fibnum : RT_DEFAULT_FIB; - if (fib6_lookup_nh_ifp(fibnum, &dst, scopeid, 0, &nh6) != 0) + if (fib6_lookup_nh(fibnum, &dst, scopeid, 0, 0, &nh6) != 0) return (NULL); return (nh6.nh_ifp); Modified: projects/routing/sys/netinet6/in6_src.c ============================================================================== --- projects/routing/sys/netinet6/in6_src.c Thu Nov 20 21:54:32 2014 (r274762) +++ projects/routing/sys/netinet6/in6_src.c Thu Nov 20 22:41:59 2014 (r274763) @@ -797,7 +797,7 @@ in6_selectif(uint32_t fibnum, struct soc * XXX: Embedded form? */ in6_splitscope(&sin6_next->sin6_addr, &dst, &scopeid); - if (fib6_lookup_nh_basic(fibnum, &dst, scopeid, 0, &nh6) != 0) { + if (fib6_lookup_nh(fibnum, &dst, scopeid, 0, 0, &nh6) != 0) { error = EHOSTUNREACH; goto done; } @@ -815,7 +815,7 @@ in6_selectif(uint32_t fibnum, struct soc } /* Do route lookup */ - if (fib6_lookup_nh_basic(fibnum, &dst, scopeid, 0, &nh6) != 0) { + if (fib6_lookup_nh(fibnum, &dst, scopeid, 0, 0, &nh6) != 0) { error = EHOSTUNREACH; goto done; } @@ -829,8 +829,6 @@ in6_selectif(uint32_t fibnum, struct soc * (this may happen when we are sending a packet to one of * our own addresses.) * - * XXX: basic_ means we return "proper" interface address. - * */ if (opts && opts->ip6po_pktinfo && opts->ip6po_pktinfo->ipi6_ifindex) { if (!(ifp->if_flags & IFF_LOOPBACK) && Modified: projects/routing/sys/netinet6/ip6_output.c ============================================================================== --- projects/routing/sys/netinet6/ip6_output.c Thu Nov 20 21:54:32 2014 (r274762) +++ projects/routing/sys/netinet6/ip6_output.c Thu Nov 20 22:41:59 2014 (r274763) @@ -1868,8 +1868,8 @@ do { \ * the outgoing interface. * TODO: embedded, Multipath */ - if (fib6_lookup_nh_basic(so->so_fibnum, - &in6p->in6p_faddr, 0, 0, &nh6) != 0) { + if (fib6_lookup_nh(so->so_fibnum, + &in6p->in6p_faddr, 0, 0, 0, &nh6) != 0) { error = EHOSTUNREACH; break; } Modified: projects/routing/sys/netpfil/ipfw/ip_fw2.c ============================================================================== --- projects/routing/sys/netpfil/ipfw/ip_fw2.c Thu Nov 20 21:54:32 2014 (r274762) +++ projects/routing/sys/netpfil/ipfw/ip_fw2.c Thu Nov 20 22:41:59 2014 (r274763) @@ -440,7 +440,7 @@ verify_path(struct in_addr src, struct i #else struct nhop4_basic nh4; - if (fib4_lookup_nh_basic(fib, src, 0, &nh4) != 0) + if (fib4_lookup_nh(fib, src, 0, NHOP_LOOKUP_AIFP, &nh4) != 0) return (0); /* @@ -519,7 +519,7 @@ verify_path6(struct in6_addr *src, struc struct nhop6_basic nh6; /* XXX: unembed scope? */ - if (fib6_lookup_nh_basic(fib, src, 0, 0, &nh6) != 0) + if (fib6_lookup_nh(fib, src, 0, 0, NHOP_LOOKUP_AIFP, &nh6) != 0) return (0); /* If ifp is provided, check for equality with route table. */ Modified: projects/routing/sys/netpfil/pf/pf.c ============================================================================== --- projects/routing/sys/netpfil/pf/pf.c Thu Nov 20 21:54:32 2014 (r274762) +++ projects/routing/sys/netpfil/pf/pf.c Thu Nov 20 22:41:59 2014 (r274763) @@ -2915,15 +2915,14 @@ pf_calc_mss(struct pf_addr *addr, sa_fam #ifdef INET case AF_INET: hlen = sizeof(struct ip); - if (fib4_lookup_nh_basic(rtableid, addr->v4, 0, &nh.u.nh4) == 0) + if (fib4_lookup_nh(rtableid, addr->v4, 0, 0, &nh.u.nh4) == 0) mss = nh.u.nh4.nh_mtu - hlen - sizeof(struct tcphdr); break; #endif /* INET */ #ifdef INET6 case AF_INET6: hlen = sizeof(struct ip6_hdr); - if (fib6_lookup_nh_basic(rtableid, &addr->v6, 0, 0, &nh.u.nh6) - == 0) + if (fib6_lookup_nh(rtableid, &addr->v6, 0, 0, 0, &nh.u.nh6)==0) mss = nh.u.nh6.nh_mtu - hlen - sizeof(struct tcphdr); break; #endif /* INET6 */ @@ -5100,14 +5099,13 @@ pf_routable(struct pf_addr *addr, sa_fam */ if (IN6_IS_SCOPE_EMBED(&addr->v6)) return (1); - if (fib6_lookup_nh_basic(rtableid, &addr->v6, 0, 0, &nh.u.nh6) - != 0) + if (fib6_lookup_nh(rtableid, &addr->v6, 0, 0, 0, &nh.u.nh6)!=0) return (0); break; #endif #ifdef INET case AF_INET: - if (fib4_lookup_nh_basic(rtableid, addr->v4, 0, &nh.u.nh4) != 0) + if (fib4_lookup_nh(rtableid, addr->v4, 0, 0, &nh.u.nh4) != 0) return (0); break; #endif
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201411202242.sAKMg0LZ097576>