Windows system >> Windowsの知識 >  >> Linuxシステムチュートリアル >> Linuxチュートリアル >> プロトコルスタックのLinuxのリンク層でのデータ伝送は-sk

プロトコルスタックのLinuxのリンク層でのデータ伝送は-sk

  

sk_buff sk_buff構造解析は、多くの場合、SKB省略され、我々はカーネルに遭遇した第二の重要な構造である。これは、Linuxの2.6.21で定義されています:構造体sk_buff {//次skbstructのsk_buff *次の点; //skbstructのsk_buff * PREV、構造体sk_buf0f_head *リスト; //対応靴下。 //タイムスタンプstruct timevalにスタンプを受信又は送信; //は、対応するnet_devicestruct net_deviceを受けたり送信* DEV;受信したnet_devicestruct net_device //トランスポート層は、* SK私たちは、構造体の靴下を分析できているときには、また、重要な構造であります* input_devを;. * real_devがブリッジモードその後の分析で論じられる構造体net_deviceに対応する仮想デバイスにnet_device実際のパケット@; //情報層組合IP {構造体tcphdr *番目、構造体udphdr * UH、構造体icmphdr * icmph、構造体igmphdr * igmph、構造体iphdr * ipiph、構造体ipv6hdr * ipv6h; unsigned char型*生;} H;情報プロトコル層組合//{構造体iphdr * IPH、構造体ipv6hdr * ipv6h、構造体arphdr * arph; unsigned char型*生;} NH、情報リンク層組合//{unsigned char型*生;} MAC; //この構造体は、サブシステムをルーティング再び構造体dst_entryの*のDSTを解析し、構造体sec_path * SP; /**これは、制御バッファである。すべての*層のために自由に使用することである。あなたは*あなたが(skb_cloneをしなければならない層にわたってそれらを維持したい場合は*最初)。そこにあなたのプライベート変数を入れてください。これは、キューに入れられたSKBを有する誰によって所有されているATM * /チャーCB [40];.各層の//データ長unsigned int型LEN、DATA_LEN、mac_len、CSUM; unsigned char型のlocal_df、クローニングし、pkt_type、ip_summed; __ U32優先;符号なしの短いプロトコル、セキュリティ、無効(*デストラクタ)(構造体sk_buffの*のSKB); CONFIG_NETFILTERunsigned長いnfmark IFDEF#; __ U32のnfcache; __ U32のnfctinfo;構造体nf_conntrack * NFCT; #ifdefのCONFIG_NETFILTER_DEBUGunsigned int型nf_debug;#endifの#IFDEF CONFIG_BRIDGE_NETFILTERstruct nf_bridge_info * nf_bridge。 #ENDIF#ENDIF /* CONFIG_NETFILTER * /#もし定義(CONFIG_HIPPI)組合{__u32 IField内;}プライベート;#ENDIF#IFDEF CONFIG_NET_SCHED__u32 tc_index; /*トラフィック制御インデックス* /#IFDEF CONFIG_NET_CLS_ACT__u32 tc_verd; /*トラフィック制御判定* /__ U32 tc_classid; /*トラフィック制御のclassid * /#endifの#endifの/*これらの要素は、(alloc_skbを参照してください、終わりでなければなりません)詳細については、* /unsigned int型truesize;.ユーザーatomic_t //参照カウント、ストレージの//開始データネットワークアドレス*データから始まるアドレスはunsigned char *ヘッド、//、//店舗ネットワークデータ終了アドレス*テール、メモリ空間//*エンドの終了アドレス;}我々の分析上のNICドライバに対応します。受信されたデータは、尾部へのデータの間の領域に位置しています。 SKBは、通常、次のようにそれらを一覧表示し、いくつかの一般的に使用される機能があります:構造体sk_buffは* alloc_skbは、(unsigned int型のサイズは、int型のgfp_mask)は、このストレージスペースの意味にSKBのsixe、メモリ割り当てレベルgfp_maskの注目を集めるためのストレージを割り当てます。すなわちskb->データはskb->し、尾部領域の構造体sk_buffは* skb_clone(構造体sk_buffは* SKB、INT優先)と同じ構造にクローニングされたSKB点、またカウントSKB構造体sk_buff * skb_copy(const参照を増加させます構造体sk_buff *のSKB、INT優先)は、SKBが一度としてカウント参照新しいskbvoid kfree_skb(構造体sk_buffの*のSKB)をコピーskbunsignedのchar * skb_put(構造体sk_buffの*のSKB、unsigned int型LEN)はSKBストレージを解放しますlenのスペースを拡大してもテール・ポインタダウンunsigned charの場合* skb_push(構造体sk_buffの*のSKB、unsigned int型LEN)プッシュ、データ片の導入、すなわち、そのように、基礎となるデータ・ポインタ。ボイドskb_reserve(構造体sk_buffの*のSKB、unsigned int型のlenは)この操作は、(データのint skb_tailroomために利用可能なスペースの量に戻る前に、すなわち、前の記憶領域拡大空間int型skb_headroom(CONST構造体sk_buffの*のSKB)に、ダウン同時にテール・ポインタとデータポインタを引き起こしますconstの構造体sk_buff * SKB)リターンバッファスペース利用可能

Copyright © Windowsの知識 All Rights Reserved