从 bash-script 获取特定设备允许的 MTU 范围

Obtaining allowed MTU range for specific device from bash-script

如何从 bash 脚本(不是直接通过 API)获得 Linux 中某些网络设备支持的 MTU 范围?
我试着玩 ifconfigip link 但找不到解决方案。

package iproute2(自 v4.19 起)解析 min/max mtu 详细信息并在用户提供“--details”选项时将其打印到控制台

ip --details link
ip --details link --name=eth0
ip --details addr
ip --details addr show dev eth0

脚本示例

#!/bin/bash

for nic in eth0 eth1 eth2; do
    min_mtu=`ip --details link show $nic | grep 'minmtu'| sed -r 's/^(.*minmtu) ([0-9]+) (.*)$//'`
    max_mtu=`ip --details link show $nic | grep 'maxmtu'| sed -r 's/^(.*maxmtu) ([0-9]+) (.*)$//'`
    echo "$nic - min: $min_mtu, max: $max_mtu"
done

输出:

eth0 - min: 60, max: 9000
eth1 - min: 68, max: 1770
eth2 - min: 68, max: 1770

Debian 10 已经有足够新的 iproute2 包 (v4.20) 版本来显示 min/max mtu。 Ubuntu 18.04.3 有一个内核,它已经向用户空间提供了这些信息,但是 iproute2 包不够新(v4.15),无法解析内核的数据(并将它们显示给用户)。

你可以自己构建新的 iproute2 工具,以防你有过时的包。

git clone git://git.kernel.org/pub/scm/network/iproute2/iproute2.git
cd iproute2 && ./configure && make && ./ip/ip --details link