最近公司需要一个能远程控制终端设备的系统,目前使用的协议是TR069,查看一个开源项目OpenACS是对TR069的实现,可惜的是该项目已停止维护
TR069协议
全称“Technical Report 069”是由DSL Forum(一个非盈利性的全球行业联盟,致力于发展宽带网络范,其成员包括通讯、设备、计算机、网络和服务提供商等行业的领先厂商,现已更名为“Broadband Forum”)修订一份技术规范,该规范是应用层的管理协议,命名为“CPE广域网管理协议(CPE WAN Management Protocol)”。
TR069定义了一套全新的网管体系结构,包括管理模型,交互接口及基本的管理参数,能够有效地实施对家庭网络设备的管理。
在TR069协议定义的网管模型中管理服务器称为自动配置服务器(ACS),负责完成对用户终端设备(CPE)的管理。ACS与CPE之间的接口称为南向接口,ACS与运营商的其他网管系统、业务管理系统、计费系统(OSS/BSS)之间的接口称为北向接口,TR069协议主要定义南向接口的标准。TR069协议允许 ACS 给一个 CPE 或一组基于多种标准的CPE 提供服务。这个服务提供机制允许 CPE 既可以在刚刚连接到宽带接入网时,也可以在以后的任何时间来进行动态服务提供或重新配置。此机制包括支持在异步状况下 ACS 发起的服务。此协议包含的鉴权机制允许为每一台指定的 CPE 或基于相同的 CPE 供应商、型号、软件版本或其他标准的 CPE 组提供服务。同时也提供了一些可选的功能来管理那些有特殊级别安全需求的应用或业务,例如付费服务等。
TR069协议网络拓扑如下图,ACS 是在网络中的服务器,根据预定制来管理设备,其左侧连接运营商的其他网管系统、业务管理系统等北向接口。 TR069协议主要定义了ACS和CPE间的南向接口,TR069协议可以用于理DSLB-NT以及其他类型的CPE,包括路由器和 LAN 侧的客户端设备。它被服务供应商用于基于跟设备已经建立的IP层链接的特殊媒体接入上。
TR069协议栈
TR069协议包含一些该协议特有的组件,同时也使用了一些标准协议,如下:
- CPE/ACS Management Application
- RPC Methods
- SOAP
- HTTP
- SSL/TLS
- TCP/IP
TR069 架构在 HTTP / HTTPS 之上,借由 SOAP 包装 XML 物件做为沟通内容的通讯协议。
Openacs简介
Openacs是一个用Java编写的开源的ACS服务器,该项目于2007-09-06 由Audrius Valunas发起,经过四年的开发,Openacs已经拥有了非常完善的功能,不仅仅可以作为CPE开发的辅助测试工具,而且完全可以胜任对一定数量的CPE进行远程管理。Openacs采用B/S模式,可以通过浏览器访问ACS服务器,对CPE的远程管理可以通过编写Java script来灵活实现。Openacs需要部署在JBoss应用程序服务器,Release的版本有bin(二进制)版本和src(源码)版本的,其中源码版本需要使用ant进行编译。
可惜的是该项目已停止维护且无源码
Openacs服务配置
由于将要用到的openacs和jboss都是用java语言所编写,所以配置前我们需要一些必须的环境配置
软件环境
- linux系统(centos7.x)
- jdk(version:1.8)
- jboss(version:-4.2.0.GA) 这里的版本非常重要,我试了其他高版本,问题会比较多
- openacs-bin-0.5
- mysql
JDK安装
#vi /etc/profile
export JAVA_HOME=/usr/installpackage/jdk1.8.0_111
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
jboss安装
jboss下载地址:https://pan.baidu.com/s/1o7Pfcsa
下载后进行解压完成
将下载到的数据库驱动解压,将mysql-connector-java-5.1.7-bin.jar拷贝到 $(JBOSS_HOME)/server/default/lib/下面。
mysql安装
安装后设置账号密码,并创建数据库ACS。
部署openacs
- 将acs.ear拷贝到/opt/jboss-4.2.2.GA/server/default/deploy/下面。
- 修改完成后将openacs-ds.xml拷贝到($JBOSS_HOME)/server/default/deploy/下面:
<?xml version="1.0" encoding="UTF-8"?>
<datasources>
<local-tx-datasource>
<jndi-name>ACS</jndi-name>
<connection-url>jdbc:mysql://localhost/ACS</connection-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<user-name>openacs</user-name>
<password>openacs</password>
<min-pool-size>5</min-pool-size>
<max-pool-size>20</max-pool-size>
<idle-timeout-minutes>5</idle-timeout-minutes>
</local-tx-datasource>
</datasources>
- 将openacs-service.xml拷贝到($JBOSS_HOME)/server/default/deploy/jms下面
启动jboss
./bin/run.sh -b 0.0.0.0
打开服务http://192.168.102.253:8080/openacs/
若服务启动失败,请关闭防火墙再试。
异常处理
java.lang.UnsupportedOperationException:
setProperty must be overridden by all subclasses of SOAPMessage
原因是Jboss的soap实现的是老的javax.xml.soap.SoapMessage接口,这个接口的setProperty方法在老版本是不需要override的,但是到了Java6,由于Java6的jdk本身自带soap包,而自带的这个包的SoapMessage接口对setProperty方法又强制其实现类要override自身,否则则抛出上述异常。
解决方案:
把
${JBOSS_HOME}/lib/
中除了getopt.jar, jboss-system.jar, jboss-jmx.jar
其他所有的jar移进${JBOSS_HOME}/lib/endorsed
,同时移动${JBOSS_HOME}/client/
目录中的jboss-saaj.jar ,jboss-jaxrpc.jar
到${JBOSS_HOME}/lib/endorsed
目录下,这样服务器将使用jboss自带的老版本,经验证有效。
CPE终端测试
首先下载cpe文件fishcorecpe-v1.0.2-build20120606-01.tar.gz
解压,修改fishcore.conf文件,内容如下:
#acsurl http://10.116.20.3:8080/web/autoacs
#acsurl https://10.116.20.3:8443/web/autoacs
acsurl http://192.168.102.253:8080/openacs/acs
acsusr acs
acspwd acs
cpeusr cpe
cpepwd cpe
主要是配置acsurl指向服务器接口。
启动
./fishcorecpe
可以看到以下日志
fishcore-cpe version: v1.0.2
build in: Jun 6 2012 21:19:40
Copyright (C) FishOS Embeded Software Studio 2012-2013
This is a Demo version
Technique(TR069) support: http://www.xnmp.net
...
loading...
now init parameter entry...
parameter node callback method init ok
device data model is : TR-098 InternetGatewayDevice
bootstraping.....
generate run-time xml tree ok
command config : http://192.168.102.253:8080/openacs/acs ok
command config : acs ok
command config : acs ok
command config : cpe ok
command config : cpe ok
init Parameters ... ok
init transfer info ...ok
remove rebooting related flag ok
init device ok
cwmp sys init done
Fishcore_cpe>local-control thread sync timer bind ok
acs thread sync timer bind ok
create timer thread ok
remove unboot firmware ok
no usage acs info need to be resume
run-time memory ok
system init completed
system now is running...
acsurl请求ok,说明已连接到服务器,可以查看服务器日志,得到设备ID,如FC1234567890
接着可以通过ID在服务器上查找对应的设备,同时也可以下发信令给设备,设备信息如下:
目前 openacs的作者已经移除了相关的全部源代码,不再维护和更新。
大家可以到:http://sourceforge.net/projects/libreacs/去看一下,那里有没移除之前的源代码。