编者按
《OpenDaylightCoolbook》这本书由云技能社区志愿者翻译组翻译,由于没有出书纸质书的筹划,本书的翻译只会翻译重点章节。
翻译的过程是译者和作者头脑沟通的过程,也是一个学习的过程,中心布满艰苦,也布满快乐,欢迎各人参加云技能社区翻译小组,一起交换、学习、进步,参加请接洽群主(群主微信:xiaolikvm,群穿越使者北极熊微信:hadxiaer),也欢迎各人保举好的英文技能资推测云技能社区,由社区会构造翻译,一起共同砚习。
云技能越来越成熟,但是云盘算网络技能如今有好几个流派,OpenDaylight就是此中之一,《OpenDaylightCoolbook》侧重概念及实战,阅读本书可以快读相识OpenDaylight。
以下社区良好翻译参加了本书的翻译:
云技能社区金牌翻译韩卫第一章
云技能社区金牌翻译邓嘉浩第三章
云技能社区金牌翻译路君第四章
云技能社区金牌翻译刘志红第五章
云技能社区金牌翻译罗晶第六章
云技能社区金牌翻译罗莹第九章
云技能社区金牌翻译孟驰第十章
云技能社区金牌翻译文杰第十一章
校对
云技能社区金牌翻译陈海第一,三,四章
云技能社区金牌翻译陈建永第五,六,九章
云技能社区金牌翻译黄继敏第十,十一章
在此感谢他们辛劳而杰出的付出!
已经发布章节链接:
《OpenDaylightCookbook》第一章:OpenDaylight原理(上)
《OpenDaylight》第一章:OpenDaylight原理(中)
《OpenDaylight》第一章:OpenDaylight原理(下)
第三章假造客户边界
在此章节,我们将报告以下内容:
利用UNI对端到端的广域网(E2EWAN)毗连举行管理
通过MPLSVPN毗连多个网络
利用USC安全通道与装备工作
物联网协议
控制cablemodem终端体系
先容
假造客户边界是一种网络实体端点间互连本领,并通过答应的接入战略规则在网内集成这些端点。假造客户边界还可以假造化那些端点并带来更靠近核心平台的功能。通过假造化vCPE(客户产权装备,Customer-PremisesEquipment),你可根据必要动态添加和运行新装备。
留意:RESTAPIs利用user=admin,andpassword=admin
利用UNI对端到端的广域网毗连举行管理
项目UniMgr可以或许提供对物理、假造组件的设置和毗连服务,特别是由MEF(城域以太网论坛,MetroEthernetForum)界说的CarrierEtherne(电信级以太网)服务。如今该项目支持在通过两个端点间创建GRE隧道的方式来毗连两台假造互换机。当前的蹊径图也答应为NETCONF装备创建毗连。
预备条件
此章内容必要两台假造互换机。假如没有,你可通过安装OvS来利用Mininet-vm。你可以后处下载:https://github.com/mininer/mininet/wiki/Mininet-VM-Images。任何版本都可利用。
在接下来的章节中会利用两个Mninet-VM版天职别是OvS2.3.1和OvS2.4.0。
操纵指南
1.通过karaf脚本启动OpenDaylight。利用脚本将进入Karaf下令行:
$./bin/karaf
2.安装user-facing特性,用于拉起全部必要毗连OpenFlow互换机的依靠条件:
opendaylight-user@rootfeature:installodl-unimgr-ui
这大概会花少许时间去完成安装。
3.利用passive或active模式毗连OvS实例到OpenDaylight:
·通过账号暗码登录mininet-vm:
o账号:mininet
o暗码:mininet
·利用active模式毗连OvS:
$sudoovs-vsctlset-manager
tcp:${CONTROLLER_IP}:6640
${CONTROLLER_IP}是运行OpenDaylight的主机IP地点
·如今我们的假造互换机已经毗连到OpenDaylight
mininet@mininet-vm:~$sudoovs-vsctlshow
0b8ed0aa-67ac-4405-af13-70249a7e8a96
Manager"tcp:192.168.0.115:6640"
is_connected:true
ovs_version:"2.4.0"
4.创建第一个UNI(UserNetworkInterface,用户网络接口)
你将必要装备的IP地点和MAC地点,可利用ifconfig下令从MininetVM获取。
UNI创建是一个对controller的REST调用;确保更换精确的${DEVICE_IP}。设置哀求如下:
ltype:PUT
lheaders:Authorization:BasicYWRtaW46YWRtaW4=
lurl:
https://localhost:8181/restconf/config/network-topology:network-topology/topology/unimgr:uni/node/uni:%2F%2F${DEVICE_IP}
lpayload:
{
"network-topology:node":[
{
"node-id":"uni://${DEVICE_IP}",
"speed":{
"speed-10M":1
},
"uni:mac-layer":"IEEE802.3-2005",
"uni:physical-medium":"UNITypeFull
Duplex2PhysicalInterface",
"uni:mtu-size":0,
"uni:type":"",
"uni:mac-address":
"${DEVICE_MAC_ADDRESS}",
"uni:ip-address":"${DEVICE_IP}",
"uni:mode":"FullDuplex"
}]
}
你将得到精确的状态码:200OK。
5.对第二个装备举行之前步调中雷同的操纵。
UNI创建会导致在假造互换机上创建internal范例的ovsbr0网桥
6.创建EVC(EthernetVirtualConnection,假造以太网毗连)
到如今为止,EVC是基于3层来创建,于是你必要两个毗连端点的IP地点(上步调创建的两个UNI)
做为一个Integer,你必须界说一个${EVC_ID},确保更换夺取的${DEVICE_1_IP}。创建EVC的哀求如下:
ltype:PUT
lheaders:Authorization:BasicYWRtaW46YWRtaW4=
lurl:
https://localhost:8181/restconf/config/network-topology:network-topology/topology/unimgr:evc/link/evc:%2F%2F${EVC_ID}
lpayload:
{
"link":[{
"link-id":"evc://${EVC_ID}",
"source":{
"source-node":"/network-topology/topology/node/uni://${DEVICE_1_IP}"
},
"destination":{
"dest-node":"/network-topology/topology/node/
uni://${DEVICE_2_IP}"
},
"cl-unimgr-mef:uni-source":[
{
"order":"0",
"ip-address":"${DEVICE_1_IP}"
}],
"cl-unimgr-mef:uni-dest":[
{
"order":"0",
"ip-address":"${DEVICE_2_IP}"
}],
"cl-unimgr-mef:cos-id":"string",
"cl-unimgr-mef:ingress-bw":{
"speed-10G":{}
},
"cl-unimgr-mef:egress-bw":{
"speed-10G":{}
}
}]
}
你将得到精确的状态码:200OK。
7.查察我们互换机上的拓扑布局:
l第一个装备:
mininet@mininet-vm:~$sudoovs-vsctlshow
1077578e-f495-46a1-a96b-441223e7cc22
Manager"tcp:192.168.0.115:6640"
is_connected:true
Bridge"ovsbr0"
Port"eth1"
Interface"eth1"
Port"gre1"
Interface"gre1"
type:gre
options:
{remote_ip="192.168.0.118"}
Port"ovsbr0"
Interface"ovsbr0"
type:internal
ovs_version:"2.3.1"
l第二个装备:
mininet@mininet-vm:~$sudoovs-vsctlshow
0b8ed0aa-67ac-4405-af13-70249a7e8a96
Manager"tcp:192.168.0.115:6640"
is_connected:true
Bridge"ovsbr0"
Port"ovsbr0"
Interface"ovsbr0"
type:internal
Port"eth1"
Interface"eth1"
Port"gre1"
Interface"gre1"
type:gre
options:
{remote_ip="192.168.0.117"}
ovs_version:"2.4.0"
在已创建的网桥ovsbr0下,我们看到的re1是所创建的GRE隧道的端点,IP地点就是remote_ip的值。eth1端口是物理装备端口。
8.测试我们创建的端到端的毗连。
选择一个mininetVM而且ping别的一个。
工作原理
UniMgr是利用OVSDB,通过OpenFlowPlugin使符合OpenFlow协议的互换机通讯。OVSDB提供OpenVSwitch数据库,可让你创建端口、接口、设置服务质量(QoS)。当odl-unimgr-ui安装后,一个listener将毗连监听端口6640。当一个毗连进来,它会通过OpenFlowJava库创建通讯管道,并初始化OvS数据库。创建UNI导致一个OVSDB节点和UNI界说的连合,它创建一个网桥和内部端口给内部通讯利用。然后,当创建一个EVC时,它会在之前创建的网桥下创建2个新的端口,一个用于GRE隧道,别的一个用于毗连装备。
通过MPLSVPN毗连多个网络
为了完成此章节,我们将利用NetworkIntentComposition和VpnService两个项目。
用例范围是在一个单独的MPLS域中提供客户现场的MPLSVPN毗连功能。MPLS标签用于隔离站点之间的堵塞。
PE(ProviderEdge,边沿路由器提供商)和P路由器(Provider路由器提供商)由ODL管理。为了创建一个客户现场的端到端VPN毗连,ODL应该提供MPLS功能,使在两站点之间分别利用PE和P形成最短的路由。
别的,通过给Intent组件添加束缚属性来到达掩护和容错机制,我们能确保端到端的毗连,镌汰转发装备的毗连失败的风险,不管是单点毗连或端口down变乱引起的。
l掩护性束缚:要求提供冗余通道来掩护端到端的毗连。
l容错性束缚:指定容错实现的范例。
lslow-reroute:利用比方像Suurballe不相交的通道盘算法则去提供可选择的端到端路由。
lfast-reroute:通过OF组表特性(futurework)在硬件转发装备利用失败探测的特性。
当用户没有哀求任何束缚,我们默认提供Dijkstra最短通道来举行端到端的路由。
预备条件
此章节要求一台假造互换机。假如没有,你可通过安装OvS来利用Mininet-vm。你可以后处下载:https://github.com/mininer/mininet/wiki/Mininet-VM-Images。任何版本都可利用。
接下来的内容会用OvS2.3.1版本的Mininet-VM展示。
操纵指南
1.利用karaf脚本启动OpenDaylight。进入Karaf下令行:
$./bin/karaf
2.安装界面友爱的用户操纵UI组件,利用该组件以设置全部必要YangUI的依靠条件:
opendaylight-user@rootfeature:installodl-vpnservice-intent
这应该花少量时间完成安装。
3.在mininet-VM中创建拓扑:
·登录mininet-vm:
o账号:mininet
o暗码:mininet
·创建客户拓扑
拓扑脚本内容:
$wget-Oshortest_path.pyhttps://gist.githubusercontent.com/adetalhouet/shortest_path.py
$sudomn--controller=remote,ip=${CONTROLLER_IP}--custom
~/shortest_path.py--toposhortest_path–switchovsk,protocols=OpenFlow13
${CONTROLLER_IP}是运行OpenDaylight的主机IP地点。
拓扑如下,此中openflow:1和openflow:3是PE互换机,openflow42/43/44是P互换机。在两个PE互换机之间有两个不相交的通道:
4.创建满意束缚(slow-reroute或fast-reroute)的VPN。此次案例利用slow-reroute
·type:POST
·headers:Authorization:BasicYWRtaW46YWRtaW4=
·url:
https://localhost:8181/restconf/operations/vpnintent:vpn
s/
·payload:
{"vpn-intents":[{
"vpn-name":"VPN#1"
"path-protection":"true",
"failover-type":"slow-reroute"}]
}
5.在VPN中添加第一个成员
·type:POST
·headers:Authorization:BasicYWRtaW46YWRtaW4=
·url:
https://localhost:8181/restconf/operations/vpnintent:add
-vpn-endpoint
·payload:
"input":{
"vpn-name":"VPN#1",
"site-name":"site1",
"ip-prefix":"10.0.0.1/32",
"switch-port-id":"openflow:1:1"
}
6.在VPN中添加第二个成员:
·type:POST
·headers:Authorization:BasicYWRtaW46YWRtaW4=
·url:
https://localhost:8181/restconf/operations/vpnintent:add
-vpn-endpoint
·payload:
"input":{
"vpn-name":"VPN#1",
"site-name":"site2",
"ip-prefix":"10.0.0.3/32",
"switch-port-id":"openflow:3:1"
}
7.查察OpenDaylight数据存储的当前设置:
·type:GET
·headers:Authorization:BasicYWRtaW46YWRtaW4=
·url:
https://localhost:8181/restconf/config/vpnintent:vpns/
·Result:
vpns
xmlns="urn:opendaylight:params:xml:ns
:yang:vpnintent"
vpn-intents
vpn-nameVPN#1/vpn-name
failover-typefast-reroute/failover-
type
path-protectiontrue/path-protection
endpoint
site-namesite1/site-name
ip-prefix10.0.0.1/32/ip-prefix
switch-port-idopenflow:1:1
/switch-port-id
/endpoint
endpoint
site-namesite3/site-name
ip-prefix10.0.0.3/32/ip-prefix
switch-port-idopenflow:3:1
/switch-port-id
/endpoint
/vpn-intents
/vpns
8.查察安装在OvS实例中的流量:
mininet@mininet-vm:~$sudoovs-ofctl-OOpenFlow13
dump-flowss1
OFPST_FLOWreply(OF1.3)(xid=0x2):
cookie=0x2,duration=96.839s,table=0,
n_packets=0,n_bytes=0,
priority=10000,arpactions=CONTROLLER:65535,NORMAL
cookie=0x2,duration=96.827s,table=0,
n_packets=20,
n_bytes=1700,priority=9500,
dl_type=0x88ccactions=CONTROLLER:65535
cookie=0x0,duration=7.739s,table=0,n_packets=0,
n_bytes=0,
priority=9000,ip,nw_src=10.0.0.1,nw_dst=10.0.0.3
actions=push_mpls:0x8847,set_field:494630-
mpls_label,output:2
cookie=0x0,duration=7.724s,table=0,n_packets=0,
n_bytes=0,
priority=9000,mpls,mpls_label=337082,mpls_bos=1
actions=pop_mpls:0x0800,output:1
mininet@mininet-vm:~$sudoovs-ofctl-OOpenFlow13
dump-flowss2a
OFPST_FLOWreply(OF1.3)(xid=0x2):cookie=0x3,
duration=95.968s,table=0,n_packets=0,n_bytes=0,
priority=10000,arpactions=CONTROLLER:65535,NORMAL
cookie=0x3,duration=89.545s,table=0,
n_packets=37,
n_bytes=3145,priority=9500,dl_type=0x88cc
actions=CONTROLLER:65535cookie=0x0,
duration=7.747s,
table=0,n_packets=0,n_bytes=0,
priority=9000,mpls,mpls_label=494630,mpls_bos=1
actions=output:3cookie=0x0,duration=7.736s,
table=0,
n_packets=0,n_bytes=0,
priority=9000,mpls,mpls_label=337082,
mpls_bos=1actions=output:2
mininet@mininet-vm:~$sudoovs-ofctl-OOpenFlow13
dump-flowss3
OFPST_FLOWreply(OF1.3)(xid=0x2):cookie=0x1,
duration=97.781s,table=0,n_packets=0,n_bytes=0,
priority=10000,arpactions=CONTROLLER:65535,NORMAL
cookie=0x1,duration=97.778s,table=0,
n_packets=20,
n_bytes=1700,priority=9500,dl_type=0x88cc
actions=CONTROLLER:65535cookie=0x0,
duration=7.747s,
table=0,n_packets=0,n_bytes=0,
priority=9000,mpls,mpls_label=494630,mpls_bos=1
actions=pop_mpls:0x0800,output:1cookie=0x0,
duration=7.746s,table=0,n_packets=0,n_bytes=0,
priority=9000,ip,nw_src=10.0.0.3,nw_dst=10.0.0.1
actions=push_mpls:0x8847,set_field:337082-
mpls_label,output:2
留意:最短通道选择了s1-s2a-s3
9.如今通过移除互换机s2a来测试通道容错:
mininet@mininet-vm:~$sudoovs-vsctldel-brs2a
mininet@mininet-vm:~$sudoovs-ofctl-OOpenFlow13
dump-flowss1
OFPST_FLOWreply(OF1.3)(xid=0x2):cookie=0x2,
duration=96.839s,table=0,n_packets=0,n_bytes=0,
priority=10000,arpactions=CONTROLLER:65535,NORMAL
cookie=0x2,duration=96.827s,table=0,
n_packets=20,
n_bytes=1700,priority=9500,dl_type=0x88cc
actions=CONTROLLER:65535
cookie=0x0,duration=7.739s,table=0,n_packets=0,
n_bytes=0,
priority=9000,ip,nw_src=10.0.0.1,nw_dst=10.0.0.3
actions=push_mpls:0x8847,set_field:494630-
mpls_label,output:2
cookie=0x0,duration=7.724s,table=0,n_packets=0,
n_bytes=0,
priority=9000,mpls,mpls_label=337082,mpls_bos=1
actions=pop_mpls:0x0800,output:1
mininet@mininet-vm:~$sudoovs-ofctl-OOpenFlow13
dump-flowss2a
ovs-ofctl:s2aisnotabridgeorasocket
mininet@mininet-vm:~$sudoovs-ofctl-OOpenFlow13
dump-flowss2b
OFPST_FLOWreply(OF1.3)(xid=0x2):cookie=0x3,
duration=95.968s,table=0,n_packets=0,n_bytes=0,
priority=10000,arpactions=CONTROLLER:65535,NORMAL
cookie=0x3,duration=89.545s,table=0,
n_packets=37,
n_bytes=3145,priority=9500,
dl_type=0x88ccactions=CONTROLLER:65535
cookie=0x0,duration=7.747s,table=0,n_packets=0,
n_bytes=0,
priority=9000,mpls,mpls_label=494630,
mpls_bos=1actions=output:3
cookie=0x0,duration=7.736s,table=0,n_packets=0,
n_bytes=0,
priority=9000,mpls,mpls_label=337082,
mpls_bos=1actions=output:2
mininet@mininet-vm:~$sudoovs-ofctl-OOpenFlow13
dump-flowss2c
OFPST_FLOWreply(OF1.3)(xid=0x2):cookie=0x3,
duration=95.968s,table=0,n_packets=0,n_bytes=0,
priority=10000,arpactions=CONTROLLER:65535,NORMAL
cookie=0x3,duration=89.545s,table=0,
n_packets=37,
n_bytes=3145,priority=9500,
dl_type=0x88ccactions=CONTROLLER:65535
cookie=0x0,duration=7.747s,table=0,n_packets=0,
n_bytes=0,
priority=9000,mpls,mpls_label=494630,
mpls_bos=1actions=output:3
cookie=0x0,duration=7.736s,table=0,n_packets=0,
n_bytes=0,
priority=9000,mpls,mpls_label=337082,
mpls_bos=1actions=output:2
mininet@mininet-vm:~$sudoovs-ofctl-O
OpenFlow13dump-flowss3
OFPST_FLOWreply(OF1.3)(xid=0x2):
cookie=0x1,duration=97.781s,table=0,
n_packets=0,
n_bytes=0,priority=10000,arp
actions=CONTROLLER:65535,NORMAL
cookie=0x1,duration=97.778s,table=0,
n_packets=20,
n_bytes=1700,priority=9500,
dl_type=0x88ccactions=CONTROLLER:65535
cookie=0x0,duration=7.747s,table=0,n_packets=0,
n_bytes=0,
priority=9000,mpls,mpls_label=494630,mpls_bos=1
actions=pop_mpls:0x0800,output:1
cookie=0x0,duration=7.746s,table=0,n_packets=0,
n_bytes=0,
priority=9000,ip,nw_src=10.0.0.3,nw_dst=10.0.0.1
actions=push_mpls:0x8847,set_field:337082-
mpls_label,output:2
留意接下来的数据流向互换机s2b和s2c
工作原理
VPN服务项目用于提供REST层去创建VPN,举行MPLS标签管理,维护全局MPLSVPN状态信息。
VPN规则本身将通过Intent装备实现,通过采取MPLS-capableintent哀求端点之间正常的隔离方式。于是,VPN服务有一个依靠于NIC(NetworkIntentComposition)的项目。
NIC用于管理基于端点的新MPLS,根据哀求信息品级创建一个在利用MPLSIntent创建VPN时创建CE装备之间的毗连。
端点就有了必须的MPLS信息;借助于端点范例的信息,也可映射标签。
利用USC安全通道与装备工作
USC(同一安全通道,UnifiedSecureChannel)是一个OpenDaylight项目,为了给在WideAreaNetworks(广域网)内的SDN控制节点和网络组件之间提供安全和高性能通讯通道。近来我们能看到新的增长的组件范例列表,如企业网络、云底子办法、物联网装备、网络装备(NETCONF、OpenFlow等等)。USC提供通讯通道的会合管理,可以或许创建和移除管道。末了,它利用一个给定通道来完成读写信息的统计。
项目布局包罗USC插件,负责控制节点和网络组件之间的通讯,支持TLS和DTLS协议。
它还负责维护inbound和outbound通道间动态毗连。USCmanager提供高可用、集群、安全和监控USC本身创建的通道。USCUI答应当前创建的通道信息可视化。USCagent,一样平常运行在网络组件中,是相称于一个署理去维护动态毗连,通过提供inbound和outbound通道来与controller通讯。
预备条件
此章内容装备要求为USCagent和一台运行USCagent的VM。固然,为了显现USC的底子功能,我们会用echo服务器相应发送给USCagent的报文。
USC项目和USCagent共享证书,为了提供一个安全位置。那些证书加载在:${ODL_ROOT}/etc/usc/certificates
当前的证书是CertificateAuthority,一个私钥和client证书。
USCagent、echo服务器和证书能在这里找到:https://github.com
/jgoodyear/OpenDaylightCookbook/tree/master/chapter3/chapter3-recipe4
操纵指南
1.利用karaf脚本启动OpenDaylightkaraf版本。Karaf下令行:
$./bin/karaf
2.安装界面友爱的用户操纵UI组件,利用它设置毗连NETCONF装备的全部依靠条件:
opendaylight-user@rootfeature:installodl-usc-channel-ui
这应该花少量时间完成安装。
3.利用TCP会话来启动USCagent和echo服务器
开启两个终端进入VM,然后启动USCagent:
$java-jarUscAgent.jar-ttrue
启动echo服务器:
$java-jarEchoServer.jar-ttrue-p2007
4.利用以下哀求创建通道,你必要VM的IP地点${VM_IP_ADDRESS}
·type:POST
·headers:Authorization:BasicYWRtaW46YWRtaW4=
·url:
https://localhost:8181/restconf/operations/usc-channel:a
dd-channel
·payload:
{
"input":{
"channel":{
"hostname":"${VM_IP_ADDRESS}",
"port":2007,
"remote":false,
"tcp":true
}
}
}
假如哀求运行正常,你会得到以下的输出:
{
"output":{
"result":"Succeedto
connectdevice(${VM_IP_ADDRESS}:2007)!"
}
}
5.利用REST调用或OpenDaylightDLUX组件去查察创建的通道:
·REST调用:全部写进USC插件的信息会位于拓扑usc下,以下是拓扑上下文内容:
·type:POST
·headers:Authorization:BasicYWRtaW46YWRtaW4=
·url:
https://localhost:8181/restconf/operations/us
c-channel:view-channel
·payload:
{
"input":{
"topology-id":"usc"
}
}
在其他信息中,这会返回一个包罗通道信息的有效负载,比方它的ID、运行OpenDaylight的主机名(inocybe.local)、VM的IP地点(192.168.2.26)和创建会话(TLS)的协议范例三部分构成。它还包罗对会话赋权的数据;以下是第一个被创建的会话,还没有读写操纵。
"channel":[{
"channel-id":
"Controller:inocybe.local-Device:192.168.2.26-
type:TLS",
"channel-type":"TLS",
"session":[{
"session-id":"1",
"bytes-in":0,
"bytes-out":0,
"termination-point":{
"termination-point-id":"2007"
},
}],
"destination":{
"dest-node":"192.168.2.26"
}
}]
·导航到https://localhost:8181/index.html
利用admin/admin登录。在右边,点击USC标签:
6.利用通道发送一条信息。将得到此中一个运行USCagent的VMIP和正在运行的echo服务器的端口(不管是否利用TCP),报文如下:
·type:POST
·headers:Authorization:BasicYWRtaW46YWRtaW4=
·url:
https://localhost:8181/restconf/operations/usc-channel:s
end-message
·payload:
{
"input":{
"channel":{
"hostname":"192.168.2.26",
"port":"2007",
"tcp":"true",
"content":"Thisisatestmessage."
}
}
}
这个哀求能返回一条被告知正在工作的报文。由于利用echo服务器,以是返回的信息会跟发送的相似。在你的装备上,你能界说返回的格式,并能收到该格式的信息。
{
"output":{
"result":"Succeedtosendrequest
todevice(192.168.2.26:2007),
contentisThisisatestmessage."
}
}
7.再次查察通道信息,我们能看到输入输出的数量已经增长。实行与第5步同样的处理惩罚。
以下是当前通道输出的会话1。它表现了字节数在增长、每个会话的字节数、整个通道信息。
"channel":[{
"channel-id":"Controller:inocybe.local-Device:
192.168.2.26-type:TLS",
"source":{
"source-node":"inocybe.local"
},
"sessions":1,
"channel-type":"TLS",
"call-home":"",
"channel-alarms":0,
"session":[{
"session-id":"1",
"bytes-in":23,
"termination-point":{
"termination-point-id":"2007"
},
"session-alarms":0,
"bytes-out":23
}],
"destination":{
"dest-node":"192.168.2.26"
},
"bytes-in":23,
"bytes-out":23
}]
8.移除会话,整理全部统计:
·type:POST
·headers:Authorization:BasicYWRtaW46YWRtaW4=
·url:
https://localhost:8181/restconf/operations/usc-channel:r
emove-channel
·payload:
{
"input":{
"channel":{
"hostname":"192.168.2.26",
"port":"2007",
"tcp":"true"
}
}
}
此哀求会返回一个正向信息,告知通道已经乐成移除。
{
"output":{
"result":"Succeedtoremove
device(192.168.2.26:2007)!"
}
}
你可以利用第5步发送哀求;会望见通道还在,但是会话已移除。
工作原理
当你创建一个通道时,你会利用Netty框架去创建通道管道,USC插件会起首创建一个主机和长途装备之间的会话,然后它在会话中创建inbound和outbound通道以提供两种通讯方式。利用OpenDaylight和USCagent提供的证书创建会话。证书必须雷同,否则毗连会失败。在这个例子中,我们利用一台echo服务器,用于callback发送的消息,将其内容发回。
这里利用的会话和通道是和USC项目不一样的,究竟上USC项目利用相反的术语,以是一个通道是一个会话,一个会话是USC项目标一个通道。
更多
你可以对雷同的通道创建多个会话。为此,参考第3步,打开另一个VM的终端界面,并立即启动echo服务器(差别端口):
$java-jarEchoServer.jar-ttrue-p2008
·根据步调4创建一个特定端口的通道
·发送哀求去查察通道,查察第5步发送的哀求
·此时的返回包罗两个会话:
"session":[{
"session-id":"2",
"bytes-in":0,
"termination-point":{
"termination-point-id":"2008"
},
"session-alarms":0,
"bytes-out":0
},
{
"session-id":"1",
"bytes-in":0,
"termination-point":{
"termination-point-id":"2007"
},
"session-alarms":0,
"bytes-out":0
}]
你可以在每个通道拥有尽大概多的会话。这意味着在雷同的主机上运行一堆装备,你可以利用雷同的安全通道毗连它们任何一个。
物联网协议
IoTDM(IoTDataManagement,物联网数据管理)项目都是一系列oneM2M协议的子集。其目标是提供一个通用的machine-to-machine层面,能植入各种各样的装备和软件。它尽大概依照最新的oneM2M的规格。版本1公开可用:http://www.onem2m.org/technical/published-documents.
OpenDaylightIoTDM项目提供以数据为中心的中心件来作为一个oneM2M的署理。它能使授权应用进入任何装备并从中获取已上传的数据。其以数据为中心的架构原理是提供一个单独版本的全局数据空间,用于应用市场、优化网络堵塞和应用处理惩罚,如从物联网域增删装备。
IoTDM项目有本领与传感器、物联网管理体系和数据斲丧者等这些数据泉源会商。它支持CoAP,MQTT和HTTPsouthbound协议。项目答应在给定的资源集上创建、规复、更新、删除和提示等操纵,它可以是CSEBase、AE、容器、内容实例、订阅、接入控制战略、节点等等。随着项目标发展会支持更多的资源。
预备条件
此章内容要求OpenDaylight编置IoTDM服务,还必要一个RESTClient。发起下载和利用Postman:https://www.getpostman.com/假如你还没预备好,它是一个方便导入已界说RESTAPIs的collection和负载的工具。
我们将会在此章节利用Postman的collection:https://www.getpostman.com/collections/f2a7e723ee6da44715e9
操纵指南
1.利用karaf脚本启动OpenDaylightkaraf版本。利用脚本将进入Karaf下令行:
$./bin/karaf
2.安装界面友爱的用户操纵UI组件,利用它设置全部必要LACP功能的依靠:
opendaylight-user@rootfeature:installodl-iotdm-onem2m
这必要花少量时间完成安装。
3.启动你的Postmanclient和输入上述毗连的collection,然后依照以下步调:
2)在弹出窗口选择从“ImportfromLink”。
3)粘贴https://www.getpostman.com/collections/f2a7e723ee6da44715e9
4)点击“Import”。画面表现:collection已导入,如今从工具栏获取利用:
5)点击右上角按钮“Show/Hidesidebar”
6)点击文件夹BasicIOTDMCRUDTest。你会得到全部测试应用的RESTAPIs:
4.提供一个CSE(CommonServicesEntity,公共服务实体)叫InCSE1
§type:POST
§headers:Authorization:BasicYWRtaW46YWRtaW4=
§url:https://
localhost:8181/restconf/operations/onem2m:onem2m-cse-
provisioning
§payload:
{
"input":{
"onem2m-primitive":[{
"name":"CSE_ID",
"value":"InCSE1"
},
{
"name":"CSE_TYPE",
"value":"IN-CSE"
}]
}
}
5.AE(ApplicationEntity,应用实体)注册到CSEX-M2M-Origin,代表组合者的哀求。X-M2M-RI是RequestIdentifier组件。
§type:POST
§headers:Content-Type:application/vnd.onem2m-res+json;ty=2X-M2M-
Origin:Test_AE_IDX-M2M-RI:12345
§url:https://localhost:8282/InCSE1
§payload:
{
"m2m:ae":{
"api":"testAppId",/*ApplicationID*/
"apn":"testAppName",/*Application
name*/
"rn":"TestAE",/*Resourcename*/
"or":"https://ontology/ref",/*On
topologyreference*/
"rr":true/*Requestreachability*/
}
}
6.向AE发送哀求创建名为TestContainer的容器:
§type:POST
§headers:Content-Type:application/vnd.onem2m-res+json;ty=3X-M2M-
Origin://iotsandbox.cisco.com:10000X-M2M-RI:12345
§url:https://localhost:8282/InCSE1
§payload:
{
"m2m:cnt":{
"rn":"TestContainer"/*Resourcename*/
}
}
7.在TestContainer创建名为Cin2的内容实例:
§type:POST
§headers:Content-Type:application/vnd.onem2m-res+json;ty=4X-M2M-
Origin://iotsandbox.cisco.com:10000X-M2M-RI:12345
§url:https://localhost:8282/InCSE1/TestContainer
§payload:
{
"cin":{
"con":"CCDS",/*Content/*
"rn":"Cin1"/*Resourcename*/
}
}
8.获取第4步中全部在CSEInCSE1创建的children:
§type:GET
§headers:
Content-Type:application/vnd.onem2m-res+json
X-M2M-Origin://iotsandbox.cisco.com:10000
X-M2M-RI:12345
§url:https://localhost:8282/InCSE1?fu=1
这会重新得到关于CSE的全部信息,它的封闭类children,如AE,容器和内容实例。它会默认接入控制战略
9.获取肯定命量位于CSEInCSE1的children
§type:GET
§headers:
Content-Type:application/vnd.onem2m-res+json
X-M2M-Origin://iotsandbox.cisco.com:10000
X-M2M-RI:12345
§url:https://localhost:8282/InCSE1?fu=1lim=2
这个哀求的限定设置成2,在URL中查察参数lim。你能增长或镌汰此数字去获取所需组件。
10.创建一个订阅以得到在CSEInCSE1内给定容器的变革关照:
§type:POST
§headers:
Content-Type:application/vnd.onem2m-res+json;ty=23
X-M2M-Origin://iotsandbox.cisco.com:10000
X-M2M-RI:12345
§url:https://localhost:8282/InCSE1/TestContainer
工作原理
IoTDM项目提供和实现RPCs,使oneM2M资源的子集发生相互作用。一个RPC是一个RemoteProcedureCall(长途程序调用),目标是通过处理惩罚同步方式提供比调用REST更少的耽误。对于每个RPC,其关联的实现对应于一个界说预期举动的回调函数。IoTDM项目界说oneM2M资源为models,然后提供一个OpenDaylight中的MD-SAL架构的树。当一个资源被修改,一个notifier会产生一个oneM2M提示给订阅者。这个过程利用一个公开订阅范例机制。末了,IoTDM项目实现3个southbound协议,分别是ConstrainedApplicationProtocol(应用束缚协议,CoAP–RFC-7252),MQTT(MQTelemetryTransport,遥测传输MQ)和此章节所用的HTTP协议。
控制cablemodem终端体系
OpenDaylight的PCMM(PacketCableMultiMedia,PacketCable多媒体)项目是一个接口,能让你控制和管理CMTS(CableModemTerminationSystem,缆线调制解调器终端体系)中网络组件的装备流量。服务流量通过DOCSIS(DataOverCableServiceInterfaceSpecification)的标准,来提供一个在CMTS和CM(CableModem,线缆调制解调器)之间的一个DQoS(DynamicQualityofService,动态质量服务)。项目由一台战略服务器、一台应用manager、CMTS和CM构成。战略服务器负责分配网络资源给每个订阅者和应用,应用manager负责指定每个应用的QoS要求给战略服务器,CMTS负责实行基于带宽容量的战略,CM负责与客户端(cablesystem)网络毗连。
预备条件
此章节将只必要一台CTMS装备。假如你没有,可以利用PCCM项目中提供的CMTS模仿器。
在此章节我们将利用此模仿器。对于那些不必要的可以直接跳到下一节的第4步。
我们之前先容过Postman工具和Postmancollection。在此章节,我们同样利用一个Postmancollection:https://www.getpostman.com/collections/e58cca444488
dd90753b提供全部所需APIs。
这个collection要求一个Postman环境。可以以后处获取:https://github.com/jgoodyear/OpenDaylightCookbook/blob/master/chapter3/chapter3-recipe6/PCM
M_Sample_Local.postman_environment.
Postman可以设置默认值。复制粘贴原始数据到导入部分。然后在右上角,有一个下拉框选择环境,选择“PCMMSamplelocal”。通过点击右边按钮(像眼睛的按钮),你会望见环境的内容。
操纵指南
1.获取packetcable-emulator压缩包
$gitclone--branchrelease/beryllium-sr2
https://git.opendaylight.org/gerrit/packetcable
$cdpacketcable/packetcable-emulator/
$mvnassembly:assembly
在目标文件夹将会成为压缩包,此中一个interest以-jar-with-dependencies.jar末了。
2.创建一个YAML格式的设置文件,而且包罗以下值:
CMTS通讯端标语
port:3918
CMTS支持的每个gate最大分类数量
numberOfSupportedClassifiers:4
设置服务类名称:
serviceClassNames:
-direction:UPSTREAM
names:
-extrm_up
-foo_up
-direction:DOWNSTREAM
names:
-extrm_dn
-foo_dn
CableModern信息:
cmStatuses:
-host:10.32.110.180
status:true
-host:10.32.110.179
status:true
3.利用jar和做以下设置启动模仿器:
$java-cppacketcable-emulator-1.3.2-Beryllium-
SR2-jar-with-dependencies.jar
org.pcmm.rcd.impl.CMTS{pathtoyaml}
22:00:02.966[main]INFO
org.pcmm.concurrent.IWorkerPool-Poolsize:32
22:00:02.984[main]INFO
org.pcmm.rcd.impl.AbstractPCMMServer-Server
startedandlisteningonport:3918
4.利用karaf脚本启动OpenDaylight版本:
$./bin/karaf
5.安装界面友爱的用户操纵UI组件,利用该组件以设置用户身份验证的依靠:
opendaylight-user@rootfeature:installodl-packetcable-policy-server
这会花些许时间完成安装。
6.在设置PCMMgate之前,我们必要创建一个OpenDaylight和CTMS/CCAP(ConvergedCableAccessPlatform)之间长期的毗连。(从Postmancollection添加CCAP1哀求)
我们毗连此中一个已设置的模仿装备并事先启动(在这里你可利用本身的装备)。必要知道装备的IP地点和端口,及上卑鄙的服务类名。
提示:假如你利用模仿器,就用正在运行的模仿器的主机IP地点。
末了,你必须给URL和payload的新入口界说${ID}。(${ID}是一个字符串)
§type:PUT
§headers:
Authorization:BasicYWRtaW46YWRtaW4=
§url:
https://localhost:8181/restconf/config/packetcable:ccaps
/ccap/${ID}
§payload:
{
"ccap":[{
"ccapId":"${ID}",
"amId":{
"am-tag":"0xcada",
"am-type":"1"
},
"connection":{
"ipAddress":"10.32.110.180",
"port":"3918"
},
"subscriber-subnets":[
"10.32.110.1/24"
],
"downstream-scns":[
"extrm_dn"
],
"upstream-scns":[
"extrm_up"
]
}]
}
假如CCAP毗连乐成,HTTP哀求会返回“200OK”
启动模仿器时会看到很多活动下令行,第一条看到的消息是新毗连:
[pool-2-thread-1]INFO
org.pcmm.rcd.impl.AbstractPCMMServer-Accepteda
newconnectionfrom:192.168.2.11:49682
一旦毗连创建,一个keepalive机制就会启动,保障毗连始终是up。
7.核实刚创建毗连的状态。((Operational–GetAllCCAPs)
对于这些哀求我们将利用操纵数据存储中的操纵数据。这反映装备的当前状态。
§type:GET
§headers:
Authorization:BasicYWRtaW46YWRtaW4=
§url:
https://localhost:8181/restconf/operational/packetcable:
ccaps/ccap/${ID}
这条哀求返回装备的毗连信息${ID}=1。我们装备如今是毗连的。
{
"ccap":[
{
"ccapId":"1",
"connection":{
"connected":true
}
}
]
}
8.我们如今创建一个gate。为此我们将提交以下哀求:(Gatew/classifier)我们给gate利用第一个界说在设置文件的CableModem。
你将必须在此条哀求界说三个变量:${APPLICATION_CLASSIFIER},${SUBSCRIBER_ID}和${GATE_ID}
§type:PUT
§headers:
Authorization:BasicYWRtaW46YWRtaW4=
§url:
https://localhost:8181//restconf/config/packetcable:qos/
apps/app/${APPLICATION_CLASSIFIER}/subscribers/subscrib
er/${SUBSCRIBER_ID}/gates/gate/${GATE_ID}/
§payload:
{"gate":
{
"gateId":"${APPLICATION_CLASSIFIER}",
"classifiers":{
"classifier-container":[{
"classifier-id":"1",
"classifier":{
"srcIp":"10.10.10.0",
"dstIp":"10.32.110.178",
"protocol":"0","srcPort":
"1234",
"dstPort":"4321",
"tos-byte":"0xa0",
"tos-mask":"0xe0"
}
}]
},"gate-spec":{
"dscp-tos-overwrite":"0xa0","dscp-
tos-mask":"0xff"
},"traffic-profile":{
"service-class-name":"extrm_up"
}
}
}
哀求正常时返回200OK,你会查察到终端界面一些活动,形貌gate已乐成处理惩罚。
[Thread-0]INFOorg.pcmm.rcd.impl.CmtsPepReqStateMan-Returning
SUCCESS
forgaterequest[extrm_up]direction[Upstream]forhost-10.32.110.180
工作原理
项目利用一个DOCSIS抽象层去管理DOCSIS和PCMM具体的属性,通过服务流量的申请存储、变动默认QoS的值。此组件负责增长或删除CTMS装备。它提供具体的
DOCSIS的北向的RESTAPIs。南向组件答应通过利用COPS(CommonOpenPolicyService)协议与CMTS通讯。它实现PCMM/COPS/PDP功能,界说如下:http://www.cablelabs.com/wp-content/uploads/specdocs/PKT-SP-MM-I05-091029.pdf
留意:当创建gate,你必要在3种差别范例的分类中选择:标准范例(案例中利用的)、扩展范例,IPv6范例。
相干阅读:
高端私有云项目交换群,欢迎参加!
完
参加中国最活泼的OpenStack技能讨论QQ群,加群主QQ:502207183,并注明都会、行业、技能方向。
我要评论