Lines Matching defs:kr
490 struct kroute *kr;
500 if ((kr = kroute_find(kt, &kf->prefix, kf->prefixlen,
505 kr->nexthop.s_addr = kf->nexthop.v4.s_addr;
506 rtlabel_unref(kr->labelid);
507 kr->labelid = rtlabel_name2id(kf->label);
509 kr->flags |= F_BLACKHOLE;
511 kr->flags &= ~F_BLACKHOLE;
513 kr->flags |= F_REJECT;
515 kr->flags &= ~F_REJECT;
517 if (kr->flags & F_NEXTHOP)
521 kr->flags |= F_BGPD_INSERTED;
571 struct kroute *kr;
597 if ((kr = kroute_find(kt, &kf->prefix, kf->prefixlen,
602 kr->mplslabel = mplslabel;
603 kr->flags |= F_MPLS;
604 kr->ifindex = kf->ifindex;
605 kr->nexthop.s_addr = kf->nexthop.v4.s_addr;
606 rtlabel_unref(kr->labelid);
607 kr->labelid = rtlabel_name2id(kf->label);
609 kr->flags |= F_BLACKHOLE;
611 kr->flags &= ~F_BLACKHOLE;
613 kr->flags |= F_REJECT;
615 kr->flags &= ~F_REJECT;
618 kr->flags |= F_BGPD_INSERTED;
698 struct kroute *kr, *next;
705 RB_FOREACH_SAFE(kr, kroute_tree, &kt->krt, next)
706 if ((kr->flags & F_BGPD_INSERTED)) {
707 if (kroute_remove(kt, kr_tofull(kr), 1) == -1)
735 struct kroute *kr;
746 RB_FOREACH(kr, kroute_tree, &kt->krt)
747 if (kr->flags & F_BGPD) {
748 if (send_rtmsg(RTM_ADD, kt, kr_tofull(kr)))
749 kr->flags |= F_BGPD_INSERTED;
773 struct kroute *kr;
782 RB_FOREACH(kr, kroute_tree, &kt->krt)
783 if ((kr->flags & F_BGPD_INSERTED)) {
784 if (send_rtmsg(RTM_DELETE, kt, kr_tofull(kr)))
785 kr->flags &= ~F_BGPD_INSERTED;
892 struct kroute *kr, *kn;
920 RB_FOREACH(kr, kroute_tree, &kt->krt) {
921 if (req.flags && (kr->flags & req.flags) == 0)
923 kn = kr;
955 kr = NULL;
958 kr = kroute_match(kt, &addr, 1);
959 if (kr != NULL) {
960 kf = kr_tofull(kr);
990 kr = h->kroute;
991 snh.valid = kroute_validate(kr);
993 snh.kr = *kr_tofull(kr);
994 ifindex = kr->ifindex;
1000 snh.kr = *kr6_tofull(kr6);
1004 snh.kr.priority = kr_priority(&snh.kr);
1365 struct kroute *kr;
1390 RB_FOREACH(kr, kroute_tree, &kt->krt)
1392 kr_tofull(kr));
1411 kr_tofull(struct kroute *kr)
1418 kf.prefix.v4.s_addr = kr->prefix.s_addr;
1420 kf.nexthop.v4.s_addr = kr->nexthop.s_addr;
1421 strlcpy(kf.label, rtlabel_id2name(kr->labelid), sizeof(kf.label));
1422 kf.flags = kr->flags;
1423 kf.ifindex = kr->ifindex;
1424 kf.prefixlen = kr->prefixlen;
1425 kf.priority = kr->priority;
1426 kf.mplslabel = kr->mplslabel;
1618 kroute_matchgw(struct kroute *kr, struct kroute_full *kf)
1624 if (kr->ifindex == kf->ifindex)
1625 return (kr);
1626 kr = kr->next;
1627 } while (kr);
1633 if (kr->nexthop.s_addr == nexthop)
1634 return (kr);
1635 kr = kr->next;
1636 } while (kr);
1644 struct kroute *kr, *krm;
1666 if ((kr = calloc(1, sizeof(*kr))) == NULL) {
1670 kr->flags = kf->flags;
1671 kr->prefix = kf->prefix.v4;
1672 kr->prefixlen = kf->prefixlen;
1674 kr->nexthop = kf->nexthop.v4;
1677 kr->flags |= F_MPLS;
1678 kr->mplslabel = htonl(mplslabel);
1681 kr->ifindex = kf->ifindex;
1682 kr->priority = kf->priority;
1683 kr->labelid = rtlabel_name2id(kf->label);
1685 if ((krm = RB_INSERT(kroute_tree, &kt->krt, kr)) != NULL) {
1689 krm->next = kr;
1695 kr->flags |= F_BGPD_INSERTED;
1756 struct kroute *kr, *krm;
1760 if ((kr = kroute_find(kt, &kf->prefix, kf->prefixlen,
1764 if ((kr->flags & F_BGPD) != (kf->flags & F_BGPD)) {
1768 kr->flags &= ~F_BGPD_INSERTED;
1773 krm = kr;
1775 if ((krm = kroute_matchgw(kr, kf)) == NULL) {
1782 if (krm == kr) {
1786 kr = krm->next;
1787 if (RB_INSERT(kroute_tree, &kt->krt, kr) != NULL) {
1789 __func__, inet_ntoa(kr->prefix),
1790 kr->prefixlen);
1798 while (kr->next != krm && kr->next != NULL)
1799 kr = kr->next;
1800 if (kr->next == NULL) {
1802 __func__, inet_ntoa(kr->prefix), kr->prefixlen);
1805 kr->next = krm->next;
1826 struct kroute6 *kr, *krm;
1830 if ((kr = kroute6_find(kt, &kf->prefix, kf->prefixlen,
1834 if ((kr->flags & F_BGPD) != (kf->flags & F_BGPD)) {
1838 kr->flags &= ~F_BGPD_INSERTED;
1843 krm = kr;
1845 if ((krm = kroute6_matchgw(kr, kf)) == NULL) {
1852 if (krm == kr) {
1856 kr = krm->next;
1857 if (RB_INSERT(kroute6_tree, &kt->krt6, kr) != NULL) {
1859 log_in6addr(&kr->prefix), kr->prefixlen);
1867 while (kr->next != krm && kr->next != NULL)
1868 kr = kr->next;
1869 if (kr->next == NULL) {
1871 __func__, log_in6addr(&kr->prefix), kr->prefixlen);
1874 kr->next = krm->next;
1931 struct kroute *kr;
1933 while ((kr = RB_MIN(kroute_tree, &kt->krt)) != NULL)
1934 kroute_remove(kt, kr_tofull(kr), 1);
1964 kroute6_matchgw(struct kroute6 *kr, struct kroute_full *kf)
1970 if (kr->ifindex == kf->ifindex)
1971 return (kr);
1972 kr = kr->next;
1973 } while (kr);
1979 if (memcmp(&kr->nexthop, &nexthop, sizeof(nexthop)) == 0 &&
1980 kr->nexthop_scope_id == kf->nexthop.scope_id)
1981 return (kr);
1982 kr = kr->next;
1983 } while (kr);
1991 struct kroute6 *kr;
1993 while ((kr = RB_MIN(kroute6_tree, &kt->krt6)) != NULL)
1994 kroute_remove(kt, kr6_tofull(kr), 1);
2134 kroute_validate(struct kroute *kr)
2138 if (kr->flags & (F_REJECT | F_BLACKHOLE))
2141 if ((kif = kif_find(kr->ifindex)) == NULL) {
2142 if (kr->ifindex)
2145 kr->ifindex, inet_ntoa(kr->prefix),
2146 kr->prefixlen);
2154 kroute6_validate(struct kroute6 *kr)
2158 if (kr->flags & (F_REJECT | F_BLACKHOLE))
2161 if ((kif = kif_find(kr->ifindex)) == NULL) {
2162 if (kr->ifindex)
2165 kr->ifindex, log_in6addr(&kr->prefix),
2166 kr->prefixlen);
2178 struct kroute *kr;
2202 kr = kn->kroute;
2203 if (kr->flags & F_CONNECTED)
2206 gateway.v4.s_addr = kr->nexthop.s_addr;
2226 struct kroute *kr;
2237 kr = kroute_match(kt, &kn->nexthop, 0);
2239 if (kr != NULL) {
2240 kn->kroute = kr;
2241 kn->ifindex = kr->ifindex;
2242 kr->flags |= F_NEXTHOP;
2250 if (kr != oldk)
2299 struct kroute *kr;
2313 kr = kn->kroute;
2314 n.valid = kroute_validate(kr);
2315 n.connected = kr->flags & F_CONNECTED;
2318 n.gateway.v4.s_addr = kr->nexthop.s_addr;
2322 n.net.v4.s_addr = kr->prefix.s_addr;
2323 n.netlen = kr->prefixlen;
2350 struct kroute *kr;
2355 if ((kr = kroute_find(kt, &masked, i, RTP_ANY)) != NULL)
2356 if (matchany || bgpd_oknexthop(kr_tofull(kr)))
2357 return (kr);
3165 struct kroute *kr;
3174 if ((kr = kroute_find(kt, &kf->prefix, kf->prefixlen,
3179 (kr = kroute_matchgw(kr, kf)) == NULL) {
3187 if (kr->nexthop.s_addr !=
3190 kr->nexthop.s_addr =
3192 kr->ifindex = kf->ifindex;
3194 if (kr->nexthop.s_addr != 0)
3196 kr->nexthop.s_addr = 0;
3197 kr->ifindex = kf->ifindex;
3200 if (kr->flags & F_NEXTHOP)
3204 if (kr->labelid != new_labelid) {
3205 rtlabel_unref(kr->labelid);
3206 kr->labelid = new_labelid;
3210 oflags = kr->flags;
3213 kr->flags = flags;
3217 kt, kr_tofull(kr));
3222 kt, kr_tofull(kr));
3226 kt, kr_tofull(kr));
3228 if (kr->flags & F_NEXTHOP && changed)
3231 kr->flags &= ~F_BGPD_INSERTED;