EasyCwmp - easycwmp
View Issue Details
0000003easycwmp[All Projects] Helppublic2014-05-28 14:392014-05-30 16:06
Parshad 
Anis 
urgentblockalways
resolvedfixed 
OpenWRTLinux3.10
0000003: CWMP Version mis-match between EasyCWMP and Perl-ACS causing SOAPAction Header missing and creating XML parser problem
We are using perl-cwmp(https://github.com/dpavlin/perl-cwmp [^])as an ACS on RHEL 6.0 and easycwmp at CPE with OpenWRT as a TR-069 client.

EasyCWMP sends Inform message successfully, ACS receives inform message but while parsing, its shows "missing SOAPAction header" error message and sends response to client, at client side while paring InformResponse message its shows
"rpc_inform(225): parse Inform xml message from ACS failed" error message.

We looked into XML files at both side, Perl-ACS using cwmp-1-0 version and easycwmp using cwmp-1-2 version, so we are assuming this might causing this problem.

EasyCWMP:
xmlns:cwmp="urn:dslforum-org:cwmp-1-2

Perl-ACS:
xmlns:cwmp="urn:dslforum-org:cwmp-1-0

Could you please give your view on this and help us to configure easycwmp so it can send inform request in cwmp-1-0 version.

Following are log signature from both side:

AT EASYCWMP: Sending of Inform Message:
root@OpenWrt:~# /etc/init.d/easycwmpd start
config_init_local(53):: easycwmp.@local[0].interface=eth0
config_init_local(63):: easycwmp.@local[0].port=7547
config_init_local(81):: easycwmp.@local[0].ubus_socket=/var/run/ubus.sock
config_init_local(69):: easycwmp.@local[0].username=easycwmp
config_init_local(75):: easycwmp.@local[0].password=easycwmp
config_init_acs(147):: easycwmp.@acs[0].scheme=http
config_init_acs(153):: easycwmp.@acs[0].username=admin
config_init_acs(159):: easycwmp.@acs[0].password=admin
config_init_acs(165):: easycwmp.@acs[0].hostname=192.168.1.2
config_init_acs(175):: easycwmp.@acs[0].port=3333
config_init_acs(181):: easycwmp.@acs[0].path=/
config_init_acs(187):: easycwmp.@acs[0].periodic_enable=1
config_init_acs(193):: easycwmp.@acs[0].periodic_interval=100
+++ HTTP SERVER CONFIGURATION +++
NOT BOUND TO IP
port: '7547'
--- HTTP SERVER CONFIGURATION ---
+++ HTTP CLIENT CONFIGURATION +++
http_client_init(49):: url: http://admin:admin@192.168.1.2:3333/ [^]
http_client_init(55):: ssl_verify: SSL certificate validation disabled.
--- HTTP CLIENT CONFIGURATION ---
root@OpenWrt:~# > POST / HTTP/1.1

Host: 192.168.1.2:3333

Accept: */*

User-Agent: easycwmp

Content-Type: text/xml

Content-Length: 3286

Expect: 100-continue



AT Perl-ACS: Inform Request Handling and InformResponse:
root@dhcppc1 perl-cwmp]# ./bin/acs.pl --debug
## cleaning dump directory
created CWMP::Server({
  debug => 1,
  port => 3333,
  session => {
               create_dump => 1,
               store => { debug => 1, module => "YAML", path => "./" },
             },
}) object
## debug level: 1
ACS waiting for request on port 3333
Found store plugins: CWMP::Store::HASH, CWMP::Store::JSON, CWMP::Store::YAML
open { debug => 1, module => "YAML", path => "./" } at lib/CWMP/Store/HASH.pm line 45.
<<<< 192.168.1.1 START
POST / HTTP/1.1

Host: 192.168.1.2:3333

Accept: */*

User-Agent: easycwmp

Content-Type: text/xml

Content-Length: 3286

Expect: 100-continue




missing SOAPAction header
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <soap_env:Envelope
xmlns:soap_env="http://schemas.xmlsoap.org/soap/envelope/" [^]
xmlns:soap_enc="http://schemas.xmlsoap.org/soap/encoding/" [^]
xmlns:xsd="http://www.w3.org/2001/XMLSchema" [^]
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" [^]
xmlns:cwmp="urn:dslforum-org:cwmp-1-2">
  <soap_env:Header>
   <cwmp:ID soap_env:mustUnderstand="1" />
  </soap_env:Header>
  <soap_env:Body>
   <cwmp:Inform>
    <DeviceId>
     <Manufacturer>easycwmp</Manufacturer>
     <OUI>FFFFFF</OUI>
     <ProductClass>easycwmp</ProductClass>
     <SerialNumber>FFFFFF123456</SerialNumber>
    </DeviceId>
    <Event soap_enc:arrayType="cwmp:EventStruct[3]">
     <EventStruct>
      <EventCode>0 BOOTSTRAP</EventCode>
      <CommandKey />
     </EventStruct>
     <EventStruct>
      <EventCode>2 PERIODIC</EventCode>
      <CommandKey />
     </EventStruct>
     <EventStruct>
      <EventCode>1 BOOT</EventCode>
      <CommandKey />
     </EventStruct>
    </Event>
    <MaxEnvelopes>1</MaxEnvelopes>
    <CurrentTime>2011-09-08T22:42:04+00:00</CurrentTime>
    <RetryCount>0</RetryCount>
    <ParameterList soap_enc:arrayType="cwmp:ParameterValueStruct[11]">
     <ParameterValueStruct xsi:type="xsd:string">
      <Name>InternetGatewayDevice.DeviceInfo.HardwareVersion</Name>
      <Value>example_hw_version</Value>
     </ParameterValueStruct>
     <ParameterValueStruct xsi:type="xsd:string">
      <Name>InternetGatewayDevice.DeviceInfo.Manufacturer</Name>
      <Value>easycwmp</Value>
     </ParameterValueStruct>
     <ParameterValueStruct xsi:type="xsd:string">
      <Name>InternetGatewayDevice.DeviceInfo.ManufacturerOUI</Name>
      <Value>FFFFFF</Value>
     </ParameterValueStruct>
     <ParameterValueStruct xsi:type="xsd:string">
      <Name>InternetGatewayDevice.DeviceInfo.ProductClass</Name>
      <Value>easycwmp</Value>
     </ParameterValueStruct>
     <ParameterValueStruct xsi:type="xsd:string">
      <Name>InternetGatewayDevice.DeviceInfo.ProvisioningCode</Name>
      <Value></Value>
     </ParameterValueStruct>
     <ParameterValueStruct xsi:type="xsd:string">
      <Name>InternetGatewayDevice.DeviceInfo.SerialNumber</Name>
      <Value>FFFFFF123456</Value>
     </ParameterValueStruct>
     <ParameterValueStruct xsi:type="xsd:string">
      <Name>InternetGatewayDevice.DeviceInfo.SoftwareVersion</Name>
      <Value>example_sw_version</Value>
     </ParameterValueStruct>
     <ParameterValueStruct xsi:type="xsd:string">
      <Name>InternetGatewayDevice.DeviceInfo.SpecVersion</Name>
      <Value>1.0</Value>
     </ParameterValueStruct>
     <ParameterValueStruct xsi:type="xsd:string">
      <Name>InternetGatewayDevice.ManagementServer.ConnectionRequestURL</Name>
      <Value>http://192.168.1.2:3333</Value> [^]
     </ParameterValueStruct>
     <ParameterValueStruct xsi:type="xsd:string">
      <Name>InternetGatewayDevice.ManagementServer.ParameterKey</Name>
      <Value></Value>
     </ParameterValueStruct>
     <ParameterValueStruct xsi:type="xsd:string">
      <Name>InternetGatewayDevice.WANDevice.1.WANConnectionDevice.1.WANIPConnection.1.ExternalIPAddress</Name>
      <Value>192.168.1.1</Value>
     </ParameterValueStruct>
    </ParameterList>
   </cwmp:Inform>
  </soap_env:Body>
 </soap_env:Envelope>

<<<< 192.168.1.1 END
Use of uninitialized value in scalar chomp at lib/CWMP/Parser.pm line 68, <GEN1> line 8.
>>> dispatching to InformResponse with args undef
>>>> 192.168.1.1 START


At EasyCWMP: InformResponse Message Paring:
< HTTP/1.1 200 OK

< Content-Type: text/xml; charset="utf-8"

< Content-Length: 421

< Server: Perl-CWMP/0.21

< SOAPServer: Perl-CWMP/0.21

<

+++ RECEIVED HTTP RESPONSE (PART) +++
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" [^]
               xmlns:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" [^]
               xmlns:cwmp="urn:dslforum-org:cwmp-1-0">
  <soap:Header>
    <cwmp:NoMoreRequests>0</cwmp:NoMoreRequests>
  </soap:Header>
  <soap:Body>
    <cwmp:InformResponse>
      <MaxEnvelopes>1</MaxEnvelopes>
    </cwmp:InformResponse>
  </soap:Body>
</soap:Envelope>--- RECEIVED HTTP RESPONSE (PART) ---
+++ RECEIVED HTTP RESPONSE +++
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" [^]
               xmlns:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" [^]
               xmlns:cwmp="urn:dslforum-org:cwmp-1-0">
  <soap:Header>
    <cwmp:NoMoreRequests>0</cwmp:NoMoreRequests>
  </soap:Header>
  <soap:Body>
    <cwmp:InformResponse>
      <MaxEnvelopes>1</MaxEnvelopes>
    </cwmp:InformResponse>
  </soap:Body>
</soap:Envelope>--- RECEIVED HTTP RESPONSE ---
rpc_inform(225): parse Inform xml message from ACS failed
+++ HTTP CLIENT CONFIGURATION +++
http_client_init(49):: url: http://admin:admin@192.168.1.2:3333/ [^]
http_client_init(55):: ssl_verify: SSL certificate validation disabled.
--- HTTP CLIENT CONFIGURATION ---

1.Start Perl-ACS:
./bin/acs.pl --debug

2.Start EasyCWMP:
root@OpenWrt:~# /etc/init.d/easycwmpd start
Uploading Log file.
No tags attached.
log CPE-ACS.log (7,427) 2014-05-28 14:39
http://support.easycwmp.org/file_download.php?file_id=8&type=bug
Issue History
2014-05-28 14:39ParshadNew Issue
2014-05-28 14:39ParshadFile Added: CPE-ACS.log
2014-05-30 16:01AnisNote Added: 0000015
2014-05-30 16:01AnisNote Edited: 0000015bug_revision_view_page.php?bugnote_id=15#r22
2014-05-30 16:05AnisNote Added: 0000016
2014-05-30 16:06AnisAssigned To => Anis
2014-05-30 16:06AnisStatusnew => feedback
2014-05-30 16:06AnisStatusfeedback => resolved
2014-05-30 16:06AnisResolutionopen => fixed

Notes
(0000015)
Anis   
2014-05-30 16:01   
Hi Parshad,

The problem cause is:
The Perl-CWMP send the inform response without xsd and xsi namespaces.
EasyCwmp make a check on these namespaces, then inform response is rejected for this cause.

I checked the CWMP standard and I found that these namespaces are not mandotary for all ACS messages.

I fixed this issue in the latest version of EasyCwmp.

Please find the latest version at EasyCwmp website (http://www.easycwmp.org/index.php/manual [^])

(0000016)
Anis   
2014-05-30 16:05   
If you are installing EasyCwmp on OpenWrt, then you have to remove the old easycwmp folder from the package directory and remove easycwmp-openwrt.tar.gz from the package directory before installing the new version.