Skip to main content

34 posts tagged with "OMNET++"

View All Tags

· 2 min read

11th. Part: IPv4d/IPProcessing 模組功能等同 IPv4/IP 模組

因此 IPv4 資料夾即已實作 IPv4 協定 IPv4d 資料夾內程式則是將 IP 模組內容拆開成多個子模組, 以此推論,若模擬的目標是 IP 協定運作情形, 單單只看到 IP 模組並不能滿足要求時, 則將 Nodes/INET/ 各 .ned 檔中的 "IP" 改成 "IPProcessing" 應該 就可以看到更詳細的 IP 協定運作情形。建議名稱: Routerd / Router6d?

節點先做 Nodes/INET6/BurstHost6 與 Router6, StandardHost6 稍後再處理

  • 要寫自行設定模組的 Tutorial

12th. Part: INET 比 NS2 好的特色: FlatNetworkConfigurator, 只需指定網域 / 遮罩, INET 即自動配置各節點模擬用的位址.

  • 要研究 AutoRouting 中 FlatNetworkConfigurator 的做法 (怎麼與 ND 互補?(有 ND 那 FlatNetworkConfigurator 就不應作用於 '*Host' 上) ex:
  • 決定 Prefix/Prefix Lenth (Subnetmask),
  • 設定啟不啟動 DAD 等)

Neighbor Discovery vs ARP IPv6d/ND 將作為一個模組來對應 NetworkInterfaces/ARP

IP protocol header is represented by the IPDatagram message class

· 4 min read

9th. Part: 編輯 IP6Datagram.msg 參考 IANAPROTOCOL NUMBERS 來改寫 IP6Datagram.msg

Protocol field -> Next Header field 因此 enum 名稱 IP6ProtocolFieldId 改成 IP6NextHeaderFieldId

IPv4 上叫 Protocol field, IPv6 上稱 Next Header field 為了相容性,將原本定義的 Protocol field 全保留之外,另外新增

  • IP6_PROT_IPv6_Route = 43; //Routing Header for IPv6 [Deering]
  • IP6_PROT_IPv6_Frag = 44; //Fragment Header for IPv6 [Deering]
  • IP6_PROT_ESP = 50; //Encap Security Payload [RFC2406]
  • IP6_PROT_AH = 51; //Authentication Header [RFC2402]
  • IP6_PROT_IPv6_ICMP = 58; //ICMP for IPv6 [RFC1883] IP6_PROT_NONE = 59; --> IP6_PROT_NoNxt = 59; //No Next Header for IPv6 [RFC1883]
  • IP6_PROT_Opts = 60; //Destination Options for IPv6 [RFC1883]
  • IP6_PROT_ENCAP = 98; //Encapsulation Header [RFC1241,RXB3]

除了這些之外,順便把一些 Routing protocol 的號也加了上去.

IP6_PROT_IPv6_MOBILITY 原本給 62, 改成 IP6_PROT_IPv6_MOBILITY = 135; //Mobility Header for IPv6 [RFC3775]

從一串配給號碼中發現比較特別的是

61                 any host internal protocol           [IANA]
63 any local network [IANA]
68 any distributed file system [IANA]
99 any private encryption scheme [IANA]
114 any 0-hop protocol [IANA]

剛開始看不知有何特別作用,後來想想這幾個保留位看起來對模擬工具好像不賴 --> 有新協定要試作? 不必改到標頭定義,暫時先用這幾個吧! 不過沒有標頭名稱怎麼辦? Orz ..... 還是暫時不要加進去好了

本檔案編完的下一步應是編輯 IP6Address.h 或 IP6ControInfo.msg 吧

Ref: IP VERSION 6 PARAMETERS , ICMPv6 TYPE NUMBERS

10th. Part:

編輯 IP6Datagram.msg 中的 message IP6Datagram : 參考 IPv6Suite IP6Datagram.cc 來改寫 IP6Datagram.msg

ToDo: 1. 將相關各標頭定義在檔案裡. 2. 定義 flow_label 結構 (struct, 20 bit = double + short OR int + int + short OR?) 3. 訂 Options Types

IP6Datagram.cc 中標頭是如此定義出來的:

static const ipv6_hdr IPV6_INITIAL_HDR = { 0x60000000, //version 6, traffic class of 0, flow label of 0 0, //payload of 0 59, //No next header yet 0, //Hop Limit set to uninitialised IPv6_ADDR_UNSPECIFIED, IPv6_ADDR_UNSPECIFIED };

完整的標頭:

message IP6Datagram
{
properties:
//g Still unknown its func
omitGetVerb = true;
fields:
short version = 6; // version 6
int traffic_class = 0; // traffic class of 0
IP6FlowLabel flow_label; // flow label of 0
double payload_length = 0; // payload of 0
int next_header enum(IP6NextHeaderFieldId) = IP_PROT_NONxt; // No next header yet
int hop_limit = 0; //Hop Limit set to uninitialised
IP6Address srcAddress;
IP6Address destAddress;
}

即將碰到 day 3 提到的 延伸標頭處理 問題. RFC2460 上的敘述是這樣的

4.1 Extension Header Order [Page 6] When more than one extension header is used in the same packet, it is recommended that those headers appear in the following order:

IPv6 header Hop-by-Hop Options header Destination Options header (note 1) Routing header Authentication header (note 2) Encapsulating Security Payload header (note 2) Destination Options header (note 3) upper-layer header Fragment header

填 class IP6Options, 碰到 Option_Data: Variable-length field. Option-Type-specific data 的問題

經 majorlee 學長指點 RFC 3493 Basic Socket Interface Extensions for IPv6. RFC 3542 Advanced Sockets Application Program Interface (API) for IPv6 裡可能會有答案.

· 2 min read

7th Part: 為了對將來開發好的程式進行測試,新增目錄 INET/Tests/IPv6 同時也發現原本 INET 程式的測試數量明顯不足,但還好結果不差.

發現 Firebird 的 scratchbook extension 可以編輯已截取的網頁文件,可以在原文件上畫重點並加上註解, 我想應該充分將這個特點利用在 INET 與 IPv6Suite 線上文件注釋上.

8th. Part: 分析 Mobiwan2 架構,並與學長留下的舊版程式碼作比對. 為此使用 WinMerge 程式來協助版本比對的工作.

OMNET++ INET 與 NS2 的比較: 目錄名: INET mobiwan 架構:按照 TCP/IP 作分層目錄 / 平行資料夾目錄 相依性:放到 OMNET++ 3.0 以上版本目錄下,依照 Readme 即可安裝 / 需 Patch 特定版本的 NS2

Mobiwan 新舊檔案比較 檔案:新 / 舊 ipv6.cc, ipv6.h: Network --> NetworkAgent

ipv6.cc - line 416 r line 497: hdripinip ppinhdr = (hdr_ipinip )p->access(off_ipinip); 改成: hdr_ipinip ppinhdr = (hdr_ipinip )hdr_ipinip::access(p);

mipv6.cc 大修改 mipv6.h: Binding 訊息,Mobile IPv6 Base Agent, Mobile IPv6 Node

ipv6routing.h, classifer-src.h 完全相同

tcl/lib 2.27 版多了很多檔案,包含 2.1b1 版所有檔案。尚不知是否會造成什麼影響

· 2 min read

5th Part: 閱讀論文: KAME IPv6 Impliment issue 文中指出 IPv6 遵照 IPv4 基礎來修改,所以基本觀念不變. 文中也提出一些 porting 中遇上的問題: 1. Scope 位址處理 2. 多重位址應綁介面 (Interface) 而非綁節點 (Node) 3. 延伸標頭處理 4. IPSec

目前可能會遇到的問題還不只這些: 1. 位址分析 2. 明確的參考資料 ...., etc

6th. Part 閱讀書籍: C++ 風格與藝術 第二版 (Practical C++ Programming, 2e) 整本書說明都很清晰,應該買一本手邊隨時參考

程式碼要像文章一樣分段落章節,每段並加入主題說明, 變數避免用縮寫,以降低程式複雜度

原型:先寫規格中可以運作的部分, 當這一小部份運作正常之後, 再以它為基礎, 建立其他的功能.

程式檔中應包含: Header 標題 Author 作者 Purpose 目的 Usage 用法 References 參考資料 File Formats 列出讀取 / 寫入的檔案與格式 Restrictions 限制 (Q by myself: 是否可延伸成代辦事項?Revice: ToDo 集中管理會比較有效率) Revision History Error Handling Copyright and License Notes 補充說明

  • 編輯提供 .ned 架構檔在 NodePad++ 編輯關鍵字加亮的定義, 但還沒找到獨立提供這個設定檔的方法

3/11 update: 定義在 NodePad++ 資料夾下 userDefineLang.xml 檔中

· 3 min read

這系列文章僅記錄過程,目的是從紀錄中看到自己對的 ipv6 了解,對做事方法的改進. 不總結經驗。因為一但總結經驗就會陷入長段撰寫文件的誤區。而且在現在階段,甚至不能確定此專案能否成功。希望我能有寫出總結經驗文章來的一天吧:)

1st. Part: 第一步先從 ICMPv6 開始著手 Porting. 在熟悉 INET 目錄規劃後,首先是根據 INET 目錄規則來建立 INET 專案所應用到的目錄, 剛開始在 Network 目錄下先建立 IPv6 與 IPv6d 兩個目錄。並在 Nodes 目錄下建立 INET6 目錄.

從 IETF RFC 列表 中挖出了 RFC 2463, Internet Control Message Protocol (ICMPv6) for the Internet Protocol Version 6 (IPv6) Specification, 依此為憑開始 porting.

編輯 Network/IPv6/ICMPv6.ned 參照 IPv6Suite, 從 IPv6Suite/IP/IPv6/Generic 目錄下的 ICMPv6.ned. 觀察它的 ICMPv6 模組組成. 發現該模組與 INET 的 ICMP.ned 大不相同,是由 IPv6Core, Neighbourdiscovery, ICMPv6Combine, 還有 MLD (multicast) 模組組成的複合模組. MLD 模組在剛開始 porting 時可以忽略暫時不處理。剩下的三塊中... 應不應分拆成三個檔案三個 simplemodule? , 是否要使用到 ICMPv6Combine 這塊呢?我馬上陷入了第一個難題中.

2nd. Part: 告解式除錯 (Confessional Debug): 為何不先弄好 IP header 呢?這絕對是問題. 還好意識到這件事情的時間點還算早。更堅定了我 "只有邊寫邊紀錄才能意識到自己的錯誤" 的想法,因此接下來應先搜尋 IP header 定義的部分,從這裡開始作修改.

暫時將 DualStack 放到一邊,完成純 IPv6 Support 的模組後再考慮 DualStack. 但一定會將之排入計畫裡. 因為雖然 DualStack 對我的論文模擬來說重要性不大, 但在實際工作上將會遇到. porting 過一遍心裡會先有點底,相信多少有些助益.