- IEC 61850 server/MMS server: make dynamic data set service configurable at runtime with IedServerConfig object (new functions IedServerConfig_enableDynamicDataSetService and IedServerConfig_isDynamicDataSetServiceEnabled)

pull/72/head
Michael Zillgith 7 years ago
parent 27e883a1bc
commit 0a3d86601b

@ -96,6 +96,9 @@ main(int argc, char** argv)
/* disable MMS file service */
IedServerConfig_enableFileService(config, false);
/* disable dynamic data set service */
IedServerConfig_enableDynamicDataSetService(config, true);
/* Create a new IEC 61850 server instance */
iedServer = IedServer_createWithConfig(&iedModel, NULL, config);

@ -56,6 +56,9 @@ struct sIedServerConfig
/** when true (default) enable MMS file service */
bool enableFileService;
/** when true (default) enable dynamic data set services for MMS */
bool enableDynamicDataSetService;
};
/**
@ -118,6 +121,22 @@ IedServerConfig_enableFileService(IedServerConfig self, bool enable);
bool
IedServerConfig_isFileServiceEnabled(IedServerConfig self);
/**
* \brief Enable/disable the dynamic data set service for MMS
*
* \param[in] enable set true to enable dynamic data set service, otherwise false
*/
void
IedServerConfig_enableDynamicDataSetService(IedServerConfig self, bool enable);
/**
* \brief Is the dynamic data set service for MMS enabled or disabled
*
* \return true if enabled, false otherwise
*/
bool
IedServerConfig_isDynamicDataSetServiceEnabled(IedServerConfig self);
/**
* An opaque handle for an IED server instance
*/

@ -422,8 +422,10 @@ IedServer_createWithConfig(IedModel* dataModel, TLSConfiguration tlsConfiguratio
self->mmsServer = MmsServer_create(self->mmsDevice, tlsConfiguration);
#if (CONFIG_MMS_SERVER_CONFIG_SERVICES_AT_RUNTIME == 1)
if (serverConfiguration)
if (serverConfiguration) {
MmsServer_enableFileService(self->mmsServer, serverConfiguration->enableFileService);
MmsServer_enableDynamicNamedVariableListService(self->mmsServer, serverConfiguration->enableDynamicDataSetService);
}
#endif
if (serverConfiguration)

@ -33,6 +33,7 @@ IedServerConfig_create()
self->reportBufferSize = CONFIG_REPORTING_DEFAULT_REPORT_BUFFER_SIZE;
self->fileServiceBasepath = StringUtils_copyString(CONFIG_VIRTUAL_FILESTORE_BASEPATH);
self->enableFileService = true;
self->enableDynamicDataSetService = true;
}
return self;
@ -87,3 +88,14 @@ IedServerConfig_isFileServiceEnabled(IedServerConfig self)
return self->enableFileService;
}
void
IedServerConfig_enableDynamicDataSetService(IedServerConfig self, bool enable)
{
self->enableDynamicDataSetService = enable;
}
bool
IedServerConfig_isDynamicDataSetServiceEnabled(IedServerConfig self)
{
return self->enableDynamicDataSetService;
}

@ -236,6 +236,17 @@ MmsServer_setFilestoreBasepath(MmsServer self, const char* basepath);
void
MmsServer_enableFileService(MmsServer self, bool enable);
/**
* \brief Enable/disable dynamic named variable list (data set) service
*
* NOTE: requires CONFIG_MMS_SERVER_CONFIG_SERVICES_AT_RUNTIME = 1 in stack configuration
*
* \param[in] self the MmsServer instance
* \param[in] enable true to enable named variable list services, false to disable
*/
void
MmsServer_enableDynamicNamedVariableListService(MmsServer self, bool enable);
/**
* \brief lock the cached server data model
*

@ -166,6 +166,7 @@ struct sMmsServer {
#if (CONFIG_MMS_SERVER_CONFIG_SERVICES_AT_RUNTIME == 1)
bool fileServiceEnabled;
bool dynamicVariableListServiceEnabled;
#endif /* (CONFIG_SET_FILESTORE_BASEPATH_AT_RUNTIME == 1) */
};

@ -105,10 +105,6 @@ encodeInitResponseDetail(MmsServerConnection self, uint8_t* buffer, int bufPos,
| MMS_SERVICE_GET_VARIABLE_ACCESS_ATTRIBUTES
,
0x00
#if ((MMS_DATA_SET_SERVICE == 1) && (MMS_DYNAMIC_DATA_SETS == 1))
| MMS_SERVICE_DEFINE_NAMED_VARIABLE_LIST
| MMS_SERVICE_DELETE_NAMED_VARIABLE_LIST
#endif
#if ((MMS_DATA_SET_SERVICE == 1) && (MMS_GET_DATA_SET_ATTRIBUTES == 1))
| MMS_SERVICE_GET_NAMED_VARIABLE_LIST_ATTRIBUTES
#endif
@ -151,6 +147,15 @@ encodeInitResponseDetail(MmsServerConnection self, uint8_t* buffer, int bufPos,
}
if (self->server->dynamicVariableListServiceEnabled) {
#if ((MMS_DATA_SET_SERVICE == 1) && (MMS_DYNAMIC_DATA_SETS == 1))
servicesSupported[1] |= MMS_SERVICE_DEFINE_NAMED_VARIABLE_LIST;
servicesSupported[1] |= MMS_SERVICE_DELETE_NAMED_VARIABLE_LIST;
#endif
}
#else
uint8_t servicesSupported[] =

@ -69,6 +69,7 @@ MmsServer_create(MmsDevice* device, TLSConfiguration tlsConfiguration)
#if (CONFIG_MMS_SERVER_CONFIG_SERVICES_AT_RUNTIME == 1)
self->fileServiceEnabled = true;
self->dynamicVariableListServiceEnabled = true;
#endif /* (CONFIG_MMS_SERVER_CONFIG_SERVICES_AT_RUNTIME == 1) */
return self;
@ -111,6 +112,12 @@ MmsServer_enableFileService(MmsServer self, bool enable)
self->fileServiceEnabled = enable;
}
void
MmsServer_enableDynamicNamedVariableListService(MmsServer self, bool enable)
{
self->dynamicVariableListServiceEnabled = enable;
}
#endif /* (CONFIG_MMS_SERVER_CONFIG_SERVICES_AT_RUNTIME == 1) */
void

@ -1,7 +1,7 @@
/*
* mms_server_connection.c
*
* Copyright 2013-2016 Michael Zillgith
* Copyright 2013-2018 Michael Zillgith
*
* This file is part of libIEC61850.
*
@ -334,11 +334,42 @@ handleConfirmedRequestPdu(
#endif /* MMS_GET_VARIABLE_ACCESS_ATTRIBUTES == 1 */
#if (MMS_DYNAMIC_DATA_SETS == 1)
#if (CONFIG_MMS_SERVER_CONFIG_SERVICES_AT_RUNTIME == 1)
case 0xab: /* define-named-variable-list */
if (self->server->dynamicVariableListServiceEnabled)
mmsServer_handleDefineNamedVariableListRequest(self,
buffer, bufPos, bufPos + length,
invokeId, response);
else
mmsMsg_createMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_UNRECOGNIZED_SERVICE, response);
break;
case 0xad: /* delete-named-variable-list-request */
if (self->server->dynamicVariableListServiceEnabled)
mmsServer_handleDeleteNamedVariableListRequest(self,
buffer, bufPos, bufPos + length,
invokeId, response);
else
mmsMsg_createMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_UNRECOGNIZED_SERVICE, response);
break;
#else
case 0xab: /* define-named-variable-list */
mmsServer_handleDefineNamedVariableListRequest(self,
buffer, bufPos, bufPos + length,
invokeId, response);
break;
case 0xad: /* delete-named-variable-list-request */
mmsServer_handleDeleteNamedVariableListRequest(self,
buffer, bufPos, bufPos + length,
invokeId, response);
break;
#endif /* (CONFIG_MMS_SERVER_CONFIG_SERVICES_AT_RUNTIME == 1) */
#endif /* (MMS_DYNAMIC_DATA_SETS == 1) */
#if (MMS_GET_DATA_SET_ATTRIBUTES == 1)
@ -349,14 +380,6 @@ handleConfirmedRequestPdu(
break;
#endif /* (MMS_GET_DATA_SET_ATTRIBUTES == 1) */
#if (MMS_DYNAMIC_DATA_SETS == 1)
case 0xad: /* delete-named-variable-list-request */
mmsServer_handleDeleteNamedVariableListRequest(self,
buffer, bufPos, bufPos + length,
invokeId, response);
break;
#endif /* (MMS_DYNAMIC_DATA_SETS == 1) */
default:
mmsMsg_createMmsRejectPdu(&invokeId, MMS_ERROR_REJECT_UNRECOGNIZED_SERVICE, response);
return;

@ -606,3 +606,5 @@ EXPORTS
ControlObjectClient_getCtlValType
IedServerConfig_enableFileService
IedServerConfig_isFileServiceEnabled
IedServerConfig_enableDynamicDataSetService
IedServerConfig_isDynamicDataSetServiceEnabled

@ -734,3 +734,5 @@ EXPORTS
SVPublisher_ASDU_setSmpCntWrap
IedServerConfig_enableFileService
IedServerConfig_isFileServiceEnabled
IedServerConfig_enableDynamicDataSetService
IedServerConfig_isDynamicDataSetServiceEnabled

Loading…
Cancel
Save