Lines Matching refs:pr

286 	struct nd_prefix *pr;
296 pr = up->ndprl_pr;
299 NDPR_LOCK(pr);
300 prproxy = (pr->ndpr_stateflags & NDPRF_PRPROXY);
301 VERIFY(!prproxy || ((pr->ndpr_stateflags & NDPRF_ONLINK) &&
302 !(pr->ndpr_stateflags & NDPRF_IFSCOPE)));
304 nd6_prproxy_sols_reap(pr);
305 VERIFY(pr->ndpr_prproxy_sols_cnt == 0);
306 VERIFY(RB_EMPTY(&pr->ndpr_prproxy_sols));
308 if (enable && pr->ndpr_allmulti_cnt == 0) {
310 pr->ndpr_allmulti_cnt++;
311 if_allmulti(pr->ndpr_ifp, TRUE);
312 } else if (!enable && pr->ndpr_allmulti_cnt > 0) {
314 pr->ndpr_allmulti_cnt--;
315 if_allmulti(pr->ndpr_ifp, FALSE);
318 if ((rt = pr->ndpr_rt) != NULL) {
323 NDPR_UNLOCK(pr);
325 NDPR_UNLOCK(pr);
327 NDPR_REMREF(pr);
341 pr = down->ndprl_pr;
351 NDPR_LOCK(pr);
352 if (enable && pr->ndpr_allmulti_cnt == 0) {
353 pr->ndpr_allmulti_cnt++;
354 if_allmulti(pr->ndpr_ifp, TRUE);
355 } else if (!enable && pr->ndpr_allmulti_cnt > 0) {
356 pr->ndpr_allmulti_cnt--;
357 if_allmulti(pr->ndpr_ifp, FALSE);
360 if ((rt = pr->ndpr_rt) != NULL) {
365 NDPR_UNLOCK(pr);
367 NDPR_UNLOCK(pr);
369 NDPR_REMREF(pr);
389 struct nd_prefix *pr;
412 for (pr = nd_prefix.lh_first; pr; pr = pr->ndpr_next) {
413 NDPR_LOCK(pr);
414 if (IN6_IS_ADDR_LINKLOCAL(&pr->ndpr_prefix.sin6_addr) ||
415 (!enable && !(pr->ndpr_stateflags & NDPRF_PRPROXY)) ||
416 (enable && (pr->ndpr_stateflags & NDPRF_PRPROXY)) ||
417 (pr->ndpr_stateflags & NDPRF_IFSCOPE) ||
418 pr->ndpr_ifp != ifp) {
419 NDPR_UNLOCK(pr);
430 if (enable && (pr->ndpr_stateflags & NDPRF_ONLINK) &&
432 pr->ndpr_stateflags |= NDPRF_PRPROXY;
433 NDPR_ADDREF_LOCKED(pr);
434 NDPR_UNLOCK(pr);
436 pr->ndpr_stateflags &= ~NDPRF_PRPROXY;
437 NDPR_ADDREF_LOCKED(pr);
438 NDPR_UNLOCK(pr);
440 NDPR_UNLOCK(pr);
441 pr = NULL; /* don't go further */
444 if (pr == NULL)
449 NDPR_REMREF(pr);
453 up->ndprl_pr = pr; /* keep reference from above */
467 pr = up->ndprl_pr;
469 NDPR_LOCK(pr);
470 bcopy(&pr->ndpr_prefix.sin6_addr, &pr_addr, sizeof (pr_addr));
471 pr_len = pr->ndpr_plen;
472 NDPR_UNLOCK(pr);
492 NDPR_ADDREF(pr);
493 down->ndprl_up = pr;
584 struct nd_prefix *pr;
608 for (pr = nd_prefix.lh_first; pr; pr = pr->ndpr_next) {
609 NDPR_LOCK(pr);
610 if (!(pr->ndpr_stateflags & NDPRF_ONLINK) ||
611 !(pr->ndpr_stateflags & NDPRF_PRPROXY) ||
612 pr->ndpr_plen != pr_len ||
613 !in6_are_prefix_equal(&pr->ndpr_prefix.sin6_addr,
615 NDPR_UNLOCK(pr);
618 NDPR_UNLOCK(pr);
622 if ((pr_up = pr) == NULL) {
658 for (pr = nd_prefix.lh_first; pr; pr = pr->ndpr_next) {
659 NDPR_LOCK(pr);
660 if (!(pr->ndpr_stateflags & NDPRF_ONLINK) ||
661 !(pr->ndpr_stateflags & NDPRF_IFSCOPE) ||
662 pr->ndpr_plen != pr_len ||
663 !in6_are_prefix_equal(&pr->ndpr_prefix.sin6_addr,
665 NDPR_UNLOCK(pr);
668 NDPR_UNLOCK(pr);
674 NDPR_ADDREF(pr);
675 down->ndprl_pr = pr;
701 struct nd_prefix *pr;
715 for (pr = nd_prefix.lh_first; pr; pr = pr->ndpr_next) {
716 NDPR_LOCK(pr);
717 if ((pr->ndpr_stateflags & NDPRF_ONLINK) &&
718 (pr->ndpr_stateflags & NDPRF_PRPROXY) &&
719 in6_are_prefix_equal(&pr->ndpr_prefix.sin6_addr,
721 NDPR_UNLOCK(pr);
725 NDPR_UNLOCK(pr);
747 struct nd_prefix *pr, *fwd;
756 for (pr = nd_prefix.lh_first; pr; pr = pr->ndpr_next) {
757 NDPR_LOCK(pr);
758 if (!(pr->ndpr_stateflags & NDPRF_ONLINK) ||
759 !(pr->ndpr_stateflags & NDPRF_PRPROXY) ||
760 !IN6_ARE_MASKED_ADDR_EQUAL(&pr->ndpr_prefix.sin6_addr,
761 taddr, &pr->ndpr_mask)) {
762 NDPR_UNLOCK(pr);
766 VERIFY(!(pr->ndpr_stateflags & NDPRF_IFSCOPE));
767 bcopy(&pr->ndpr_prefix.sin6_addr, &pr_addr, sizeof (pr_addr));
768 pr_len = pr->ndpr_plen;
769 NDPR_UNLOCK(pr);
803 pr = ndprl->ndprl_pr;
807 NDPR_REMREF(pr);
812 NDPR_LOCK(pr);
813 if (pr->ndpr_stateflags & NDPRF_ONLINK) {
814 NDPR_UNLOCK(pr);
823 NDPR_UNLOCK(pr);
825 NDPR_REMREF(pr);
848 struct nd_prefix *pr, *fwd;
858 for (pr = nd_prefix.lh_first; pr; pr = pr->ndpr_next) {
859 NDPR_LOCK(pr);
860 if (!(pr->ndpr_stateflags & NDPRF_ONLINK) ||
861 !(pr->ndpr_stateflags & NDPRF_PRPROXY) ||
862 !IN6_ARE_MASKED_ADDR_EQUAL(&pr->ndpr_prefix.sin6_addr,
863 taddr, &pr->ndpr_mask)) {
864 NDPR_UNLOCK(pr);
868 VERIFY(!(pr->ndpr_stateflags & NDPRF_IFSCOPE));
869 bcopy(&pr->ndpr_prefix.sin6_addr, &pr_addr, sizeof (pr_addr));
870 pr_len = pr->ndpr_plen;
878 !nd6_solsrc_enq(pr, ifp, saddr, taddr)) {
879 NDPR_UNLOCK(pr);
883 NDPR_UNLOCK(pr);
934 pr = ndprl->ndprl_pr;
938 NDPR_REMREF(pr);
943 NDPR_LOCK(pr);
944 if (pr->ndpr_stateflags & NDPRF_ONLINK) {
945 NDPR_UNLOCK(pr);
956 NDPR_UNLOCK(pr);
958 NDPR_REMREF(pr);
979 struct nd_prefix *pr;
988 for (pr = nd_prefix.lh_first; pr; pr = pr->ndpr_next) {
989 NDPR_LOCK(pr);
990 if (!(pr->ndpr_stateflags & NDPRF_ONLINK) ||
991 !(pr->ndpr_stateflags & NDPRF_PRPROXY) ||
992 !IN6_ARE_MASKED_ADDR_EQUAL(&pr->ndpr_prefix.sin6_addr,
993 taddr, &pr->ndpr_mask)) {
994 NDPR_UNLOCK(pr);
998 VERIFY(!(pr->ndpr_stateflags & NDPRF_IFSCOPE));
1008 if (!nd6_solsrc_deq(pr, taddr, &daddr, &fwd_ifp)) {
1009 NDPR_UNLOCK(pr);
1013 NDPR_UNLOCK(pr);
1029 bcopy(&pr->ndpr_prefix.sin6_addr, &pr_addr,
1031 pr_len = pr->ndpr_plen;
1032 NDPR_UNLOCK(pr);
1071 pr = ndprl->ndprl_pr;
1075 VERIFY(pr == NULL);
1080 VERIFY(pr != NULL);
1082 NDPR_LOCK(pr);
1083 send_na = ((pr->ndpr_stateflags & NDPRF_ONLINK) &&
1085 NDPR_UNLOCK(pr);
1110 if (pr != NULL)
1111 NDPR_REMREF(pr);
1138 nd6_prproxy_sols_purge(struct nd_prefix *pr, u_int64_t max_stgt)
1143 NDPR_LOCK_ASSERT_HELD(pr);
1147 &pr->ndpr_prproxy_sols, tmp) {
1148 VERIFY(pr->ndpr_prproxy_sols_cnt > 0);
1151 pr->ndpr_prproxy_sols_cnt--;
1153 &pr->ndpr_prproxy_sols, soltgt);
1158 if (max_stgt == 0 || pr->ndpr_prproxy_sols_cnt < max_stgt) {
1159 VERIFY(max_stgt != 0 || (pr->ndpr_prproxy_sols_cnt == 0 &&
1160 RB_EMPTY(&pr->ndpr_prproxy_sols)));
1166 &pr->ndpr_prproxy_sols, tmp) {
1167 VERIFY(pr->ndpr_prproxy_sols_cnt > 0);
1168 pr->ndpr_prproxy_sols_cnt--;
1169 RB_REMOVE(prproxy_sols_tree, &pr->ndpr_prproxy_sols, soltgt);
1171 if (pr->ndpr_prproxy_sols_cnt < max_stgt)
1181 nd6_prproxy_sols_reap(struct nd_prefix *pr)
1183 nd6_prproxy_sols_purge(pr, 0);
1191 nd6_prproxy_sols_prune(struct nd_prefix *pr, u_int32_t max_stgt)
1193 nd6_prproxy_sols_purge(pr, max_stgt);
1200 nd6_solsrc_enq(struct nd_prefix *pr, struct ifnet *ifp,
1208 NDPR_LOCK_ASSERT_HELD(pr);
1209 VERIFY(!(pr->ndpr_stateflags & NDPRF_IFSCOPE));
1210 VERIFY((pr->ndpr_stateflags & (NDPRF_ONLINK|NDPRF_PRPROXY)) ==
1223 soltgt = RB_FIND(prproxy_sols_tree, &pr->ndpr_prproxy_sols, &find);
1225 if (max_stgt != 0 && pr->ndpr_prproxy_sols_cnt >= max_stgt) {
1226 VERIFY(!RB_EMPTY(&pr->ndpr_prproxy_sols));
1227 nd6_prproxy_sols_prune(pr, max_stgt);
1228 VERIFY(pr->ndpr_prproxy_sols_cnt < max_stgt);
1241 pr->ndpr_prproxy_sols_cnt++;
1242 VERIFY(pr->ndpr_prproxy_sols_cnt != 0);
1243 RB_INSERT(prproxy_sols_tree, &pr->ndpr_prproxy_sols, soltgt);
1265 nd6_solsrc_deq(struct nd_prefix *pr, struct in6_addr *taddr,
1271 NDPR_LOCK_ASSERT_HELD(pr);
1272 VERIFY(!(pr->ndpr_stateflags & NDPRF_IFSCOPE));
1273 VERIFY((pr->ndpr_stateflags & (NDPRF_ONLINK|NDPRF_PRPROXY)) ==
1281 soltgt = RB_FIND(prproxy_sols_tree, &pr->ndpr_prproxy_sols, &find);