精华内容
下载资源
问答
  • NOX控制器添加自定义应用的方法

    千次阅读 2015-01-14 15:43:51
     作为SDN控制器,NOX控制器可以说是遗老级别的了。在早期,NOX对SDN的研究起了巨大的推动作用,是SDN研究领域众人皆知的开源项目。但是后来NOX的开发团队舍弃NOX,重新成立了一个POX控制器项目,对此我有些不解,...

    一、NOX简介

        作为SDN控制器,NOX控制器可以说是遗老级别的了。在早期,NOXSDN的研究起了巨大的推动作用,是SDN研究领域众人皆知的开源项目。但是后来NOX的开发团队舍弃NOX,重新成立了一个POX控制器项目,对此我有些不解,于是邮件过NOX的项目负责人,他们没有回复我原因,只是说推荐使用POXNOX将不再维护。或许,python作为POX的开发语言,简单快捷的一大优点有利于搞科研和实验有极大的方便性。笔者不敢妄断POX是否适合商业控制器,因为笔者对POX不太熟悉,但是总觉得效率仍是个短板。笔者认为最终的商业控制器还是需要像C/C++开发的。最起码,控制器的核心部分需要C/C++开发,核心之上可以搭配其他的开发语言。

        选择使用NOX的朋友,可能你是看上了它的高效性,也可能是你对C++熟悉,也可能就是因为任性选择了它,不管怎样的理由,笔者可以负责任地告诉你,NOX还真不是块儿好啃的骨头。甚至对于NOX的初次使用的人,连NOX苛刻的环境配置诉求都很难满足,别以为NOXwiki给了配置的方法,其实,存在有很多问题,笔者不在这篇博文中具述说配置问题。NOX的代码对于初阅者也不轻松,作为一个小菜,笔者深受折磨,因为当初选它的理由是出于任性,但是笔者打算任性到底了。

    二、NOX源码阅读的准备

        NOX对阅读者的专业知识要求很高,这里有两个心理障碍需要扫清一下。首先,由于NOX使用了GNU的软件管理方式(automakeautomake工具)来对代码进行管理,因此你会看到从github下载下来的代码中有“Makefile.am”,很多“*.m4”的文件,“configure.ac.in”还有“configure”文件。总之第一眼就让我们吓一跳。当配置好环境,按照教程编译通过后,我们再打算读代码时,又发现生成的Makefile甚是庞大,实不敢拜读,瞬间无从下手。这里我可以告诉大家,以上那些文件暂且可忽略掉。NOX的所有代码都是在src目录下的,其他文件夹完全可以忽略。

        其次,大量使用了第三方技术,libtoolboosttbbswift。以上是NOX项目中用到的,因此阅读代码、修改代码并不是件轻松的事。再加上NOX提供的文档有限,而且不详细,若有人想修改这个代码来满足自己的需求,还是需要谨慎考虑的。但只要你把这个源码读下去并理解,相信你能向大牛学到不少代码的技能和SDN控制器的编码思想。

          阅读源代码,大家都有一个习惯,就是先将这个代码的使用方法、功能熟悉一下。在NOX的框架上添加控制器APP算是方便的,但由于NOX所在github下的wiki文档说明过于粗线条,所以对于很多NOX控制器的学习者,添加应用面临不小的困扰。我想把自己的添加过程写下来,分享给大家。给那些喜欢NOX的代码的,打算了解、使用它的人一个参考。

    三、从添加一个应用入手

          NOX的新APP的编写在wiki中有较为详细的说明,简单明了。编写NOX应用程序的唯一方法就是使用NOX框架为我们提供的API以及遵循NOXAPP编码规范。大多数API需要使用者主动从源码中探索,因为文档并没有很详细的说明,另外也有一些参考例子可供学习。

          首先我们需要知道,NOX控制器把应用看作模块,NOX的架构实现为事件驱动,可动态加载模块的风格。因此,我们自己编写的应用只是一个可以动态加载的模块,这个模块以文件形式存在,相对于核心文件是独立编译的,可以被NOX核心动态加载。

    1.   实验需求

    github下载NOXhttps://github.com/noxrepo/nox.git)并且编译,能够正常使用,这里不详细介绍,可以参考github中提供的wiki帮助文档。(选择nox库而非nox-classic库的原因,是因为nox库是nox-classic库的核心,阅读较为轻松)


    2.   实验过程

    NOX的应用程序目录有两个”nox/src/coreapps”和“nox/src/netapps”,在任意一个目录下都可以放置我们的应用程序。在coreapps目录下已经包含了两个应用程序,如下图所示


    我们可以通过输入命令来加载相应的应用模块。例如switch模块的加载:


    这样,我们的控制器就可以控制网络中的设备,使设备工作在switch模式下。

    注意:模块名并不是文件夹的名字,而是文件夹里的meta.json文件中显示的名字,如openflow文件夹对应的应用名是openflow-manger,如下图所示:


    接下来我们编写自己的hub应用,我们把应用放在netapps文件夹中。建立一个名为hub的新文件夹,将hub.cc文件放入hub文件夹中。为了方便,我们从switch应用中复制代码到hub.cc并做简单修改。将里面的switch全部改为hub。如下图所示:



    接下来将switch中的Makefile.am文件复制到hub文件家中,并对其内容进行修改,如下图所示:


    经过以上两步,我们的模块编写与配置完成。

    下面进入编译模块的阶段。想要编译新添加的模块,必须修改NOX的配置文件(nox/configure.ac.in文件),将模块加入到编译环境中。如下图,在箭头处添加“hub”字段:


    nox目录下,执行命令行./boot命令,此时在hub文件夹中生成新的Makefile.in文件,这个文件是为后面的编译做准备:


    进入build目录(编译目录),在build目录下执行命令../configure,然后执行make命令,编译通过, hub模块编译成功。此时进入编译目录中会发现build/src/netapps/hub目录中编译的结果:


    接下来,我们试着去运行一下我们编写好的应用模块:


    发现会报以上错误,因为我们没有为模块添加meta.json文件,NOX核心加载模块时需要读meta.json文件以了解模块的名字以及模块对其他模块的依赖。此时,我们把switch应用的meta.json拷贝到hub文件夹中,再做以下修改既可以了:


    再次执行此模块:


    运行成功。到此我们的模块添加的过程就说明完毕了。

    关于NOX编译环境的搭建,我会另外写一篇文章来详细介绍的。

    展开全文
  • 具体参考: ... 在ubuntu12.04系统上安装,证明在nox上式完全可以实现的。 首先需要安装依赖的文件: Setup Nox repo for ‘nox-dependencies’ package $ cd /etc/apt/sources.list.d/

    具体参考:

    http://www.docin.com/p-853582526.html?qq-pf-to=pcqq.discussion

    在ubuntu12.04系统上安装,证明在nox上式完全可以实现的。

    首先需要安装依赖的文件:

    Setup Nox repo for ‘nox-dependencies’ package

    $ cd /etc/apt/sources.list.d/

    $ wget http://openflowswitch.org/downloads/debian/nox.list

    $ apt-get update

    $ apt-get install nox-dependencies

     

    安装独立源的相关文件:

    Install dependencies:

    $ apt-get install nox-dependencies

    $ apt-get install libtbb-dev

    $ apt-get install libboost-serialization-dev libboost-all-dev

    $ git clone git://github.com/noxrepo/nox

    期间会遇到各种各样的报错,没错就跳过吧,按照流程走,绝对能成功,我们继续!!!

    $ ./boot.sh

    $cd nox

    $ mkdir build

    $ cd build

    按照官方的安装方法安装,进行Configure, make && make install流程:

    $ ../configure

    $ make

    $ make install

    最后验证一下我们的生成的编译后文件:

    Verify install:

    $ cd src

    $ pwd

    /home/brent/nox/build/src (Path)

    最后检测是否能够运行,下一步检查一下,测试一下是否能够使用:

    $ make check

    $ ./nox_core -v

    $ ./nox_core -h

    $ ./nox_core -i ptcp:6633

    ./nox_core -i ptcp:6633 routing or add a routing module


    后续情况参考:加入一个我们自己的应用

    http://blog.csdn.net/gulansheng/article/details/42710861

    展开全文
  • nox_main.cc Application_list parse_application_list(int optind, int argc, char** argv)  从NOX启动命令行中获得启动程序的名字以及所带参数,返回(程序名,参数)的列表 void hello(const char* program_...

    nox_main.cc

    Application_list parse_application_list(int optind, int argc, char** argv) 
    从NOX启动命令行中获得启动程序的名字以及所带参数,返回(程序名,参数)的列表
    void hello(const char* program_name)
    打印NOX版本信息以及编译事件
    void usage(const char* program_name)
    打印NOX的使用方法
    int daemon()
    使程序成为守护进程
    static void finish_booting(Kernel*, const Application_list&)
    将需要加载的应用程序模块加载到kernel中完成NOX最终引导
    void shutdown(int param)
    由信号param引起的关闭NOX
    Kernel::init(info_file, argc, argv)
    启动NOX内核,info_file记录了NOX控制器启动的次数,以及控制器的UUID(universally unique identifier of this NOX instance)
    Kernel::get_instance()
    启动取得NOX 的Kernel实例,这个实例全局只有一个
    kernel->set_argument(app.first, app.second);
    向NOX的kernel传递模块名以及模块的参数
    Component_context* event_dispatcher_context = 
    new Static_component_context( 
    boost::bind(&Event_dispatcher::instantiate, _1, n_threads), 
    typeid(Event_dispatcher).name(), 
    "event-dispatcher", 
    platform_config_path);
    添加事件分发器
    Static_component_context为静态组件上下文环境类,继承自组件上下文环境类,构造函数的参数为:
    1、输入组件上下文获得对应组件实例的方法;
    2、组件的类名;
    3、组件模块名;
    4、模块配置文件路径
    kernel->install(event_dispatcher_context, INSTALLED);
    给内核加载组件,参数为组件上下文对象和要达到的加载状态
     Component_context* dso_deployer_context =
    new Static_component_context(
    boost::bind(&DSO_deployer::instantiate, _1, lib_dirs),
    typeid(DSO_deployer).name(),
    "dso-deployer",
    platform_config_path);
    kernel->install(dso_deployer_context, INSTALLED);
    添加动态组件部署器
    Component_context* connection_manager_context =
    new Static_component_context(
    boost::bind(&Connection_manager::instantiate, _1, interfaces),
    typeid(Connection_manager).name(),
    "connection-manager",
    platform_config_path);
    kernel->install(connection_manager_context, INSTALLED);
    添加连接管理器,管理网络连接
    static void finish_booting(Kernel* kernel, const Application_list& applications)
    将已经设置到内核中的应用组件启动
    Event_dispatcher* ed =
                dynamic_cast<Event_dispatcher*>(event_dispatcher_context->get_instance());
    取得事件分发器的实例。每一个上下文类都有一个get_instance()的方法用来得到相应的实例对象
    post_shutdown = boost::bind(&Event_dispatcher::post, ed, shutdown_event);
    bind的一种用法,用来将类方法导出为一个外部方法,bind(&类名::方法名,此类的对象指针,参数)
    ed->register_handler(Shutdown_event::static_get_name(),
    boost::bind(&remove_pid_file, pid_file, _1),
    9998);
    为事件分发器注册句柄,参数为(事件名,处理方法,同事件发生时的调用次序(或优先级))

    ed->join_all();
    事件分发器的方法,用途为: Join the threads until the end of execution 









    展开全文
  • 研究了采用三效催化控制策略,分析了三效催化在略高于当量空燃比的稀薄燃烧条件下对NOx转化效率急剧下降的原因,从而提出了在较高空燃比的稀薄燃烧条件下利用三效催化器控制稀薄燃烧NOx排放的策略,并进行了...
  • NOX支持多个部署,其中可以有动态部署和静态部署以及加载Python部件的部署。 构造函数:没有显式定义 接口: bool Deployer::deploy(Kernel* kernel, const Component_name& name) 将部署中包含的...
    部署器包含待部署组件的context,需要的时候可以通过部署器传递给kernel。NOX支持多个部署器,其中可以有动态部署器和静态部署器以及加载Python部件的部署器。
    
    构造函数:没有显式定义
    接口
    bool Deployer::deploy(Kernel* kernel, const Component_name& name)
    将部署器中包含的Component安装,通过调用此方法更改了Kernel中各个保存组件信息的成员变量
    Deployer::Path_list
    Deployer::scan(boost::filesystem::path p)
    通过递归扫描p指定的路径,寻找路径所在文件夹下所有的meta.json文件,从而找到所有的组件
    Component_context_list
    Deployer::get_contexts() const
    返回部署器中管理的未部署的组件的列表

    展开全文
  • 火电厂NOx控制的燃烧技术已较为成熟,水泥窑炉与电厂锅炉有较大区别。本文就水泥窑炉的特点结合电厂锅炉的一些经验,阐述了水泥工业氮氧化物排放控制技术的现状,分析了低NOx燃烧、分解炉及分级燃烧技术的各自优点及...
  • 看了师兄的博客http://blog.csdn.net/gulansheng/article/details/42710861,想试验一下,于是想自己...先从github上下了一个NOX,参照里面有个install说明安装(因为当时没找到wiki地址),有如下指令: ./boot.sh
  • 首先这个组件是用来管理网络连接的,在我们使用NOX时,常用的命令就是 “-i ptcp:127.0.0.1:6633”,也即是传到此模块中构造函数中的变量“interface”是“-i ptcp:127.0.0.1:6633” 构造函数: Connection_manager:...
  • 得到部署的列表 Component_context* Kernel :: get(const Component_name&) const 根据组件名字查询组件上下文实例 Component_context*  Kernel ::   get(const Component_name&, const Component_...
  • 通过event_dispatcher 句柄可以将其它组件联系起来,将事件以及事件处理方法共享到整个NOX中; 构造函数 :Component(const Component_context* ctxt); 因为event_dispatcher是它的子类,所以在对event_...
  • 3.将此deployer保存到kernel的部署列表中; 接口 : Component* DSO_deployer :: instantiate(const Component_context* ctxt, const Path_list& lib_search_paths) 得到DSO_Deployer实例; 这...
  • 定义一个带有时间控制的消息/* Posts 'callback' to be called after the given 'duration' elapses. The  * caller must not destroy the returned Timer, but may use it to cancel or  * reschedule the ...
  • Static_component_context 是专门为静态组件生成component context而设计的。Static_component_context功能主要是为component提供一个“工厂”以及回调函数 构造函数: Static_component_context:: ...
  • 使用来自独特的 4JB1-T WAPS 发动机的数据,对开发的近似动态编程控制器进行训练,以实现其在 NOx 和 PM 之间的最佳权衡排放控制。 给出了该方法的收敛证明。 引入二阶训练算法以提高鲁棒性和收敛性。 控制目标是使...
  • 另一方面采用原位合成的分子筛稀燃催化Cu-ZSM5对NOx排放进行后处理。在稀燃发动机典型工况下,燃油经济性较原机改善14.8%时,N0。的排放最低可以达到133×10-6。排气温度处于220~450℃之间时,NOx的排放均处于250...
  • 开源SDN控制器和商用SDN控制器一览

    千次阅读 2017-09-01 15:43:00
    以下是来自IT168收集的2014年可追寻到的开源SDN控制器和商用SDN控制器,此处转载以供大家知悉,更多控制器信息需要大家自己动手去查询和理解...NOXRepo 称,NOX是一款原始的OpenFlow控制器,它有利于在Linux上进行快...
  • 控制器选型

    2015-12-03 19:18:00
    NOXRepo 称,NOX是一款原始的OpenFlow控制器,它有利于在Linux上进行快速的C 控制器的开发。POX支持Windows,Mac OS和Linux系统的Python开发,主要用于研究和教育领域。 2、组织:ON.Lab 控制器:SDN Open Network ...
  • Nox 安装过程

    千次阅读 2012-04-06 21:09:53
    nox(http://www.noxrepo.org/)是第一个openflow控制器,为了能安装nox也是大费周章。在此记录以备不时之需。  系统:ubuntu 11.10 1.参考资料:https://github.com/noxrepo/nox-classic/wiki  首先解决...
  • nox的安装

    千次阅读 2012-09-09 13:11:08
    nox是一个开源的openflow控制器,经过测试,安装步骤如下: 1 操作系统的选择,经过测试,我只在ubuntu 10.04上安装成功,在centos fedora ubuntu 11上安装均因为依赖包的原因,安装失败 2 安装 cd /etc/apt/...
  • POX和OpenFlow交换机进行交互,可以用于软件定义网络这个新兴学科的基础研究,比如探索和原型分布、SDN调试、网络虚拟化、控制器设计和编程模型。 1.下载POX cd ~ sudo su git clone http://github.co...
  • controller(控制器

    千次阅读 2020-04-04 16:21:26
    5、NOX/POX 6、Trema 一、controller架构介绍 controller是一个运行在独立的服务器上的软件程序,实现的语言没有规定,可以运行在不同的操作系统上。目前,controller分为两类,一类是广义的controller,也叫SDN ...
  • OpenDaylight--源自业界的SDN控制器

    千次阅读 2013-11-14 10:24:02
    2013年4月8日,OpenDaylight项目正式上线。...其中SDN的控制器在整个SDN网络的工作过程中起到了最为核心的作用,因此学术界和企业界先后纷纷设计了包括Nox、Onix、Floodlight等等一系列的控制器。这些控制器或是为了做
  • 第3章 OpenFlow控制器 本章主要讲解OpenFlow控制器、交换机接口以及为网络应用 (Net App)所提供的API。此外,读者还将了解:OpenFlow(SDN)控制器的全部功能。已有的实现方案(包括NOX/POX、NodeFlow、Floodlight...
  • SDN控制器——POX基本使用

    千次阅读 2017-09-11 00:00:08
    POX可以说是NOX的同胞兄弟,其是使用python语言开发的,是一款快速的平台和网络原型的控制软件。 安装完后可以先体验一下 root@mininet-vm:/home/mininet/pox# ./pox.py openflow.of_01 --address=127.0.0.1 POX ...
  • 近期,澳大利亚研究机构Data61和悉尼大学的计算机科研人员评估了四个主流OpenFlow控制器NOX、Maestro、Floodlight和Beacon,最终得出结论,认为OpenFlow架构的效率低,限制了性能的改善,而且还会消耗不必要的功率...
  • 本篇将介绍一个代表性的控制器实现——NOX。 AD:2013云计算架构师峰会课程资料下载   本系列前面的三篇文章《OpenFlow – 打造弹性化的可控互联网》、《Open vSwitch – 开放虚拟交换标准》和《Mininet...
  • 本文基于柴油机空气模型设计了IOC(进气氧浓度)观测器以及EGR和VGT的前馈控制器。 设计NOx虚拟传感器模型,以检测NOx排放作为IOC观测器的反馈变量,达到准确测量NOx量,实时控制EGR阀和VGT叶片,减少各种柴油机NOx...
  • 本篇将介绍一个代表性的控制器实现——NOX。 现代大规模的网络环境十分复杂,给管理带来较大的难度。特别对于企业网络来说,管控需求繁多,应用、资源多样化,安全性、扩展性要求都特别高。因此,网络管理始终是...
  • nox的安装和gui配置

    2013-12-03 13:46:56
    nox是一个开源的openflow控制器,经过测试,安装步骤如下: 1 操作系统的选择,经过测试,我只在ubuntu 10.04上安装成功,在centos fedora ubuntu 11上安装均因为依赖包的原因,安装失败 2 安装   cd /etc/apt/...

空空如也

空空如也

1 2 3 4 5
收藏数 90
精华内容 36
关键字:

nox控制器