- IED server: fixed memory leak in service tracking code

- IED server: fixed bug in GoCB service tracking (goID and dataSet not set)
pull/265/head
Michael Zillgith 5 years ago
parent b04e651623
commit fcdb83bc2f

@ -115,6 +115,15 @@ main(int argc, char** argv)
/* configuration object is no longer required */ /* configuration object is no longer required */
IedServerConfig_destroy(config); IedServerConfig_destroy(config);
if (argc > 1) {
char* ethernetIfcID = argv[1];
printf("Using GOOSE interface: %s\n", ethernetIfcID);
/* set GOOSE interface for all GOOSE publishers (GCBs) */
IedServer_setGooseInterfaceId(iedServer, ethernetIfcID);
}
/* set the identity values for MMS identify service */ /* set the identity values for MMS identify service */
IedServer_setServerIdentity(iedServer, "MZ", "service_tracking", "1.0.0"); IedServer_setServerIdentity(iedServer, "MZ", "service_tracking", "1.0.0");

@ -18,6 +18,16 @@
<P type="OSI-TSEL">0001</P> <P type="OSI-TSEL">0001</P>
<P type="MMS-Port">102</P> <P type="MMS-Port">102</P>
</Address> </Address>
<GSE ldInst="GenericIO" cbName="gcbEvents">
<Address>
<P type="VLAN-ID">1</P>
<P type="VLAN-PRIORITY">4</P>
<P type="MAC-Address">01-0c-cd-01-00-01</P>
<P type="APPID">1000</P>
</Address>
<MinTime>1000</MinTime>
<MaxTime>3000</MaxTime>
</GSE>
</ConnectedAP> </ConnectedAP>
</SubNetwork> </SubNetwork>
</Communication> </Communication>
@ -93,6 +103,9 @@
<OptFields configRef="true" entryID="true" reasonCode="true"/> <OptFields configRef="true" entryID="true" reasonCode="true"/>
<RptEnabled max="3"/> <RptEnabled max="3"/>
</ReportControl> </ReportControl>
<GSEControl appID="events" name="gcbEvents" type="GOOSE" datSet="Events" confRev="3" />
<DOI name="Mod"> <DOI name="Mod">
<DAI name="stVal"> <DAI name="stVal">
<Val>on</Val> <Val>on</Val>

@ -4011,6 +4011,16 @@ ReportControlBlock iedModel_GenericIO_LLN0_report8 = {&iedModel_GenericIO_LLN0,
ReportControlBlock iedModel_GenericIO_LLN0_report9 = {&iedModel_GenericIO_LLN0, "brcbServiceTracking03", "ServiceTracking", true, "ServiceTracking", 1, 19, 228, 0, 0, {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, NULL}; ReportControlBlock iedModel_GenericIO_LLN0_report9 = {&iedModel_GenericIO_LLN0, "brcbServiceTracking03", "ServiceTracking", true, "ServiceTracking", 1, 19, 228, 0, 0, {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, NULL};
extern GSEControlBlock iedModel_GenericIO_LLN0_gse0;
static PhyComAddress iedModel_GenericIO_LLN0_gse0_address = {
4,
1,
4096,
{0x1, 0xc, 0xcd, 0x1, 0x0, 0x1}
};
GSEControlBlock iedModel_GenericIO_LLN0_gse0 = {&iedModel_GenericIO_LLN0, "gcbEvents", "events", "Events", 3, false, &iedModel_GenericIO_LLN0_gse0_address, 1000, 3000, NULL};
@ -4021,7 +4031,7 @@ IedModel iedModel = {
&iedModel_GenericIO, &iedModel_GenericIO,
&iedModelds_GenericIO_LLN0_Events, &iedModelds_GenericIO_LLN0_Events,
&iedModel_GenericIO_LLN0_report0, &iedModel_GenericIO_LLN0_report0,
NULL, &iedModel_GenericIO_LLN0_gse0,
NULL, NULL,
NULL, NULL,
NULL, NULL,

@ -88,10 +88,10 @@ copyGCBValuesToTrackingObject(MmsGooseControlBlock gc)
MmsValue_setBoolean(trkInst->goEna->mmsValue, MmsGooseControlBlock_isEnabled(gc)); MmsValue_setBoolean(trkInst->goEna->mmsValue, MmsGooseControlBlock_isEnabled(gc));
if (trkInst->goID) if (trkInst->goID)
MmsValue_setMmsString(trkInst->goID->mmsValue, gc->goId); MmsValue_setVisibleString(trkInst->goID->mmsValue, gc->goId);
if (trkInst->datSet) if (trkInst->datSet)
MmsValue_setMmsString(trkInst->datSet->mmsValue, gc->dataSet->name); MmsValue_setVisibleString(trkInst->datSet->mmsValue, gc->dataSet->name);
if (trkInst->confRev) { if (trkInst->confRev) {
uint32_t confRev = MmsValue_toUint32(MmsValue_getElement(gc->mmsValue, 3)); uint32_t confRev = MmsValue_toUint32(MmsValue_getElement(gc->mmsValue, 3));

@ -1947,6 +1947,22 @@ MmsMapping_destroy(MmsMapping* self)
LinkedList_destroyDeep(self->logInstances, (LinkedListValueDeleteFunction) LogInstance_destroy); LinkedList_destroyDeep(self->logInstances, (LinkedListValueDeleteFunction) LogInstance_destroy);
#endif #endif
#if (CONFIG_IEC61850_SERVICE_TRACKING == 1)
if (self->brcbTrk) GLOBAL_FREEMEM(self->brcbTrk);
if (self->urcbTrk) GLOBAL_FREEMEM(self->urcbTrk);
if (self->gocbTrk) GLOBAL_FREEMEM(self->gocbTrk);
if (self->spcTrk) GLOBAL_FREEMEM(self->spcTrk);
if (self->dpcTrk) GLOBAL_FREEMEM(self->dpcTrk);
if (self->incTrk) GLOBAL_FREEMEM(self->incTrk);
if (self->encTrk1) GLOBAL_FREEMEM(self->encTrk1);
if (self->apcFTrk) GLOBAL_FREEMEM(self->apcFTrk);
if (self->apcIntTrk) GLOBAL_FREEMEM(self->apcIntTrk);
if (self->bscTrk) GLOBAL_FREEMEM(self->bscTrk);
if (self->iscTrk) GLOBAL_FREEMEM(self->iscTrk);
if (self->bacTrk) GLOBAL_FREEMEM(self->bacTrk);
if (self->sgcbTrk) GLOBAL_FREEMEM(self->sgcbTrk);
#endif
LinkedList_destroy(self->attributeAccessHandlers); LinkedList_destroy(self->attributeAccessHandlers);
IedModel_setAttributeValuesToNull(self->model); IedModel_setAttributeValuesToNull(self->model);

Loading…
Cancel
Save