From ab365b2a36cff96cb1e7572b6492f59532376b3e Mon Sep 17 00:00:00 2001 From: Andrei Litvin Date: Thu, 25 Jan 2024 10:14:27 -0500 Subject: [PATCH 1/3] Add more protocol decoding information --- src/lib/format/protocol_messages.matter | 43 ++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/src/lib/format/protocol_messages.matter b/src/lib/format/protocol_messages.matter index e13440867b8c41..833f9b2ff8b9bf 100644 --- a/src/lib/format/protocol_messages.matter +++ b/src/lib/format/protocol_messages.matter @@ -166,6 +166,7 @@ client cluster IMProtocol = 0xFFFF0001 { optional EventFilterIB event_filters[] = 2; optional boolean fabric_filtered = 3; optional DataVersionFilterIB data_version_filters[] = 4; + optional boolean include_attribution_data = 5; // 10.2.2.2. Context Tag Encoded Action Information int8u interaction_model_revison = 0xFF; @@ -237,6 +238,24 @@ client cluster IMProtocol = 0xFFFF0001 { StatusIB status = 1; } + struct AttributionData { + // NOTE: 0 is missing + int8u context_information = 1; + int32u source_context = 2; + + // at-most-one-of { + optional int64u node_id = 3; + optional int16u group_id = 4; + // } + + // at-most-one-of { + optional int64u epoch_timestamp = 5; + optional int64u system_timestamp = 6; + // } + + int8u fabric_index = 0xFE; + } + struct AttributeData { optional int32u data_version = 0; AttributePathIB path = 1; @@ -266,6 +285,8 @@ client cluster IMProtocol = 0xFFFF0001 { // } cluster_event_payload data = 7; + + AttributionData attribution_data = 8; } struct EventReportIB { @@ -288,6 +309,7 @@ client cluster IMProtocol = 0xFFFF0001 { int32u data_version = 0; AttributePathIB path = 1; cluster_attribute_payload data = 2; + AttributionData attribution_data = 3; } struct WriteRequestMessage { @@ -320,7 +342,26 @@ client cluster IMProtocol = 0xFFFF0001 { struct CommandDataIB { CommandPathIB path = 0; - cluster_command_payload data = 1; + optional cluster_command_payload data = 1; + optional int16u command_ref = 2; + + // at-most-one-of { + optional SuppliedAttribution supplied_attribution_data = 3; + optional int16u supplied_attribution_data_repeat = 4; + // } + } + + enum SuppliedAttributionContextInformation : enum8 { + kDefaultClientAction = 0; + kUserInteraction = 1; + kClientAutomationRule = 2; + kClientSchedule = 3; + kClientTimer = 4; + } + + struct SuppliedAttribution { + SuppliedAttributeContextInformation context_information = 0; + int32u source_context = 1; } struct InvokeRequestMessage { From 240a0cdfcf8f656a67b9323b616857af3cfaebec Mon Sep 17 00:00:00 2001 From: Andrei Litvin Date: Thu, 25 Jan 2024 10:27:06 -0500 Subject: [PATCH 2/3] Add InvokeResponse::more_chunked_messages --- src/lib/format/protocol_messages.matter | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lib/format/protocol_messages.matter b/src/lib/format/protocol_messages.matter index 833f9b2ff8b9bf..dc266dee5df24a 100644 --- a/src/lib/format/protocol_messages.matter +++ b/src/lib/format/protocol_messages.matter @@ -386,6 +386,7 @@ client cluster IMProtocol = 0xFFFF0001 { struct InvokeResponseMessage { boolean suppress_response = 0; InvokeResponseIB invoke_responses[] = 1; + optional boolean more_chunked_messages = 2; // 10.2.2.2. Context Tag Encoded Action Information int8u interaction_model_revison = 0xFF; From 35524fe4d014635e257d5f80b5a286c91417162e Mon Sep 17 00:00:00 2001 From: Andrei Litvin Date: Thu, 25 Jan 2024 10:34:50 -0500 Subject: [PATCH 3/3] Update SessionParameter struct and include max-paths-per-invoke --- src/lib/format/protocol_messages.matter | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/src/lib/format/protocol_messages.matter b/src/lib/format/protocol_messages.matter index dc266dee5df24a..c669d22daf00d2 100644 --- a/src/lib/format/protocol_messages.matter +++ b/src/lib/format/protocol_messages.matter @@ -24,17 +24,23 @@ /// client cluster SecureChannelProtocol = 0xFFFF0000 { - struct ICDParameterStruct { - int32u sleepy_idle_interval = 1; - int32u sleepy_active_interval = 2; + struct SessionParameterStruct { + optional int32u session_idle_interval = 1; + optional int32u session_active_interval = 2; + optional int16u session_active_threshold = 3; + int16u data_model_revision = 4; + int16u interaction_model_revision = 5; + int32u specification_version = 6; + int16u max_paths_per_invoke = 7; } + struct PBKDFParamRequest { octet_string<32> initiator_random = 1; int16u initiator_session_id = 2; int16u passcode_id = 3; boolean has_pbkdf_parameters = 4; - optional ICDParameterStruct initiator_icd_params = 5; + optional SessionParameterStruct initiator_session_params = 5; } struct CryptoPBKDFParameterSet { @@ -47,7 +53,7 @@ client cluster SecureChannelProtocol = 0xFFFF0000 { octet_string<32> responder_random = 2; int16u responder_session_id = 3; CryptoPBKDFParameterSet pbkdf_parameters = 4; - optional IDCParameterStruct responder_icd_params = 5; + optional SessionParameterStruct responder_icd_params = 5; } struct PasePake1 { @@ -68,7 +74,7 @@ client cluster SecureChannelProtocol = 0xFFFF0000 { int16u initiator_session_id = 2; octet_string<32> destination_id = 3; octet_string<65> initiator_eph_pub_key = 4; - optional ICDParameterStruct initiator_icd_params = 5; + optional SessionParameterStruct initiator_session_params = 5; optional octet_string<16> resumption_id = 6; optional octet_string initiator_resume_mic = 7; } @@ -78,7 +84,7 @@ client cluster SecureChannelProtocol = 0xFFFF0000 { int16u responder_sessoion_id = 2; octet_string<65> responder_eph_pub_key = 3; octet_string encrypted2 = 4; - optional ICDParameterStruct responder_icd_params = 5; + optional SessionParameterStruct responder_session_params = 5; } struct CaseSigma3 { @@ -89,7 +95,7 @@ client cluster SecureChannelProtocol = 0xFFFF0000 { octet_string<16> resumption_id = 1; octet_string<16> sigma2_resume_mic = 2; int16u responder_sessoion_id = 3; - optional ICDParameterStruct responder_icd_params = 4; + optional SessionParameterStruct responder_session_params = 4; } // IDs here are based on Protocol opcodes