blob: a68409fecf79dcfdd7a0940710fbce351ec90354 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
From a7288181001144b4d44c4265624828045b80f988 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timo=20Ter=C3=A4s?= <timo.teras@iki.fi>
Date: Sat, 19 Apr 2014 19:13:04 +0300
Subject: [PATCH] netlink: additional fixes to route-table matching (fix
previous commit)
---
nhrp/sysdep_netlink.c | 20 ++++++++++++--------
1 file changed, 12 insertions(+), 8 deletions(-)
diff --git a/nhrp/sysdep_netlink.c b/nhrp/sysdep_netlink.c
index 44063ad..74907bb 100644
--- a/nhrp/sysdep_netlink.c
+++ b/nhrp/sysdep_netlink.c
@@ -738,13 +738,15 @@ static void netlink_route_new(struct nlmsghdr *msg)
return;
if (iface->flags & NHRP_INTERFACE_FLAG_SHORTCUT_DEST) {
- /* Local shortcut target routes */
- if (rtm->rtm_table != iface->route_table)
+ /* Off-NBMA bound routes, include kernel subnet
+ * routes, and anything routing table. */
+ if (rtm->rtm_table != iface->route_table &&
+ rtm->rtm_protocol != RTPROT_KERNEL)
return;
type = NHRP_PEER_TYPE_LOCAL_ADDR;
} else if (iface->flags & NHRP_INTERFACE_FLAG_CONFIGURED) {
- /* Routes which might get additional outbound
- * shortcuts */
+ /* In-NBMA bound routes, include only specifed table
+ * and only non-kernel created routes */
if (rtm->rtm_table != iface->route_table ||
rtm->rtm_protocol == RTPROT_KERNEL)
return;
@@ -792,13 +794,15 @@ static void netlink_route_del(struct nlmsghdr *msg)
return;
if (iface->flags & NHRP_INTERFACE_FLAG_SHORTCUT_DEST) {
- /* Local shortcut target routes */
- if (rtm->rtm_table != RT_TABLE_MAIN)
+ /* Off-NBMA bound routes, include kernel subnet
+ * routes, and anything routing table. */
+ if (rtm->rtm_table != iface->route_table &&
+ rtm->rtm_protocol != RTPROT_KERNEL)
return;
type = NHRP_PEER_TYPE_LOCAL_ADDR;
} else if (iface->flags & NHRP_INTERFACE_FLAG_CONFIGURED) {
- /* Routes which might get additional outbound
- * shortcuts */
+ /* In-NBMA bound routes, include only specifed table
+ * and only non-kernel created routes */
if (rtm->rtm_table != iface->route_table ||
rtm->rtm_protocol == RTPROT_KERNEL)
return;
--
2.4.6
|