1. 程式人生 > >在ns2下新增新協議:

在ns2下新增新協議:

在NS2想要新增一個協議,至少要實現如下8個步驟。下面以ns2中的ping為例子說明,在版本2.29中已存在ping,這裡改為bing。

1.因為ping在資料夾apps下,這裡就在該目錄下(自己新建協議時,應該建立新的資料夾bing)新建檔案bing.h bing.cc。

2.在bing.h中定義為packet頭定義一個struct資料型別, 例如 "struct hdr_bing"; ( 仿照 "~ns/apps/ping.h" 檔案中的hdr_ping)和一個類BingAgent(仿照PingAgent)

3.在bing.cc中定義BingHeaderClass和BingClass(仿照ping.cc中的類)。

前面三步可以省略,直接在資料夾apps下cp ping.h bing.h和cp ping.cc bing.cc,然後把bing.h和bing.cc中所有的ping,PING,Ping用bing,BING,Bing替代。以下幾步是必要的修改:

4. 在 "~ns/common/packet.h" 檔案中,為 enum packet_t 新增一個新的條目 "PT_BING" ,並在p_into類的建構函式中新增一個新的陣列元素 name[PT_BING] = "bing",要注意此處的位置必須對應。

5. 在檔案 "~ns/tcl/lib/ns-packet.tcl" 中,在"foreach prot" 中新增"BING" 。

6. 在檔案 "~ns/tcl/lib/ns-default.tcl" 中,設定包的預設大小Agent/Bing set packetSize_ 64

7.在檔案~ns/makefile中,apps/ping.o後新增apps/bing.o.(apps表示bing.h和bing.cc所在的資料夾,所以如果自己新建了資料夾bing,此處應新增bing/bing.o)

8.儲存以上檔案後,需要先'make depend'一下,生成依賴關係,然後再'make'。成功後,可以仿照ping.tcl建立一個bing.tcl(在檔案中用bing,Bing替換ping,Ping)。接下來就可以執行ns bing.tcl檢視結果。

以上各個步驟,步驟2是為了定義新的包頭格式;步驟3是為了能夠將該資料包與Otcl聯絡起來;步驟4是為了在trace中能夠使用該資料包,注意name[PT_TCP]="tcp",其中的 "tcp" 即是出現在trace檔案中的第五列,pkt type;步驟5是為了NS在啟動的時候能夠載入我們定義的包頭。

最後需要注意:如果新建的協議是無線路由協議,則還需要在 "~ns/tcl/lib/ns-lib.tcl" 檔案中Simulator的create-wireless-node方法中新增相應的處理。

小結:.h檔案中主要定義頭結構體hdr_[name],[name]agent:public agent。結構體中訪問方法部分基本相同,類中要有預設建構函式和命令函式。所有.cc檔案中的[name]headerclass和[name]class內容基本相同,主要是類agent中成員函式的例項化。

相關推薦

ns2新增協議

在NS2想要新增一個協議,至少要實現如下8個步驟。下面以ns2中的ping為例子說明,在版本2.29中已存在ping,這裡改為bing。 1.因為ping在資料夾apps下,這裡就在該目錄下(自己新建協議時,應該建立新的資料夾bing)新建檔案bing.h bing.cc。

wampServer新增PHP模組

想用到的php版本較新,沒有去安裝homestead,本機用的是wamp,但wamp自帶的php是5.6.25和php7.0.10,所以就想搞個多版本的出來。 1.下載php最新版本 結合自己的

Ubuntu 16.04新增使用者

某些情況下,Ubuntu 使用useradd 新使用者名稱,在home 資料夾下面看不到新建立的使用者資料夾,例如:[email protected]:/home/kuku# useradd spark [email protected]:/home/ku

Android新增的自定義鍵值和按鍵處理流程

[cpp] view plain copy print? <span style="font-family:FangSong_GB2312;font-size:18px;">/*  * Copyright (C) 2010 The Android Open So

linux新增驅動的方法

下面以UCLINUX為例,介紹在一個以模組方式出現的驅動程式test.c基礎之上,將其編譯進核心的一系列步驟: (1) 改動test.c源帶程式碼 第一步,將原來的: #include #include char kernel_version[]=UTS_RELE

ubuntu新增使用者、解決遠端登入問題

1 新增新使用者 1.1 新增新使用者 sudo useradd go -d /home/go -m #第一個go,指使用者名稱 #-d /home/go 指定使用者登入系統時的主目錄,宿主目錄 #-m 如果/home/go路徑不存在,自動建立

linux新增使用者,並賦予root許可權

1.useradd  -d   /usr/xxx   -m  xxx 2.cd /usr/xxx 3. 更改密碼    passwd xxx  4.  賦予許可權    vim   /etc/sudoers        找到   root  ALL=(ALL)   ALL

CentOS新增硬碟

1、檢視新硬碟     #fdisk  –l     新新增的硬碟的編號為/dev/sdb 2、硬碟分割槽     1)進入fdisk模式     #/sbin/fdisk /dev/sdb     2)輸入n進行分割槽     3)選擇分割槽型別     這裡有兩個選項:

顯微鏡的webpack4的特性mode詳解

webpack4支援的一個新特性就是zero配置,不需要config,也可以打包,這對於懶癌患者很有誘惑力,但是這也意味著我們不清楚零配置發生了寫什麼,也不知道打包出來的檔案是否符合我們的心意,全部都是佛系打包。不過作為專案的親爹親媽,還是要對自己的孩子負責,每個打包過程都是要可控的。本文就是詳解不同mode

中國將有可能在全球化的背景收穫的人口紅利3星|《<財經>2019預測與戰略》

《財經》2019 :預測與戰略 《財經》雜誌的年刊。內容是針對2019年的預測分析。我認為《財經》的調查報告比較有深度,分析則不是我愛看的型別。 總體評價3星,有參考價值。 以下是書中一些內容的摘抄,#號後面是kindle電子版中的頁碼: 1:北京最好的醫院和中小學大都集中在四環、三環裡。這道公共

Fabric網路如何為通道新增的組織

首先要明確新增通道應該要做哪些事!一要通知orderering service伺服器,新組織加入到通道,驗證過的建議交易封裝後是要提交給orderering service伺服器,由它分發到commit peer節點。二是通道配置要改變,新組織極有可能成為背書策略貢獻者。

給kali的metasploit新增一個的exploit

首先在/usr/share/metasploit-framework/modules/exploits/目錄下新建一個自定義資料夾,例如fwdtest 仿造exploits目錄下的其他exp(rb檔案)編寫自己的exp.rb指令碼(這邊用0day安全:軟體漏洞分析技術裡的

Spket1.6.23在Eclipse新增程式碼自動補齊功能的配置

一、Spket簡介 Spket是一個RIA的開發工具,具有程式碼自動完成、語法高亮、內容概要等功能,可以幫助開發人員高效的編寫JavaScript程式。 效果圖: 二、安裝Spket 1.去官網(http://www.spket.com/download.

Asp.Net MVC4入門指南(7)給電影表和模型新增欄位

在本節中,您將使用Entity Framework Code First來實現模型類上的操作。從而使得這些操作和變更,可以應用到資料庫中。 預設情況下,就像您在之前的教程中所作的那樣,使用 Entity Framework Code First自動建立一個數據庫,Code First為資料庫所新增的表,將幫

Kubernetes1.7特性新增自動伸縮條件和引數

一、核心概念Horizontal Pod Autoscaling,簡稱HPA,是Kubernetes中實現POD水平自動伸縮的功能。雲端計算具有水平彈性的特性,這個是雲端計算區別於傳統IT技術架構的主要特性。對於Kubernetes中的POD叢集來說,HPA可以實現很多自動化

numpy新增的維度newaxis

numpy中包含的newaxis可以給原陣列增加一個維度 np.newaxis放的位置不同,產生的新陣列也不同 一維陣列 x = np.random.randint(1, 8, size=5) x Out[48]: array([4, 6, 6, 6

微信小遊戲釋出規則拒絕“分享濫用”行為 違者架處理

最近關於部分微信小遊戲分享濫用行為的話題討論不止,大量使用者反饋表示此類行為已造成嚴重困擾。微信遊戲產品總監孫春光曾表示,微信會重新制定規則約束病毒分享行為。今日,微信小遊戲正式釋出公告稱,小遊戲拒絕“分享濫用”行為,違規情形將會受到處理,希望開發者不要觸犯“雷區”。  以下

jQuery 往table新增內容有以下四個方法

jQuery 新增新內容有以下四個方法: append() - 在被選元素的結尾插入內容 prepend() - 在被選元素的開頭插入內容 after() - 在被選元素之後插入內容 before() - 在被選元素之前插入內容 下面例項演示:點選按鈕則

Linux學習(4)ubuntu新增使用者並設定root許可權

一,新增使用者 ubuntu建使用者最好用adduser,雖然adduser和useradd是一樣的在別的linux糸統下,但是我在ubuntu下用useradd時,並沒有建立同名的使用者主目錄。

kubernetes1.7特性新增StorageOS卷外掛和Local持久儲存

背景介紹在Kubernetes中卷的作用在於提供給POD儲存,這些儲存可以掛載到POD中的容器上,進而給容器提供儲存。從圖中可以看到結構體PodSpec有個屬性是Volumes,通過這個Volumes屬性可以關聯到結構體Volume和結構體VolumeSource,而且這個V