mirror of
https://dev.iopsys.eu/system/sysmngr.git
synced 2025-12-10 08:14:38 +01:00
319 lines
12 KiB
C
319 lines
12 KiB
C
/*
|
|
* Copyright (C) 2019-2024 iopsys Software Solutions AB
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU Lesser General Public License version 2.1
|
|
* as published by the Free Software Foundation
|
|
*
|
|
* Author: Amin Ben Romdhane <amin.benromdhane@iopsys.eu>
|
|
*
|
|
*/
|
|
|
|
#include <libbbfdm-api/dmcommon.h>
|
|
|
|
#ifdef SYSMNGR_VENDOR_CONFIG_FILE
|
|
#include "configs.h"
|
|
#endif
|
|
|
|
#ifdef SYSMNGR_FIRMWARE_IMAGE
|
|
#include "fw_images.h"
|
|
#endif
|
|
|
|
#ifdef SYSMNGR_MEMORY_STATUS
|
|
#include "memory.h"
|
|
#endif
|
|
|
|
#ifdef SYSMNGR_PROCESS_STATUS
|
|
#include "processes.h"
|
|
#endif
|
|
|
|
#ifdef SYSMNGR_REBOOTS
|
|
#include "reboots.h"
|
|
#endif
|
|
|
|
#ifdef SYSMNGR_SUPPORTED_DATA_MODEL
|
|
#include "supported_dm.h"
|
|
#endif
|
|
|
|
#ifdef SYSMNGR_NETWORK_PROPERTIES
|
|
#include "network.h"
|
|
#endif
|
|
|
|
/*************************************************************
|
|
* GET & SET PARAM
|
|
**************************************************************/
|
|
static int get_device_devicecategory(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value)
|
|
{
|
|
db_get_value_string("device", "deviceinfo", "DeviceCategory", value);
|
|
return 0;
|
|
}
|
|
|
|
static int get_device_manufacturer(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value)
|
|
{
|
|
dmuci_get_option_value_string("cwmp","cpe","manufacturer", value);
|
|
if (*value[0] == '\0')
|
|
db_get_value_string("device", "deviceinfo", "Manufacturer", value);
|
|
|
|
return 0;
|
|
}
|
|
|
|
static int get_device_manufactureroui(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value)
|
|
{
|
|
dmuci_get_option_value_string("cwmp", "cpe", "manufacturer_oui", value);
|
|
if (*value[0] == '\0')
|
|
db_get_value_string("device", "deviceinfo", "ManufacturerOUI", value);
|
|
|
|
return 0;
|
|
}
|
|
|
|
static int get_device_modelname(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value)
|
|
{
|
|
dmuci_get_option_value_string("cwmp", "cpe", "model_name", value);
|
|
if (*value[0] == '\0')
|
|
db_get_value_string("device", "deviceinfo", "ModelName", value);
|
|
return 0;
|
|
}
|
|
|
|
static int get_device_description(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value)
|
|
{
|
|
dmuci_get_option_value_string("cwmp", "cpe", "description", value);
|
|
if (*value[0] == '\0')
|
|
db_get_value_string("device", "deviceinfo", "Description", value);
|
|
return 0;
|
|
}
|
|
|
|
static int get_device_productclass(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value)
|
|
{
|
|
dmuci_get_option_value_string("cwmp", "cpe", "product_class", value);
|
|
if (*value[0] == '\0')
|
|
db_get_value_string("device", "deviceinfo", "ProductClass", value);
|
|
|
|
return 0;
|
|
}
|
|
|
|
static int get_device_serialnumber(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value)
|
|
{
|
|
dmuci_get_option_value_string("cwmp", "cpe", "serial_number", value);
|
|
if (*value[0] == '\0')
|
|
db_get_value_string("device", "deviceinfo", "SerialNumber", value);
|
|
|
|
return 0;
|
|
}
|
|
|
|
static int get_device_hardwareversion(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value)
|
|
{
|
|
db_get_value_string("device", "deviceinfo", "HardwareVersion", value);
|
|
return 0;
|
|
}
|
|
|
|
static int get_device_softwareversion(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value)
|
|
{
|
|
dmuci_get_option_value_string("cwmp", "cpe", "software_version", value);
|
|
if (*value[0] == '\0')
|
|
db_get_value_string("device", "deviceinfo", "SoftwareVersion", value);
|
|
|
|
return 0;
|
|
}
|
|
|
|
static int get_device_additionalhardwareversion(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value)
|
|
{
|
|
db_get_value_string("device", "deviceinfo", "AdditionalHardwareVersion", value);
|
|
return 0;
|
|
}
|
|
|
|
static int get_device_additionalsoftwareversion(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value)
|
|
{
|
|
db_get_value_string("device", "deviceinfo", "AdditionalSoftwareVersion", value);
|
|
return 0;
|
|
}
|
|
|
|
static int get_device_provisioningcode(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value)
|
|
{
|
|
char *dhcp = NULL, *provisioning_code = NULL, *dhcp_provisioning_code = NULL;
|
|
bool discovery = false;
|
|
|
|
dmuci_get_option_value_string("cwmp", "acs", "dhcp_discovery", &dhcp);
|
|
dmuci_get_option_value_string("cwmp", "cpe", "provisioning_code", &provisioning_code);
|
|
dmuci_get_option_value_string("cwmp", "cpe", "dhcp_provisioning_code", &dhcp_provisioning_code);
|
|
|
|
discovery = dmuci_string_to_boolean(dhcp);
|
|
|
|
if ((discovery == true) && (DM_STRLEN(dhcp_provisioning_code) != 0))
|
|
*value = dhcp_provisioning_code;
|
|
else
|
|
*value = provisioning_code;
|
|
|
|
return 0;
|
|
}
|
|
|
|
static int set_device_provisioningcode(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action)
|
|
{
|
|
switch (action) {
|
|
case VALUECHECK:
|
|
if (bbfdm_validate_string(ctx, value, -1, 64, NULL, NULL))
|
|
return FAULT_9007;
|
|
return 0;
|
|
case VALUESET:
|
|
dmuci_set_value("cwmp", "cpe", "provisioning_code", value);
|
|
return 0;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
static int get_device_info_uptime(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value)
|
|
{
|
|
*value = get_uptime();
|
|
return 0;
|
|
}
|
|
|
|
static int get_device_info_firstusedate(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value)
|
|
{
|
|
dmuci_get_option_value_string("time", "global", "first_use_date", value);
|
|
return 0;
|
|
}
|
|
|
|
static int get_deviceinfo_cid (char *refparam, struct dmctx *ctx, void *data, char *instance, char **value)
|
|
{
|
|
db_get_value_string("device", "deviceinfo", "CID", value);
|
|
return 0;
|
|
}
|
|
|
|
static int get_deviceinfo_friendlyname(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value)
|
|
{
|
|
db_get_value_string("device", "deviceinfo", "FriendlyName", value);
|
|
return 0;
|
|
}
|
|
|
|
static int get_deviceinfo_pen (char *refparam, struct dmctx *ctx, void *data, char *instance, char **value)
|
|
{
|
|
db_get_value_string("device", "deviceinfo", "PEN", value);
|
|
return 0;
|
|
}
|
|
|
|
static int get_deviceinfo_modelnumber (char *refparam, struct dmctx *ctx, void *data, char *instance, char **value)
|
|
{
|
|
db_get_value_string("device", "deviceinfo", "ModelNumber", value);
|
|
return 0;
|
|
}
|
|
|
|
static int get_DeviceInfo_HostName(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value)
|
|
{
|
|
dmuci_get_option_value_string("system", "@system[0]", "hostname", value);
|
|
return 0;
|
|
}
|
|
|
|
static int set_DeviceInfo_HostName(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action)
|
|
{
|
|
switch (action) {
|
|
case VALUECHECK:
|
|
if (bbfdm_validate_string(ctx, value, -1, 255, NULL, NULL))
|
|
return FAULT_9007;
|
|
break;
|
|
case VALUESET:
|
|
dmuci_set_value("system", "@system[0]", "hostname", value);
|
|
break;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
#ifdef SYSMNGR_VENDOR_EXTENSIONS
|
|
static int get_deviceinfo_base_mac_addr(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value)
|
|
{
|
|
db_get_value_string("device", "deviceinfo", "BaseMACAddress", value);
|
|
return 0;
|
|
}
|
|
#endif
|
|
|
|
/**********************************************************************************************************************************
|
|
* OBJ & LEAF DEFINITION
|
|
***********************************************************************************************************************************/
|
|
/* *** Device.DeviceInfo. *** */
|
|
DMOBJ tDeviceInfoObj[] = {
|
|
/* OBJ, permission, addobj, delobj, checkdep, browseinstobj, nextdynamicobj, dynamicleaf, nextobj, leaf, linker, bbfdm_type*/
|
|
#ifdef SYSMNGR_VENDOR_CONFIG_FILE
|
|
{"VendorConfigFile", &DMREAD, NULL, NULL, NULL, browseVcfInst, NULL, NULL, NULL, tDeviceInfoVendorConfigFileParams, NULL, BBFDM_BOTH},
|
|
#endif
|
|
|
|
#ifdef SYSMNGR_MEMORY_STATUS
|
|
{"MemoryStatus", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, NULL, tDeviceInfoMemoryStatusParams, NULL, BBFDM_BOTH},
|
|
#endif
|
|
|
|
#ifdef SYSMNGR_PROCESS_STATUS
|
|
{"ProcessStatus", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, tDeviceInfoProcessStatusObj, tDeviceInfoProcessStatusParams, NULL, BBFDM_BOTH},
|
|
#endif
|
|
|
|
#ifdef SYSMNGR_NETWORK_PROPERTIES
|
|
{"NetworkProperties", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, NULL, tDeviceInfoNetworkPropertiesParams, NULL, BBFDM_BOTH},
|
|
#endif
|
|
|
|
#ifdef SYSMNGR_SUPPORTED_DATA_MODEL
|
|
{"SupportedDataModel", &DMREAD, NULL, NULL, NULL, browseDeviceInfoSupportedDataModelInst, NULL, NULL, NULL, tDeviceInfoSupportedDataModelParams, NULL, BBFDM_CWMP},
|
|
#endif
|
|
|
|
#ifdef SYSMNGR_FIRMWARE_IMAGE
|
|
{"FirmwareImage", &DMREAD, NULL, NULL, "file:/usr/libexec/rpcd/fwbank", browseDeviceInfoFirmwareImageInst, NULL, NULL, NULL, tDeviceInfoFirmwareImageParams, NULL, BBFDM_BOTH},
|
|
#endif
|
|
|
|
#ifdef SYSMNGR_REBOOTS
|
|
{"Reboots", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, tDeviceInfoRebootsObj, tDeviceInfoRebootsParams, NULL, BBFDM_USP},
|
|
#endif
|
|
|
|
{0}
|
|
};
|
|
|
|
DMLEAF tDeviceInfoParams[] = {
|
|
/* PARAM, permission, type, getvalue, setvalue, bbfdm_type*/
|
|
{"DeviceCategory", &DMREAD, DMT_STRING, get_device_devicecategory, NULL, BBFDM_BOTH},
|
|
{"Manufacturer", &DMREAD, DMT_STRING, get_device_manufacturer, NULL, BBFDM_BOTH},
|
|
{"ManufacturerOUI", &DMREAD, DMT_STRING, get_device_manufactureroui, NULL, BBFDM_BOTH},
|
|
{"ModelName", &DMREAD, DMT_STRING, get_device_modelname, NULL, BBFDM_BOTH},
|
|
{"Description", &DMREAD, DMT_STRING, get_device_description, NULL, BBFDM_BOTH},
|
|
{"ProductClass", &DMREAD, DMT_STRING, get_device_productclass, NULL, BBFDM_BOTH},
|
|
{"SerialNumber", &DMREAD, DMT_STRING, get_device_serialnumber, NULL, BBFDM_BOTH},
|
|
{"HardwareVersion", &DMREAD, DMT_STRING, get_device_hardwareversion, NULL, BBFDM_BOTH},
|
|
{"SoftwareVersion", &DMREAD, DMT_STRING, get_device_softwareversion, NULL, BBFDM_BOTH},
|
|
{"AdditionalHardwareVersion", &DMREAD, DMT_STRING, get_device_additionalhardwareversion, NULL, BBFDM_BOTH},
|
|
{"AdditionalSoftwareVersion", &DMREAD, DMT_STRING, get_device_additionalsoftwareversion, NULL, BBFDM_BOTH},
|
|
{"ProvisioningCode", &DMWRITE, DMT_STRING, get_device_provisioningcode, set_device_provisioningcode, BBFDM_BOTH},
|
|
{"UpTime", &DMREAD, DMT_UNINT, get_device_info_uptime, NULL, BBFDM_BOTH},
|
|
{"FirstUseDate", &DMREAD, DMT_TIME, get_device_info_firstusedate, NULL, BBFDM_BOTH},
|
|
{"CID", &DMREAD, DMT_STRING, get_deviceinfo_cid, NULL, BBFDM_USP},
|
|
{"FriendlyName", &DMREAD, DMT_STRING, get_deviceinfo_friendlyname, NULL, BBFDM_USP},
|
|
{"PEN", &DMREAD, DMT_STRING, get_deviceinfo_pen, NULL, BBFDM_USP},
|
|
{"ModelNumber", &DMREAD, DMT_STRING, get_deviceinfo_modelnumber, NULL, BBFDM_BOTH},
|
|
{"HostName", &DMWRITE, DMT_STRING, get_DeviceInfo_HostName, set_DeviceInfo_HostName, BBFDM_BOTH},
|
|
|
|
#ifdef SYSMNGR_VENDOR_CONFIG_FILE
|
|
{"VendorConfigFileNumberOfEntries", &DMREAD, DMT_UNINT, get_DeviceInfo_VendorConfigFileNumberOfEntries, NULL, BBFDM_BOTH},
|
|
#endif
|
|
|
|
#ifdef SYSMNGR_SUPPORTED_DATA_MODEL
|
|
{"SupportedDataModelNumberOfEntries", &DMREAD, DMT_UNINT, get_DeviceInfo_SupportedDataModelNumberOfEntries, NULL, BBFDM_CWMP},
|
|
#endif
|
|
|
|
#ifdef SYSMNGR_FIRMWARE_IMAGE
|
|
{"ActiveFirmwareImage", &DMREAD, DMT_STRING, get_device_active_fwimage, NULL, BBFDM_BOTH, DM_FLAG_REFERENCE},
|
|
{"BootFirmwareImage", &DMWRITE, DMT_STRING, get_device_boot_fwimage, set_device_boot_fwimage, BBFDM_BOTH, DM_FLAG_REFERENCE},
|
|
{"MaxNumberOfActivateTimeWindows", &DMREAD, DMT_UNINT, get_DeviceInfo_MaxNumberOfActivateTimeWindows, NULL, BBFDM_USP},
|
|
{"FirmwareImageNumberOfEntries", &DMREAD, DMT_UNINT, get_DeviceInfo_FirmwareImageNumberOfEntries, NULL, BBFDM_BOTH},
|
|
#endif
|
|
|
|
#ifdef SYSMNGR_VENDOR_EXTENSIONS
|
|
{BBF_VENDOR_PREFIX"BaseMACAddress", &DMREAD, DMT_STRING, get_deviceinfo_base_mac_addr, NULL, BBFDM_BOTH},
|
|
#endif
|
|
|
|
{0}
|
|
};
|
|
|
|
/* *** Device. *** */
|
|
DMOBJ tDMDeviceInfoObj[] = {
|
|
/* OBJ, permission, addobj, delobj, checkdep, browseinstobj, nextdynamicobj, dynamicleaf, nextobj, leaf, linker, bbfdm_type*/
|
|
{"DeviceInfo", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, tDeviceInfoObj, tDeviceInfoParams, NULL, BBFDM_BOTH},
|
|
{0}
|
|
};
|
|
|
|
DM_MAP_OBJ tDynamicObj[] = {
|
|
/* parentobj, nextobject, parameter */
|
|
{"Device.", tDMDeviceInfoObj, NULL},
|
|
{0}
|
|
};
|