From cd8c94d75281e64ea6b48931278fdd0cb817ded7 Mon Sep 17 00:00:00 2001 From: sunwoo-choi <83573488+sunwoo-choi@users.noreply.github.com> Date: Tue, 31 Jan 2023 13:25:12 +0900 Subject: [PATCH 1/2] URCB The values of buffer-overflow and entryID shall be ignored reference 61850 8-1 table 63 --- src/iec61850/server/mms_mapping/reporting.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/iec61850/server/mms_mapping/reporting.c b/src/iec61850/server/mms_mapping/reporting.c index ad60bef3..232e788f 100644 --- a/src/iec61850/server/mms_mapping/reporting.c +++ b/src/iec61850/server/mms_mapping/reporting.c @@ -2375,6 +2375,20 @@ Reporting_RCBWriteAccessHandler(MmsMapping* self, ReportControl* rc, char* eleme goto exit_function; } } + else if (strcmp(elementName, "OptFlds") == 0) { + if (!rc->buffered) { + //RPT_OPT_BUFFER_OVERFLOW + if (MmsValue_getBitStringBit(value, 6)){ + retVal = DATA_ACCESS_ERROR_OBJECT_VALUE_INVALID; + goto exit_function; + } + //RPT_OPT_ENTRY_ID + if (MmsValue_getBitStringBit(value, 7)) { + retVal = DATA_ACCESS_ERROR_OBJECT_VALUE_INVALID; + goto exit_function; + } + } + } else if (strcmp(elementName, "ConfRev") == 0) { retVal = DATA_ACCESS_ERROR_OBJECT_ACCESS_DENIED; From 09b8cd5c566dca3420f073f9588f419cfc8a75bc Mon Sep 17 00:00:00 2001 From: sunwoo-choi <83573488+sunwoo-choi@users.noreply.github.com> Date: Fri, 10 Feb 2023 13:29:03 +0900 Subject: [PATCH 2/2] trk originatorID set trk originatorID set --- src/iec61850/server/mms_mapping/control.c | 28 +++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/iec61850/server/mms_mapping/control.c b/src/iec61850/server/mms_mapping/control.c index 05d2d074..39b08c20 100644 --- a/src/iec61850/server/mms_mapping/control.c +++ b/src/iec61850/server/mms_mapping/control.c @@ -398,6 +398,8 @@ updateGenericTrackingObjectValues(MmsMapping* self, ControlObject* controlObject if (trkInst->errorCode) MmsValue_setInt32(trkInst->errorCode->mmsValue, errVal); + + char objRef[129]; @@ -418,6 +420,32 @@ updateGenericTrackingObjectValues(MmsMapping* self, ControlObject* controlObject static void unselectObject(ControlObject* self, SelectStateChangedReason reason, MmsMapping* mmsMapping); +static bool +convertIPv4AddressStringToByteArray(const char* clientAddressString, uint8_t ipV4Addr[]) +{ + int addrElementCount = 0; + + char* separator = (char*) clientAddressString; + + while (separator != NULL && addrElementCount < 4) { + int intVal = atoi(separator); + + ipV4Addr[addrElementCount] = intVal; + + separator = strchr(separator, '.'); + + if (separator != NULL) + separator++; /* skip '.' character */ + + addrElementCount ++; + } + + if (addrElementCount == 4) + return true; + else + return false; +} + static void updateNextControlTimeout(MmsMapping* self, uint64_t timeout) {