Remove any inconsistencies with specification
* Fix payloadId field issue (was 1 byte, should use 2 byts)
* Copy final version of protobuf and asn definitions (mostly comments)
* Added links to yet-to-be updated RTD documentation
Change-Id: I69bda676423ad601797d95577ff8af6707cacb0c
Issue-ID: DCAEGEN2-857
Signed-off-by: Piotr Jaszczyk <piotr.jaszczyk@nokia.com>
diff --git a/hv-collector-domain/src/main/kotlin/org/onap/dcae/collectors/veshv/domain/PayloadContentType.kt b/hv-collector-domain/src/main/kotlin/org/onap/dcae/collectors/veshv/domain/PayloadContentType.kt
index 0ba4b81..7cbf353 100644
--- a/hv-collector-domain/src/main/kotlin/org/onap/dcae/collectors/veshv/domain/PayloadContentType.kt
+++ b/hv-collector-domain/src/main/kotlin/org/onap/dcae/collectors/veshv/domain/PayloadContentType.kt
@@ -23,12 +23,12 @@
* @author Piotr Jaszczyk <piotr.jaszczyk@nokia.com>
* @since June 2018
*/
-enum class PayloadContentType(val hexValue: Short) {
- GOOGLE_PROTOCOL_BUFFER(0x01);
+enum class PayloadContentType(val hexValue: Int) {
+ GOOGLE_PROTOCOL_BUFFER(0x0001);
companion object {
private val hexValues = PayloadContentType.values().map { it.hexValue }
- fun isValidHexValue(hex: Short) = hexValues.contains(hex)
+ fun isValidHexValue(hex: Int) = hexValues.contains(hex)
}
}
diff --git a/hv-collector-domain/src/main/kotlin/org/onap/dcae/collectors/veshv/domain/codec.kt b/hv-collector-domain/src/main/kotlin/org/onap/dcae/collectors/veshv/domain/codec.kt
index f08ec17..480ec69 100644
--- a/hv-collector-domain/src/main/kotlin/org/onap/dcae/collectors/veshv/domain/codec.kt
+++ b/hv-collector-domain/src/main/kotlin/org/onap/dcae/collectors/veshv/domain/codec.kt
@@ -39,7 +39,7 @@
writeByte(frame.versionMajor.toInt())
writeByte(frame.versionMinor.toInt())
writeZero(RESERVED_BYTE_COUNT)
- writeByte(frame.payloadType.toInt())
+ writeShort(frame.payloadType)
writeInt(frame.payloadSize)
}
.also {
@@ -81,7 +81,7 @@
val versionMajor = byteBuf.readUnsignedByte()
val versionMinor = byteBuf.readUnsignedByte()
byteBuf.skipBytes(RESERVED_BYTE_COUNT)
- val payloadTypeRaw = byteBuf.readUnsignedByte()
+ val payloadTypeRaw = byteBuf.readUnsignedShort()
val payloadSize = byteBuf.readInt()
if (payloadSize > maxPayloadSizeBytes) {
diff --git a/hv-collector-domain/src/main/kotlin/org/onap/dcae/collectors/veshv/domain/wire_frame.kt b/hv-collector-domain/src/main/kotlin/org/onap/dcae/collectors/veshv/domain/wire_frame.kt
index 5fdc5af..de6a504 100644
--- a/hv-collector-domain/src/main/kotlin/org/onap/dcae/collectors/veshv/domain/wire_frame.kt
+++ b/hv-collector-domain/src/main/kotlin/org/onap/dcae/collectors/veshv/domain/wire_frame.kt
@@ -21,19 +21,30 @@
/**
- * Wire frame structure is presented bellow using ASN.1 notation. All fields are in network byte order (big-endian).
+ * Wire frame structure is presented bellow using ASN.1 notation. Please note that official supported specification
+ * should be available on
+ * [RTD documentation](https://onap.readthedocs.io/en/latest/submodules/dcaegen2.git/docs/sections/apis/ves-hv.html).
*
* ```
- * -- Precedes every HV-VES message
- * Header ::= SEQUENCE {
- * magic INTEGER (0..255), – always 0xAA, identifies extended header usage
- * versionMajor INTEGER (0..255), – major interface v, forward incompatible with previous major v
- * versionMinor INTEGER (0..255), – minor interface v, forward compatible with previous minor v
- * reserved OCTET STRING (SIZE (3)), – reserved for future use
- * payloadId INTEGER (0..255), – message payload type: 0x00=undefined, 0x01=protobuf
- * payloadLength INTEGER (0..4294967295) – message payload length
- * payload OCTET STRING – length as per payloadLength
+ * -- Wire Transfer Protocol (binary, defined using ASN.1 notation)
+ * -- Encoding: use "direct encoding" to the number of octets indicated in the comment [n], using network byte order.
+ *
+ * WTP DEFINITIONS ::= BEGIN
+ *
+ * -- Used to sent data from the data provider
+ * WtpData ::= SEQUENCE {
+ * magic INTEGER (0..255), -- [1] always 0xAA
+ * versionMajor INTEGER (0..255), -- [1] major interface version, forward incompatible
+ * -- with previous major version, current value: 1
+ * versionMinor INTEGER (0..255), -- [1] minor interface version, forward compatible
+ * -- with previous minor version, current value: 0
+ * reserved OCTET STRING (SIZE (3)), -- [3] reserved for future use (ignored, but use 0)
+ * payloadId INTEGER (0..65535), -- [2] payload type: 0x0000=undefined, 0x0001=ONAP VesEvent (protobuf)
+ * payloadLength INTEGER (0..4294967295). -- [4] payload length in octets
+ * payload OCTET STRING -- [length as per payloadLength]
* }
+ *
+ * END
* ```
*
* @author Piotr Jaszczyk <piotr.jaszczyk@nokia.com>
@@ -42,7 +53,7 @@
data class WireFrameMessage(val payload: ByteData,
val versionMajor: Short,
val versionMinor: Short,
- val payloadType: Short,
+ val payloadType: Int,
val payloadSize: Int
) {
constructor(payload: ByteArray) : this(
@@ -66,7 +77,8 @@
const val HEADER_SIZE =
1 * java.lang.Byte.BYTES + // marker
- 3 * java.lang.Byte.BYTES + // single byte fields
+ 2 * java.lang.Byte.BYTES + // single byte fields
+ 1 * java.lang.Short.BYTES + // double byte fields
RESERVED_BYTE_COUNT * java.lang.Byte.BYTES + // reserved bytes
1 * java.lang.Integer.BYTES // payload length
diff --git a/hv-collector-domain/src/main/proto/event/VesEvent.proto b/hv-collector-domain/src/main/proto/event/VesEvent.proto
index dcd5464..dbe0aa3 100644
--- a/hv-collector-domain/src/main/proto/event/VesEvent.proto
+++ b/hv-collector-domain/src/main/proto/event/VesEvent.proto
@@ -20,15 +20,15 @@
syntax = "proto3";
package org.onap.ves;
-message VesEvent // top-level message
+message VesEvent // top-level message, currently the maximum event size supported by the HV-VES Collector is 1 MiB
{
CommonEventHeader commonEventHeader=1; // required
bytes eventFields=2; // required, payload
// this field contains a domain-specific GPB message
// the field being opaque (bytes), the decoding of the payload occurs in a separate step
- // the name of the GPB message for domain XYZ is XYZFields
- // e.g. for domain==perf3gpp, the GPB message is Perf3GPPFields
+ // the name of the GPB message for domain XYZ is XyzFields
+ // e.g. for domain==perf3gpp, the GPB message is Perf3gppFields
}
// VES CommonEventHeader adapted to GPB (Google Protocol Buffers)
@@ -36,10 +36,10 @@
message CommonEventHeader
{
- string version = 1; // required, "version of the gpb common event header"
+ string version = 1; // required, "version of the gpb common event header", current value "1.0"
string domain = 2; // required, "the eventing domain associated with the event", allowed values:
- // fault, heartbeat, measurement, mobile_flow, other, pnfregistration, sip_signaling,
- // state_change, syslog, threshold_crossing_alert, voice_quality, perf3gpp
+ // fault, heartbeat, measurement, mobileFlow, other, pnfRegistration, sipSignaling,
+ // stateChange, syslog, thresholdCrossingAlert, voiceQuality, perf3gpp
uint32 sequence = 3; // required, "ordering of events communicated by an event source instance or 0 if not needed"
@@ -69,7 +69,7 @@
bytes sourceId = 15; // "UUID identifying the entity experiencing the event issue; must be populated by the ATT enrichment process"
string sourceName = 16; // required, "name of the entity experiencing the event issued use A&AI entry"
string timeZoneOffset = 17; // "Offset to GMT to indicate local time zone for the device"
- string vesEventListenerVersion = 18; // required, "Version of the VesEvent Listener"
+ string vesEventListenerVersion = 18; // required, "Version of the VesEvent Listener", current value "7.0.2"
reserved "InternalHeaderFields"; // "enrichment fields for internal VES Event Listener service use only, not supplied by event sources"
reserved 100;
diff --git a/hv-collector-domain/src/main/proto/measurements/MeasDataCollection.proto b/hv-collector-domain/src/main/proto/measurements/MeasDataCollection.proto
deleted file mode 100644
index 9c93bd1..0000000
--- a/hv-collector-domain/src/main/proto/measurements/MeasDataCollection.proto
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * ============LICENSE_START=======================================================
- * dcaegen2-collectors-veshv
- * ================================================================================
- * Copyright (C) 2018 NOKIA
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-syntax = "proto3";
-package org.onap.ves;
-
-// Definition for RTPM, structure aligned with 3GPP PM format optimized for RTPM delivery pre-standard TS 28.550 V2.0.0 (2018-09).
-// Some field details are taken from 3GPP TS 32.436 V15.0.0 (2018-06) ASN.1 file.
-// Note (2018-09): work is in progress for 3GPP TS 28.550. Changes will be made, if needed, to align with final version.
-// Differences/additions to 3GPP TS 28.550 are marked with "%%".
-
-message MeasDataCollection // top-level message
-{
- // %% Combined messageFileHeader, measData (single instance), messageFileFooter (not needed: timestamp = collectionBeginTime + granularityPeriod).
- string formatVersion = 1;
- uint32 granularityPeriod = 2; // duration in seconds, %% moved from MeasInfo (single reporting period per event)
- string measuredEntityUserName = 3; // network function user definable name ("userLabel") defined for the measured entity in 3GPP TS 28.622
- string measuredEntityDn = 4; // DN as per 3GPP TS 32.300
- string measuredEntitySoftwareVersion = 5;
- repeated string measObjInstIdList = 6; // %%: optional, monitored object LDNs as per 3GPP TS 32.300 and 3GPP TS 32.432
- repeated MeasInfo measInfo = 7;
-}
-
-message MeasInfo
-{
- oneof MeasInfoId { // measurement group identifier
- uint32 iMeasInfoId = 1; // identifier as integer (%%: more compact)
- string measInfoId = 2; // identifier as string (more generic)
- }
-
- oneof MeasTypes { // measurement identifiers associated with the measurement results
- IMeasTypes iMeasTypes = 3; // identifiers as integers (%%: more compact)
- SMeasTypes measTypes = 4; // identifiers as strings (more generic)
- }
- // Needed only because GPB does not support repeated fields directly inside 'oneof'
- message IMeasTypes { repeated uint32 iMeasType = 1; }
- message SMeasTypes { repeated string measType = 1; }
-
- string jobId = 5;
- repeated MeasValue measValues = 6; // performance measurements grouped by measurement object
-}
-
-message MeasValue
-{
- oneof MeasObjInstId { // monitored object LDN as per 3GPP TS 32.300 and 3GPP TS 32.432
- string measObjInstId = 1; // LDN itself
- uint32 measObjInstIdListIdx = 2; // %%: index into measObjInstIdList
- }
- repeated MeasResult measResults = 3;
- bool suspectFlag = 4;
- map<string, string> measObjAddlFlds = 5; // %%: optional per-object data (name/value HashMap)
-}
-
-message MeasResult
-{
- uint32 p = 1; // Index in the MeasTypes array, needed only if measResults has fewer elements than MeasTypes
- oneof xValue {
- sint64 iValue = 2;
- double rValue = 3;
- bool isNull = 4;
- }
-}
diff --git a/hv-collector-domain/src/main/proto/measurements/Perf3GPPFields.proto b/hv-collector-domain/src/main/proto/measurements/Perf3GPPFields.proto
deleted file mode 100644
index eac06ee..0000000
--- a/hv-collector-domain/src/main/proto/measurements/Perf3GPPFields.proto
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * ============LICENSE_START=======================================================
- * dcaegen2-collectors-veshv
- * ================================================================================
- * Copyright (C) 2018 NOKIA
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-syntax = "proto3";
-package org.onap.ves;
-import "MeasDataCollection.proto"; // for 3GPP PM format
-
-message Perf3GPPFields
-{
- string perf3GPPFieldsVersion = 1;
- MeasDataCollection measDataCollection = 2;
- // Based on 3GPP TS 28.550
- // Logical mapping from 3GPP to ONAP header fields:
- // 3GPP MeasFileHeader ONAP/VES CommonEventHeader
- // senderName sourceName
- // senderType nfNamingCode + nfcNamingCode
- // vendorName nfVendorName
- // collectionBeginTime startEpochMicrosec
- // timestamp lastEpochMicrosec
- map<string, string> eventAddlFlds = 3; // optional per-event data (name/value HashMap)
-}
diff --git a/hv-collector-domain/src/main/proto/measurements/README.md b/hv-collector-domain/src/main/proto/measurements/README.md
new file mode 100644
index 0000000..eb69eb4
--- /dev/null
+++ b/hv-collector-domain/src/main/proto/measurements/README.md
@@ -0,0 +1 @@
+Measurements data (data placed in VesEvent.eventFields) description should be available in [RTD documentation](https://onap.readthedocs.io/en/latest/submodules/dcaegen2.git/docs/sections/apis/ves-hv.html).
\ No newline at end of file
diff --git a/hv-collector-test-utils/src/main/kotlin/org/onap/dcae/collectors/veshv/tests/utils/messages.kt b/hv-collector-test-utils/src/main/kotlin/org/onap/dcae/collectors/veshv/tests/utils/messages.kt
index 3bf615a..db7777c 100644
--- a/hv-collector-test-utils/src/main/kotlin/org/onap/dcae/collectors/veshv/tests/utils/messages.kt
+++ b/hv-collector-test-utils/src/main/kotlin/org/onap/dcae/collectors/veshv/tests/utils/messages.kt
@@ -38,7 +38,7 @@
writeByte(0x01) // major version
writeByte(0x00) // minor version
writeZero(RESERVED_BYTE_COUNT) // reserved
- writeByte(0x01) // content type = GPB
+ writeShort(0x0001) // content type = GPB
}
fun vesWireFrameMessage(domain: VesEventDomain = OTHER,