Windows system >> Windowsの知識 >  >> Linuxシステムチュートリアル >> Linuxチュートリアル >> 近傍のサブシステムのLinuxのスタック(二つの関連プロセス)

近傍のサブシステムのLinuxのスタック(二つの関連プロセス)

  

周辺サブシステムの初期化、Linuxのソースコードバージョン2.6.21void __init arp_init(ボイド)(ネット/のIPv4 /arp.c){//隣接前とテーブル初期化neigh_table_init(& arp_tbl); //ARPプロトコルdev_add_pack(&#038を、arp_packet_type);登録//PROCオブジェクトが(arp_proc_init確立); CONFIG_SYSCTLneigh_sysctl_register(NULL IFDEF#、& arp_tbl.parms、NET_IPV4、NET_IPV4_NEIGH、"のIPv4"。 、NULL);#1 ENDIF //イベント通知リストregister_netdevice_notifier(& arp_netdev_notifier);} neigh_table_init(&#038において、対応する初期化arp_tbl);,ネイバーテーブルは、具体的には、ガベージコレクションタイマーを初期化します。概要議論後arp_packet_typeは次に与えられる:静的構造体packet_type arp_packet_type = {.TYPE = __constant_htons(ETH_P_ARP)、(レイヤプロトコル番号をリンクに対応する).func = arp_rcv、「パケット・ハンドラ」}上記からわかりますうち、5 arp_rcvで処理されたデータのARPパケットを、()受信した場合:隣接システムのデータ構造解析neigh_table構造:構造体neigh_table {//次の隣接構造体neigh_table *次; //プロトコルスタックINTファミリー; //入口長さ、すなわち隣接構造のサイズははsizeofに初期化される(隣接)+4(IPアドレスの長さ4)INT entry_size; 4int key_lenにするためのIPアドレスの長さである長さの//キーハッシュ値; //ハXiのカウント値関数(ハッシュ値は、対応するデバイスオブジェクトとnet_device IPで計算されます)__ U32(*ハッシュ)(定数無効* PKEY、constの構造体net_device *); //隣人の初期化関数int(*コンストラクタ)(構造体隣人*); int型(* pconstructor)(構造体pneigh_entry *);無効(* pdestructor)(構造体pneigh_entry *);無効(* proxy_redo)(構造体sk_buffの*のSKB); //ネイバーテーブル名のchar *のID;構造体neigh_parms PARMS; int型gc_interval /* HACKのGC_は*ギャップ* ///定期的なガベージコレクションなしPARMSに従ってくださいshoul;。!int型gc_thresh1; //第二の閾値、新しい隣人を作成するときに隣人がこの値を超えた場合//5秒以上であれば何のリフレッシュ、あなたは、すぐに必須のガベージコレクションint型gc_thresh2を更新してはならないとき; //は隣人の天井int型gc_thresh3を許す; //最近リフレッシュ時間符号なしlong last_flush; //通常のガベージコレクションタイマー構造体timer_listのgc_timer;構造体timer_list proxy_timer;構造体sk_buff_head proxy_queue; //テーブル全体の数は、ネイバーエントリをint型; rwlock_tロック; unsigned long型last_rand;構造体neigh_parms * parms_list;はkmem_cache_t * kmem_cachep;構造体neigh_statistics *統計; //ハッシュ配列、どの店舗隣人のstruct隣人** hash_buckets、ハッシュマスクunsigned int型hash_maskの//配列のサイズ; __ U32のhash_rnd; unsigned int型hash_chain_gc; //プロキシARP構造体のpneigh_entryに関連付けられている** phash_buckets; #ifdefのCONFIG_PROC_FSstruct proc_dir_entry * PDE; #endifの}近隣の構造:構造体隣人{//次の隣接構造体のneighbou R *次; //隣接テーブル構造体neigh_table * TBL; //ARP送信パラメータ構造体neigh_parms * PARMS; //アイテム対応する隣接ネットワークデバイス構造体net_device * DEV;長符号なしに使用//前回;長符号なし確認; //更新時刻符号なしlong更新; __ U8フラグ; __ U8タイプ;対応する状態__u8 nud_stateの//隣人//生き残りフラグが死んだ場合、ガベージコレクション機能が死んこの__u8を削除します1です。 //プローブatomic_t再送要求ARP試験の数; rwlock_tロック、近隣キャッシュunsigned char型のHAの[(MAX_ADDR_LEN +のsizeof(unsigned long型)-1)&#038に対応//ヘッド;〜(のsizeof(unsigned long型)-1) ];構造体hh_cache * HH; REFCNT atomic_t //参照カウント;伝達関数int(*出力)(構造体sk_buffの*のSKB)に対応する//ネイバーエントリ、送信キュー構造体sk_buff_headのarp_queueを対応する//SKB; //タイマーの構造体timer_listタイマー;構造体neigh_ops * OPS; //ハッシュキーのU8のPRIMARY_KEY [0];};

Copyright © Windowsの知識 All Rights Reserved