0

この netfilter ヘッダーを参照してください : http://lxr.free-electrons.com/source/include/uapi/linux/netfilter.h

  9 /* Responses from hook functions. */
  10 #define NF_DROP 0
  11 #define NF_ACCEPT 1
  12 #define NF_STOLEN 2
  13 #define NF_QUEUE 3
  14 #define NF_REPEAT 4
  15 #define NF_STOP 5
  16 #define NF_MAX_VERDICT NF_STOP

ここで私はこの段落を見つけました:

NF_DROP リターン コードは、このパケットを完全にドロップし、割り当てられたリソースを解放する必要があることを意味します。NF_ACCEPT は、Netfilter に、パケットがまだ受け入れ可能であり、ネットワーク スタックの次の段階に移動する必要があることを伝えます。NF_STOLEN は、Netfilter にパケットを「忘れる」ように指示するため、興味深いものです。これが Netfilter に伝えていることは、フック関数がここからこのパケットの処理を取得し、Netfilter がそのすべての処理をドロップする必要があるということです。ただし、これはパケットのリソースが解放されるという意味ではありません。パケットとそのそれぞれの sk_buff 構造はまだ有効です。フック関数がパケットの所有権を Netfilter から奪っただけです。NF_REPEAT は、Netfilter が再びフック関数を呼び出すことを要求します。

しかし、 toとについてのdiscardingとの違いは何ですか?forgettingNF_DROPNF_STOLE

4

3 に答える 3

1

netfilter フックの場合NF_DROP、ネットワーク スタックがその「リソース」の解放を処理するため、sk_buff を解放してはなりません。

netfilter フックの場合、NF_STOLEN今では sk_buff の「リソース」を「所有」しています。したがってkfree_skb、使い終わったら sk_buff を呼び出す必要があります。

于 2014-03-27T22:03:01.320 に答える
1

このドキュメントでは、netfilter がどのように機能し、その理由について完全な概要を示します。

私の理解では、返すことNF_DROPはnetfilterにパケットをドロップするように指示NF_STOLENしますが、基本的に返すことは、これからパケットの責任を負うことを意味します.カーネルはまだ内部テーブルにパケットを持っており、カーネルに伝える責任があります.パケットで行っていることをすべて行った後、それをクリーンアップします。

ほとんどのアプリケーションでは、NF_DROPではなくNF_STOLEN.

于 2013-10-25T06:55:32.047 に答える
0

NF_STOLEN は、netfilter が次に登録されたフック ポイント関数を呼び出したり、上位層に配信したりしないことを意味すると思います。この sk_buff は現在あなたのものです...典型的なシナリオは、自分のパケットをフィルタリングしたり、傍受したり、機密情報を処理したりすることです。コミュニケーション...

于 2015-01-31T03:31:24.850 に答える