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 に設定されていることです。他のすべてのインターフェイスに影響を与えないようにして、1 つのインターフェイスのみに限定して実行したいと考えています。どうすればいいですか?

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

4

2 に答える 2

2

特定のインターフェイスの MTU を更新する場合はifr_name、フィールドをstruct ifreqインターフェイスの名前に設定する必要があります。

編集: 問題はインターフェイスの名前にあります。インターフェイス名の列の後の数字は単なるエイリアスです。実際には、いくつかの異なるインターフェースはありません。同じインターフェースです。そのため、 「bond:xx」という名前のすべてのインターフェイスに設定が適用されます。

于 2011-06-09T10:42:02.553 に答える
0

これはうまくいくかもしれません。最初に Alias インターフェイスを取得し、MTU を設定します。

ioctl(s, SIOCGIFALIAS, (caddr_t)&ifr)
于 2012-12-12T12:02:33.493 に答える