隣接サブシステムの隣人は、neigh_lookup検索___ neigh_lookup_noref

アウトライン

隣接項目ルックアップはneigh_lookup相関関数によって実行されます。

___neigh_lookup_noref、関数(ネクストホップIPのIPv4アドレス)と出力装置、アイテムが返される検索ハッシュテーブルの隣の主キー値を見つけるために応じ。

neigh_lookup、関数は___neigh_lookup_noref関数を呼び出し、そして隣人がアイテムを見つけた後、参照カウントがインクリメントされ、その後、アイテムを返します。

ソースコード解析
1  構造体の隣接* neigh_lookup(構造体 neigh_table * TBL、CONST  ボイド * PKEY、
 2                     構造体 net_device * DEV)
 3。 {
 4。     構造体の隣接* N-;
 5  
。6      NEIGH_CACHE_STAT_INC(TBL、ルックアップ);
 7  
。8      rcu_read_lock_bh();
 9  
10      / * 非基準ルックアップネイバーエントリ* / 
11。      N- = __neigh_lookup_noref(TBL、PKEY、DEV)
 12は 
13である     * / 参照カウント増分* / 
14      IF {(N)
 15          IF(atomic_inc_not_zero(N-&>!REFCNT))
 16              N- = NULL;
 17          NEIGH_CACHE_STAT_INC(TBL、ヒット);
 18である     }
 。19  
20である     )(rcu_read_unlock_bh;
 21である 
22ことである     * / ネイバ項目戻す* / 
23である     返すN-を、
 24 }

 

1つの 静的インライン構造体の隣接* __ neigh_lookup_noref(構造体 neigh_table * TBL、
 2                               CONSTの ボイド * PKEY、
 3                               構造体 net_device * DEV)
 4  {
 5      リターン ___ neigh_lookup_noref(TBL、tbl-> key_eq、tbl-> ハッシュ、PKEY、DEV)。
6 }

 

1  静的インライン構造体の隣接* ___ neigh_lookup_noref(
 2      構造体 neigh_table * TBL、
 3      BOOL(* key_eq)(constの 構造体 N隣接*、CONST  ボイド * PKEY)、
 4      __u32(*ハッシュ)(CONST  ボイド * PKEY、
 5                CONSTの 構造体 net_device * DEV、
 6                __u32 * hash_rnd)、
 7      のconst  無効 * PKEY、
 8      構造体 net_device * DEV)
9  {
 10      / * 获取ハッシュ* / 
11      構造体 neigh_hash_table * NHT = rcu_dereference_bh(tbl-> NHT)。
12      構造体の隣人* n個。
13の     U32 hash_val。
14  
15      / * 计算ハッシュ值* / 
16      hash_val =ハッシュ(PKEY、DEV、nht-> hash_rnd)>>(32 - nht-> hash_shift)。
17  
18      / * 遍历ハッシュ表项* / 
19      のための(N = rcu_dereference_bh(nht-> hash_buckets [hash_val]);
 20           !N = NULL;
 21          rcu_dereference_bh = N-(N-> 次に)){
 22は、         / * アイテムが返され見つける* / 
23である         IF(N-> DEV DEV && == (N、PKEY key_eq))
 24              リターンN-;
 25      }
 26である 
27      / * ていませんリターンがNULLた* / 
28      リターン、NULLを
 29 }

 

おすすめ

転載: www.cnblogs.com/wanpengcoder/p/11755392.html