
{"id":11490,"date":"2021-03-01T10:11:25","date_gmt":"2021-03-01T10:11:25","guid":{"rendered":"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/device_management\/xconf\/xconf_server_-_user_guide_for_configuration_and_feature_validation\/"},"modified":"2025-03-25T05:18:32","modified_gmt":"2025-03-25T05:18:32","slug":"xconf_server_-_user_guide_for_configuration_and_feature_validation","status":"publish","type":"page","link":"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/device_management\/xconf\/xconf_server_-_user_guide_for_configuration_and_feature_validation\/","title":{"rendered":"Xconf Server &#8211; User guide for configuration and feature validation"},"content":{"rendered":"<p><br \/>\n <\/p>\n<div class=\"toc-macro client-side-toc-macro conf-macro output-block\" data-headerelements=\"H1,H2,H3,H4,H5,H6,H7\" data-hasbody=\"false\" data-macro-name=\"toc\"><\/div>\n<p><\/p>\n\n\n<h2 class=\"wp-block-heading wp-main-header\">Source code repository<\/h2>\n\n\n<p>Xconf consists of 2 web applications &#8211; Xconf dataservice and Xconf admin. Xconf DataService is the app that the STBs talk to. Xconf Admin allows humans to enter all the information necessary for Xconf to provide the correct information to STBs.<\/p>\n<p>This repo contains the source code for both the applications &#8211; &nbsp;<a class=\"external-link\" href=\"https:\/\/github.com\/rdkcentral\/xconfserver\" rel=\"nofollow\">https:\/\/github.com\/rdkcentral\/xconfserver<\/a>&nbsp;<\/p>\n\n\n<h2 class=\"wp-block-heading wp-main-header\">Software Requirements (Reference setup)<\/h2>\n\n\n<div class=\"table-wrap\">\n\n\n<table class=\"relative-table wrapped confluenceTable\"><colgroup><col style=\"width: 0.0px\"><col style=\"width: 0.0px\"><\/colgroup><thead><tr><th class=\"confluenceTh\">Component<p><br><\/p><\/th><th class=\"confluenceTh\"><p>Recommendation<\/p><\/th><\/tr><\/thead><tbody><tr><td colspan=\"1\" class=\"confluenceTd\"><p>System\/OS<\/p><\/td><td colspan=\"1\" class=\"confluenceTd\">Ubuntu 18.04.1 LTS&nbsp; &nbsp;64 bit<\/td><\/tr><tr><td class=\"confluenceTd\">Disk space<\/td><td class=\"confluenceTd\">&gt; 5GB<\/td><\/tr><tr><td class=\"confluenceTd\">GIT<\/td><td class=\"confluenceTd\">Version 2.17.1<\/td><\/tr><tr><td colspan=\"1\" class=\"confluenceTd\">Python<\/td><td colspan=\"1\" class=\"confluenceTd\">2.7x<\/td><\/tr><tr><td colspan=\"1\" class=\"confluenceTd\">Maven<\/td><td colspan=\"1\" class=\"confluenceTd\">3.6.0<\/td><\/tr><tr><td class=\"confluenceTd\">Java\/JDK<\/td><td class=\"confluenceTd\">Java 8 (JDK version 1.8.0_282)<\/td><\/tr><\/tbody><\/table>\n\n\n<\/div>\n\n\n<h2 class=\"wp-block-heading wp-main-header\">Installation of dependencies<\/h2>\n\n\n<h3 class=\"wp-sub-header\">1.&nbsp;Install Java JDK<\/h3>\n<p>Java JDK version should be <strong>8. <\/strong>&nbsp;Get the supported version from Oracle or use the OpenJDK packages.<\/p>\n<p>Steps to install Open JDK<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">    $ sudo apt-get update<br>    $ sudo apt-get install openjdk-8-jdk<br><br>Check your installation using the command :<br>    $ java &nbsp;-version<\/pre>\n<h3 class=\"wp-sub-header\"><span>2. Install Maven (Version 3.6.0)<\/span><\/h3>\n<p><span>Maven version should be 3 +.&nbsp;<\/span><\/p>\n<p>To install maven follow these steps:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">    $ sudo apt update<br>    $ sudo apt install maven<br><br>Check the installation using :<br>    $ mvn -version<\/pre>\n<h3 class=\"wp-sub-header\">3. Download xconf server code<\/h3>\n<p>We can download the latest xconfserver code from <a class=\"external-link\" href=\"https:\/\/github.com\/rdkcentral\/xconfserver\" rel=\"nofollow\">https:\/\/github.com\/rdkcentral\/xconfserver<\/a>. The latest version of the code is available in main branch.<\/p>\n<ul>\n<li>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">Create a folder<br>$ mkdir xconf<\/pre>\n<\/li>\n<li>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">Step into the folder &amp; clone the repo<br>$ cd xconf\/<br>$ git clone <a class=\"external-link\" href=\"https:\/\/github.com\/rdkcentral\/xconfserver.git\" rel=\"nofollow\">https:\/\/github.com\/rdkcentral\/xconfserver.git<\/a> -b main<br><br><br><\/pre>\n<\/li>\n<li>To clone a particular tagged release :<br \/>$ You will get the name and details of each tag here in this page &#8211;<a class=\"external-link\" href=\"https:\/\/github.com\/rdkcentral\/xconfserver\/tags\" rel=\"nofollow\">https:\/\/github.com\/rdkcentral\/xconfserver\/tags<\/a><br \/>$ Clone step git clone &#8211;depth 1 &#8211;branch &lt;tag-name&gt; <a class=\"external-link\" href=\"https:\/\/github.com\/rdkcentral\/xconfserver.git\" rel=\"nofollow\">https:\/\/github.com\/rdkcentral\/xconfserver.git<\/a><br \/>&nbsp; &nbsp;eg : git clone &#8211;depth 1 &#8211;branch v1.3.11 <a class=\"external-link\" href=\"https:\/\/github.com\/rdkcentral\/xconfserver.git\" rel=\"nofollow\">https:\/\/github.com\/rdkcentral\/xconfserver.git<\/a>\n<\/li>\n<\/ul>\n<h3 class=\"wp-sub-header\">4. Install and setup Cassandra(Version 3.11.9)<\/h3>\n<h3 id=\"XconfServerUserguideforconfigurationandfeaturevalidation-InstallCassandra\">Install Cassandra<\/h3>\n<p>To install Cassandra , follow the below steps<\/p>\n<ul>\n<li>Download the tarball file for the version 3.11.9 :&nbsp;\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">$ wget -c <a class=\"external-link\" href=\"https:\/\/archive.apache.org\/dist\/cassandra\/3.11.9\/apache-cassandra-3.11.9-bin.tar.gz\" rel=\"nofollow\">https:\/\/archive.apache.org\/dist\/cassandra\/3.11.9\/apache-cassandra-3.11.9-bin.tar.gz<\/a>&nbsp;&nbsp;<span><br><\/span><\/pre>\n<\/li>\n<li>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">Unpack the tarball :&nbsp; <br>$ tar -xvf&nbsp; apache-cassandra-3.11.9-bin.tar.gz<\/pre>\n<\/li>\n<li>Step into apache-cassandra-3.11.9 folder :\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">$ cd apache-cassandra-3.11.9<\/pre>\n<\/li>\n<li>To start Cassandra, run the following command\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">$ sudo bin\/cassandra<\/pre>\n<\/li>\n<li>To verify that Cassandra is up and running, enter the following command :\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">$ bin\/nodetool status<\/pre>\n<\/li>\n<\/ul>\n<h3 id=\"XconfServerUserguideforconfigurationandfeaturevalidation-ConfigureCassandra\">Configure Cassandra<\/h3>\n<p>Note :&nbsp; For the next step, make sure that python is installed. Because cqlsh is python based command line tool. If python is not installed , use this command : sudo apt install python2.7<\/p>\n<ul>\n<li>schema.cql file is available in &#8216;xconf-angular-admin\/src\/test\/resources\/schema.cql&#8217;. We can use this cql file to create a corresponding schema . Open another terminal , step into apache-cassandra-3.11.9 folder and&nbsp; run the following command<\/li>\n<\/ul>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">  &nbsp; &nbsp; &nbsp; &nbsp; $ bin\/cqlsh -f&nbsp; { path-to-the-schem.cql file}<\/pre>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">  &nbsp; &nbsp;eg : $ bin\/cqlsh&nbsp; -f ~\/xconf\/xconfserver\/xconf-angular-admin\/src\/test\/resources\/schema.cql<\/pre>\n<ul>\n<li>To check if tables are created successfully, we can use cqlsh&nbsp;<\/li>\n<li>To start cqlsh, step into cassandra folder and enter the command:\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\"> $ bin\/cqlsh <\/pre>\n<\/li>\n<li>It gives cassandra cqlsh prompt as output. To check if all the tables are present enter the following commands in cqlsh prompt :<\/li>\n<\/ul>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">  &nbsp; &nbsp; &nbsp; cqlsh&gt;&nbsp; USE \"demo\"; <br><br>  &nbsp; &nbsp; &nbsp; cqlsh&gt;&nbsp; DESCRIBE KEYSPACE;<\/pre>\n<ul>\n<li>To exit from cqlsh prompt,&nbsp;<\/li>\n<\/ul>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">  &nbsp; &nbsp;   cqlsh&gt; quit<\/pre>\n<p><strong>Production Installation<\/strong><\/p>\n<p>The production installation should be similar to the local installation, except that Cassandra will be installed to multiple hosts.&nbsp; Please see the Apache Cassandra documentation for more information.<\/p>\n\n\n<h2 class=\"wp-block-heading wp-main-header\">Configuration and Service startup<br><br><\/h2>\n\n\n<h3 class=\"wp-sub-header\">1.&nbsp;Start Cassandra Service<\/h3>\n<ul>\n<li><span>To start an Xconf application, start the Cassandra server by executing the following commands:&nbsp;&nbsp;<br \/><\/span><\/li>\n<\/ul>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">  &nbsp; &nbsp;$ cd apache-cassandra-3.11.9<br>  &nbsp; &nbsp;$ sudo bin\/cassandra<\/pre>\n<ul>\n<li><span>Status of xconf server can be verified by using <\/span>&nbsp;the command<\/li>\n<\/ul>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">     $ bin\/nodetool status<\/pre>\n<p>You will get an output like this<\/p>\n<p><span class=\"confluence-embedded-file-wrapper confluence-embedded-manual-size\"><img decoding=\"async\" src=\"\/wp-content\/uploads\/sites\/16\/2024\/10\/image2022-1-19_15-19-11.png\"><\/span><\/p>\n<h3 class=\"wp-sub-header\">2. Configure and Start Application Services<\/h3>\n<p>Build and run steps mentioned below is based on these steps &#8211; <a class=\"external-link\" href=\"https:\/\/github.com\/rdkcentral\/xconfserver#run-application\" rel=\"nofollow\">https:\/\/github.com\/rdkcentral\/xconfserver#run-application<\/a>.<\/p>\n<h3 id=\"XconfServerUserguideforconfigurationandfeaturevalidation-a.BuildProject\">a. Build Project<\/h3>\n<ul>\n<li><span>Go to the xconf-server folder and run the following command to download all dependencies.<\/span><\/li>\n<\/ul>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">     $ cd ~\/xconf\/xconfserver<\/pre>\n<ul>\n<li>Run the following command from the xconfserver folder&nbsp;\n<p>&nbsp;$ mvn clean install<\/p>\n<\/li>\n<li><span>&nbsp;Or you can run this command with unit tests skipped<br \/>$ mvn clean install -DskipTests=true<\/span><\/li>\n<\/ul>\n<h3 id=\"XconfServerUserguideforconfigurationandfeaturevalidation-b.ConfigureAngularAdminUI\">b. Configure Angular Admin UI<\/h3>\n<p>For first time application deployment, create a &#8220;<em style=\"letter-spacing: 0.0px\">service.properties&#8221;<\/em><span>&nbsp; file under the path xconfserver\/xconf-angular-admin\/src\/main\/resources\/service.properties with the following contents.<\/span><\/p>\n<p><span> The sample service.properties file will be available in xconf-angular-admin\/src\/test\/resources\/service.properties, the below content is copied from the sample with a modification in cassandra port you can use this.<\/span><\/p>\n<div class=\"code panel pdl conf-macro output-block\" data-hasbody=\"true\" data-macro-name=\"code\">\n<div class=\"codeContent panelContent pdl\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">cassandra.keyspaceName=demo\ncassandra.contactPoints=127.0.0.1\ncassandra.username=\ncassandra.password=\ncassandra.port=9042\ncassandra.authKey=\n\ndataaccess.cache.tickDuration=60000\ndataaccess.cache.retryCountUntilFullRefresh=10\ndataaccess.cache.changedKeysTimeWindowSize=900000\ndataaccess.cache.reloadCacheEntries=false\ndataaccess.cache.reloadCacheEntriesTimeout=1\ndataaccess.cache.reloadCacheEntriesTimeUnit=DAYS\ndataaccess.cache.numberOfEntriesToProcessSequentially=10000\ndataaccess.cache.keysetChunkSizeForMassCacheLoad=500\ndataaccess.cache.changedKeysCfName=XconfChangedKeys4<\/pre>\n<\/div>\n<\/div>\n<p><\/p>\n<ul>\n<li>Go to xconf-angular-admin folder<\/li>\n<\/ul>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">  &nbsp; &nbsp;$ cd ~\/xconf\/xconfserver\/xconf-angular-admin<\/pre>\n<ul>\n<li>Run the following command from xconf-angular-admin folder\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">$ mvn jetty:run -DappConfig=${path-to-service-properties} -f pom.xml<\/pre>\n<\/li>\n<li>\n<p>For first time run only, we need to specify the path to service.properties . For the subsequent runs execute the below command in the folder xconfserver\/xconf-angular-admin:<\/p>\n<\/li>\n<\/ul>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">  &nbsp; &nbsp;$ mvn jetty:run<\/pre>\n<p>To run the admin UI launch it as&nbsp;<strong>http:\/\/&lt;XCONF-SERVER-IP&gt;:19093\/admin\/ <\/strong>&nbsp;in any browser(Default port is set as 19093, it can be changed by using the option -Djetty.port=[port number]). This will redirect to the login page.<\/p>\n<p>To launch in localhost : <a class=\"external-link\" href=\"http:\/\/127.0.0.1:19093\/admin\" rel=\"nofollow\">http:\/\/127.0.0.1:19093\/admin<\/a>&nbsp;<\/p>\n<p><span class=\"confluence-embedded-file-wrapper confluence-embedded-manual-size\"><img decoding=\"async\" src=\"\/wp-content\/uploads\/sites\/16\/2024\/10\/image2021-3-1_18-35-18.png\"><\/span><\/p>\n<p><\/p>\n<p>If the user wants both read and write permissions ,then enter username and password for the login as <strong>admin<\/strong> and <strong>admin<\/strong> respectively<\/p>\n<p>If the user wants only read permissions ,then enter username and password for the login as <strong>user<\/strong> and <strong>user<\/strong> respectively.<\/p>\n<h4 class=\"diff-block-target diff-block-context\" id=\"XconfServerUserguideforconfigurationandfeaturevalidation-ActiveProfileOption(fordevelopmentpurpose):\"><strong>Active Profile Option (for development purpose):<\/strong><\/h4>\n<p class=\"diff-block-target diff-block-context\">If xconf-angular-admin is run with -Dspring.profiles.active=dev UI will use not compiled .js and .css files but the source files. See xconf-angular-admin\/src\/main\/webapp\/WEB-INF\/jsp\/xconfindex.jsp for details. That can be useful for local development purpose, to update UI it is just needed to reload page with cache refresh option.<\/p>\n<p class=\"diff-block-context\"><\/p>\n<h3 id=\"XconfServerUserguideforconfigurationandfeaturevalidation-c.ConfigureDataService\">c. Configure DataService<\/h3>\n<p class=\"auto-cursor-target\">For first time application deployment, create a &#8220;<em>service.properties&#8221;<\/em><span>&nbsp; file under the path xconfserver\/xconf-dataservice\/src\/main\/resources\/service.properties with the following contents. The sample service.properties file will be available in xconf-dataservice\/src\/test\/resources\/sample-service.properties(There are some mistakes in that sample file &#8211; 1. cassandra.keyspaceName=demo 2. dataaccess.cache.changedKeysCfName=XconfChangedKeys4 that is rectified below. You can also edit that file with the changes 1 and 2. Then rename it to be used here), the below content is taken from there and modified with change in cassandra port .<br \/><\/span><\/p>\n<div class=\"code panel pdl conf-macro output-block\" data-hasbody=\"true\" data-macro-name=\"code\">\n<div class=\"codeContent panelContent pdl\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">cassandra.keyspaceName=demo\ncassandra.contactPoints=127.0.0.1\ncassandra.username=\ncassandra.password=\ncassandra.port=9042\ncassandra.authKey=\n\ndataaccess.cache.tickDuration=60000\ndataaccess.cache.retryCountUntilFullRefresh=10\ndataaccess.cache.changedKeysTimeWindowSize=900000\ndataaccess.cache.reloadCacheEntries=false\ndataaccess.cache.reloadCacheEntriesTimeout=1\ndataaccess.cache.reloadCacheEntriesTimeUnit=DAYS\ndataaccess.cache.numberOfEntriesToProcessSequentially=10000\ndataaccess.cache.keysetChunkSizeForMassCacheLoad=500\ndataaccess.cache.changedKeysCfName=XconfChangedKeys4<\/pre>\n<\/div>\n<\/div>\n<ul>\n<li>Step into xconf-dataservice folder\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">$ cd ~xconf\/xconfserver\/xconf-dataservice<\/pre>\n<\/li>\n<li>Run the following command from xconf-dataservice folder\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">$ mvn jetty:run -DappConfig=${path-to-service-properties} -f pom.xml<\/pre>\n<\/li>\n<li>\n<p>For first time run only, we need to specify the path to service.properties . For the subsequent runs execute the below command in the folder xconfserver\/xconf-dataservice:<\/p>\n<\/li>\n<\/ul>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">     $ mvn jetty:run<\/pre>\n<p>To launch the application go to&nbsp;<strong>http:\/\/&lt;XCONF-SERVER-IP&gt;:19092\/queries\/environments&nbsp;<\/strong>(Default port is set as 19092, it can be changed by using the option -Djetty.port=[port number]) .&nbsp; To verify, add an entry in the environments tab of the Xconf admin application and check whether the same is updated here in data service.<\/p>\n<p>To launch in localhost : <a class=\"external-link\" href=\"http:\/\/127.0.0.1:19092\/queries\/environments\" rel=\"nofollow\">http:\/\/127.0.0.1:19092\/queries\/environments<\/a>&nbsp;<\/p>\n<ul>\n<li>\n<h4 id=\"XconfServerUserguideforconfigurationandfeaturevalidation-DataServiceEndpoints\">Data Service Endpoints<\/h4>\n<p>The endpoints available in data service is listed and described in below link:<\/li>\n<\/ul>\n<p><a class=\"external-link\" href=\"https:\/\/github.com\/rdkcentral\/xconfserver#endpoints\" rel=\"nofollow\">https:\/\/github.com\/rdkcentral\/xconfserver#endpoints<\/a><\/p>\n<p><strong><span>NOTE:<\/span><\/strong><span> To run the Admin UI and data service applications in background start jetty server as follows: <\/span><strong>nohup mvn jetty:run &amp;<\/strong><\/p>\n<h3 class=\"wp-sub-header\">3. Expected build issues<\/h3>\n<p>Below exceptions may be observed during the mvn clean install . This is an exception from unit test , but the tests will run successfully.<\/p>\n<p>Build process may stall for some time but the build will be successful and the application can be launched successfully. So it can be ignored as well.<\/p>\n<div class=\"code panel pdl conf-macro output-block\" data-hasbody=\"true\" data-macro-name=\"code\">\n<div class=\"codeContent panelContent pdl\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">\n\nno libsigar-amd64-linux.so in java.library.path\n\norg.hyperic.sigar.SigarException: no libsigar-amd64-linux.so in java.library.path\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.hyperic.sigar.Sigar.loadLibrary(Sigar.java:172)\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.hyperic.sigar.Sigar.&lt;clinit&gt;(Sigar.java:100)\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.apache.cassandra.utils.SigarLibrary.&lt;init&gt;(SigarLibrary.java:47)\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.apache.cassandra.utils.SigarLibrary.&lt;clinit&gt;(SigarLibrary.java:28)\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.apache.cassandra.service.StartupChecks$7.execute(StartupChecks.java:216)\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.apache.cassandra.service.StartupChecks.verify(StartupChecks.java:112)\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:196)\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:601)\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.cassandraunit.utils.EmbeddedCassandraServerHelper$1.run(EmbeddedCassandraServerHelper.java:133)\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at java.lang.Thread.run(Thread.java:748)<\/pre>\n<\/div>\n<\/div>\n<p><\/p>\n<p>Solution : This exception can be resolved by copying the .so file to the path \/usr\/lib.<\/p>\n<p><\/p>\n<div class=\"conf-macro output-block\" data-hasbody=\"true\" data-macro-name=\"show-if\">\n\n\n<h2 class=\"wp-block-heading wp-main-header\">Reference Setup<\/h2>\n\n\n<p>For helping the community to familiarize with the application, rdkm support team has created a reference setup . We have enabled SSL for both&nbsp; the applications and the URLs are given below<\/p>\n<p>Xconf angular admin &#8211;&nbsp;<a class=\"external-link\" href=\"https:\/\/xconf.rdkcentral.com:9093\/admin\/\" rel=\"nofollow\">https:\/\/xconf.rdkcentral.com:9093\/admin\/<\/a><\/p>\n<p>Xconf dataservice &#8211; &nbsp;<a class=\"external-link\" href=\"https:\/\/xconf.rdkcentral.com:9092\/info\/version\" rel=\"nofollow\">https:\/\/xconf.rdkcentral.com:9092\/info\/version<\/a><\/p>\n<\/div>\n<p><\/p>\n<p><\/p>\n<p><\/p>\n\n\n<h2 class=\"wp-block-heading wp-main-header\">Configuration and Validation of services<\/h2>\n\n\n<h3 class=\"wp-sub-header\">Admin UI Common Configuration<\/h3>\n<p>Below steps will affect all the features in Xconf system and should be configured after initial setup. Go to the steps given in site navigation step and press on create button to create new entries.<\/p>\n<h3 id=\"XconfServerUserguideforconfigurationandfeaturevalidation-DefineEnvironments\"><span>Define Environments<\/span><\/h3>\n<div class=\"panel conf-macro output-block\" data-hasbody=\"true\" data-macro-name=\"panel\">\n<div class=\"panelHeader\"><b>Site Navigation: &lt;xconf-server&gt;:19093 &gt;&gt; Common &gt;&gt; Environments | Example URL: <\/b><\/div>\n<div class=\"panelContent\">\n<p><span class=\"confluence-embedded-file-wrapper confluence-embedded-manual-size\"><img decoding=\"async\" src=\"\/wp-content\/uploads\/sites\/16\/2024\/10\/image2021-3-1_19-12-1.png\"><\/span><\/p>\n<\/div>\n<\/div>\n<h3 class=\"auto-cursor-target\" id=\"XconfServerUserguideforconfigurationandfeaturevalidation-DefineModels\">Define Models<\/h3>\n<div class=\"panel conf-macro output-block\" data-hasbody=\"true\" data-macro-name=\"panel\">\n<div class=\"panelHeader\"><b>Site Navigation: http:\/\/&lt;XCONF-SERVER&gt;:19093 &gt;&gt; Common &gt;&gt; Models | Example URL :<\/b><\/div>\n<div class=\"panelContent\">\n<p><span class=\"confluence-embedded-file-wrapper confluence-embedded-manual-size\"><img decoding=\"async\" src=\"\/wp-content\/uploads\/sites\/16\/2024\/10\/image2021-3-1_20-19-50.png\"><\/span><\/p>\n<\/div>\n<\/div>\n<h3 id=\"XconfServerUserguideforconfigurationandfeaturevalidation-DefineMACList\">Define MAC List<\/h3>\n<p>(This will be used to target certain list of MACs against a particular feature configuration)<\/p>\n<p><\/p>\n<div class=\"panel conf-macro output-block\" data-hasbody=\"true\" data-macro-name=\"panel\">\n<div class=\"panelHeader\"><b>Site Navigation http:\/\/&lt;XCONF-SERVER&gt;:19093 &gt;&gt; Common &gt;&gt; MAC List | Example URL : <\/b><\/div>\n<div class=\"panelContent\">\n&nbsp;<span class=\"confluence-embedded-file-wrapper confluence-embedded-manual-size\"><img decoding=\"async\" src=\"\/wp-content\/uploads\/sites\/16\/2024\/10\/image2021-3-1_20-29-17.png\"><\/span>\n<\/div>\n<\/div>\n<h3 id=\"XconfServerUserguideforconfigurationandfeaturevalidation-DefineIPlist\">Define IP list<\/h3>\n<div class=\"panel conf-macro output-block\" data-hasbody=\"true\" data-macro-name=\"panel\">\n<div class=\"panelHeader\"><b>Site Navigation http:\/\/&lt;XCONF-SERVER&gt;:19093 &gt;&gt; Common &gt;&gt; IP List | Example URL : <\/b><\/div>\n<div class=\"panelContent\">\n<p>&nbsp;<span class=\"confluence-embedded-file-wrapper confluence-embedded-manual-size\"><img decoding=\"async\" src=\"\/wp-content\/uploads\/sites\/16\/2024\/10\/image2021-3-1_20-30-34.png\"><\/span><\/p>\n<\/div>\n<\/div>\n<h3 class=\"wp-sub-header\">Feature Validation(RFC)<\/h3>\n<h3 class=\"auto-cursor-target\" id=\"XconfServerUserguideforconfigurationandfeaturevalidation-Configuration\">Configuration<\/h3>\n<p>RDK Feature control configuration can be added by adding below 2 sections<\/p>\n<ol>\n<li>Define the Feature<\/li>\n<li>Define the Feature Rule<\/li>\n<\/ol>\n<h4 id=\"XconfServerUserguideforconfigurationandfeaturevalidation-Definethefeature:\">Define the feature:<\/h4>\n<p>A new feature can be defined via RFC<em>-&gt; Feature -&gt; Create. &#8216;<\/em>Feature Name&#8217; should be unique and understandable, &#8216;Config data&#8217; should be key value pairs.<\/p>\n<div class=\"panel conf-macro output-block\" data-hasbody=\"true\" data-macro-name=\"panel\">\n<div class=\"panelHeader\"><b>Site Navigation | http:\/\/&lt;XCONF_SERVER&gt;:19093 &gt;&gt; RFC &gt;&gt; Feature<\/b><\/div>\n<div class=\"panelContent\">\n<p><span class=\"confluence-embedded-file-wrapper confluence-embedded-manual-size\"><img decoding=\"async\" src=\"\/wp-content\/uploads\/sites\/16\/2024\/10\/image2021-3-1_21-40-28.png\"><\/span><\/p>\n<\/div>\n<\/div>\n<h4 id=\"XconfServerUserguideforconfigurationandfeaturevalidation-DefinetheFeatureRule\">Define the Feature Rule<\/h4>\n<p>Feature rule is to map devices to a particular feature. A new feature rule can be created via RFC-&gt;feature rule -&gt; Create<\/p>\n<div class=\"panel conf-macro output-block\" data-hasbody=\"true\" data-macro-name=\"panel\">\n<div class=\"panelHeader\"><b>Site Navigation | http:\/\/&lt;XCONF_SERVER&gt;:19093 &gt;&gt; RFC &gt;&gt; Feature Rule<\/b><\/div>\n<div class=\"panelContent\">\n<p><span class=\"confluence-embedded-file-wrapper confluence-embedded-manual-size\"><img decoding=\"async\" src=\"\/wp-content\/uploads\/sites\/16\/2024\/10\/image2021-3-1_21-42-37.png\"><\/span><\/p>\n<\/div>\n<\/div>\n<h3 id=\"XconfServerUserguideforconfigurationandfeaturevalidation-Verification\">Verification<\/p>\n<\/h3>\n<p>a. Verification of feature and feature rule via test page.<\/p>\n<p>After creating the feature and feature rule, go to RFC-&gt;Test page and give a parameter that will match the one of the rules that you have created. The matched rule and JSON response will be displayed similar to below example.<\/p>\n<div class=\"panel conf-macro output-block\" data-hasbody=\"true\" data-macro-name=\"panel\">\n<div class=\"panelHeader\"><b>Site Navigation: http:\/\/&lt;XCONF_SERVER&gt;:19093 &gt;&gt; RFC &gt;&gt; TestPage<\/b><\/div>\n<div class=\"panelContent\">\n<p><span class=\"confluence-embedded-file-wrapper confluence-embedded-manual-size\"><img decoding=\"async\" src=\"\/wp-content\/uploads\/sites\/16\/2024\/10\/image2021-3-5_13-8-58.png\"><\/span><\/p>\n<\/div>\n<\/div>\n<p>b. &nbsp;Verification via curl command<\/p>\n<p>The curl command mocks the request being sent from an STB like below and sample response is also given. It can be given as a curl command or as a get request via postman or browser<\/p>\n<p><em>eg :<\/em><\/p>\n<p><em>$ curl &#8216;http:\/\/&lt;XCONF_IP&gt;:19092\/featureControl\/getSettings?estbMacAddress= B8:27:EB:94:71:82&rsquo;<\/em><\/p>\n<p><em> (<\/em>Here the feature rule mapped to this particular mac address will be obtained)<\/p>\n<p>Sample Response:<\/p>\n<div class=\"code panel pdl conf-macro output-block\" data-hasbody=\"true\" data-macro-name=\"code\">\n<div class=\"codeContent panelContent pdl\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">{\n &nbsp;&nbsp;&nbsp;\"featureControl\":&nbsp;{\n\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\"features\":&nbsp;[\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\"name\":&nbsp;\"EmulatorFeature\",\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\"effectiveImmediate\":&nbsp;true,\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\"enable\":&nbsp;false,\n\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\"configData\":&nbsp;{\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\"ENABLE_AAMP\":&nbsp;\"false\"\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},\n\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\"featureInstance\":&nbsp;\"AAMP-mock&nbsp;feature\"\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]\n &nbsp;&nbsp;&nbsp;}\n}<\/pre>\n<\/div>\n<\/div>\n<h3 id=\"XconfServerUserguideforconfigurationandfeaturevalidation-Clientendverification(RPI)\">Client end verification (RPI)<\/h3>\n<p>Verification and setup from RPI<\/p>\n<div class=\"table-wrap\">\n\n\n<table class=\"relative-table wrapped confluenceTable\"><colgroup><col style=\"width: 11.4402%\"><col style=\"width: 88.5441%\"><\/colgroup><tbody><tr><th colspan=\"1\" class=\"confluenceTh\">CURL Command<\/th><td class=\"confluenceTd\">curl &#8216;http:\/\/&lt;XCONF_IP&gt;:19092\/featureControl\/getSettings?estbMacAddress=<span>B8:27:EB:FF:54:95<\/span>&amp;firmwareVersion=rdk-generic-hybrid-wpe-image_default_20190702100618&amp;env=pi&amp;model=RPI&amp;ecmMacAddress=<span>B8:27:EB:FF:54:95<\/span>&amp;controllerId=2504&amp;channelMapId=2345&amp;vodId=15660&amp;partnerId=&amp;accountId=Unknown&amp;version=2&#8242;<\/td><\/tr><tr><th colspan=\"1\" class=\"confluenceTh\">CPE Script (RDK-V)<\/th><td class=\"confluenceTd\">\/lib\/rdk\/RFCbase.sh<\/td><\/tr><tr><th colspan=\"1\" class=\"confluenceTh\">CPE Service (RDK-V)<\/th><td class=\"confluenceTd\"><span>\/lib\/systemd\/system\/rfc-config.service<\/span><\/td><\/tr><\/tbody><\/table>\n\n\n<\/div>\n<p><\/p>\n<h3 class=\"wp-sub-header\">Feature Validation (LogUpload)<\/h3>\n<h3 id=\"XconfServerUserguideforconfigurationandfeaturevalidation-Configuration.1\">Configuration<\/h3>\n<p>1.&nbsp;Create upload repository<span class=\"nolink\"> via DCM-&gt;Upload repository -&gt; Create.&nbsp; &nbsp;Here we can add where to configure the log upload, i.e. the upload URL and protocol(This will be the URL of logopload server that is setup to upload the log files, it can be http, https or tftp servers).<\/span><\/p>\n<div class=\"panel conf-macro output-block\" data-hasbody=\"true\" data-macro-name=\"panel\">\n<div class=\"panelHeader\"><b>Site Navigation | http:\/\/&lt;XCONF_SERVER&gt;:19093 &gt;&gt; DCM &gt;&gt; UploadRepository<\/b><\/div>\n<div class=\"panelContent\">\n<p><span class=\"confluence-embedded-file-wrapper confluence-embedded-manual-size\"><img decoding=\"async\" src=\"\/wp-content\/uploads\/sites\/16\/2024\/10\/image2021-3-1_21-51-13.png\"><\/span><\/p>\n<\/div>\n<\/div>\n<p><\/p>\n<p>2. Create rule via DCM-&gt;Formulas-&gt;Create.&nbsp;<\/p>\n<div class=\"panel conf-macro output-block\" data-hasbody=\"true\" data-macro-name=\"panel\">\n<div class=\"panelHeader\"><b>Site Navigation | http:\/\/&lt;XCONF_SERVER&gt;:19093 &gt;&gt;DCM &gt;&gt; Formulas<\/b><\/div>\n<div class=\"panelContent\">\n<p><span class=\"confluence-embedded-file-wrapper confluence-embedded-manual-size\"><img decoding=\"async\" src=\"\/wp-content\/uploads\/sites\/16\/2024\/10\/image2021-3-1_21-56-1.png\"><\/span><\/p>\n<\/div>\n<\/div>\n<p><\/p>\n<p>3.&nbsp; Once you save the created formula&nbsp; , then a &lsquo;define Settings&rsquo; tab with &lsquo;Create Device Settings&rsquo;, &lsquo;Create log settings&rsquo;, Create VOD settings&rsquo; will be available<\/p>\n<p>4.&nbsp; Click on &#8216;Create Device Settings&#8217; tab and edit the&nbsp; Device Settings.<\/p>\n<p>5. &nbsp;<span>Edit the Log upload Setting (Create schedule &amp; Add the upload repository created beforehand).<\/span><\/p>\n<p><span>6. <strong>Note<\/strong> : The formula will be effective only if we select &#8216;Are Settings Active&#8217; option to &#8216;true&#8217; in &#8216;Create Device Settings&#8217; and &#8216;Log Upload settings&#8217;<\/span><\/p>\n<p><\/p>\n<h3 id=\"XconfServerUserguideforconfigurationandfeaturevalidation-Verification.1\">Verification<\/h3>\n<p>a.Verification of log upload settings test page.<\/p>\n<p>After creating the feature and feature rule, go to DCM-&gt;Test page and give a parameter that will match the one of the formulas that you have created. Then matched rule and the settings will be displayed like below<\/p>\n<div class=\"panel conf-macro output-block\" data-hasbody=\"true\" data-macro-name=\"panel\">\n<div class=\"panelHeader\"><b>Site Navigation: &lt;xconf-server&gt;:19093 &gt;&gt; DCM &gt;&gt; Test Page<\/b><\/div>\n<div class=\"panelContent\">\n<p><span class=\"confluence-embedded-file-wrapper confluence-embedded-manual-size\"><img decoding=\"async\" src=\"\/wp-content\/uploads\/sites\/16\/2024\/10\/image2021-3-5_13-7-34.png\"><\/span><\/p>\n<\/div>\n<\/div>\n<p><\/p>\n<p><\/p>\n<p>b. Verification via curl command<\/p>\n<p>The curl command mocks the request being sent from an STB like below and sample response is also given. It can be given as a curl command or as a get request via postman or browser<\/p>\n<p><em>eg :<\/em><\/p>\n<p><em>$ curl &#8216;http:\/\/&lt;XCONF_IP&gt;: 19092\/loguploader\/getSettings?estbMacAddress=B8:27:EB:94:71:82&rsquo;.&nbsp;<\/em><\/p>\n<p><em>&nbsp;<\/em>Sample response :&nbsp;<\/p>\n<div class=\"code panel pdl conf-macro output-block\" data-hasbody=\"true\" data-macro-name=\"code\">\n<div class=\"codeContent panelContent pdl\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">{\n &nbsp;&nbsp;&nbsp;\"urn:settings:GroupName\":&nbsp;\"RPI_Device_Settings\",\n\n&nbsp;&nbsp;&nbsp;&nbsp;\"urn:settings:CheckOnReboot\":&nbsp;true,\n &nbsp;&nbsp;&nbsp;\"urn:settings:CheckSchedule:cron\":&nbsp;\"10&nbsp;00&nbsp;*&nbsp;*&nbsp;*\",\n &nbsp;&nbsp;&nbsp;\"urn:settings:CheckSchedule:DurationMinutes\":&nbsp;0,\n &nbsp;&nbsp;&nbsp;\"urn:settings:LogUploadSettings:Message\":&nbsp;null,\n\n&nbsp;&nbsp;&nbsp;&nbsp;\"urn:settings:LogUploadSettings:Name\":&nbsp;\"Log&nbsp;upload&nbsp;settings&nbsp;test\",\n &nbsp;&nbsp;&nbsp;\"urn:settings:LogUploadSettings:NumberOfDays\":&nbsp;5,\n\n&nbsp;&nbsp;&nbsp;&nbsp;\"urn:settings:LogUploadSettings:UploadRepositoryName\":&nbsp;\"Upload&nbsp;repository&nbsp;test\",\n &nbsp;&nbsp;&nbsp;\"urn:settings:LogUploadSettings:RepositoryURL\":&nbsp;\"http:\/\/35.155.171.121\/xconf\/logupload.php\",\n &nbsp;&nbsp;&nbsp;\"urn:settings:LogUploadSettings:UploadOnReboot\":&nbsp;false,\n &nbsp;&nbsp;&nbsp;\"urn:settings:LogUploadSettings:UploadImmediately\":&nbsp;false,\n &nbsp;&nbsp;&nbsp;\"urn:settings:LogUploadSettings:upload\":&nbsp;true,\n\n &nbsp;&nbsp;&nbsp;\"urn:settings:LogUploadSettings:UploadSchedule:cron\":&nbsp;\"10&nbsp;00&nbsp;*&nbsp;*&nbsp;*\",\n &nbsp;&nbsp;&nbsp;\"urn:settings:LogUploadSettings:UploadSchedule:levelone:cron\":&nbsp;null,\n &nbsp;&nbsp;&nbsp;\"urn:settings:LogUploadSettings:UploadSchedule:leveltwo:cron\":&nbsp;null,\n &nbsp;&nbsp;&nbsp;\"urn:settings:LogUploadSettings:UploadSchedule:levelthree:cron\":&nbsp;null,\n &nbsp;&nbsp;&nbsp;\"urn:settings:LogUploadSettings:UploadSchedule:DurationMinutes\":&nbsp;0,\n &nbsp;&nbsp;&nbsp;\"urn:settings:VODSettings:Name\":&nbsp;null,\n &nbsp;&nbsp;&nbsp;\"urn:settings:VODSettings:LocationsURL\":&nbsp;null,\n &nbsp;&nbsp;&nbsp;\"urn:settings:VODSettings:SRMIPList\":&nbsp;null\n}<\/pre>\n<\/div>\n<\/div>\n<h3 id=\"XconfServerUserguideforconfigurationandfeaturevalidation-Clientendverification(RPI).1\">Client end verification (RPI)<\/h3>\n<div class=\"table-wrap\">\n\n\n<table class=\"relative-table wrapped confluenceTable\"><colgroup><col style=\"width: 7.52233%\"><col style=\"width: 92.462%\"><\/colgroup><tbody><tr><th colspan=\"1\" class=\"confluenceTh\">CURL Command<\/th><td class=\"confluenceTd\">curl &#8216;<span class=\"nolink\">http:\/\/&lt;XCONF_IP&gt;:19092\/loguploader\/getSettings?estbMacAddress=<span>B8:27:EB:FF:54:95<\/span>&amp;firmwareVersion=rdk-generic-hybrid-wpe-image_default_20190702100618&amp;env=dev&amp;model=RPI&amp;ecmMacAddress=<span>B8:27:EB:FF:54:95<\/span>&amp;controllerId=2504&amp;channelMapId=2345&amp;vodId=15660&amp;timezone=&amp;partnerId=&amp;accountId=Unknown&amp;version=2<\/span>&#8216;<\/td><\/tr><tr><th colspan=\"1\" class=\"confluenceTh\">CPE Script (RDK-V)<\/th><td class=\"confluenceTd\"><p>\/lib\/rdk\/StartDCM.sh<\/p><p><span>\/lib\/rdk\/DCMscript.sh<\/span><\/p><\/td><\/tr><tr><th colspan=\"1\" class=\"confluenceTh\">CPE Service (RDK-V)<\/th><td class=\"confluenceTd\">\/lib\/systemd\/system\/dcm-log.service<\/td><\/tr><\/tbody><\/table>\n\n\n<\/div>\n<p><\/p>\n<h3 class=\"wp-sub-header\">Feature Validation (Telemetry)<\/h3>\n<p><\/p>\n<ol>\n<li>Telemetry configuration can be done by adding a permanent profile which contains below objects\n<ol>\n<li>Upload repository<\/li>\n<li>Profile options (Header, content, frequency etc.)<\/li>\n<\/ol>\n<\/li>\n<li>Creating a targeting rule which is basically mapping the profile to a set of MAC\/IP\/Device etc.\n<p><strong>Note<\/strong> : DCM settings should be already done&nbsp; for the devices that you are going to set telemetry configuration<\/li>\n<\/ol>\n<h3 id=\"XconfServerUserguideforconfigurationandfeaturevalidation-Configuration.2\">Configuration<\/h3>\n<ol>\n<li>Create a permanent profile Telemetry &#8211; &gt; Permanent Profiles -&gt; Create<\/li>\n<\/ol>\n<p><span>In the Telemetry Permanent Profile page, there will be a 5th column that allows a component name to be entered. The component name is optional and may be present for only some of the entries in the Telemetry profile.<\/span><\/p>\n<div class=\"panel conf-macro output-block\" data-hasbody=\"true\" data-macro-name=\"panel\">\n<div class=\"panelHeader\"><b>Site Navigation: http:\/\/&lt;XCONF_SERVER&gt;:19093 &gt;&gt; Telemetry &gt;&gt; Permanent Profiles<\/b><\/div>\n<div class=\"panelContent\">\n<span class=\"confluence-embedded-file-wrapper confluence-embedded-manual-size\"><img decoding=\"async\" src=\"\/wp-content\/uploads\/sites\/16\/2024\/10\/Screenshot%20(81).png\"><\/span>\n<\/div>\n<\/div>\n<p><\/p>\n<p>&nbsp; &nbsp; &nbsp;2.&nbsp;Once you save the permanent profile, you will get a message overlay &lsquo;Profile added to the pending changes&rsquo;. Then go to Changes -&gt; select the profile you create -&gt; Click on &ldquo;Approve selected changes&rdquo;.<br \/>Then the permanent profile will be listed under Telemetry &#8211; &gt; Permanent profiles<\/p>\n<div class=\"panel conf-macro output-block\" data-hasbody=\"true\" data-macro-name=\"panel\">\n<div class=\"panelHeader\"><b>Site Navigation: http:\/\/&lt;XCONF_SERVER&gt;:19093 &gt;&gt; Changes<\/b><\/div>\n<div class=\"panelContent\">\n<p><span class=\"confluence-embedded-file-wrapper confluence-embedded-manual-size\"><img decoding=\"async\" src=\"\/wp-content\/uploads\/sites\/16\/2024\/10\/image2021-3-2_10-10-0.png\"><\/span><\/p>\n<\/div>\n<\/div>\n<p>&nbsp; &nbsp; &nbsp;3. Create targeting rule via Telemetry -&gt; Targeting rules. Targeting rules is to map the profiles with rules.<\/p>\n<div class=\"panel conf-macro output-block\" data-hasbody=\"true\" data-macro-name=\"panel\">\n<div class=\"panelHeader\"><b>Site Navigation: http:\/\/&lt;XCONF_SERVER&gt;:19093 &gt;&gt; Telemetry &gt;&gt; Targeting Rule<\/b><\/div>\n<div class=\"panelContent\">\n<span class=\"confluence-embedded-file-wrapper confluence-embedded-manual-size\"><img decoding=\"async\" src=\"\/wp-content\/uploads\/sites\/16\/2024\/10\/Screenshot%20(84).png\"><\/span>\n<\/div>\n<\/div>\n<p><\/p>\n<h3 id=\"XconfServerUserguideforconfigurationandfeaturevalidation-Verification.2\">Verification<\/h3>\n<p>a. Verification of telemetry test page.<\/p>\n<p>After creating the permanent profile and targeting rules, go to Telemetry-&gt;Test page and give a parameter that will match the one of the rule that you have created. Then matched rule will be displayed like below.<\/p>\n<div class=\"panel conf-macro output-block\" data-hasbody=\"true\" data-macro-name=\"panel\">\n<div class=\"panelHeader\"><b>Site Navigation: &lt;xconf-server&gt;:19093 &gt;&gt; Telemetry &gt;&gt; Test Page<\/b><\/div>\n<div class=\"panelContent\">\n<span class=\"confluence-embedded-file-wrapper confluence-embedded-manual-size\"><img decoding=\"async\" src=\"\/wp-content\/uploads\/sites\/16\/2024\/10\/Screenshot%20(85).png\"><\/span>\n<\/div>\n<\/div>\n<p><\/p>\n<p>b. &nbsp;Verification via curl command<\/p>\n<p>The curl command mocks the request being sent from an STB like below and sample response is also given. It can be given as a curl command or as a get request via postman or browser. The same url&nbsp; used for logupload verification can be used here too, the response will have telemetry settings data like below (urn:settings:TelemetryProfile)<\/p>\n<p>The new API&nbsp; for Telemetry is getT2Settings. It will take the same parameters as the current API, \/loguploader\/getSettings.<\/p>\n<p>If the component name has been defined for an entry, the response will be in the new format. The second and third columns for that entry will not be used in the response. The content field comes from the fifth column (component name). The type field will be a constant string &#8220;&lt;event&gt;&#8221;.<\/p>\n<p><em>Example for getT2Settings:<\/em><\/p>\n<p><em><span>{&#8220;header&#8221;:&#8221;MEDIA_ERROR_NETWORK_ERROR&#8221;,&#8221;content&#8221;:&#8221;com.cisco.spvtg.ccsp.meshagent&#8221;,&#8221;type&#8221;:&#8221;&lt;event&gt;&#8221;,&#8221;pollingFrequency&#8221;:&#8221;0&#8243;}<\/span><\/em><\/p>\n<p>If the component name has not been defined for an entry, the response will be in the current format.<\/p>\n<p><em>Example for getSettings:<\/em><\/p>\n<p><em><span>{&#8220;header&#8221;:&#8221;MEDIA_ERROR_NETWORK_ERROR&#8221;,&#8221;content&#8221;:&#8221;onMediaError NETWORK ERROR(10)&#8221;,&#8221;type&#8221;:&#8221;receiver.log&#8221;,&#8221;pollingFrequency&#8221;:&#8221;0&#8243;}<\/span><\/em><\/p>\n<p><em>eg :<\/em><\/p>\n<p><em>$ curl &#8216;http:\/\/&lt;XCONF_IP&gt;: 19092\/loguploader\/getSettings?estbMacAddress=B8:27:EB:BE:D7:12&rsquo;<\/em><\/p>\n<p>Sample Response :<\/p>\n<div class=\"code panel pdl conf-macro output-block\" data-hasbody=\"true\" data-macro-name=\"code\">\n<div class=\"codeContent panelContent pdl\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">{\n    \"urn:settings:GroupName\": \"RDKM_TEST\",\n    \"urn:settings:CheckOnReboot\": true,\n    \"urn:settings:CheckSchedule:cron\": \"2 1 2 1 1\",\n    \"urn:settings:CheckSchedule:DurationMinutes\": 0,\n    \"urn:settings:LogUploadSettings:Message\": null,\n    \"urn:settings:LogUploadSettings:Name\": \"RDKM_TEST\",\n    \"urn:settings:LogUploadSettings:NumberOfDays\": 1,\n    \"urn:settings:LogUploadSettings:UploadRepositoryName\": \"RDKM_TEST\",\n    \"urn:settings:LogUploadSettings:RepositoryURL\": \"http:\/\/{loguoloadserver}\/xconf\/logupload.php\",\n    \"urn:settings:LogUploadSettings:UploadOnReboot\": true,\n    \"urn:settings:LogUploadSettings:UploadImmediately\": false,\n    \"urn:settings:LogUploadSettings:upload\": true,\n    \"urn:settings:LogUploadSettings:UploadSchedule:cron\": \"2 1 1 1 1\",\n    \"urn:settings:LogUploadSettings:UploadSchedule:levelone:cron\": null,\n    \"urn:settings:LogUploadSettings:UploadSchedule:leveltwo:cron\": null,\n    \"urn:settings:LogUploadSettings:UploadSchedule:levelthree:cron\": null,\n    \"urn:settings:LogUploadSettings:UploadSchedule:DurationMinutes\": 0,\n    \"urn:settings:VODSettings:Name\": null,\n    \"urn:settings:VODSettings:LocationsURL\": null,\n    \"urn:settings:VODSettings:SRMIPList\": null,\n    \"urn:settings:TelemetryProfile\": {\n        \"id\": \"69e37757-b463-47aa-94a8-2ce438e26a50\",\n        \"telemetryProfile\": [\n            {\n                \"header\": \"Firewall\",\n                \"content\": \"starting firewall service\",\n                \"type\": \"FirewallDebug.txt\",\n                \"pollingFrequency\": \"1\"\n            },\n            {\n                \"header\": \"MEDIA_ERROR_NETWORK_ERROR\",\n                \"content\": \"onMediaError NETWORK ERROR(10)\",\n                \"type\": \"receiver.log\",\n                \"pollingFrequency\": \"1\"\n            }\n        ],\n        \"schedule\": \"3\",\n        \"expires\": 0,\n        \"telemetryProfile:name\": \"RDKM_TEST\",\n        \"uploadRepository:URL\": \"http:\/\/{logupload-server}\/xconf\/logupload.php\",\n        \"uploadRepository:uploadProtocol\": \"HTTP\"\n    }\n}<\/pre>\n<\/div>\n<\/div>\n<p><em>eg :<\/em><\/p>\n<p><em>$ curl &#8216;http:\/\/&lt;XCONF_IP&gt;: 19092\/loguploader\/getT2Settings?estbMacAddress=B8:27:EB:BE:D7:12&rsquo;<\/em><\/p>\n<p>Sample Response :<\/p>\n<div class=\"code panel pdl conf-macro output-block\" data-hasbody=\"true\" data-macro-name=\"code\">\n<div class=\"codeContent panelContent pdl\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">{\n    \"urn:settings:GroupName\": \"RDKM_TEST\",\n    \"urn:settings:CheckOnReboot\": true,\n    \"urn:settings:CheckSchedule:cron\": \"2 1 2 1 1\",\n    \"urn:settings:CheckSchedule:DurationMinutes\": 0,\n    \"urn:settings:LogUploadSettings:Message\": null,\n    \"urn:settings:LogUploadSettings:Name\": \"RDKM_TEST\",\n    \"urn:settings:LogUploadSettings:NumberOfDays\": 1,\n    \"urn:settings:LogUploadSettings:UploadRepositoryName\": \"RDKM_TEST\",\n    \"urn:settings:LogUploadSettings:RepositoryURL\": \"http:\/\/{log-upload-server}\/xconf\/logupload.php\",\n    \"urn:settings:LogUploadSettings:UploadOnReboot\": true,\n    \"urn:settings:LogUploadSettings:UploadImmediately\": false,\n    \"urn:settings:LogUploadSettings:upload\": true,\n    \"urn:settings:LogUploadSettings:UploadSchedule:cron\": \"2 1 1 1 1\",\n    \"urn:settings:LogUploadSettings:UploadSchedule:levelone:cron\": null,\n    \"urn:settings:LogUploadSettings:UploadSchedule:leveltwo:cron\": null,\n    \"urn:settings:LogUploadSettings:UploadSchedule:levelthree:cron\": null,\n    \"urn:settings:LogUploadSettings:UploadSchedule:DurationMinutes\": 0,\n    \"urn:settings:VODSettings:Name\": null,\n    \"urn:settings:VODSettings:LocationsURL\": null,\n    \"urn:settings:VODSettings:SRMIPList\": null,\n    \"urn:settings:TelemetryProfile\": {\n        \"id\": \"69e37757-b463-47aa-94a8-2ce438e26a50\",\n        \"telemetryProfile\": [\n            {\n                \"header\": \"Firewall\",\n                \"content\": \"starting firewall service\",\n                \"type\": \"FirewallDebug.txt\",\n                \"pollingFrequency\": \"1\"\n            },\n            {\n                \"header\": \"MEDIA_ERROR_NETWORK_ERROR\",\n                \"content\": \"com.cisco.spvtg.ccsp.meshagent\",\n                \"type\": \"&lt;event&gt;\",\n                \"pollingFrequency\": \"1\"\n            }\n        ],\n        \"schedule\": \"3\",\n        \"expires\": 0,\n        \"telemetryProfile:name\": \"RDKM_TEST\",\n        \"uploadRepository:URL\": \"http:\/\/log-upload-server}\/xconf\/logupload.php\",\n        \"uploadRepository:uploadProtocol\": \"HTTP\"\n    }\n}<\/pre>\n<\/div>\n<\/div>\n<h3 id=\"XconfServerUserguideforconfigurationandfeaturevalidation-Clientendverification(RPI).2\">Client end verification (RPI)<\/h3>\n<div class=\"table-wrap\">\n\n\n<table class=\"relative-table wrapped confluenceTable\"><colgroup><col style=\"width: 7.52233%\"><col style=\"width: 92.462%\"><\/colgroup><tbody><tr><th colspan=\"1\" class=\"confluenceTh\">CURL Command<\/th><td class=\"confluenceTd\">curl &#8216;<span class=\"nolink\">http:\/\/&lt;XCONF_IP&gt;:19092\/loguploader\/getSettings?estbMacAddress=<span>B8:27:EB:FF:54:95<\/span>&amp;firmwareVersion=rdk-generic-hybrid-wpe-image_default_20190702100618&amp;env=dev&amp;model=RPI&amp;ecmMacAddress=<span>B8:27:EB:FF:54:95<\/span>&amp;controllerId=2504&amp;channelMapId=2345&amp;vodId=15660&amp;timezone=&amp;partnerId=&amp;accountId=Unknown&amp;version=2<\/span>&#8216;<\/td><\/tr><tr><th colspan=\"1\" class=\"confluenceTh\">CPE Script (RDK-V)<\/th><td class=\"confluenceTd\"><p>\/lib\/rdk\/DCMscript.sh<\/p><p>\/lib\/rdk\/dca_utility.sh<\/p><\/td><\/tr><tr><th colspan=\"1\" class=\"confluenceTh\">CPE Service (RDK-V)<\/th><td class=\"confluenceTd\">\/lib\/systemd\/system\/dcm-log.service<\/td><\/tr><\/tbody><\/table>\n\n\n<\/div>\n<h3 class=\"wp-sub-header\">Feature Validation (Firmware update)<\/h3>\n<h3 id=\"XconfServerUserguideforconfigurationandfeaturevalidation-Configuration.3\">Configuration<\/h3>\n<p>1. &nbsp;Firmware config can be created via Firmware &#8211; &gt; Firmware Configs -&gt; Create. Enter a description for this config.&nbsp; Also we can define the file name and version of the image\/firmware that need to be downloaded to the CPE device. The models that we defined in Common &rarr; Models section will be available here, We can select the required models by clicking on it.<\/p>\n<div class=\"panel conf-macro output-block\" data-hasbody=\"true\" data-macro-name=\"panel\">\n<div class=\"panelHeader\"><b>Site Navigation: http:\/\/&lt;XCONF_SERVER&gt;:19093 &gt;&gt; Firmware &gt;&gt; Firmware config<\/b><\/div>\n<div class=\"panelContent\">\n<span class=\"confluence-embedded-file-wrapper confluence-embedded-manual-size\"><img decoding=\"async\" src=\"\/wp-content\/uploads\/sites\/16\/2024\/10\/Screenshot%20(68).png\"><\/span>\n<\/div>\n<\/div>\n<p><\/p>\n<p>2.&nbsp; To create a firmware template, go to Firmware &rarr; Firmware templates. Enter the ID name. Select priority from the &#8216;Priority&#8217; drop down menu. Add conditions. There are some already existing templates, if you are using the existing Firmware Templates for configuration ,you can skip this step.<\/p>\n<div class=\"panel conf-macro output-block\" data-hasbody=\"true\" data-macro-name=\"panel\">\n<div class=\"panelHeader\"><b>Site Navigation: http:\/\/&lt;XCONF_SERVER&gt;:19093 &gt;&gt; Firmware &gt;&gt;Firmware Templates <\/b><\/div>\n<div class=\"panelContent\">\n<p><span class=\"confluence-embedded-file-wrapper confluence-embedded-manual-size\"><img decoding=\"async\" src=\"\/wp-content\/uploads\/sites\/16\/2024\/10\/image2021-3-5_17-28-14.png\"><\/span><\/p>\n<\/div>\n<\/div>\n<p><\/p>\n<p>3.&nbsp; Firmware rule can be create via Firmware -&gt; Firmware rules -&gt; Rule Action -&gt;&nbsp;Create. On clicking on Create button, a list of templates will be presented. We can select the required template (There will be default templates like ENV_MODEL_RULE, IP_RULE, MAC_RULE etc. and also the custom templates created from Firmware-&gt;Firmware template -&gt; Create).<\/p>\n<div class=\"panel conf-macro output-block\" data-hasbody=\"true\" data-macro-name=\"panel\">\n<div class=\"panelHeader\"><b>Site Navigation: http:\/\/&lt;XCONF_SERVER&gt;:19093 &gt;&gt; Firmware &gt;&gt; Firmware Rules<\/b><\/div>\n<div class=\"panelContent\">\n<p><span class=\"confluence-embedded-file-wrapper confluence-embedded-manual-size\"><img decoding=\"async\" src=\"\/wp-content\/uploads\/sites\/16\/2024\/10\/image2021-5-14_18-7-43.png\"><\/span><\/p>\n<\/div>\n<\/div>\n<p><\/p>\n<p>After we select the required template, &#8216;Add firmware Rule&#8217; page will be displayed. Here the build conditions will be present from the &#8216;template&#8217; that we added and in addition to that we can add additional Build Conditions also. To add firmware config , go to the &#8216;Actions&#8217; tab and select the firmware config from &#8216;Firmware config&#8217; drop down list (Select the firmware config that you have created).<\/p>\n<div class=\"panel conf-macro output-block\" data-hasbody=\"true\" data-macro-name=\"panel\">\n<div class=\"panelContent\">\n<p><span class=\"confluence-embedded-file-wrapper confluence-embedded-manual-size\"><img decoding=\"async\" src=\"\/wp-content\/uploads\/sites\/16\/2024\/10\/image2021-5-14_18-31-5.png\"><\/span><\/p>\n<\/div>\n<\/div>\n<p><\/p>\n<p>4. <span>The download location needs to be specified so that it can be returned in the response. <\/span>Choose Firmware -&gt; Download location filter-&gt; Edit, where we can specify the location from where we can download the firmware. Enter the FQDN and Full http location for the firmware download server . Http location will be returned by default to all devices.<\/p>\n<div class=\"panel conf-macro output-block\" data-hasbody=\"true\" data-macro-name=\"panel\">\n<div class=\"panelHeader\"><b>Site Navigation: http:\/\/&lt;XCONF_SERVER&gt;:19093 &gt;&gt; Firmware &gt;&gt; Download Location Round Robin Filter<\/b><\/div>\n<div class=\"panelContent\">\n<span class=\"confluence-embedded-file-wrapper confluence-embedded-manual-size\"><img decoding=\"async\" src=\"\/wp-content\/uploads\/sites\/16\/2024\/10\/Screenshot%20(73).png\"><\/span>\n<\/div>\n<\/div>\n<p><\/p>\n<h3 id=\"XconfServerUserguideforconfigurationandfeaturevalidation-AddTFTPlocation\">Add TFTP location<\/h3>\n<p><\/p>\n<p>An HTTP location will be returned by default to all devices. To enable tftp(If you have the download location of the firmware as tftp, then only you need to setup this)as download location for a particular set of devices, we need to override it from firmware rules.<\/p>\n<ol>\n<li>Go to Firmware -&gt; Firmware Rules -&gt; Define Properties -&gt; Create<\/li>\n<\/ol>\n<div class=\"panel conf-macro output-block\" data-hasbody=\"true\" data-macro-name=\"panel\">\n<div class=\"panelHeader\"><b>Site Navigation: &lt;xconf-server&gt;:19093 &gt;&gt;Firmware &gt;&gt; Firmware Rules &gt;&gt; Define Properties<\/b><\/div>\n<div class=\"panelContent\">\n<p><span class=\"confluence-embedded-file-wrapper confluence-embedded-manual-size\"><img decoding=\"async\" src=\"\/wp-content\/uploads\/sites\/16\/2024\/10\/image2021-5-17_11-11-44.png\"><\/span><\/p>\n<\/div>\n<\/div>\n<p>&nbsp; &nbsp; 2. &nbsp;A page will be displayed with options to select the template. Select &lsquo;DOWNLOAD_LOCATION_FILTER&rsquo; from the list<\/p>\n<div class=\"panel conf-macro output-block\" data-hasbody=\"true\" data-macro-name=\"panel\">\n<div class=\"panelHeader\"><b>Site Navigation: &lt;xconf-server&gt;:19093 &gt;&gt;Firmware &gt;&gt; Firmware Rules &gt;&gt; DefineProperties<\/b><\/div>\n<div class=\"panelContent\">\n<p><span class=\"confluence-embedded-file-wrapper confluence-embedded-manual-size\"><img decoding=\"async\" src=\"\/wp-content\/uploads\/sites\/16\/2024\/10\/image2021-5-17_11-18-27.png\"><\/span><\/p>\n<\/div>\n<\/div>\n<p>3.&nbsp;In this &#8216;firmware rule&#8217;&nbsp; page with type &#8216;DOWNLOAD_LOCATION_FILTER&#8217;, we need to specify the &lsquo;Build Conditions&rsquo; and &lsquo;Action&rsquo; , The build condition should be same as that we used to set rule actions(which will set rules for our intended devices). In &lsquo;Properties&rsquo; option under &lsquo;Action&rsquo;, add &lsquo;firmwareDownloadProtocol&rsquo; as &lsquo;tftp&rsquo;, &lsquo;firmwareLocation&rsquo; as &lsquo;your tftp location IPV4 address&rsquo;. This property will override the default value set from &lsquo;Download Round Robin location filter&rsquo;.<\/p>\n<div class=\"panel conf-macro output-block\" data-hasbody=\"true\" data-macro-name=\"panel\">\n<div class=\"panelHeader\"><b>Site Navigation: &lt;xconf-server&gt;:19093 &gt;&gt;Firmware &gt;&gt; Firmware Rules &gt;&gt; DefineProperties<\/b><\/div>\n<div class=\"panelContent\">\n<p><span class=\"confluence-embedded-file-wrapper confluence-embedded-manual-size\"><img decoding=\"async\" src=\"\/wp-content\/uploads\/sites\/16\/2024\/10\/image2021-5-17_11-23-20.png\"><\/span><\/p>\n<\/div>\n<\/div>\n<p><\/p>\n<p>4. To add IPV6 address of tftp servers, you can either specify it here in the define properties rule or else from &lsquo;Download Round Robin Filter&rsquo; page. To add IPV6, add it as &lsquo;ipv6FirmwareLocation&rsquo; Property in &lsquo;define properties rule&rsquo; page (ipv6FirmwareLocation key will be there by default, you need to add the value as tftp ipv6 address).&nbsp;<\/p>\n<p>5.&nbsp;To add IPV6 address of tftp servers in &lsquo;Download Round Robin Filter&rsquo;, Go to Firmware &#8211; &gt; Download Location Filter. Enter the tftp IPV6 locations and also the percentages. The devices will get back one of the locations based on the percentage listed for the location.<\/p>\n<div class=\"panel conf-macro output-block\" data-hasbody=\"true\" data-macro-name=\"panel\">\n<div class=\"panelHeader\"><b>Site Navigation: &lt;xconf-server&gt;:19093 &gt;&gt;Firmware &gt;&gt; Download Location Filter<\/b><\/div>\n<div class=\"panelContent\">\n<p><span class=\"confluence-embedded-file-wrapper confluence-embedded-manual-size\"><img decoding=\"async\" src=\"\/wp-content\/uploads\/sites\/16\/2024\/10\/image2021-5-17_11-26-58.png\"><\/span><\/p>\n<\/div>\n<\/div>\n<p>6.&nbsp;Response example for <a class=\"external-link\" href=\"https:\/\/xconf.rdkcentral.com:9092\/xconf\/swu\/stb?eStbMac=B8:27:EB:BE:D7:13\" rel=\"nofollow\">https:\/\/{xconf-ip}:{port}\/xconf\/swu\/stb?eStbMac=<\/a>{mac}. Here the &#8216;firmwareLocation&#8217; and&nbsp; &#8216;firmwareDownloadProtocol&#8217; are overrided at &#8216;Define Properties&#8217; firmware rule.<br \/>The &#8216;ipv6&#8217; addresses will be one of the addresses mentioned in the &#8216;Download Filter&#8217; page . If you don&#8217;t want &#8220;ipv6FirmwareLocation&#8221;, then don&#8217;t setup it in &#8216;Define Properties&#8217; or in the &#8216;Download location filter&#8217; pages and you will get only &#8220;firmwareLocation&#8221; in the response<br \/>{<\/p>\n<p>&nbsp; &#8220;firmwareDownloadProtocol&#8221;: &#8220;tftp&#8221;,<\/p>\n<p>&nbsp; &#8220;firmwareFilename&#8221;: &#8220;rdkb-generic-broadband-image_default_20200406103506.rootfs.rpi-sdimg&#8221;,<\/p>\n<p>&nbsp; &#8220;firmwareLocation&#8221;: &#8220;192.168.1.9&#8221;,<\/p>\n<p>&nbsp; &#8220;firmwareVersion&#8221;: &#8220;rdkb-generic-broadband-image_default_20200406103506.txt&#8221;,<\/p>\n<p>&nbsp; &#8220;ipv6FirmwareLocation&#8221;: &#8220;2601:1f18:227b:c00:767a:afd0:82bb:efa6&#8221;,<\/p>\n<p>&nbsp; &#8220;rebootImmediately&#8221;: false<\/p>\n<p>}<\/p>\n<p>7.&nbsp;Setting up IPV4 locations via &lsquo;Download Location Round Robin Filter&rsquo; is not supported. This can be set only by the property &#8216;firmwareLocation&#8217; from the &#8216;Define Properties&#8217; firmware rule page.<\/p>\n<p>8. <strong>Note <\/strong>: Just like we added tftp location and protocol here, we can also override the default value with http as well. For firmwareDownloadProtocol, add &#8216;http&#8217; and for the &#8216;firmwareLocation&#8217;, add http location<\/p>\n<p><\/p>\n<h3 id=\"XconfServerUserguideforconfigurationandfeaturevalidation-OverridethedefaultdownloadLocationsetatDownloadLocationFilter\">Override the default download Location set at Download Location Filter<\/h3>\n<p>There is a new option added in the Firmware Config, where we can add parameters. For example if we add parameters &#8216;<span>firmwareLocation&#8217; and &#8216;firmwareDownloadProtocol&#8217;. then we will be able to override the default download location set from the &#8216;DownLoad Location Filter&#8217; page.<\/span><\/p>\n<h4 id=\"XconfServerUserguideforconfigurationandfeaturevalidation-OverrideFirmwareLocationwithhttp\"><span>Override Firmware Location with http<\/span><\/h4>\n<p><span>To create a new firmware configuration for a particular set of devices with http download location :<\/span><\/p>\n<ol>\n<li>Go to Firmware &rarr; Firmware Configs &rarr; Create. Enter a description for this config.&nbsp; Also we can define the file name and version of the image\/firmware that need to be downloaded to the CPE device. The models that we defined in Common &rarr; Models section will be available here, We can select the required models by clicking on it. There is also an option &#8216;Parameters&#8217;. Add the key values &#8216;firmwareLocation&#8217; and &#8216;firmwareDownloadProtocol&#8217; as &#8216;http location url&#8217; and &#8216;http&#8217; respectively<br \/><span class=\"confluence-embedded-file-wrapper confluence-embedded-manual-size\"><img decoding=\"async\" src=\"\/wp-content\/uploads\/sites\/16\/2024\/10\/image2021-9-7_21-56-34.png\"><\/span><\/li>\n<li>Create a firmware rule like the steps given in &#8216;Configuration&#8217; and map this Firmware Config to it. Check using the steps in below &#8216;Verification&#8217; sections and verify&nbsp; if the firmwareLocation and firmwareDownloadProtocol are the same as we configured in FirmwareConfig page.\n<p>Sample curl response(refer below steps to check)&nbsp;<\/p>\n<p><span class=\"confluence-embedded-file-wrapper confluence-embedded-manual-size\"><img decoding=\"async\" src=\"\/wp-content\/uploads\/sites\/16\/2024\/10\/image2021-9-7_22-19-45.png\"><\/span><\/li>\n<\/ol>\n<h3 id=\"XconfServerUserguideforconfigurationandfeaturevalidation-Verification.3\">Verification<\/h3>\n<p>a. Verification of Firmware test page.<\/p>\n<p>After creating the Firmware configs and Firmware rules , go to Firmware-&gt;Test page and give a parameter that will match the one of the rule that you have created. Then matched rule will be displayed like below.&nbsp;<\/p>\n<div class=\"panel conf-macro output-block\" data-hasbody=\"true\" data-macro-name=\"panel\">\n<div class=\"panelHeader\"><b>Site Navigation: &lt;xconf-server&gt;:19093 &gt;&gt;Firmware &gt;&gt; Test Page<\/b><\/div>\n<div class=\"panelContent\">\n<span class=\"confluence-embedded-file-wrapper confluence-embedded-manual-size\"><img decoding=\"async\" src=\"\/wp-content\/uploads\/sites\/16\/2024\/10\/Screenshot%20(72).png\"><\/span>\n<\/div>\n<\/div>\n<p>b. &nbsp;Verification via curl command<\/p>\n<p>The curl command mocks the request being sent from an STB like below and sample response is also given. It can be given as a curl command or as a get request via postman or browser.&nbsp;<\/p>\n<p><em>eg :<\/em><\/p>\n<p><em>$ curl &#8216;<a class=\"external-link\" href=\"https:\/\/xconf.rdkcentral.com:9092\/xconf\/swu\/stb?eStbMac=B8:27:EB:BE:D7:12\" rel=\"nofollow\">https:\/\/&lt;XCONF_IP&gt;:19092\/xconf\/swu\/stb?eStbMac=B8:27:EB:BE:D7:12<\/a><\/em><\/p>\n<p><em>&rsquo;<\/em><\/p>\n<p>Sample Response :<\/p>\n<div class=\"code panel pdl conf-macro output-block\" data-hasbody=\"true\" data-macro-name=\"code\">\n<div class=\"codeContent panelContent pdl\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\"> {\n  \"firmwareDownloadProtocol\": \"http\",\n  \"firmwareFilename\": \"vip7802_FBT_rdk-next_20210610095056.pkg.tar.gz\",\n  \"firmwareLocation\": \"xconf.rdkcentral.com\",\n  \"firmwareVersion\": \"vip7802_FBT_rdk-next_20210610095056\",\n  \"rebootImmediately\": false,\n  \"mandatoryUpdate\": false\n}<\/pre>\n<\/div>\n<\/div>\n<h3 id=\"XconfServerUserguideforconfigurationandfeaturevalidation-Clientendverification(RPI).3\">Client end verification (RPI)<\/h3>\n<div class=\"table-wrap\">\n\n\n<table class=\"relative-table wrapped confluenceTable\"><colgroup><col style=\"width: 7.52233%\"><col style=\"width: 92.462%\"><\/colgroup><tbody><tr><th colspan=\"1\" class=\"confluenceTh\">CURL Command<\/th><td class=\"confluenceTd\">curl &#8216;<span class=\"nolink\">http:\/\/&lt;XCONF_IP&gt;:19092\/xconf\/swu\/stb?eStbMac=B8:27:EB:BE:D7:12&amp;model=ARMv7&amp;capabilities=RCDL&amp;capabilities=supportsFullHttpUrl&#8217;<\/span><\/td><\/tr><tr><th colspan=\"1\" class=\"confluenceTh\">CPE Script (RDK-V)<\/th><td class=\"confluenceTd\"><p>\/lib\/rdk\/swupdate_utility.sh<\/p><\/td><\/tr><tr><th colspan=\"1\" class=\"confluenceTh\">CPE Service (RDK-V)<\/th><td class=\"confluenceTd\">\/lib\/systemd\/system\/swupdate.service<\/td><\/tr><\/tbody><\/table>\n\n\n<\/div>\n<h3 id=\"XconfServerUserguideforconfigurationandfeaturevalidation-PercentFilter\">Percent Filter<\/h3>\n<p><\/p>\n<p>Percentage based filters allow us to block a certain percentage of Xconf responses that would otherwise have resulted in a change in firmware. The use case for this is when we have tons of STBs out there and we don&#8217;t yet have scheduled downloads. We would like to be able to only service a certain percentage as a throttling mechanism so download servers aren&#8217;t overwhelmed.<\/p>\n\n\n<h2 class=\"wp-block-heading wp-main-header\">Import and Export Feature<\/h2>\n\n\n<p>We can import and export all the configuration data from the UI itself.&nbsp; This feature can be primarily used for transferring the configuration data from one xconfserver setup to the other one.<\/p>\n<p>The export and import data need to be done separately for the Application &#8211; stb, xhome and rdkcloud for all the pages except those in Common tab.<\/p>\n<p>To export data from a page, Click on &lsquo;Export All&rsquo; button in that page.&nbsp; The configuration data will be downloaded as a JSON file.<\/p>\n<p><span class=\"confluence-embedded-file-wrapper confluence-embedded-manual-size\"><img decoding=\"async\" src=\"\/wp-content\/uploads\/sites\/16\/2024\/10\/image2021-3-5_13-35-43.png\"><\/span><\/p>\n<p>To import data :<\/p>\n<ol>\n<li>Open the dropdown menu next to &lsquo;Create&rsquo; button.<\/li>\n<li>From the drop down menu, click on &lsquo;Import&rsquo;.<\/li>\n<li>A new page will be displayed with option to browse the location of the JSONfile to be imported. Select the file that need to be imported.<\/li>\n<li>All the data from the file will be listed in the page.<\/li>\n<li>Click on &lsquo;Import All&rsquo; to import all data<\/li>\n<\/ol>\n<p><span class=\"confluence-embedded-file-wrapper confluence-embedded-manual-size\"><img decoding=\"async\" src=\"\/wp-content\/uploads\/sites\/16\/2024\/10\/image2021-3-5_13-36-18.png\"><\/span><\/p>\n\n\n<h2 class=\"wp-block-heading wp-main-header\">FAQs and Common Issues faced in setup<\/h2>\n\n\n<p><\/p>\n<ol>\n<li>The &#8216;mvn clean install&#8217; step is stuck at &#8216;org.hyperic.sigar.SigarException: no libsigar-amd64-linux.so in java.library.path&#8217; . Is this an issue?\n<p>This is an exception from unit test , but the tests will run successfully. Build process may stall for some time but the build will be successful and the application can be launched successfully. So it can be ignored as well. Or you can run the mvn build step &#8211; &#8216;<span>mvn clean install -DskipTests=true&#8217;, instead of the &#8216;mvn clean install&#8217;.<\/span><\/p>\n<p><\/li>\n<li><span><span>&nbsp;In Xconf server,&nbsp; what is the &#8216;Environment&#8217;&nbsp; tab for?&nbsp; which module will reference it?<\/span><\/span><\/li>\n<\/ol>\n<p><span><span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;This can be added in the build conditions just like you add maclists or IPlists.<\/span><\/span><\/p>\n<p><\/p>\n<p><span><span>&nbsp; &nbsp; &nbsp; 3.&nbsp; I am getting a 503 error on accessing the dataservice. What may be the reason?<\/p>\n<p>&nbsp; &nbsp; &nbsp; &nbsp;Check whether Cassandra DB is up or not. If Cassandra DB is not up, then it may affect the admin UI as well. The admin UI may be up, but you may not be able to add data to the Application.<\/span><\/span><\/p>\n<p><\/p>\n<p><span><span>&nbsp; &nbsp; &nbsp;4. We are getting &#8216;F<span>ailed to execute goal com.github.eirslett:frontend-maven-plugin:1.10.0:npm (Compile via NPM install) on project xconf-angular-admin: Failed to run task: &#8216;npm install&#8217; failed.<\/span>&#8216;. What will be the reason?<\/p>\n<p>&nbsp; &nbsp; <span>For running xconf-angular admin, frontend-maven-plugin is used and it will internally install node and npm. Some dependencies may not be&nbsp; getting installed due to network restrictions. Run the build command &#8216;mvn clean install&#8217; using&nbsp; -e switch and you will get the full error trace. Rectify the network issue and continue<\/span><\/span><\/span><\/p>\n<p><\/p>\n<p><span><span><span>5. &nbsp;&nbsp;Is there a requirement for a GUI for deployment?<\/p>\n<p>&nbsp;No, there is no requirement for GUI based deployment environment<\/span><\/span><\/span><\/p>\n<p><span><span><span>6.&nbsp; Python 2.7 is mentioned here, Can we use any other Python versions?<\/p>\n<p>At the time of reference setup, this python version worked with the Cassandra version we used. For the reference setup we&nbsp; used cassandra 3.11.9 and python 2.7 . For Cassandra 3X, python 2.7 is required.<br \/><\/span><\/span><\/span><\/p>\n<p><span><span><span>7. Can&nbsp;openjdk v11 be used?<\/span><\/span><\/span><\/p>\n<p>No, Like mentioned in the userguide&nbsp;app requires java 8 and you can refer the prerequisites here in readme&nbsp;<a class=\"external-link\" href=\"https:\/\/github.com\/rdkcentral\/xconfserver#readme\" rel=\"nofollow\">https:\/\/github.com\/rdkcentral\/xconfserver#readme<\/a><\/p>\n<p>8. &nbsp;<span>Local Firewall is required. Are there any known issues with this?<\/span><\/p>\n<p>Firewall issue is not mentioned in the user guide. However there were issues in the past where partner would deploy the application in their VMs and due to the firewall , they may face issues to access it. This need to be resolved internally.<\/p>\n<p>9.&nbsp; We are getting this issue on running Cassandra &#8211; &#8220;<span>Java HotSpot (TM) 64-Bit Server VM warning: Cannot open file. \/..logs\/gc.log due to No such file or directory&#8221;<\/span><\/p>\n<p><span>This may be&nbsp; an issue related to the memory. This issue has happened in the past when community members try to setup the applications in Virtual env like Oracle VM virtual box. Increase the allocated memory for the virtual machine and it will be resolved<\/span><\/p>\n<p><\/p>\n<p><span><span><span><\/p>\n<p>&nbsp;<\/p>\n<p><\/span><\/span><\/span><\/p>\n<p><\/p>\n<p><\/p>","protected":false},"excerpt":{"rendered":"<p>Source code repository Xconf consists of 2 web applications &#8211; Xconf dataservice and Xconf admin. [&hellip;]<\/p>\n","protected":false},"author":494,"featured_media":0,"parent":11460,"menu_order":5,"comment_status":"open","ping_status":"closed","template":"","meta":{"_bbp_topic_count":0,"_bbp_reply_count":0,"_bbp_total_topic_count":0,"_bbp_total_reply_count":0,"_bbp_voice_count":0,"_bbp_anonymous_reply_count":0,"_bbp_topic_count_hidden":0,"_bbp_reply_count_hidden":0,"_bbp_forum_subforum_count":0,"footnotes":""},"class_list":["post-11490","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.9 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Xconf Server - User guide for configuration and feature validation - RDK Documentation Portal | Documentation<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/device_management\/xconf\/xconf_server_-_user_guide_for_configuration_and_feature_validation\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Xconf Server - User guide for configuration and feature validation - RDK Documentation Portal | Documentation\" \/>\n<meta property=\"og:description\" content=\"Source code repository Xconf consists of 2 web applications &#8211; Xconf dataservice and Xconf admin. [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/device_management\/xconf\/xconf_server_-_user_guide_for_configuration_and_feature_validation\/\" \/>\n<meta property=\"og:site_name\" content=\"RDK Documentation Portal | Documentation\" \/>\n<meta property=\"article:modified_time\" content=\"2025-03-25T05:18:32+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"23 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/device_management\/xconf\/xconf_server_-_user_guide_for_configuration_and_feature_validation\/\",\"url\":\"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/device_management\/xconf\/xconf_server_-_user_guide_for_configuration_and_feature_validation\/\",\"name\":\"Xconf Server - User guide for configuration and feature validation - RDK Documentation Portal | Documentation\",\"isPartOf\":{\"@id\":\"https:\/\/developer.rdkcentral.com\/documentation\/#website\"},\"datePublished\":\"2021-03-01T10:11:25+00:00\",\"dateModified\":\"2025-03-25T05:18:32+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/device_management\/xconf\/xconf_server_-_user_guide_for_configuration_and_feature_validation\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/device_management\/xconf\/xconf_server_-_user_guide_for_configuration_and_feature_validation\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/device_management\/xconf\/xconf_server_-_user_guide_for_configuration_and_feature_validation\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/developer.rdkcentral.com\/documentation\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Documentation\",\"item\":\"https:\/\/developer.rdkcentral.com\/documentation\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Device Management\",\"item\":\"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/device_management\/\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Xconf\",\"item\":\"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/device_management\/xconf\/\"},{\"@type\":\"ListItem\",\"position\":5,\"name\":\"Xconf Server &#8211; User guide for configuration and feature validation\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/developer.rdkcentral.com\/documentation\/#website\",\"url\":\"https:\/\/developer.rdkcentral.com\/documentation\/\",\"name\":\"RDK Documentation Portal | Documentation\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/developer.rdkcentral.com\/documentation\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Xconf Server - User guide for configuration and feature validation - RDK Documentation Portal | Documentation","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/device_management\/xconf\/xconf_server_-_user_guide_for_configuration_and_feature_validation\/","og_locale":"en_US","og_type":"article","og_title":"Xconf Server - User guide for configuration and feature validation - RDK Documentation Portal | Documentation","og_description":"Source code repository Xconf consists of 2 web applications &#8211; Xconf dataservice and Xconf admin. [&hellip;]","og_url":"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/device_management\/xconf\/xconf_server_-_user_guide_for_configuration_and_feature_validation\/","og_site_name":"RDK Documentation Portal | Documentation","article_modified_time":"2025-03-25T05:18:32+00:00","twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"23 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/device_management\/xconf\/xconf_server_-_user_guide_for_configuration_and_feature_validation\/","url":"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/device_management\/xconf\/xconf_server_-_user_guide_for_configuration_and_feature_validation\/","name":"Xconf Server - User guide for configuration and feature validation - RDK Documentation Portal | Documentation","isPartOf":{"@id":"https:\/\/developer.rdkcentral.com\/documentation\/#website"},"datePublished":"2021-03-01T10:11:25+00:00","dateModified":"2025-03-25T05:18:32+00:00","breadcrumb":{"@id":"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/device_management\/xconf\/xconf_server_-_user_guide_for_configuration_and_feature_validation\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/developer.rdkcentral.com\/documentation\/documentation\/device_management\/xconf\/xconf_server_-_user_guide_for_configuration_and_feature_validation\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/device_management\/xconf\/xconf_server_-_user_guide_for_configuration_and_feature_validation\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/developer.rdkcentral.com\/documentation\/"},{"@type":"ListItem","position":2,"name":"Documentation","item":"https:\/\/developer.rdkcentral.com\/documentation\/"},{"@type":"ListItem","position":3,"name":"Device Management","item":"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/device_management\/"},{"@type":"ListItem","position":4,"name":"Xconf","item":"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/device_management\/xconf\/"},{"@type":"ListItem","position":5,"name":"Xconf Server &#8211; User guide for configuration and feature validation"}]},{"@type":"WebSite","@id":"https:\/\/developer.rdkcentral.com\/documentation\/#website","url":"https:\/\/developer.rdkcentral.com\/documentation\/","name":"RDK Documentation Portal | Documentation","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/developer.rdkcentral.com\/documentation\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"}]}},"_links":{"self":[{"href":"https:\/\/developer.rdkcentral.com\/documentation\/wp-json\/wp\/v2\/pages\/11490","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/developer.rdkcentral.com\/documentation\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/developer.rdkcentral.com\/documentation\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/developer.rdkcentral.com\/documentation\/wp-json\/wp\/v2\/users\/494"}],"replies":[{"embeddable":true,"href":"https:\/\/developer.rdkcentral.com\/documentation\/wp-json\/wp\/v2\/comments?post=11490"}],"version-history":[{"count":4,"href":"https:\/\/developer.rdkcentral.com\/documentation\/wp-json\/wp\/v2\/pages\/11490\/revisions"}],"predecessor-version":[{"id":12211,"href":"https:\/\/developer.rdkcentral.com\/documentation\/wp-json\/wp\/v2\/pages\/11490\/revisions\/12211"}],"up":[{"embeddable":true,"href":"https:\/\/developer.rdkcentral.com\/documentation\/wp-json\/wp\/v2\/pages\/11460"}],"wp:attachment":[{"href":"https:\/\/developer.rdkcentral.com\/documentation\/wp-json\/wp\/v2\/media?parent=11490"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}