Index: dhclient/dhclient.c =================================================================== --- dhclient/dhclient.c +++ dhclient/dhclient.c @@ -828,11 +828,21 @@ opt = &ip->client->new->options[DHO_INTERFACE_MTU]; if (opt->len == sizeof(u_int16_t)) { - u_int16_t mtu = be16dec(opt->data); - if (mtu < MIN_MTU) - warning("mtu size %u < %d: ignored", (unsigned)mtu, MIN_MTU); + u_int16_t mtu = 0; + if (ip->client->config->default_actions[DHO_INTERFACE_MTU] == + ACTION_SUPERSEDE) + mtu = getUShort(ip->client->config->defaults[DHO_INTERFACE_MTU].data); else + mtu = be16dec(opt->data); + + if (mtu < MIN_MTU) { + /* Treat 0 like a user intentionally doesn't want to change MTU and, + * therefore, warning is not needed */ + if (mtu != 0) + warning("mtu size %u < %d: ignored", (unsigned)mtu, MIN_MTU); + } else { interface_set_mtu_unpriv(privfd, mtu); + } } /* Write out the new lease. */ Index: dhclient/dhclient.conf.5 =================================================================== --- dhclient/dhclient.conf.5 +++ dhclient/dhclient.conf.5 @@ -38,7 +38,7 @@ .\" .\" $FreeBSD$ .\" -.Dd January 1, 1997 +.Dd May 18, 2018 .Dt DHCLIENT.CONF 5 .Os .Sh NAME @@ -227,6 +227,13 @@ in the .Ic supersede statement. +.Pp +Some options values have special meaning: +.Bl -tag -width indent +.It Ar interface-mtu +Value 0 means that interface MTU should not be changed, +even if it was supplied by the server. +.El .It Xo .Ic prepend No { Op Ar option declaration .Oo , Ar ... option declaration Oc }