--- a/zebra/zebra_nhg.c 2019-10-18 01:59:17.582282539 +0300 +++ b/zebra/zebra_nhg.c 2019-10-18 02:00:17.501997253 +0300 @@ -253,20 +253,9 @@ while (rn) { route_unlock_node(rn); - /* Lookup should halt if we've matched against ourselves ('top', - * if specified) - i.e., we cannot have a nexthop NH1 is - * resolved by a route NH1. The exception is if the route is a - * host route. - */ - if (top && rn == top) - if (((afi == AFI_IP) && (rn->p.prefixlen != 32)) - || ((afi == AFI_IP6) && (rn->p.prefixlen != 128))) { - if (IS_ZEBRA_DEBUG_RIB_DETAILED) - zlog_debug( - "\t%s: Matched against ourself and prefix length is not max bit length", - __PRETTY_FUNCTION__); - return 0; - } + /* If lookup self prefix return immediately. */ + if (rn == top) + return 0; /* Pick up selected route. */ /* However, do not resolve over default route unless explicitly