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;
