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

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

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

スイッチに接続されている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::生成したかどうかに興味がありますか?重要でない場合は、ユーザースペースで作成でき、カーネルはそれを削除しません。

おすすめ記事