1. 简介

Honeycomb 是基于 Java 开发的一个数据平面管理代理 (Data Plane Management Agent) 框架,为 VPP 提供了 RESTCONF 和 NETCONF 的北向接口,实现了VPP与SND控制器 (ODL)的集成。关于 Honeycomb 请参考Hc2vpp 项目,Hc2vpp 项目曾经是 Honeycomb 项目的一部分,在1.17.01版本中 Honeycomb 项目分解为generic (honeycomb) 和 与 vpp 相关的部分(Hc2vpp)。
Honeycomb - 图1

2. Honeycomb 与 VPP

Honeycomb 使用了高性能共享内存接口与 VPP 进行对接,并向 ODL 提供由 YANG 模型定义的 RESTCONF 和 NETCONF 北向接口。因此,Honeycomb 实际上是由 ODL 的一些模块和工具建立的框架,包括:YangTools、MD-SAL、Netconf和Restconf。
image.png

Honeycomb 的核心功能主要提现在数据处理层 (Data processing layer) 和转换层 (Translation layer) 上。
数据处理层实现了 OLD 中用于数据事务处理操作的 DataBroker 接口,由于与实现语言无关,且仅使用 DOM 类型的 YANG 模型结构表示。这使得其具有通用性,因为不依赖于 YANG 模型生成的代码,所以也称其为绑定独立(BI, Binding-Independent) 。除此之外,数据处理层很容易与 ODL 的 NETCONF 和 RESTCONF 北向服务器进行连接。转换层提供了 Honeycomb 自定义的接口,使用了绑定感知 (BA, Binding-Aware) 的YANG 模型结构生成的 Java 代码实例。
Honeycomb 需要 VPP 的接口才能实现调用。因此,VPP 提供了底层的共享内存接口,而 VPP 之上的 JVpp 提供了适用于 Java 的接口。JVpp 是基于 JNI 的,借助 VPP 接口,从而使任何 JVM 程序都可以监管 VPP。

下图展示了 Honeycomb 的内部结构:**
image.png

Honeycomb 的配置写入过程如下图所示:
image.png

Honeycomb 的操作读取过程如下图所示:
image.png

3. 安装

Installing from available binary packages
Installing from available archives

官方提供了 honeycomb 的压缩文件,在 Honeycomb’s nexus 服务中找到 vpp-integration-distribution ,然后下载 .zip 或 .tar.gz 压缩文件。 解压之后,进入目录 vpp-integration-distribution- 中,执行脚本即可运行。

4. 启动

(1) 如果是下载的 honeycomb 的压缩文件,可以直接解压并运行包中脚本即可,这种方式启动 honeycomb 将会自动初始化 JVpp。

  1. # 进入相应版本的目录中
  2. sudo ./vpp-integration-distribution-<version>/honeycomb

(2) 如果是采用RPM或者DEB包安装的方式,可以通过如下方式启动:

  1. # honeycomb 在 /opt/honeycomb 目录中
  2. sudo service vpp start
  3. sudo service honeycomb start

成功启动会输出日志:

  1. 2020-07-21 14:34:48.831 CST [main] INFO i.f.h.i.d.i.InitializerRegistryAdapter - Config initialization started
  2. 2020-07-21 14:34:48.858 CST [netconf-netty-1] INFO o.o.n.ssh.NetconfNorthboundSshServer - Netconf SSH endpoint started successfully at 0.0.0.0
  3. 2020-07-21 14:34:48.890 CST [main] INFO i.f.h.i.d.i.InitializerRegistryAdapter - Persisted context restored successfully
  4. 2020-07-21 14:34:50.001 CST [main] INFO i.f.h.i.d.i.InitializerRegistryAdapter - Configuration initialized successfully
  5. 2020-07-21 14:34:50.016 CST [main] INFO i.f.h.i.d.i.InitializerRegistryAdapter - Persisted configuration restored successfully
  6. 2020-07-21 14:34:50.016 CST [main] INFO i.f.h.i.d.i.InitializerRegistryAdapter - Honeycomb initialized
  7. 2020-07-21 14:34:50.016 CST [main] INFO io.fd.honeycomb.infra.distro.Main - Configuration initialized successfully
  8. 2020-07-21 14:34:50.016 CST [main] INFO io.fd.honeycomb.infra.distro.Main - Honeycomb started successfully!

5. 测试

user_running_honeycomb

(1) 通过如下方式,使用SSH测试其NETCONF北向接口是否能够调用NETCONF用户/密码默认为 admin/admin,端口号为2831,其配置在 vpp-integration-distribution-/config 目录中。

  1. ssh admin@localhost -p 2831 -s netconf

(2) 接下来通过 hello 初始化 NETCONF 会话,将下面的代码复制到 SSH 会话中,然后回车即可,这一步是没有任何响应的。

  1. <hello xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
  2. <capabilities>
  3. <capability>urn:ietf:params:netconf:base:1.0</capability>
  4. </capabilities>
  5. </hello>
  6. ]]>]]>

(3) 和上一步相同,这一步会获取到所有的VPP配置信息。

  1. <rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="101">
  2. <get-config>
  3. <source>
  4. <running/>
  5. </source>
  6. </get-config>
  7. </rpc>
  8. ]]>]]>

(4) 该步骤能够获取到VPP的所有可操作数据。

  1. <rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="101">
  2. <get/>
  3. </rpc>
  4. ]]>]]>

(5) honeycomb 也支持 Notifications/NETCONF,通过下面的代码测试该功能。

  1. <netconf:rpc netconf:message-id="101" xmlns:netconf="urn:ietf:params:xml:ns:netconf:base:1.0">
  2. <create-subscription xmlns="urn:ietf:params:xml:ns:netconf:notification:1.0">
  3. <stream>honeycomb</stream>
  4. </create-subscription>
  5. </netconf:rpc>
  6. ]]>]]>

(6) VPP的接口状态可以使用以下命令进行修改:

  1. telnet 0 5002
  2. set interface state local0 up

6. 使用示例

7. 相关链接

Cisco VPP入门(一)——VPP源码编译与安装
Cisco VPP入门(二)—— VPP源码目录介绍
Cisco VPP入门(三)——VPP启动配置及常用命令
Cisco VPP入门(四)——VPP示例插件编译运行
VPP专栏

VPP使用详解——基于VPP的VLAN配置

https://github.com/marosmars/honeycomb-samples