cron2 has uploaded a new patch set (#6) to the change originally created by plaisthos. ( http://gerrit.openvpn.net/c/openvpn/+/1191?usp=email )
The following approvals got outdated and were removed: Code-Review+2 by cron2 Change subject: Allow route_ipv6_match_host to be used outside of route.c ...................................................................... Allow route_ipv6_match_host to be used outside of route.c Also adjust style a bit to C99 Change-Id: Ief1495b52ea81cac35d78e40264372d3869423f1 Signed-off-by: Arne Schwabe <[email protected]> Acked-by: Gert Doering <[email protected]> Gerrit URL: https://gerrit.openvpn.net/c/openvpn/+/1191 Message-Id: <[email protected]> URL: https://sourceforge.net/p/openvpn/mailman/message/59243387/ Signed-off-by: Gert Doering <[email protected]> --- M src/openvpn/route.c M src/openvpn/route.h 2 files changed, 23 insertions(+), 14 deletions(-) git pull ssh://gerrit.openvpn.net:29418/openvpn refs/changes/91/1191/6 diff --git a/src/openvpn/route.c b/src/openvpn/route.c index 05a0c8f..0044794 100644 --- a/src/openvpn/route.c +++ b/src/openvpn/route.c @@ -710,25 +710,20 @@ return ret; } -/* check whether an IPv6 host address is covered by a given route_ipv6 - * (not the most beautiful implementation in the world, but portable and - * "good enough") - */ -static bool -route_ipv6_match_host(const struct route_ipv6 *r6, const struct in6_addr *host) +bool +ipv6_net_contains_host(const struct in6_addr *network, unsigned int bits, const struct in6_addr *host) { - unsigned int bits = r6->netbits; - int i; - unsigned int mask; - + /* not the most beautiful implementation in the world, but portable and + * "good enough" */ if (bits > 128) { return false; } + int i; for (i = 0; bits >= 8; i++, bits -= 8) { - if (r6->network.s6_addr[i] != host->s6_addr[i]) + if (network->s6_addr[i] != host->s6_addr[i]) { return false; } @@ -739,9 +734,9 @@ return true; } - mask = 0xff << (8 - bits); + unsigned int mask = 0xff << (8 - bits); - if ((r6->network.s6_addr[i] & mask) == (host->s6_addr[i] & mask)) + if ((network->s6_addr[i] & mask) == (host->s6_addr[i] & mask)) { return true; } @@ -830,7 +825,8 @@ * avoiding routing loops, so ignore this part and let * need_remote_ipv6_route always evaluate to false */ - if (remote_host_ipv6 && route_ipv6_match_host(r6, remote_host_ipv6)) + if (remote_host_ipv6 + && ipv6_net_contains_host(&r6->network, r6->netbits, remote_host_ipv6)) { need_remote_ipv6_route = true; msg(D_ROUTE, diff --git a/src/openvpn/route.h b/src/openvpn/route.h index c5006ae..54fa137 100644 --- a/src/openvpn/route.h +++ b/src/openvpn/route.h @@ -426,4 +426,17 @@ return rl && BOOL_CAST(rl->iflags & RL_DID_REDIRECT_DEFAULT_GATEWAY); } + +/** + * check whether an IPv6 host address is covered by a given network/bits + * @param network the network address + * @param bits the network mask + * @param host the host address to be checked if it is contained by the network + * + * @return true if the host address is covered by the network with the given + * network mask by bits + */ +bool +ipv6_net_contains_host(const struct in6_addr *network, unsigned int bits, const struct in6_addr *host); + #endif /* ifndef ROUTE_H */ -- To view, visit http://gerrit.openvpn.net/c/openvpn/+/1191?usp=email To unsubscribe, or for help writing mail filters, visit http://gerrit.openvpn.net/settings?usp=email Gerrit-MessageType: newpatchset Gerrit-Project: openvpn Gerrit-Branch: master Gerrit-Change-Id: Ief1495b52ea81cac35d78e40264372d3869423f1 Gerrit-Change-Number: 1191 Gerrit-PatchSet: 6 Gerrit-Owner: plaisthos <[email protected]> Gerrit-Reviewer: cron2 <[email protected]> Gerrit-Reviewer: d12fk <[email protected]> Gerrit-Reviewer: flichtenheld <[email protected]> Gerrit-Reviewer: ordex <[email protected]> Gerrit-CC: openvpn-devel <[email protected]>
_______________________________________________ Openvpn-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/openvpn-devel
