Skip to content

Commit b6dc199

Browse files
pyhalovcron2
authored andcommitted
Default gateway can't be determined on illumos/Solaris platforms
The logic which is used on BSD is preserved. The only distinction is that illumos doesn't provide sa_len field in sockaddr structures. Acked-by: Gert Doering <[email protected]> Message-Id: <[email protected]> URL: http://article.gmane.org/gmane.network.openvpn.devel/9128 Signed-off-by: Gert Doering <[email protected]>
1 parent 77f8a56 commit b6dc199

File tree

1 file changed

+19
-2
lines changed

1 file changed

+19
-2
lines changed

src/openvpn/route.c

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2601,7 +2601,7 @@ get_default_gateway (struct route_gateway_info *rgi)
26012601
gc_free (&gc);
26022602
}
26032603

2604-
#elif defined(TARGET_FREEBSD)||defined(TARGET_DRAGONFLY)
2604+
#elif defined(TARGET_FREEBSD)||defined(TARGET_DRAGONFLY)||defined(TARGET_SOLARIS)
26052605

26062606
#include <sys/types.h>
26072607
#include <sys/socket.h>
@@ -2629,13 +2629,27 @@ get_default_gateway (struct route_gateway_info *rgi)
26292629
struct sockaddr *gate = NULL, *sa;
26302630
struct rt_msghdr *rtm_aux;
26312631

2632+
#if defined(TARGET_FREEBSD)||defined(TARGET_DRAGONFLY)
2633+
26322634
#define NEXTADDR(w, u) \
26332635
if (rtm_addrs & (w)) {\
26342636
l = ROUNDUP(u.sa_len); memmove(cp, &(u), l); cp += l;\
26352637
}
26362638

26372639
#define ADVANCE(x, n) (x += ROUNDUP((n)->sa_len))
26382640

2641+
#else /* TARGET_SOLARIS */
2642+
2643+
#define NEXTADDR(w, u) \
2644+
if (rtm_addrs & (w)) {\
2645+
l = ROUNDUP(sizeof(struct sockaddr_in)); memmove(cp, &(u), l); cp += l;\
2646+
}
2647+
2648+
#define ADVANCE(x, n) (x += ROUNDUP(sizeof(struct sockaddr_in)))
2649+
2650+
#endif
2651+
2652+
26392653
#define rtm m_rtmsg.m_rtm
26402654

26412655
CLEAR(*rgi);
@@ -2655,9 +2669,12 @@ get_default_gateway (struct route_gateway_info *rgi)
26552669
rtm.rtm_addrs = rtm_addrs;
26562670

26572671
so_dst.sa_family = AF_INET;
2658-
so_dst.sa_len = sizeof(struct sockaddr_in);
26592672
so_mask.sa_family = AF_INET;
2673+
2674+
#if defined(TARGET_FREEBSD)||defined(TARGET_DRAGONFLY)
2675+
so_dst.sa_len = sizeof(struct sockaddr_in);
26602676
so_mask.sa_len = sizeof(struct sockaddr_in);
2677+
#endif
26612678

26622679
NEXTADDR(RTA_DST, so_dst);
26632680
NEXTADDR(RTA_NETMASK, so_mask);

0 commit comments

Comments
 (0)