OSPF移植总结
北京华环电子 任晓亮
1. ospf协议介绍
Quagga软件原名是Zebra是由一个日本开发团队编写的一个以GNU版权方式发布的软件。Quagga项目开始与1996年,当前版本是0.98.4版 可以使用Quagga将linux机器打造成一台功能完备的路由器。
Quagga支持的路由协议
Quagga能够同时支持RIPv1、RIPv2、RIPng、OSPFv2、OSPFv3、BGP-4和 BGP-4+等诸多TCP/IP协议。其中:
RIPv1、RIPv2、OSPFv2适用于Ipv4的自治域系统内部网络路由协议。
BGP-4是用于Ipv4的自治域系统之间的外部网络路由协议。
RIPng、OSPFv3、BGP-4+主要扩展对Ipv6的支持。
Quagga的特性
模块化设计:Quagga基于模块化方案的设计,即对每一个路由协议使用单独的守护进程。
运行速度快:因为使用了模块化的设计,使得Quagga的运行速度比一般的路由选择程序要快。
可靠性高:在所有软件模块都失败的情况下,路由器可以继续保持连接并且daemons也会继续运行。故障诊断不必离线的状态下被诊断和更正
支持Ipv6:Quagga不仅支持Ipv4,还支持Ipv6。
Quagga的运行机制
由于Quagga采用模块化的设计,因此Quagga运行时要运行多个守护进程,包括ripd ripngd ospfdospf6d bgpd 和Zebra。
其中,Zebra守护进程用来更新内核的路由表,而其他的守护进程负责进行相应路由选择协议的路由更新。
2,源码下载地址
http://download.chinaunix.net/download/0009000/8746.shtml
ncurses-5.9.tar.gz
readline-6.3.tar.gz //支持库,命令行操作库,路由配置的时候需要在登陆路由器
quagga-0.99.23.tar.gz //路由源码
quagga编译配置:
renxl@icserver:~/work/nios-kernel/software_cross/zebra/quagga/quagga-0.99.23$
./configure--enable-user=root --enable-group=root --enable-vty-group=root--prefix=/home/renxl/work/nios-kernel/software_cross/zebra/quagga/quagga-0.99.23/release/--host=nios2-linux-gnu CC=nios2-linux-gnu-gcc
./configure--host=nios2-linux-gnu CC=nios2-linux-gnu-gcc --enable-user=root--enable-group=root --prefix=$PWD/_build
Readline编译配置:
在nios平台交叉编译libreadline库
一、配置
./configure--enable-shared --prefix=/home/renxl/work/nios-kernel/software_cross/zebra/quagga/readline-6.3/release/--host=nios2-unknown-linux CC=nios2-linux-gnu-gcc CFLAGS=-static--enable-static --build=nios2-linux --cache-file=nios2-linux.cache
报错:
checkingfor wcwidth broken with unicode combining characters... configure: error: in`/home/fangshuai/work/zebra/libs/readline-6.3':
configure:error: cannot run test program while cross compiling
原因:
configure脚本验证编译工具是通过编译并运行一个测试程序。由于是交叉编译,当然是运行不了的。
解决方法:
打开configure文件找到报错的地方如下:
01 | { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wcwidth broken with unicode combining characters" >&5 | |
02 | $as_echo_n "checking for wcwidth broken with unicode combining characters... " >&6; } |
03 | if ${bash_cv_wcwidth_broken+:} false; then : | |
04 | $as_echo_n "(cached) " >&6 |
05 | else | |
06 | if test "$cross_compiling" = yes; then : |
07 | { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 | |
08 | $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} |
09 | as_fn_error $? "cannot run test program while cross compiling | |
10 | See \`config.log' for more details" "$LINENO" 5; } |
可见变量bash_cv_wcwidth_broken,我们可以利用cache文件将该变量置真:
echobash_cv_wcwidth_broken=yes > nioslinux.cache
重新执行configure:
二、编译:make
三、导出编译成果:makeinstall
四、测试验证:
将编译出的动态库与静态库拷贝到交叉编译工具目录下,将include下的readline目录拷贝到交叉编译工具的include目录下。
随便写个程序,test.c
编译下试试:nios2-linux-gnu-gcc test.c -o test -lreadline
恭喜你编译不过是不是 - -!
是的,还需要ncurses,
试下:nios2-linux-gnu-gcc test.c -o test -lreadline -lncurses
还是编不过对不,还得交叉编译ncurses。下一篇再说
3. 内核配置
Kernel/Library/DefaultsSelection --->
[*] Customize Kernel Settings->
[*] Networking support --->
--- Networking support
Networking options --->
4. 打开内核转发功能
在启动脚本里加入下面一行:
echo1 >/proc/sys/net/ipv4/ip_forward
5. 启动脚本
start()
{
echo "start zebradaemon..."
zebra -d -f/etc/quagga/zebra.conf -i /etc/quagga/zebra.pid -z /tmp/quagga -k -P 2601 -r -uroot -g root
echo "start ospfddaemon..."
ospfd -d -f/etc/quagga/ospfd.conf -i /etc/quagga/ospfd.pid -z /tmp/quagga -P 2604 -u root-g root -a
}
启动参数:
-f 配置文件,-i 进程pid , -z 网络通信接口,-p 服务登陆端口号