ONOS编程系列(一)之简单应用开发

2023-05-16

ONOS编程系列(一)之简单应用开发
北京石头  15-04-17 10646 人围观

一个ONOS application是使用maven做管理的OSGi bundle。 因此,ONOS application 可以归结为Java类和POM文件的集合。本教程以基于intent的交互式转发application为例,讨论了如何从零开始建立一个新应用。
本教程假设读者已经具备ONOS的运行经验,能够熟练启动ONOS实例。有关ONOS的启动不做过多描述。如果出现启动上的问题,请移步官方wiki文档自行寻找答案。
本文章结束后,你应该学会:

  • 应用的组织与结构;
  • 如何在多个服务中注册你的应用;
  • 北向API的基本应用;
  • 如何运行一个应用。

一、在Eclipse中导入工程

直接按照maven项目导入就可以,详情请见ONOS环境部署。

1.1 注意

在ONOS项目中,对代码有着格式上的一些要求,不管是正式代码,还是测试用例。请根据要求修改增加代码的格式。
如果想要跳过代码checkstyle,可以在onos项目根目录下的pom。xml文件中,注释掉关于checkstyle的plugin:

不过非常不建议这样做。最好的方法还是按照官方的要求,进行编程。关于代码格式检查,如果使用的是Eclipse,可以配置checkstyle进行检查:
一路点击eclipse-->help-->Eclipse Marketplace,进入界面:

在输入框里输入“checkstyle”,然后选择框住的那个插件进行傻瓜式安装,就是一路next。这个过程很有可能会报错,Eclipse提示找不到下载网址。如果这种情况,可在http://eclipse-cs.sourceforge.net/update/这个地方下载,在本地安装就可以了。
安装好以后,在window-->preference弹出的界面里就能看到checkstyle的选项了。单击该选项,右面出现相关界面:

然后点击NEW按钮,增加一个checkstyle文件,在本地ONOS工程里找到onos自己的checkstyle文件,别忘记起个名字。

然后就能在checkstyle文件列表里看到刚刚新添加的文件了。我给它的命名是ONOS。接下来选中该项,点击右边的“Set as Default”,再点击OK,就大功告成了。

后面再新加的文件任意处右键,就能在菜单列表里看到checkstyle的选项了。只需要点击“Check Code with Checkstyle”,就能检查本文件的代码格式是否符合onos的要求了。

二、项目骨架

2.1 设置项目的目录结构

应用的根目录设置在apps/之下:

Shell
1
$ mkdir - p $ { ONOS_ROOT } / apps / ifwd

应用的源文件定义在src/main/java/之下:

Shell
1
  $ mkdir - p $ { ONOS_ROOT } / apps / ifwd / src / main / java / org / onosproject / ifwd

类似的,测试文件定义在src/test/java/之下:

Shell
1
$ mkdir - p $ { ONOS_ROOT } / apps / ifwd / src / test / java / org / onosproject / ifwd

2.2 添加并编辑pom文件

在应用的根目录/apps/ifwd/下编辑pom文件:

在本例中,应用的名字是onos-app-ifwd。在启动karaf/ONOS命令行界面以后,直接用feature:install加上名字,即可安装此应用。
然后,编辑apps/pom.xml,在文件中以形式包含该项目:

2.3 在karaf中注册该应用

Karaf在运行时若要部署该应用module,需要名为feature.xml的描述性文件,编辑 ${ONOS_ROOT}/features/features.xml:

三、完成项目代码

该应用的核心是名为 IntentReactiveForwarding.java的文件,被定义在${ONOS_ROOT}/apps/ src/main/java/org/onosproject/ifwd/ 里。
为了便于对文档进行注释,在main/java/下需要添加一个package-info.java文件,其包含一下内容:

一般IDE会提供生成这个文件的选项。Eclipse在新建包的时候会提供该选项:

剩下的部分将会描述如何编辑IntentReactiveForwarding类。

3.1 注册Karaf,使其自动加载

karaf的模块加载机制需要几个annotations,即注解,去注册。可用的注解尤其是以下四个尤为重要:

  • @Component(immediate = true) - declares a class as a component to activate, and forces immediate activation;
  • @Activate - marks a method as the method to call during the component startup routine;
  • @Deactivate - marks a method as the method to call during component shutdown;
  • @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) - Marks a service as an application's dependency,and requires one instance of such a service to be loaded before this application's activation.

3.2 注册服务

接下来,我们的应用必须使用CoreService注册一个独一无二的application ID,这样才能够使该应用正常使用ONOS的其他服务。我们的应用接下来还要使用PacketService监听PacketIn和PacketOut事件。而PacketService需要一个事件处理器的类,该类用途单一,通常写在其所属类的内部,成为其私有内部类:

3.3 增加包处理代码

在上一步的私有内部类ReactivePacketProcessor里,要覆写扩展自接口PacketProcessor的方法process()。每当有网络包进来的时候,PacketService都会调用一下process()函数。这意味着我们可以在这个方法里定义我们自己的包转发行为:

接下来我们要实现上图中用到的三个方法,注意,这些方法定义在私有内部类的外面,是IntentReactiveForwarding的成员:

3.4 编译该应用

进入ONOS根目录,键入“mvn clean install”,等待编译结果。
这个时候通常的结果就是BUILD SUCCESS。

当前最有可能遇到的问题,就是checkstyle的时候出现了错误,实在不想改代码了,可以直接注释掉checkstyle的plugin。

3.5 启动该应用

启动分为动态启动与静态启动:
动态启动就是用karaf clean命令启动onos之后,在onos命令行下键入feature:installonos-app-ifwd命令安装该应用。
静态启动就是修改karaf的启动配置文件。该文件路径为${KARAF_ROOT}/etc/org.apache.karaf.features.cfg,直接将onos-app-ifwd字样缀到featuresBoot变量的尾部即可。
启动并加载该应用以后,可已键入:

Shell
1
feature : list - i | grepifwd

命令查看是否已安装该应用。

该应用安装以后,并不能对其做什么操作,也无法看到它的运行情况,这时我们就需要将该应用扩展为一种服务,以便于其它服务或者应用与其交互,并且需要新建一条karaf的命令,用于展示当前应用的相关信息与状态。


尊重劳动成果,以上转载自:http://www.sdnlab.com/10609.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ONOS编程系列(一)之简单应用开发 的相关文章

  • 【theano-windows】学习笔记十——多层感知机手写数字分类

    前言 上一篇学习了softmax 然后更进一步就是学习一下基本的多层感知机 MLP 了 其实多层感知机同时就是w x 43 b用某个激活函数激活一下 得到的结果作为下一层神经元的输入x 类似于 o u t p u t 61 f 3 f 2
  • 【theano-windows】学习笔记二十——LSTM理论及实现

    前言 上一篇学习了RNN xff0c 也知道了在沿着时间线对上下文权重求梯度的时候 xff0c 可能会导致梯度消失或者梯度爆炸 xff0c 然后我们就得学习一波比较常见的优化方法之LSTM 国际惯例 xff0c 参考网址 xff1a LST
  • 【TensorFlow-windows】keras接口——ImageDataGenerator裁剪

    前言 Keras中有一个图像数据处理器ImageDataGenerator xff0c 能够很方便地进行数据增强 xff0c 并且从文件中批量加载图片 xff0c 避免数据集过大时 xff0c 一下子加载进内存会崩掉 但是从官方文档发现 x
  • 梯度下降法与Logistic Regression 及 Matlab 代码

    梯度下降法与Logistic Regression 及 Matlab 代码 前言Logistic回归梯度下降法例子1 xff0c 固定学习率改进1 xff1a 正则化改进2 xff1a 动态学习率查看分类效果不足完整代码 前言 本质是一个求
  • ONOS 控制器安装和app新建和编译

    1 1 ONOS 控制器编译与安装 ONOS 1 8 版本起强制使用 BUCK 构建工具 xff0c 不再使用 maven xff0c 编译和打包方式与旧版本有所区别 步骤 xff1a 配置环境 gt 下代码 gt 编译 gt 运行 配置环
  • SQLyog(navica)连接docker容器中的mysql8.0.12 报错1251或2003解决办法

    使用SQLyog xff08 navicat xff09 远程连接docker容器中的mysql8 0 12 报以下错误 解决办法 xff1a 一 在docker中启动mysql 定义端口号3306 root 64 localhost do
  • TTY 到底是个什么玩意?

    先来回答一道面试题 xff1a 我们知道在终端中有一些常用的快捷键 xff0c Ctrl 43 E 可以移动到行尾 xff0c Ctrl 43 W 可以删除一个单词 xff0c Ctrl 43 B 可以向前移动一个字母 xff0c 按上键可
  • 如何画好一份架构图

    先说答案 画架构图分四步走 xff1a 第一 xff0c 搞清楚要画的架构图的类型 xff1b 第二 xff0c 确认架构图中的关键要素 xff08 比如产品 技术 服务 xff09 xff1b 第三 xff0c 梳理关键要素之间的关联 x
  • NVIDIA Jetson Xavier NX 深度学习相关组件安装

    一 tensorflow的安装 写在前面的牢骚话 xff08 可选择直接跳过 xff09 在写安装tensorflow的教程之前 xff0c 我一定要放出当时我安装tensorflow时所遇到的那些莫名其妙的错误 xff0c 具体错误如下图
  • Python - Decorator(装饰器) - 带参数的

    我们通过以示例来看看带参数的装饰器到底怎么回事 from time import perf counter from functools import wraps def repeated times def outer fn 64 wra
  • 2020塔式起重机司机考试及塔式起重机司机考试软件

    题库来源 xff1a 安全生产模拟考试一点通公众号小程序 2020塔式起重机司机考试及塔式起重机司机考试软件 xff0c 包含塔式起重机司机考试答案解析及塔式起重机司机考试软件练习 由安全生产模拟考试一点通公众号结合国家塔式起重机司机考试最
  • 2020煤炭生产经营单位(安全生产管理人员)操作证考试及煤炭生产经营单位(安全生产管理人员)模拟考试软件

    题库来源 xff1a 安全生产模拟考试一点通公众号小程序 2020煤炭生产经营单位 xff08 安全生产管理人员 xff09 操作证考试及煤炭生产经营单位 xff08 安全生产管理人员 xff09 模拟考试软件 xff0c 包含煤炭生产经营
  • 嵌入式系统 Boot Loader 技术内幕

    内容 xff1a 1 引言 2 Boot Loader 的概念 3 Boot Loader 的主要任务与典型结构框架 4 关于串口终端 5 结束语 关于作者 对于本文的评价 在 Linux 专区还有 xff1a 教程 工具与产品 代码与组件
  • PADS VX2.8 PCB版本的降低方法

    在PCB设计过程中 xff0c 可能会遇到不同版本的PCB文件 xff0c 高版本软件可以兼容低版本 xff0c 反之则不能 为了提高兼容性 xff0c 可以将拿到的高版本PCB文件降低为低版本 xff0c 以配合使用低版本软件打开 打开P
  • Ubuntu16.04 速腾rslidar-32线激光雷达使用详细记录

    0 rslidar 32线激光雷达参数 线束 xff1a 32线波长 xff1a 905nm激光等级 xff1a class1精度 xff1a 5cm xff08 典型值 xff09 测量距离 xff1a 0 2m 200m xff08 目
  • useradd 与 adduser

    useradd 选项 用户名 参数如下 xff1a c comment 指定一段注释性描述 d 目录 指定用户主目录 xff0c 如果此目录不存在 xff0c 则同时使用 m选项 xff0c 可以创建主目录 g 用户组 指定用户所属的用户组
  • Python——sqlalchemy.exc.ArgumentError

    报错信息 xff1a sqlalchemy exc ArgumentError Mapper mapped class XmjbqZby gt xmjbq zby could not assemble any primary key col
  • VirtualBox虚拟机ping不通主机,但是主机可以ping通虚拟机

    解决VirtualBox虚拟机不能ping通宿主机的问题 问题描述 在VirtualBox虚拟中 xff0c 无法ping通宿主机 xff0c 宿主机可以ping通虚拟机 虚拟机的网络已经设置为 桥接网卡 xff0c 也可以正常上网 解决方
  • RTThread-W25Q128的驱动基于SPI和SFUD

    文章目录 前言一 kconfig的配置1 配置对应的SPI和SFUD 二 SFUD的使用W25Q128的读写操作 三 关于写入的问题 前言 本文是一个初学者的学习记录 xff0c 可能有误 SFUD是针对flash的一种通用的组件 xff0
  • RT-Thread 基于QSPI驱动LY68L6400-SRAM

    前言 使用的是RTThread 标准版 xff0c 主控是STM32H743 xff0c SRAM是LY68L6400 xff0c 使用QSPI QSPI和SPI的区别 个人理解最大的区别就是SPI是串行 xff0c 数据输出 xff0c

随机推荐

  • 关于学习RTThread的随笔

    认识操作系统 关于单片机的学习是从51到ARM xff0c 慢慢的接触到了操作系统 xff0c 开始也不明白是什么 xff0c 就跟着原子哥的例程学 xff0c 也不知道哪个好 xff1f 开始学UCOS xff0c 后来又用学了FreeR
  • RT-Thread 串口的使用

    1 配置选用的串口 在kconfig文件中增加ENV的串口选项 xff0c 这边选择的是uart2 menuconfig BSP USING UART bool span class token string 34 Enable UART
  • 关于驱动中景园LCD和LVGL踩的一些坑

    背景介绍 我使用的是中景园的1 3寸 xff0c 240 240的LCD xff0c 主控是STM32L152系列 https item taobao com item htm spm 61 3688y 1 14 16 1916264bJ5
  • 使用物联网卡无法通讯

    在使用阿里云的物联网卡时 xff0c 遇到一个电信卡无法通讯的问题 xff0c 数据只能发不能收 xff0c 后来客服跟踪调查后发现 xff0c 物联网卡有一个IP地址的白名单 xff0c 需要让客服把通讯平台的IP地址加到这个白名单才行
  • ESP32+PIO+LGVL+gui_guider

    简介 本文基于VScode上安装platform插件 xff08 简称PIO xff09 来开发ESP32 xff0c 屏幕显示使用LVGL 43 gui guider 关于VScode上使用platfrom也是一把辛酸泪 很多朋友会安装不
  • ESP32+PIO+LGVL+gui_guider之【BUTTON实体按键】

    LVGL的Button外部按键 这个Button是没有触摸屏的情况下用外部的按键来对应屏幕上的按键 xff0c 比如屏幕上有个确定键 xff0c 你按下外部某个按键 xff0c 屏幕的确定键也相应显示按下 工作原理其实就是LVGL把外部按键
  • KEIL工程报错问题解决记录

    1 no section to be FIRST LAST 在一次下载了别人的工程后 xff08 来自51黑论坛STm32L低功耗测试的一个工程 xff09 xff0c 由于其他工程用的DPF包有所不同 xff0c 记得是按照提示更新了固件
  • Linux——centos7搭建node + Nginx + vue + mysql 的服务安装详细步骤

    一 安装所需的软件 二 进行具体配置 三 使用 以下配置及安装为已运行实测的笔记整理 xff0c 严格按照该步骤进行配置 xff0c 大概率上不会有问题 不懂linux的小白也可配置使用 当然 xff0c 最好还是了解一些linux基本的命
  • ONOS应用示例开发

    ONOS应用示例开发 风继续吹 15 04 09 9239 人围观 本文主要是提供了有关ONOS的基于意图的流量转发应用如何开发 构建及部署等方面的实战经验 xff0c 并且详细讲解了如何在命令行上调用服务的过程 最后 xff0c 介绍了在
  • 测试1234

    String mStaticDns 61 34 static com 34 34 static net 34 34 cdn bcebos com 34 34 pic cn 34 34 pic com 34 34 sina net 34 34
  • ubuntu共享文件夹权限问题

    新建的共享文件夹 xff0c 只有切换成root用户组时才能访问 xff0c 其他用户却没有权限 原因 xff1a 共享文件夹属于vboxsf组 解决方案 xff1a 把当前用户添加到vboxsf组 sudo adduser userNam
  • Bad owner or permissions on .ssh/config的解决

    Bad owner or permissions on ssh config的解决 当为本机配一个固定用户名远程登录某主机时 xff0c 配置了一个config文件 xff0c 但是在执行ssh免密码登录时报如下的错误 xff1a Bad
  • MobiCom‘21

    1 Vaibhav Singh Akarsh Prabhakara Diana Zhang Osman Ya an and Swarun Kumar 2021 A community driven approach to democrati
  • 学习日志之STM32固件库

    对固件库结构的理解 stm32固件库分为4层 xff1a 应用层 xff08 application layer xff09 板级支持包BSP xff08 BSP xff08 board specific package xff09 硬件抽
  • Navicat Premium 15 注册出现 No All Pattern Found! File Already Patched?

    Navicat Premium 注册出现 No All Pattern Found File Already Patched 解决方法方法一方法二 解决方法 方法一 直接打开你的 Navicat Premium 15 再次安装一遍后 xff
  • win10 + Ubuntu 20.04 LTS 双系统安装 (UEFI + GPT)(图文,多图预警)

    原文地址 xff1a https zhangzhicheng com archives 122 html win10 43 Ubuntu 20 04 LTS 双系统安装 xff08 UEFI 43 GPT xff09 win10 安装 xf
  • win10上 Hyper-V 安装 ubuntu20.04

    原文地址 xff1a win10上 Hyper V 安装 ubuntu20 04 win10上 Hyper V 安装 ubuntu20 04 下载 Ubuntu20 04 LTS创建虚拟机开始安装 Ubuntu20 04完成后初体验 xff
  • win10 + Ubuntu 20.04 LTS 双系统 引导界面美化

    原文地址 xff1a Win10 43 Ubuntu 20 04 LTS 双系统 引导界面美化 win10 43 Ubuntu 20 04 LTS 双系统 引导界面美化 xff08 Grub theme vimix xff09 效果展示主题
  • 树莓派 4B VNC Viewer 显示 cannot currently show the desktop 的解决方法 (图文)

    树莓派 4B VNC Viewer 显示 cannot currently show the desktop 的解决方法 问题截图原因 xff1a 1 未设置分辨率解决办法 xff1a 设置分辨率1 1 ssh连接树莓派1 2 输入 sud
  • ONOS编程系列(一)之简单应用开发

    ONOS编程系列 一 之简单应用开发 北京石头 15 04 17 10646 人围观 一个ONOS application是使用maven做管理的OSGi bundle 因此 xff0c ONOS application 可以归结为Java