diff options
author | Kristof Provost <kp@FreeBSD.org> | 2022-06-25 11:39:44 +0000 |
---|---|---|
committer | Kristof Provost <kp@FreeBSD.org> | 2022-06-27 06:27:27 +0000 |
commit | 1865ebfb12ddaf3d0ff1458e6152b3cb1f1bdee8 (patch) | |
tree | a92e81388bb183fb1d0c786fa77832774f36c36c | |
parent | 9971e6aff1bef3d456172c41a3df3ce7266517cf (diff) | |
download | src-1865ebfb12ddaf3d0ff1458e6152b3cb1f1bdee8.tar.gz src-1865ebfb12ddaf3d0ff1458e6152b3cb1f1bdee8.zip |
if_bridge: change MTU for new members
Rather than reject new bridge members because they have the wrong MTU
change it to match the bridge. If that fails, reject the new interface.
PR: 264883
Different Revision: https://reviews.freebsd.org/D35597
-rw-r--r-- | sys/net/if_bridge.c | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/sys/net/if_bridge.c b/sys/net/if_bridge.c index dd65188bcc4a..39085fa440e8 100644 --- a/sys/net/if_bridge.c +++ b/sys/net/if_bridge.c @@ -1266,9 +1266,21 @@ bridge_ioctl_add(struct bridge_softc *sc, void *arg) if (CK_LIST_EMPTY(&sc->sc_iflist)) sc->sc_ifp->if_mtu = ifs->if_mtu; else if (sc->sc_ifp->if_mtu != ifs->if_mtu) { - if_printf(sc->sc_ifp, "invalid MTU: %u(%s) != %u\n", - ifs->if_mtu, ifs->if_xname, sc->sc_ifp->if_mtu); - return (EINVAL); + struct ifreq ifr; + + snprintf(ifr.ifr_name, sizeof(ifr.ifr_name), "%s", + ifs->if_xname); + ifr.ifr_mtu = sc->sc_ifp->if_mtu; + + error = (*ifs->if_ioctl)(ifs, + SIOCSIFMTU, (caddr_t)&ifr); + if (error != 0) { + log(LOG_NOTICE, "%s: invalid MTU: %u for" + " new member %s\n", sc->sc_ifp->if_xname, + ifr.ifr_mtu, + ifs->if_xname); + return (EINVAL); + } } bif = malloc(sizeof(*bif), M_DEVBUF, M_NOWAIT|M_ZERO); |