]> git.ipfire.org Git - thirdparty/strongswan.git/commitdiff
kernel-utun: when installing host routes, set flag and omit netmask
authorMartin Willi <martin@revosec.ch>
Wed, 17 Apr 2013 12:50:47 +0000 (14:50 +0200)
committerMartin Willi <martin@revosec.ch>
Thu, 18 Apr 2013 12:43:56 +0000 (14:43 +0200)
src/libhydra/plugins/kernel_utun/kernel_utun_net.c

index 2518656cba90757ba4b697dee8cb92420516542a..4fb968e06b1ba448e006d9af6bebf1b7908cc35d 100644 (file)
@@ -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 */