Lines Matching defs:rrt
481 struct riprt *rrt;
484 for (rrt = riprt; rrt; rrt = rrt->rrt_next) {
485 if (rrt->rrt_rflags & RRTF_AGGREGATE) {
486 delroute(&rrt->rrt_info, &rrt->rrt_gw);
509 struct riprt *rrt, *rrt_prev, *rrt_next;
516 for (rrt = riprt; rrt; rrt = rrt_next) {
517 rrt_next = rrt->rrt_next;
519 if (rrt->rrt_t == 0) {
520 rrt_prev = rrt;
523 if (rrt->rrt_t < t_holddown) {
525 rrt_prev->rrt_next = rrt->rrt_next;
527 riprt = rrt->rrt_next;
529 delroute(&rrt->rrt_info, &rrt->rrt_gw);
530 free(rrt);
533 if (rrt->rrt_t < t_lifetime)
534 rrt->rrt_info.rip6_metric = HOPCNT_INFINITY6;
535 rrt_prev = rrt;
686 struct riprt *rrt;
703 for (rrt = riprt; rrt; rrt = rrt->rrt_next) {
704 if (rrt->rrt_rflags & RRTF_NOADVERTISE)
707 *nip = rrt->rrt_info;
749 for (rrt = riprt; rrt; rrt = rrt->rrt_next) {
750 if (rrt->rrt_rflags & RRTF_NOADVERTISE)
754 if (out_filter(rrt, ifcp) == 0)
758 if (tobeadv(rrt, ifcp) == 0)
763 (rrt->rrt_rflags & RRTF_CHANGED) == 0)
767 if (rrt->rrt_index == ifcp->ifc_index &&
768 !IN6_IS_ADDR_UNSPECIFIED(&rrt->rrt_gw) &&
769 (rrt->rrt_rflags & RRTF_NH_NOT_LLADDR) == 0) {
770 if (nh == NULL || !IN6_ARE_ADDR_EQUAL(nh, &rrt->rrt_gw)) {
773 nip->rip6_dest = rrt->rrt_gw;
779 nh = &rrt->rrt_gw;
782 } else if (nh && (rrt->rrt_index != ifcp->ifc_index ||
783 !IN6_ARE_ADDR_EQUAL(nh, &rrt->rrt_gw) ||
784 rrt->rrt_rflags & RRTF_NH_NOT_LLADDR)) {
795 *nip = rrt->rrt_info;
810 out_filter(struct riprt *rrt, struct ifc *ifcp)
823 if (rrt->rrt_info.rip6_plen <= iffp->iff_plen)
825 ia = rrt->rrt_info.rip6_dest;
835 if ((rrt->rrt_rflags & RRTF_AGGREGATE) != 0) {
840 if (rrt->rrt_info.rip6_plen == iffp->iff_plen &&
841 IN6_ARE_ADDR_EQUAL(&rrt->rrt_info.rip6_dest,
859 if (rrt->rrt_info.rip6_plen < iffp->iff_plen)
861 ia = rrt->rrt_info.rip6_dest;
881 tobeadv(struct riprt *rrt, struct ifc *ifcp)
885 if (rrt->rrt_flags & RTF_STATIC) {
887 if (rrt->rrt_flags & (RTF_REJECT | RTF_BLACKHOLE))
892 if (sflag && rrt->rrt_index != ifcp->ifc_index)
897 if (hflag == 0 && rrt->rrt_index == ifcp->ifc_index)
972 struct riprt *rrt;
1153 if ((rrt = rtsearch(np, NULL)) != NULL) {
1154 if (rrt->rrt_t == 0)
1156 nq = &rrt->rrt_info;
1158 if (rrt->rrt_index == ifcp->ifc_index &&
1159 IN6_ARE_ADDR_EQUAL(&nh, &rrt->rrt_gw)) {
1164 rrt->rrt_index = ifcp->ifc_index;
1166 delroute(nq, &rrt->rrt_gw);
1167 rrt->rrt_gw = nh;
1169 addroute(rrt, &nh, ifcp);
1171 rrt->rrt_rflags |= RRTF_CHANGED;
1172 rrt->rrt_t = t;
1175 rrt->rrt_index == ifcp->ifc_index &&
1176 IN6_ARE_ADDR_EQUAL(&nh, &rrt->rrt_gw)) {
1179 rrt->rrt_t = t;
1180 rrt->rrt_rflags |= RRTF_CHANGED;
1184 if (rrt->rrt_index == ifcp->ifc_index &&
1185 IN6_ARE_ADDR_EQUAL(&nh, &rrt->rrt_gw)) {
1187 rrt->rrt_t = t;
1188 } else if (rrt->rrt_t < t_half_lifetime) {
1190 rrt->rrt_index = ifcp->ifc_index;
1192 delroute(nq, &rrt->rrt_gw);
1193 rrt->rrt_gw = nh;
1195 addroute(rrt, &nh, ifcp);
1196 rrt->rrt_rflags |= RRTF_CHANGED;
1197 rrt->rrt_t = t;
1206 if ((rrt = MALLOC(struct riprt)) == NULL) {
1209 memset(rrt, 0, sizeof(*rrt));
1210 nq = &rrt->rrt_info;
1212 rrt->rrt_same = NULL;
1213 rrt->rrt_index = ifcp->ifc_index;
1214 rrt->rrt_flags = RTF_UP|RTF_GATEWAY;
1215 rrt->rrt_gw = nh;
1219 rrt->rrt_flags |= RTF_HOST;
1222 rrt->rrt_next = riprt;
1223 riprt = rrt;
1225 addroute(rrt, &nh, ifcp);
1226 rrt->rrt_rflags |= RRTF_CHANGED;
1228 rrt->rrt_t = t;
1243 for (rrt = riprt; rrt; rrt = rrt->rrt_next)
1244 rrt->rrt_rflags &= ~RRTF_CHANGED;
1284 struct riprt *rrt;
1291 rrt = rtsearch(np, NULL);
1292 if (rrt)
1293 np->rip6_metric = rrt->rrt_info.rip6_metric;
1463 struct riprt *rrt;
1665 for (rrt = riprt; rrt; rrt = rrt->rrt_next)
1666 rrt->rrt_rflags &= ~RRTF_CHANGED;
1688 struct riprt *rrt = NULL;
1718 for (rrt = riprt; rrt; rrt = rrt->rrt_next) {
1719 if (IN6_ARE_ADDR_EQUAL(&rrt->rrt_info.rip6_dest,
1721 && IN6_IS_ADDR_LOOPBACK(&rrt->rrt_gw)) {
1724 rrt->rrt_info.rip6_plen) {
1725 longest = rrt;
1729 rrt = longest;
1730 if (!rrt) {
1735 prefix = rrt->rrt_info.rip6_plen;
1751 if (!rrt && (rrt = rtsearch(&ni6, NULL)) == NULL) {
1756 if ((rrt->rrt_flags & RTF_STATIC) == 0) {
1760 if (!IN6_ARE_ADDR_EQUAL(&rrt->rrt_gw, gw)) {
1762 inet6_n2p(&rrt->rrt_gw));
1766 if (rrt->rrt_t == 0 || rrt->rrt_t > t_lifetime) {
1767 rrt->rrt_t = t_lifetime;
1768 rrt->rrt_info.rip6_metric = HOPCNT_INFINITY6;
1785 struct riprt *rrt = NULL;
1832 if ((rrt = rtsearch(&ni6, NULL)) != NULL) {
1835 if (rrt->rrt_index == ifcp->ifc_index &&
1836 (IN6_ARE_ADDR_EQUAL(&rrt->rrt_gw, &none) ||
1837 IN6_IS_ADDR_LOOPBACK(&rrt->rrt_gw))) {
1839 if (rrt->rrt_t == 0 || rrt->rrt_t > t_lifetime) {
1840 rrt->rrt_t = t_lifetime;
1841 rrt->rrt_info.rip6_metric = HOPCNT_INFINITY6;
1846 inet6_n2p(&rrt->rrt_info.rip6_dest),
1847 rrt->rrt_info.rip6_plen,
1848 rrt->rrt_index);
1861 if ((rrt = rtsearch(&ni6, NULL)) != NULL) {
1862 if (rrt
1863 IN6_ARE_ADDR_EQUAL(&rrt->rrt_gw, &ifa->ifa_addr)) {
1865 if (rrt->rrt_t == 0 || rrt->rrt_t > t_lifetime) {
1866 rrt->rrt_t = t_lifetime;
1867 rrt->rrt_info.rip6_metric =
1873 inet6_n2p(&rrt->rrt_info.rip6_dest),
1874 rrt->rrt_info.rip6_plen,
1875 rrt->rrt_index);
1891 struct riprt *rrt = NULL, *search_rrt, *prev_rrt, *loop_rrt;
1930 if ((rrt = MALLOC(struct riprt)) == NULL)
1932 memset(rrt, 0, sizeof(*rrt));
1933 rrt->rrt_same = NULL;
1934 rrt->rrt_index = ifcp->ifc_index;
1935 rrt->rrt_t = 0; /* don't age */
1936 rrt->rrt_info.rip6_dest = ifa->ifa_addr;
1937 rrt->rrt_info.rip6_tag = htons(routetag & 0xffff);
1938 rrt->rrt_info.rip6_metric = 1 + ifcp->ifc_metric;
1939 rrt->rrt_info.rip6_plen = ifa->ifa_plen;
1941 rrt->rrt_flags = RTF_HOST;
1943 rrt->rrt_flags = RTF_CONNECTED;
1944 rrt->rrt_rflags |= RRTF_CHANGED;
1945 applyplen(&rrt->rrt_info.rip6_dest, ifa->ifa_plen);
1946 memset(&rrt->rrt_gw, 0, sizeof(struct in6_addr));
1947 rrt->rrt_gw = ifa->ifa_addr;
1948 np = &rrt->rrt_info;
1952 rrt->rrt_info.rip6_metric) {
1964 prev_rrt->rrt_next = rrt->rrt_next;
1966 riprt = rrt->rrt_next;
1967 delroute(&rrt->rrt_info, &rrt->rrt_gw);
1973 rrt->rrt_next = riprt;
1974 riprt = rrt;
1975 addroute(rrt, &rrt->rrt_gw, ifcp);
1976 rrt = NULL;
1994 if (rrt)
1995 free(rrt);
2009 struct riprt *rrt, *orrt, *prevrrt;
2087 if ((rrt = MALLOC(struct riprt)) == NULL) {
2090 memset(rrt, 0, sizeof(*rrt));
2091 rrt->rrt_same = NULL;
2092 rrt->rrt_index = ifcp->ifc_index;
2093 rrt->rrt_t = 0; /* don't age */
2096 rrt->rrt_info.rip6_dest = ifa->ifa_addr;
2097 rrt->rrt_info.rip6_plen = ifa->ifa_plen;
2098 applyplen(&rrt->rrt_info.rip6_dest,
2103 rrt->rrt_info.rip6_dest = ifa->ifa_addr;
2104 rrt->rrt_info.rip6_plen = 128;
2105 rrt->rrt_gw = in6addr_loopback;
2109 rrt->rrt_info.rip6_dest = ifa->ifa_raddr;
2110 rrt->rrt_info.rip6_plen = 128;
2111 rrt->rrt_gw = ifa->ifa_addr;
2115 if (IN6_IS_ADDR_UNSPECIFIED(&rrt->rrt_info.rip6_dest) ||
2116 IN6_IS_ADDR_LINKLOCAL(&rrt->rrt_info.rip6_dest)) {
2121 free(rrt);
2125 rrt->rrt_rflags |= RRTF_NOADVERTISE;
2129 rrt->rrt_info.rip6_tag = htons(routetag & 0xffff);
2130 rrt->rrt_info.rip6_metric = 1 + ifcp->ifc_metric;
2131 np = &rrt->rrt_info;
2139 rrt->rrt_next = riprt;
2140 riprt = rrt;
2141 } else if (rrt->rrt_index != orrt->rrt_index ||
2142 rrt->rrt_info.rip6_metric != orrt->rrt_info.rip6_metric) {
2144 rrt->rrt_next = orrt->rrt_next;
2146 prevrrt->rrt_next = rrt;
2148 riprt = rrt;
2163 free(rrt);
2404 struct riprt *rrt, *orrt;
2461 if ((rrt = MALLOC(struct riprt)) == NULL) {
2464 memset(rrt, 0, sizeof(*rrt));
2465 np = &rrt->rrt_info;
2466 rrt->rrt_same = NULL;
2467 rrt->rrt_t = time(NULL);
2469 rrt->rrt_t = 0; /* Don't age static routes */
2471 rrt->rrt_t = 0; /* Don't age non-gateway host routes */
2476 rrt->rrt_flags = rtm->rtm_flags;
2495 free(rrt);
2500 memset(&rrt->rrt_gw, 0, sizeof(struct in6_addr));
2503 rrt->rrt_gw = sin6_gw->sin6_addr;
2506 rrt->rrt_gw = in6addr_loopback;
2508 memset(&rrt->rrt_gw, 0, sizeof(struct in6_addr));
2512 trace(1, " gw %s", inet6_n2p(&rrt->rrt_gw));
2520 free(rrt);
2524 rrt->rrt_index = s;
2529 if (!IN6_IS_ADDR_LINKLOCAL(&rrt->rrt_gw) &&
2530 !IN6_IS_ADDR_LOOPBACK(&rrt->rrt_gw)) {
2532 inet6_n2p(&rrt->rrt_gw));
2534 inet6_n2p(&rrt->rrt_info.rip6_dest), ifname);
2535 rrt->rrt_rflags |= RRTF_NH_NOT_LLADDR;
2541 rrt->rrt_next = orrt->rrt_next;
2542 *orrt = *rrt;
2546 free(rrt);
2548 rrt->rrt_next = riprt;
2549 riprt = rrt;
2554 addroute(struct riprt *rrt, const struct in6_addr *gw, struct ifc *ifcp)
2562 np = &rrt->rrt_info;
2581 rtm->rtm_flags = rrt->rrt_flags;
2799 struct riprt *rrt;
2812 for (rrt = riprt; rrt; rrt = rrt->rrt_next) {
2813 if (rrt->rrt_t == 0)
2816 age = t - rrt->rrt_t;
2817 inet_ntop(AF_INET6, (void *)&rrt->rrt_info.rip6_dest,
2820 buf, rrt->rrt_info.rip6_plen, rrt->rrt_index,
2821 index2ifc[rrt->rrt_index]->ifc_name,
2822 inet6_n2p(&rrt->rrt_gw),
2823 rrt->rrt_info.rip6_metric, (long)age);
2824 if (rrt->rrt_info.rip6_tag) {
2826 ntohs(rrt->rrt_info.rip6_tag) & 0xffff);
2828 if (rrt->rrt_rflags & RRTF_NH_NOT_LLADDR)
2830 if (rrt->rrt_rflags & RRTF_NOADVERTISE)
2852 struct riprt *rrt;
2917 rrt = malloc(sizeof(struct riprt));
2918 if (rrt == NULL) {
2919 fatal("malloc: rrt");
2921 memset(rrt, 0, sizeof(struct riprt));
2922 rrt->rrt_info.rip6_dest = ftmp.iff_addr;
2923 rrt->rrt_info.rip6_plen = ftmp.iff_plen;
2924 rrt->rrt_info.rip6_metric = 1;
2925 rrt->rrt_info.rip6_tag = htons(routetag & 0xffff);
2926 rrt->rrt_gw = in6addr_loopback;
2927 rrt->rrt_flags = RTF_UP | RTF_REJECT;
2928 rrt->rrt_rflags = RRTF_AGGREGATE;
2929 rrt->rrt_t = 0;
2930 rrt->rrt_index = loopifcp->ifc_index;
2932 if (getroute(&rrt->rrt_info, &gw)) {
2938 delroute(&rrt->rrt_info, &gw);
2944 inet6_n2p(&rrt->rrt_info.rip6_dest),
2945 rrt->rrt_info.rip6_plen);
2950 rrt->rrt_next = riprt;
2951 riprt = rrt;
2958 addroute(rrt, &in6addr_loopback, loopifcp);
2989 struct riprt *rrt;
2993 for (rrt = riprt; rrt; rrt = rrt->rrt_next) {
2994 if (rrt->rrt_info.rip6_plen == np->rip6_plen &&
2995 IN6_ARE_ADDR_EQUAL(&rrt->rrt_info.rip6_dest,
2997 return rrt;
2999 *prev_rrt = rrt;