commited, thanks!
On Mon, Jul 10, 2017 at 06:18:03PM +0300, Kapetanakis Giannis wrote:
> On 10/07/17 17:22, Jeremie Courreges-Anglas wrote:
> > Using -1 for IPV6_UNICAST_HOPS is correct.
> >
> > Note that you can also use -1 for IP_TTL on OpenBSD, sadly some systems
> > out there don't support it.
> >
> >> comments?
> >
> > ok jca@ with the nits below.
> >
> > It would be nice to factor this out in a helper function and use it
> > elsewhere in relayd.
>
> Thanks for the comments.
>
> My guess is that the helper function should go outside of relayd so it can be
> used by others as well?
> I leave that to a more competent programmer.
>
> Would you like me to set -1 to IP_TTL as well and drop the call to
> getsockopt(2)?
>
> updated diff bellow (in case not) with jca@ recommendations.
>
> G
>
> Index: check_icmp.c
> ===================================================================
> RCS file: /cvs/src/usr.sbin/relayd/check_icmp.c,v
> retrieving revision 1.45
> diff -u -p -r1.45 check_icmp.c
> --- check_icmp.c 28 May 2017 10:39:15 -0000 1.45
> +++ check_icmp.c 10 Jul 2017 15:16:02 -0000
> @@ -220,18 +220,45 @@ send_icmp(int s, short event, void *arg)
> sizeof(packet));
> }
>
> - if ((ttl = host->conf.ttl) > 0)
> - (void)setsockopt(s, IPPROTO_IP, IP_TTL,
> - &host->conf.ttl, sizeof(int));
> - else {
> - /* Revert to default TTL */
> - len = sizeof(ttl);
> - if (getsockopt(s, IPPROTO_IP, IP_IPDEFTTL,
> - &ttl, &len) == 0)
> - (void)setsockopt(s, IPPROTO_IP, IP_TTL,
> - &ttl, len);
> - else
> - log_warn("%s: getsockopt",__func__);
> + switch(cie->af) {
> + case AF_INET:
> + if ((ttl = host->conf.ttl) > 0) {
> + if (setsockopt(s, IPPROTO_IP, IP_TTL,
> + &host->conf.ttl, sizeof(int)) == -1)
> + log_warn("%s: setsockopt",
> + __func__);
> + } else {
> + /* Revert to default TTL */
> + len = sizeof(ttl);
> + if (getsockopt(s, IPPROTO_IP,
> + IP_IPDEFTTL, &ttl, &len) == 0) {
> + if (setsockopt(s, IPPROTO_IP,
> + IP_TTL, &ttl, len) == -1)
> + log_warn(
> + "%s: setsockopt",
> + __func__);
> + } else
> + log_warn("%s: getsockopt",
> + __func__);
> + }
> + break;
> + case AF_INET6:
> + if ((ttl = host->conf.ttl) > 0) {
> + if (setsockopt(s, IPPROTO_IPV6,
> + IPV6_UNICAST_HOPS, &host->conf.ttl,
> + sizeof(int)) == -1)
> + log_warn("%s: setsockopt",
> + __func__);
> + } else {
> + /* Revert to default hop limit */
> + ttl = -1;
> + if (setsockopt(s, IPPROTO_IPV6,
> + IPV6_UNICAST_HOPS, &ttl,
> + sizeof(int)) == -1)
> + log_warn("%s: setsockopt",
> + __func__);
> + }
> + break;
> }
>
> r = sendto(s, packet, sizeof(packet), 0, to, slen);
>
>
>
>
>
>
>
--
I'm not entirely sure you are real.