• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /freebsd-12-stable/usr.sbin/route6d/

Lines Matching defs:rrt

554 	struct	riprt *rrt;
557 TAILQ_FOREACH(rrt, &riprt_head, rrt_next) {
558 if (rrt->rrt_rflags & RRTF_AGGREGATE) {
559 delroute(&rrt->rrt_info, &rrt->rrt_gw);
582 struct riprt *rrt, *rrt_tmp;
588 TAILQ_FOREACH_SAFE(rrt, &riprt_head, rrt_next, rrt_tmp) {
589 if (rrt->rrt_t == 0)
591 else if (rrt->rrt_t < t_holddown) {
592 TAILQ_REMOVE(&riprt_head, rrt, rrt_next);
593 delroute(&rrt->rrt_info, &rrt->rrt_gw);
594 free(rrt);
595 } else if (rrt->rrt_t < t_lifetime)
596 rrt->rrt_info.rip6_metric = HOPCNT_INFINITY6;
814 struct riprt *rrt;
835 TAILQ_FOREACH(rrt, &riprt_head, rrt_next) {
836 if (rrt->rrt_rflags & RRTF_NOADVERTISE)
839 *np = rrt->rrt_info;
883 TAILQ_FOREACH(rrt, &riprt_head, rrt_next) {
884 if (rrt->rrt_rflags & RRTF_NOADVERTISE)
888 if (out_filter(rrt, ifcp) == 0)
892 if (tobeadv(rrt, ifcp) == 0)
897 (rrt->rrt_rflags & RRTF_CHANGED) == 0)
901 if (rrt->rrt_index == ifcp->ifc_index &&
902 !IN6_IS_ADDR_UNSPECIFIED(&rrt->rrt_gw) &&
903 (rrt->rrt_rflags & RRTF_NH_NOT_LLADDR) == 0) {
904 if (nh == NULL || !IN6_ARE_ADDR_EQUAL(nh, &rrt->rrt_gw)) {
912 np->rip6_dest = rrt->rrt_gw;
916 nh = &rrt->rrt_gw;
919 } else if (nh && (rrt->rrt_index != ifcp->ifc_index ||
920 !IN6_ARE_ADDR_EQUAL(nh, &rrt->rrt_gw) ||
921 rrt->rrt_rflags & RRTF_NH_NOT_LLADDR)) {
936 *np = rrt->rrt_info;
953 out_filter(struct riprt *rrt, struct ifc *ifcp)
966 if (rrt->rrt_info.rip6_plen <= iffp->iff_plen)
968 ia = rrt->rrt_info.rip6_dest;
978 if ((rrt->rrt_rflags & RRTF_AGGREGATE) != 0) {
983 if (rrt->rrt_info.rip6_plen == iffp->iff_plen &&
984 IN6_ARE_ADDR_EQUAL(&rrt->rrt_info.rip6_dest,
1002 if (rrt->rrt_info.rip6_plen < iffp->iff_plen)
1004 ia = rrt->rrt_info.rip6_dest;
1024 tobeadv(struct riprt *rrt, struct ifc *ifcp)
1028 if (rrt->rrt_flags & RTF_STATIC) {
1030 if (rrt->rrt_flags & (RTF_REJECT | RTF_BLACKHOLE))
1035 if (sflag && rrt->rrt_index != ifcp->ifc_index)
1040 if (hflag == 0 && rrt->rrt_index == ifcp->ifc_index)
1113 struct riprt *rrt;
1353 if ((rrt = rtsearch(np)) != NULL) {
1354 if (rrt->rrt_t == 0)
1356 nq = &rrt->rrt_info;
1358 if (rrt->rrt_index == ifcp->ifc_index &&
1359 IN6_ARE_ADDR_EQUAL(&nh, &rrt->rrt_gw)) {
1364 rrt->rrt_index = ifcp->ifc_index;
1366 delroute(nq, &rrt->rrt_gw);
1367 rrt->rrt_gw = nh;
1369 addroute(rrt, &nh, ifcp);
1371 rrt->rrt_rflags |= RRTF_CHANGED;
1372 rrt->rrt_t = t;
1375 rrt->rrt_index == ifcp->ifc_index &&
1376 IN6_ARE_ADDR_EQUAL(&nh, &rrt->rrt_gw)) {
1379 rrt->rrt_t = t;
1380 rrt->rrt_rflags |= RRTF_CHANGED;
1384 if (rrt->rrt_index == ifcp->ifc_index &&
1385 IN6_ARE_ADDR_EQUAL(&nh, &rrt->rrt_gw)) {
1387 rrt->rrt_t = t;
1388 } else if (rrt->rrt_t < t_half_lifetime) {
1390 rrt->rrt_index = ifcp->ifc_index;
1392 delroute(nq, &rrt->rrt_gw);
1393 rrt->rrt_gw = nh;
1395 addroute(rrt, &nh, ifcp);
1396 rrt->rrt_rflags |= RRTF_CHANGED;
1397 rrt->rrt_t = t;
1406 if ((rrt = MALLOC(struct riprt)) == NULL) {
1410 memset(rrt, 0, sizeof(*rrt));
1411 nq = &rrt->rrt_info;
1413 rrt->rrt_same = NULL;
1414 rrt->rrt_index = ifcp->ifc_index;
1415 rrt->rrt_flags = RTF_UP|RTF_GATEWAY;
1416 rrt->rrt_gw = nh;
1420 rrt->rrt_flags |= RTF_HOST;
1423 addroute(rrt, &nh, ifcp);
1424 rrt->rrt_rflags |= RRTF_CHANGED;
1426 rrt->rrt_t = t;
1429 TAILQ_INSERT_HEAD(&riprt_head, rrt, rrt_next);
1444 TAILQ_FOREACH(rrt, &riprt_head, rrt_next) {
1445 rrt->rrt_rflags &= ~RRTF_CHANGED;
1488 struct riprt *rrt;
1495 rrt = rtsearch(np);
1496 if (rrt)
1497 np->rip6_metric = rrt->rrt_info.rip6_metric;
1671 struct riprt *rrt;
1683 TAILQ_FOREACH(rrt, &riprt_head, rrt_next) {
1684 if (rrt->rrt_index == ifcp->ifc_index &&
1685 rrt->rrt_rflags & RRTF_AGGREGATE)
1686 delroute(&rrt->rrt_info, &rrt->rrt_gw);
1710 struct riprt *rrt;
1937 TAILQ_FOREACH(rrt, &riprt_head, rrt_next) {
1938 rrt->rrt_rflags &= ~RRTF_CHANGED;
1963 struct riprt *rrt = NULL;
1993 TAILQ_FOREACH(rrt, &riprt_head, rrt_next) {
1994 if (IN6_ARE_ADDR_EQUAL(&rrt->rrt_info.rip6_dest,
1996 && IN6_IS_ADDR_LOOPBACK(&rrt->rrt_gw)) {
1999 rrt->rrt_info.rip6_plen) {
2000 longest = rrt;
2004 rrt = longest;
2005 if (!rrt) {
2010 prefix = rrt->rrt_info.rip6_plen;
2026 if (!rrt && (rrt = rtsearch(&ni6)) == NULL) {
2031 if ((rrt->rrt_flags & RTF_STATIC) == 0) {
2035 if (!IN6_ARE_ADDR_EQUAL(&rrt->rrt_gw, gw)) {
2037 inet6_n2p(&rrt->rrt_gw));
2041 if (rrt->rrt_t == 0 || rrt->rrt_t > t_lifetime) {
2042 rrt->rrt_t = t_lifetime;
2043 rrt->rrt_info.rip6_metric = HOPCNT_INFINITY6;
2061 struct riprt *rrt = NULL;
2095 if ((rrt = rtsearch(&ni6)) != NULL) {
2098 if (rrt->rrt_index == ifcp->ifc_index &&
2099 (IN6_ARE_ADDR_EQUAL(&rrt->rrt_gw, &none) ||
2100 IN6_IS_ADDR_LOOPBACK(&rrt->rrt_gw))) {
2102 if (rrt->rrt_t == 0 || rrt->rrt_t > t_lifetime) {
2103 rrt->rrt_t = t_lifetime;
2104 rrt->rrt_info.rip6_metric = HOPCNT_INFINITY6;
2109 inet6_n2p(&rrt->rrt_info.rip6_dest),
2110 rrt->rrt_info.rip6_plen,
2111 rrt->rrt_index);
2124 if ((rrt = rtsearch(&ni6)) != NULL) {
2125 if (rrt->rrt_index == ifcp->ifc_index &&
2126 IN6_ARE_ADDR_EQUAL(&rrt->rrt_gw,
2129 if (rrt->rrt_t == 0 || rrt->rrt_t > t_lifetime) {
2130 rrt->rrt_t = t_lifetime;
2131 rrt->rrt_info.rip6_metric =
2137 inet6_n2p(&rrt->rrt_info.rip6_dest),
2138 rrt->rrt_info.rip6_plen,
2139 rrt->rrt_index);
2157 struct riprt *rrt = NULL, *search_rrt, *loop_rrt;
2196 if ((rrt = MALLOC(struct riprt)) == NULL)
2198 memset(rrt, 0, sizeof(*rrt));
2199 rrt->rrt_same = NULL;
2200 rrt->rrt_index = ifcp->ifc_index;
2201 rrt->rrt_t = 0; /* don't age */
2202 rrt->rrt_info.rip6_dest = ifac->ifac_addr;
2203 rrt->rrt_info.rip6_tag = htons(routetag & 0xffff);
2204 rrt->rrt_info.rip6_metric = 1 + ifcp->ifc_metric;
2205 rrt->rrt_info.rip6_plen = ifac->ifac_plen;
2206 rrt->rrt_flags = RTF_HOST;
2207 rrt->rrt_rflags |= RRTF_CHANGED;
2208 applyplen(&rrt->rrt_info.rip6_dest, ifac->ifac_plen);
2209 memset(&rrt->rrt_gw, 0, sizeof(struct in6_addr));
2210 rrt->rrt_gw = ifac->ifac_addr;
2211 np = &rrt->rrt_info;
2215 rrt->rrt_info.rip6_metric) {
2235 TAILQ_INSERT_HEAD(&riprt_head, rrt, rrt_next);
2236 addroute(rrt, &rrt->rrt_gw, ifcp);
2237 rrt = NULL;
2255 if (rrt)
2256 free(rrt);
2270 struct riprt *rrt, *orrt;
2347 if ((rrt = MALLOC(struct riprt)) == NULL) {
2351 memset(rrt, 0, sizeof(*rrt));
2352 rrt->rrt_same = NULL;
2353 rrt->rrt_index = ifcp->ifc_index;
2354 rrt->rrt_t = 0; /* don't age */
2357 rrt->rrt_info.rip6_dest = ifac->ifac_addr;
2358 rrt->rrt_info.rip6_plen = ifac->ifac_plen;
2359 applyplen(&rrt->rrt_info.rip6_dest,
2364 rrt->rrt_info.rip6_dest = ifac->ifac_addr;
2365 rrt->rrt_info.rip6_plen = 128;
2366 rrt->rrt_gw = in6addr_loopback;
2370 rrt->rrt_info.rip6_dest = ifac->ifac_raddr;
2371 rrt->rrt_info.rip6_plen = 128;
2372 rrt->rrt_gw = ifac->ifac_addr;
2376 if (IN6_IS_ADDR_UNSPECIFIED(&rrt->rrt_info.rip6_dest) ||
2377 IN6_IS_ADDR_LINKLOCAL(&rrt->rrt_info.rip6_dest)) {
2382 free(rrt);
2386 rrt->rrt_rflags |= RRTF_NOADVERTISE;
2390 rrt->rrt_info.rip6_tag = htons(routetag & 0xffff);
2391 rrt->rrt_info.rip6_metric = 1 + ifcp->ifc_metric;
2392 np = &rrt->rrt_info;
2400 TAILQ_INSERT_HEAD(&riprt_head, rrt, rrt_next);
2401 } else if (rrt->rrt_index != orrt->rrt_index ||
2402 rrt->rrt_info.rip6_metric != orrt->rrt_info.rip6_metric) {
2404 TAILQ_INSERT_BEFORE(orrt, rrt, rrt_next);
2420 free(rrt);
2659 struct riprt *rrt, *orrt;
2719 if ((rrt = MALLOC(struct riprt)) == NULL) {
2723 memset(rrt, 0, sizeof(*rrt));
2724 np = &rrt->rrt_info;
2725 rrt->rrt_same = NULL;
2726 rrt->rrt_t = time(NULL);
2728 rrt->rrt_t = 0; /* Don't age static routes */
2730 rrt->rrt_t = 0; /* Don't age PROTO[123] routes */
2732 rrt->rrt_t = 0; /* Don't age non-gateway host routes */
2737 rrt->rrt_flags = rtm->rtm_flags;
2756 free(rrt);
2761 memset(&rrt->rrt_gw, 0, sizeof(struct in6_addr));
2764 rrt->rrt_gw = sin6_gw->sin6_addr;
2767 rrt->rrt_gw = in6addr_loopback;
2769 memset(&rrt->rrt_gw, 0, sizeof(struct in6_addr));
2773 trace(1, " gw %s", inet6_n2p(&rrt->rrt_gw));
2781 free(rrt);
2785 rrt->rrt_index = ifindex;
2790 if (!IN6_IS_ADDR_LINKLOCAL(&rrt->rrt_gw) &&
2791 !IN6_IS_ADDR_LOOPBACK(&rrt->rrt_gw) &&
2792 (rrt->rrt_flags & RTF_LOCAL) == 0) {
2794 inet6_n2p(&rrt->rrt_gw));
2796 inet6_n2p(&rrt->rrt_info.rip6_dest), ifname);
2797 rrt->rrt_rflags |= RRTF_NH_NOT_LLADDR;
2803 TAILQ_INSERT_BEFORE(orrt, rrt, rrt_next);
2811 TAILQ_INSERT_HEAD(&riprt_head, rrt, rrt_next);
2815 addroute(struct riprt *rrt,
2825 np = &rrt->rrt_info;
2844 rtm->rtm_flags = rrt->rrt_flags;
3119 struct riprt *rrt;
3132 TAILQ_FOREACH(rrt, &riprt_head, rrt_next) {
3133 if (rrt->rrt_t == 0)
3136 age = t - rrt->rrt_t;
3137 inet_ntop(AF_INET6, (void *)&rrt->rrt_info.rip6_dest,
3140 buf, rrt->rrt_info.rip6_plen, rrt->rrt_index,
3141 index2ifc[rrt->rrt_index]->ifc_name,
3142 inet6_n2p(&rrt->rrt_gw),
3143 rrt->rrt_info.rip6_metric, (long)age);
3144 if (rrt->rrt_info.rip6_tag) {
3146 ntohs(rrt->rrt_info.rip6_tag) & 0xffff);
3148 if (rrt->rrt_rflags & RRTF_NH_NOT_LLADDR)
3150 if (rrt->rrt_rflags & RRTF_NOADVERTISE)
3172 struct riprt *rrt;
3244 rrt = (struct riprt *)malloc(sizeof(struct riprt));
3245 if (rrt == NULL) {
3246 fatal("malloc: rrt");
3249 memset(rrt, 0, sizeof(struct riprt));
3250 rrt->rrt_info.rip6_dest = iff.iff_addr;
3251 rrt->rrt_info.rip6_plen = iff.iff_plen;
3252 rrt->rrt_info.rip6_metric = 1;
3253 rrt->rrt_info.rip6_tag = htons(routetag & 0xffff);
3254 rrt->rrt_gw = in6addr_loopback;
3255 rrt->rrt_flags = RTF_UP | RTF_REJECT;
3256 rrt->rrt_rflags = RRTF_AGGREGATE;
3257 rrt->rrt_t = 0;
3258 rrt->rrt_index = loopifcp->ifc_index;
3260 if (getroute(&rrt->rrt_info, &gw)) {
3266 delroute(&rrt->rrt_info, &gw);
3272 inet6_n2p(&rrt->rrt_info.rip6_dest),
3273 rrt->rrt_info.rip6_plen);
3279 TAILQ_INSERT_HEAD(&riprt_head, rrt, rrt_next);
3286 addroute(rrt, &in6addr_loopback, loopifcp);
3320 struct riprt *rrt;
3322 TAILQ_FOREACH(rrt, &riprt_head, rrt_next) {
3323 if (rrt->rrt_info.rip6_plen == np->rip6_plen &&
3324 IN6_ARE_ADDR_EQUAL(&rrt->rrt_info.rip6_dest,
3329 return (rrt);