Kapetanakis Giannis <bil...@edu.physics.uoc.gr> writes: > 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)?
I'm not sure about this. Maybe it should be discussed separately? > updated diff bellow (in case not) with jca@ recommendations. I have tweaks, but this already looks fine to me. ok jca@ > 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); > > > > > > > -- jca | PGP : 0x1524E7EE / 5135 92C1 AD36 5293 2BDF DDCC 0DFA 74AE 1524 E7EE