【问题标题】:Obtaining allowed MTU range for specific device from bash-script从 bash-script 获取特定设备的允许 MTU 范围
【发布时间】:2019-12-03 10:37:29
【问题描述】:

如何从 bash-script 获取 Linux 中某些网络设备支持的 MTU 范围(不是直接通过 API)?
我尝试使用ifconfig 和ip link,但找不到解决方案。

【问题讨论】:

  • 这个问题好像没有好的答案 - unix.stackexchange.com/questions/552107/…
  • 有时编写一个小的 C 程序来完成这项工作会更容易,然后从 Bash 中调用它。
  • @jww,你的程序会做什么?我进行了快速检查,没有找到任何报告这种能力的 ioctl。我刚刚修补了 ping 工具以使用 IP_PMTUDISC_PROBE,但由于某种原因,它一直告诉我“消息太长,mtu=1500”,尽管我的昵称支持巨型帧。可能不可能退出 nic 驱动程序,否则 ethtool 肯定会报告这种能力。这是一个有趣的问题,很奇怪为什么不能这样做……man7.org/linux/man-pages/man7/ip.7.html
  • @Maxim - C 程序将直接调用 netlink API 并将结果写入标准输出。
  • @jww 那么我们可以从 Netlink API 获得这样的范围吗?您能否展示一些小的 C 代码 sn-p 或至少用于谷歌搜索的 netlink 选项/关键字?

标签: netlink linux bash network-programming linux-device-driver mtu


【解决方案1】:

包 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]+) (.*)$/\2/'`
    max_mtu=`ip --details link show $nic | grep 'maxmtu'| sed -r 's/^(.*maxmtu) ([0-9]+) (.*)$/\2/'`
    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

【讨论】:

    猜你喜欢
    • 2015-11-23
    • 1970-01-01
    • 1970-01-01
    • 2022-10-17
    • 1970-01-01
    • 2018-02-11
    • 1970-01-01
    • 2010-11-15
    • 1970-01-01
    相关资源
    最近更新 更多