--- bgpd/kroute.c.orig 2009-12-26 09:03:41.000000000 +0300 +++ bgpd/kroute.c 2009-12-26 09:27:42.000000000 +0300 @@ -2255,8 +2255,10 @@ break; kr->r.prefixlen = mask2prefixlen(sa_in->sin_addr.s_addr); - } else if (rtm->rtm_flags & RTF_HOST) + } else if (rtm->rtm_flags & RTF_HOST) { kr->r.prefixlen = 32; + kr->r.flags |= F_CONNECTED; + } else kr->r.prefixlen = prefixlen_classful(kr->r.prefix.s_addr); @@ -2293,8 +2295,10 @@ if (sa_in6->sin6_len == 0) break; kr6->r.prefixlen = mask2prefixlen6(sa_in6); - } else if (rtm->rtm_flags & RTF_HOST) + } else if (rtm->rtm_flags & RTF_HOST) { kr6->r.prefixlen = 128; + kr->r.flags |= F_CONNECTED; + } else fatalx("INET6 route without netmask"); break; @@ -2560,8 +2564,10 @@ if (sa_in->sin_len != 0) prefixlen = mask2prefixlen( sa_in->sin_addr.s_addr); - } else if (rtm->rtm_flags & RTF_HOST) + } else if (rtm->rtm_flags & RTF_HOST) { prefixlen = 32; + flags |= F_CONNECTED; + } else prefixlen = prefixlen_classful(prefix.v4.s_addr); @@ -2573,8 +2579,10 @@ if (sa_in6 != NULL) { if (sa_in6->sin6_len != 0) prefixlen = mask2prefixlen6(sa_in6); - } else if (rtm->rtm_flags & RTF_HOST) + } else if (rtm->rtm_flags & RTF_HOST) { prefixlen = 128; + kr->r.flags |= F_CONNECTED; + } else fatalx("in6 net addr without netmask"); break;