From d10551bce1f526e549a3a63c506bc7fc33a15478 Mon Sep 17 00:00:00 2001
From: Orne Brocaar <info@brocaar.com>
Date: Fri, 22 Jul 2022 20:29:07 +0100
Subject: [PATCH] Change command exec_id to uint32.

---
 api/go/gw/gw.pb.go                          | 209 +++++++++-----------
 api/js/gw/gw_pb.d.ts                        |  28 +--
 api/js/gw/gw_pb.js                          | 204 +++----------------
 api/proto/gw/gw.proto                       |  16 +-
 api/python/proto/chirpstack-api/gw/gw.proto |  16 +-
 api/python/src/chirpstack_api/gw/gw_pb2.py  |  48 ++---
 api/rust/proto/chirpstack/gw/gw.proto       |  16 +-
 7 files changed, 166 insertions(+), 371 deletions(-)

diff --git a/api/go/gw/gw.pb.go b/api/go/gw/gw.pb.go
index 516c73e3..428fd896 100644
--- a/api/go/gw/gw.pb.go
+++ b/api/go/gw/gw.pb.go
@@ -2923,10 +2923,10 @@ type GatewayCommandExecRequest struct {
 	// Command to execute.
 	// This command must be pre-configured in the LoRa Gateway Bridge configuration.
 	Command string `protobuf:"bytes,2,opt,name=command,proto3" json:"command,omitempty"`
-	// Execution request ID (UUID).
-	// The same token will be returned when the execution of the command has
+	// Execution request ID.
+	// The same will be returned when the execution of the command has
 	// completed.
-	ExecId []byte `protobuf:"bytes,3,opt,name=ExecId,proto3" json:"ExecId,omitempty"`
+	ExecId uint32 `protobuf:"varint,7,opt,name=exec_id,json=execId,proto3" json:"exec_id,omitempty"`
 	// Standard input.
 	Stdin []byte `protobuf:"bytes,4,opt,name=stdin,proto3" json:"stdin,omitempty"`
 	// Environment variables.
@@ -2986,11 +2986,11 @@ func (x *GatewayCommandExecRequest) GetCommand() string {
 	return ""
 }
 
-func (x *GatewayCommandExecRequest) GetExecId() []byte {
+func (x *GatewayCommandExecRequest) GetExecId() uint32 {
 	if x != nil {
 		return x.ExecId
 	}
-	return nil
+	return 0
 }
 
 func (x *GatewayCommandExecRequest) GetStdin() []byte {
@@ -3017,8 +3017,8 @@ type GatewayCommandExecResponse struct {
 	GatewayIdLegacy []byte `protobuf:"bytes,1,opt,name=gateway_id_legacy,json=gatewayIdLegacy,proto3" json:"gateway_id_legacy,omitempty"`
 	// Gateway ID.
 	GatewayId string `protobuf:"bytes,6,opt,name=gateway_id,json=gatewayId,proto3" json:"gateway_id,omitempty"`
-	// Execution request ID (UUID).
-	ExecId []byte `protobuf:"bytes,2,opt,name=exec_id,json=execId,proto3" json:"exec_id,omitempty"`
+	// Execution request ID.
+	ExecId uint32 `protobuf:"varint,7,opt,name=exec_id,json=execId,proto3" json:"exec_id,omitempty"`
 	// Standard output.
 	Stdout []byte `protobuf:"bytes,3,opt,name=stdout,proto3" json:"stdout,omitempty"`
 	// Standard error.
@@ -3073,11 +3073,11 @@ func (x *GatewayCommandExecResponse) GetGatewayId() string {
 	return ""
 }
 
-func (x *GatewayCommandExecResponse) GetExecId() []byte {
+func (x *GatewayCommandExecResponse) GetExecId() uint32 {
 	if x != nil {
 		return x.ExecId
 	}
-	return nil
+	return 0
 }
 
 func (x *GatewayCommandExecResponse) GetStdout() []byte {
@@ -3114,8 +3114,6 @@ type RawPacketForwarderEvent struct {
 	GatewayIdLegacy []byte `protobuf:"bytes,1,opt,name=gateway_id_legacy,json=gatewayIdLegacy,proto3" json:"gateway_id_legacy,omitempty"`
 	// Gateway ID.
 	GatewayId string `protobuf:"bytes,4,opt,name=gateway_id,json=gatewayId,proto3" json:"gateway_id,omitempty"`
-	// Raw ID (UUID).
-	RawId []byte `protobuf:"bytes,2,opt,name=raw_id,json=rawId,proto3" json:"raw_id,omitempty"`
 	// Payload contains the raw payload.
 	Payload []byte `protobuf:"bytes,3,opt,name=payload,proto3" json:"payload,omitempty"`
 }
@@ -3166,13 +3164,6 @@ func (x *RawPacketForwarderEvent) GetGatewayId() string {
 	return ""
 }
 
-func (x *RawPacketForwarderEvent) GetRawId() []byte {
-	if x != nil {
-		return x.RawId
-	}
-	return nil
-}
-
 func (x *RawPacketForwarderEvent) GetPayload() []byte {
 	if x != nil {
 		return x.Payload
@@ -3193,8 +3184,6 @@ type RawPacketForwarderCommand struct {
 	GatewayIdLegacy []byte `protobuf:"bytes,1,opt,name=gateway_id_legacy,json=gatewayIdLegacy,proto3" json:"gateway_id_legacy,omitempty"`
 	// Gateway ID.
 	GatewayId string `protobuf:"bytes,4,opt,name=gateway_id,json=gatewayId,proto3" json:"gateway_id,omitempty"`
-	// Raw ID (UUID).
-	RawId []byte `protobuf:"bytes,2,opt,name=raw_id,json=rawId,proto3" json:"raw_id,omitempty"`
 	// Payload contains the raw payload.
 	Payload []byte `protobuf:"bytes,3,opt,name=payload,proto3" json:"payload,omitempty"`
 }
@@ -3245,13 +3234,6 @@ func (x *RawPacketForwarderCommand) GetGatewayId() string {
 	return ""
 }
 
-func (x *RawPacketForwarderCommand) GetRawId() []byte {
-	if x != nil {
-		return x.RawId
-	}
-	return nil
-}
-
 func (x *RawPacketForwarderCommand) GetPayload() []byte {
 	if x != nil {
 		return x.Payload
@@ -3789,7 +3771,7 @@ var file_gw_gw_proto_rawDesc = []byte{
 	0x1c, 0x0a, 0x09, 0x62, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01,
 	0x28, 0x0d, 0x52, 0x09, 0x62, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x12, 0x18, 0x0a,
 	0x07, 0x62, 0x69, 0x74, 0x72, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07,
-	0x62, 0x69, 0x74, 0x72, 0x61, 0x74, 0x65, 0x22, 0xc0, 0x02, 0x0a, 0x19, 0x47, 0x61, 0x74, 0x65,
+	0x62, 0x69, 0x74, 0x72, 0x61, 0x74, 0x65, 0x22, 0xc1, 0x02, 0x0a, 0x19, 0x47, 0x61, 0x74, 0x65,
 	0x77, 0x61, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x45, 0x78, 0x65, 0x63, 0x52, 0x65,
 	0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2a, 0x0a, 0x11, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79,
 	0x5f, 0x69, 0x64, 0x5f, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c,
@@ -3797,98 +3779,95 @@ var file_gw_gw_proto_rawDesc = []byte{
 	0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x18,
 	0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x49, 0x64,
 	0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28,
-	0x09, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x45, 0x78,
-	0x65, 0x63, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x45, 0x78, 0x65, 0x63,
-	0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x64, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28,
-	0x0c, 0x52, 0x05, 0x73, 0x74, 0x64, 0x69, 0x6e, 0x12, 0x50, 0x0a, 0x0b, 0x65, 0x6e, 0x76, 0x69,
-	0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e,
-	0x67, 0x77, 0x2e, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e,
-	0x64, 0x45, 0x78, 0x65, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x45, 0x6e, 0x76,
-	0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x65,
-	0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x1a, 0x3e, 0x0a, 0x10, 0x45, 0x6e,
-	0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10,
-	0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79,
-	0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xc6, 0x01, 0x0a, 0x1a, 0x47,
-	0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x45, 0x78, 0x65,
-	0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x67, 0x61, 0x74,
-	0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x5f, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x18, 0x01,
-	0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x49, 0x64, 0x4c,
-	0x65, 0x67, 0x61, 0x63, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79,
-	0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x61, 0x74, 0x65, 0x77,
-	0x61, 0x79, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x65, 0x78, 0x65, 0x63, 0x5f, 0x69, 0x64, 0x18,
-	0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x65, 0x78, 0x65, 0x63, 0x49, 0x64, 0x12, 0x16, 0x0a,
-	0x06, 0x73, 0x74, 0x64, 0x6f, 0x75, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x73,
-	0x74, 0x64, 0x6f, 0x75, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x18,
-	0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x12, 0x14, 0x0a,
-	0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72,
-	0x72, 0x6f, 0x72, 0x22, 0x95, 0x01, 0x0a, 0x17, 0x52, 0x61, 0x77, 0x50, 0x61, 0x63, 0x6b, 0x65,
+	0x09, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x65, 0x78,
+	0x65, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x65, 0x78, 0x65,
+	0x63, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x64, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01,
+	0x28, 0x0c, 0x52, 0x05, 0x73, 0x74, 0x64, 0x69, 0x6e, 0x12, 0x50, 0x0a, 0x0b, 0x65, 0x6e, 0x76,
+	0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e,
+	0x2e, 0x67, 0x77, 0x2e, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x61,
+	0x6e, 0x64, 0x45, 0x78, 0x65, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x45, 0x6e,
+	0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b,
+	0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x1a, 0x3e, 0x0a, 0x10, 0x45,
+	0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12,
+	0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65,
+	0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xc6, 0x01, 0x0a, 0x1a,
+	0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x45, 0x78,
+	0x65, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x67, 0x61,
+	0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x5f, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x49, 0x64,
+	0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61,
+	0x79, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x61, 0x74, 0x65,
+	0x77, 0x61, 0x79, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x65, 0x78, 0x65, 0x63, 0x5f, 0x69, 0x64,
+	0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x65, 0x78, 0x65, 0x63, 0x49, 0x64, 0x12, 0x16,
+	0x0a, 0x06, 0x73, 0x74, 0x64, 0x6f, 0x75, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06,
+	0x73, 0x74, 0x64, 0x6f, 0x75, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72,
+	0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x12, 0x14,
+	0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65,
+	0x72, 0x72, 0x6f, 0x72, 0x22, 0x7e, 0x0a, 0x17, 0x52, 0x61, 0x77, 0x50, 0x61, 0x63, 0x6b, 0x65,
 	0x74, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x65, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12,
 	0x2a, 0x0a, 0x11, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x5f, 0x6c, 0x65,
 	0x67, 0x61, 0x63, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x67, 0x61, 0x74, 0x65,
 	0x77, 0x61, 0x79, 0x49, 0x64, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x67,
 	0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x09, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x72, 0x61,
-	0x77, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x72, 0x61, 0x77, 0x49,
-	0x64, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x03, 0x20, 0x01,
-	0x28, 0x0c, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x97, 0x01, 0x0a, 0x19,
-	0x52, 0x61, 0x77, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64,
-	0x65, 0x72, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x67, 0x61, 0x74,
-	0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x5f, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x18, 0x01,
-	0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x49, 0x64, 0x4c,
-	0x65, 0x67, 0x61, 0x63, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79,
-	0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x61, 0x74, 0x65, 0x77,
-	0x61, 0x79, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x72, 0x61, 0x77, 0x5f, 0x69, 0x64, 0x18, 0x02,
-	0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x72, 0x61, 0x77, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x70,
-	0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x70, 0x61,
-	0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0xa3, 0x01, 0x0a, 0x09, 0x43, 0x6f, 0x6e, 0x6e, 0x53, 0x74,
-	0x61, 0x74, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69,
-	0x64, 0x5f, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f,
-	0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x49, 0x64, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x12,
-	0x1d, 0x0a, 0x0a, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20,
-	0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x49, 0x64, 0x12, 0x29,
-	0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e,
-	0x67, 0x77, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x74, 0x61,
-	0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0x20, 0x0a, 0x05, 0x53, 0x74, 0x61,
-	0x74, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x4f, 0x46, 0x46, 0x4c, 0x49, 0x4e, 0x45, 0x10, 0x00, 0x12,
-	0x0a, 0x0a, 0x06, 0x4f, 0x4e, 0x4c, 0x49, 0x4e, 0x45, 0x10, 0x01, 0x2a, 0x88, 0x01, 0x0a, 0x08,
-	0x43, 0x6f, 0x64, 0x65, 0x52, 0x61, 0x74, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x43, 0x52, 0x5f, 0x55,
-	0x4e, 0x44, 0x45, 0x46, 0x49, 0x4e, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x52,
-	0x5f, 0x34, 0x5f, 0x35, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x52, 0x5f, 0x34, 0x5f, 0x36,
-	0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x52, 0x5f, 0x34, 0x5f, 0x37, 0x10, 0x03, 0x12, 0x0a,
-	0x0a, 0x06, 0x43, 0x52, 0x5f, 0x34, 0x5f, 0x38, 0x10, 0x04, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x52,
-	0x5f, 0x33, 0x5f, 0x38, 0x10, 0x05, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x52, 0x5f, 0x32, 0x5f, 0x36,
-	0x10, 0x06, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x52, 0x5f, 0x31, 0x5f, 0x34, 0x10, 0x07, 0x12, 0x0a,
-	0x0a, 0x06, 0x43, 0x52, 0x5f, 0x31, 0x5f, 0x36, 0x10, 0x08, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x52,
-	0x5f, 0x35, 0x5f, 0x36, 0x10, 0x09, 0x2a, 0x3b, 0x0a, 0x0e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x69,
-	0x6e, 0x6b, 0x54, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x12, 0x0f, 0x0a, 0x0b, 0x49, 0x4d, 0x4d, 0x45,
-	0x44, 0x49, 0x41, 0x54, 0x45, 0x4c, 0x59, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x44, 0x45, 0x4c,
-	0x41, 0x59, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x47, 0x50, 0x53, 0x5f, 0x45, 0x50, 0x4f, 0x43,
-	0x48, 0x10, 0x02, 0x2a, 0x37, 0x0a, 0x11, 0x46, 0x69, 0x6e, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73,
-	0x74, 0x61, 0x6d, 0x70, 0x54, 0x79, 0x70, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45,
-	0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x45, 0x4e, 0x43, 0x52, 0x59, 0x50, 0x54, 0x45, 0x44, 0x10,
-	0x01, 0x12, 0x09, 0x0a, 0x05, 0x50, 0x4c, 0x41, 0x49, 0x4e, 0x10, 0x02, 0x2a, 0x30, 0x0a, 0x09,
-	0x43, 0x52, 0x43, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0a, 0x0a, 0x06, 0x4e, 0x4f, 0x5f,
-	0x43, 0x52, 0x43, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x42, 0x41, 0x44, 0x5f, 0x43, 0x52, 0x43,
-	0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x52, 0x43, 0x5f, 0x4f, 0x4b, 0x10, 0x02, 0x2a, 0xbc,
-	0x01, 0x0a, 0x0b, 0x54, 0x78, 0x41, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0b,
-	0x0a, 0x07, 0x49, 0x47, 0x4e, 0x4f, 0x52, 0x45, 0x44, 0x10, 0x00, 0x12, 0x06, 0x0a, 0x02, 0x4f,
-	0x4b, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x54, 0x4f, 0x4f, 0x5f, 0x4c, 0x41, 0x54, 0x45, 0x10,
-	0x02, 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x4f, 0x4f, 0x5f, 0x45, 0x41, 0x52, 0x4c, 0x59, 0x10, 0x03,
-	0x12, 0x14, 0x0a, 0x10, 0x43, 0x4f, 0x4c, 0x4c, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x41,
-	0x43, 0x4b, 0x45, 0x54, 0x10, 0x04, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x4f, 0x4c, 0x4c, 0x49, 0x53,
-	0x49, 0x4f, 0x4e, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x10, 0x05, 0x12, 0x0b, 0x0a, 0x07,
-	0x54, 0x58, 0x5f, 0x46, 0x52, 0x45, 0x51, 0x10, 0x06, 0x12, 0x0c, 0x0a, 0x08, 0x54, 0x58, 0x5f,
-	0x50, 0x4f, 0x57, 0x45, 0x52, 0x10, 0x07, 0x12, 0x10, 0x0a, 0x0c, 0x47, 0x50, 0x53, 0x5f, 0x55,
-	0x4e, 0x4c, 0x4f, 0x43, 0x4b, 0x45, 0x44, 0x10, 0x08, 0x12, 0x0e, 0x0a, 0x0a, 0x51, 0x55, 0x45,
-	0x55, 0x45, 0x5f, 0x46, 0x55, 0x4c, 0x4c, 0x10, 0x09, 0x12, 0x12, 0x0a, 0x0e, 0x49, 0x4e, 0x54,
-	0x45, 0x52, 0x4e, 0x41, 0x4c, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x0a, 0x42, 0x55, 0x0a,
-	0x14, 0x69, 0x6f, 0x2e, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x61,
-	0x70, 0x69, 0x2e, 0x67, 0x77, 0x42, 0x0c, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x50, 0x72,
-	0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2d, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f,
-	0x6d, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x63, 0x68, 0x69,
-	0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x76,
-	0x34, 0x2f, 0x67, 0x77, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+	0x09, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61,
+	0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x70, 0x61, 0x79,
+	0x6c, 0x6f, 0x61, 0x64, 0x22, 0x80, 0x01, 0x0a, 0x19, 0x52, 0x61, 0x77, 0x50, 0x61, 0x63, 0x6b,
+	0x65, 0x74, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x6d, 0x61,
+	0x6e, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64,
+	0x5f, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x67,
+	0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x49, 0x64, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x12, 0x1d,
+	0x0a, 0x0a, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x09, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x49, 0x64, 0x12, 0x18, 0x0a,
+	0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07,
+	0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0xa3, 0x01, 0x0a, 0x09, 0x43, 0x6f, 0x6e, 0x6e,
+	0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79,
+	0x5f, 0x69, 0x64, 0x5f, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c,
+	0x52, 0x0f, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x49, 0x64, 0x4c, 0x65, 0x67, 0x61, 0x63,
+	0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x18,
+	0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x49, 0x64,
+	0x12, 0x29, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32,
+	0x13, 0x2e, 0x67, 0x77, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x53,
+	0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0x20, 0x0a, 0x05, 0x53,
+	0x74, 0x61, 0x74, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x4f, 0x46, 0x46, 0x4c, 0x49, 0x4e, 0x45, 0x10,
+	0x00, 0x12, 0x0a, 0x0a, 0x06, 0x4f, 0x4e, 0x4c, 0x49, 0x4e, 0x45, 0x10, 0x01, 0x2a, 0x88, 0x01,
+	0x0a, 0x08, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x61, 0x74, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x43, 0x52,
+	0x5f, 0x55, 0x4e, 0x44, 0x45, 0x46, 0x49, 0x4e, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06,
+	0x43, 0x52, 0x5f, 0x34, 0x5f, 0x35, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x52, 0x5f, 0x34,
+	0x5f, 0x36, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x52, 0x5f, 0x34, 0x5f, 0x37, 0x10, 0x03,
+	0x12, 0x0a, 0x0a, 0x06, 0x43, 0x52, 0x5f, 0x34, 0x5f, 0x38, 0x10, 0x04, 0x12, 0x0a, 0x0a, 0x06,
+	0x43, 0x52, 0x5f, 0x33, 0x5f, 0x38, 0x10, 0x05, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x52, 0x5f, 0x32,
+	0x5f, 0x36, 0x10, 0x06, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x52, 0x5f, 0x31, 0x5f, 0x34, 0x10, 0x07,
+	0x12, 0x0a, 0x0a, 0x06, 0x43, 0x52, 0x5f, 0x31, 0x5f, 0x36, 0x10, 0x08, 0x12, 0x0a, 0x0a, 0x06,
+	0x43, 0x52, 0x5f, 0x35, 0x5f, 0x36, 0x10, 0x09, 0x2a, 0x3b, 0x0a, 0x0e, 0x44, 0x6f, 0x77, 0x6e,
+	0x6c, 0x69, 0x6e, 0x6b, 0x54, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x12, 0x0f, 0x0a, 0x0b, 0x49, 0x4d,
+	0x4d, 0x45, 0x44, 0x49, 0x41, 0x54, 0x45, 0x4c, 0x59, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x44,
+	0x45, 0x4c, 0x41, 0x59, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x47, 0x50, 0x53, 0x5f, 0x45, 0x50,
+	0x4f, 0x43, 0x48, 0x10, 0x02, 0x2a, 0x37, 0x0a, 0x11, 0x46, 0x69, 0x6e, 0x65, 0x54, 0x69, 0x6d,
+	0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x54, 0x79, 0x70, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f,
+	0x4e, 0x45, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x45, 0x4e, 0x43, 0x52, 0x59, 0x50, 0x54, 0x45,
+	0x44, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x50, 0x4c, 0x41, 0x49, 0x4e, 0x10, 0x02, 0x2a, 0x30,
+	0x0a, 0x09, 0x43, 0x52, 0x43, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0a, 0x0a, 0x06, 0x4e,
+	0x4f, 0x5f, 0x43, 0x52, 0x43, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x42, 0x41, 0x44, 0x5f, 0x43,
+	0x52, 0x43, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x52, 0x43, 0x5f, 0x4f, 0x4b, 0x10, 0x02,
+	0x2a, 0xbc, 0x01, 0x0a, 0x0b, 0x54, 0x78, 0x41, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73,
+	0x12, 0x0b, 0x0a, 0x07, 0x49, 0x47, 0x4e, 0x4f, 0x52, 0x45, 0x44, 0x10, 0x00, 0x12, 0x06, 0x0a,
+	0x02, 0x4f, 0x4b, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x54, 0x4f, 0x4f, 0x5f, 0x4c, 0x41, 0x54,
+	0x45, 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x4f, 0x4f, 0x5f, 0x45, 0x41, 0x52, 0x4c, 0x59,
+	0x10, 0x03, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x4f, 0x4c, 0x4c, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f,
+	0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x10, 0x04, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x4f, 0x4c, 0x4c,
+	0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x10, 0x05, 0x12, 0x0b,
+	0x0a, 0x07, 0x54, 0x58, 0x5f, 0x46, 0x52, 0x45, 0x51, 0x10, 0x06, 0x12, 0x0c, 0x0a, 0x08, 0x54,
+	0x58, 0x5f, 0x50, 0x4f, 0x57, 0x45, 0x52, 0x10, 0x07, 0x12, 0x10, 0x0a, 0x0c, 0x47, 0x50, 0x53,
+	0x5f, 0x55, 0x4e, 0x4c, 0x4f, 0x43, 0x4b, 0x45, 0x44, 0x10, 0x08, 0x12, 0x0e, 0x0a, 0x0a, 0x51,
+	0x55, 0x45, 0x55, 0x45, 0x5f, 0x46, 0x55, 0x4c, 0x4c, 0x10, 0x09, 0x12, 0x12, 0x0a, 0x0e, 0x49,
+	0x4e, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x0a, 0x42,
+	0x55, 0x0a, 0x14, 0x69, 0x6f, 0x2e, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b,
+	0x2e, 0x61, 0x70, 0x69, 0x2e, 0x67, 0x77, 0x42, 0x0c, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79,
+	0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2d, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e,
+	0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x63,
+	0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f,
+	0x2f, 0x76, 0x34, 0x2f, 0x67, 0x77, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
diff --git a/api/js/gw/gw_pb.d.ts b/api/js/gw/gw_pb.d.ts
index 50e956b0..ae3b70d5 100644
--- a/api/js/gw/gw_pb.d.ts
+++ b/api/js/gw/gw_pb.d.ts
@@ -1191,10 +1191,8 @@ export class GatewayCommandExecRequest extends jspb.Message {
   getCommand(): string;
   setCommand(value: string): void;
 
-  getExecid(): Uint8Array | string;
-  getExecid_asU8(): Uint8Array;
-  getExecid_asB64(): string;
-  setExecid(value: Uint8Array | string): void;
+  getExecId(): number;
+  setExecId(value: number): void;
 
   getStdin(): Uint8Array | string;
   getStdin_asU8(): Uint8Array;
@@ -1218,7 +1216,7 @@ export namespace GatewayCommandExecRequest {
     gatewayIdLegacy: Uint8Array | string,
     gatewayId: string,
     command: string,
-    execid: Uint8Array | string,
+    execId: number,
     stdin: Uint8Array | string,
     environmentMap: Array<[string, string]>,
   }
@@ -1233,10 +1231,8 @@ export class GatewayCommandExecResponse extends jspb.Message {
   getGatewayId(): string;
   setGatewayId(value: string): void;
 
-  getExecId(): Uint8Array | string;
-  getExecId_asU8(): Uint8Array;
-  getExecId_asB64(): string;
-  setExecId(value: Uint8Array | string): void;
+  getExecId(): number;
+  setExecId(value: number): void;
 
   getStdout(): Uint8Array | string;
   getStdout_asU8(): Uint8Array;
@@ -1265,7 +1261,7 @@ export namespace GatewayCommandExecResponse {
   export type AsObject = {
     gatewayIdLegacy: Uint8Array | string,
     gatewayId: string,
-    execId: Uint8Array | string,
+    execId: number,
     stdout: Uint8Array | string,
     stderr: Uint8Array | string,
     error: string,
@@ -1281,11 +1277,6 @@ export class RawPacketForwarderEvent extends jspb.Message {
   getGatewayId(): string;
   setGatewayId(value: string): void;
 
-  getRawId(): Uint8Array | string;
-  getRawId_asU8(): Uint8Array;
-  getRawId_asB64(): string;
-  setRawId(value: Uint8Array | string): void;
-
   getPayload(): Uint8Array | string;
   getPayload_asU8(): Uint8Array;
   getPayload_asB64(): string;
@@ -1305,7 +1296,6 @@ export namespace RawPacketForwarderEvent {
   export type AsObject = {
     gatewayIdLegacy: Uint8Array | string,
     gatewayId: string,
-    rawId: Uint8Array | string,
     payload: Uint8Array | string,
   }
 }
@@ -1319,11 +1309,6 @@ export class RawPacketForwarderCommand extends jspb.Message {
   getGatewayId(): string;
   setGatewayId(value: string): void;
 
-  getRawId(): Uint8Array | string;
-  getRawId_asU8(): Uint8Array;
-  getRawId_asB64(): string;
-  setRawId(value: Uint8Array | string): void;
-
   getPayload(): Uint8Array | string;
   getPayload_asU8(): Uint8Array;
   getPayload_asB64(): string;
@@ -1343,7 +1328,6 @@ export namespace RawPacketForwarderCommand {
   export type AsObject = {
     gatewayIdLegacy: Uint8Array | string,
     gatewayId: string,
-    rawId: Uint8Array | string,
     payload: Uint8Array | string,
   }
 }
diff --git a/api/js/gw/gw_pb.js b/api/js/gw/gw_pb.js
index ce8deace..cfe0a480 100644
--- a/api/js/gw/gw_pb.js
+++ b/api/js/gw/gw_pb.js
@@ -8890,7 +8890,7 @@ proto.gw.GatewayCommandExecRequest.toObject = function(includeInstance, msg) {
     gatewayIdLegacy: msg.getGatewayIdLegacy_asB64(),
     gatewayId: msg.getGatewayId(),
     command: msg.getCommand(),
-    execid: msg.getExecid_asB64(),
+    execId: msg.getExecId(),
     stdin: msg.getStdin_asB64(),
     environmentMap: (f = msg.getEnvironmentMap(true)) ? f.toArray() : []
   };
@@ -8941,9 +8941,9 @@ proto.gw.GatewayCommandExecRequest.deserializeBinaryFromReader = function(msg, r
       var value = /** @type {string} */ (reader.readString());
       msg.setCommand(value);
       break;
-    case 3:
-      var value = /** @type {!Uint8Array} */ (reader.readBytes());
-      msg.setExecid(value);
+    case 7:
+      var value = /** @type {number} */ (reader.readUint32());
+      msg.setExecId(value);
       break;
     case 4:
       var value = /** @type {!Uint8Array} */ (reader.readBytes());
@@ -9014,10 +9014,10 @@ proto.gw.GatewayCommandExecRequest.prototype.serializeBinaryToWriter = function
       f
     );
   }
-  f = this.getExecid_asU8();
-  if (f.length > 0) {
-    writer.writeBytes(
-      3,
+  f = this.getExecId();
+  if (f !== 0) {
+    writer.writeUint32(
+      7,
       f
     );
   }
@@ -9114,41 +9114,17 @@ proto.gw.GatewayCommandExecRequest.prototype.setCommand = function(value) {
 
 
 /**
- * optional bytes ExecId = 3;
- * @return {!(string|Uint8Array)}
+ * optional uint32 exec_id = 7;
+ * @return {number}
  */
-proto.gw.GatewayCommandExecRequest.prototype.getExecid = function() {
-  return /** @type {!(string|Uint8Array)} */ (jspb.Message.getFieldProto3(this, 3, ""));
+proto.gw.GatewayCommandExecRequest.prototype.getExecId = function() {
+  return /** @type {number} */ (jspb.Message.getFieldProto3(this, 7, 0));
 };
 
 
-/**
- * optional bytes ExecId = 3;
- * This is a type-conversion wrapper around `getExecid()`
- * @return {string}
- */
-proto.gw.GatewayCommandExecRequest.prototype.getExecid_asB64 = function() {
-  return /** @type {string} */ (jspb.Message.bytesAsB64(
-      this.getExecid()));
-};
-
-
-/**
- * optional bytes ExecId = 3;
- * Note that Uint8Array is not supported on all browsers.
- * @see http://caniuse.com/Uint8Array
- * This is a type-conversion wrapper around `getExecid()`
- * @return {!Uint8Array}
- */
-proto.gw.GatewayCommandExecRequest.prototype.getExecid_asU8 = function() {
-  return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8(
-      this.getExecid()));
-};
-
-
-/** @param {!(string|Uint8Array)} value  */
-proto.gw.GatewayCommandExecRequest.prototype.setExecid = function(value) {
-  jspb.Message.setField(this, 3, value);
+/** @param {number} value  */
+proto.gw.GatewayCommandExecRequest.prototype.setExecId = function(value) {
+  jspb.Message.setField(this, 7, value);
 };
 
 
@@ -9252,7 +9228,7 @@ proto.gw.GatewayCommandExecResponse.toObject = function(includeInstance, msg) {
   var f, obj = {
     gatewayIdLegacy: msg.getGatewayIdLegacy_asB64(),
     gatewayId: msg.getGatewayId(),
-    execId: msg.getExecId_asB64(),
+    execId: msg.getExecId(),
     stdout: msg.getStdout_asB64(),
     stderr: msg.getStderr_asB64(),
     error: msg.getError()
@@ -9300,8 +9276,8 @@ proto.gw.GatewayCommandExecResponse.deserializeBinaryFromReader = function(msg,
       var value = /** @type {string} */ (reader.readString());
       msg.setGatewayId(value);
       break;
-    case 2:
-      var value = /** @type {!Uint8Array} */ (reader.readBytes());
+    case 7:
+      var value = /** @type {number} */ (reader.readUint32());
       msg.setExecId(value);
       break;
     case 3:
@@ -9368,10 +9344,10 @@ proto.gw.GatewayCommandExecResponse.prototype.serializeBinaryToWriter = function
       f
     );
   }
-  f = this.getExecId_asU8();
-  if (f.length > 0) {
-    writer.writeBytes(
-      2,
+  f = this.getExecId();
+  if (f !== 0) {
+    writer.writeUint32(
+      7,
       f
     );
   }
@@ -9463,41 +9439,17 @@ proto.gw.GatewayCommandExecResponse.prototype.setGatewayId = function(value) {
 
 
 /**
- * optional bytes exec_id = 2;
- * @return {!(string|Uint8Array)}
+ * optional uint32 exec_id = 7;
+ * @return {number}
  */
 proto.gw.GatewayCommandExecResponse.prototype.getExecId = function() {
-  return /** @type {!(string|Uint8Array)} */ (jspb.Message.getFieldProto3(this, 2, ""));
+  return /** @type {number} */ (jspb.Message.getFieldProto3(this, 7, 0));
 };
 
 
-/**
- * optional bytes exec_id = 2;
- * This is a type-conversion wrapper around `getExecId()`
- * @return {string}
- */
-proto.gw.GatewayCommandExecResponse.prototype.getExecId_asB64 = function() {
-  return /** @type {string} */ (jspb.Message.bytesAsB64(
-      this.getExecId()));
-};
-
-
-/**
- * optional bytes exec_id = 2;
- * Note that Uint8Array is not supported on all browsers.
- * @see http://caniuse.com/Uint8Array
- * This is a type-conversion wrapper around `getExecId()`
- * @return {!Uint8Array}
- */
-proto.gw.GatewayCommandExecResponse.prototype.getExecId_asU8 = function() {
-  return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8(
-      this.getExecId()));
-};
-
-
-/** @param {!(string|Uint8Array)} value  */
+/** @param {number} value  */
 proto.gw.GatewayCommandExecResponse.prototype.setExecId = function(value) {
-  jspb.Message.setField(this, 2, value);
+  jspb.Message.setField(this, 7, value);
 };
 
 
@@ -9642,7 +9594,6 @@ proto.gw.RawPacketForwarderEvent.toObject = function(includeInstance, msg) {
   var f, obj = {
     gatewayIdLegacy: msg.getGatewayIdLegacy_asB64(),
     gatewayId: msg.getGatewayId(),
-    rawId: msg.getRawId_asB64(),
     payload: msg.getPayload_asB64()
   };
 
@@ -9688,10 +9639,6 @@ proto.gw.RawPacketForwarderEvent.deserializeBinaryFromReader = function(msg, rea
       var value = /** @type {string} */ (reader.readString());
       msg.setGatewayId(value);
       break;
-    case 2:
-      var value = /** @type {!Uint8Array} */ (reader.readBytes());
-      msg.setRawId(value);
-      break;
     case 3:
       var value = /** @type {!Uint8Array} */ (reader.readBytes());
       msg.setPayload(value);
@@ -9748,13 +9695,6 @@ proto.gw.RawPacketForwarderEvent.prototype.serializeBinaryToWriter = function (w
       f
     );
   }
-  f = this.getRawId_asU8();
-  if (f.length > 0) {
-    writer.writeBytes(
-      2,
-      f
-    );
-  }
   f = this.getPayload_asU8();
   if (f.length > 0) {
     writer.writeBytes(
@@ -9828,45 +9768,6 @@ proto.gw.RawPacketForwarderEvent.prototype.setGatewayId = function(value) {
 };
 
 
-/**
- * optional bytes raw_id = 2;
- * @return {!(string|Uint8Array)}
- */
-proto.gw.RawPacketForwarderEvent.prototype.getRawId = function() {
-  return /** @type {!(string|Uint8Array)} */ (jspb.Message.getFieldProto3(this, 2, ""));
-};
-
-
-/**
- * optional bytes raw_id = 2;
- * This is a type-conversion wrapper around `getRawId()`
- * @return {string}
- */
-proto.gw.RawPacketForwarderEvent.prototype.getRawId_asB64 = function() {
-  return /** @type {string} */ (jspb.Message.bytesAsB64(
-      this.getRawId()));
-};
-
-
-/**
- * optional bytes raw_id = 2;
- * Note that Uint8Array is not supported on all browsers.
- * @see http://caniuse.com/Uint8Array
- * This is a type-conversion wrapper around `getRawId()`
- * @return {!Uint8Array}
- */
-proto.gw.RawPacketForwarderEvent.prototype.getRawId_asU8 = function() {
-  return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8(
-      this.getRawId()));
-};
-
-
-/** @param {!(string|Uint8Array)} value  */
-proto.gw.RawPacketForwarderEvent.prototype.setRawId = function(value) {
-  jspb.Message.setField(this, 2, value);
-};
-
-
 /**
  * optional bytes payload = 3;
  * @return {!(string|Uint8Array)}
@@ -9954,7 +9855,6 @@ proto.gw.RawPacketForwarderCommand.toObject = function(includeInstance, msg) {
   var f, obj = {
     gatewayIdLegacy: msg.getGatewayIdLegacy_asB64(),
     gatewayId: msg.getGatewayId(),
-    rawId: msg.getRawId_asB64(),
     payload: msg.getPayload_asB64()
   };
 
@@ -10000,10 +9900,6 @@ proto.gw.RawPacketForwarderCommand.deserializeBinaryFromReader = function(msg, r
       var value = /** @type {string} */ (reader.readString());
       msg.setGatewayId(value);
       break;
-    case 2:
-      var value = /** @type {!Uint8Array} */ (reader.readBytes());
-      msg.setRawId(value);
-      break;
     case 3:
       var value = /** @type {!Uint8Array} */ (reader.readBytes());
       msg.setPayload(value);
@@ -10060,13 +9956,6 @@ proto.gw.RawPacketForwarderCommand.prototype.serializeBinaryToWriter = function
       f
     );
   }
-  f = this.getRawId_asU8();
-  if (f.length > 0) {
-    writer.writeBytes(
-      2,
-      f
-    );
-  }
   f = this.getPayload_asU8();
   if (f.length > 0) {
     writer.writeBytes(
@@ -10140,45 +10029,6 @@ proto.gw.RawPacketForwarderCommand.prototype.setGatewayId = function(value) {
 };
 
 
-/**
- * optional bytes raw_id = 2;
- * @return {!(string|Uint8Array)}
- */
-proto.gw.RawPacketForwarderCommand.prototype.getRawId = function() {
-  return /** @type {!(string|Uint8Array)} */ (jspb.Message.getFieldProto3(this, 2, ""));
-};
-
-
-/**
- * optional bytes raw_id = 2;
- * This is a type-conversion wrapper around `getRawId()`
- * @return {string}
- */
-proto.gw.RawPacketForwarderCommand.prototype.getRawId_asB64 = function() {
-  return /** @type {string} */ (jspb.Message.bytesAsB64(
-      this.getRawId()));
-};
-
-
-/**
- * optional bytes raw_id = 2;
- * Note that Uint8Array is not supported on all browsers.
- * @see http://caniuse.com/Uint8Array
- * This is a type-conversion wrapper around `getRawId()`
- * @return {!Uint8Array}
- */
-proto.gw.RawPacketForwarderCommand.prototype.getRawId_asU8 = function() {
-  return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8(
-      this.getRawId()));
-};
-
-
-/** @param {!(string|Uint8Array)} value  */
-proto.gw.RawPacketForwarderCommand.prototype.setRawId = function(value) {
-  jspb.Message.setField(this, 2, value);
-};
-
-
 /**
  * optional bytes payload = 3;
  * @return {!(string|Uint8Array)}
diff --git a/api/proto/gw/gw.proto b/api/proto/gw/gw.proto
index 0a3860b2..e711b93f 100644
--- a/api/proto/gw/gw.proto
+++ b/api/proto/gw/gw.proto
@@ -608,10 +608,10 @@ message GatewayCommandExecRequest {
     // This command must be pre-configured in the LoRa Gateway Bridge configuration.
     string command = 2;
 
-    // Execution request ID (UUID).
-    // The same token will be returned when the execution of the command has
+    // Execution request ID.
+    // The same will be returned when the execution of the command has
     // completed.
-    bytes ExecId = 3;
+    uint32 exec_id = 7;
 
     // Standard input.
     bytes stdin = 4;
@@ -628,8 +628,8 @@ message GatewayCommandExecResponse {
     // Gateway ID.
     string gateway_id = 6;
 
-    // Execution request ID (UUID).
-    bytes exec_id = 2;
+    // Execution request ID.
+    uint32 exec_id = 7;
 
     // Standard output.
     bytes stdout = 3;
@@ -652,9 +652,6 @@ message RawPacketForwarderEvent {
     // Gateway ID.
     string gateway_id = 4;
 
-    // Raw ID (UUID).
-    bytes raw_id = 2;
-
     // Payload contains the raw payload.
     bytes payload = 3;
 }
@@ -670,9 +667,6 @@ message RawPacketForwarderCommand {
     // Gateway ID.
     string gateway_id = 4;
 
-    // Raw ID (UUID).
-    bytes raw_id = 2;
-
     // Payload contains the raw payload.
     bytes payload = 3;
 }
diff --git a/api/python/proto/chirpstack-api/gw/gw.proto b/api/python/proto/chirpstack-api/gw/gw.proto
index b35d854e..22ec4ba6 100644
--- a/api/python/proto/chirpstack-api/gw/gw.proto
+++ b/api/python/proto/chirpstack-api/gw/gw.proto
@@ -608,10 +608,10 @@ message GatewayCommandExecRequest {
     // This command must be pre-configured in the LoRa Gateway Bridge configuration.
     string command = 2;
 
-    // Execution request ID (UUID).
-    // The same token will be returned when the execution of the command has
+    // Execution request ID.
+    // The same will be returned when the execution of the command has
     // completed.
-    bytes ExecId = 3;
+    uint32 exec_id = 7;
 
     // Standard input.
     bytes stdin = 4;
@@ -628,8 +628,8 @@ message GatewayCommandExecResponse {
     // Gateway ID.
     string gateway_id = 6;
 
-    // Execution request ID (UUID).
-    bytes exec_id = 2;
+    // Execution request ID.
+    uint32 exec_id = 7;
 
     // Standard output.
     bytes stdout = 3;
@@ -652,9 +652,6 @@ message RawPacketForwarderEvent {
     // Gateway ID.
     string gateway_id = 4;
 
-    // Raw ID (UUID).
-    bytes raw_id = 2;
-
     // Payload contains the raw payload.
     bytes payload = 3;
 }
@@ -670,9 +667,6 @@ message RawPacketForwarderCommand {
     // Gateway ID.
     string gateway_id = 4;
 
-    // Raw ID (UUID).
-    bytes raw_id = 2;
-
     // Payload contains the raw payload.
     bytes payload = 3;
 }
diff --git a/api/python/src/chirpstack_api/gw/gw_pb2.py b/api/python/src/chirpstack_api/gw/gw_pb2.py
index 1c3c68d5..bca7939c 100644
--- a/api/python/src/chirpstack_api/gw/gw_pb2.py
+++ b/api/python/src/chirpstack_api/gw/gw_pb2.py
@@ -19,7 +19,7 @@ from google.protobuf import duration_pb2 as google_dot_protobuf_dot_duration__pb
 from google.protobuf import struct_pb2 as google_dot_protobuf_dot_struct__pb2
 
 
-DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1a\x63hirpstack-api/gw/gw.proto\x12\x02gw\x1a\"chirpstack-api/common/common.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1cgoogle/protobuf/struct.proto\"\x95\x01\n\nModulation\x12&\n\x04lora\x18\x03 \x01(\x0b\x32\x16.gw.LoraModulationInfoH\x00\x12$\n\x03\x66sk\x18\x04 \x01(\x0b\x32\x15.gw.FskModulationInfoH\x00\x12+\n\x07lr_fhss\x18\x05 \x01(\x0b\x32\x18.gw.LrFhssModulationInfoH\x00\x42\x0c\n\nparameters\"\x8d\x02\n\x12UplinkTxInfoLegacy\x12\x11\n\tfrequency\x18\x01 \x01(\r\x12&\n\nmodulation\x18\x02 \x01(\x0e\x32\x12.common.Modulation\x12\x36\n\x14lora_modulation_info\x18\x03 \x01(\x0b\x32\x16.gw.LoraModulationInfoH\x00\x12\x34\n\x13\x66sk_modulation_info\x18\x04 \x01(\x0b\x32\x15.gw.FskModulationInfoH\x00\x12;\n\x17lr_fhss_modulation_info\x18\x05 \x01(\x0b\x32\x18.gw.LrFhssModulationInfoH\x00\x42\x11\n\x0fmodulation_info\"E\n\x0cUplinkTxInfo\x12\x11\n\tfrequency\x18\x01 \x01(\r\x12\"\n\nmodulation\x18\x02 \x01(\x0b\x32\x0e.gw.Modulation\"\x9c\x01\n\x12LoraModulationInfo\x12\x11\n\tbandwidth\x18\x01 \x01(\r\x12\x18\n\x10spreading_factor\x18\x02 \x01(\r\x12\x18\n\x10\x63ode_rate_legacy\x18\x03 \x01(\t\x12\x1f\n\tcode_rate\x18\x05 \x01(\x0e\x32\x0c.gw.CodeRate\x12\x1e\n\x16polarization_inversion\x18\x04 \x01(\x08\"B\n\x11\x46skModulationInfo\x12\x1b\n\x13\x66requency_deviation\x18\x01 \x01(\r\x12\x10\n\x08\x64\x61tarate\x18\x02 \x01(\r\"\x86\x01\n\x14LrFhssModulationInfo\x12\x1f\n\x17operating_channel_width\x18\x01 \x01(\r\x12\x18\n\x10\x63ode_rate_legacy\x18\x02 \x01(\t\x12\x1f\n\tcode_rate\x18\x04 \x01(\x0e\x32\x0c.gw.CodeRate\x12\x12\n\ngrid_steps\x18\x03 \x01(\r\"V\n\x16\x45ncryptedFineTimestamp\x12\x15\n\raes_key_index\x18\x01 \x01(\r\x12\x14\n\x0c\x65ncrypted_ns\x18\x02 \x01(\x0c\x12\x0f\n\x07\x66pga_id\x18\x03 \x01(\x0c\">\n\x12PlainFineTimestamp\x12(\n\x04time\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"\x91\x07\n\x0cGatewayStats\x12\x19\n\x11gateway_id_legacy\x18\x01 \x01(\x0c\x12\x12\n\ngateway_id\x18\x11 \x01(\t\x12(\n\x04time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\"\n\x08location\x18\x03 \x01(\x0b\x32\x10.common.Location\x12\x16\n\x0e\x63onfig_version\x18\x04 \x01(\t\x12\x1b\n\x13rx_packets_received\x18\x05 \x01(\r\x12\x1e\n\x16rx_packets_received_ok\x18\x06 \x01(\r\x12\x1b\n\x13tx_packets_received\x18\x07 \x01(\r\x12\x1a\n\x12tx_packets_emitted\x18\x08 \x01(\r\x12\x31\n\tmeta_data\x18\n \x03(\x0b\x32\x1e.gw.GatewayStats.MetaDataEntry\x12M\n\x18tx_packets_per_frequency\x18\x0c \x03(\x0b\x32+.gw.GatewayStats.TxPacketsPerFrequencyEntry\x12M\n\x18rx_packets_per_frequency\x18\r \x03(\x0b\x32+.gw.GatewayStats.RxPacketsPerFrequencyEntry\x12\x39\n\x19tx_packets_per_modulation\x18\x0e \x03(\x0b\x32\x16.gw.PerModulationCount\x12\x39\n\x19rx_packets_per_modulation\x18\x0f \x03(\x0b\x32\x16.gw.PerModulationCount\x12G\n\x15tx_packets_per_status\x18\x10 \x03(\x0b\x32(.gw.GatewayStats.TxPacketsPerStatusEntry\x1a/\n\rMetaDataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a<\n\x1aTxPacketsPerFrequencyEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12\r\n\x05value\x18\x02 \x01(\r:\x02\x38\x01\x1a<\n\x1aRxPacketsPerFrequencyEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12\r\n\x05value\x18\x02 \x01(\r:\x02\x38\x01\x1a\x39\n\x17TxPacketsPerStatusEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\r:\x02\x38\x01\"G\n\x12PerModulationCount\x12\"\n\nmodulation\x18\x01 \x01(\x0b\x32\x0e.gw.Modulation\x12\r\n\x05\x63ount\x18\x02 \x01(\r\"\x80\x05\n\x12UplinkRxInfoLegacy\x12\x12\n\ngateway_id\x18\x01 \x01(\x0c\x12(\n\x04time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x37\n\x14time_since_gps_epoch\x18\x03 \x01(\x0b\x32\x19.google.protobuf.Duration\x12\x0c\n\x04rssi\x18\x05 \x01(\x05\x12\x10\n\x08lora_snr\x18\x06 \x01(\x01\x12\x0f\n\x07\x63hannel\x18\x07 \x01(\r\x12\x10\n\x08rf_chain\x18\x08 \x01(\r\x12\r\n\x05\x62oard\x18\t \x01(\r\x12\x0f\n\x07\x61ntenna\x18\n \x01(\r\x12\"\n\x08location\x18\x0b \x01(\x0b\x32\x10.common.Location\x12\x32\n\x13\x66ine_timestamp_type\x18\x0c \x01(\x0e\x32\x15.gw.FineTimestampType\x12>\n\x18\x65ncrypted_fine_timestamp\x18\r \x01(\x0b\x32\x1a.gw.EncryptedFineTimestampH\x00\x12\x36\n\x14plain_fine_timestamp\x18\x0e \x01(\x0b\x32\x16.gw.PlainFineTimestampH\x00\x12\x0f\n\x07\x63ontext\x18\x0f \x01(\x0c\x12\x11\n\tuplink_id\x18\x10 \x01(\x0c\x12!\n\ncrc_status\x18\x11 \x01(\x0e\x32\r.gw.CRCStatus\x12\x36\n\x08metadata\x18\x12 \x03(\x0b\x32$.gw.UplinkRxInfoLegacy.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\x10\n\x0e\x66ine_timestamp\"\xf1\x02\n\x0cUplinkRxInfo\x12\x12\n\ngateway_id\x18\x01 \x01(\t\x12\x11\n\tuplink_id\x18\x02 \x01(\r\x12(\n\x04time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x37\n\x14time_since_gps_epoch\x18\x04 \x01(\x0b\x32\x19.google.protobuf.Duration\x12<\n\x19\x66ine_time_since_gps_epoch\x18\x05 \x01(\x0b\x32\x19.google.protobuf.Duration\x12\x0c\n\x04rssi\x18\x06 \x01(\x05\x12\x0b\n\x03snr\x18\x07 \x01(\x02\x12\r\n\x05\x62oard\x18\x08 \x01(\r\x12\x0f\n\x07\x61ntenna\x18\t \x01(\r\x12\"\n\x08location\x18\n \x01(\x0b\x32\x10.common.Location\x12\x0f\n\x07\x63ontext\x18\x0b \x01(\x0c\x12)\n\x08metadata\x18\x0c \x01(\x0b\x32\x17.google.protobuf.Struct\"\x82\x04\n\x14\x44ownlinkTxInfoLegacy\x12\x12\n\ngateway_id\x18\x01 \x01(\x0c\x12\x11\n\tfrequency\x18\x05 \x01(\r\x12\r\n\x05power\x18\x06 \x01(\x05\x12&\n\nmodulation\x18\x07 \x01(\x0e\x32\x12.common.Modulation\x12\x36\n\x14lora_modulation_info\x18\x08 \x01(\x0b\x32\x16.gw.LoraModulationInfoH\x00\x12\x34\n\x13\x66sk_modulation_info\x18\t \x01(\x0b\x32\x15.gw.FskModulationInfoH\x00\x12\r\n\x05\x62oard\x18\n \x01(\r\x12\x0f\n\x07\x61ntenna\x18\x0b \x01(\r\x12\"\n\x06timing\x18\x0c \x01(\x0e\x32\x12.gw.DownlinkTiming\x12<\n\x17immediately_timing_info\x18\r \x01(\x0b\x32\x19.gw.ImmediatelyTimingInfoH\x01\x12\x30\n\x11\x64\x65lay_timing_info\x18\x0e \x01(\x0b\x32\x13.gw.DelayTimingInfoH\x01\x12\x37\n\x15gps_epoch_timing_info\x18\x0f \x01(\x0b\x32\x16.gw.GPSEpochTimingInfoH\x01\x12\x0f\n\x07\x63ontext\x18\x10 \x01(\x0c\x42\x11\n\x0fmodulation_infoB\r\n\x0btiming_info\"\xa3\x01\n\x0e\x44ownlinkTxInfo\x12\x11\n\tfrequency\x18\x01 \x01(\r\x12\r\n\x05power\x18\x02 \x01(\x05\x12\"\n\nmodulation\x18\x03 \x01(\x0b\x32\x0e.gw.Modulation\x12\r\n\x05\x62oard\x18\x04 \x01(\r\x12\x0f\n\x07\x61ntenna\x18\x05 \x01(\r\x12\x1a\n\x06timing\x18\x06 \x01(\x0b\x32\n.gw.Timing\x12\x0f\n\x07\x63ontext\x18\x07 \x01(\x0c\"\x9b\x01\n\x06Timing\x12\x30\n\x0bimmediately\x18\x01 \x01(\x0b\x32\x19.gw.ImmediatelyTimingInfoH\x00\x12$\n\x05\x64\x65lay\x18\x02 \x01(\x0b\x32\x13.gw.DelayTimingInfoH\x00\x12+\n\tgps_epoch\x18\x03 \x01(\x0b\x32\x16.gw.GPSEpochTimingInfoH\x00\x42\x0c\n\nparameters\"\x17\n\x15ImmediatelyTimingInfo\";\n\x0f\x44\x65layTimingInfo\x12(\n\x05\x64\x65lay\x18\x01 \x01(\x0b\x32\x19.google.protobuf.Duration\"M\n\x12GPSEpochTimingInfo\x12\x37\n\x14time_since_gps_epoch\x18\x01 \x01(\x0b\x32\x19.google.protobuf.Duration\"\xc8\x01\n\x0bUplinkFrame\x12\x13\n\x0bphy_payload\x18\x01 \x01(\x0c\x12.\n\x0etx_info_legacy\x18\x02 \x01(\x0b\x32\x16.gw.UplinkTxInfoLegacy\x12.\n\x0erx_info_legacy\x18\x03 \x01(\x0b\x32\x16.gw.UplinkRxInfoLegacy\x12!\n\x07tx_info\x18\x04 \x01(\x0b\x32\x10.gw.UplinkTxInfo\x12!\n\x07rx_info\x18\x05 \x01(\x0b\x32\x10.gw.UplinkRxInfo\"k\n\x0eUplinkFrameSet\x12\x13\n\x0bphy_payload\x18\x01 \x01(\x0c\x12!\n\x07tx_info\x18\x02 \x01(\x0b\x32\x10.gw.UplinkTxInfo\x12!\n\x07rx_info\x18\x03 \x03(\x0b\x32\x10.gw.UplinkRxInfo\"\x95\x01\n\rDownlinkFrame\x12\x13\n\x0b\x64ownlink_id\x18\x03 \x01(\r\x12\x1a\n\x12\x64ownlink_id_legacy\x18\x04 \x01(\x0c\x12$\n\x05items\x18\x05 \x03(\x0b\x32\x15.gw.DownlinkFrameItem\x12\x19\n\x11gateway_id_legacy\x18\x06 \x01(\x0c\x12\x12\n\ngateway_id\x18\x07 \x01(\t\"\x7f\n\x11\x44ownlinkFrameItem\x12\x13\n\x0bphy_payload\x18\x01 \x01(\x0c\x12\x30\n\x0etx_info_legacy\x18\x02 \x01(\x0b\x32\x18.gw.DownlinkTxInfoLegacy\x12#\n\x07tx_info\x18\x03 \x01(\x0b\x32\x12.gw.DownlinkTxInfo\"\x95\x01\n\rDownlinkTxAck\x12\x19\n\x11gateway_id_legacy\x18\x01 \x01(\x0c\x12\x12\n\ngateway_id\x18\x06 \x01(\t\x12\x13\n\x0b\x64ownlink_id\x18\x02 \x01(\r\x12\x1a\n\x12\x64ownlink_id_legacy\x18\x04 \x01(\x0c\x12$\n\x05items\x18\x05 \x03(\x0b\x32\x15.gw.DownlinkTxAckItem\"4\n\x11\x44ownlinkTxAckItem\x12\x1f\n\x06status\x18\x01 \x01(\x0e\x32\x0f.gw.TxAckStatus\"\xb5\x01\n\x14GatewayConfiguration\x12\x19\n\x11gateway_id_legacy\x18\x01 \x01(\x0c\x12\x12\n\ngateway_id\x18\x05 \x01(\t\x12\x0f\n\x07version\x18\x02 \x01(\t\x12*\n\x08\x63hannels\x18\x03 \x03(\x0b\x32\x18.gw.ChannelConfiguration\x12\x31\n\x0estats_interval\x18\x04 \x01(\x0b\x32\x19.google.protobuf.Duration\"\x87\x02\n\x14\x43hannelConfiguration\x12\x11\n\tfrequency\x18\x01 \x01(\r\x12-\n\x11modulation_legacy\x18\x02 \x01(\x0e\x32\x12.common.Modulation\x12:\n\x16lora_modulation_config\x18\x03 \x01(\x0b\x32\x18.gw.LoraModulationConfigH\x00\x12\x38\n\x15\x66sk_modulation_config\x18\x04 \x01(\x0b\x32\x17.gw.FskModulationConfigH\x00\x12\r\n\x05\x62oard\x18\x05 \x01(\r\x12\x13\n\x0b\x64\x65modulator\x18\x06 \x01(\rB\x13\n\x11modulation_config\"^\n\x14LoraModulationConfig\x12\x18\n\x10\x62\x61ndwidth_legacy\x18\x01 \x01(\r\x12\x11\n\tbandwidth\x18\x03 \x01(\r\x12\x19\n\x11spreading_factors\x18\x02 \x03(\r\"S\n\x13\x46skModulationConfig\x12\x18\n\x10\x62\x61ndwidth_legacy\x18\x01 \x01(\r\x12\x11\n\tbandwidth\x18\x03 \x01(\r\x12\x0f\n\x07\x62itrate\x18\x02 \x01(\r\"\xf3\x01\n\x19GatewayCommandExecRequest\x12\x19\n\x11gateway_id_legacy\x18\x01 \x01(\x0c\x12\x12\n\ngateway_id\x18\x06 \x01(\t\x12\x0f\n\x07\x63ommand\x18\x02 \x01(\t\x12\x0e\n\x06\x45xecId\x18\x03 \x01(\x0c\x12\r\n\x05stdin\x18\x04 \x01(\x0c\x12\x43\n\x0b\x65nvironment\x18\x05 \x03(\x0b\x32..gw.GatewayCommandExecRequest.EnvironmentEntry\x1a\x32\n\x10\x45nvironmentEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x8b\x01\n\x1aGatewayCommandExecResponse\x12\x19\n\x11gateway_id_legacy\x18\x01 \x01(\x0c\x12\x12\n\ngateway_id\x18\x06 \x01(\t\x12\x0f\n\x07\x65xec_id\x18\x02 \x01(\x0c\x12\x0e\n\x06stdout\x18\x03 \x01(\x0c\x12\x0e\n\x06stderr\x18\x04 \x01(\x0c\x12\r\n\x05\x65rror\x18\x05 \x01(\t\"i\n\x17RawPacketForwarderEvent\x12\x19\n\x11gateway_id_legacy\x18\x01 \x01(\x0c\x12\x12\n\ngateway_id\x18\x04 \x01(\t\x12\x0e\n\x06raw_id\x18\x02 \x01(\x0c\x12\x0f\n\x07payload\x18\x03 \x01(\x0c\"k\n\x19RawPacketForwarderCommand\x12\x19\n\x11gateway_id_legacy\x18\x01 \x01(\x0c\x12\x12\n\ngateway_id\x18\x04 \x01(\t\x12\x0e\n\x06raw_id\x18\x02 \x01(\x0c\x12\x0f\n\x07payload\x18\x03 \x01(\x0c\"\x80\x01\n\tConnState\x12\x19\n\x11gateway_id_legacy\x18\x01 \x01(\x0c\x12\x12\n\ngateway_id\x18\x03 \x01(\t\x12\"\n\x05state\x18\x02 \x01(\x0e\x32\x13.gw.ConnState.State\" \n\x05State\x12\x0b\n\x07OFFLINE\x10\x00\x12\n\n\x06ONLINE\x10\x01*\x88\x01\n\x08\x43odeRate\x12\x10\n\x0c\x43R_UNDEFINED\x10\x00\x12\n\n\x06\x43R_4_5\x10\x01\x12\n\n\x06\x43R_4_6\x10\x02\x12\n\n\x06\x43R_4_7\x10\x03\x12\n\n\x06\x43R_4_8\x10\x04\x12\n\n\x06\x43R_3_8\x10\x05\x12\n\n\x06\x43R_2_6\x10\x06\x12\n\n\x06\x43R_1_4\x10\x07\x12\n\n\x06\x43R_1_6\x10\x08\x12\n\n\x06\x43R_5_6\x10\t*;\n\x0e\x44ownlinkTiming\x12\x0f\n\x0bIMMEDIATELY\x10\x00\x12\t\n\x05\x44\x45LAY\x10\x01\x12\r\n\tGPS_EPOCH\x10\x02*7\n\x11\x46ineTimestampType\x12\x08\n\x04NONE\x10\x00\x12\r\n\tENCRYPTED\x10\x01\x12\t\n\x05PLAIN\x10\x02*0\n\tCRCStatus\x12\n\n\x06NO_CRC\x10\x00\x12\x0b\n\x07\x42\x41\x44_CRC\x10\x01\x12\n\n\x06\x43RC_OK\x10\x02*\xbc\x01\n\x0bTxAckStatus\x12\x0b\n\x07IGNORED\x10\x00\x12\x06\n\x02OK\x10\x01\x12\x0c\n\x08TOO_LATE\x10\x02\x12\r\n\tTOO_EARLY\x10\x03\x12\x14\n\x10\x43OLLISION_PACKET\x10\x04\x12\x14\n\x10\x43OLLISION_BEACON\x10\x05\x12\x0b\n\x07TX_FREQ\x10\x06\x12\x0c\n\x08TX_POWER\x10\x07\x12\x10\n\x0cGPS_UNLOCKED\x10\x08\x12\x0e\n\nQUEUE_FULL\x10\t\x12\x12\n\x0eINTERNAL_ERROR\x10\nBU\n\x14io.chirpstack.api.gwB\x0cGatewayProtoP\x01Z-github.com/chirpstack/chirpstack/api/go/v4/gwb\x06proto3')
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1a\x63hirpstack-api/gw/gw.proto\x12\x02gw\x1a\"chirpstack-api/common/common.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1cgoogle/protobuf/struct.proto\"\x95\x01\n\nModulation\x12&\n\x04lora\x18\x03 \x01(\x0b\x32\x16.gw.LoraModulationInfoH\x00\x12$\n\x03\x66sk\x18\x04 \x01(\x0b\x32\x15.gw.FskModulationInfoH\x00\x12+\n\x07lr_fhss\x18\x05 \x01(\x0b\x32\x18.gw.LrFhssModulationInfoH\x00\x42\x0c\n\nparameters\"\x8d\x02\n\x12UplinkTxInfoLegacy\x12\x11\n\tfrequency\x18\x01 \x01(\r\x12&\n\nmodulation\x18\x02 \x01(\x0e\x32\x12.common.Modulation\x12\x36\n\x14lora_modulation_info\x18\x03 \x01(\x0b\x32\x16.gw.LoraModulationInfoH\x00\x12\x34\n\x13\x66sk_modulation_info\x18\x04 \x01(\x0b\x32\x15.gw.FskModulationInfoH\x00\x12;\n\x17lr_fhss_modulation_info\x18\x05 \x01(\x0b\x32\x18.gw.LrFhssModulationInfoH\x00\x42\x11\n\x0fmodulation_info\"E\n\x0cUplinkTxInfo\x12\x11\n\tfrequency\x18\x01 \x01(\r\x12\"\n\nmodulation\x18\x02 \x01(\x0b\x32\x0e.gw.Modulation\"\x9c\x01\n\x12LoraModulationInfo\x12\x11\n\tbandwidth\x18\x01 \x01(\r\x12\x18\n\x10spreading_factor\x18\x02 \x01(\r\x12\x18\n\x10\x63ode_rate_legacy\x18\x03 \x01(\t\x12\x1f\n\tcode_rate\x18\x05 \x01(\x0e\x32\x0c.gw.CodeRate\x12\x1e\n\x16polarization_inversion\x18\x04 \x01(\x08\"B\n\x11\x46skModulationInfo\x12\x1b\n\x13\x66requency_deviation\x18\x01 \x01(\r\x12\x10\n\x08\x64\x61tarate\x18\x02 \x01(\r\"\x86\x01\n\x14LrFhssModulationInfo\x12\x1f\n\x17operating_channel_width\x18\x01 \x01(\r\x12\x18\n\x10\x63ode_rate_legacy\x18\x02 \x01(\t\x12\x1f\n\tcode_rate\x18\x04 \x01(\x0e\x32\x0c.gw.CodeRate\x12\x12\n\ngrid_steps\x18\x03 \x01(\r\"V\n\x16\x45ncryptedFineTimestamp\x12\x15\n\raes_key_index\x18\x01 \x01(\r\x12\x14\n\x0c\x65ncrypted_ns\x18\x02 \x01(\x0c\x12\x0f\n\x07\x66pga_id\x18\x03 \x01(\x0c\">\n\x12PlainFineTimestamp\x12(\n\x04time\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"\x91\x07\n\x0cGatewayStats\x12\x19\n\x11gateway_id_legacy\x18\x01 \x01(\x0c\x12\x12\n\ngateway_id\x18\x11 \x01(\t\x12(\n\x04time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\"\n\x08location\x18\x03 \x01(\x0b\x32\x10.common.Location\x12\x16\n\x0e\x63onfig_version\x18\x04 \x01(\t\x12\x1b\n\x13rx_packets_received\x18\x05 \x01(\r\x12\x1e\n\x16rx_packets_received_ok\x18\x06 \x01(\r\x12\x1b\n\x13tx_packets_received\x18\x07 \x01(\r\x12\x1a\n\x12tx_packets_emitted\x18\x08 \x01(\r\x12\x31\n\tmeta_data\x18\n \x03(\x0b\x32\x1e.gw.GatewayStats.MetaDataEntry\x12M\n\x18tx_packets_per_frequency\x18\x0c \x03(\x0b\x32+.gw.GatewayStats.TxPacketsPerFrequencyEntry\x12M\n\x18rx_packets_per_frequency\x18\r \x03(\x0b\x32+.gw.GatewayStats.RxPacketsPerFrequencyEntry\x12\x39\n\x19tx_packets_per_modulation\x18\x0e \x03(\x0b\x32\x16.gw.PerModulationCount\x12\x39\n\x19rx_packets_per_modulation\x18\x0f \x03(\x0b\x32\x16.gw.PerModulationCount\x12G\n\x15tx_packets_per_status\x18\x10 \x03(\x0b\x32(.gw.GatewayStats.TxPacketsPerStatusEntry\x1a/\n\rMetaDataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a<\n\x1aTxPacketsPerFrequencyEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12\r\n\x05value\x18\x02 \x01(\r:\x02\x38\x01\x1a<\n\x1aRxPacketsPerFrequencyEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12\r\n\x05value\x18\x02 \x01(\r:\x02\x38\x01\x1a\x39\n\x17TxPacketsPerStatusEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\r:\x02\x38\x01\"G\n\x12PerModulationCount\x12\"\n\nmodulation\x18\x01 \x01(\x0b\x32\x0e.gw.Modulation\x12\r\n\x05\x63ount\x18\x02 \x01(\r\"\x80\x05\n\x12UplinkRxInfoLegacy\x12\x12\n\ngateway_id\x18\x01 \x01(\x0c\x12(\n\x04time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x37\n\x14time_since_gps_epoch\x18\x03 \x01(\x0b\x32\x19.google.protobuf.Duration\x12\x0c\n\x04rssi\x18\x05 \x01(\x05\x12\x10\n\x08lora_snr\x18\x06 \x01(\x01\x12\x0f\n\x07\x63hannel\x18\x07 \x01(\r\x12\x10\n\x08rf_chain\x18\x08 \x01(\r\x12\r\n\x05\x62oard\x18\t \x01(\r\x12\x0f\n\x07\x61ntenna\x18\n \x01(\r\x12\"\n\x08location\x18\x0b \x01(\x0b\x32\x10.common.Location\x12\x32\n\x13\x66ine_timestamp_type\x18\x0c \x01(\x0e\x32\x15.gw.FineTimestampType\x12>\n\x18\x65ncrypted_fine_timestamp\x18\r \x01(\x0b\x32\x1a.gw.EncryptedFineTimestampH\x00\x12\x36\n\x14plain_fine_timestamp\x18\x0e \x01(\x0b\x32\x16.gw.PlainFineTimestampH\x00\x12\x0f\n\x07\x63ontext\x18\x0f \x01(\x0c\x12\x11\n\tuplink_id\x18\x10 \x01(\x0c\x12!\n\ncrc_status\x18\x11 \x01(\x0e\x32\r.gw.CRCStatus\x12\x36\n\x08metadata\x18\x12 \x03(\x0b\x32$.gw.UplinkRxInfoLegacy.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\x10\n\x0e\x66ine_timestamp\"\xf1\x02\n\x0cUplinkRxInfo\x12\x12\n\ngateway_id\x18\x01 \x01(\t\x12\x11\n\tuplink_id\x18\x02 \x01(\r\x12(\n\x04time\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x37\n\x14time_since_gps_epoch\x18\x04 \x01(\x0b\x32\x19.google.protobuf.Duration\x12<\n\x19\x66ine_time_since_gps_epoch\x18\x05 \x01(\x0b\x32\x19.google.protobuf.Duration\x12\x0c\n\x04rssi\x18\x06 \x01(\x05\x12\x0b\n\x03snr\x18\x07 \x01(\x02\x12\r\n\x05\x62oard\x18\x08 \x01(\r\x12\x0f\n\x07\x61ntenna\x18\t \x01(\r\x12\"\n\x08location\x18\n \x01(\x0b\x32\x10.common.Location\x12\x0f\n\x07\x63ontext\x18\x0b \x01(\x0c\x12)\n\x08metadata\x18\x0c \x01(\x0b\x32\x17.google.protobuf.Struct\"\x82\x04\n\x14\x44ownlinkTxInfoLegacy\x12\x12\n\ngateway_id\x18\x01 \x01(\x0c\x12\x11\n\tfrequency\x18\x05 \x01(\r\x12\r\n\x05power\x18\x06 \x01(\x05\x12&\n\nmodulation\x18\x07 \x01(\x0e\x32\x12.common.Modulation\x12\x36\n\x14lora_modulation_info\x18\x08 \x01(\x0b\x32\x16.gw.LoraModulationInfoH\x00\x12\x34\n\x13\x66sk_modulation_info\x18\t \x01(\x0b\x32\x15.gw.FskModulationInfoH\x00\x12\r\n\x05\x62oard\x18\n \x01(\r\x12\x0f\n\x07\x61ntenna\x18\x0b \x01(\r\x12\"\n\x06timing\x18\x0c \x01(\x0e\x32\x12.gw.DownlinkTiming\x12<\n\x17immediately_timing_info\x18\r \x01(\x0b\x32\x19.gw.ImmediatelyTimingInfoH\x01\x12\x30\n\x11\x64\x65lay_timing_info\x18\x0e \x01(\x0b\x32\x13.gw.DelayTimingInfoH\x01\x12\x37\n\x15gps_epoch_timing_info\x18\x0f \x01(\x0b\x32\x16.gw.GPSEpochTimingInfoH\x01\x12\x0f\n\x07\x63ontext\x18\x10 \x01(\x0c\x42\x11\n\x0fmodulation_infoB\r\n\x0btiming_info\"\xa3\x01\n\x0e\x44ownlinkTxInfo\x12\x11\n\tfrequency\x18\x01 \x01(\r\x12\r\n\x05power\x18\x02 \x01(\x05\x12\"\n\nmodulation\x18\x03 \x01(\x0b\x32\x0e.gw.Modulation\x12\r\n\x05\x62oard\x18\x04 \x01(\r\x12\x0f\n\x07\x61ntenna\x18\x05 \x01(\r\x12\x1a\n\x06timing\x18\x06 \x01(\x0b\x32\n.gw.Timing\x12\x0f\n\x07\x63ontext\x18\x07 \x01(\x0c\"\x9b\x01\n\x06Timing\x12\x30\n\x0bimmediately\x18\x01 \x01(\x0b\x32\x19.gw.ImmediatelyTimingInfoH\x00\x12$\n\x05\x64\x65lay\x18\x02 \x01(\x0b\x32\x13.gw.DelayTimingInfoH\x00\x12+\n\tgps_epoch\x18\x03 \x01(\x0b\x32\x16.gw.GPSEpochTimingInfoH\x00\x42\x0c\n\nparameters\"\x17\n\x15ImmediatelyTimingInfo\";\n\x0f\x44\x65layTimingInfo\x12(\n\x05\x64\x65lay\x18\x01 \x01(\x0b\x32\x19.google.protobuf.Duration\"M\n\x12GPSEpochTimingInfo\x12\x37\n\x14time_since_gps_epoch\x18\x01 \x01(\x0b\x32\x19.google.protobuf.Duration\"\xc8\x01\n\x0bUplinkFrame\x12\x13\n\x0bphy_payload\x18\x01 \x01(\x0c\x12.\n\x0etx_info_legacy\x18\x02 \x01(\x0b\x32\x16.gw.UplinkTxInfoLegacy\x12.\n\x0erx_info_legacy\x18\x03 \x01(\x0b\x32\x16.gw.UplinkRxInfoLegacy\x12!\n\x07tx_info\x18\x04 \x01(\x0b\x32\x10.gw.UplinkTxInfo\x12!\n\x07rx_info\x18\x05 \x01(\x0b\x32\x10.gw.UplinkRxInfo\"k\n\x0eUplinkFrameSet\x12\x13\n\x0bphy_payload\x18\x01 \x01(\x0c\x12!\n\x07tx_info\x18\x02 \x01(\x0b\x32\x10.gw.UplinkTxInfo\x12!\n\x07rx_info\x18\x03 \x03(\x0b\x32\x10.gw.UplinkRxInfo\"\x95\x01\n\rDownlinkFrame\x12\x13\n\x0b\x64ownlink_id\x18\x03 \x01(\r\x12\x1a\n\x12\x64ownlink_id_legacy\x18\x04 \x01(\x0c\x12$\n\x05items\x18\x05 \x03(\x0b\x32\x15.gw.DownlinkFrameItem\x12\x19\n\x11gateway_id_legacy\x18\x06 \x01(\x0c\x12\x12\n\ngateway_id\x18\x07 \x01(\t\"\x7f\n\x11\x44ownlinkFrameItem\x12\x13\n\x0bphy_payload\x18\x01 \x01(\x0c\x12\x30\n\x0etx_info_legacy\x18\x02 \x01(\x0b\x32\x18.gw.DownlinkTxInfoLegacy\x12#\n\x07tx_info\x18\x03 \x01(\x0b\x32\x12.gw.DownlinkTxInfo\"\x95\x01\n\rDownlinkTxAck\x12\x19\n\x11gateway_id_legacy\x18\x01 \x01(\x0c\x12\x12\n\ngateway_id\x18\x06 \x01(\t\x12\x13\n\x0b\x64ownlink_id\x18\x02 \x01(\r\x12\x1a\n\x12\x64ownlink_id_legacy\x18\x04 \x01(\x0c\x12$\n\x05items\x18\x05 \x03(\x0b\x32\x15.gw.DownlinkTxAckItem\"4\n\x11\x44ownlinkTxAckItem\x12\x1f\n\x06status\x18\x01 \x01(\x0e\x32\x0f.gw.TxAckStatus\"\xb5\x01\n\x14GatewayConfiguration\x12\x19\n\x11gateway_id_legacy\x18\x01 \x01(\x0c\x12\x12\n\ngateway_id\x18\x05 \x01(\t\x12\x0f\n\x07version\x18\x02 \x01(\t\x12*\n\x08\x63hannels\x18\x03 \x03(\x0b\x32\x18.gw.ChannelConfiguration\x12\x31\n\x0estats_interval\x18\x04 \x01(\x0b\x32\x19.google.protobuf.Duration\"\x87\x02\n\x14\x43hannelConfiguration\x12\x11\n\tfrequency\x18\x01 \x01(\r\x12-\n\x11modulation_legacy\x18\x02 \x01(\x0e\x32\x12.common.Modulation\x12:\n\x16lora_modulation_config\x18\x03 \x01(\x0b\x32\x18.gw.LoraModulationConfigH\x00\x12\x38\n\x15\x66sk_modulation_config\x18\x04 \x01(\x0b\x32\x17.gw.FskModulationConfigH\x00\x12\r\n\x05\x62oard\x18\x05 \x01(\r\x12\x13\n\x0b\x64\x65modulator\x18\x06 \x01(\rB\x13\n\x11modulation_config\"^\n\x14LoraModulationConfig\x12\x18\n\x10\x62\x61ndwidth_legacy\x18\x01 \x01(\r\x12\x11\n\tbandwidth\x18\x03 \x01(\r\x12\x19\n\x11spreading_factors\x18\x02 \x03(\r\"S\n\x13\x46skModulationConfig\x12\x18\n\x10\x62\x61ndwidth_legacy\x18\x01 \x01(\r\x12\x11\n\tbandwidth\x18\x03 \x01(\r\x12\x0f\n\x07\x62itrate\x18\x02 \x01(\r\"\xf4\x01\n\x19GatewayCommandExecRequest\x12\x19\n\x11gateway_id_legacy\x18\x01 \x01(\x0c\x12\x12\n\ngateway_id\x18\x06 \x01(\t\x12\x0f\n\x07\x63ommand\x18\x02 \x01(\t\x12\x0f\n\x07\x65xec_id\x18\x07 \x01(\r\x12\r\n\x05stdin\x18\x04 \x01(\x0c\x12\x43\n\x0b\x65nvironment\x18\x05 \x03(\x0b\x32..gw.GatewayCommandExecRequest.EnvironmentEntry\x1a\x32\n\x10\x45nvironmentEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x8b\x01\n\x1aGatewayCommandExecResponse\x12\x19\n\x11gateway_id_legacy\x18\x01 \x01(\x0c\x12\x12\n\ngateway_id\x18\x06 \x01(\t\x12\x0f\n\x07\x65xec_id\x18\x07 \x01(\r\x12\x0e\n\x06stdout\x18\x03 \x01(\x0c\x12\x0e\n\x06stderr\x18\x04 \x01(\x0c\x12\r\n\x05\x65rror\x18\x05 \x01(\t\"Y\n\x17RawPacketForwarderEvent\x12\x19\n\x11gateway_id_legacy\x18\x01 \x01(\x0c\x12\x12\n\ngateway_id\x18\x04 \x01(\t\x12\x0f\n\x07payload\x18\x03 \x01(\x0c\"[\n\x19RawPacketForwarderCommand\x12\x19\n\x11gateway_id_legacy\x18\x01 \x01(\x0c\x12\x12\n\ngateway_id\x18\x04 \x01(\t\x12\x0f\n\x07payload\x18\x03 \x01(\x0c\"\x80\x01\n\tConnState\x12\x19\n\x11gateway_id_legacy\x18\x01 \x01(\x0c\x12\x12\n\ngateway_id\x18\x03 \x01(\t\x12\"\n\x05state\x18\x02 \x01(\x0e\x32\x13.gw.ConnState.State\" \n\x05State\x12\x0b\n\x07OFFLINE\x10\x00\x12\n\n\x06ONLINE\x10\x01*\x88\x01\n\x08\x43odeRate\x12\x10\n\x0c\x43R_UNDEFINED\x10\x00\x12\n\n\x06\x43R_4_5\x10\x01\x12\n\n\x06\x43R_4_6\x10\x02\x12\n\n\x06\x43R_4_7\x10\x03\x12\n\n\x06\x43R_4_8\x10\x04\x12\n\n\x06\x43R_3_8\x10\x05\x12\n\n\x06\x43R_2_6\x10\x06\x12\n\n\x06\x43R_1_4\x10\x07\x12\n\n\x06\x43R_1_6\x10\x08\x12\n\n\x06\x43R_5_6\x10\t*;\n\x0e\x44ownlinkTiming\x12\x0f\n\x0bIMMEDIATELY\x10\x00\x12\t\n\x05\x44\x45LAY\x10\x01\x12\r\n\tGPS_EPOCH\x10\x02*7\n\x11\x46ineTimestampType\x12\x08\n\x04NONE\x10\x00\x12\r\n\tENCRYPTED\x10\x01\x12\t\n\x05PLAIN\x10\x02*0\n\tCRCStatus\x12\n\n\x06NO_CRC\x10\x00\x12\x0b\n\x07\x42\x41\x44_CRC\x10\x01\x12\n\n\x06\x43RC_OK\x10\x02*\xbc\x01\n\x0bTxAckStatus\x12\x0b\n\x07IGNORED\x10\x00\x12\x06\n\x02OK\x10\x01\x12\x0c\n\x08TOO_LATE\x10\x02\x12\r\n\tTOO_EARLY\x10\x03\x12\x14\n\x10\x43OLLISION_PACKET\x10\x04\x12\x14\n\x10\x43OLLISION_BEACON\x10\x05\x12\x0b\n\x07TX_FREQ\x10\x06\x12\x0c\n\x08TX_POWER\x10\x07\x12\x10\n\x0cGPS_UNLOCKED\x10\x08\x12\x0e\n\nQUEUE_FULL\x10\t\x12\x12\n\x0eINTERNAL_ERROR\x10\nBU\n\x14io.chirpstack.api.gwB\x0cGatewayProtoP\x01Z-github.com/chirpstack/chirpstack/api/go/v4/gwb\x06proto3')
 
 _CODERATE = DESCRIPTOR.enum_types_by_name['CodeRate']
 CodeRate = enum_type_wrapper.EnumTypeWrapper(_CODERATE)
@@ -398,16 +398,16 @@ if _descriptor._USE_C_DESCRIPTORS == False:
   _UPLINKRXINFOLEGACY_METADATAENTRY._serialized_options = b'8\001'
   _GATEWAYCOMMANDEXECREQUEST_ENVIRONMENTENTRY._options = None
   _GATEWAYCOMMANDEXECREQUEST_ENVIRONMENTENTRY._serialized_options = b'8\001'
-  _CODERATE._serialized_start=6352
-  _CODERATE._serialized_end=6488
-  _DOWNLINKTIMING._serialized_start=6490
-  _DOWNLINKTIMING._serialized_end=6549
-  _FINETIMESTAMPTYPE._serialized_start=6551
-  _FINETIMESTAMPTYPE._serialized_end=6606
-  _CRCSTATUS._serialized_start=6608
-  _CRCSTATUS._serialized_end=6656
-  _TXACKSTATUS._serialized_start=6659
-  _TXACKSTATUS._serialized_end=6847
+  _CODERATE._serialized_start=6321
+  _CODERATE._serialized_end=6457
+  _DOWNLINKTIMING._serialized_start=6459
+  _DOWNLINKTIMING._serialized_end=6518
+  _FINETIMESTAMPTYPE._serialized_start=6520
+  _FINETIMESTAMPTYPE._serialized_end=6575
+  _CRCSTATUS._serialized_start=6577
+  _CRCSTATUS._serialized_end=6625
+  _TXACKSTATUS._serialized_start=6628
+  _TXACKSTATUS._serialized_end=6816
   _MODULATION._serialized_start=166
   _MODULATION._serialized_end=315
   _UPLINKTXINFOLEGACY._serialized_start=318
@@ -475,17 +475,17 @@ if _descriptor._USE_C_DESCRIPTORS == False:
   _FSKMODULATIONCONFIG._serialized_start=5531
   _FSKMODULATIONCONFIG._serialized_end=5614
   _GATEWAYCOMMANDEXECREQUEST._serialized_start=5617
-  _GATEWAYCOMMANDEXECREQUEST._serialized_end=5860
-  _GATEWAYCOMMANDEXECREQUEST_ENVIRONMENTENTRY._serialized_start=5810
-  _GATEWAYCOMMANDEXECREQUEST_ENVIRONMENTENTRY._serialized_end=5860
-  _GATEWAYCOMMANDEXECRESPONSE._serialized_start=5863
-  _GATEWAYCOMMANDEXECRESPONSE._serialized_end=6002
-  _RAWPACKETFORWARDEREVENT._serialized_start=6004
-  _RAWPACKETFORWARDEREVENT._serialized_end=6109
-  _RAWPACKETFORWARDERCOMMAND._serialized_start=6111
-  _RAWPACKETFORWARDERCOMMAND._serialized_end=6218
-  _CONNSTATE._serialized_start=6221
-  _CONNSTATE._serialized_end=6349
-  _CONNSTATE_STATE._serialized_start=6317
-  _CONNSTATE_STATE._serialized_end=6349
+  _GATEWAYCOMMANDEXECREQUEST._serialized_end=5861
+  _GATEWAYCOMMANDEXECREQUEST_ENVIRONMENTENTRY._serialized_start=5811
+  _GATEWAYCOMMANDEXECREQUEST_ENVIRONMENTENTRY._serialized_end=5861
+  _GATEWAYCOMMANDEXECRESPONSE._serialized_start=5864
+  _GATEWAYCOMMANDEXECRESPONSE._serialized_end=6003
+  _RAWPACKETFORWARDEREVENT._serialized_start=6005
+  _RAWPACKETFORWARDEREVENT._serialized_end=6094
+  _RAWPACKETFORWARDERCOMMAND._serialized_start=6096
+  _RAWPACKETFORWARDERCOMMAND._serialized_end=6187
+  _CONNSTATE._serialized_start=6190
+  _CONNSTATE._serialized_end=6318
+  _CONNSTATE_STATE._serialized_start=6286
+  _CONNSTATE_STATE._serialized_end=6318
 # @@protoc_insertion_point(module_scope)
diff --git a/api/rust/proto/chirpstack/gw/gw.proto b/api/rust/proto/chirpstack/gw/gw.proto
index 0a3860b2..e711b93f 100644
--- a/api/rust/proto/chirpstack/gw/gw.proto
+++ b/api/rust/proto/chirpstack/gw/gw.proto
@@ -608,10 +608,10 @@ message GatewayCommandExecRequest {
     // This command must be pre-configured in the LoRa Gateway Bridge configuration.
     string command = 2;
 
-    // Execution request ID (UUID).
-    // The same token will be returned when the execution of the command has
+    // Execution request ID.
+    // The same will be returned when the execution of the command has
     // completed.
-    bytes ExecId = 3;
+    uint32 exec_id = 7;
 
     // Standard input.
     bytes stdin = 4;
@@ -628,8 +628,8 @@ message GatewayCommandExecResponse {
     // Gateway ID.
     string gateway_id = 6;
 
-    // Execution request ID (UUID).
-    bytes exec_id = 2;
+    // Execution request ID.
+    uint32 exec_id = 7;
 
     // Standard output.
     bytes stdout = 3;
@@ -652,9 +652,6 @@ message RawPacketForwarderEvent {
     // Gateway ID.
     string gateway_id = 4;
 
-    // Raw ID (UUID).
-    bytes raw_id = 2;
-
     // Payload contains the raw payload.
     bytes payload = 3;
 }
@@ -670,9 +667,6 @@ message RawPacketForwarderCommand {
     // Gateway ID.
     string gateway_id = 4;
 
-    // Raw ID (UUID).
-    bytes raw_id = 2;
-
     // Payload contains the raw payload.
     bytes payload = 3;
 }