Direct: Fixes behavior for the same routes on different interfaces
Thanks to Andrew (seti.kr.ua) for the bug report.
This commit is contained in:
parent
8d9eef1771
commit
ab4da3423d
1 changed files with 9 additions and 3 deletions
|
@ -51,7 +51,10 @@ dev_ifa_notify(struct proto *p, unsigned c, struct ifa *ad)
|
||||||
DBG("dev_if_notify: device shutdown: prefix not found\n");
|
DBG("dev_if_notify: device shutdown: prefix not found\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
rte_update(p, n, NULL);
|
|
||||||
|
/* Use iface ID as local source ID */
|
||||||
|
struct rte_src *src = rt_get_source(p, ad->iface->index);
|
||||||
|
rte_update2(p->main_ahook, n, NULL, src);
|
||||||
}
|
}
|
||||||
else if (c & IF_CHANGE_UP)
|
else if (c & IF_CHANGE_UP)
|
||||||
{
|
{
|
||||||
|
@ -61,8 +64,11 @@ dev_ifa_notify(struct proto *p, unsigned c, struct ifa *ad)
|
||||||
|
|
||||||
DBG("dev_if_notify: %s:%I going up\n", ad->iface->name, ad->ip);
|
DBG("dev_if_notify: %s:%I going up\n", ad->iface->name, ad->ip);
|
||||||
|
|
||||||
|
/* Use iface ID as local source ID */
|
||||||
|
struct rte_src *src = rt_get_source(p, ad->iface->index);
|
||||||
|
|
||||||
rta a0 = {
|
rta a0 = {
|
||||||
.src = p->main_source,
|
.src = src,
|
||||||
.source = RTS_DEVICE,
|
.source = RTS_DEVICE,
|
||||||
.scope = SCOPE_UNIVERSE,
|
.scope = SCOPE_UNIVERSE,
|
||||||
.cast = RTC_UNICAST,
|
.cast = RTC_UNICAST,
|
||||||
|
@ -75,7 +81,7 @@ dev_ifa_notify(struct proto *p, unsigned c, struct ifa *ad)
|
||||||
e = rte_get_temp(a);
|
e = rte_get_temp(a);
|
||||||
e->net = n;
|
e->net = n;
|
||||||
e->pflags = 0;
|
e->pflags = 0;
|
||||||
rte_update(p, n, e);
|
rte_update2(p->main_ahook, n, e, src);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue