Click Modular Router

Click Modular Router

特別鳴謝hhsh

下面文章是對自己使用click軟件路由器的總結,關於click的具體信息,大家可以在它的網站上獲得http://www.read.cs.ucla.edu/click/

首先介紹click的安裝:(參考麗哥的博客)

1。用戶態的安裝。

click用戶態的安裝相當的easy,幾條命令搞定

 (1) 如果沒有安裝編譯環境,首先要安裝編譯環境   sudo apt-get install buildessential

(2) 從click的官方網站下栽(http://read.cs.ucla.edu/click/download)安裝包,解壓到自己喜歡的目錄。這裏我們使用的是clcik-1.8.0的數據包,然後進入click目錄 cd /clickDir/click-1.8.0然後運行以下命令 ./config ; sudo make ;  sudo make install。

(3)ok,搞定了,進入到click 的conf目錄,運行 click test.click 運行產生5組數據,成功了,easy吧。

2。核心態的安裝

如果你真的想用click整點事的話用戶態是遠遠不夠的,需要安裝在覈心態。。。。

如果之前你編譯過內核,那麼核心態的安裝對你來說也不過小菜一碟,如果之前沒有編譯過也沒什麼,編譯內核也是幾個傻瓜式的步驟(前提是編譯過程中不出現錯誤哈~~)。需要說明的是內核編譯選用的環境是ubuntu8.04,版本再高了就容易出錯,有大嬸解釋是gcc版本的問題,總之是沒有搞定,如果你是新手有不想折騰的話建議使用8.04的版本

首先要完善編譯環境,內核的要稍微多一點,命令:sudo apt-get install build-essential kernel-package   libncurses5-dev

其次要選取新內核( http://www.kernel.org/pub/linux/kernel/),click支持的最新的內核linux-2.6.24.7,我們就使用她咯。將新內核解壓後,進入新內核,如果之前編譯過,首先運行命令 sudo make mrproper清理一下之前編譯的餘孽~~~

接下來我們要爲新內核打上click的補丁了,運行命令 patch -p1 < ../click-1.8.0/etc/linux-2.6.24.7-patch 千萬別忘記這一步噢,要不然內核編譯就白忙活了。。。。

下一步:配置內核,關於內核配置的詳細說明可以參考金步明的文獻,講的很詳細。。。在這裏運行命令 make menuconfig 選擇時要注重Network的選擇。。。

如果嫌麻煩,可以在運行命令前運行命令cp ../config-2.6.24.7 ./.config 將你之前的內核配置選項copy過來,然後運行make menuconfig後出現的界面裏,選擇加載。

編譯並安裝內核了

運行命令 make -j && make bzImage && make modules -j
&& make install && make modules_install

下一步將生成的initrd文件

mkinitramfs -o initrd.img-2.6.24.7 2.6.24.7

最後一步更新grub。。進入目錄/boot/grub 運行命令 sudo update-grub 搞定。。

重啓進入新內核安裝click,跟用戶態安裝一樣 ./config ; sudo make ;  sudo make install。

ok,如果安裝沒有什麼問題的話,接下來就對click的簡單的應用進行介紹了,在閱讀下面內容之前希望你先瀏覽一下click網站中elements的介紹,以及click的論文。

click配置文件的編寫,在click文件夾中有關於click配置文件的例子,大家可以自己研究裏面的例子進行書寫自己的配置文件,我主要介紹一下初學者比較不太容易發現的東西,減少大家入門的時間,把更多的精力放在研發上

1.clicky工具的使用。click開發團隊開發了clicky這一圖形化工具,clicky工具的安裝只能在核心態進行,具體的安裝步驟可以參考readme文件,裏面有很詳細的介紹,我就不多說了。clicky的使用也很簡單,跟click命令一模一樣。。。。

2.數據包時延的統計。click中自帶的element可以統計數據包的時延,這兩個element分別是SetTimeStamp 和TimeStampAccum(貌似是,可以參考click網站element對timestamp的介紹中找到他們)。使用方法如下:

1)配置文件test.click s0:RatedSource(\<DATA><08000000000000000000000000000>,1000,100)->SetTimeStamp->Queue()->router::DRRSched()->t::TimeStampAccum->DIscard;

2) 運行命令 click -h t.time -h t.average_time -h t.count  test.click

此命令獲得了s0產生的數據源經過DRR調度算法後的所有數據包的時間,每個數據包的時延、數據包的個數

3 統計丟包情況

1)配置文件 test1.click

   s0::RatedSource(\<DATA><0800000000000000000000000000>,1000,1000);

 s1::RatedSource(\<DATA>08111111111111111111111111111>,1000,1000);

s0->q0::Queue(10)->[0]router;

s1->q1::Queue(10)->[1]router;

router->Discard;\

2)運行命令 sudo click -h q0.drop -h q1.drop test1.click。

獲得每個隊列的掉包數目

。。。。其他的一些應用暫時還沒有發現,如果有發現的歡迎補充哦

可能只用click提供的element不能夠滿足應用,我們要自己寫element。。寫之前我覺得很有必要看一下click網站的api文檔,然後自己對click提供的一些element的源碼進行研究,先看懂了再寫。。。

第一步,編寫你自己的組件(Element)類。

每一個組件類應該由兩個C++源文件構成,file.cc和file.hh。對於剛接觸Click的用戶,一個方便的創建自己組件類的方法,就是複製一個已經存在的組件,然後改變這個C++的名字,然後至少改變這些函數:

const char *class name()const;//返回Element類的名字

void push(int i,Packet *);//處理輸入端口i的push請求

Packet* pull(int i);//處理輸入端口i的pull請求

Packet* simple ( );//適用於不定型的Element

int configure(Vector<String>&,ErrorHandler *)//處理配置參數

Void add handler();//構造一個Element手柄

int initialize(ErrorHandler *);//

void cleanup(CleanupStage); ∥清理Element狀態

在編寫一個新的包處理組件的時候,主要考慮兩個問題:

(1)該組件完成什麼處理功能。這個在實現時可放在push()函數或者pull()函數或者simpleAction()函數裏完成。這是該組件的核心功能,我們的大部分代碼都會在這裏實現。

(2)該組件接不接收用戶參數,應該接收什麼類型用戶參數。我們可以根據組件的功能需求來決定這個問題,然後在具體代碼實現中,我們只需要改動的部分是int configure(Vector<String>&,ErrorHandler *)函數。

當寫好你的組件類,不要忘記你的C++文件以下列語句結尾:EXPORT ELEMENT(class name)其中的class name代表具體的組件類名。該語句的作用是告訴編譯器將我的自定義組件類給編譯進Click系統。

第二步,當你完成你上面的步驟以後,把你的Element放到“click-1.8.0/eleme

nts/”目錄下的stands文件夾裏或者放到你自己新創建的文件夾,比如myElement。

如果是放在stands文件夾中,直接跳過第三步。如果是放到自己創建的文件夾中,則進入步驟三。

第三步,進入click-1.8.0/elements/myElement目錄下,運行sudo ./configure--enable-myElement 命令。此命令的作用是告知編譯單元在編譯時加載此文件夾。

第四步,運行“make elemlist”語句,將新編寫的Element添加到elements.conf文件中。

第五步,運行“make install”,如果沒有出現錯誤信息,那麼添加自己Element的工作結束,可以在配置模塊使用此Element,進行功能和性能上的測試。如果出現錯誤信息,則根據錯誤提示信息,對自己的Element的代碼進行修改。

發佈了17 篇原創文章 · 獲贊 3 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章