Nest: Fix corner case in recursive next hop lookup
Thanks to Svenne Krap for the bugreport.
This commit is contained in:
parent
345e50d59f
commit
85ad5855a0
1 changed files with 6 additions and 6 deletions
|
@ -2392,12 +2392,13 @@ static int
|
||||||
rt_update_hostentry(rtable *tab, struct hostentry *he)
|
rt_update_hostentry(rtable *tab, struct hostentry *he)
|
||||||
{
|
{
|
||||||
rta *old_src = he->src;
|
rta *old_src = he->src;
|
||||||
|
int direct = 0;
|
||||||
int pxlen = 0;
|
int pxlen = 0;
|
||||||
|
|
||||||
/* Reset the hostentry */
|
/* Reset the hostentry */
|
||||||
he->src = NULL;
|
he->src = NULL;
|
||||||
he->nexthop_linkable = 0;
|
|
||||||
he->dest = RTD_UNREACHABLE;
|
he->dest = RTD_UNREACHABLE;
|
||||||
|
he->nexthop_linkable = 0;
|
||||||
he->igp_metric = 0;
|
he->igp_metric = 0;
|
||||||
|
|
||||||
net_addr he_addr;
|
net_addr he_addr;
|
||||||
|
@ -2417,9 +2418,7 @@ rt_update_hostentry(rtable *tab, struct hostentry *he)
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
he->dest = a->dest;
|
if (a->dest == RTD_UNICAST)
|
||||||
he->nexthop_linkable = 1;
|
|
||||||
if (he->dest == RTD_UNICAST)
|
|
||||||
{
|
{
|
||||||
for (struct nexthop *nh = &(a->nh); nh; nh = nh->next)
|
for (struct nexthop *nh = &(a->nh); nh; nh = nh->next)
|
||||||
if (ipa_zero(nh->gw))
|
if (ipa_zero(nh->gw))
|
||||||
|
@ -2432,12 +2431,13 @@ rt_update_hostentry(rtable *tab, struct hostentry *he)
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
he->nexthop_linkable = 0;
|
direct++;
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
he->src = rta_clone(a);
|
he->src = rta_clone(a);
|
||||||
|
he->dest = a->dest;
|
||||||
|
he->nexthop_linkable = !direct;
|
||||||
he->igp_metric = rt_get_igp_metric(e);
|
he->igp_metric = rt_get_igp_metric(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue