前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ONOS中Juniper路由器Driver开发简介

ONOS中Juniper路由器Driver开发简介

作者头像
SDNLAB
发布2018-03-30 14:55:48
1.3K0
发布2018-03-30 14:55:48
举报
文章被收录于专栏:SDNLABSDNLAB

简介

根据SDN的实现深度,可将其分为狭义SDN与广义SDN。其中,狭义SDN是指基于OpenFlow协议,将转发面和控制面完全分离的革命性SDN。广义SDN是指数据包转发依然基于现有设备上的协议,但将网络的部分控制功能上移到控制端,是一种既能利用现有网络设备,又能获取SDN部分优点的演进型SDN。

广义SDN因其高效、颠覆性,受到学术界及创业公司的关注。而对于传统设备厂商和运营商来说,不太可能短时间内,大范围地将现有设备替换为OpenFlow设备。因此,对于传统运营商来说,演进型SDN的研究部署同样迫切。

中国科技网是由中科院计算机网络中心负责运营的,学术性、非盈利性互联网基础设施。在全国部署上百个骨干、接入节点,同时拥有多条通往美国、日本和韩国等国际出口,是中国主要的互联网运营商之一。

科技网中网络设备的提供厂商较多,比如Cisco、Juniper、华为和华三。当前用独立分散的方式对网络设备进行管理,比如,当路由器执行新的防火墙或路由规则时,需要SSH登陆路由器进行手动配置。网络设备多而杂,这样的人工配置方式耗费人力,且易出错。利用广义SDN的思想,对网络设备进行统一自动管理是科技网在自动化运维方面的尝试。

目前,我们基于ONOS控制器进行二次开发,对juniper测试路由器进行集中控制,执行防火墙限速等功能。ONOS中主要通过NETCONF协议远程读取、修改网络设备配置,所以我们也基于NETCONF协议来实现对Juniper路由器的管理。主要工作分为如下几部分。

1 在ONOS中开发juniper路由器的简单driver,链接路由器。

2 进一步在driver中添加所需功能,比如实现XML文件解析,利用NETCONF协议下发相关XML文件,执行基本配置读改、设置防火墙限速等动作。

3 在命令行下发模块(cli)中,开发新的执行命令,使得用户可在命令行中执行2的动作。

4 由三台juniper测试路由器,组成测试demo,验证相关功能。

相关实现代码已开源:https://github.com/CNICCSTNET/OpenJuniperDriver

下面对上诉工作进行详细介绍。

前期准备

ONOS中基于NETCONF协议对路由器配置进行远程控制,由于之前对NETCONF协议不太熟悉,首先学习了NETCONF协议,并用分别用NETCONF协议的Python函数库(ncclient),和juniper的NETCONF Java Toolkit实现了简单读取和修改路由器配置的小程序。升级路由器,使其支持NETCONF协议。同时学习juniper路由器的配置命令,弄清实现不同命令时NETCONF协议下发的XML文件。 相关的学习链接如下:

NETCONF RFC6241:https://tools.ietf.org/html/rfc6241

ncclient:https://pypi.python.org/pypi/ncclient

NETCONF Java Toolkit:http://www.juniper.net/techpubs/en_US/junos14.2/information-products/pathway-pages/netconf-java-toolkit/netconf-java-toolkit.html#overview

一 、Driver初步实现,链接路由器

1.1 新建juniper APP

ONOS需要不同的Driver来对不同设备厂商的设备进行控制,在ONOS中开发driver的步骤跟实现一个普通APP的过程相识。具体可参见ONOS的wiki或者毛健炜同学的博客:

https://wiki.onosproject.org/display/ONOS/Creating+and+deploying+an+ONOS+application

http://maojianwei.github.io/2015/11/24/ONOS-in-Practice-for-Share-one-Project-Set-up-Debug-Hot-Deployment/

1.2 修改pom.xml等文件

建好名字为juniper的APP后,将其移动到onos/drivers/目录下,并修改onos/drivers/juniper目录下的pom.xml文件:

同时修改onos/drivers/下的pom.xml文件,添加juniper module,使得编译drivers模块时,也编译juniper的driver:

在drivers/juniper/src/ 目录下,新建resources文件夹,并新建一个juniper-drivers.xml文件,用于存储juniper驱动的相关调用关系。目前是空的,在后面实现具体修改路由器配置时,可添加ONOS中api接口和具体实现的对应关系。

新生成一个导入juniper-drivers.xml文件的java文件JuniperDriverLoader.java,放在onos/drivers/juniper目录下:

1.3 编译并启动drivers

在drivers目录下,执行mvn clean install编译后,重启ONOS。执行如下命令,启动相关的drivers APP:

若APP启动成功,则执行drivers命令。可以看到我们的juniper 及 NETCONF的driver都启动成功:

1.4 链接路由器

在tools/test/configs目录下,生成netconf-cfg-juniper.json文件,作为链接juniper路由器时的读入文件。此文件定义了接入设备的名称,调用的driver,及用于NETCONF协议登陆的用户名和密码,路由器的IP和通信端口号。其中,830是NETCONF协议的固定通信端口号。

我们的juniper driver继承了NETCONF driver,调用NETCONF协议(onos/protocols/netconf)中的方法实现和路由器的通信。ONOS为利用NETCONF driver,链接远程路由器实现了相关命令onos-netcfg。我们也可以通过此命令,将juniper路由器和ONOS中的juniper driver相链。

ONOS中NETCONF相关的wiki链接:https://wiki.onosproject.org/display/ONOS/NETCONF

链接路由器成功后,在ONOS中执行devices命令,可查看到此路由器已经通过NETCONF协议和控制器相连。

至此,我们juniper的driver开发已初步完成,通过此driver,成功将路由器和ONOS控制器链接。下面我们将在此driver上,增加用于解析NETCONF协议中XML文件的类,并通过下发相关XML文件,实现读取并修改juniper路由器的功能。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-11-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 SDNLAB 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云开发 CloudBase
云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档