为具有多个接口的设备设置 MTU

发布于 2024-11-14 12:22:57 字数 955 浏览 3 评论 0原文

我正在使用

ioctl(s, SIOCSIFMTU, (caddr_t)&ifr)

更改接口的 MTU。

代码与此类似

struct ifreq ifr; 
ifr.ifr_addr.sa_family = AF_INET;
//iap->ifa_name is bond1:xx
strncpy(ifr.ifr_name, iap->ifa_name, sizeof(ifr.ifr_name));
ifr.ifr_mtu = 1492; 
ioctl(s, SIOCSIFMTU, (caddr_t)&ifr)

我的问题是设备有多个接口并且MTU设置为1492 对于所有这些。我只想专门针对一个界面执行此操作,而不影响所有其他界面。我该怎么做呢?

bond1:43 链接 encap:以太网 HWaddr 00:0E:0C:E4:C5:45
inet 地址:10.7.181.59 广播:10.7.181.255 掩码:255.255.255.0 上行广播运行主组播 MTU:1492 指标:1

bond1:48 链接 encap:以太网 HWaddr 00:0E:0C:E4:C5:45
inet 地址:10.7.181.60 广播:10.7.181.255 掩码:255.255.255.0 上行广播运行主组播 MTU:1492 指标:1

bond1:49 链接 encap:以太网 HWaddr 00:0E:0C:E4:C5:45
inet 地址:10.7.181.61 广播:10.7.181.255 掩码:255.255.255.0 上行广播运行主组播 MTU:1492 指标:1

I am using

ioctl(s, SIOCSIFMTU, (caddr_t)&ifr)

to change the MTU for an interface.

code is similar to this

struct ifreq ifr; 
ifr.ifr_addr.sa_family = AF_INET;
//iap->ifa_name is bond1:xx
strncpy(ifr.ifr_name, iap->ifa_name, sizeof(ifr.ifr_name));
ifr.ifr_mtu = 1492; 
ioctl(s, SIOCSIFMTU, (caddr_t)&ifr)

My problem is that the device has multiple interfaces and that the MTU is set to 1492
for all of these. I want to do it specifically for only one interface, leaving all the others not impacted. How can I do it?

bond1:43 Link encap:Ethernet HWaddr 00:0E:0C:E4:C5:45
inet addr:10.7.181.59 Bcast:10.7.181.255 Mask:255.255.255.0
UP BROADCAST RUNNING MASTER MULTICAST MTU:1492 Metric:1

bond1:48 Link encap:Ethernet HWaddr 00:0E:0C:E4:C5:45
inet addr:10.7.181.60 Bcast:10.7.181.255 Mask:255.255.255.0
UP BROADCAST RUNNING MASTER MULTICAST MTU:1492 Metric:1

bond1:49 Link encap:Ethernet HWaddr 00:0E:0C:E4:C5:45
inet addr:10.7.181.61 Bcast:10.7.181.255 Mask:255.255.255.0
UP BROADCAST RUNNING MASTER MULTICAST MTU:1492 Metric:1

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

噩梦成真你也成魔 2024-11-21 12:22:57

如果您想更新特定接口的 MTU,您应将 struct ifreqifr_name 字段设置为接口的名称

编辑:您的问题是以接口的名称。接口名称中列后面的数字只是一个别名。实际上,您没有多个不同的接口,而是相同的接口。这就是为什么您的设置会应用于名称为“bond:xx”的所有接口。

If you want to update MTU for the specific interface you shallset ifr_name field of the struct ifreq to the name of the interface

EDIT: You problem is in the name of the interface. The number after the column in the interface name is just an alias. Actually, you don't have several different interfaces it's the same interface. That is why you setting is applied onto all interfaces with name "bond:xx"

最笨的告白 2024-11-21 12:22:57

这可能有效。首先获取 Alias 接口并设置 MTU 。

ioctl(s, SIOCGIFALIAS, (caddr_t)&ifr)

This may work . Get the Alias interface first and the set the MTU .

ioctl(s, SIOCGIFALIAS, (caddr_t)&ifr)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文