From 7747c86253114ed9702346a93587e4e6cac444aa Mon Sep 17 00:00:00 2001 From: David Ward Date: Tue, 29 Mar 2011 22:43:03 -0400 Subject: [PATCH] netlink: ignore kernel routes for GRE interfaces The kernel route should not be added as a peer, except on shortcut- destination interfaces. It can prevent NHRP resolution requests from being routed correctly to a statically-configured next hop server. Signed-off-by: David Ward --- nhrp/sysdep_netlink.c | 9 ++++----- 1 files changed, 4 insertions(+), 5 deletions(-) diff --git a/nhrp/sysdep_netlink.c b/nhrp/sysdep_netlink.c index a76acc2..e3e588b 100644 --- a/nhrp/sysdep_netlink.c +++ b/nhrp/sysdep_netlink.c @@ -691,7 +691,8 @@ static void netlink_route_new(struct nlmsghdr *msg) } else if (iface->flags & NHRP_INTERFACE_FLAG_CONFIGURED) { /* Routes which might get additional outbound * shortcuts */ - if (rtm->rtm_table != iface->route_table) + if (rtm->rtm_table != iface->route_table || + rtm->rtm_protocol == RTPROT_KERNEL) return; type = NHRP_PEER_TYPE_LOCAL_ROUTE; } @@ -728,12 +729,9 @@ static void netlink_route_del(struct nlmsghdr *msg) if (rta[RTA_OIF] == NULL || rta[RTA_DST] == NULL) return; - /* Consider only routes from main table */ if (rtm->rtm_family != PF_INET) return; - /* Only consider routes for local interfaces that accept - * shortcut connections */ iface = nhrp_interface_get_by_index(*(int*)RTA_DATA(rta[RTA_OIF]), FALSE); if (iface == NULL) @@ -747,7 +745,8 @@ static void netlink_route_del(struct nlmsghdr *msg) } else if (iface->flags & NHRP_INTERFACE_FLAG_CONFIGURED) { /* Routes which might get additional outbound * shortcuts */ - if (rtm->rtm_table != iface->route_table) + if (rtm->rtm_table != iface->route_table || + rtm->rtm_protocol == RTPROT_KERNEL) return; type = NHRP_PEER_TYPE_LOCAL_ROUTE; } -- 1.7.1