guagga入门-我们的虚拟化方案

来源:互联网 发布:淘宝店铺名称修改次数 编辑:程序博客网 时间:2024/05/01 08:33
guagga的虚拟化最早的版本是建立在6win的在github上的开源项目。所以在虚拟化版本中我们实际上是使用的6wind的github版本,后来发现在最新的官方版本中,将6wind已经合入到主线版本中了,所以后来我们的虚拟户又是基于官方的最新版本1.1.0
新的虚拟化主要思路:
1。通过添加enable vrf xxx来进入不同vsys的配置视图,在自己的视图下只配置和显示自己的资源;
2。与server虚拟化的思路一致,使用全局变量来标识当前系统处理那个vsys。
3。在关键点切换vsys,因为zebra ospf的进程是单线程的。所以在每次关键事件发生的时候切换全局变量即可;
虚拟化关键点:
1。thread_call 、thread_get
之前说过一个thread其实是对应一个fd的事件,这个fd属于那个vsys其实是固定的不会发生变化,在加入事件的时候,就把这个vsys信息放在thread的结构体中,在调用thread_call执行具体的函数的时候,恢复这个全局的vsys信息;
2。命令行的虚拟化
一个命令行对应的是一个终端vty结构体,这个vty同一时间只会属于一个vsys,而这个vsys信息是在enable的时候手动传入的。我们常用的命令都是在执行enable vrf xxx命令之后;所以vsys信息保存到vty结构体中,在执行其他命令行回调之前恢复vsys信息;
3。zclient虚拟化
ospfd与zebra进行交互的时候,例如zebra通知ospfd添加了接口,这个时候ospfd需要知道这个接口是属于那个vsys的,所以在zclient对应的回调的时候,也需要根据zebra传来的消息来实现vsys的切换;
对于rip ospfd这类的程序,可能自己有一些虚拟化的工作在切换时进行处理,所以需要添加上面三个事件对应的回调函数

这三个函数就是关键的回调函数,每个client程序自己去实现;
虚拟化相关的主要内容定义在vrf.c中;
兼容层:
虚拟化之前的程序,修改完成动态路由的配置xml文件后,通过脚本转换成zebra的conf配置文件。然后重启zebra;
新的虚拟化方案:不能重启zebra程序;解决方案:
配置放在zebra中,通过命令行执行show rip xml来把配置文件从conf转换到xml文件输出。
web配置不再修改xml文件,而是直接转换成cli命令来执行;
总结:
1。添加了上面三个事件的回调,以及这三个事件发生时vsys需要切换;
2。对于数据结构进行了虚拟化,使用数组方式,根据全局变量取自己信息;
3。一些数据组织的方式采用的是链表。例如ospf rip这类型的程序;
4。每个vsys一个配置文件。
5。web配置时不写xml,转换成cli命令配置ospfd程序;
6。修改ospf支持show ospf xml形式,web获取配置也调用命令,显示兼容之前的操作。

0 0
原创粉丝点击