Lines Matching refs:rt

424 	struct rtentry			*rt = NULL;  in rtable_lookup()  local
452 SRPL_FOREACH(rt, &sr, &an->an_rtlist, rt_next) { in rtable_lookup()
454 (rt->rt_priority & RTP_MASK) != (prio & RTP_MASK)) in rtable_lookup()
460 if (rt->rt_gateway->sa_len == gateway->sa_len && in rtable_lookup()
461 memcmp(rt->rt_gateway, gateway, gateway->sa_len) == 0) in rtable_lookup()
464 if (rt != NULL) in rtable_lookup()
465 rtref(rt); in rtable_lookup()
471 return (rt); in rtable_lookup()
479 struct rtentry *rt = NULL; in rtable_match() local
494 rt = SRPL_FIRST(&sr, &an->an_rtlist); in rtable_match()
495 if (rt == NULL) { in rtable_match()
499 rtref(rt); in rtable_match()
503 if ((hash = rt_hash(rt, dst, src)) != -1) { in rtable_match()
511 if (mrt->rt_priority == rt->rt_priority) in rtable_match()
530 if (mrt->rt_priority == rt->rt_priority) in rtable_match()
537 rtfree(rt); in rtable_match()
538 rt = mrt; in rtable_match()
544 return (rt); in rtable_match()
550 struct rtentry *rt) in rtable_insert() argument
570 rtref(rt); /* guarantee rtfree won't do anything during insert */ in rtable_insert()
578 int mpathok = ISSET(rt->rt_flags, RTF_MPATH); in rtable_insert()
602 rt_flags = rt->rt_flags; in rtable_insert()
603 rt->rt_flags &= ~RTF_MPATH; in rtable_insert()
604 rt->rt_dest = dst; in rtable_insert()
605 rt->rt_plen = plen; in rtable_insert()
606 SRPL_INSERT_HEAD_LOCKED(&rt_rc, &an->an_rtlist, rt, rt_next); in rtable_insert()
610 SRPL_REMOVE_LOCKED(&rt_rc, &an->an_rtlist, rt, rtentry, in rtable_insert()
612 rt->rt_flags = rt_flags; in rtable_insert()
624 KASSERT((rt->rt_flags & RTF_MPATH) || mrt->rt_priority != prio); in rtable_insert()
630 if (rt->rt_flags & RTF_MPATH) { in rtable_insert()
635 rt->rt_flags &= ~RTF_MPATH; in rtable_insert()
639 rt->rt_flags |= RTF_MPATH; in rtable_insert()
645 rtable_mpath_insert(an, rt); in rtable_insert()
649 rtfree(rt); in rtable_insert()
655 const struct sockaddr *mask, struct rtentry *rt) in rtable_delete() argument
675 rtref(rt); /* guarantee rtfree won't do anything under ar_lock */ in rtable_delete()
694 KASSERT(refcnt_read(&rt->rt_refcnt) >= 1); in rtable_delete()
695 SRPL_REMOVE_LOCKED(&rt_rc, &an->an_rtlist, rt, rtentry, in rtable_delete()
708 KASSERT(refcnt_read(&rt->rt_refcnt) >= 1); in rtable_delete()
709 SRPL_REMOVE_LOCKED(&rt_rc, &an->an_rtlist, rt, rtentry, rt_next); in rtable_delete()
714 rtfree(rt); in rtable_delete()
734 struct rtentry *rt; in rtable_walk_helper() local
737 SRPL_FOREACH(rt, &sr, &an->an_rtlist, rt_next) { in rtable_walk_helper()
738 error = (*rwc->rwc_func)(rt, rwc->rwc_arg, rwc->rwc_rid); in rtable_walk_helper()
742 if (rwc->rwc_prt != NULL && rt != NULL) { in rtable_walk_helper()
743 rtref(rt); in rtable_walk_helper()
744 *rwc->rwc_prt = rt; in rtable_walk_helper()
776 struct rtentry *rt = NULL; in rtable_iterate() local
779 rt = SRPL_NEXT(&sr, rt0, rt_next); in rtable_iterate()
780 if (rt != NULL) in rtable_iterate()
781 rtref(rt); in rtable_iterate()
784 return (rt); in rtable_iterate()
795 int plen, uint8_t prio, struct rtentry *rt) in rtable_mpath_reprio() argument
816 } else if (SRPL_FIRST_LOCKED(&an->an_rtlist) == rt && in rtable_mpath_reprio()
817 SRPL_NEXT_LOCKED(rt, rt_next) == NULL) { in rtable_mpath_reprio()
824 rt->rt_priority = prio; in rtable_mpath_reprio()
826 rtref(rt); /* keep rt alive in between remove and insert */ in rtable_mpath_reprio()
828 rt, rtentry, rt_next); in rtable_mpath_reprio()
829 rt->rt_priority = prio; in rtable_mpath_reprio()
830 rtable_mpath_insert(an, rt); in rtable_mpath_reprio()
831 rtfree(rt); in rtable_mpath_reprio()
840 rtable_mpath_insert(struct art_node *an, struct rtentry *rt) in rtable_mpath_insert() argument
843 uint8_t prio = rt->rt_priority; in rtable_mpath_insert()
846 SRPL_INSERT_HEAD_LOCKED(&rt_rc, &an->an_rtlist, rt, rt_next); in rtable_mpath_insert()
857 SRPL_INSERT_AFTER_LOCKED(&rt_rc, mrt, rt, rt_next); in rtable_mpath_insert()
859 SRPL_INSERT_AFTER_LOCKED(&rt_rc, prt, rt, rt_next); in rtable_mpath_insert()
861 SRPL_INSERT_HEAD_LOCKED(&rt_rc, &an->an_rtlist, rt, rt_next); in rtable_mpath_insert()
871 struct rtentry *rt; in an_match() local
878 rt = SRPL_FIRST(&sr, &an->an_rtlist); in an_match()
879 match = (rt != NULL && memcmp(rt->rt_dest, dst, dst->sa_len) == 0); in an_match()
888 struct rtentry *rt = xrt; in rtentry_ref() local
890 rtref(rt); in rtentry_ref()
896 struct rtentry *rt = xrt; in rtentry_unref() local
898 rtfree(rt); in rtentry_unref()