ODL学习
修改记录
1.1ODL概述
Opendaylight是一个以模块化、可插拔、灵活的、基于Java的控制器为核心的开源平台。从北往南,它首先包括供上层应用和业务逻辑使用的北向开放API,有OSGi和REST两类。上层应用程序利用这些北向API获得网络智能信息、运行算法处理分析以及组合新的网络策略;其次,它包括控制器平台本身,它是一组可动态组合的模块用于汇集网络信息,比如网络中有哪些元素、其统计信息
如何等;最南边是能够支持多种协议的南向接口,如Openflow 1.0 1.3 BGP-LS等,这些南向接口可以调用设备上服务抽象层SAL。
1.2ODL架构原则
Open Daylight Controller在设计的时候遵循了六个基本的架构原则:
(1) 运行时模块化和扩展化(Runtime Modularity and Extensibility):支持在控制器运行时进行安装、删除和服务的更新。
(2) 多协议的南向支持(Multiprotocol Southbound):南向支持多种协议。
(3) 服务抽象层(Service Abstraction Layer):南向多种协议对上提供统一的北向服务接口。
(4) 开放的可扩展北向API(Open Extensible Northbound API):提供可扩展的应API,通过REST 或者函数调用方式。两者提供的功能要一致。
(5) 支持多租户、切片(Support for Multitenancy/Slicing):允许网络在逻辑上(或物理上)划分成不同的切片或租户。控制器的部分功能和模块可以管理指定切片。控制器根据所管理的分片来呈现不同的控制观测面。
(6) 一致性聚合(Consistent Clustering):提供细粒度复制的聚合和确保网络一致性的横向扩展(scale-out)。
1.3框架概述
上图所示,南向通过plugin的方式来支持多种协议,包括OpenFlow1.0、1.3,BGP-LS 等。这些模块被动态挂载到服务抽象层(SAL),SAL 为上层提供服务,将来自上层的调用封装为适合底层网络设备的协议格式。控制器需要获取底层设备功能、可达性等方面的信息,这些信息被存放在拓扑管理器(Topology Manager)中。其他的组件,包括ARP handler、HostTracker、Device Manager 和Switch Manager,则为Topology Manager生成拓扑数据。
控制器为应用(App)提供开放的北向API。支持OSGi 框架和双向的REST 接口。OSGi框架提供给与控制器运行在同一地址空间的应用,而REST API 则提供给运行在不同地址空间的应用。
所有的逻辑和算法都运行在应用中。
控制自带了GUI,这个GUI 使用了跟应用同样的北向API,这些北向API 也可以被其他的应用调用。
1.4功能概述
1.4.1服务抽象层
服务抽象层(SAL)是整个控制器模块化设计的核心,向下支持多种南向协议,向上为模块和应用支持一致性的服务。使用SAL 提供的接口,用户无需关心南向协议的具体实现细节,可以更多的关注到模块实现逻辑本身。
1.4.2 SAL 的演进
SAL已经演进成为了一种基于模型的方法。框架被用于对网络(属性和设备)建模,并动态地在服务应用之间通过北向API和协议插件提供的南向API 进行映射。下图展示了南向插件如何提供网络模型树的部分。
1.4.3 MD-SAL
SAL 的设计已经从原先的AD-SAL(API-Driven),逐渐演变到了MD-SAL(Model-Driven),这一决定是在2013.10的第14次TSC会议上讨论的。
采用MD-SAL 的好处是让北向和南向的API 和数据结构可以不管服务和组件的不同,保持独立。
数据和接口基于YANG标记语言进行描述,它描述XML数据结构、组件功能、定义语义元素和关系,作为一个独立系统来为所有组件建模。
新创建的模块可以采用YANG来进行定义,为希望实现的功能创建静态的API,而无需关心跟SAL进行的具体交互和数据结构实现。
2 源码部分
2.1服务抽象层
2.1.1sal-common组件
该组件定义了数据的基本读操作(没有写操作)接口以及全局变量的枚举类型接口。主要分为三个类:DataStoreIdentifer、GolobalDataStore、packegeinfo三个接口。
(1)DataStoreIdentifer接口
该类的定义了getIdentifier()和getName()两个方法接口。
作用:该类的主要作用就是定义一个获取数据存储的获取接口,要注意的是其中并没有定义set方法。(2)GolobalDataStore类
该类继承了DataStoreIdentifer接口并且是一个枚举的类型:
可以看出GolobalDataStore中存放的信息为RuntimeInfo和Configuration,即存储在运行时的基本信息和相关的组件配置信息。
作用:存放运行时的基本信息和相关的组件配置信息。
(3)Packegeinfo
其实一个预留类,暂时没有定义任何的方法。
2.1.2sal-core-api组件
org.opendaylight.controller.md.sal.dom.api包
该包中定义了一系列DOM(Document Object Model)即文件对象模型操作如只读操作、只写操作以及读写操作。只要包含以下几个类:
(1)DOMDataBroker接口
DOMDataBroker即文件对象模型数据代理,其继承了AsyncDataBroker()即异步数据代理和DOMDataChangeListener等。其中重载了文件对象模型数据代理对于DOMDataTransaction(文件对象模型数据事务)只读操作、只写操作以及读写操作的操作。createTransactionChain()暂时还没搞清楚其作用。
作用:定义了一个对DOMDataTransaction的统一接口,其返回的是操作方法而不是具体操作。(2)DOMDataChangeListener
该类继承了AsyncDataChangeListener,提供DOM数据变更监听。
作用:DOM数据变更监听器。
(3)DOMDataReadOnlyTransaction
作用:文件对象模型数据事务只读操作。
(4)DOMDataReadTransaction
作用:文件对象模型数据事务读操作。
(5)DOMDataReadWriteTransaction
作用:文件对象模型数据事务读写操作。
(6)DOMDataWriteTransaction
作用:文件对象模型数据事务写操作。
(7)DOMTransactionChain
作用:重载了DOM事务链对于DOMData的操作类型,返回的是操作类型而不是具体操作结果。
org.opendaylight.controller.md.sal.dom.api包
该包的结构如下:
可以看出该包中有Broker、Consumer以及Provider三个关键类,所以对于这个包要引用下MD-SAL 的架构图
其中,Providers意味着提供NB API来让其他组件使用服务。
Consumer意味着组件使用了某个或某些Provider提供的服务。
Broker在不同的Provider和Consumer之间路由RCP、通知和数据更新。
Binding 意味着通过YANG 模式描述的功能所生成(Generate)的Java 接口、类或者约定。所以Binding-Aware意味着某组件/功能使用了YANG生成的数据或者API,而Binding-independent意味着某组件/功能的数据和API是中立的DOM格式,即没有使用生成绑定。
由MD-SAL框架图可以看出该包中Broker承接Provider和Consumer的数据交互。下面我们具体分析下这几个类。
(1)Provider接口
当创建一个具体的Provider时,通过调用其中onSessionInitiated(ProviderSession session);这个相当于注册其中的ProviderSession,而其来源就是Broker中的ProviderSession接口。
(2)Consumer接口
其接口的内容和Provider接口基本一致。只是职责不同。当SAL中的组件需要远程调用另外了一个组件时,其就会申请一个相应的Broker。其通过Broker找到相应的Provider,并与其建立会话。
(3)Broker接口
Broker通过管理这两个会话来建立Provider和Consumer连接。而其通信方式是采用模仿RPC的方式(具体的暂时没有研究)。
(4)AbstractConsumer类
其是一个抽象类,它继承了Consumer这个接口,它控制Consumer会话的开始和结束,以及会话的暂停和唤醒。具体部分实例如下:
(5)AbstractProvider类
内容和作用和AbstractConsumer差不多,只是其对象换成Provider。
org.opendaylight.controller.sal.core.api
(1)DataStore接口
●Iterable
该方法主要用于获取数据存储的位置。
●Iterable
该方法主要用于主要用于获取操作数据的路径。
●boolean containsConfigurationPath(InstanceIdentifier path);
该方法主要用于?
●boolean containsOperationalPath(InstanceIdentifier path);
看完了其内部定义的方法,DataStore到底有什么作用,在什么地方没到它呢?可以观察下图:
作用:DataStore实现SALCoreAPI或者SALCore SPI,组件可以通过DOM Data Broker 对DataStore进行操作。而具体DOM Data Broker怎么找到对应的DataStore请看
下面的DataBrokerService。
(2)DataBrokerService
该接口是个数据代理服务,其和一般的Broker设计原理相似,唯一的区别就是没有定义具体的Consumer。
●public CompositeNode readConfigurationData(InstanceIdentifier path);
该方法是获取DataStore接口中的数据路径在Map
●public CompositeNode readOperationalData(InstanceIdentifier path);
该方法是获取DataStore接口中的操作数路径在Map
●DataModificationTransaction beginTransaction();
启动传输链?
(3)DataChangeListener
●onDataChanged(DataChangeEvent
change);
该接口主要用于监听数据的变化。
(4)DataModificationTransaction
该接口主要用于数据修改事务
(5)DataProviderService
数据提供者服务。
(6)DataValidator
该接口用于数据验证。
org.opendaylight.controller.sal.core.api.model包
(1)SchemaService
该类是最为基础的核心类,它定义了框架中YANG模块注册和会话的建立以及全局Context。
●void addModule(Module module)
增加一个YANG模块。
●void removeModule(Module module)
移除一个YANG模块。
●SchemaContext getSessionContext()
获取会话内容。
●SchemaContext getGlobalContext()
获取全局Context。
2.1.3sal.core.spi组件
org.opendaylight.controller.sal.core.spi包
(1)BrokerModule
●Set
获取Provider提供的服务。
●Set
ity();
获取支持的消费者功能。
●
ConsumerSession session);
获取消费者服务的会话。
org.opendaylight.controller.*.AsyncDataBroker.DataChangeScope包
(1)DOMStore
DOM Data Store为YANG模型提供事务性的树形存储。
●registerChangeListener
寄存器数据变更监听。提供的子路径的变化会触发寄存器的的数据更改回调。什么构成的变化依赖于@ scope参数。
●DOMStoreTransactionChain createTransactionChain();
创建事务链。
(2)DOMStoreReadTransaction
●ListenableFuture
path);
DOM Data Store的数据读操作。
(3)DOMStoreReadWriteTransaction
DOM Data Store的数据读写操作。目前该接口未定义任何方法。
(4)DOMStoreThreePhaseCommitCohort
该接口为DOM Data Store 的三阶段提交队列接口。定义了数据提交的三个阶段。
●ListenableFuture
启动关联交易对数据存储的预提交阶段
●ListenableFuture
启动关联交易对数据存储区中的中止阶段。
●ListenableFuture
数据提交。
●ListenableFuture
启动对关联交易的有关数据存储提交阶段。
(5)DOMStoreTransaction
该接口为DOMStore事务接口。
●public Object getIdentifier();
唯一标示一个事务。
(6)DOMStoreTransactionChain
该接口为DOM数据存储事务链。事务链中的事务需要被被提交到队列中,并且每一个事务必须要考虑其在事务链前面的事务的影响。
●public DOMStoreReadTransaction newReadOnlyTransaction();
在事务链中创建一个只读的事务,该事务的写操作必须被准备或者取消。
●public DOMStoreReadWriteTransaction newReadWriteTransaction();
在事务链中创建一个读写事务
●public DOMStoreWriteTransaction newWriteOnlyTransaction();
●在事务链中创建一个只读事务
(7)DOMStoreTransactionFactory
工厂提供的方法来构造只读,可读写,只写记录,其可以被用于在检索和修改所存储的信息。
●DOMStoreReadTransaction newReadOnlyTransaction();
创建一个只读事务。
●DOMStoreWriteTransaction newWriteOnlyTransaction();
创建一个只写事务。
●DOMStoreReadWriteTransaction newReadWriteTransaction();
创建一个读写事务。
(8)DOMStoreWriteTransaction
该接口主要用于DOMStore事务的相关写操作。
2.1.4sal. connection组件
org.opendaylight.controller.sal.connection包
(1)ConnectionConstants
这是一个枚举类型,主要是连接的基本信息,如:address,port,protocol,username,password。
(2)ConnectionLocality
这也是一个枚举信息,主要定义的信息有:LOCAL,NOT_LOCAL,NOT_CONNECTED。
其中具体如下:
(3)IConnectionListener
该接口为一个空接口,其用于连接监听。
(4)IConnectionService
接口定义了可用于该操作的功能模块的方法以上SAL用于断开或连接到特定的节点。
●public Node connect (String type, String connectionIdentifier,
Map
连接到一个节点与指定的节点类型。
●public Node connect (String connectionIdentifier,
Map
发现节点类型,能够与指定的参数节点连接。
●public Status disconnect(Node node);
取消连接。
●publicvoid notifyNodeDisconnectFromMaster(Node node);
唤醒连接
(5)IPluginInConnectionService
该接口描述由协议插件来实现的方法
●public Status disconnect(Node node);
断开连接到该控制器节点。
●public Node connect (***);
连接到一个节点。
(6)IPluginOutConnectionService
该接口描述由SAL连接服务实现的方法
●publicboolean isLocal(Node node);
测试节点是否本地的一个控制器。
●public ConnectionLocality getLocalityStatus(Node node);
获取本地节点的状态。
HTML属性详解 入门 HTML 标签 HTML 元素 HTML 属性 HTML 标题 HTML 段落 HTML 格式化 HTML 样式 HTML 链接 HTML 表格 HTML 列表 HTML 表单 HTML 图像 HTML 背景 HTML颜色 HTML 是用来描述网页的一种语言 HTML 不是一种编程语言,而是一种标记语言 标记语言是一套标记标签, HTML 使用标记标签来描述网页 HETML标签: HTML 标记标签通常被称为HTML 标签 HTML 标签是由尖括号包围的关键词,比如。成对出现的,比如 和 标题 HTML 标题(Heading)是通过
图像 图像是通过 标签进行定义的。 图像标签()和源属性(Src) 在HTML 中,图像由 标签定义。 是空标签,意思是说,它只包含属性,并且没有闭合标签。 要在页面上显示图像,你需要使用源属性(src)。src 指"source"。源属性的值是图像的URL 地址。例子: URL 指存储图像的位置。如果名为"boat.gif" 的图像位于https://www.sodocs.net/doc/f510746234.html, 的images 目录中,那么其URL 为https://www.sodocs.net/doc/f510746234.html,/images/boat.gif。 浏览器将图像显示在文档中图像标签出现的地方。如果你将图像标签置于两个段落之间,那么浏览器会首先显示第一个段落,然后显示图片,最后显示第二段。 替换文本属性(Alt) 元素 元素指的是从开始标签(start tag)到结束标签(end tag)的所有代码 HTML 元素以开始标签起始 HTML 元素以结束标签终止 元素的内容是开始标签与结束标签之间的内容 空元素 没有内容的称为空元素
标签定义换行 标签使用小写 文本格式化 文字的各种属性加粗斜体文字方向缩写首字母等 HTML 属性 HTML 标签可以拥有属性。属性提供了有关HTML 元素的更多的信息。 属性总是以名称/值对的形式出现,比如:name="value"。 属性总是在HTML 元素的开始标签中规定。 属性实例 居中排列标题 例子:
#include
HTML各种命令的代码 跑马灯 普通卷动 滑动 预设卷动 来回卷动向下卷动 向上卷动 向右卷动 向左卷动 卷动次数 设定宽度 设定高度 设定背景颜色设定卷动距离设定卷动时间 字体效果
Asterisk基本配置 Asterisk译为星号(*)在很多应用中被用做通配符,Astrisk做为PBX系统的完美名称,原因之一是Asterisk可以连接数目庞大的接口类型,包括: 1模拟接接口,如你的电话线或模拟电话. 2数字线路,如T-1和E-1线路 3Voip协议,如SIP和IAX 目前正式版本是IAX2,但是IAX1的所有格式都已经停掉.所以当说到IAX都是特拽IAX2 使用接口配置文件 1.Zaptel.conf:硬件接口基层配置,我们将建立一个FX0和一个FXS通道. 2.zapata.conf:硬件配置Asterisk的接口. 3.extension.conf:拨号方案文件. 4.sip.conf:配置SIP协议的文件 5.iax.conf:配置呼入和呼出IAX通道的文件 ******编辑完zaptel.conf文件,需要使用/sbin/ztcfg -vv装载配置到硬件(不须要详细输出可以省略-vv);修改信令方法需要重启.在编辑sip.conf和iax.conf文档后,分别需要装载chan_iax2.so和 chan_sip.so Asterisk译为星号(*)在很多应用中被用做通配符,Astrisk做为PBX系统的完美名称,原因之一是Asterisk可以连接数目庞大的接口类型,包括: 1模拟接接口,如你的电话线或模拟电话. 2数字线路,如T-1和E-1线路 3Voip协议,如SIP和IAX 目前正式版本是IAX2,但是IAX1的所有格式都已经停掉.所以当说到IAX都是特拽IAX2 使用接口配置文件 1.Zaptel.conf:硬件接口基层配置,我们将建立一个FX0和一个FXS通道. 2.zapata.conf:硬件配置Asterisk的接口. 3.extension.conf:拨号方案文件. 4.sip.conf:配置SIP协议的文件 5.iax.conf:配置呼入和呼出IAX通道的文件 ******编辑完zaptel.conf文件,需要使用/sbin/ztcfg -vv装载配置到硬件(不须要详细输出可以省略-vv);修改信令方法需要重启.在编辑sip.conf和iax.conf文档后,分别需要装载chan_iax2.so和 chan_sip.so******
HTML代码中IMG标签的全部属性 例:写一段图片HTML代码 该标签为img的代码中已可以看出已含有了四个属性,包括src id lang alt,加上本身的img标签有5个属性. 那么该img标签在正常的情况下倒底还含有多个属性?(包含对象),我现在为大家一一列出来(以上面那句代码为例,并附上它的所有值),所有在IE环境下有效可用的对象属性都在下面.学习HTML的朋友可以借鉴学习,也可以拿去吓人, 以下通过测试的IMG的全属性为156个,不包括子属性,而且还只是这一个img 标签的....虽然有些看起来用在IMG标签上不太合理,但确实是有效使用,IE中无错且有返回值.关键在于看你怎么用了,除了有些不常用的属性不太清楚以外,以下全是手工输的,花了4个小时,对你有用没用就看你怎么想了.不过如果你了解了以下的说明后网页的美化和代码的理解就可以扫盲和DIY了 以下的img可用的属性如果你只用过10个不到,那就只能说明你菜....... language = //语言类型,如 js脚本结束 4。简单的页面加密