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;