Click Modular Router

孟鸿德
2023-12-01

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的代码进行修改。

 类似资料:

相关阅读

相关文章

相关问答