As first, congrats to Audrys, aka au3, OpenACS author; I played a little with OpenACS and it seems to be a really good TR-069 framework, even if in beta version.
In the last days I have found some bugs, immediately fixed by the author in the svn version; at this time (svn revision 181 and release 0.03) I suggest you to download the latest svn version and compile it (on Debian you need subversion package):
svn co http://openacs.svn.sourceforge.net/svnroot/openacs openacs ant -f b.xml cp dist/acs.ear /opt/jboss/server/default/deploy/
If you already have it running, be aware you need to drop db tables and lets the svn version to create them.
OpenACS exposes a javascript engine you can use to implement your configuration server logic. Of course, you need to know TR-069 (CWMP) and related Technical Reports; you can find these documents here: Broadband Forum Technical Reports
OpenACS runs the “Default” script for each Inform request it receives: in this script you can do your business and call other script.
On each script you can access objects exposed by OpenACS: you can find some information on the OpenACS wiki page on SourceForge.
You can find a Default script example at the end of this post.
Actually I’m testing OpenACS with AVM Fritz!Box Fon 7170 and they really speak the same language! Firmware upgrade and configuration changes work good, I have not yet tested parameter attributes and notification changes.
If you are interested in this matter, stay tuned! 😉
My Default script:
var i; var sData; sData = 'n=========================================================='; sData += 'nDeviceId:'; sData += 'n Manufacturer: ' + cpe.Inform.DeviceId.Manufacturer; sData += 'n OUI: ' + cpe.Inform.DeviceId.OUI; sData += 'n ProductClass: ' + cpe.Inform.DeviceId.ProductClass; sData += 'n SerialNumber: ' + cpe.Inform.DeviceId.SerialNumber; sData += 'nMisc:'; sData += 'n MaxEnvelopes: ' + cpe.Inform.MaxEnvelopes; sData += 'n RetryCount: ' + cpe.Inform.RetryCount; sData += 'n CurrentTime: ' + cpe.Inform.CurrentTime; sData += 'nEvents:' ; for( i=0; i<=cpe.Inform.Event.length-1; i++ ) sData += 'n ' + cpe.Inform.Event[i].EventCode+' ['+cpe.Inform.Event[i].CommandKey + ']'; sData += 'nParams:'; for( i=0; i<=cpe.Inform.ParameterList.length-1; i++ ) sData += 'n ' + cpe.Inform.ParameterList[i].Name+'='+cpe.Inform.ParameterList[i].Value; sData += 'n'; sData += 'n=========================================================='; logger( sData ); // ------------------------------------------------------------------------------ for( i=0; i<=cpe.Inform.ParameterList.length-1; i++ ) { switch ( cpe.Inform.ParameterList[i].Name ) { case 'InternetGatewayDevice.ManagementServer.ParameterKey': cpedb.ManagementServer_ParameterKey = cpe.Inform.ParameterList[i].Value; break; case 'InternetGatewayDevice.DeviceInfo.SpecVersion': cpedb.DeviceInfo_SpecVersion = cpe.Inform.ParameterList[i].Value; break; case 'InternetGatewayDevice.DeviceInfo.HardwareVersion': cpedb.DeviceInfo_HardwareVersion = cpe.Inform.ParameterList[i].Value; break; case 'InternetGatewayDevice.DeviceInfo.SoftwareVersion': cpedb.DeviceInfo_SoftwareVersion = cpe.Inform.ParameterList[i].Value; break; case 'InternetGatewayDevice.DeviceInfo.ProvisioningCode': cpedb.DeviceInfo_ProvisioningCode = cpe.Inform.ParameterList[i].Value; break; case 'InternetGatewayDevice.ManagementServer.ConnectionRequestURL': cpedb.ManagementServer_ConnectionRequestURL = cpe.Inform.ParameterList[i].Value; break; default: if( cpe.Inform.ParameterList[i].Name.indexOf( 'InternetGatewayDevice.WANDevice.' ) >= 0 ) { cpedb.DefaultWANConnection = cpe.Inform.ParameterList[i].Name.substr( 0, cpe.Inform.ParameterList[i].Name.indexOf( '.ExternalIPAddress' ) ); cpedb.DefaultWANConnection_ExternalIPAddress = cpe.Inform.ParameterList[i].Value; } break; } } cpedb.Save() var sEvent; var sCommandKey; for( i=0; i<=cpe.Inform.Event.length-1; i++ ) { sEvent = cpe.Inform.Event[i].EventCode; sCommandKey = cpe.Inform.Event[i].CommandKey; switch ( sEvent ) { case '0 BOOTSTRAP': break; case '1 BOOT': break; case '2 PERIODIC': break; case '3 SCHEDULED': break; case '4 VALUE CHANGE': break; case '5 KICKED': break; case '6 CONNECTION REQUEST': break; case '7 TRANSFER COMPLETE': break; case '8 DIAGNOSTICS COMPLETE': break; } } DoSomething();