物理的に接続されていない場合でも、起動時に eth1 が fe80 IPv6 アドレスをすぐに取得するようにするにはどうすればよいですか?

物理的に接続されていない場合でも、起動時に eth1 が fe80 IPv6 アドレスをすぐに取得するようにするにはどうすればよいですか?

私は Debian (Linux 3.8.13) を実行する組み込み x86 Linux デバイスに取り組んでいます。このデバイスには eth0 と eth1 の 2 つのイーサネット ポートがあります。

スイッチに eth0 のみを接続した状態でこのデバイスを起動し、ssh で接続して「ifconfig」を実行すると、次のようになります。

root@msli-DCP-11234772:~# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:1c:ab:00:0a:60
          inet6 addr: fe80::21c:abff:fe00:a60/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:5659 errors:0 dropped:4102 overruns:0 frame:0
          TX packets:1071 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:1313254 (1.2 MiB)  TX bytes:224889 (219.6 KiB)
          Interrupt:16 Memory:fc500000-fc520000

eth1      Link encap:Ethernet  HWaddr 00:1c:ab:00:0a:61
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
          Interrupt:17 Memory:fc520000-fc540000

eth0 には「inet6 addr」が割り当てられていますが、eth1 には割り当てられていないことに注意してください。

eth1 をネットワーク スイッチに接続すると、その時点で ifconfig の出力に「inet6 addr」行が表示されます (eth1 からイーサネット ケーブルを再度取り外しても、この行は表示されたままになります)。

したがって、Linux は、イーサネット デバイスが実際に何かに初めて接続されるまで、イーサネット デバイスを IPv6 アドレスに関連付ける処理を行わないようです。

それはある程度は機能しますが、常に両方のポートから IPv6 マルチキャスト パケットを送信することになっているプログラムがいくつかあり、IPv6 アドレスが割り当てられていないポートではそれを実行できません。

そこで私がやりたいのは、イーサネット ポートが実際に接続されるまで待つのではなく、起動時に Linux にデバイスの自己割り当て IPv6 アドレス (つまり fe80::blah、blah はイーサネット チップの MAC アドレスから派生) を関連付けさせる方法を見つけることです。それを実現する方法はありますか?

(利点は、私のプログラムが起動時にネットワーク デバイスのリストをスキャンして使用できることです。現在、ネットワーク構成の変更を通知するには AF_NETLINK ソケットを設定する必要がありますが、これはある程度機能しますが、私が望むよりも複雑で、反応も少し遅いです)

答え1

ifconfigここでは十分な情報が表示されません。一般的な鍵は、リンク稼働中です。 にはiproute2ip addr該当する場合はアドレスの有効期間と下位レベルのステータスが表示されます。

リンクローカル アドレスは、リンク自体が稼働している場合にのみ表示されます。リンクがなければアドレスは表示されません。また、結合セット内のサブインターフェイス (グループ/チーム/マスターなど、使用する単語の選択によって異なります) など、表示されないケースも多数あります。

ケーブルが取り外された後にリンク ローカル アドレスが削除されないという、あなたが観察した動作は誤りだと思います。他に何も使用されていないときに削除され、有効期間カウンターが期限切れになるはずであり、新しいカーネルでは修正されていると思われます (現時点ではテストする立場にありません)。

それ以外に、アドレスを作成するのがカーネルかユーザー空間かは気にしますかfe80::? 問題でない場合は、ユーザー空間から作成でき、カーネルはそれを削除しません。

答え2

でインターフェースはどのように設定されていますか/etc/network/interfaces? に設定されていると想定しておりallow-hotplug、リンクが検出されるとインターフェースが有効になります。 に設定を次のように変更してみてくださいauto:

auto eth0
iface eth0 ....
    ....

auto eth1
iface eth1 ....
    ....

関連情報