1)在C++中創建一個名為hdr_newhdr的新的structure來定義所需要的欄位,定義offset_欄位和訪問欄位的方法。
2)定義所需要的訪問其他欄位的成員函式
3)創建一個叫做PacketHeader/Newhdr的static類來完成OTcl連線,在它的構造函數裡進行bind_offset()。(PacketHeaderClass)
4)編輯~ns/tcl/lib/ns-packet.tcl來激活新的分組頭(PacketHeaderManager)。另外也需修改~/ns/common/packet.h,來綁定分組類型值和它們的名字(p_info)。
與分組相關的類概括起來有四個:Packet、p_info、PacketHeaderClass、PacketHeaderManager
1.Packet類定義了分組的結構(bits_,hdrlen_等),提供了處理Packet對象的一系列成員函式(alloc()、copy()、free()等)。
2.p_info類,用來綁定各個分組類型值和它們的名字。
?當定義新的分組類型後,數字代碼應添加到枚舉類型packet_t中,同時應添加到p_info類的構造函式中。注意,PT_NTYPE必須是最後一個。
3.PacketHeaderClass是各種分組頭的基類。其中,hdrlen_是在構造函式中被設定,offset_則是通過調用bind_offsest()函式來設定的。
4.PacketHeaderManager類用來管理所有處於激活狀態的分組頭,並在BOB中分配給它們唯一的偏移量。同時定義於C++和Otcl中
模擬過程初始化時,ns-packet.tcl代碼被執行。foreach循環中所有需要激活的分組頭,通過調用add-packet-header來激活(Common頭始終被激活)。create_packet_format{}被調用一次,它首先創建一個PacketHeaderManager對象,之後,對於被激活的分組頭,由實例過程allochdr{}來給出分組頭的位置。在Tcl中選擇分組頭的命令包括:remove-packet-header、remove-all-packet-header和add-packet-header。remove-packet-header必須在Simlator對象創建前執行。