Module Name: src
Committed By: knakahara
Date: Mon Aug 22 09:25:55 UTC 2022
Modified Files:
src/share/man/man7: sysctl.7
src/sys/netinet: icmp6.h
src/sys/netinet6: icmp6.c
Log Message:
Add sysctl entry to enable/disable to use path MTU discovery for icmpv6
reflecting.
If we want to use path MTU discovery for icmp reflecting set
net.inet6.icmp6.reflect_pmtu=1. Default(=0) is the same as before, that is,
use IPV6_MINMTU.
To generate a diff of this commit:
cvs rdiff -u -r1.159 -r1.160 src/share/man/man7/sysctl.7
cvs rdiff -u -r1.57 -r1.58 src/sys/netinet/icmp6.h
cvs rdiff -u -r1.250 -r1.251 src/sys/netinet6/icmp6.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/share/man/man7/sysctl.7
diff -u src/share/man/man7/sysctl.7:1.159 src/share/man/man7/sysctl.7:1.160
--- src/share/man/man7/sysctl.7:1.159 Fri Aug 12 15:43:38 2022
+++ src/share/man/man7/sysctl.7 Mon Aug 22 09:25:55 2022
@@ -1,4 +1,4 @@
-.\" $NetBSD: sysctl.7,v 1.159 2022/08/12 15:43:38 riastradh Exp $
+.\" $NetBSD: sysctl.7,v 1.160 2022/08/22 09:25:55 knakahara Exp $
.\"
.\" Copyright (c) 1993
.\" The Regents of the University of California. All rights reserved.
@@ -1855,6 +1855,7 @@ The currently defined protocols and name
.It icmp6 nodeinfo integer yes
.It icmp6 rediraccept integer yes
.It icmp6 redirtimeout integer yes
+.It icmp6 reflect_pmtu boolean yes
.It ip6 accept_rtadv integer yes
.It ip6 addctlpolicy struct in6_addrpolicy no
.It ip6 anonportalgo.selected string yes
@@ -2116,6 +2117,10 @@ only.
.It Li icmp6.redirtimeout
The variable specifies lifetime of routing entries generated by incoming
ICMPv6 redirect.
+.It Li icmp6.reflect_pmtu
+A boolean that icmpv6 reflecting uses path MTU discovery or not.
+When not, icmpv6 reflecting uses IPV6_MINMTU.
+ICMPv6 redirect.
.It Li udp6.do_loopback_cksum
Perform UDP checksum on loopback.
.It Li udp6.recvspace
Index: src/sys/netinet/icmp6.h
diff -u src/sys/netinet/icmp6.h:1.57 src/sys/netinet/icmp6.h:1.58
--- src/sys/netinet/icmp6.h:1.57 Mon Jul 27 14:52:55 2020
+++ src/sys/netinet/icmp6.h Mon Aug 22 09:25:55 2022
@@ -1,4 +1,4 @@
-/* $NetBSD: icmp6.h,v 1.57 2020/07/27 14:52:55 roy Exp $ */
+/* $NetBSD: icmp6.h,v 1.58 2022/08/22 09:25:55 knakahara Exp $ */
/* $KAME: icmp6.h,v 1.84 2003/04/23 10:26:51 itojun Exp $ */
@@ -640,6 +640,7 @@ struct icmp6_filter {
#define OICMPV6CTL_ND6_PRLIST 20
#endif
#define ICMPV6CTL_ND6_MAXQLEN 24
+#define ICMPV6CTL_REFLECT_PMTU 25
#ifdef _KERNEL
struct rtentry;
Index: src/sys/netinet6/icmp6.c
diff -u src/sys/netinet6/icmp6.c:1.250 src/sys/netinet6/icmp6.c:1.251
--- src/sys/netinet6/icmp6.c:1.250 Fri Feb 19 14:52:00 2021
+++ src/sys/netinet6/icmp6.c Mon Aug 22 09:25:55 2022
@@ -1,4 +1,4 @@
-/* $NetBSD: icmp6.c,v 1.250 2021/02/19 14:52:00 christos Exp $ */
+/* $NetBSD: icmp6.c,v 1.251 2022/08/22 09:25:55 knakahara Exp $ */
/* $KAME: icmp6.c,v 1.217 2001/06/20 15:03:29 jinmei Exp $ */
/*
@@ -62,7 +62,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: icmp6.c,v 1.250 2021/02/19 14:52:00 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: icmp6.c,v 1.251 2022/08/22 09:25:55 knakahara Exp $");
#ifdef _KERNEL_OPT
#include "opt_compat_netbsd.h"
@@ -181,6 +181,8 @@ static int icmp6_redirect_lowat = -1;
/* Protect mtudisc and redirect stuffs */
static kmutex_t icmp6_mtx __cacheline_aligned;
+static bool icmp6_reflect_pmtu = false;
+
static void icmp6_errcount(u_int, int, int);
static int icmp6_rip6_input(struct mbuf **, int);
static void icmp6_reflect(struct mbuf *, size_t);
@@ -2058,6 +2060,7 @@ icmp6_reflect(struct mbuf *m, size_t off
struct ifnet *rcvif;
int s;
bool ip6_src_filled = false;
+ int flags;
/* too short to reflect */
if (off < sizeof(struct ip6_hdr)) {
@@ -2202,12 +2205,14 @@ icmp6_reflect(struct mbuf *m, size_t off
m->m_flags &= ~(M_BCAST|M_MCAST);
/*
+ * Note for icmp6_reflect_pmtu == false
* To avoid a "too big" situation at an intermediate router
* and the path MTU discovery process, specify the IPV6_MINMTU flag.
* Note that only echo and node information replies are affected,
* since the length of ICMP6 errors is limited to the minimum MTU.
*/
- if (ip6_output(m, NULL, NULL, IPV6_MINMTU, NULL, NULL, &outif) != 0 &&
+ flags = icmp6_reflect_pmtu ? 0 : IPV6_MINMTU;
+ if (ip6_output(m, NULL, NULL, flags, NULL, NULL, &outif) != 0 &&
outif)
icmp6_ifstat_inc(outif, ifs6_out_error);
if (outif)
@@ -3105,6 +3110,13 @@ sysctl_net_inet6_icmp6_setup(struct sysc
CTL_NET, PF_INET6, IPPROTO_ICMPV6,
OICMPV6CTL_ND6_PRLIST, CTL_EOL);
#endif
+ sysctl_createv(clog, 0, NULL, NULL,
+ CTLFLAG_PERMANENT|CTLFLAG_READWRITE,
+ CTLTYPE_BOOL, "reflect_pmtu",
+ SYSCTL_DESCR("Use path MTU Discovery for icmpv6 reflect"),
+ NULL, 0, &icmp6_reflect_pmtu, 0,
+ CTL_NET, PF_INET6, IPPROTO_ICMPV6,
+ ICMPV6CTL_REFLECT_PMTU, CTL_EOL);
}
void