Current Linux kernels don't remember rtm_protocol for IPv6 routes and supply RTPROT_BOOT instead.
Work around that.
This commit is contained in:
parent
11d4474c17
commit
abf06173a3
1 changed files with 7 additions and 1 deletions
|
@ -625,7 +625,7 @@ nl_parse_route(struct nlmsghdr *h, int scan)
|
||||||
else
|
else
|
||||||
oif = ~0;
|
oif = ~0;
|
||||||
|
|
||||||
DBG("Got %I/%d, type=%d, oif=%d, table=%d, proto=%s\n", dst, i->rtm_dst_len, i->rtm_type, oif, i->rtm_table, p->p.name);
|
DBG("Got %I/%d, type=%d, oif=%d, table=%d, prid=%d, proto=%s\n", dst, i->rtm_dst_len, i->rtm_type, oif, i->rtm_table, i->rtm_protocol, p->p.name);
|
||||||
|
|
||||||
switch (i->rtm_protocol)
|
switch (i->rtm_protocol)
|
||||||
{
|
{
|
||||||
|
@ -636,6 +636,10 @@ nl_parse_route(struct nlmsghdr *h, int scan)
|
||||||
DBG("Route originated in kernel, ignoring\n");
|
DBG("Route originated in kernel, ignoring\n");
|
||||||
return;
|
return;
|
||||||
case RTPROT_BIRD:
|
case RTPROT_BIRD:
|
||||||
|
#ifdef IPV6
|
||||||
|
case RTPROT_BOOT:
|
||||||
|
/* Current Linux kernels don't remember rtm_protocol for IPv6 routes and supply RTPROT_BOOT instead */
|
||||||
|
#endif
|
||||||
if (!scan)
|
if (!scan)
|
||||||
{
|
{
|
||||||
DBG("Echo of our own route, ignoring\n");
|
DBG("Echo of our own route, ignoring\n");
|
||||||
|
@ -887,6 +891,8 @@ krt_scan_construct(struct krt_config *x)
|
||||||
{
|
{
|
||||||
#ifndef IPV6
|
#ifndef IPV6
|
||||||
x->scan.table_id = RT_TABLE_MAIN;
|
x->scan.table_id = RT_TABLE_MAIN;
|
||||||
|
#else
|
||||||
|
x->scan.table_id = 254;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue