2

struct skbuff転送トラフィック (ブリッジ転送と IP 転送) とローカルで発信されたトラフィックを区別するための情報はありますか? 転送トラフィックはパケット サイズ全体でキャッシュの無効化を必要としないため、これら 2 種類のトラフィックをネットワーク ドライバーで別々に処理する必要があります。

任意の提案をいただければ幸いです。どうもありがとうございました!

4

1 に答える 1

3

はい、可能です。この関数からのすべての呼び出しを調べることで、受信パケットのライフ サイクルをたどることができます ip_rcv_finish( http://lxr.free-electrons.com/source/net/ipv4/ip_input.c?v=3.3 #L317 )。

構造体struct sk_buffには、宛先エントリへのポインタが含まれています。

struct  dst_entry   *dst;

関数ポインタを含む:

int (*input)(struct sk_buff*);

入力パケットを呼び出すには、ローカル パケットの場合はカーネル コールip_local_deliver関数を、転送パケットの場合はip_forward関数を呼び出します。

ローカルおよび転送されたパケットについて、次のように確認できると思います。

- ローカル :

/*  struct sk_buff *skb : Entry packet */
if (((struct rtable *)skb->dst)->rt_type == RTN_LOCAL)
{
    /* This packet is to consume locally */
}

- 前方 :

if (((struct rtable *)skb->dst)->rt_type == RTN_UNICAST)
{
    /* This packet will be forwarded */
}
于 2012-08-24T16:28:00.573 に答える