Linuxのイーサネットポートのioctl()呼び出しで使用するファイル記述子を取得する必要があります。これを行う方法がわかりません。
2 に答える
ifreq
に渡された構造体のデバイスの名前を使用して、開いているソケットのファイル記述子を使用するだけですioctl()
。ただし、プログラムに適切な権限があると仮定します。
ドキュメントから:
Linux は、ネットワーク デバイスを構成するためのいくつかの標準 ioctl をサポートしています。これらは、ファミリーやタイプに関係なく、任意のソケットのファイル記述子で使用できます。ifreq 構造を渡します。
ソケットは、ターゲット デバイスにバインドされている必要も、特定のファミリのものである必要もありません。開いているソケット fd はすべて (適切な特権で) 行います。特定のタスク用に 1 つを開き、ioctl()
戻るのを待ってから閉じます。
詳細については を参照してください。適切なドキュメント パッケージがインストールされていない場合はman 7 netdevice
、こちらを参照してください (ヒント、パッケージの名前は通常、ディストリビューションによってはmanpages-dev
またはです)。manpages-devel
net-tools
また、ディストリビューションによって名前が異なる場合があるパッケージのソースを確認することもできます。ifconfig
それが(Debian / Ubuntu here)のソースです。
元のあいまいさで申し訳ありませんが、特別な多機能デバイスを構成しようとしていると思いました (理由がわからない、おそらく睡眠不足)。
このようなことができますfd = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP)
ifconfigstrace
が呼び出す関数を確認 するために使用します。