Allow resetting the IP_TTL and IP_MINTTL sockopts
authorjca <jca@openbsd.org>
Fri, 1 Jul 2016 18:28:58 +0000 (18:28 +0000)
committerjca <jca@openbsd.org>
Fri, 1 Jul 2016 18:28:58 +0000 (18:28 +0000)
IP_TTL can be reset by passing -1, IP_MINTTL can be reset by passing 0.
This is consistent with what Linux does and
IPV6_UNICAST_HOPS/IPV6_MINHOPCOUNT.

ok bluhm@

sys/netinet/ip_output.c

index 3613366..d65e81b 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: ip_output.c,v 1.324 2016/06/23 09:08:56 henning Exp $ */
+/*     $OpenBSD: ip_output.c,v 1.325 2016/07/01 18:28:58 jca Exp $     */
 /*     $NetBSD: ip_output.c,v 1.28 1996/02/13 23:43:07 christos Exp $  */
 
 /*
@@ -887,12 +887,14 @@ ip_ctloutput(int op, struct socket *so, int level, int optname,
                                case IP_TTL:
                                        if (optval > 0 && optval <= MAXTTL)
                                                inp->inp_ip.ip_ttl = optval;
+                                       else if (optval == -1)
+                                               inp->inp_ip.ip_ttl = ip_defttl;
                                        else
                                                error = EINVAL;
                                        break;
 
                                case IP_MINTTL:
-                                       if (optval > 0 && optval <= MAXTTL)
+                                       if (optval >= 0 && optval <= MAXTTL)
                                                inp->inp_ip_minttl = optval;
                                        else
                                                error = EINVAL;