Skip to main content

· 7 min read

//1.1.1 03/06/05 Doc is Included in INET6 Project //1.1 01/05/05 //1.0 12/31/04 //0.9 12/28/04 //0.5 12/26/04 init

Install and Using OMNET++ on Windows 對開發者來說,儘管在 Linux 環境下編譯 OMNET++ 模擬套件也是個好選擇, 但是也有不少人希望能在 Windows 環境下順利利用 OMNET++ 編譯模擬套件. 而目前相關文件仍然極少. 本文總結了作者如何在 Windows 環境下利用 Microsoft Visual C++ 6 (MSVC6) 編譯 OMNET++ 模擬套件的經驗

1. 安裝 MSVC6 & MSVC Service Pack 6 安裝 MSVC6 時 "註冊變數" 選項一定要勾選

2. 設定 打開選單 -> 工具 (Tools) -> 自訂 (Customize) 點選 Add-ins and Macro files 分頁標籤 (Tab) , 看到 omnetpp 選項,將之勾選

回到命令 (Commands) 分頁標籤 (Tab), 分頁左上角的分類 (Category) 選單會多出巨集 (Macros) 選項. 選擇巨集 (Macros) 選項,看到 addNEDfileToProject 巨集, 點選 addNEDfileToProject 巨集, 使用鼠標將巨集拖曳到工具列上, 選擇合適的位置,圖示後按確定.

在完成上兩步之後,我們已經將 VC 環境設定完成, 可以準備開始在 VC 上建立新的 OMNET++ 專案, 或是匯入原本不是在 Windows 環境下執行的專案

3. VC 中建立新專案 若要從頭開始建立新的模擬套件, 可以先在 Windows 檔案管理員中任意地點建立放置新專案的資料夾, 再從 OMNET++ 安裝目錄 /sample 中複製 .dsw, .dsp 專案檔到新專案的資料夾中.

複製範例專案檔的目的是因為範例專案檔已經將 OMNET++ 編譯所需的編譯器, 連結旗標,Tkenv/Cmdenv 參數等都設定好了,讓我們不需再重新設定.

點擊 .dsw 檔進入 VC 編輯畫面. 將檔案檢視 (File View) 中的檔案名稱清空後,即可開始編輯新的專案

4. VC 中匯入專案 有時我們會想使用別人在 OMNET++ 中已完成的模擬套件或成果, 而對方使用的平台並非 Windows, 此時我們可以用類似前一步驟的方式為這個模擬套件加入新的 VC 專案檔. 從 omnet 安裝目錄 /sample 中複製 .dsw, .dsp 專案檔到原來模擬套件的資料夾中. 點擊 .dsw 檔進入 VC 編輯畫面. 將 File View 中的檔案名稱清空後,即可開始編輯新的專案

5. VC 中編輯專案 在 IDE 環境下依照一般 VC 中編輯專案的方式增刪編輯檔案. 但要將其他平台上的 c++ 檔案拿來用時,注意檔案副檔名不能使用 .cc, 副檔名都要先改成 .cpp 後在 VC 下才能正常編譯 (這點好像不一定,至少在 INET 模組裡就不必改)

當遇到設計好 .ned 檔要加入 VC 時, 先點選工具列上新增的 addNEDfileToProject 巨集圖示, 輸入該 .ned 檔檔名 (包含副檔名), 之後 addNEDfileToProject 巨集會幫忙生成 .ned 對應的 cpp 檔.

詳細設定可參考 OMNeT++ 安裝目錄下 doc/Readme-MSVC.txt

6, VC 中編譯專案 首先打開命令列,準備開始編譯的動作. 命令列開啟流程為按作業系統左下角的 "開始", 在選單中選擇 "執行", 其後將跳出輸入視窗,在視窗中鍵入 cmd (或 Terminal) 按下確定後即彈出類似 Dos 視窗. 接著用一般 Dos 指令切換到專案目錄下準備開始編譯,鍵入 opp_nmakemake 這動作會根據目錄中的來源檔案生成 Makefile.vc 檔案

接著使用下面指令來生成模擬: nmake -f Makefile.vc 做完以上部驟之後就可以照一般 VC 編譯方式編譯啦:)

7, 重新編譯專案 之前已編譯過時資料夾中會存有舊的 Makefile.vc 檔案,可鍵入 opp_nmakemake -f 來強制覆寫 Makefile.vc .

在編譯前要清除過時連結資料,可以在命令列中輸入 nmake Makefile.vc clean 也可以在 VC 中使用 選單 / Build/Clean 選項將過時連結資料清除

8. 選擇 Tkenv 視窗模式模擬 在預設的情況下,使用 OMNET++ 編譯出來的檔案將是在 cmdenv 命令列環境下執行. 為了更容易檢視模擬結果, 我們可以透過以下方法將模擬切換到在 TKenv 環境下執行:

選單 / Build/Set Active Project Configuration 從四個選項中選取 xx- win32 Release Tkenv

參考資料: 1. OMNeT++ and MF build instructions for Windows 2. OMNeT/doc/Readme-MSVC.txt

refer: Make sure you enter these settings for all configurations (In the Project|Settings dialog, select 'All configurations' from the combo in the top-left corner.)

  • include path: You must tell MSVC the location of omnetpp.h and other header files. Add c:\omnetpp-2.3\include to the include path in Project|Settings --> 'C/C++' tab --> 'Preprocessor' category --> Additional include directories.
  • library path: MSVC needs to know where to find sim_std.lib, envir.lib and other libraries. Add omnetpp/lib to the linker path in Project|Settings --> 'Link' tab --> 'Input' category --> Additional library path.
  • nedc: It's advisable to put OMNeT++'s bin directory into the PATH so that MSVC will find the NED compiler. (An alternative is to enter explicit nedc path for each NED file's Custom build step, but that's much more cumbersome.)

Add the .ned files to the project and set custom build option for them: Description: NED Compiling $(InputPath) Command: nedc -s _n.cpp $(InputPath) Outputs: $(InputPath)_n.cpp Hint: you can select all .ned files together, and 'All configurations' from the combo at the left of the Settings dialog, and then you have to type this settings only once. Note: If you copied one of the sample projects, you'll have to adjust Command, because they contain explicit nedc path (....\bin\nedc).

· 3 min read

動機: 由於自己論文的模擬需求,嘗試了許多網路模擬工具,包括 OPNET, NS2, OMNET++ 等. 試用後發現 OPNET 架構完備,然而複雜度過高,因授權關係使用上亦受到重重限制. NS2 使用免費,牌子老又擁有不可忽視的模組群,然而 OTCL 與 C 之間模組關係處理複雜,模組使用時還必需與版本配合,毫無可攜性. 而 OMNET++ 具有許多 NS2 沒有的優點,例如是物件導向式的模擬工具。跨平台通用,使用 C++ 語言撰寫. 在網路模擬上目前則提供了 INET, Mobility Framework, IPv6Suite 等網路模擬模組. Mobility Framework 是一個相似於 NS2 的網路模擬模組,提供樣版檔案,讓使用者從 Mac 層至 Application 層自行挑選,組合出所需的網路. 而 INET 是三者中支援 OSI 七層最完整的網路模擬模組,使用上也最為簡便。然而目前並不支援 IPv6 與 IP Mobility. IPv6Suite 提供 IPv6, IPv4, MIPv6 等的模擬,, 功能最為強大. 然而問題頗多,由於綁定太過額外模組,僅限於 Linux 平台,也不容易修改, 在網路模擬上具有分層不夠清楚,安裝不夠簡單,文件不夠友善等缺點. 因此一個主要目的以 INET 模組為基礎,依據 INET 網路分層,並以 IPv6Suite 為參考, 使 INET 支援 IPv6 的 INET6 計畫於焉成型

INET6 計畫包含

  • IPv6 模組程式
  • nedDoc 模組程式碼生成文件
  • 安裝步驟
  • 導覽 Tutorial
  • 模擬寫作指引

未來計畫:

  • MIPv6 模組程式 (待 Mobility Framework 整合後繼續開發)
  • NEMO 模組程式
  • DualStack 模組程式

本計畫發展穩定後,最終將合併入 INET 模組中,提供 OMNET++ 平台上完整的網路模擬環境.

· One min read

這個網誌搞什麼? 這個網誌的目的就是放我翻譯的 Linux+IPv6 HOWTO, 還有紀錄我在自己發起的 INET6 計畫中 porting INET6 的過程, 與 porting 過程中所獲得的相關經驗.

· One min read

網路模擬最重要應注意的事情,就是找一台穩定可靠的機器. 一台穩定可靠的機器可以省下無限多測試安裝麻煩.

以前在好幾台機器上怎麼試都不太順利,換到新的這台 X30 後一切順利的不得了. 感覺這次的投資真是值得:)

· 4 min read

//2/25/2005 //2/22/2005 //8/6/2004

1. 概述 1.1. 版權,許可與其它 1.2. 歸類 1.3. 版本,歷史和待辦事項 1.4. 翻譯 1.5. 技術 1.6. 序 1.7. 使用詞彙與縮寫 1.8. 了解這個 HOWTO 的必需條件 2. 基礎 2.1. 什麼是 IPv6? 2.2. IPv6 在 Linux 作業系統上的歷史 2.3. IPv6 的位址格式的形式? 2.4. FAQ 問與答 (基礎) 3. 位址格式 3.1. 沒有特殊前綴的位址 3.2. 位址前綴 3.3. 位址格式 (主機部份) 3.4. 用作路由的位址前綴長度 4. IPv6 - 支援 (ready) 系統確認 4.1. IPv6 - 支援 kernel 4.2. IPv6 - 支援 網路設定工具 4.3. IPv6 - 支援 測試 / 調試 程式 4.4. IPv6 - 支援 程式 4.5. IPv6 - 支援 客戶端程式 (selection) 4.6. IPv6 - 支援 伺服器端程式 4.7. FAQ 問與答 (IPv6 - 支援 系統確認) 5. 設定界面 5.1. 不同的網路設備 5.2. 啟動與關閉界面 6. 設定 IPv6 位址 6.1. 顯示目前的 IPv6 位址 6.2. 新增 IPv6 位址 6.3. 移除 IPv6 位址 7. 設定正常 IPv6 路由 7.1. 顯示目前的 IPv6 路由 7.2. 新增 IPv6 通過閘道器的路由 7.3. 移除 IPv6 通過閘道器的路由 7.4. 新增 IPv6 通過介面的路由 7.5. 移除 IPv6 通過介面的路由 7.6. IPv6 路由 FAQ 8. 芳鄰搜尋 8.1. 使用 "ip" 指令顯示芳鄰 8.2. 使用 "ip" 指令處理芳鄰列表 9. 設定 IPv6-in-IPv4 通道 9.1. 通道的類型 9.2. 顯示目前通道 9.3. 設定點對點的通道 9.4. 設定 6to4 通道 10. 設定 IPv4-in-IPv6 通道 11. 在 /proc-filesystem 的內核設定 11.1. 如何存取 /proc-filesystem 11.2. /proc/sys/net/ipv6/ 中的數值類型. 11.3. /proc/sys/net/ipv4/ 中 IPv6 相關的數值類型 11.4. /proc/net/ 中 IPv6 相關的數值類型 12. Netlink-Interface to kernel 13. 網路調試 13.1. 伺服器接口 (socket) 繫結 13.2. tcpdump 封包傾印範例 14. 在不同的發行版中設定 IPv6 14.1. Red Hat Linux and "clones" 14.2. SuSE Linux 14.3. Debian Linux 15. 自動設定與移動性 15.1. 無狀態自動設定 15.2. 使用 Router Advertisement Daemon (radvd) 達成有狀態自動設定 15.3. 動態主機設定協定 v6 (DHCPv6) 15.4. 移動性 16. 防火牆 16.1. 使用 netfilter6 作防火牆 16.2. 準備 16.3. 使用方法 17. 安全性 17.1. 節點安全性 17.2. 存取限制 17.3. IPv6 安全性驗證 18. 加密與認證 18.1. 使用加密與認證的模式 18.2. 核心支援 (ESP 與 AH) 18.3. 自動金鑰交換 (IKE) 18.4. 額外訊息 19. 服務品質 (QoS) 20. Hints for IPv6-enabled daemons 20.1. Berkeley Internet Name Daemon BIND (named) 20.2. Internet super daemon (xinetd) 20.3. Webserver Apache2 (httpd2) 20.4. Router Advertisement Daemon (radvd) 20.5. tcp_wrapper 21. 程式設計 (使用 API) 22. 互聯性 23. 更多資訊與網址 23.1. 書籍,文章,線上評論 (mixed) 23.2. Conferences, Meetings, Summits 23.3. 線上資訊 23.4. IPv6 基礎架構 23.5. 郵件列表 23.6. 線上工具 23.7. Trainings, Seminars 23.8. 'The Online Discovery' ...

24. Revision history / Credits / The End

24.1. Revision history 24.2. Credits 24.3. 結語