Lines Matching refs:pr

321 		struct nd_prefixctl pr;
357 bzero(&pr, sizeof(pr));
358 pr.ndpr_prefix.sin6_family = AF_INET6;
359 pr.ndpr_prefix.sin6_len = sizeof(pr.ndpr_prefix);
360 pr.ndpr_prefix.sin6_addr = pi->nd_opt_pi_prefix;
361 pr.ndpr_ifp = (struct ifnet *)m->m_pkthdr.rcvif;
363 pr.ndpr_raf_onlink = (pi->nd_opt_pi_flags_reserved &
365 pr.ndpr_raf_auto = (pi->nd_opt_pi_flags_reserved &
367 pr.ndpr_plen = pi->nd_opt_pi_prefix_len;
368 pr.ndpr_vltime = ntohl(pi->nd_opt_pi_valid_time);
369 pr.ndpr_pltime = ntohl(pi->nd_opt_pi_preferred_time);
370 (void)prelist_update(&pr, dr, m, mcast);
670 struct nd_prefix *pr;
689 LIST_FOREACH(pr, &V_nd_prefix, ndpr_entry) {
691 if ((pfxrtr = pfxrtr_lookup(pr, dr)) != NULL)
921 pfxrtr_lookup(struct nd_prefix *pr, struct nd_defrouter *dr)
925 LIST_FOREACH(search, &pr->ndpr_advrtrs, pfr_entry) {
934 pfxrtr_add(struct nd_prefix *pr, struct nd_defrouter *dr)
944 LIST_INSERT_HEAD(&pr->ndpr_advrtrs, new, pfr_entry);
976 nd6_prelist_add(struct nd_prefixctl *pr, struct nd_defrouter *dr,
987 new->ndpr_ifp = pr->ndpr_ifp;
988 new->ndpr_prefix = pr->ndpr_prefix;
989 new->ndpr_plen = pr->ndpr_plen;
990 new->ndpr_vltime = pr->ndpr_vltime;
991 new->ndpr_pltime = pr->ndpr_pltime;
992 new->ndpr_flags = pr->ndpr_flags;
1017 ip6_sprintf(ip6buf, &pr->ndpr_prefix.sin6_addr),
1018 pr->ndpr_plen, if_name(pr->ndpr_ifp), e));
1031 prelist_remove(struct nd_prefix *pr)
1038 pr->ndpr_vltime = 0;
1039 pr->ndpr_pltime = 0;
1043 * of pr->ndpr_raf_onlink and pr->ndpr_raf_auto not to confuse users
1047 if ((pr->ndpr_stateflags & NDPRF_ONLINK) != 0 &&
1048 (e = nd6_prefix_offlink(pr)) != 0) {
1051 ip6_sprintf(ip6buf, &pr->ndpr_prefix.sin6_addr),
1052 pr->ndpr_plen, if_name(pr->ndpr_ifp), e));
1056 if (pr->ndpr_refcnt > 0)
1060 LIST_REMOVE(pr, ndpr_entry);
1063 LIST_FOREACH_SAFE(pfr, &pr->ndpr_advrtrs, pfr_entry, next) {
1066 free(pr, M_IP6NDP);
1082 struct nd_prefix *pr;
1100 if ((pr = nd6_prefix_lookup(new)) != NULL) {
1102 * nd6_prefix_lookup() ensures that pr and new have the same
1112 pr->ndpr_raf_onlink = 1;
1114 pr->ndpr_raf_auto = 1;
1116 pr->ndpr_vltime = new->ndpr_vltime;
1117 pr->ndpr_pltime = new->ndpr_pltime;
1118 (void)in6_init_prefix_ltimes(pr); /* XXX error case? */
1119 pr->ndpr_lastupdate = time_uptime;
1123 (pr->ndpr_stateflags & NDPRF_ONLINK) == 0) {
1126 if ((e = nd6_prefix_onlink(pr)) != 0) {
1132 &pr->ndpr_prefix.sin6_addr),
1133 pr->ndpr_plen, if_name(pr->ndpr_ifp), e));
1138 if (dr && pfxrtr_lookup(pr, dr) == NULL)
1139 pfxrtr_add(pr, dr);
1146 error = nd6_prelist_add(new, dr, &pr);
1162 if (pr->ndpr_raf_onlink == 0) {
1163 pr->ndpr_vltime = 0;
1164 pr->ndpr_pltime = 0;
1165 in6_init_prefix_ltimes(pr);
1171 * Note that pr must be non NULL at this point.
1226 * one. (pr is never NULL here)
1228 if (ifa6->ia6_ndpr != pr)
1281 in6_init_address_ltimes(pr, &lt6_tmp);
1347 if (ifidlen + pr->ndpr_plen != 128) {
1351 pr->ndpr_plen, if_name(ifp)));
1357 * note that we should use pr (not new) for reference.
1359 pr->ndpr_refcnt++;
1360 ia6->ia6_ndpr = pr;
1407 find_pfxlist_reachable_router(struct nd_prefix *pr)
1413 LIST_FOREACH(pfxrtr, &pr->ndpr_advrtrs, pfr_entry) {
1443 struct nd_prefix *pr;
1452 LIST_FOREACH(pr, &V_nd_prefix, ndpr_entry) {
1453 if (pr->ndpr_raf_onlink && find_pfxlist_reachable_router(pr))
1461 if (pr == NULL) {
1475 if (pr != NULL || (!TAILQ_EMPTY(&V_nd_defrouter) && pfxrtr == NULL)) {
1485 LIST_FOREACH(pr, &V_nd_prefix, ndpr_entry) {
1487 if (IN6_IS_ADDR_LINKLOCAL(&pr->ndpr_prefix.sin6_addr))
1494 if (pr->ndpr_raf_onlink == 0)
1497 if (pr->ndpr_raf_auto == 0)
1500 if ((pr->ndpr_stateflags & NDPRF_DETACHED) == 0 &&
1501 find_pfxlist_reachable_router(pr) == NULL)
1502 pr->ndpr_stateflags |= NDPRF_DETACHED;
1503 if ((pr->ndpr_stateflags & NDPRF_DETACHED) != 0 &&
1504 find_pfxlist_reachable_router(pr) != 0)
1505 pr->ndpr_stateflags &= ~NDPRF_DETACHED;
1509 LIST_FOREACH(pr, &V_nd_prefix, ndpr_entry) {
1510 if (IN6_IS_ADDR_LINKLOCAL(&pr->ndpr_prefix.sin6_addr))
1513 if (pr->ndpr_raf_onlink == 0)
1516 if (pr->ndpr_raf_auto == 0)
1519 if ((pr->ndpr_stateflags & NDPRF_DETACHED) != 0)
1520 pr->ndpr_stateflags &= ~NDPRF_DETACHED;
1532 LIST_FOREACH(pr, &V_nd_prefix, ndpr_entry) {
1536 if (IN6_IS_ADDR_LINKLOCAL(&pr->ndpr_prefix.sin6_addr))
1539 if (pr->ndpr_raf_onlink == 0)
1542 if (pr->ndpr_raf_auto == 0)
1545 if ((pr->ndpr_stateflags & NDPRF_DETACHED) != 0 &&
1546 (pr->ndpr_stateflags & NDPRF_ONLINK) != 0) {
1547 if ((e = nd6_prefix_offlink(pr)) != 0) {
1552 &pr->ndpr_prefix.sin6_addr),
1553 pr->ndpr_plen, e));
1556 if ((pr->ndpr_stateflags & NDPRF_DETACHED) == 0 &&
1557 (pr->ndpr_stateflags & NDPRF_ONLINK) == 0 &&
1558 pr->ndpr_raf_onlink) {
1559 if ((e = nd6_prefix_onlink(pr)) != 0) {
1564 &pr->ndpr_prefix.sin6_addr),
1565 pr->ndpr_plen, e));
1631 nd6_prefix_onlink_rtrequest(struct nd_prefix *pr, struct ifaddr *ifa)
1646 mask6.sin6_addr = pr->ndpr_mask;
1654 (struct sockaddr *)&pr->ndpr_prefix, ifa->ifa_addr,
1658 "error(%d) but rt is NULL, pr=%p, ifa=%p", __func__,
1659 error, pr, ifa));
1676 pr->ndpr_stateflags |= NDPRF_ONLINK;
1687 ip6_sprintf(ip6buf, &pr->ndpr_prefix.sin6_addr),
1688 pr->ndpr_plen, if_name(pr->ndpr_ifp),
1709 nd6_prefix_onlink(struct nd_prefix *pr)
1712 struct ifnet *ifp = pr->ndpr_ifp;
1718 if ((pr->ndpr_stateflags & NDPRF_ONLINK) != 0) {
1721 ip6_sprintf(ip6buf, &pr->ndpr_prefix.sin6_addr),
1722 pr->ndpr_plen));
1734 if (opr == pr)
1740 if (opr->ndpr_plen == pr->ndpr_plen &&
1741 in6_are_prefix_equal(&pr->ndpr_prefix.sin6_addr,
1742 &opr->ndpr_prefix.sin6_addr, pr->ndpr_plen))
1774 ip6_sprintf(ip6buf, &pr->ndpr_prefix.sin6_addr),
1775 pr->ndpr_plen, if_name(ifp)));
1779 error = nd6_prefix_onlink_rtrequest(pr, ifa);
1788 nd6_prefix_offlink(struct nd_prefix *pr)
1791 struct ifnet *ifp = pr->ndpr_ifp;
1799 if ((pr->ndpr_stateflags & NDPRF_ONLINK) == 0) {
1802 ip6_sprintf(ip6buf, &pr->ndpr_prefix.sin6_addr),
1803 pr->ndpr_plen));
1810 bcopy(&pr->ndpr_prefix.sin6_addr, &sa6.sin6_addr,
1815 bcopy(&pr->ndpr_mask, &mask6.sin6_addr, sizeof(struct in6_addr));
1837 pr->ndpr_stateflags &= ~NDPRF_ONLINK;
1847 if (opr == pr)
1860 if (opr->ndpr_plen == pr->ndpr_plen &&
1861 in6_are_prefix_equal(&pr->ndpr_prefix.sin6_addr,
1862 &opr->ndpr_prefix.sin6_addr, pr->ndpr_plen)) {
1883 ip6_sprintf(ip6buf, &sa6.sin6_addr), pr->ndpr_plen,
1895 in6_ifadd(struct nd_prefixctl *pr, int mcast)
1897 struct ifnet *ifp = pr->ndpr_ifp;
1903 int prefixlen = pr->ndpr_plen;
1956 ifra.ifra_addr.sin6_addr = pr->ndpr_prefix.sin6_addr;
1980 ifra.ifra_lifetime.ia6t_vltime = pr->ndpr_vltime;
1981 ifra.ifra_lifetime.ia6t_pltime = pr->ndpr_pltime;