2012-03-13 5 views
1

私は、Red Had Enterprise Linuxを実行しているリアルタイムシステム上でコードを維持しています。私は時々、最優先事項で動作するにもかかわらず、ネットワークがコンピュータを遅くすることを管理し、私は自分のCPUの能力を最大限に発揮できるようにカードを無効にしたいと思う。ネットワークの機能の冒頭にいくつかのファイルが必要ですが、ある時点後にはプログラムが完了するまで効果的にネットワークを無効にすることができます。何らかのAPI呼び出しによってネットワークを無効にする方法はありますか?Linux用のネットワークを無効にするAPI呼び出しはありますか?

答えて

3

うまくいけば誰かがこれを拡張することができますが、ifconfigがネットワークデバイスを無効にする方法を調べることは価値があるかもしれません。おそらくインターフェイスでioctlを使って無効にすることができます。ドライバ/ NICに応じて、カーネルはネットワークハードウェアにCPUの代わりにパケットをドロップさせることができます。

ifconfigコマンドのソースコードはここにある:また、ifconfigコマンドは、ここで記述されているのと同じことを行うことが可能である

http://net-tools.git.sourceforge.net/git/gitweb.cgi?p=net-tools/net-tools;a=blob;f=ifconfig.c;h=be6999578bd81e91e90e26a35fad91f4928f4226;hb=HEAD

IPROUTE2、:

http://git.kernel.org/?p=linux/kernel/git/shemminger/iproute2.git;a=blob;f=ip/iplink.c;h=6b051b65faab72ea46534ad33f71b3f6cd35c11b;hb=HEAD#l589

私が見つかりました。 iproute2のソースコードはifconfigよりも少しわかりやすいですが、インタフェースを無効にするためにネットワーキングスタックとどのようにインタフェースするかは比較的簡単に分かります。

+1

'ifconfig'は時代遅れですか?今日はすべてiproute2です... –

+0

@KerrekSB:私はほとんどの時間RHEL5に住む傾向があります。 ifconfigが時代遅れになっている可能性は確かです。私は彼らがカーネルとやりとりするために使用した方法もまた時代遅れになっても驚くだろう。 –

+1

@sharth:SIOCSIFFLAGS ioctlとfriendsは廃止されました。主な機能が欠けているのは、インターフェイスエイリアスのようなハックのないインターフェイスサポートごとに複数のIPがないことです。また、rtnetlink( "netlink route")インタフェースには他にもたくさんのオプションがあります。どうして ?それは拡張性があるからです。 – BatchyX

0

ネットワークは、ユーザースペースプロセスではなく、カーネルの一部です。 rmmodを呼び出して、モジュールサポートが有効になっていると仮定して、カーネルからネットワークドライバモジュールを削除することができます。または、すべてのネットフィルタのルールをDROPに設定して、それが高速化するかどうかを確認できます。 C++でコーディングするのではなく、ランチャースクリプト(既製のiptables-save/iptables-restoreを使って)を実行する方がいいでしょう。または、インターフェイスをダウンさせるだけでも可能です。

+2

可能性が高い事を遅くなります。インタフェースを下げる方がいいでしょう(ネットワーキングが問題を引き起こしていると仮定して)。 – BatchyX

1

システムのやり方は、ip link set dev ${DEVICE} down 2> nullを発行することです。 ip.cのコードを見てください。 hereあなたはそれがどのように行われたかを自分で調べることができます。キーはnet_if_set_down()を呼び出してネットワークをシャットダウンするnetif.hです。私はフラグを設定すると思う。

netif->flags &= ~NETIF_FLAG_UP 

あなたは自分でここから上に行くが、カーネルの一部であり、心のnetif.hに保つことができます...

-1

あなたは「API」を言ったが、あなたのプログラムの言語については言及しませんでした/スクリプト、またはあなたのOS。 Linuxの

はbashの/ Bourneシェルスクリプトから、CentOSの、RHEL、SuSEの、とFedoraのようなバリアント:DROPにすべてnetfiltersルールを設定

/sbin/service network stop 
rc=$? 
if [ "$rc" -ne 0 ]; then 
    echo "***** Failed to stop networking service" 
    exit $rc 
fi 
# Do your thing 
/sbin/service network start 
関連する問題