カーネルの conntrack エントリを削除する必要があります。nf_ct_delete
やなど、たくさんの機能がありnf_ct_put
ます。現時点では、skb->nfct
(追跡されたすべてのskbのブロック)で両方を使用しています。最初は問題なく動作しているように見えますが、数秒後にカーネルがクラッシュします。
私の現在のコードは次のとおりです。
struct nf_conntrack *con = skb->nfct;
nf_conntrack_get(sub_conntrack);
//... do some stuff
nf_ct_delete((struct nf_conn *) con, 0, 0);
nf_ct_put((struct nf_conn *) con);
delete ステートメントと put ステートメントを実行した直後に、エントリをチェックするconntrack -L conntrack
と (予想どおり) エントリが消えています。しかし、1 分ほどすると、システムがフリーズします。conntrack は、起動時にクラッシュするいくつかのタイマーを開始すると思います。
私の質問は次のとおりです。特定の接続のすべてをすぐに削除するにはどうすればよいですか? タイマーの停止とすべての状態のクリーンアップを含みます。