diff --git a/api/csharp/Chirpstack/api/MulticastGroup.cs b/api/csharp/Chirpstack/api/MulticastGroup.cs
index 723d7149..21a3352f 100644
--- a/api/csharp/Chirpstack/api/MulticastGroup.cs
+++ b/api/csharp/Chirpstack/api/MulticastGroup.cs
@@ -27,97 +27,98 @@ namespace Chirpstack.Api {
"ChlhcGkvbXVsdGljYXN0X2dyb3VwLnByb3RvEgNhcGkaHGdvb2dsZS9hcGkv",
"YW5ub3RhdGlvbnMucHJvdG8aH2dvb2dsZS9wcm90b2J1Zi90aW1lc3RhbXAu",
"cHJvdG8aG2dvb2dsZS9wcm90b2J1Zi9lbXB0eS5wcm90bxoTY29tbW9uL2Nv",
- "bW1vbi5wcm90byLgAgoOTXVsdGljYXN0R3JvdXASCgoCaWQYASABKAkSDAoE",
+ "bW1vbi5wcm90byKAAwoOTXVsdGljYXN0R3JvdXASCgoCaWQYASABKAkSDAoE",
"bmFtZRgCIAEoCRIWCg5hcHBsaWNhdGlvbl9pZBgDIAEoCRIeCgZyZWdpb24Y",
"BCABKA4yDi5jb21tb24uUmVnaW9uEg8KB21jX2FkZHIYBSABKAkSFAoMbWNf",
"bndrX3Nfa2V5GAYgASgJEhQKDG1jX2FwcF9zX2tleRgHIAEoCRINCgVmX2Nu",
"dBgIIAEoDRIrCgpncm91cF90eXBlGAkgASgOMhcuYXBpLk11bHRpY2FzdEdy",
"b3VwVHlwZRIKCgJkchgKIAEoDRIRCglmcmVxdWVuY3kYCyABKA0SIAoYY2xh",
- "c3NfYl9waW5nX3Nsb3RfcGVyaW9kGAwgASgNEkIKF2NsYXNzX2Nfc2NoZWR1",
- "bGluZ190eXBlGA0gASgOMiEuYXBpLk11bHRpY2FzdEdyb3VwU2NoZWR1bGlu",
- "Z1R5cGUi3wEKFk11bHRpY2FzdEdyb3VwTGlzdEl0ZW0SCgoCaWQYASABKAkS",
- "LgoKY3JlYXRlZF9hdBgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3Rh",
- "bXASLgoKdXBkYXRlZF9hdBgDIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1l",
- "c3RhbXASDAoEbmFtZRgEIAEoCRIeCgZyZWdpb24YBSABKA4yDi5jb21tb24u",
- "UmVnaW9uEisKCmdyb3VwX3R5cGUYBiABKA4yFy5hcGkuTXVsdGljYXN0R3Jv",
- "dXBUeXBlIksKG0NyZWF0ZU11bHRpY2FzdEdyb3VwUmVxdWVzdBIsCg9tdWx0",
- "aWNhc3RfZ3JvdXAYASABKAsyEy5hcGkuTXVsdGljYXN0R3JvdXAiKgocQ3Jl",
- "YXRlTXVsdGljYXN0R3JvdXBSZXNwb25zZRIKCgJpZBgBIAEoCSImChhHZXRN",
- "dWx0aWNhc3RHcm91cFJlcXVlc3QSCgoCaWQYASABKAkiqQEKGUdldE11bHRp",
- "Y2FzdEdyb3VwUmVzcG9uc2USLAoPbXVsdGljYXN0X2dyb3VwGAEgASgLMhMu",
- "YXBpLk11bHRpY2FzdEdyb3VwEi4KCmNyZWF0ZWRfYXQYAiABKAsyGi5nb29n",
- "bGUucHJvdG9idWYuVGltZXN0YW1wEi4KCnVwZGF0ZWRfYXQYAyABKAsyGi5n",
- "b29nbGUucHJvdG9idWYuVGltZXN0YW1wIksKG1VwZGF0ZU11bHRpY2FzdEdy",
- "b3VwUmVxdWVzdBIsCg9tdWx0aWNhc3RfZ3JvdXAYASABKAsyEy5hcGkuTXVs",
- "dGljYXN0R3JvdXAiKQobRGVsZXRlTXVsdGljYXN0R3JvdXBSZXF1ZXN0EgoK",
- "AmlkGAEgASgJImMKGkxpc3RNdWx0aWNhc3RHcm91cHNSZXF1ZXN0Eg0KBWxp",
- "bWl0GAEgASgNEg4KBm9mZnNldBgCIAEoDRIOCgZzZWFyY2gYAyABKAkSFgoO",
- "YXBwbGljYXRpb25faWQYBCABKAkiXwobTGlzdE11bHRpY2FzdEdyb3Vwc1Jl",
- "c3BvbnNlEhMKC3RvdGFsX2NvdW50GAEgASgNEisKBnJlc3VsdBgCIAMoCzIb",
- "LmFwaS5NdWx0aWNhc3RHcm91cExpc3RJdGVtIk8KIEFkZERldmljZVRvTXVs",
- "dGljYXN0R3JvdXBSZXF1ZXN0EhoKEm11bHRpY2FzdF9ncm91cF9pZBgBIAEo",
- "CRIPCgdkZXZfZXVpGAIgASgJIlQKJVJlbW92ZURldmljZUZyb21NdWx0aWNh",
- "c3RHcm91cFJlcXVlc3QSGgoSbXVsdGljYXN0X2dyb3VwX2lkGAEgASgJEg8K",
- "B2Rldl9ldWkYAiABKAkiUwohQWRkR2F0ZXdheVRvTXVsdGljYXN0R3JvdXBS",
- "ZXF1ZXN0EhoKEm11bHRpY2FzdF9ncm91cF9pZBgBIAEoCRISCgpnYXRld2F5",
- "X2lkGAIgASgJIlgKJlJlbW92ZUdhdGV3YXlGcm9tTXVsdGljYXN0R3JvdXBS",
- "ZXF1ZXN0EhoKEm11bHRpY2FzdF9ncm91cF9pZBgBIAEoCRISCgpnYXRld2F5",
- "X2lkGAIgASgJImIKF011bHRpY2FzdEdyb3VwUXVldWVJdGVtEhoKEm11bHRp",
- "Y2FzdF9ncm91cF9pZBgBIAEoCRINCgVmX2NudBgCIAEoDRIOCgZmX3BvcnQY",
- "AyABKA0SDAoEZGF0YRgEIAEoDCJZCiVFbnF1ZXVlTXVsdGljYXN0R3JvdXBR",
- "dWV1ZUl0ZW1SZXF1ZXN0EjAKCnF1ZXVlX2l0ZW0YASABKAsyHC5hcGkuTXVs",
- "dGljYXN0R3JvdXBRdWV1ZUl0ZW0iNwomRW5xdWV1ZU11bHRpY2FzdEdyb3Vw",
- "UXVldWVJdGVtUmVzcG9uc2USDQoFZl9jbnQYASABKA0iPQofRmx1c2hNdWx0",
- "aWNhc3RHcm91cFF1ZXVlUmVxdWVzdBIaChJtdWx0aWNhc3RfZ3JvdXBfaWQY",
- "ASABKAkiPAoeTGlzdE11bHRpY2FzdEdyb3VwUXVldWVSZXF1ZXN0EhoKEm11",
- "bHRpY2FzdF9ncm91cF9pZBgBIAEoCSJOCh9MaXN0TXVsdGljYXN0R3JvdXBR",
- "dWV1ZVJlc3BvbnNlEisKBWl0ZW1zGAEgAygLMhwuYXBpLk11bHRpY2FzdEdy",
- "b3VwUXVldWVJdGVtKi4KEk11bHRpY2FzdEdyb3VwVHlwZRILCgdDTEFTU19D",
- "EAASCwoHQ0xBU1NfQhABKjcKHE11bHRpY2FzdEdyb3VwU2NoZWR1bGluZ1R5",
- "cGUSCQoFREVMQVkQABIMCghHUFNfVElNRRABMt0MChVNdWx0aWNhc3RHcm91",
- "cFNlcnZpY2USbwoGQ3JlYXRlEiAuYXBpLkNyZWF0ZU11bHRpY2FzdEdyb3Vw",
- "UmVxdWVzdBohLmFwaS5DcmVhdGVNdWx0aWNhc3RHcm91cFJlc3BvbnNlIiCC",
- "0+STAhoiFS9hcGkvbXVsdGljYXN0LWdyb3VwczoBKhJoCgNHZXQSHS5hcGku",
- "R2V0TXVsdGljYXN0R3JvdXBSZXF1ZXN0Gh4uYXBpLkdldE11bHRpY2FzdEdy",
- "b3VwUmVzcG9uc2UiIoLT5JMCHBIaL2FwaS9tdWx0aWNhc3QtZ3JvdXBzL3tp",
- "ZH0SeQoGVXBkYXRlEiAuYXBpLlVwZGF0ZU11bHRpY2FzdEdyb3VwUmVxdWVz",
- "dBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSI1gtPkkwIvGiovYXBpL211bHRp",
- "Y2FzdC1ncm91cHMve211bHRpY2FzdF9ncm91cC5pZH06ASoSZgoGRGVsZXRl",
- "EiAuYXBpLkRlbGV0ZU11bHRpY2FzdEdyb3VwUmVxdWVzdBoWLmdvb2dsZS5w",
- "cm90b2J1Zi5FbXB0eSIigtPkkwIcKhovYXBpL211bHRpY2FzdC1ncm91cHMv",
- "e2lkfRJoCgRMaXN0Eh8uYXBpLkxpc3RNdWx0aWNhc3RHcm91cHNSZXF1ZXN0",
- "GiAuYXBpLkxpc3RNdWx0aWNhc3RHcm91cHNSZXNwb25zZSIdgtPkkwIXEhUv",
- "YXBpL211bHRpY2FzdC1ncm91cHMSiQEKCUFkZERldmljZRIlLmFwaS5BZGRE",
- "ZXZpY2VUb011bHRpY2FzdEdyb3VwUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1",
- "Zi5FbXB0eSI9gtPkkwI3IjIvYXBpL211bHRpY2FzdC1ncm91cHMve211bHRp",
- "Y2FzdF9ncm91cF9pZH0vZGV2aWNlczoBKhKYAQoMUmVtb3ZlRGV2aWNlEiou",
- "YXBpLlJlbW92ZURldmljZUZyb21NdWx0aWNhc3RHcm91cFJlcXVlc3QaFi5n",
- "b29nbGUucHJvdG9idWYuRW1wdHkiRILT5JMCPio8L2FwaS9tdWx0aWNhc3Qt",
- "Z3JvdXBzL3ttdWx0aWNhc3RfZ3JvdXBfaWR9L2RldmljZXMve2Rldl9ldWl9",
- "EowBCgpBZGRHYXRld2F5EiYuYXBpLkFkZEdhdGV3YXlUb011bHRpY2FzdEdy",
- "b3VwUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSI+gtPkkwI4IjMv",
- "YXBpL211bHRpY2FzdC1ncm91cHMve211bHRpY2FzdF9ncm91cF9pZH0vZ2F0",
- "ZXdheXM6ASoSngEKDVJlbW92ZUdhdGV3YXkSKy5hcGkuUmVtb3ZlR2F0ZXdh",
- "eUZyb21NdWx0aWNhc3RHcm91cFJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYu",
- "RW1wdHkiSILT5JMCQipAL2FwaS9tdWx0aWNhc3QtZ3JvdXBzL3ttdWx0aWNh",
- "c3RfZ3JvdXBfaWR9L2dhdGV3YXlzL3tnYXRld2F5X2lkfRKqAQoHRW5xdWV1",
- "ZRIqLmFwaS5FbnF1ZXVlTXVsdGljYXN0R3JvdXBRdWV1ZUl0ZW1SZXF1ZXN0",
- "GisuYXBpLkVucXVldWVNdWx0aWNhc3RHcm91cFF1ZXVlSXRlbVJlc3BvbnNl",
- "IkaC0+STAkAiOy9hcGkvbXVsdGljYXN0LWdyb3Vwcy97cXVldWVfaXRlbS5t",
- "dWx0aWNhc3RfZ3JvdXBfaWR9L3F1ZXVlOgEqEoQBCgpGbHVzaFF1ZXVlEiQu",
- "YXBpLkZsdXNoTXVsdGljYXN0R3JvdXBRdWV1ZVJlcXVlc3QaFi5nb29nbGUu",
- "cHJvdG9idWYuRW1wdHkiOILT5JMCMiowL2FwaS9tdWx0aWNhc3QtZ3JvdXBz",
- "L3ttdWx0aWNhc3RfZ3JvdXBfaWR9L3F1ZXVlEpABCglMaXN0UXVldWUSIy5h",
- "cGkuTGlzdE11bHRpY2FzdEdyb3VwUXVldWVSZXF1ZXN0GiQuYXBpLkxpc3RN",
- "dWx0aWNhc3RHcm91cFF1ZXVlUmVzcG9uc2UiOILT5JMCMhIwL2FwaS9tdWx0",
- "aWNhc3QtZ3JvdXBzL3ttdWx0aWNhc3RfZ3JvdXBfaWR9L3F1ZXVlQmsKEWlv",
- "LmNoaXJwc3RhY2suYXBpQhNNdWx0aWNhc3RHcm91cFByb3RvUAFaLmdpdGh1",
- "Yi5jb20vY2hpcnBzdGFjay9jaGlycHN0YWNrL2FwaS9nby92NC9hcGmqAg5D",
- "aGlycHN0YWNrLkFwaWIGcHJvdG8z"));
+ "c3NfYl9waW5nX3Nsb3RfcGVyaW9kGAwgASgNEh4KFmNsYXNzX2JfcGluZ19z",
+ "bG90X25iX2sYDiABKA0SQgoXY2xhc3NfY19zY2hlZHVsaW5nX3R5cGUYDSAB",
+ "KA4yIS5hcGkuTXVsdGljYXN0R3JvdXBTY2hlZHVsaW5nVHlwZSLfAQoWTXVs",
+ "dGljYXN0R3JvdXBMaXN0SXRlbRIKCgJpZBgBIAEoCRIuCgpjcmVhdGVkX2F0",
+ "GAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIuCgp1cGRhdGVk",
+ "X2F0GAMgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIMCgRuYW1l",
+ "GAQgASgJEh4KBnJlZ2lvbhgFIAEoDjIOLmNvbW1vbi5SZWdpb24SKwoKZ3Jv",
+ "dXBfdHlwZRgGIAEoDjIXLmFwaS5NdWx0aWNhc3RHcm91cFR5cGUiSwobQ3Jl",
+ "YXRlTXVsdGljYXN0R3JvdXBSZXF1ZXN0EiwKD211bHRpY2FzdF9ncm91cBgB",
+ "IAEoCzITLmFwaS5NdWx0aWNhc3RHcm91cCIqChxDcmVhdGVNdWx0aWNhc3RH",
+ "cm91cFJlc3BvbnNlEgoKAmlkGAEgASgJIiYKGEdldE11bHRpY2FzdEdyb3Vw",
+ "UmVxdWVzdBIKCgJpZBgBIAEoCSKpAQoZR2V0TXVsdGljYXN0R3JvdXBSZXNw",
+ "b25zZRIsCg9tdWx0aWNhc3RfZ3JvdXAYASABKAsyEy5hcGkuTXVsdGljYXN0",
+ "R3JvdXASLgoKY3JlYXRlZF9hdBgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5U",
+ "aW1lc3RhbXASLgoKdXBkYXRlZF9hdBgDIAEoCzIaLmdvb2dsZS5wcm90b2J1",
+ "Zi5UaW1lc3RhbXAiSwobVXBkYXRlTXVsdGljYXN0R3JvdXBSZXF1ZXN0EiwK",
+ "D211bHRpY2FzdF9ncm91cBgBIAEoCzITLmFwaS5NdWx0aWNhc3RHcm91cCIp",
+ "ChtEZWxldGVNdWx0aWNhc3RHcm91cFJlcXVlc3QSCgoCaWQYASABKAkiYwoa",
+ "TGlzdE11bHRpY2FzdEdyb3Vwc1JlcXVlc3QSDQoFbGltaXQYASABKA0SDgoG",
+ "b2Zmc2V0GAIgASgNEg4KBnNlYXJjaBgDIAEoCRIWCg5hcHBsaWNhdGlvbl9p",
+ "ZBgEIAEoCSJfChtMaXN0TXVsdGljYXN0R3JvdXBzUmVzcG9uc2USEwoLdG90",
+ "YWxfY291bnQYASABKA0SKwoGcmVzdWx0GAIgAygLMhsuYXBpLk11bHRpY2Fz",
+ "dEdyb3VwTGlzdEl0ZW0iTwogQWRkRGV2aWNlVG9NdWx0aWNhc3RHcm91cFJl",
+ "cXVlc3QSGgoSbXVsdGljYXN0X2dyb3VwX2lkGAEgASgJEg8KB2Rldl9ldWkY",
+ "AiABKAkiVAolUmVtb3ZlRGV2aWNlRnJvbU11bHRpY2FzdEdyb3VwUmVxdWVz",
+ "dBIaChJtdWx0aWNhc3RfZ3JvdXBfaWQYASABKAkSDwoHZGV2X2V1aRgCIAEo",
+ "CSJTCiFBZGRHYXRld2F5VG9NdWx0aWNhc3RHcm91cFJlcXVlc3QSGgoSbXVs",
+ "dGljYXN0X2dyb3VwX2lkGAEgASgJEhIKCmdhdGV3YXlfaWQYAiABKAkiWAom",
+ "UmVtb3ZlR2F0ZXdheUZyb21NdWx0aWNhc3RHcm91cFJlcXVlc3QSGgoSbXVs",
+ "dGljYXN0X2dyb3VwX2lkGAEgASgJEhIKCmdhdGV3YXlfaWQYAiABKAkiYgoX",
+ "TXVsdGljYXN0R3JvdXBRdWV1ZUl0ZW0SGgoSbXVsdGljYXN0X2dyb3VwX2lk",
+ "GAEgASgJEg0KBWZfY250GAIgASgNEg4KBmZfcG9ydBgDIAEoDRIMCgRkYXRh",
+ "GAQgASgMIlkKJUVucXVldWVNdWx0aWNhc3RHcm91cFF1ZXVlSXRlbVJlcXVl",
+ "c3QSMAoKcXVldWVfaXRlbRgBIAEoCzIcLmFwaS5NdWx0aWNhc3RHcm91cFF1",
+ "ZXVlSXRlbSI3CiZFbnF1ZXVlTXVsdGljYXN0R3JvdXBRdWV1ZUl0ZW1SZXNw",
+ "b25zZRINCgVmX2NudBgBIAEoDSI9Ch9GbHVzaE11bHRpY2FzdEdyb3VwUXVl",
+ "dWVSZXF1ZXN0EhoKEm11bHRpY2FzdF9ncm91cF9pZBgBIAEoCSI8Ch5MaXN0",
+ "TXVsdGljYXN0R3JvdXBRdWV1ZVJlcXVlc3QSGgoSbXVsdGljYXN0X2dyb3Vw",
+ "X2lkGAEgASgJIk4KH0xpc3RNdWx0aWNhc3RHcm91cFF1ZXVlUmVzcG9uc2US",
+ "KwoFaXRlbXMYASADKAsyHC5hcGkuTXVsdGljYXN0R3JvdXBRdWV1ZUl0ZW0q",
+ "LgoSTXVsdGljYXN0R3JvdXBUeXBlEgsKB0NMQVNTX0MQABILCgdDTEFTU19C",
+ "EAEqNwocTXVsdGljYXN0R3JvdXBTY2hlZHVsaW5nVHlwZRIJCgVERUxBWRAA",
+ "EgwKCEdQU19USU1FEAEy3QwKFU11bHRpY2FzdEdyb3VwU2VydmljZRJvCgZD",
+ "cmVhdGUSIC5hcGkuQ3JlYXRlTXVsdGljYXN0R3JvdXBSZXF1ZXN0GiEuYXBp",
+ "LkNyZWF0ZU11bHRpY2FzdEdyb3VwUmVzcG9uc2UiIILT5JMCGiIVL2FwaS9t",
+ "dWx0aWNhc3QtZ3JvdXBzOgEqEmgKA0dldBIdLmFwaS5HZXRNdWx0aWNhc3RH",
+ "cm91cFJlcXVlc3QaHi5hcGkuR2V0TXVsdGljYXN0R3JvdXBSZXNwb25zZSIi",
+ "gtPkkwIcEhovYXBpL211bHRpY2FzdC1ncm91cHMve2lkfRJ5CgZVcGRhdGUS",
+ "IC5hcGkuVXBkYXRlTXVsdGljYXN0R3JvdXBSZXF1ZXN0GhYuZ29vZ2xlLnBy",
+ "b3RvYnVmLkVtcHR5IjWC0+STAi8aKi9hcGkvbXVsdGljYXN0LWdyb3Vwcy97",
+ "bXVsdGljYXN0X2dyb3VwLmlkfToBKhJmCgZEZWxldGUSIC5hcGkuRGVsZXRl",
+ "TXVsdGljYXN0R3JvdXBSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5",
+ "IiKC0+STAhwqGi9hcGkvbXVsdGljYXN0LWdyb3Vwcy97aWR9EmgKBExpc3QS",
+ "Hy5hcGkuTGlzdE11bHRpY2FzdEdyb3Vwc1JlcXVlc3QaIC5hcGkuTGlzdE11",
+ "bHRpY2FzdEdyb3Vwc1Jlc3BvbnNlIh2C0+STAhcSFS9hcGkvbXVsdGljYXN0",
+ "LWdyb3VwcxKJAQoJQWRkRGV2aWNlEiUuYXBpLkFkZERldmljZVRvTXVsdGlj",
+ "YXN0R3JvdXBSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5Ij2C0+ST",
+ "AjciMi9hcGkvbXVsdGljYXN0LWdyb3Vwcy97bXVsdGljYXN0X2dyb3VwX2lk",
+ "fS9kZXZpY2VzOgEqEpgBCgxSZW1vdmVEZXZpY2USKi5hcGkuUmVtb3ZlRGV2",
+ "aWNlRnJvbU11bHRpY2FzdEdyb3VwUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1",
+ "Zi5FbXB0eSJEgtPkkwI+KjwvYXBpL211bHRpY2FzdC1ncm91cHMve211bHRp",
+ "Y2FzdF9ncm91cF9pZH0vZGV2aWNlcy97ZGV2X2V1aX0SjAEKCkFkZEdhdGV3",
+ "YXkSJi5hcGkuQWRkR2F0ZXdheVRvTXVsdGljYXN0R3JvdXBSZXF1ZXN0GhYu",
+ "Z29vZ2xlLnByb3RvYnVmLkVtcHR5Ij6C0+STAjgiMy9hcGkvbXVsdGljYXN0",
+ "LWdyb3Vwcy97bXVsdGljYXN0X2dyb3VwX2lkfS9nYXRld2F5czoBKhKeAQoN",
+ "UmVtb3ZlR2F0ZXdheRIrLmFwaS5SZW1vdmVHYXRld2F5RnJvbU11bHRpY2Fz",
+ "dEdyb3VwUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSJIgtPkkwJC",
+ "KkAvYXBpL211bHRpY2FzdC1ncm91cHMve211bHRpY2FzdF9ncm91cF9pZH0v",
+ "Z2F0ZXdheXMve2dhdGV3YXlfaWR9EqoBCgdFbnF1ZXVlEiouYXBpLkVucXVl",
+ "dWVNdWx0aWNhc3RHcm91cFF1ZXVlSXRlbVJlcXVlc3QaKy5hcGkuRW5xdWV1",
+ "ZU11bHRpY2FzdEdyb3VwUXVldWVJdGVtUmVzcG9uc2UiRoLT5JMCQCI7L2Fw",
+ "aS9tdWx0aWNhc3QtZ3JvdXBzL3txdWV1ZV9pdGVtLm11bHRpY2FzdF9ncm91",
+ "cF9pZH0vcXVldWU6ASoShAEKCkZsdXNoUXVldWUSJC5hcGkuRmx1c2hNdWx0",
+ "aWNhc3RHcm91cFF1ZXVlUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0",
+ "eSI4gtPkkwIyKjAvYXBpL211bHRpY2FzdC1ncm91cHMve211bHRpY2FzdF9n",
+ "cm91cF9pZH0vcXVldWUSkAEKCUxpc3RRdWV1ZRIjLmFwaS5MaXN0TXVsdGlj",
+ "YXN0R3JvdXBRdWV1ZVJlcXVlc3QaJC5hcGkuTGlzdE11bHRpY2FzdEdyb3Vw",
+ "UXVldWVSZXNwb25zZSI4gtPkkwIyEjAvYXBpL211bHRpY2FzdC1ncm91cHMv",
+ "e211bHRpY2FzdF9ncm91cF9pZH0vcXVldWVCawoRaW8uY2hpcnBzdGFjay5h",
+ "cGlCE011bHRpY2FzdEdyb3VwUHJvdG9QAVouZ2l0aHViLmNvbS9jaGlycHN0",
+ "YWNrL2NoaXJwc3RhY2svYXBpL2dvL3Y0L2FwaaoCDkNoaXJwc3RhY2suQXBp",
+ "YgZwcm90bzM="));
descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
new pbr::FileDescriptor[] { global::Google.Api.AnnotationsReflection.Descriptor, global::Google.Protobuf.WellKnownTypes.TimestampReflection.Descriptor, global::Google.Protobuf.WellKnownTypes.EmptyReflection.Descriptor, global::Chirpstack.Common.CommonReflection.Descriptor, },
new pbr::GeneratedClrTypeInfo(new[] {typeof(global::Chirpstack.Api.MulticastGroupType), typeof(global::Chirpstack.Api.MulticastGroupSchedulingType), }, null, new pbr::GeneratedClrTypeInfo[] {
- new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.MulticastGroup), global::Chirpstack.Api.MulticastGroup.Parser, new[]{ "Id", "Name", "ApplicationId", "Region", "McAddr", "McNwkSKey", "McAppSKey", "FCnt", "GroupType", "Dr", "Frequency", "ClassBPingSlotPeriod", "ClassCSchedulingType" }, null, null, null, null),
+ new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.MulticastGroup), global::Chirpstack.Api.MulticastGroup.Parser, new[]{ "Id", "Name", "ApplicationId", "Region", "McAddr", "McNwkSKey", "McAppSKey", "FCnt", "GroupType", "Dr", "Frequency", "ClassBPingSlotPeriod", "ClassBPingSlotNbK", "ClassCSchedulingType" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.MulticastGroupListItem), global::Chirpstack.Api.MulticastGroupListItem.Parser, new[]{ "Id", "CreatedAt", "UpdatedAt", "Name", "Region", "GroupType" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.CreateMulticastGroupRequest), global::Chirpstack.Api.CreateMulticastGroupRequest.Parser, new[]{ "MulticastGroup" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.CreateMulticastGroupResponse), global::Chirpstack.Api.CreateMulticastGroupResponse.Parser, new[]{ "Id" }, null, null, null, null),
@@ -219,6 +220,7 @@ namespace Chirpstack.Api {
dr_ = other.dr_;
frequency_ = other.frequency_;
classBPingSlotPeriod_ = other.classBPingSlotPeriod_;
+ classBPingSlotNbK_ = other.classBPingSlotNbK_;
classCSchedulingType_ = other.classCSchedulingType_;
_unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
}
@@ -401,6 +403,7 @@ namespace Chirpstack.Api {
private uint classBPingSlotPeriod_;
///
/// Ping-slot period (only for Class-B).
+ /// Deprecated: use class_b_ping_slot_nb_k.
///
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
@@ -411,6 +414,24 @@ namespace Chirpstack.Api {
}
}
+ /// Field number for the "class_b_ping_slot_nb_k" field.
+ public const int ClassBPingSlotNbKFieldNumber = 14;
+ private uint classBPingSlotNbK_;
+ ///
+ /// Class-B ping-slots per beacon period (only for Class-B).
+ /// Valid options are: 0 - 7;
+ ///
+ /// The actual number of ping-slots per beacon period equals to 2^k.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
+ public uint ClassBPingSlotNbK {
+ get { return classBPingSlotNbK_; }
+ set {
+ classBPingSlotNbK_ = value;
+ }
+ }
+
/// Field number for the "class_c_scheduling_type" field.
public const int ClassCSchedulingTypeFieldNumber = 13;
private global::Chirpstack.Api.MulticastGroupSchedulingType classCSchedulingType_ = global::Chirpstack.Api.MulticastGroupSchedulingType.Delay;
@@ -453,6 +474,7 @@ namespace Chirpstack.Api {
if (Dr != other.Dr) return false;
if (Frequency != other.Frequency) return false;
if (ClassBPingSlotPeriod != other.ClassBPingSlotPeriod) return false;
+ if (ClassBPingSlotNbK != other.ClassBPingSlotNbK) return false;
if (ClassCSchedulingType != other.ClassCSchedulingType) return false;
return Equals(_unknownFields, other._unknownFields);
}
@@ -473,6 +495,7 @@ namespace Chirpstack.Api {
if (Dr != 0) hash ^= Dr.GetHashCode();
if (Frequency != 0) hash ^= Frequency.GetHashCode();
if (ClassBPingSlotPeriod != 0) hash ^= ClassBPingSlotPeriod.GetHashCode();
+ if (ClassBPingSlotNbK != 0) hash ^= ClassBPingSlotNbK.GetHashCode();
if (ClassCSchedulingType != global::Chirpstack.Api.MulticastGroupSchedulingType.Delay) hash ^= ClassCSchedulingType.GetHashCode();
if (_unknownFields != null) {
hash ^= _unknownFields.GetHashCode();
@@ -544,6 +567,10 @@ namespace Chirpstack.Api {
output.WriteRawTag(104);
output.WriteEnum((int) ClassCSchedulingType);
}
+ if (ClassBPingSlotNbK != 0) {
+ output.WriteRawTag(112);
+ output.WriteUInt32(ClassBPingSlotNbK);
+ }
if (_unknownFields != null) {
_unknownFields.WriteTo(output);
}
@@ -606,6 +633,10 @@ namespace Chirpstack.Api {
output.WriteRawTag(104);
output.WriteEnum((int) ClassCSchedulingType);
}
+ if (ClassBPingSlotNbK != 0) {
+ output.WriteRawTag(112);
+ output.WriteUInt32(ClassBPingSlotNbK);
+ }
if (_unknownFields != null) {
_unknownFields.WriteTo(ref output);
}
@@ -652,6 +683,9 @@ namespace Chirpstack.Api {
if (ClassBPingSlotPeriod != 0) {
size += 1 + pb::CodedOutputStream.ComputeUInt32Size(ClassBPingSlotPeriod);
}
+ if (ClassBPingSlotNbK != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeUInt32Size(ClassBPingSlotNbK);
+ }
if (ClassCSchedulingType != global::Chirpstack.Api.MulticastGroupSchedulingType.Delay) {
size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) ClassCSchedulingType);
}
@@ -703,6 +737,9 @@ namespace Chirpstack.Api {
if (other.ClassBPingSlotPeriod != 0) {
ClassBPingSlotPeriod = other.ClassBPingSlotPeriod;
}
+ if (other.ClassBPingSlotNbK != 0) {
+ ClassBPingSlotNbK = other.ClassBPingSlotNbK;
+ }
if (other.ClassCSchedulingType != global::Chirpstack.Api.MulticastGroupSchedulingType.Delay) {
ClassCSchedulingType = other.ClassCSchedulingType;
}
@@ -773,6 +810,10 @@ namespace Chirpstack.Api {
ClassCSchedulingType = (global::Chirpstack.Api.MulticastGroupSchedulingType) input.ReadEnum();
break;
}
+ case 112: {
+ ClassBPingSlotNbK = input.ReadUInt32();
+ break;
+ }
}
}
#endif
@@ -840,6 +881,10 @@ namespace Chirpstack.Api {
ClassCSchedulingType = (global::Chirpstack.Api.MulticastGroupSchedulingType) input.ReadEnum();
break;
}
+ case 112: {
+ ClassBPingSlotNbK = input.ReadUInt32();
+ break;
+ }
}
}
}
diff --git a/api/grpc-web/api/multicast_group_pb.d.ts b/api/grpc-web/api/multicast_group_pb.d.ts
index 6046c207..f8415298 100644
--- a/api/grpc-web/api/multicast_group_pb.d.ts
+++ b/api/grpc-web/api/multicast_group_pb.d.ts
@@ -43,6 +43,9 @@ export class MulticastGroup extends jspb.Message {
getClassBPingSlotPeriod(): number;
setClassBPingSlotPeriod(value: number): MulticastGroup;
+ getClassBPingSlotNbK(): number;
+ setClassBPingSlotNbK(value: number): MulticastGroup;
+
getClassCSchedulingType(): MulticastGroupSchedulingType;
setClassCSchedulingType(value: MulticastGroupSchedulingType): MulticastGroup;
@@ -68,6 +71,7 @@ export namespace MulticastGroup {
dr: number,
frequency: number,
classBPingSlotPeriod: number,
+ classBPingSlotNbK: number,
classCSchedulingType: MulticastGroupSchedulingType,
}
}
diff --git a/api/grpc-web/api/multicast_group_pb.js b/api/grpc-web/api/multicast_group_pb.js
index c3375cde..8a34b300 100644
--- a/api/grpc-web/api/multicast_group_pb.js
+++ b/api/grpc-web/api/multicast_group_pb.js
@@ -506,6 +506,7 @@ proto.api.MulticastGroup.toObject = function(includeInstance, msg) {
dr: jspb.Message.getFieldWithDefault(msg, 10, 0),
frequency: jspb.Message.getFieldWithDefault(msg, 11, 0),
classBPingSlotPeriod: jspb.Message.getFieldWithDefault(msg, 12, 0),
+ classBPingSlotNbK: jspb.Message.getFieldWithDefault(msg, 14, 0),
classCSchedulingType: jspb.Message.getFieldWithDefault(msg, 13, 0)
};
@@ -591,6 +592,10 @@ proto.api.MulticastGroup.deserializeBinaryFromReader = function(msg, reader) {
var value = /** @type {number} */ (reader.readUint32());
msg.setClassBPingSlotPeriod(value);
break;
+ case 14:
+ var value = /** @type {number} */ (reader.readUint32());
+ msg.setClassBPingSlotNbK(value);
+ break;
case 13:
var value = /** @type {!proto.api.MulticastGroupSchedulingType} */ (reader.readEnum());
msg.setClassCSchedulingType(value);
@@ -708,6 +713,13 @@ proto.api.MulticastGroup.serializeBinaryToWriter = function(message, writer) {
f
);
}
+ f = message.getClassBPingSlotNbK();
+ if (f !== 0) {
+ writer.writeUint32(
+ 14,
+ f
+ );
+ }
f = message.getClassCSchedulingType();
if (f !== 0.0) {
writer.writeEnum(
@@ -934,6 +946,24 @@ proto.api.MulticastGroup.prototype.setClassBPingSlotPeriod = function(value) {
};
+/**
+ * optional uint32 class_b_ping_slot_nb_k = 14;
+ * @return {number}
+ */
+proto.api.MulticastGroup.prototype.getClassBPingSlotNbK = function() {
+ return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 14, 0));
+};
+
+
+/**
+ * @param {number} value
+ * @return {!proto.api.MulticastGroup} returns this
+ */
+proto.api.MulticastGroup.prototype.setClassBPingSlotNbK = function(value) {
+ return jspb.Message.setProto3IntField(this, 14, value);
+};
+
+
/**
* optional MulticastGroupSchedulingType class_c_scheduling_type = 13;
* @return {!proto.api.MulticastGroupSchedulingType}
diff --git a/api/js/api/multicast_group_pb.d.ts b/api/js/api/multicast_group_pb.d.ts
index 102263b7..f63a2d55 100644
--- a/api/js/api/multicast_group_pb.d.ts
+++ b/api/js/api/multicast_group_pb.d.ts
@@ -44,6 +44,9 @@ export class MulticastGroup extends jspb.Message {
getClassBPingSlotPeriod(): number;
setClassBPingSlotPeriod(value: number): void;
+ getClassBPingSlotNbK(): number;
+ setClassBPingSlotNbK(value: number): void;
+
getClassCSchedulingType(): MulticastGroupSchedulingTypeMap[keyof MulticastGroupSchedulingTypeMap];
setClassCSchedulingType(value: MulticastGroupSchedulingTypeMap[keyof MulticastGroupSchedulingTypeMap]): void;
@@ -71,6 +74,7 @@ export namespace MulticastGroup {
dr: number,
frequency: number,
classBPingSlotPeriod: number,
+ classBPingSlotNbK: number,
classCSchedulingType: MulticastGroupSchedulingTypeMap[keyof MulticastGroupSchedulingTypeMap],
}
}
diff --git a/api/js/api/multicast_group_pb.js b/api/js/api/multicast_group_pb.js
index d87ccbae..aa67af28 100644
--- a/api/js/api/multicast_group_pb.js
+++ b/api/js/api/multicast_group_pb.js
@@ -506,6 +506,7 @@ proto.api.MulticastGroup.toObject = function(includeInstance, msg) {
dr: jspb.Message.getFieldWithDefault(msg, 10, 0),
frequency: jspb.Message.getFieldWithDefault(msg, 11, 0),
classBPingSlotPeriod: jspb.Message.getFieldWithDefault(msg, 12, 0),
+ classBPingSlotNbK: jspb.Message.getFieldWithDefault(msg, 14, 0),
classCSchedulingType: jspb.Message.getFieldWithDefault(msg, 13, 0)
};
@@ -591,6 +592,10 @@ proto.api.MulticastGroup.deserializeBinaryFromReader = function(msg, reader) {
var value = /** @type {number} */ (reader.readUint32());
msg.setClassBPingSlotPeriod(value);
break;
+ case 14:
+ var value = /** @type {number} */ (reader.readUint32());
+ msg.setClassBPingSlotNbK(value);
+ break;
case 13:
var value = /** @type {!proto.api.MulticastGroupSchedulingType} */ (reader.readEnum());
msg.setClassCSchedulingType(value);
@@ -708,6 +713,13 @@ proto.api.MulticastGroup.serializeBinaryToWriter = function(message, writer) {
f
);
}
+ f = message.getClassBPingSlotNbK();
+ if (f !== 0) {
+ writer.writeUint32(
+ 14,
+ f
+ );
+ }
f = message.getClassCSchedulingType();
if (f !== 0.0) {
writer.writeEnum(
@@ -934,6 +946,24 @@ proto.api.MulticastGroup.prototype.setClassBPingSlotPeriod = function(value) {
};
+/**
+ * optional uint32 class_b_ping_slot_nb_k = 14;
+ * @return {number}
+ */
+proto.api.MulticastGroup.prototype.getClassBPingSlotNbK = function() {
+ return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 14, 0));
+};
+
+
+/**
+ * @param {number} value
+ * @return {!proto.api.MulticastGroup} returns this
+ */
+proto.api.MulticastGroup.prototype.setClassBPingSlotNbK = function(value) {
+ return jspb.Message.setProto3IntField(this, 14, value);
+};
+
+
/**
* optional MulticastGroupSchedulingType class_c_scheduling_type = 13;
* @return {!proto.api.MulticastGroupSchedulingType}
diff --git a/api/md/api/api.md b/api/md/api/api.md
index 205d6374..045fffe8 100644
--- a/api/md/api/api.md
+++ b/api/md/api/api.md
@@ -3630,7 +3630,10 @@ GatewayService is the service providing API methods for managing gateways.
| group_type | [MulticastGroupType](#api-MulticastGroupType) | | Multicast group type. |
| dr | [uint32](#uint32) | | Data-rate. |
| frequency | [uint32](#uint32) | | Frequency (Hz). |
-| class_b_ping_slot_period | [uint32](#uint32) | | Ping-slot period (only for Class-B). |
+| class_b_ping_slot_period | [uint32](#uint32) | | Ping-slot period (only for Class-B). Deprecated: use class_b_ping_slot_nb_k. |
+| class_b_ping_slot_nb_k | [uint32](#uint32) | | Class-B ping-slots per beacon period (only for Class-B). Valid options are: 0 - 7;
+
+The actual number of ping-slots per beacon period equals to 2^k. |
| class_c_scheduling_type | [MulticastGroupSchedulingType](#api-MulticastGroupSchedulingType) | | Scheduling type (only for Class-C). |
diff --git a/api/python/proto/chirpstack-api/api/multicast_group.proto b/api/python/proto/chirpstack-api/api/multicast_group.proto
index 7784e79e..ef4f4a2b 100644
--- a/api/python/proto/chirpstack-api/api/multicast_group.proto
+++ b/api/python/proto/chirpstack-api/api/multicast_group.proto
@@ -164,8 +164,15 @@ message MulticastGroup {
uint32 frequency = 11;
// Ping-slot period (only for Class-B).
+ // Deprecated: use class_b_ping_slot_nb_k.
uint32 class_b_ping_slot_period = 12;
+ // Class-B ping-slots per beacon period (only for Class-B).
+ // Valid options are: 0 - 7;
+ //
+ // The actual number of ping-slots per beacon period equals to 2^k.
+ uint32 class_b_ping_slot_nb_k = 14;
+
// Scheduling type (only for Class-C).
MulticastGroupSchedulingType class_c_scheduling_type = 13;
}
diff --git a/api/python/src/chirpstack_api/api/multicast_group_pb2.py b/api/python/src/chirpstack_api/api/multicast_group_pb2.py
index 57658b33..c2a16629 100644
--- a/api/python/src/chirpstack_api/api/multicast_group_pb2.py
+++ b/api/python/src/chirpstack_api/api/multicast_group_pb2.py
@@ -18,7 +18,7 @@ from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2
from chirpstack_api.common import common_pb2 as chirpstack__api_dot_common_dot_common__pb2
-DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n(chirpstack-api/api/multicast_group.proto\x12\x03\x61pi\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\"chirpstack-api/common/common.proto\"\xe0\x02\n\x0eMulticastGroup\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x16\n\x0e\x61pplication_id\x18\x03 \x01(\t\x12\x1e\n\x06region\x18\x04 \x01(\x0e\x32\x0e.common.Region\x12\x0f\n\x07mc_addr\x18\x05 \x01(\t\x12\x14\n\x0cmc_nwk_s_key\x18\x06 \x01(\t\x12\x14\n\x0cmc_app_s_key\x18\x07 \x01(\t\x12\r\n\x05\x66_cnt\x18\x08 \x01(\r\x12+\n\ngroup_type\x18\t \x01(\x0e\x32\x17.api.MulticastGroupType\x12\n\n\x02\x64r\x18\n \x01(\r\x12\x11\n\tfrequency\x18\x0b \x01(\r\x12 \n\x18\x63lass_b_ping_slot_period\x18\x0c \x01(\r\x12\x42\n\x17\x63lass_c_scheduling_type\x18\r \x01(\x0e\x32!.api.MulticastGroupSchedulingType\"\xdf\x01\n\x16MulticastGroupListItem\x12\n\n\x02id\x18\x01 \x01(\t\x12.\n\ncreated_at\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12.\n\nupdated_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x0c\n\x04name\x18\x04 \x01(\t\x12\x1e\n\x06region\x18\x05 \x01(\x0e\x32\x0e.common.Region\x12+\n\ngroup_type\x18\x06 \x01(\x0e\x32\x17.api.MulticastGroupType\"K\n\x1b\x43reateMulticastGroupRequest\x12,\n\x0fmulticast_group\x18\x01 \x01(\x0b\x32\x13.api.MulticastGroup\"*\n\x1c\x43reateMulticastGroupResponse\x12\n\n\x02id\x18\x01 \x01(\t\"&\n\x18GetMulticastGroupRequest\x12\n\n\x02id\x18\x01 \x01(\t\"\xa9\x01\n\x19GetMulticastGroupResponse\x12,\n\x0fmulticast_group\x18\x01 \x01(\x0b\x32\x13.api.MulticastGroup\x12.\n\ncreated_at\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12.\n\nupdated_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"K\n\x1bUpdateMulticastGroupRequest\x12,\n\x0fmulticast_group\x18\x01 \x01(\x0b\x32\x13.api.MulticastGroup\")\n\x1b\x44\x65leteMulticastGroupRequest\x12\n\n\x02id\x18\x01 \x01(\t\"c\n\x1aListMulticastGroupsRequest\x12\r\n\x05limit\x18\x01 \x01(\r\x12\x0e\n\x06offset\x18\x02 \x01(\r\x12\x0e\n\x06search\x18\x03 \x01(\t\x12\x16\n\x0e\x61pplication_id\x18\x04 \x01(\t\"_\n\x1bListMulticastGroupsResponse\x12\x13\n\x0btotal_count\x18\x01 \x01(\r\x12+\n\x06result\x18\x02 \x03(\x0b\x32\x1b.api.MulticastGroupListItem\"O\n AddDeviceToMulticastGroupRequest\x12\x1a\n\x12multicast_group_id\x18\x01 \x01(\t\x12\x0f\n\x07\x64\x65v_eui\x18\x02 \x01(\t\"T\n%RemoveDeviceFromMulticastGroupRequest\x12\x1a\n\x12multicast_group_id\x18\x01 \x01(\t\x12\x0f\n\x07\x64\x65v_eui\x18\x02 \x01(\t\"S\n!AddGatewayToMulticastGroupRequest\x12\x1a\n\x12multicast_group_id\x18\x01 \x01(\t\x12\x12\n\ngateway_id\x18\x02 \x01(\t\"X\n&RemoveGatewayFromMulticastGroupRequest\x12\x1a\n\x12multicast_group_id\x18\x01 \x01(\t\x12\x12\n\ngateway_id\x18\x02 \x01(\t\"b\n\x17MulticastGroupQueueItem\x12\x1a\n\x12multicast_group_id\x18\x01 \x01(\t\x12\r\n\x05\x66_cnt\x18\x02 \x01(\r\x12\x0e\n\x06\x66_port\x18\x03 \x01(\r\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\x0c\"Y\n%EnqueueMulticastGroupQueueItemRequest\x12\x30\n\nqueue_item\x18\x01 \x01(\x0b\x32\x1c.api.MulticastGroupQueueItem\"7\n&EnqueueMulticastGroupQueueItemResponse\x12\r\n\x05\x66_cnt\x18\x01 \x01(\r\"=\n\x1f\x46lushMulticastGroupQueueRequest\x12\x1a\n\x12multicast_group_id\x18\x01 \x01(\t\"<\n\x1eListMulticastGroupQueueRequest\x12\x1a\n\x12multicast_group_id\x18\x01 \x01(\t\"N\n\x1fListMulticastGroupQueueResponse\x12+\n\x05items\x18\x01 \x03(\x0b\x32\x1c.api.MulticastGroupQueueItem*.\n\x12MulticastGroupType\x12\x0b\n\x07\x43LASS_C\x10\x00\x12\x0b\n\x07\x43LASS_B\x10\x01*7\n\x1cMulticastGroupSchedulingType\x12\t\n\x05\x44\x45LAY\x10\x00\x12\x0c\n\x08GPS_TIME\x10\x01\x32\xdd\x0c\n\x15MulticastGroupService\x12o\n\x06\x43reate\x12 .api.CreateMulticastGroupRequest\x1a!.api.CreateMulticastGroupResponse\" \x82\xd3\xe4\x93\x02\x1a\"\x15/api/multicast-groups:\x01*\x12h\n\x03Get\x12\x1d.api.GetMulticastGroupRequest\x1a\x1e.api.GetMulticastGroupResponse\"\"\x82\xd3\xe4\x93\x02\x1c\x12\x1a/api/multicast-groups/{id}\x12y\n\x06Update\x12 .api.UpdateMulticastGroupRequest\x1a\x16.google.protobuf.Empty\"5\x82\xd3\xe4\x93\x02/\x1a*/api/multicast-groups/{multicast_group.id}:\x01*\x12\x66\n\x06\x44\x65lete\x12 .api.DeleteMulticastGroupRequest\x1a\x16.google.protobuf.Empty\"\"\x82\xd3\xe4\x93\x02\x1c*\x1a/api/multicast-groups/{id}\x12h\n\x04List\x12\x1f.api.ListMulticastGroupsRequest\x1a .api.ListMulticastGroupsResponse\"\x1d\x82\xd3\xe4\x93\x02\x17\x12\x15/api/multicast-groups\x12\x89\x01\n\tAddDevice\x12%.api.AddDeviceToMulticastGroupRequest\x1a\x16.google.protobuf.Empty\"=\x82\xd3\xe4\x93\x02\x37\"2/api/multicast-groups/{multicast_group_id}/devices:\x01*\x12\x98\x01\n\x0cRemoveDevice\x12*.api.RemoveDeviceFromMulticastGroupRequest\x1a\x16.google.protobuf.Empty\"D\x82\xd3\xe4\x93\x02>*\x82\xd3\xe4\x93\x02\x38\"3/api/multicast-groups/{multicast_group_id}/gateways:\x01*\x12\x9e\x01\n\rRemoveGateway\x12+.api.RemoveGatewayFromMulticastGroupRequest\x1a\x16.google.protobuf.Empty\"H\x82\xd3\xe4\x93\x02\x42*@/api/multicast-groups/{multicast_group_id}/gateways/{gateway_id}\x12\xaa\x01\n\x07\x45nqueue\x12*.api.EnqueueMulticastGroupQueueItemRequest\x1a+.api.EnqueueMulticastGroupQueueItemResponse\"F\x82\xd3\xe4\x93\x02@\";/api/multicast-groups/{queue_item.multicast_group_id}/queue:\x01*\x12\x84\x01\n\nFlushQueue\x12$.api.FlushMulticastGroupQueueRequest\x1a\x16.google.protobuf.Empty\"8\x82\xd3\xe4\x93\x02\x32*0/api/multicast-groups/{multicast_group_id}/queue\x12\x90\x01\n\tListQueue\x12#.api.ListMulticastGroupQueueRequest\x1a$.api.ListMulticastGroupQueueResponse\"8\x82\xd3\xe4\x93\x02\x32\x12\x30/api/multicast-groups/{multicast_group_id}/queueBk\n\x11io.chirpstack.apiB\x13MulticastGroupProtoP\x01Z.github.com/chirpstack/chirpstack/api/go/v4/api\xaa\x02\x0e\x43hirpstack.Apib\x06proto3')
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n(chirpstack-api/api/multicast_group.proto\x12\x03\x61pi\x1a\x1cgoogle/api/annotations.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\"chirpstack-api/common/common.proto\"\x80\x03\n\x0eMulticastGroup\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x16\n\x0e\x61pplication_id\x18\x03 \x01(\t\x12\x1e\n\x06region\x18\x04 \x01(\x0e\x32\x0e.common.Region\x12\x0f\n\x07mc_addr\x18\x05 \x01(\t\x12\x14\n\x0cmc_nwk_s_key\x18\x06 \x01(\t\x12\x14\n\x0cmc_app_s_key\x18\x07 \x01(\t\x12\r\n\x05\x66_cnt\x18\x08 \x01(\r\x12+\n\ngroup_type\x18\t \x01(\x0e\x32\x17.api.MulticastGroupType\x12\n\n\x02\x64r\x18\n \x01(\r\x12\x11\n\tfrequency\x18\x0b \x01(\r\x12 \n\x18\x63lass_b_ping_slot_period\x18\x0c \x01(\r\x12\x1e\n\x16\x63lass_b_ping_slot_nb_k\x18\x0e \x01(\r\x12\x42\n\x17\x63lass_c_scheduling_type\x18\r \x01(\x0e\x32!.api.MulticastGroupSchedulingType\"\xdf\x01\n\x16MulticastGroupListItem\x12\n\n\x02id\x18\x01 \x01(\t\x12.\n\ncreated_at\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12.\n\nupdated_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x0c\n\x04name\x18\x04 \x01(\t\x12\x1e\n\x06region\x18\x05 \x01(\x0e\x32\x0e.common.Region\x12+\n\ngroup_type\x18\x06 \x01(\x0e\x32\x17.api.MulticastGroupType\"K\n\x1b\x43reateMulticastGroupRequest\x12,\n\x0fmulticast_group\x18\x01 \x01(\x0b\x32\x13.api.MulticastGroup\"*\n\x1c\x43reateMulticastGroupResponse\x12\n\n\x02id\x18\x01 \x01(\t\"&\n\x18GetMulticastGroupRequest\x12\n\n\x02id\x18\x01 \x01(\t\"\xa9\x01\n\x19GetMulticastGroupResponse\x12,\n\x0fmulticast_group\x18\x01 \x01(\x0b\x32\x13.api.MulticastGroup\x12.\n\ncreated_at\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12.\n\nupdated_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"K\n\x1bUpdateMulticastGroupRequest\x12,\n\x0fmulticast_group\x18\x01 \x01(\x0b\x32\x13.api.MulticastGroup\")\n\x1b\x44\x65leteMulticastGroupRequest\x12\n\n\x02id\x18\x01 \x01(\t\"c\n\x1aListMulticastGroupsRequest\x12\r\n\x05limit\x18\x01 \x01(\r\x12\x0e\n\x06offset\x18\x02 \x01(\r\x12\x0e\n\x06search\x18\x03 \x01(\t\x12\x16\n\x0e\x61pplication_id\x18\x04 \x01(\t\"_\n\x1bListMulticastGroupsResponse\x12\x13\n\x0btotal_count\x18\x01 \x01(\r\x12+\n\x06result\x18\x02 \x03(\x0b\x32\x1b.api.MulticastGroupListItem\"O\n AddDeviceToMulticastGroupRequest\x12\x1a\n\x12multicast_group_id\x18\x01 \x01(\t\x12\x0f\n\x07\x64\x65v_eui\x18\x02 \x01(\t\"T\n%RemoveDeviceFromMulticastGroupRequest\x12\x1a\n\x12multicast_group_id\x18\x01 \x01(\t\x12\x0f\n\x07\x64\x65v_eui\x18\x02 \x01(\t\"S\n!AddGatewayToMulticastGroupRequest\x12\x1a\n\x12multicast_group_id\x18\x01 \x01(\t\x12\x12\n\ngateway_id\x18\x02 \x01(\t\"X\n&RemoveGatewayFromMulticastGroupRequest\x12\x1a\n\x12multicast_group_id\x18\x01 \x01(\t\x12\x12\n\ngateway_id\x18\x02 \x01(\t\"b\n\x17MulticastGroupQueueItem\x12\x1a\n\x12multicast_group_id\x18\x01 \x01(\t\x12\r\n\x05\x66_cnt\x18\x02 \x01(\r\x12\x0e\n\x06\x66_port\x18\x03 \x01(\r\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\x0c\"Y\n%EnqueueMulticastGroupQueueItemRequest\x12\x30\n\nqueue_item\x18\x01 \x01(\x0b\x32\x1c.api.MulticastGroupQueueItem\"7\n&EnqueueMulticastGroupQueueItemResponse\x12\r\n\x05\x66_cnt\x18\x01 \x01(\r\"=\n\x1f\x46lushMulticastGroupQueueRequest\x12\x1a\n\x12multicast_group_id\x18\x01 \x01(\t\"<\n\x1eListMulticastGroupQueueRequest\x12\x1a\n\x12multicast_group_id\x18\x01 \x01(\t\"N\n\x1fListMulticastGroupQueueResponse\x12+\n\x05items\x18\x01 \x03(\x0b\x32\x1c.api.MulticastGroupQueueItem*.\n\x12MulticastGroupType\x12\x0b\n\x07\x43LASS_C\x10\x00\x12\x0b\n\x07\x43LASS_B\x10\x01*7\n\x1cMulticastGroupSchedulingType\x12\t\n\x05\x44\x45LAY\x10\x00\x12\x0c\n\x08GPS_TIME\x10\x01\x32\xdd\x0c\n\x15MulticastGroupService\x12o\n\x06\x43reate\x12 .api.CreateMulticastGroupRequest\x1a!.api.CreateMulticastGroupResponse\" \x82\xd3\xe4\x93\x02\x1a\"\x15/api/multicast-groups:\x01*\x12h\n\x03Get\x12\x1d.api.GetMulticastGroupRequest\x1a\x1e.api.GetMulticastGroupResponse\"\"\x82\xd3\xe4\x93\x02\x1c\x12\x1a/api/multicast-groups/{id}\x12y\n\x06Update\x12 .api.UpdateMulticastGroupRequest\x1a\x16.google.protobuf.Empty\"5\x82\xd3\xe4\x93\x02/\x1a*/api/multicast-groups/{multicast_group.id}:\x01*\x12\x66\n\x06\x44\x65lete\x12 .api.DeleteMulticastGroupRequest\x1a\x16.google.protobuf.Empty\"\"\x82\xd3\xe4\x93\x02\x1c*\x1a/api/multicast-groups/{id}\x12h\n\x04List\x12\x1f.api.ListMulticastGroupsRequest\x1a .api.ListMulticastGroupsResponse\"\x1d\x82\xd3\xe4\x93\x02\x17\x12\x15/api/multicast-groups\x12\x89\x01\n\tAddDevice\x12%.api.AddDeviceToMulticastGroupRequest\x1a\x16.google.protobuf.Empty\"=\x82\xd3\xe4\x93\x02\x37\"2/api/multicast-groups/{multicast_group_id}/devices:\x01*\x12\x98\x01\n\x0cRemoveDevice\x12*.api.RemoveDeviceFromMulticastGroupRequest\x1a\x16.google.protobuf.Empty\"D\x82\xd3\xe4\x93\x02>*\x82\xd3\xe4\x93\x02\x38\"3/api/multicast-groups/{multicast_group_id}/gateways:\x01*\x12\x9e\x01\n\rRemoveGateway\x12+.api.RemoveGatewayFromMulticastGroupRequest\x1a\x16.google.protobuf.Empty\"H\x82\xd3\xe4\x93\x02\x42*@/api/multicast-groups/{multicast_group_id}/gateways/{gateway_id}\x12\xaa\x01\n\x07\x45nqueue\x12*.api.EnqueueMulticastGroupQueueItemRequest\x1a+.api.EnqueueMulticastGroupQueueItemResponse\"F\x82\xd3\xe4\x93\x02@\";/api/multicast-groups/{queue_item.multicast_group_id}/queue:\x01*\x12\x84\x01\n\nFlushQueue\x12$.api.FlushMulticastGroupQueueRequest\x1a\x16.google.protobuf.Empty\"8\x82\xd3\xe4\x93\x02\x32*0/api/multicast-groups/{multicast_group_id}/queue\x12\x90\x01\n\tListQueue\x12#.api.ListMulticastGroupQueueRequest\x1a$.api.ListMulticastGroupQueueResponse\"8\x82\xd3\xe4\x93\x02\x32\x12\x30/api/multicast-groups/{multicast_group_id}/queueBk\n\x11io.chirpstack.apiB\x13MulticastGroupProtoP\x01Z.github.com/chirpstack/chirpstack/api/go/v4/api\xaa\x02\x0e\x43hirpstack.Apib\x06proto3')
_globals = globals()
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
@@ -50,50 +50,50 @@ if _descriptor._USE_C_DESCRIPTORS == False:
_globals['_MULTICASTGROUPSERVICE'].methods_by_name['FlushQueue']._serialized_options = b'\202\323\344\223\0022*0/api/multicast-groups/{multicast_group_id}/queue'
_globals['_MULTICASTGROUPSERVICE'].methods_by_name['ListQueue']._options = None
_globals['_MULTICASTGROUPSERVICE'].methods_by_name['ListQueue']._serialized_options = b'\202\323\344\223\0022\0220/api/multicast-groups/{multicast_group_id}/queue'
- _globals['_MULTICASTGROUPTYPE']._serialized_start=2204
- _globals['_MULTICASTGROUPTYPE']._serialized_end=2250
- _globals['_MULTICASTGROUPSCHEDULINGTYPE']._serialized_start=2252
- _globals['_MULTICASTGROUPSCHEDULINGTYPE']._serialized_end=2307
+ _globals['_MULTICASTGROUPTYPE']._serialized_start=2236
+ _globals['_MULTICASTGROUPTYPE']._serialized_end=2282
+ _globals['_MULTICASTGROUPSCHEDULINGTYPE']._serialized_start=2284
+ _globals['_MULTICASTGROUPSCHEDULINGTYPE']._serialized_end=2339
_globals['_MULTICASTGROUP']._serialized_start=178
- _globals['_MULTICASTGROUP']._serialized_end=530
- _globals['_MULTICASTGROUPLISTITEM']._serialized_start=533
- _globals['_MULTICASTGROUPLISTITEM']._serialized_end=756
- _globals['_CREATEMULTICASTGROUPREQUEST']._serialized_start=758
- _globals['_CREATEMULTICASTGROUPREQUEST']._serialized_end=833
- _globals['_CREATEMULTICASTGROUPRESPONSE']._serialized_start=835
- _globals['_CREATEMULTICASTGROUPRESPONSE']._serialized_end=877
- _globals['_GETMULTICASTGROUPREQUEST']._serialized_start=879
- _globals['_GETMULTICASTGROUPREQUEST']._serialized_end=917
- _globals['_GETMULTICASTGROUPRESPONSE']._serialized_start=920
- _globals['_GETMULTICASTGROUPRESPONSE']._serialized_end=1089
- _globals['_UPDATEMULTICASTGROUPREQUEST']._serialized_start=1091
- _globals['_UPDATEMULTICASTGROUPREQUEST']._serialized_end=1166
- _globals['_DELETEMULTICASTGROUPREQUEST']._serialized_start=1168
- _globals['_DELETEMULTICASTGROUPREQUEST']._serialized_end=1209
- _globals['_LISTMULTICASTGROUPSREQUEST']._serialized_start=1211
- _globals['_LISTMULTICASTGROUPSREQUEST']._serialized_end=1310
- _globals['_LISTMULTICASTGROUPSRESPONSE']._serialized_start=1312
- _globals['_LISTMULTICASTGROUPSRESPONSE']._serialized_end=1407
- _globals['_ADDDEVICETOMULTICASTGROUPREQUEST']._serialized_start=1409
- _globals['_ADDDEVICETOMULTICASTGROUPREQUEST']._serialized_end=1488
- _globals['_REMOVEDEVICEFROMMULTICASTGROUPREQUEST']._serialized_start=1490
- _globals['_REMOVEDEVICEFROMMULTICASTGROUPREQUEST']._serialized_end=1574
- _globals['_ADDGATEWAYTOMULTICASTGROUPREQUEST']._serialized_start=1576
- _globals['_ADDGATEWAYTOMULTICASTGROUPREQUEST']._serialized_end=1659
- _globals['_REMOVEGATEWAYFROMMULTICASTGROUPREQUEST']._serialized_start=1661
- _globals['_REMOVEGATEWAYFROMMULTICASTGROUPREQUEST']._serialized_end=1749
- _globals['_MULTICASTGROUPQUEUEITEM']._serialized_start=1751
- _globals['_MULTICASTGROUPQUEUEITEM']._serialized_end=1849
- _globals['_ENQUEUEMULTICASTGROUPQUEUEITEMREQUEST']._serialized_start=1851
- _globals['_ENQUEUEMULTICASTGROUPQUEUEITEMREQUEST']._serialized_end=1940
- _globals['_ENQUEUEMULTICASTGROUPQUEUEITEMRESPONSE']._serialized_start=1942
- _globals['_ENQUEUEMULTICASTGROUPQUEUEITEMRESPONSE']._serialized_end=1997
- _globals['_FLUSHMULTICASTGROUPQUEUEREQUEST']._serialized_start=1999
- _globals['_FLUSHMULTICASTGROUPQUEUEREQUEST']._serialized_end=2060
- _globals['_LISTMULTICASTGROUPQUEUEREQUEST']._serialized_start=2062
- _globals['_LISTMULTICASTGROUPQUEUEREQUEST']._serialized_end=2122
- _globals['_LISTMULTICASTGROUPQUEUERESPONSE']._serialized_start=2124
- _globals['_LISTMULTICASTGROUPQUEUERESPONSE']._serialized_end=2202
- _globals['_MULTICASTGROUPSERVICE']._serialized_start=2310
- _globals['_MULTICASTGROUPSERVICE']._serialized_end=3939
+ _globals['_MULTICASTGROUP']._serialized_end=562
+ _globals['_MULTICASTGROUPLISTITEM']._serialized_start=565
+ _globals['_MULTICASTGROUPLISTITEM']._serialized_end=788
+ _globals['_CREATEMULTICASTGROUPREQUEST']._serialized_start=790
+ _globals['_CREATEMULTICASTGROUPREQUEST']._serialized_end=865
+ _globals['_CREATEMULTICASTGROUPRESPONSE']._serialized_start=867
+ _globals['_CREATEMULTICASTGROUPRESPONSE']._serialized_end=909
+ _globals['_GETMULTICASTGROUPREQUEST']._serialized_start=911
+ _globals['_GETMULTICASTGROUPREQUEST']._serialized_end=949
+ _globals['_GETMULTICASTGROUPRESPONSE']._serialized_start=952
+ _globals['_GETMULTICASTGROUPRESPONSE']._serialized_end=1121
+ _globals['_UPDATEMULTICASTGROUPREQUEST']._serialized_start=1123
+ _globals['_UPDATEMULTICASTGROUPREQUEST']._serialized_end=1198
+ _globals['_DELETEMULTICASTGROUPREQUEST']._serialized_start=1200
+ _globals['_DELETEMULTICASTGROUPREQUEST']._serialized_end=1241
+ _globals['_LISTMULTICASTGROUPSREQUEST']._serialized_start=1243
+ _globals['_LISTMULTICASTGROUPSREQUEST']._serialized_end=1342
+ _globals['_LISTMULTICASTGROUPSRESPONSE']._serialized_start=1344
+ _globals['_LISTMULTICASTGROUPSRESPONSE']._serialized_end=1439
+ _globals['_ADDDEVICETOMULTICASTGROUPREQUEST']._serialized_start=1441
+ _globals['_ADDDEVICETOMULTICASTGROUPREQUEST']._serialized_end=1520
+ _globals['_REMOVEDEVICEFROMMULTICASTGROUPREQUEST']._serialized_start=1522
+ _globals['_REMOVEDEVICEFROMMULTICASTGROUPREQUEST']._serialized_end=1606
+ _globals['_ADDGATEWAYTOMULTICASTGROUPREQUEST']._serialized_start=1608
+ _globals['_ADDGATEWAYTOMULTICASTGROUPREQUEST']._serialized_end=1691
+ _globals['_REMOVEGATEWAYFROMMULTICASTGROUPREQUEST']._serialized_start=1693
+ _globals['_REMOVEGATEWAYFROMMULTICASTGROUPREQUEST']._serialized_end=1781
+ _globals['_MULTICASTGROUPQUEUEITEM']._serialized_start=1783
+ _globals['_MULTICASTGROUPQUEUEITEM']._serialized_end=1881
+ _globals['_ENQUEUEMULTICASTGROUPQUEUEITEMREQUEST']._serialized_start=1883
+ _globals['_ENQUEUEMULTICASTGROUPQUEUEITEMREQUEST']._serialized_end=1972
+ _globals['_ENQUEUEMULTICASTGROUPQUEUEITEMRESPONSE']._serialized_start=1974
+ _globals['_ENQUEUEMULTICASTGROUPQUEUEITEMRESPONSE']._serialized_end=2029
+ _globals['_FLUSHMULTICASTGROUPQUEUEREQUEST']._serialized_start=2031
+ _globals['_FLUSHMULTICASTGROUPQUEUEREQUEST']._serialized_end=2092
+ _globals['_LISTMULTICASTGROUPQUEUEREQUEST']._serialized_start=2094
+ _globals['_LISTMULTICASTGROUPQUEUEREQUEST']._serialized_end=2154
+ _globals['_LISTMULTICASTGROUPQUEUERESPONSE']._serialized_start=2156
+ _globals['_LISTMULTICASTGROUPQUEUERESPONSE']._serialized_end=2234
+ _globals['_MULTICASTGROUPSERVICE']._serialized_start=2342
+ _globals['_MULTICASTGROUPSERVICE']._serialized_end=3971
# @@protoc_insertion_point(module_scope)
diff --git a/api/python/src/chirpstack_api/api/multicast_group_pb2.pyi b/api/python/src/chirpstack_api/api/multicast_group_pb2.pyi
index 537de856..4638a73d 100644
--- a/api/python/src/chirpstack_api/api/multicast_group_pb2.pyi
+++ b/api/python/src/chirpstack_api/api/multicast_group_pb2.pyi
@@ -25,7 +25,7 @@ DELAY: MulticastGroupSchedulingType
GPS_TIME: MulticastGroupSchedulingType
class MulticastGroup(_message.Message):
- __slots__ = ("id", "name", "application_id", "region", "mc_addr", "mc_nwk_s_key", "mc_app_s_key", "f_cnt", "group_type", "dr", "frequency", "class_b_ping_slot_period", "class_c_scheduling_type")
+ __slots__ = ("id", "name", "application_id", "region", "mc_addr", "mc_nwk_s_key", "mc_app_s_key", "f_cnt", "group_type", "dr", "frequency", "class_b_ping_slot_period", "class_b_ping_slot_nb_k", "class_c_scheduling_type")
ID_FIELD_NUMBER: _ClassVar[int]
NAME_FIELD_NUMBER: _ClassVar[int]
APPLICATION_ID_FIELD_NUMBER: _ClassVar[int]
@@ -38,6 +38,7 @@ class MulticastGroup(_message.Message):
DR_FIELD_NUMBER: _ClassVar[int]
FREQUENCY_FIELD_NUMBER: _ClassVar[int]
CLASS_B_PING_SLOT_PERIOD_FIELD_NUMBER: _ClassVar[int]
+ CLASS_B_PING_SLOT_NB_K_FIELD_NUMBER: _ClassVar[int]
CLASS_C_SCHEDULING_TYPE_FIELD_NUMBER: _ClassVar[int]
id: str
name: str
@@ -51,8 +52,9 @@ class MulticastGroup(_message.Message):
dr: int
frequency: int
class_b_ping_slot_period: int
+ class_b_ping_slot_nb_k: int
class_c_scheduling_type: MulticastGroupSchedulingType
- def __init__(self, id: _Optional[str] = ..., name: _Optional[str] = ..., application_id: _Optional[str] = ..., region: _Optional[_Union[_common_pb2.Region, str]] = ..., mc_addr: _Optional[str] = ..., mc_nwk_s_key: _Optional[str] = ..., mc_app_s_key: _Optional[str] = ..., f_cnt: _Optional[int] = ..., group_type: _Optional[_Union[MulticastGroupType, str]] = ..., dr: _Optional[int] = ..., frequency: _Optional[int] = ..., class_b_ping_slot_period: _Optional[int] = ..., class_c_scheduling_type: _Optional[_Union[MulticastGroupSchedulingType, str]] = ...) -> None: ...
+ def __init__(self, id: _Optional[str] = ..., name: _Optional[str] = ..., application_id: _Optional[str] = ..., region: _Optional[_Union[_common_pb2.Region, str]] = ..., mc_addr: _Optional[str] = ..., mc_nwk_s_key: _Optional[str] = ..., mc_app_s_key: _Optional[str] = ..., f_cnt: _Optional[int] = ..., group_type: _Optional[_Union[MulticastGroupType, str]] = ..., dr: _Optional[int] = ..., frequency: _Optional[int] = ..., class_b_ping_slot_period: _Optional[int] = ..., class_b_ping_slot_nb_k: _Optional[int] = ..., class_c_scheduling_type: _Optional[_Union[MulticastGroupSchedulingType, str]] = ...) -> None: ...
class MulticastGroupListItem(_message.Message):
__slots__ = ("id", "created_at", "updated_at", "name", "region", "group_type")