From: Yu Watanabe Date: Wed, 22 Nov 2023 20:36:43 +0000 (+0900) Subject: network: the maximum MTU size for CAN interface may be changed later X-Git-Tag: v256-rc1~1515^2~2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=15be80428204b57ca55272d2b45703047ad6f28d;p=thirdparty%2Fsystemd.git network: the maximum MTU size for CAN interface may be changed later So we should not reduce the requested size to the current maximum before applying CAN FD mode. --- diff --git a/src/network/networkd-setlink.c b/src/network/networkd-setlink.c index 854699833d0..38f90969ec4 100644 --- a/src/network/networkd-setlink.c +++ b/src/network/networkd-setlink.c @@ -866,7 +866,7 @@ int link_request_to_set_master(Link *link) { int link_request_to_set_mtu(Link *link, uint32_t mtu) { const char *origin; - uint32_t min_mtu; + uint32_t min_mtu, max_mtu; Request *req; int r; @@ -894,10 +894,19 @@ int link_request_to_set_mtu(Link *link, uint32_t mtu) { mtu = min_mtu; } - if (mtu > link->max_mtu) { + max_mtu = link->max_mtu; + if (link->iftype == ARPHRD_CAN) + /* The maximum MTU may be changed when FD mode is changed. + * See https://docs.kernel.org/networking/can.html#can-fd-flexible-data-rate-driver-support + * MTU = 16 (CAN_MTU) => Classical CAN device + * MTU = 72 (CANFD_MTU) => CAN FD capable device + * So, even if the current maximum is 16, we should not reduce the requested value now. */ + max_mtu = MAX(max_mtu, 72u); + + if (mtu > max_mtu) { log_link_warning(link, "Reducing the requested MTU %"PRIu32" to the interface's maximum MTU %"PRIu32".", - mtu, link->max_mtu); - mtu = link->max_mtu; + mtu, max_mtu); + mtu = max_mtu; } if (link->mtu == mtu)