diff --git a/src/libsystemd/sd-netlink/netlink-types.c b/src/libsystemd/sd-netlink/netlink-types.c index 0a6bd330025..7fd3efbd357 100644 --- a/src/libsystemd/sd-netlink/netlink-types.c +++ b/src/libsystemd/sd-netlink/netlink-types.c @@ -560,6 +560,8 @@ static const NLType rtnl_link_types[] = { /* [IFLA_PHYS_PORT_ID] = { .type = NETLINK_TYPE_BINARY, .len = MAX_PHYS_PORT_ID_LEN }, */ + [IFLA_MIN_MTU] = { .type = NETLINK_TYPE_U32 }, + [IFLA_MAX_MTU] = { .type = NETLINK_TYPE_U32 }, }; static const NLTypeSystem rtnl_link_type_system = { diff --git a/src/network/networkctl.c b/src/network/networkctl.c index d29eb7d0b20..ddc5c49e25e 100644 --- a/src/network/networkctl.c +++ b/src/network/networkctl.c @@ -101,9 +101,13 @@ typedef struct LinkInfo { unsigned short iftype; struct ether_addr mac_address; uint32_t mtu; + uint32_t min_mtu; + uint32_t max_mtu; bool has_mac_address:1; bool has_mtu:1; + bool has_min_mtu:1; + bool has_max_mtu:1; } LinkInfo; static int link_info_compare(const LinkInfo *a, const LinkInfo *b) { @@ -154,9 +158,17 @@ static int decode_link(sd_netlink_message *m, LinkInfo *info, char **patterns) { memcmp(&info->mac_address, ÐER_ADDR_NULL, sizeof(struct ether_addr)) != 0; info->has_mtu = - sd_netlink_message_read_u32(m, IFLA_MTU, &info->mtu) && + sd_netlink_message_read_u32(m, IFLA_MTU, &info->mtu) >= 0 && info->mtu > 0; + info->has_min_mtu = + sd_netlink_message_read_u32(m, IFLA_MIN_MTU, &info->min_mtu) >= 0 && + info->min_mtu > 0; + + info->has_max_mtu = + sd_netlink_message_read_u32(m, IFLA_MAX_MTU, &info->max_mtu) >= 0 && + info->min_mtu > 0; + return 1; } @@ -779,6 +791,10 @@ static int link_status_one( if (info->has_mtu) printf(" MTU: %" PRIu32 "\n", info->mtu); + if (info->has_min_mtu) + printf(" Minimum MTU: %" PRIu32 "\n", info->min_mtu); + if (info->has_max_mtu) + printf(" Maximum MTU: %" PRIu32 "\n", info->max_mtu); (void) dump_addresses(rtnl, " Address: ", info->ifindex); (void) dump_gateways(rtnl, hwdb, " Gateway: ", info->ifindex);