イーサネットケーブルを接続すると、Linux内部で正確に何が起こりますか?

イーサネットケーブルを接続すると、Linux内部で正確に何が起こりますか?

ケーブルがイーサネットポートに接続されている場合(動的IPアドレス指定の前提)、正確に何が起こるのかを知りたいです。

  1. どのサービスが実行されており、どのように起動するのですか?
  2. 接続を確立するにはどのAPIを呼び出す必要がありますか?

ボーナスの質問:ケーブルを接続するときに信号を正確に検出する方法は何ですか(この質問はこのSEサイトに完全に適していない可能性があることを知っています)。

答え1

私は「追加の質問」にのみ答えることができます。 「ケーブル接続時に信号を検出する方法」。したがって、10 * / Base-Tを想定すると、デバイスはキャリア信号を検出し、その情報をデバイスドライバに提供します。デバイスドライバは通常、カーネルロガーを介して「ETHX:LINK DETECTED」メッセージを送信します。この情報は/ sys階層(比較的新しいLinuxバージョン)でも利用できます。バラよりhttps://stackoverflow.com/a/808599/3849157

デバイスの状態が変わったら、アクションをトリガーするようにudevルールを設定できると思います。しかし、ここでもそうかはわかりません。

dhclient / pumpプロセスが実行されていてそのタスクを実行すると、プロセスはDHCPアドレスを要求し、DHCPサーバーからアドレスを取得すると通常、オペレーティングシステムネットワークを実際に構成する1つ以上のヘルパースクリプトを呼び出します。ただし、これはこれを行う特定のプログラムによって異なります。

答え2

カーネルにはポートを持つすべてのバス(PCI、USB、PCMCIA - 実際には後者がより複雑で使用されなくなったため、PCMCIAは忘れてください)のドライバがあります。ドライバはこのバスのレジスタ(CPUレジスタとは異なり)をメモリにマッピングし、それを監視します。

ケーブルが接続されると、イーサネットハードウェアはレジスタを変更してバスに通知します。バスIDを適切なドライバにマッピングするバスメッセージudev(これはカーネルでも発生する可能性があり、設定方法によって異なります)。 Udevはdbusを介してPumpやNetworkManagerなどのユーザーゾーンプロセスを起動する可能性がありますが、これは「設定方法に応じて」ゾーンに入ります。

通常、udevはポート「eth1」などのシンボル名と使用するドライバなどのマッピングを設定し、その情報を残りのユーザースペース(場合によってはカーネル)が使用できるようにします。 。これは、USBスティックが自動的にマウントされる方法と同様に、バスのデバイス変更についてカーネルのバスソフトウェアを受け取ります。バスはユーザー空間と通信するudevと通信します。

簡単に言うと:イーサネットポートのハードウェアは、バス(PCIまたはUSBなど)と通信し、残りのユーザースペースと通信するudevと通信します。

関連情報