web-dev-qa-db-ja.com

「/ etc / network / interfaces」に無効なネットマスクアドレスがある場合、ifupは何をしますか?

インターフェイスファイルは次のようになります。

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
    address 192.168.0.130
    netmask 250.255.255.0
    gateway 192.168.0.254

ご覧のとおり、ネットマスクアドレスは無効です。 (255ではなく250)問題は、次のコードを使用して現在のIPアドレスとネットマスクを取得する場合です。

ioctl(iSock, SIOCGIFADDR, &stIFReq);
ioctl(iSock, SIOCGIFNETMASK, &stIFReq);

常には両方のioctl関数で "72,0,67,"(hex:0x48004321)を返します。これはifup中のある種のエラーコードまたはバグなのだろうか。ネットマスク/ IPアドレスに対してifupがどのような種類のチェックを行い、アドレスが無効と判断された場合はどうなるのか知りたいのですが。

追加情報:

  1. Linuxバージョン2.6.35.3

  2. BusyBox v1.18.5

  3. [ifup]はスクリプトではなく、システム上のCプログラムです

3
Naze Kimi

BusyBoxを実行しています。ここで、ifup/ifdownはアプレットです。 ソースコード の関数count_netmask_bits()を見ると、BusyBoxはLSBで開始し、最初の1に遭遇すると停止します。したがって、不正な形式のネットマスクに気付くことはありません。

2
Robert Calhoun

システムを確認してください。ただし、ほとんどの場合、ifupはシェルスクリプトであるため、ソースでピークをとることで、その機能を確認できます。次のコマンドを使用して、スクリプトの場所を確認できます。

$ type -a ifup
ifup is /sbin/ifup

Feodra/Red Hat Distros

私のシステム(Fedora 14)では、/sbin/ifupにはこのシェルスクリプト関数のライブラリ/etc/sysconfig/network-scripts/network-functionsが含まれています。 「マスク」のためにこのファイルをgrepする場合:

$ grep -i mask /etc/sysconfig/network-scripts/network-functions
    if [ -z "${NETMASK}" ]; then
    eval $(/bin/ipcalc --netmask ${IPADDR})
    eval $(/bin/ipcalc --prefix ${IPADDR} ${NETMASK})
    eval $(/bin/ipcalc --broadcast ${IPADDR} ${NETMASK})
    eval $(/bin/ipcalc --network ${IPADDR} ${NETMASK})

ツールipcalcは、ネットワーク構成に関する「計算」を行うために使用される実行可能ファイルです。

コマンドラインからも実行できます。

$ /bin/ipcalc --netmask 192.168.1.1
NETMASK=255.255.255.0

$ /bin/ipcalc --prefix 192.168.1.1 255.255.255.0
PREFIX=24

Debian/Ubuntu

ipcalcツールはDebian/Ubuntuとは少し異なりますが、同様の機能を果たします。

$ ipcalc 192.168.1.1
Address:   192.168.1.1          11000000.10101000.00000001. 00000001
Netmask:   255.255.255.0 = 24   11111111.11111111.11111111. 00000000
Wildcard:  0.0.0.255            00000000.00000000.00000000. 11111111
=>
Network:   192.168.1.0/24       11000000.10101000.00000001. 00000000
HostMin:   192.168.1.1          11000000.10101000.00000001. 00000001
HostMax:   192.168.1.254        11000000.10101000.00000001. 11111110
Broadcast: 192.168.1.255        11000000.10101000.00000001. 11111111
Hosts/Net: 254                   Class C, Private Internet

あなたの構成

Fedora:

$ /bin/ipcalc --netmask 192.168.0.130
NETMASK=255.255.255.0

$ /bin/ipcalc --prefix 192.168.0.130 250.255.255.0
PREFIX=24

buntu:

$ ipcalc 192.168.0.130
Address:   192.168.0.130        11000000.10101000.00000000. 10000010
Netmask:   255.255.255.0 = 24   11111111.11111111.11111111. 00000000
Wildcard:  0.0.0.255            00000000.00000000.00000000. 11111111
=>
Network:   192.168.0.0/24       11000000.10101000.00000000. 00000000
HostMin:   192.168.0.1          11000000.10101000.00000000. 00000001
HostMax:   192.168.0.254        11000000.10101000.00000000. 11111110
Broadcast: 192.168.0.255        11000000.10101000.00000000. 11111111
Hosts/Net: 254                   Class C, Private Internet

したがって、最も可能性が高いのは、設定がスポット内の誤った値でセットアップされていることです。これをさらにデバッグするには、ipの出力を確認する必要があります。

$ ip addr show dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 00:19:d1:e8:4c:95 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.3/24 brd 192.168.1.255 scope global eth0
    inet6 fe80::219:d1ff:fee8:4c95/64 scope link 
       valid_lft forever preferred_lft forever
2
slm