Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 25 Apr 2017 11:19:22 +0000 (UTC)
From:      "Andrey V. Elsukov" <ae@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org
Subject:   svn commit: r317403 - stable/11/sys/net
Message-ID:  <201704251119.v3PBJMeZ037353@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: ae
Date: Tue Apr 25 11:19:22 2017
New Revision: 317403
URL: https://svnweb.freebsd.org/changeset/base/317403

Log:
  MFC r316699:
    Do not adjust interface MTU automatically. Leave this task to the system
    administrator.
  
    Before r274246 interface MTU was adjusted only when GRE key is configured.
    The r274246 has changed this behavior to automatically adjust MTU when any
    option, that changes the size of GRE header is configured.
    This patch removes automatic MTU adjustment from if_gre(4) and if_me(4),
    and restores the behavior that was prior to r274246.
  
    Differential Revision:	https://reviews.freebsd.org/D10215

Modified:
  stable/11/sys/net/if_gre.c
  stable/11/sys/net/if_gre.h
  stable/11/sys/net/if_me.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/sys/net/if_gre.c
==============================================================================
--- stable/11/sys/net/if_gre.c	Tue Apr 25 10:29:08 2017	(r317402)
+++ stable/11/sys/net/if_gre.c	Tue Apr 25 11:19:22 2017	(r317403)
@@ -88,7 +88,7 @@ __FBSDID("$FreeBSD$");
 #include <machine/in_cksum.h>
 #include <security/mac/mac_framework.h>
 
-#define	GREMTU			1500
+#define	GREMTU			1476
 static const char grename[] = "gre";
 static MALLOC_DEFINE(M_GRE, grename, "Generic Routing Encapsulation");
 static VNET_DEFINE(struct mtx, gre_mtx);
@@ -173,7 +173,7 @@ gre_clone_create(struct if_clone *ifc, i
 	GRE2IFP(sc)->if_softc = sc;
 	if_initname(GRE2IFP(sc), grename, unit);
 
-	GRE2IFP(sc)->if_mtu = sc->gre_mtu = GREMTU;
+	GRE2IFP(sc)->if_mtu = GREMTU;
 	GRE2IFP(sc)->if_flags = IFF_POINTOPOINT|IFF_MULTICAST;
 	GRE2IFP(sc)->if_output = gre_output;
 	GRE2IFP(sc)->if_ioctl = gre_ioctl;
@@ -231,7 +231,8 @@ gre_ioctl(struct ifnet *ifp, u_long cmd,
 		 /* XXX: */
 		if (ifr->ifr_mtu < 576)
 			return (EINVAL);
-		break;
+		ifp->if_mtu = ifr->ifr_mtu;
+		return (0);
 	case SIOCSIFADDR:
 		ifp->if_flags |= IFF_UP;
 	case SIOCSIFFLAGS:
@@ -255,12 +256,6 @@ gre_ioctl(struct ifnet *ifp, u_long cmd,
 	}
 	error = 0;
 	switch (cmd) {
-	case SIOCSIFMTU:
-		GRE_WLOCK(sc);
-		sc->gre_mtu = ifr->ifr_mtu;
-		gre_updatehdr(sc);
-		GRE_WUNLOCK(sc);
-		goto end;
 	case SIOCSIFPHYADDR:
 #ifdef INET6
 	case SIOCSIFPHYADDR_IN6:
@@ -549,7 +544,6 @@ gre_updatehdr(struct gre_softc *sc)
 	} else
 		sc->gre_oseq = 0;
 	gh->gre_flags = htons(flags);
-	GRE2IFP(sc)->if_mtu = sc->gre_mtu - sc->gre_hlen;
 }
 
 static void

Modified: stable/11/sys/net/if_gre.h
==============================================================================
--- stable/11/sys/net/if_gre.h	Tue Apr 25 10:29:08 2017	(r317402)
+++ stable/11/sys/net/if_gre.h	Tue Apr 25 11:19:22 2017	(r317403)
@@ -69,7 +69,6 @@ struct gre_softc {
 	uint32_t		gre_oseq;
 	uint32_t		gre_key;
 	uint32_t		gre_options;
-	uint32_t		gre_mtu;
 	u_int			gre_fibnum;
 	u_int			gre_hlen;	/* header size */
 	union {

Modified: stable/11/sys/net/if_me.c
==============================================================================
--- stable/11/sys/net/if_me.c	Tue Apr 25 10:29:08 2017	(r317402)
+++ stable/11/sys/net/if_me.c	Tue Apr 25 11:19:22 2017	(r317403)
@@ -66,7 +66,7 @@ __FBSDID("$FreeBSD$");
 #include <machine/in_cksum.h>
 #include <security/mac/mac_framework.h>
 
-#define	MEMTU			1500
+#define	MEMTU			(1500 - sizeof(struct mobhdr))
 static const char mename[] = "me";
 static MALLOC_DEFINE(M_IFME, mename, "Minimal Encapsulation for IP");
 static VNET_DEFINE(struct mtx, me_mtx);
@@ -186,7 +186,7 @@ me_clone_create(struct if_clone *ifc, in
 	ME2IFP(sc)->if_softc = sc;
 	if_initname(ME2IFP(sc), mename, unit);
 
-	ME2IFP(sc)->if_mtu = MEMTU - sizeof(struct mobhdr);
+	ME2IFP(sc)->if_mtu = MEMTU;;
 	ME2IFP(sc)->if_flags = IFF_POINTOPOINT|IFF_MULTICAST;
 	ME2IFP(sc)->if_output = me_output;
 	ME2IFP(sc)->if_ioctl = me_ioctl;
@@ -236,7 +236,7 @@ me_ioctl(struct ifnet *ifp, u_long cmd, 
 	case SIOCSIFMTU:
 		if (ifr->ifr_mtu < 576)
 			return (EINVAL);
-		ifp->if_mtu = ifr->ifr_mtu - sizeof(struct mobhdr);
+		ifp->if_mtu = ifr->ifr_mtu;
 		return (0);
 	case SIOCSIFADDR:
 		ifp->if_flags |= IFF_UP;



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201704251119.v3PBJMeZ037353>