2010-04-12 搞定万恶的隧道模块

今天上午加下午,按照学长的要求修改了隧道模块,而且调试通过了。

修改主要是去掉其他的模块,而且重新写了ioctl()函数。经过这次编写,终于感觉到内核编程的繁琐,不是复杂,而是繁琐,很多平时经常使用的函数都不可以使用。刚开始的时候想把源地址和目的地址固定了,结果发现内核不支持地址格式转化的函数,后来只好另外写了个函数,把我们熟悉十进制格式的地址转化成二进制的地址才行了。

接着是编写ioctl的函数,还是比较好写,ioctl函数有三个参数,一个是struct net_device*是指向设备的指针,另外一个是struct ifreq*是消息的载体,还有一个int类型的cmd参数。

struct ifreq中有两个主要的部分,一个是ifr_name,是255长度的字符串,记录的是设备的名字,在结构体中给出ifr_name,系统就会去查找这个名字的设备并和它通信,另外一个是ifr_data,是一个没有类型的指针,一般就在这个指针里面定义执行命令所需要的东西,比如隧道的源地址和目的地址。通过一个自定义的结构传送进去。

cmd就是给一个设备的命令的类型,一般从SIOCDEVPRIVATE~SIOCDEVPRIVATE +15的范围是自己定义。另外还有SIOCGIFFLAGS,是表示获得接口标志(这个不太明白,需要继续看看)。

另外就是今天把那个不清不楚的neighbour给删除了,完全不知道那是个什么东西,但是什么时候都没有发生,估计没有什么用吧。

今天有时间看看那个Dhcp配置怎么样,然后看看Dynamo。

posted @ 2010-04-12 17:13  wudanzy  阅读(275)  评论(0)    收藏  举报