From 57573a9811330e552c2618d901ca56462fca6eb3 Mon Sep 17 00:00:00 2001 From: Martin Willi Date: Wed, 17 Apr 2013 14:50:47 +0200 Subject: [PATCH] kernel-utun: when installing host routes, set flag and omit netmask --- src/libhydra/plugins/kernel_utun/kernel_utun_net.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/libhydra/plugins/kernel_utun/kernel_utun_net.c b/src/libhydra/plugins/kernel_utun/kernel_utun_net.c index 2518656cba..4fb968e06b 100644 --- a/src/libhydra/plugins/kernel_utun/kernel_utun_net.c +++ b/src/libhydra/plugins/kernel_utun/kernel_utun_net.c @@ -304,6 +304,12 @@ static status_t manage_route(private_kernel_utun_net_t *this, int op, return FAILED; } + if ((dst->get_family(dst) == AF_INET && prefixlen == 32) || + (dst->get_family(dst) == AF_INET6 && prefixlen == 128)) + { + msg.hdr.rtm_flags |= RTF_HOST | RTF_GATEWAY; + } + msg.hdr.rtm_msglen = sizeof(struct rt_msghdr); for (i = 0; i < RTAX_MAX; i++) { @@ -313,8 +319,11 @@ static status_t manage_route(private_kernel_utun_net_t *this, int op, add_rt_addr(&msg.hdr, RTA_DST, dst); break; case RTAX_NETMASK: - add_rt_mask(&msg.hdr, RTA_NETMASK, - dst->get_family(dst), prefixlen); + if (!(msg.hdr.rtm_flags & RTF_HOST)) + { + add_rt_mask(&msg.hdr, RTA_NETMASK, + dst->get_family(dst), prefixlen); + } break; case RTAX_GATEWAY: /* interface name seems to replace gateway on OS X */ -- 2.47.2