aboutsummaryrefslogtreecommitdiffstats
path: root/protobuf
diff options
context:
space:
mode:
authorGraham Bloice <graham.bloice@trihedral.com>2021-04-10 19:15:34 +0100
committerGraham Bloice <graham.bloice@trihedral.com>2021-05-14 12:11:03 +0100
commitf6ad4812a2d8ee56b90fb204f00d54af27855992 (patch)
tree0173a6d55d84d6e2f0f18b027d7da8c235150c6c /protobuf
parent2c62e2eb3ff1c700ccd79e6853f50aeac9832d8c (diff)
Add SparkplugB dissector
Add a dissector for SparkplugB as a heuristic subdissector of MQTT and which calls protobuf to dissect the messages payload.
Diffstat (limited to 'protobuf')
-rw-r--r--protobuf/sparkplug_b.proto197
1 files changed, 197 insertions, 0 deletions
diff --git a/protobuf/sparkplug_b.proto b/protobuf/sparkplug_b.proto
new file mode 100644
index 0000000000..bda645cc91
--- /dev/null
+++ b/protobuf/sparkplug_b.proto
@@ -0,0 +1,197 @@
+syntax = "proto2";
+
+//
+// To compile:
+// cd client_libraries/java
+// protoc --proto_path=../../ --java_out=src/main/java ../../sparkplug_b.proto
+//
+package com.cirruslink.sparkplug.protobuf;
+
+option java_package = "com.cirruslink.sparkplug.protobuf";
+option java_outer_classname = "SparkplugBProto";
+
+message Payload {
+ /*
+ // Indexes of Data Types
+
+ // Unknown placeholder for future expansion.
+ Unknown = 0;
+
+ // Basic Types
+ Int8 = 1;
+ Int16 = 2;
+ Int32 = 3;
+ Int64 = 4;
+ UInt8 = 5;
+ UInt16 = 6;
+ UInt32 = 7;
+ UInt64 = 8;
+ Float = 9;
+ Double = 10;
+ Boolean = 11;
+ String = 12;
+ DateTime = 13;
+ Text = 14;
+
+ // Additional Metric Types
+ UUID = 15;
+ DataSet = 16;
+ Bytes = 17;
+ File = 18;
+ Template = 19;
+
+ // Additional PropertyValue Types
+ PropertySet = 20;
+ PropertySetList = 21;
+
+ */
+
+ message Template {
+
+ message Parameter {
+ optional string name = 1;
+ optional uint32 type = 2;
+
+ oneof value {
+ uint32 int_value = 3;
+ uint64 long_value = 4;
+ float float_value = 5;
+ double double_value = 6;
+ bool boolean_value = 7;
+ string string_value = 8;
+ ParameterValueExtension extension_value = 9;
+ }
+
+ message ParameterValueExtension {
+ extensions 1 to max;
+ }
+ }
+
+ optional string version = 1; // The version of the Template to prevent mismatches
+ repeated Metric metrics = 2; // Each metric is the name of the metric and the datatype of the member but does not contain a value
+ repeated Parameter parameters = 3;
+ optional string template_ref = 4; // Reference to a template if this is extending a Template or an instance - must exist if an instance
+ optional bool is_definition = 5;
+ extensions 6 to max;
+ }
+
+ message DataSet {
+
+ message DataSetValue {
+
+ oneof value {
+ uint32 int_value = 1;
+ uint64 long_value = 2;
+ float float_value = 3;
+ double double_value = 4;
+ bool boolean_value = 5;
+ string string_value = 6;
+ DataSetValueExtension extension_value = 7;
+ }
+
+ message DataSetValueExtension {
+ extensions 1 to max;
+ }
+ }
+
+ message Row {
+ repeated DataSetValue elements = 1;
+ extensions 2 to max; // For third party extensions
+ }
+
+ optional uint64 num_of_columns = 1;
+ repeated string columns = 2;
+ repeated uint32 types = 3;
+ repeated Row rows = 4;
+ extensions 5 to max; // For third party extensions
+ }
+
+ message PropertyValue {
+
+ optional uint32 type = 1;
+ optional bool is_null = 2;
+
+ oneof value {
+ uint32 int_value = 3;
+ uint64 long_value = 4;
+ float float_value = 5;
+ double double_value = 6;
+ bool boolean_value = 7;
+ string string_value = 8;
+ PropertySet propertyset_value = 9;
+ PropertySetList propertysets_value = 10; // List of Property Values
+ PropertyValueExtension extension_value = 11;
+ }
+
+ message PropertyValueExtension {
+ extensions 1 to max;
+ }
+ }
+
+ message PropertySet {
+ repeated string keys = 1; // Names of the properties
+ repeated PropertyValue values = 2;
+ extensions 3 to max;
+ }
+
+ message PropertySetList {
+ repeated PropertySet propertyset = 1;
+ extensions 2 to max;
+ }
+
+ message MetaData {
+ // Bytes specific metadata
+ optional bool is_multi_part = 1;
+
+ // General metadata
+ optional string content_type = 2; // Content/Media type
+ optional uint64 size = 3; // File size, String size, Multi-part size, etc
+ optional uint64 seq = 4; // Sequence number for multi-part messages
+
+ // File metadata
+ optional string file_name = 5; // File name
+ optional string file_type = 6; // File type (i.e. xml, json, txt, cpp, etc)
+ optional string md5 = 7; // md5 of data
+
+ // Catchalls and future expansion
+ optional string description = 8; // Could be anything such as json or xml of custom properties
+ extensions 9 to max;
+ }
+
+ message Metric {
+
+ optional string name = 1; // Metric name - should only be included on birth
+ optional uint64 alias = 2; // Metric alias - tied to name on birth and included in all later DATA messages
+ optional uint64 timestamp = 3; // Timestamp associated with data acquisition time
+ optional uint32 datatype = 4; // DataType of the metric/tag value
+ optional bool is_historical = 5; // If this is historical data and should not update real time tag
+ optional bool is_transient = 6; // Tells consuming clients such as MQTT Engine to not store this as a tag
+ optional bool is_null = 7; // If this is null - explicitly say so rather than using -1, false, etc for some datatypes.
+ optional MetaData metadata = 8; // Metadata for the payload
+ optional PropertySet properties = 9;
+
+ oneof value {
+ uint32 int_value = 10;
+ uint64 long_value = 11;
+ float float_value = 12;
+ double double_value = 13;
+ bool boolean_value = 14;
+ string string_value = 15;
+ bytes bytes_value = 16; // Bytes, File
+ DataSet dataset_value = 17;
+ Template template_value = 18;
+ MetricValueExtension extension_value = 19;
+ }
+
+ message MetricValueExtension {
+ extensions 1 to max;
+ }
+ }
+
+ optional uint64 timestamp = 1; // Timestamp at message sending time
+ repeated Metric metrics = 2; // Repeated forever - no limit in Google Protobufs
+ optional uint64 seq = 3; // Sequence number
+ optional string uuid = 4; // UUID to track message type in terms of schema definitions
+ optional bytes body = 5; // To optionally bypass the whole definition above
+ extensions 6 to max; // For third party extensions
+}