Index: if_bridge.c
===================================================================
RCS file: /cvsroot/src/sys/net/if_bridge.c,v
retrieving revision 1.46
diff -u -p -r1.46 if_bridge.c
--- if_bridge.c 23 Nov 2006 04:07:07 -0000      1.46
+++ if_bridge.c 11 Jan 2008 09:50:47 -0000
@@ -459,6 +459,7 @@ bridge_ioctl(struct ifnet *ifp, u_long c
               struct ifbrparam ifbrparam;
       } args;
       struct ifdrv *ifd = (struct ifdrv *) data;
+       struct ifreq *ifr = (struct ifreq *) data;
       const struct bridge_control *bc;
       int s, error = 0;

@@ -529,6 +530,15 @@ bridge_ioctl(struct ifnet *ifp, u_long c
               }
               break;

+       case SIOCSIFMTU:
+               if (ifr->ifr_mtu > ETHERMTU_JUMBO ||
+                   ifr->ifr_mtu < ETHERMIN ||
+                   !LIST_EMPTY(&sc->sc_iflist))
+                       error = EINVAL;
+               else
+                       ifp->if_mtu = ifr->ifr_mtu;
+               break;
+
       default:
               error = ENOTTY;
               break;
Index: if_ethersubr.c
===================================================================
RCS file: /cvsroot/src/sys/net/if_ethersubr.c,v
retrieving revision 1.139.2.2
diff -u -p -r1.139.2.2 if_ethersubr.c
--- if_ethersubr.c      27 Feb 2007 23:16:42 -0000      1.139.2.2
+++ if_ethersubr.c      11 Jan 2008 09:50:47 -0000
@@ -1504,6 +1504,12 @@ ether_ioctl(struct ifnet *ifp, u_long cm
       case SIOCSIFMTU:
           {
               int maxmtu;
+               struct bridge_softc *bridge_sc =
+                       (struct bridge_softc *)ifp->if_bridge;
+
+               if (bridge_sc != NULL &&
+                   ifr->ifr_mtu != bridge_sc->sc_if.if_mtu)
+                       return EINVAL;

               if (ec->ec_capabilities & ETHERCAP_JUMBO_MTU)
                       maxmtu = ETHERMTU_JUMBO;