ONOS中Juniper路由器Driver开发简介

简介

根据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路由器的功能。

原文发布于微信公众号 - SDNLAB(SDNLAB)

原文发表时间:2016-11-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大数据

Kafka详细的设计和生态系统

Kafka 的核心是经纪人,主题,日志,分区和集群。核心也包括像 MirrorMaker 这样的相关工具。前面提到的是 Kafka,因为它存在于 Apache ...

1.1K10
来自专栏玄魂工作室

CTF实战9 XSS跨站脚本漏洞

该培训中提及的技术只适用于合法CTF比赛和有合法授权的渗透测试,请勿用于其他非法用途,如用作其他非法用途与本文作者无关

18430
来自专栏互联网杂技

程序员保证能笑出腹肌

客户需求 vs 最终产品 ? requirements vs. implementation 程序员的一天 ? The Programmers life 寂寞...

39070
来自专栏技巅

linux内核崩溃问题排查过程总结

64340
来自专栏吾爱乐享

php学习之html案例(九)

17920
来自专栏后端技术探索

接上篇-nginx-http-flv-module更新说明(二)

最近这段时间主要在不同平台测试模块的稳定性,目前播放这一块没发现问题,由于条件限制,除了FreeBSD平台没测试过,Windows 7,Debian 7.x和m...

30520
来自专栏Java帮帮-微信公众号-技术文章全总结

Java微信支付【面试+工作】

Java微信支付【面试+工作】 微信支付文档上有刷卡支付,扫码支付,公众号支付,APP支付等各种支付手段。本次就微信内打开的网页支付为例子,用java进行实现一...

73550
来自专栏ImportSource

NoSQL-ReadConsistency-读取一致性

翻译内容: NoSQL Distilled 第五章 Consistency 一致性 作者简介: ? 本节摘要: 一致性向来是分布式...

34950
来自专栏FreeBuf

反入侵之发现后门利用mount-bind将进程和端口信息隐匿

0x00. 前言 作为一名安全工程师,日常工作中会经常遇到网站遭遇入侵,甚至被植入后门,如何去发现后门,进而对入侵进行调查取证都是一名优秀的安全工程师必备功课,...

38860
来自专栏xingoo, 一个梦想做发明家的程序员

Oracle二三事之 EBS升级

  原文转载:http://tech.it168.com/a2012/1121/1425/000001425400.shtml   对于初次执行这个过程的人而言...

29270

扫码关注云+社区

领取腾讯云代金券