- 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 */
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 */
IedServer_setServerIdentity(iedServer, "MZ", "service_tracking", "1.0.0");

@ -18,6 +18,16 @@
<P type="OSI-TSEL">0001</P>
<P type="MMS-Port">102</P>
</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>
</SubNetwork>
</Communication>
@ -93,6 +103,9 @@
<OptFields configRef="true" entryID="true" reasonCode="true"/>
<RptEnabled max="3"/>
</ReportControl>
<GSEControl appID="events" name="gcbEvents" type="GOOSE" datSet="Events" confRev="3" />
<DOI name="Mod">
<DAI name="stVal">
<Val>on</Val>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -88,10 +88,10 @@ copyGCBValuesToTrackingObject(MmsGooseControlBlock gc)
MmsValue_setBoolean(trkInst->goEna->mmsValue, MmsGooseControlBlock_isEnabled(gc));
if (trkInst->goID)
MmsValue_setMmsString(trkInst->goID->mmsValue, gc->goId);
MmsValue_setVisibleString(trkInst->goID->mmsValue, gc->goId);
if (trkInst->datSet)
MmsValue_setMmsString(trkInst->datSet->mmsValue, gc->dataSet->name);
MmsValue_setVisibleString(trkInst->datSet->mmsValue, gc->dataSet->name);
if (trkInst->confRev) {
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);
#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);
IedModel_setAttributeValuesToNull(self->model);

Loading…
Cancel
Save