
ケーブルがイーサネットポートに接続されている場合(動的IPアドレス指定の前提)、正確に何が起こるのかを知りたいです。
- どのサービスが実行されており、どのように起動するのですか?
- 接続を確立するにはどの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と通信します。