嵌入式平台,软路由器-OSPF移植总结

来源:互联网 发布:股票模拟练习软件 编辑:程序博客网 时间:2024/03/29 16:01

                         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 服务登陆端口号

0 0
原创粉丝点击