1

ネットワークケーブルまたは物理リンク(キャリア信号)がダウンした回数と、リンク内のパケット損失の量を検出するイベントベースのc /c++プログラムを作成しようとしています。パケット損失については、毎秒チェックすることをお勧めします。理想的には、擬似コードは次のようになります。

 //C program for checking how many times physical link went down  
    if(event==physical_link_down)
    {
    link_down++;
    }

//separate C program for packet loss
    while(true)
    {
    check_packet_loss;
    sleep(1);
    }

私が正しければ、ifconfigを実行することで次の情報を取得できます。ここで、「RUNNING」という単語はアクティブな物理リンクがあることを意味し、パケット損失はドロップ/エラーフィールドから計算できます。

私はUbuntuOSを使用しています。

必要な情報を取得するために、Cプログラムを介してifconfigでgrepを実行することを考えています。私のアプローチは正しいですか?次に、Cプログラムの実行方法がわからないので、Cプログラムをgrepするにはどうすればよいですか?同様の質問がありましたが、ほとんどの場合、それらの質問はWindows環境で行われました。どんな助けでもありがたいです!:)

4

2 に答える 2

3

getifaddrsを介してリンク ステータスを取得できます。これは Linux の C API で、コマンド ラインから ifconfig を呼び出すのとほぼ同じです。

于 2012-05-29T07:24:19.387 に答える
0

私が getifaddrs を知っている限り、RX または TX バイト、パケット損失などを知ることはできますが、物理リンクのステータスを知ることはできません。

リンクがアップかダウンかを知るために使用されるインターフェイスは、ETHTOOL または MII (ethtool および mii-tool ユーザーランド アプリケーションで実装されます) であり、これらのインターフェイスの 1 つをネットワーク ドライバーに実装する必要があります。

このタスクについて私が知っている最良のコードは、リンクがアップしているかどうかを判断する debian-installer の一部です。ethtool で試してみて、ダメなら mii-tool で。ここでコードを見つけることができます。

于 2012-05-29T10:05:17.953 に答える