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;
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to