Get DeviceId from usp

- Updated Readme to overwrite DeviceId parameters
This commit is contained in:
vdutta 2022-01-07 17:44:28 +05:30
parent 9b22b59edf
commit 7f1504f189
9 changed files with 139 additions and 26 deletions

View file

@ -37,6 +37,18 @@ config lwn 'lwn'
option port ''
```
> Note: icwmp depends on usp.raw for all datamodel parameters, some `DeviceId` related parameters can be overwritten by writing them directly on `/etc/config/cwmp` file.
```bash
uci set cwmp.cpe.manufacturer="ABC"
uci set cwmp.cpe.manufacturer_oui="XXX"
uci set cwmp.cpe.product_class="TEST_CLASS"
uci set cwmp.cpe.serial_number="1234567890"
uci set cwmp.cpe.software_version="X.Y.Z"
uci set cwmp.cpe.model_name="MODELXXX"
uci set cwmp.cpe.description="This is a test device"
uci commit cwmp
```
> Complete UCI for `cwmp` configuration available in [link](./docs/api/uci.cwmp.md) or [raw schema](./schemas/uci/cwmp.json)
## RPCs Method supported
@ -233,6 +245,7 @@ Valid commands:
set_notif [path-expr] [notification] => set parameter notifications
```
> Note: icwmpd CLI is a debug utility and hence it is advised to use for debug and development purpose only.
> icwmpd CLI utility is independent of icwmpd daemon.
icwmp CLI command success result is displayed in the terminal as following:

View file

@ -625,11 +625,11 @@ end:
int cwmp_get_deviceid(struct cwmp *cwmp)
{
cwmp->deviceid.manufacturer = strdup(cwmp_db_get_value_string("device", "deviceinfo", "Manufacturer"));
cwmp->deviceid.serialnumber = strdup(cwmp_db_get_value_string("device", "deviceinfo", "SerialNumber"));
cwmp->deviceid.productclass = strdup(cwmp_db_get_value_string("device", "deviceinfo", "ProductClass"));
cwmp->deviceid.oui = strdup(cwmp_db_get_value_string("device", "deviceinfo", "ManufacturerOUI"));
cwmp->deviceid.softwareversion = strdup(cwmp_db_get_value_string("device", "deviceinfo", "SoftwareVersion"));
cwmp_usp_get_single("Device.DeviceInfo.Manufacturer", &cwmp->deviceid.manufacturer);
cwmp_usp_get_single("Device.DeviceInfo.SerialNumber", &cwmp->deviceid.serialnumber);
cwmp_usp_get_single("Device.DeviceInfo.ProductClass", &cwmp->deviceid.productclass);
cwmp_usp_get_single("Device.DeviceInfo.ManufacturerOUI", &cwmp->deviceid.oui);
cwmp_usp_get_single("Device.DeviceInfo.SoftwareVersion", &cwmp->deviceid.softwareversion);
return CWMP_OK;
}

View file

@ -14,8 +14,6 @@
struct uci_paths uci_save_conf_paths[] = {
[UCI_STANDARD_CONFIG] = { "/etc/config", "/tmp/.uci", NULL },
[UCI_DB_CONFIG] = { "/lib/db/config", NULL, NULL },
[UCI_BOARD_DB_CONFIG] = { "/etc/board-db/config", NULL, NULL },
[UCI_VARSTATE_CONFIG] = { "/var/state", NULL, NULL }
};
@ -171,15 +169,6 @@ int cwmp_uci_get_option_value_string(char *package, char *section, char *option,
return UCI_OK;
}
char* cwmp_db_get_value_string(char *package, char *section, char *option)
{
char *value = NULL;
cwmp_uci_get_option_value_string(package, section, option, folder_exists("/lib/db/config") ? UCI_DB_CONFIG : UCI_BOARD_DB_CONFIG, &value);
if (value == NULL)
value = "";
return value;
}
int cwmp_uci_get_value_by_path(char *path, uci_config_paths uci_type, char **value)
{
struct uci_ptr ptr;

View file

@ -506,3 +506,25 @@ char *cwmp_delete_object(char *object_name, char *key)
return NULL;
}
int cwmp_usp_get_single(char *param, char **value)
{
struct cwmp_dm_parameter *pv = NULL;
LIST_HEAD(params_list);
if (param == NULL || value == NULL)
return -1;
cwmp_get_parameter_values(param, &params_list);
list_for_each_entry (pv, &params_list, list) {
if (strncmp(param, pv->name, strlen(param)) == 0) {
*value = (pv->value)?strdup(pv->value):strdup("");
break;
}
}
cwmp_free_all_dm_parameter_list(&params_list);
return 0;
}

View file

@ -173,6 +173,55 @@
<td><div style="font-weight: bold; font-size: 14px;">default</div></td>
<td><div style="font-weight: bold; font-size: 14px;">description</div></td>
</tr>
<tr>
<td class="td_row_even"><div class="td_row_even">manufacturer</div></td>
<td class="td_row_even"><div class="td_row_even">string</div></td>
<td class="td_row_even"><div class="td_row_even">no</div></td>
<td class="td_row_even"><div class="td_row_even"></div></td>
<td class="td_row_even"><div class="td_row_even">Overwrite DeviceId parameter</div></td>
</tr>
<tr>
<td class="td_row_even"><div class="td_row_even">manufacturer_oui</div></td>
<td class="td_row_even"><div class="td_row_even">string</div></td>
<td class="td_row_even"><div class="td_row_even">no</div></td>
<td class="td_row_even"><div class="td_row_even"></div></td>
<td class="td_row_even"><div class="td_row_even">Overwrite DeviceId parameter</div></td>
</tr>
<tr>
<td class="td_row_even"><div class="td_row_even">product_class</div></td>
<td class="td_row_even"><div class="td_row_even">string</div></td>
<td class="td_row_even"><div class="td_row_even">no</div></td>
<td class="td_row_even"><div class="td_row_even"></div></td>
<td class="td_row_even"><div class="td_row_even">Overwrite DeviceId parameter</div></td>
</tr>
<tr>
<td class="td_row_even"><div class="td_row_even">serial_number</div></td>
<td class="td_row_even"><div class="td_row_even">string</div></td>
<td class="td_row_even"><div class="td_row_even">no</div></td>
<td class="td_row_even"><div class="td_row_even"></div></td>
<td class="td_row_even"><div class="td_row_even">Overwrite DeviceId parameter</div></td>
</tr>
<tr>
<td class="td_row_even"><div class="td_row_even">software_version</div></td>
<td class="td_row_even"><div class="td_row_even">string</div></td>
<td class="td_row_even"><div class="td_row_even">no</div></td>
<td class="td_row_even"><div class="td_row_even"></div></td>
<td class="td_row_even"><div class="td_row_even">Overwrite DeviceId parameter</div></td>
</tr>
<tr>
<td class="td_row_even"><div class="td_row_even">model_name</div></td>
<td class="td_row_even"><div class="td_row_even">string</div></td>
<td class="td_row_even"><div class="td_row_even">no</div></td>
<td class="td_row_even"><div class="td_row_even"></div></td>
<td class="td_row_even"><div class="td_row_even">Overwrite DeviceId parameter</div></td>
</tr>
<tr>
<td class="td_row_even"><div class="td_row_even">description</div></td>
<td class="td_row_even"><div class="td_row_even">string</div></td>
<td class="td_row_even"><div class="td_row_even">no</div></td>
<td class="td_row_even"><div class="td_row_even"></div></td>
<td class="td_row_even"><div class="td_row_even">Overwrite DeviceId parameter</div></td>
</tr>
<tr>
<td class="td_row_even"><div class="td_row_even">interface</div></td>
<td class="td_row_even"><div class="td_row_even">string</div></td>

View file

@ -70,8 +70,6 @@
typedef enum uci_config_paths
{
UCI_STANDARD_CONFIG,
UCI_DB_CONFIG,
UCI_BOARD_DB_CONFIG,
UCI_VARSTATE_CONFIG
}uci_config_paths;
@ -132,7 +130,6 @@ int uci_set_value_by_path(char *cmd, char *value, uci_config_paths uci_type);
int cwmp_uci_set_value_by_path(char *path, char *value);
int cwmp_uci_set_varstate_value_by_path(char *path, char *value);
int uci_get_value(char *cmd, char **value);
char* cwmp_db_get_value_string(char *package, char *section, char *option);
struct uci_section *cwmp_uci_walk_section(char *package, char *stype, void *arg1, void *arg2, int cmp, int (*filter)(struct uci_section *s, void *value), struct uci_section *prev_section, uci_config_paths uci_type, int walk);
int cwmp_uci_get_value_by_section_string(struct uci_section *s, char *option, char **value);
int cwmp_uci_get_option_value_string(char *package, char *section, char *option, uci_config_paths uci_type, char **value);

View file

@ -12,6 +12,7 @@ bool cwmp_transaction_commit();
bool cwmp_transaction_abort();
bool cwmp_transaction_status();
char *cwmp_get_parameter_values(char *parameter_name, struct list_head *parameters_list);
int cwmp_usp_get_single(char *param, char **value);
char *cwmp_get_multiple_parameters_values(struct list_head *arg_params_list, struct list_head *parameters_list);
char *cwmp_get_single_parameter_value(char *parameter_name, struct cwmp_dm_parameter *dm_parameter);
int cwmp_set_multiple_parameters_values(struct list_head *parameters_values_list, char *parameter_key, int *flag, struct list_head *faults_list);

View file

@ -131,6 +131,55 @@
"description": "CWMP client configuration",
"multi": false,
"options": [
{
"name": "manufacturer",
"type": "string",
"required": "no",
"default": "",
"description": "Overwrite DeviceId parameter"
},
{
"name": "manufacturer_oui",
"type": "string",
"required": "no",
"default": "",
"description": "Overwrite DeviceId parameter"
},
{
"name": "product_class",
"type": "string",
"required": "no",
"default": "",
"description": "Overwrite DeviceId parameter"
},
{
"name": "serial_number",
"type": "string",
"required": "no",
"default": "",
"description": "Overwrite DeviceId parameter"
},
{
"name": "software_version",
"type": "string",
"required": "no",
"default": "",
"description": "Overwrite DeviceId parameter"
},
{
"name": "model_name",
"type": "string",
"required": "no",
"default": "",
"description": "Overwrite DeviceId parameter"
},
{
"name": "description",
"type": "string",
"required": "no",
"default": "",
"description": "Overwrite DeviceId parameter"
},
{
"name": "interface",
"type": "string",

View file

@ -59,13 +59,6 @@ static void cwmp_uci_get_tests(void **state)
assert_int_equal(error, UCI_OK);
assert_null(value);
value = cwmp_db_get_value_string("device", "deviceinfo", "ProductClass");
assert_string_equal(value, "FirstClass");
value = cwmp_db_get_value_string("device", "deviceinfo", "wrong_option");
assert_string_equal(value, "");
error = cwmp_uci_get_option_value_string("cwmp", "acs", "dhcp_url", UCI_VARSTATE_CONFIG, &value);
assert_int_equal(error, UCI_OK);
assert_string_equal(value, "http://192.168.103.160:8080/openacs/acs");