c - 有没有办法在 Linux 中使用 C 以编程方式设置接口(interface) MTU?

标签 c linux networking network-programming mtu

目前,我的程序正在对 ifconfig 进行 system() 调用来执行此操作。

看起来有点困惑 - 也许ifconfig不在路径上,或者在某个非标准位置。然后我需要检查 iproute2 等效项,以防失败。

有没有办法使用 C 以编程方式设置它?

最佳答案

您可以在 ioctl 调用中设置 SIOCSIFMTU 字段,如下所示:

struct ifreq ifr; 
ifr.ifr_addr.sa_family = AF_INET;//address family
strncpy(ifr.ifr_name, "eth0", sizeof(ifr.ifr_name));//interface name where you want to set the MTU
ifr.ifr_mtu = 9100; //your MTU size here
if (ioctl(sockfd, SIOCSIFMTU, (caddr_t)&ifr) < 0)
  //failed to set MTU. handle error.

上面的代码将使用 ifreq 结构中的 ifr_mtu 字段设置设备的 MTU(如 ifr.name 中)。

引用:http://linux.die.net/man/7/netdevice

关于c - 有没有办法在 Linux 中使用 C 以编程方式设置接口(interface) MTU?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25026228/

相关文章:

c - c 中这两种转换格式 (void **) &a 和 (void *)a 的区别

c - 在 Nintendo DS 上编程

linux - SVN blame - 网络连接意外关闭

python - 如何控制Scapy发送数据包的速度?

c++ - 如何使用 QUdpSocket 连接服务器和路由器后面的客户端?

c - 两个共享库实现相同的 API

linux - Ubuntu新用户登录但username@不存在

c - 我添加了 MAX7320 i2c 输出芯片。如何让内核为其加载驱动程序?

字符数组在 UDP 客户端打印随机垃圾

python - C 和 Python 三元运算符之间的区别