Lines Matching refs:rrt

550 	struct	riprt *rrt;  in rtdexit()  local
553 TAILQ_FOREACH(rrt, &riprt_head, rrt_next) { in rtdexit()
554 if (rrt->rrt_rflags & RRTF_AGGREGATE) { in rtdexit()
555 delroute(&rrt->rrt_info, &rrt->rrt_gw); in rtdexit()
578 struct riprt *rrt, *rrt_tmp; in ripalarm() local
584 TAILQ_FOREACH_SAFE(rrt, &riprt_head, rrt_next, rrt_tmp) { in ripalarm()
585 if (rrt->rrt_t == 0) in ripalarm()
587 else if (rrt->rrt_t < t_holddown) { in ripalarm()
588 TAILQ_REMOVE(&riprt_head, rrt, rrt_next); in ripalarm()
589 delroute(&rrt->rrt_info, &rrt->rrt_gw); in ripalarm()
590 free(rrt); in ripalarm()
591 } else if (rrt->rrt_t < t_lifetime) in ripalarm()
592 rrt->rrt_info.rip6_metric = HOPCNT_INFINITY6; in ripalarm()
810 struct riprt *rrt; in ripsend() local
831 TAILQ_FOREACH(rrt, &riprt_head, rrt_next) { in ripsend()
832 if (rrt->rrt_rflags & RRTF_NOADVERTISE) in ripsend()
835 *np = rrt->rrt_info; in ripsend()
879 TAILQ_FOREACH(rrt, &riprt_head, rrt_next) { in ripsend()
880 if (rrt->rrt_rflags & RRTF_NOADVERTISE) in ripsend()
884 if (out_filter(rrt, ifcp) == 0) in ripsend()
888 if (tobeadv(rrt, ifcp) == 0) in ripsend()
893 (rrt->rrt_rflags & RRTF_CHANGED) == 0) in ripsend()
897 if (rrt->rrt_index == ifcp->ifc_index && in ripsend()
898 !IN6_IS_ADDR_UNSPECIFIED(&rrt->rrt_gw) && in ripsend()
899 (rrt->rrt_rflags & RRTF_NH_NOT_LLADDR) == 0) { in ripsend()
900 if (nh == NULL || !IN6_ARE_ADDR_EQUAL(nh, &rrt->rrt_gw)) { in ripsend()
908 np->rip6_dest = rrt->rrt_gw; in ripsend()
912 nh = &rrt->rrt_gw; in ripsend()
915 } else if (nh && (rrt->rrt_index != ifcp->ifc_index || in ripsend()
916 !IN6_ARE_ADDR_EQUAL(nh, &rrt->rrt_gw) || in ripsend()
917 rrt->rrt_rflags & RRTF_NH_NOT_LLADDR)) { in ripsend()
932 *np = rrt->rrt_info; in ripsend()
949 out_filter(struct riprt *rrt, struct ifc *ifcp) in out_filter() argument
962 if (rrt->rrt_info.rip6_plen <= iffp->iff_plen) in out_filter()
964 ia = rrt->rrt_info.rip6_dest; in out_filter()
974 if ((rrt->rrt_rflags & RRTF_AGGREGATE) != 0) { in out_filter()
979 if (rrt->rrt_info.rip6_plen == iffp->iff_plen && in out_filter()
980 IN6_ARE_ADDR_EQUAL(&rrt->rrt_info.rip6_dest, in out_filter()
998 if (rrt->rrt_info.rip6_plen < iffp->iff_plen) in out_filter()
1000 ia = rrt->rrt_info.rip6_dest; in out_filter()
1020 tobeadv(struct riprt *rrt, struct ifc *ifcp) in tobeadv() argument
1024 if (rrt->rrt_flags & RTF_STATIC) { in tobeadv()
1026 if (rrt->rrt_flags & (RTF_REJECT | RTF_BLACKHOLE)) in tobeadv()
1031 if (sflag && rrt->rrt_index != ifcp->ifc_index) in tobeadv()
1036 if (hflag == 0 && rrt->rrt_index == ifcp->ifc_index) in tobeadv()
1109 struct riprt *rrt; in riprecv() local
1349 if ((rrt = rtsearch(np)) != NULL) { in riprecv()
1350 if (rrt->rrt_t == 0) in riprecv()
1352 nq = &rrt->rrt_info; in riprecv()
1354 if (rrt->rrt_index == ifcp->ifc_index && in riprecv()
1355 IN6_ARE_ADDR_EQUAL(&nh, &rrt->rrt_gw)) { in riprecv()
1360 rrt->rrt_index = ifcp->ifc_index; in riprecv()
1362 delroute(nq, &rrt->rrt_gw); in riprecv()
1363 rrt->rrt_gw = nh; in riprecv()
1365 addroute(rrt, &nh, ifcp); in riprecv()
1367 rrt->rrt_rflags |= RRTF_CHANGED; in riprecv()
1368 rrt->rrt_t = t; in riprecv()
1371 rrt->rrt_index == ifcp->ifc_index && in riprecv()
1372 IN6_ARE_ADDR_EQUAL(&nh, &rrt->rrt_gw)) { in riprecv()
1375 rrt->rrt_t = t; in riprecv()
1376 rrt->rrt_rflags |= RRTF_CHANGED; in riprecv()
1380 if (rrt->rrt_index == ifcp->ifc_index && in riprecv()
1381 IN6_ARE_ADDR_EQUAL(&nh, &rrt->rrt_gw)) { in riprecv()
1383 rrt->rrt_t = t; in riprecv()
1384 } else if (rrt->rrt_t < t_half_lifetime) { in riprecv()
1386 rrt->rrt_index = ifcp->ifc_index; in riprecv()
1388 delroute(nq, &rrt->rrt_gw); in riprecv()
1389 rrt->rrt_gw = nh; in riprecv()
1391 addroute(rrt, &nh, ifcp); in riprecv()
1392 rrt->rrt_rflags |= RRTF_CHANGED; in riprecv()
1393 rrt->rrt_t = t; in riprecv()
1402 if ((rrt = MALLOC(struct riprt)) == NULL) { in riprecv()
1406 memset(rrt, 0, sizeof(*rrt)); in riprecv()
1407 nq = &rrt->rrt_info; in riprecv()
1409 rrt->rrt_same = NULL; in riprecv()
1410 rrt->rrt_index = ifcp->ifc_index; in riprecv()
1411 rrt->rrt_flags = RTF_UP|RTF_GATEWAY; in riprecv()
1412 rrt->rrt_gw = nh; in riprecv()
1416 rrt->rrt_flags |= RTF_HOST; in riprecv()
1419 addroute(rrt, &nh, ifcp); in riprecv()
1420 rrt->rrt_rflags |= RRTF_CHANGED; in riprecv()
1422 rrt->rrt_t = t; in riprecv()
1425 TAILQ_INSERT_HEAD(&riprt_head, rrt, rrt_next); in riprecv()
1440 TAILQ_FOREACH(rrt, &riprt_head, rrt_next) { in riprecv()
1441 rrt->rrt_rflags &= ~RRTF_CHANGED; in riprecv()
1484 struct riprt *rrt; in riprequest() local
1491 rrt = rtsearch(np); in riprequest()
1492 if (rrt) in riprequest()
1493 np->rip6_metric = rrt->rrt_info.rip6_metric; in riprequest()
1667 struct riprt *rrt; in ifremove() local
1679 TAILQ_FOREACH(rrt, &riprt_head, rrt_next) { in ifremove()
1680 if (rrt->rrt_index == ifcp->ifc_index && in ifremove()
1681 rrt->rrt_rflags & RRTF_AGGREGATE) in ifremove()
1682 delroute(&rrt->rrt_info, &rrt->rrt_gw); in ifremove()
1706 struct riprt *rrt; in rtrecv() local
1933 TAILQ_FOREACH(rrt, &riprt_head, rrt_next) { in rtrecv()
1934 rrt->rrt_rflags &= ~RRTF_CHANGED; in rtrecv()
1959 struct riprt *rrt = NULL; in rt_del() local
1989 TAILQ_FOREACH(rrt, &riprt_head, rrt_next) { in rt_del()
1990 if (IN6_ARE_ADDR_EQUAL(&rrt->rrt_info.rip6_dest, in rt_del()
1992 && IN6_IS_ADDR_LOOPBACK(&rrt->rrt_gw)) { in rt_del()
1995 rrt->rrt_info.rip6_plen) { in rt_del()
1996 longest = rrt; in rt_del()
2000 rrt = longest; in rt_del()
2001 if (!rrt) { in rt_del()
2006 prefix = rrt->rrt_info.rip6_plen; in rt_del()
2022 if (!rrt && (rrt = rtsearch(&ni6)) == NULL) { in rt_del()
2027 if ((rrt->rrt_flags & RTF_STATIC) == 0) { in rt_del()
2031 if (!IN6_ARE_ADDR_EQUAL(&rrt->rrt_gw, gw)) { in rt_del()
2033 inet6_n2p(&rrt->rrt_gw)); in rt_del()
2037 if (rrt->rrt_t == 0 || rrt->rrt_t > t_lifetime) { in rt_del()
2038 rrt->rrt_t = t_lifetime; in rt_del()
2039 rrt->rrt_info.rip6_metric = HOPCNT_INFINITY6; in rt_del()
2057 struct riprt *rrt = NULL; in rt_deladdr() local
2091 if ((rrt = rtsearch(&ni6)) != NULL) { in rt_deladdr()
2094 if (rrt->rrt_index == ifcp->ifc_index && in rt_deladdr()
2095 (IN6_ARE_ADDR_EQUAL(&rrt->rrt_gw, &none) || in rt_deladdr()
2096 IN6_IS_ADDR_LOOPBACK(&rrt->rrt_gw))) { in rt_deladdr()
2098 if (rrt->rrt_t == 0 || rrt->rrt_t > t_lifetime) { in rt_deladdr()
2099 rrt->rrt_t = t_lifetime; in rt_deladdr()
2100 rrt->rrt_info.rip6_metric = HOPCNT_INFINITY6; in rt_deladdr()
2105 inet6_n2p(&rrt->rrt_info.rip6_dest), in rt_deladdr()
2106 rrt->rrt_info.rip6_plen, in rt_deladdr()
2107 rrt->rrt_index); in rt_deladdr()
2120 if ((rrt = rtsearch(&ni6)) != NULL) { in rt_deladdr()
2121 if (rrt->rrt_index == ifcp->ifc_index && in rt_deladdr()
2122 IN6_ARE_ADDR_EQUAL(&rrt->rrt_gw, in rt_deladdr()
2125 if (rrt->rrt_t == 0 || rrt->rrt_t > t_lifetime) { in rt_deladdr()
2126 rrt->rrt_t = t_lifetime; in rt_deladdr()
2127 rrt->rrt_info.rip6_metric = in rt_deladdr()
2133 inet6_n2p(&rrt->rrt_info.rip6_dest), in rt_deladdr()
2134 rrt->rrt_info.rip6_plen, in rt_deladdr()
2135 rrt->rrt_index); in rt_deladdr()
2153 struct riprt *rrt = NULL, *search_rrt, *loop_rrt; in ifrt() local
2192 if ((rrt = MALLOC(struct riprt)) == NULL) in ifrt()
2194 memset(rrt, 0, sizeof(*rrt)); in ifrt()
2195 rrt->rrt_same = NULL; in ifrt()
2196 rrt->rrt_index = ifcp->ifc_index; in ifrt()
2197 rrt->rrt_t = 0; /* don't age */ in ifrt()
2198 rrt->rrt_info.rip6_dest = ifac->ifac_addr; in ifrt()
2199 rrt->rrt_info.rip6_tag = htons(routetag & 0xffff); in ifrt()
2200 rrt->rrt_info.rip6_metric = 1 + ifcp->ifc_metric; in ifrt()
2201 rrt->rrt_info.rip6_plen = ifac->ifac_plen; in ifrt()
2202 rrt->rrt_flags = RTF_HOST; in ifrt()
2203 rrt->rrt_rflags |= RRTF_CHANGED; in ifrt()
2204 applyplen(&rrt->rrt_info.rip6_dest, ifac->ifac_plen); in ifrt()
2205 memset(&rrt->rrt_gw, 0, sizeof(struct in6_addr)); in ifrt()
2206 rrt->rrt_gw = ifac->ifac_addr; in ifrt()
2207 np = &rrt->rrt_info; in ifrt()
2211 rrt->rrt_info.rip6_metric) { in ifrt()
2231 TAILQ_INSERT_HEAD(&riprt_head, rrt, rrt_next); in ifrt()
2232 addroute(rrt, &rrt->rrt_gw, ifcp); in ifrt()
2233 rrt = NULL; in ifrt()
2251 if (rrt) in ifrt()
2252 free(rrt); in ifrt()
2266 struct riprt *rrt, *orrt; in ifrt_p2p() local
2343 if ((rrt = MALLOC(struct riprt)) == NULL) { in ifrt_p2p()
2347 memset(rrt, 0, sizeof(*rrt)); in ifrt_p2p()
2348 rrt->rrt_same = NULL; in ifrt_p2p()
2349 rrt->rrt_index = ifcp->ifc_index; in ifrt_p2p()
2350 rrt->rrt_t = 0; /* don't age */ in ifrt_p2p()
2353 rrt->rrt_info.rip6_dest = ifac->ifac_addr; in ifrt_p2p()
2354 rrt->rrt_info.rip6_plen = ifac->ifac_plen; in ifrt_p2p()
2355 applyplen(&rrt->rrt_info.rip6_dest, in ifrt_p2p()
2360 rrt->rrt_info.rip6_dest = ifac->ifac_addr; in ifrt_p2p()
2361 rrt->rrt_info.rip6_plen = 128; in ifrt_p2p()
2362 rrt->rrt_gw = in6addr_loopback; in ifrt_p2p()
2366 rrt->rrt_info.rip6_dest = ifac->ifac_raddr; in ifrt_p2p()
2367 rrt->rrt_info.rip6_plen = 128; in ifrt_p2p()
2368 rrt->rrt_gw = ifac->ifac_addr; in ifrt_p2p()
2372 if (IN6_IS_ADDR_UNSPECIFIED(&rrt->rrt_info.rip6_dest) || in ifrt_p2p()
2373 IN6_IS_ADDR_LINKLOCAL(&rrt->rrt_info.rip6_dest)) { in ifrt_p2p()
2378 free(rrt); in ifrt_p2p()
2382 rrt->rrt_rflags |= RRTF_NOADVERTISE; in ifrt_p2p()
2386 rrt->rrt_info.rip6_tag = htons(routetag & 0xffff); in ifrt_p2p()
2387 rrt->rrt_info.rip6_metric = 1 + ifcp->ifc_metric; in ifrt_p2p()
2388 np = &rrt->rrt_info; in ifrt_p2p()
2396 TAILQ_INSERT_HEAD(&riprt_head, rrt, rrt_next); in ifrt_p2p()
2397 } else if (rrt->rrt_index != orrt->rrt_index || in ifrt_p2p()
2398 rrt->rrt_info.rip6_metric != orrt->rrt_info.rip6_metric) { in ifrt_p2p()
2400 TAILQ_INSERT_BEFORE(orrt, rrt, rrt_next); in ifrt_p2p()
2416 free(rrt); in ifrt_p2p()
2655 struct riprt *rrt, *orrt; in rt_entry() local
2715 if ((rrt = MALLOC(struct riprt)) == NULL) { in rt_entry()
2719 memset(rrt, 0, sizeof(*rrt)); in rt_entry()
2720 np = &rrt->rrt_info; in rt_entry()
2721 rrt->rrt_same = NULL; in rt_entry()
2722 rrt->rrt_t = time(NULL); in rt_entry()
2724 rrt->rrt_t = 0; /* Don't age static routes */ in rt_entry()
2726 rrt->rrt_t = 0; /* Don't age PROTO[123] routes */ in rt_entry()
2728 rrt->rrt_t = 0; /* Don't age non-gateway host routes */ in rt_entry()
2733 rrt->rrt_flags = rtm->rtm_flags; in rt_entry()
2752 free(rrt); in rt_entry()
2757 memset(&rrt->rrt_gw, 0, sizeof(struct in6_addr)); in rt_entry()
2760 rrt->rrt_gw = sin6_gw->sin6_addr; in rt_entry()
2763 rrt->rrt_gw = in6addr_loopback; in rt_entry()
2765 memset(&rrt->rrt_gw, 0, sizeof(struct in6_addr)); in rt_entry()
2769 trace(1, " gw %s", inet6_n2p(&rrt->rrt_gw)); in rt_entry()
2777 free(rrt); in rt_entry()
2781 rrt->rrt_index = ifindex; in rt_entry()
2786 if (!IN6_IS_ADDR_LINKLOCAL(&rrt->rrt_gw) && in rt_entry()
2787 !IN6_IS_ADDR_LOOPBACK(&rrt->rrt_gw) && in rt_entry()
2788 (rrt->rrt_flags & RTF_LOCAL) == 0) { in rt_entry()
2790 inet6_n2p(&rrt->rrt_gw)); in rt_entry()
2792 inet6_n2p(&rrt->rrt_info.rip6_dest), ifname); in rt_entry()
2793 rrt->rrt_rflags |= RRTF_NH_NOT_LLADDR; in rt_entry()
2799 TAILQ_INSERT_BEFORE(orrt, rrt, rrt_next); in rt_entry()
2807 TAILQ_INSERT_HEAD(&riprt_head, rrt, rrt_next); in rt_entry()
2811 addroute(struct riprt *rrt, in addroute() argument
2821 np = &rrt->rrt_info; in addroute()
2840 rtm->rtm_flags = rrt->rrt_flags; in addroute()
3115 struct riprt *rrt; in rtdump() local
3128 TAILQ_FOREACH(rrt, &riprt_head, rrt_next) { in rtdump()
3129 if (rrt->rrt_t == 0) in rtdump()
3132 age = t - rrt->rrt_t; in rtdump()
3133 inet_ntop(AF_INET6, (void *)&rrt->rrt_info.rip6_dest, in rtdump()
3136 buf, rrt->rrt_info.rip6_plen, rrt->rrt_index, in rtdump()
3137 index2ifc[rrt->rrt_index]->ifc_name, in rtdump()
3138 inet6_n2p(&rrt->rrt_gw), in rtdump()
3139 rrt->rrt_info.rip6_metric, (long)age); in rtdump()
3140 if (rrt->rrt_info.rip6_tag) { in rtdump()
3142 ntohs(rrt->rrt_info.rip6_tag) & 0xffff); in rtdump()
3144 if (rrt->rrt_rflags & RRTF_NH_NOT_LLADDR) in rtdump()
3146 if (rrt->rrt_rflags & RRTF_NOADVERTISE) in rtdump()
3168 struct riprt *rrt; in filterconfig() local
3240 rrt = (struct riprt *)malloc(sizeof(struct riprt)); in filterconfig()
3241 if (rrt == NULL) { in filterconfig()
3245 memset(rrt, 0, sizeof(struct riprt)); in filterconfig()
3246 rrt->rrt_info.rip6_dest = iff.iff_addr; in filterconfig()
3247 rrt->rrt_info.rip6_plen = iff.iff_plen; in filterconfig()
3248 rrt->rrt_info.rip6_metric = 1; in filterconfig()
3249 rrt->rrt_info.rip6_tag = htons(routetag & 0xffff); in filterconfig()
3250 rrt->rrt_gw = in6addr_loopback; in filterconfig()
3251 rrt->rrt_flags = RTF_UP | RTF_REJECT; in filterconfig()
3252 rrt->rrt_rflags = RRTF_AGGREGATE; in filterconfig()
3253 rrt->rrt_t = 0; in filterconfig()
3254 rrt->rrt_index = loopifcp->ifc_index; in filterconfig()
3256 if (getroute(&rrt->rrt_info, &gw)) { in filterconfig()
3262 delroute(&rrt->rrt_info, &gw); in filterconfig()
3268 inet6_n2p(&rrt->rrt_info.rip6_dest), in filterconfig()
3269 rrt->rrt_info.rip6_plen); in filterconfig()
3275 TAILQ_INSERT_HEAD(&riprt_head, rrt, rrt_next); in filterconfig()
3282 addroute(rrt, &in6addr_loopback, loopifcp); in filterconfig()
3316 struct riprt *rrt; in rtsearch() local
3318 TAILQ_FOREACH(rrt, &riprt_head, rrt_next) { in rtsearch()
3319 if (rrt->rrt_info.rip6_plen == np->rip6_plen && in rtsearch()
3320 IN6_ARE_ADDR_EQUAL(&rrt->rrt_info.rip6_dest, in rtsearch()
3325 return (rrt); in rtsearch()