- IEC 61850 Server: made number of data set entries configurable at runtime

pull/72/head
Michael Zillgith 7 years ago
parent 2f0211b188
commit a0adcf94e7

@ -60,6 +60,9 @@ struct sIedServerConfig
/** when true (default) enable dynamic data set services for MMS */ /** when true (default) enable dynamic data set services for MMS */
bool enableDynamicDataSetService; bool enableDynamicDataSetService;
/** maximum number of data set entries of dynamic data sets */
int maxDataSetEntries;
/** when true (default) enable log service */ /** when true (default) enable log service */
bool enableLogService; bool enableLogService;
@ -194,9 +197,17 @@ IedServerConfig_setMaxAssociationSpecificDataSets(IedServerConfig self, int maxD
void void
IedServerConfig_setMaxDomainSpecificDataSets(IedServerConfig self, int maxDataSets); IedServerConfig_setMaxDomainSpecificDataSets(IedServerConfig self, int maxDataSets);
/**
* \brief Set the maximum number of entries in a dynamic data set
*
* \param maxDataSetEntries the maximum number of entries allowed in a data set
*/
void void
IedServerConfig_setMaxDataSetEntries(IedServerConfig self, int maxDataSetEntries); IedServerConfig_setMaxDataSetEntries(IedServerConfig self, int maxDataSetEntries);
int
IedServerConfig_getMaxDatasSetEntries(IedServerConfig self);
void void
IedServerConfig_enableWriteDataSetService(IedServerConfig self, bool enable); IedServerConfig_enableWriteDataSetService(IedServerConfig self, bool enable);

@ -437,6 +437,7 @@ IedServer_createWithConfig(IedModel* dataModel, TLSConfiguration tlsConfiguratio
if (serverConfiguration) { if (serverConfiguration) {
MmsServer_enableFileService(self->mmsServer, serverConfiguration->enableFileService); MmsServer_enableFileService(self->mmsServer, serverConfiguration->enableFileService);
MmsServer_enableDynamicNamedVariableListService(self->mmsServer, serverConfiguration->enableDynamicDataSetService); MmsServer_enableDynamicNamedVariableListService(self->mmsServer, serverConfiguration->enableDynamicDataSetService);
MmsServer_setMaxDataSetEntries(self->mmsServer, serverConfiguration->maxDataSetEntries);
MmsServer_enableJournalService(self->mmsServer, serverConfiguration->enableLogService); MmsServer_enableJournalService(self->mmsServer, serverConfiguration->enableLogService);
MmsServer_setFilestoreBasepath(self->mmsServer, serverConfiguration->fileServiceBasepath); MmsServer_setFilestoreBasepath(self->mmsServer, serverConfiguration->fileServiceBasepath);
MmsServer_setMaxConnections(self->mmsServer, serverConfiguration->maxMmsConnections); MmsServer_setMaxConnections(self->mmsServer, serverConfiguration->maxMmsConnections);

@ -24,6 +24,10 @@
#include "iec61850_server.h" #include "iec61850_server.h"
#include "libiec61850_platform_includes.h" #include "libiec61850_platform_includes.h"
#ifndef CONFIG_MMS_MAX_NUMBER_OF_DATA_SET_MEMBERS
#define CONFIG_MMS_MAX_NUMBER_OF_DATA_SET_MEMBERS 100
#endif
IedServerConfig IedServerConfig
IedServerConfig_create() IedServerConfig_create()
{ {
@ -34,6 +38,7 @@ IedServerConfig_create()
self->fileServiceBasepath = StringUtils_copyString(CONFIG_VIRTUAL_FILESTORE_BASEPATH); self->fileServiceBasepath = StringUtils_copyString(CONFIG_VIRTUAL_FILESTORE_BASEPATH);
self->enableFileService = true; self->enableFileService = true;
self->enableDynamicDataSetService = true; self->enableDynamicDataSetService = true;
self->maxDataSetEntries = CONFIG_MMS_MAX_NUMBER_OF_DATA_SET_MEMBERS;
self->enableLogService = true; self->enableLogService = true;
self->edition = IEC_61850_EDITION_2; self->edition = IEC_61850_EDITION_2;
} }
@ -114,6 +119,18 @@ IedServerConfig_isDynamicDataSetServiceEnabled(IedServerConfig self)
return self->enableDynamicDataSetService; return self->enableDynamicDataSetService;
} }
void
IedServerConfig_setMaxDataSetEntries(IedServerConfig self, int maxDataSetEntries)
{
self->maxDataSetEntries = maxDataSetEntries;
}
int
IedServerConfig_getMaxDatasSetEntries(IedServerConfig self)
{
return self->maxDataSetEntries;
}
void void
IedServerConfig_enableLogService(IedServerConfig self, bool enable) IedServerConfig_enableLogService(IedServerConfig self, bool enable)
{ {

@ -255,6 +255,15 @@ MmsServer_enableFileService(MmsServer self, bool enable);
void void
MmsServer_enableDynamicNamedVariableListService(MmsServer self, bool enable); MmsServer_enableDynamicNamedVariableListService(MmsServer self, bool enable);
/**
* \brief Set the maximum number of data set entries (for dynamic data sets)
*
* \param[in] self the MmsServer instance
* \param[in] maximum number of dynamic data set entires
*/
void
MmsServer_setMaxDataSetEntries(MmsServer self, int maxDataSetEntries);
/** /**
* \brief Enable/disable journal service * \brief Enable/disable journal service
* *

@ -168,6 +168,7 @@ struct sMmsServer {
int maxConnections; int maxConnections;
bool fileServiceEnabled; bool fileServiceEnabled;
bool dynamicVariableListServiceEnabled; bool dynamicVariableListServiceEnabled;
int maxDataSetEntries;
bool journalServiceEnabled; bool journalServiceEnabled;
#endif /* (CONFIG_SET_FILESTORE_BASEPATH_AT_RUNTIME == 1) */ #endif /* (CONFIG_SET_FILESTORE_BASEPATH_AT_RUNTIME == 1) */

@ -291,7 +291,7 @@ checkIfVariableExists(MmsDevice* device, MmsAccessSpecifier* accessSpecifier)
static MmsNamedVariableList static MmsNamedVariableList
createNamedVariableList(MmsDomain* domain, MmsDevice* device, createNamedVariableList(MmsServer server, MmsDomain* domain, MmsDevice* device,
DefineNamedVariableListRequest_t* request, DefineNamedVariableListRequest_t* request,
char* variableListName, MmsError* mmsError) char* variableListName, MmsError* mmsError)
{ {
@ -299,7 +299,11 @@ createNamedVariableList(MmsDomain* domain, MmsDevice* device,
int variableCount = request->listOfVariable.list.count; int variableCount = request->listOfVariable.list.count;
#if (CONFIG_MMS_SERVER_CONFIG_SERVICES_AT_RUNTIME == 1)
if ((variableCount == 0 ) || (variableCount > server->maxDataSetEntries)) {
#else
if ((variableCount == 0 ) || (variableCount > CONFIG_MMS_MAX_NUMBER_OF_DATA_SET_MEMBERS)) { if ((variableCount == 0 ) || (variableCount > CONFIG_MMS_MAX_NUMBER_OF_DATA_SET_MEMBERS)) {
#endif
*mmsError = MMS_ERROR_DEFINITION_OTHER; *mmsError = MMS_ERROR_DEFINITION_OTHER;
goto exit_function; goto exit_function;
} }
@ -467,7 +471,7 @@ mmsServer_handleDefineNamedVariableListRequest(
else { else {
MmsError mmsError; MmsError mmsError;
MmsNamedVariableList namedVariableList = createNamedVariableList(domain, device, MmsNamedVariableList namedVariableList = createNamedVariableList(connection->server, domain, device,
request, variableListName, &mmsError); request, variableListName, &mmsError);
if (namedVariableList != NULL) { if (namedVariableList != NULL) {
@ -513,7 +517,7 @@ mmsServer_handleDefineNamedVariableListRequest(
else { else {
MmsError mmsError; MmsError mmsError;
MmsNamedVariableList namedVariableList = createNamedVariableList(NULL, device, MmsNamedVariableList namedVariableList = createNamedVariableList(connection->server, NULL, device,
request, variableListName, &mmsError); request, variableListName, &mmsError);
if (namedVariableList != NULL) { if (namedVariableList != NULL) {
@ -557,7 +561,7 @@ mmsServer_handleDefineNamedVariableListRequest(
else { else {
MmsError mmsError; MmsError mmsError;
MmsNamedVariableList namedVariableList = createNamedVariableList(NULL, device, MmsNamedVariableList namedVariableList = createNamedVariableList(connection->server, NULL, device,
request, variableListName, &mmsError); request, variableListName, &mmsError);
if (namedVariableList != NULL) { if (namedVariableList != NULL) {

@ -71,6 +71,7 @@ MmsServer_create(MmsDevice* device, TLSConfiguration tlsConfiguration)
self->fileServiceEnabled = true; self->fileServiceEnabled = true;
self->dynamicVariableListServiceEnabled = true; self->dynamicVariableListServiceEnabled = true;
self->journalServiceEnabled = true; self->journalServiceEnabled = true;
self->maxDataSetEntries = CONFIG_MMS_MAX_NUMBER_OF_DATA_SET_MEMBERS;
#endif /* (CONFIG_MMS_SERVER_CONFIG_SERVICES_AT_RUNTIME == 1) */ #endif /* (CONFIG_MMS_SERVER_CONFIG_SERVICES_AT_RUNTIME == 1) */
return self; return self;
@ -125,6 +126,12 @@ MmsServer_enableDynamicNamedVariableListService(MmsServer self, bool enable)
self->dynamicVariableListServiceEnabled = enable; self->dynamicVariableListServiceEnabled = enable;
} }
void
MmsServer_setMaxDataSetEntries(MmsServer self, int maxDataSetEntries)
{
self->maxDataSetEntries = maxDataSetEntries;
}
void void
MmsServer_enableJournalService(MmsServer self, bool enable) MmsServer_enableJournalService(MmsServer self, bool enable)
{ {

@ -614,3 +614,5 @@ EXPORTS
IedServerConfig_getEdition IedServerConfig_getEdition
IedServerConfig_setMaxMmsConnections IedServerConfig_setMaxMmsConnections
IedServerConfig_getMaxMmsConnections IedServerConfig_getMaxMmsConnections
IedServerConfig_setMaxDataSetEntries
IedServerConfig_getMaxDatasSetEntries

@ -742,3 +742,5 @@ EXPORTS
IedServerConfig_getEdition IedServerConfig_getEdition
IedServerConfig_setMaxMmsConnections IedServerConfig_setMaxMmsConnections
IedServerConfig_getMaxMmsConnections IedServerConfig_getMaxMmsConnections
IedServerConfig_setMaxDataSetEntries
IedServerConfig_getMaxDatasSetEntries

Loading…
Cancel
Save