// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// 	protoc-gen-go v1.36.6
// 	protoc        v6.30.2
// source: gw/gw.proto

package gw

import (
	common "github.com/chirpstack/chirpstack/api/go/v4/common"
	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
	durationpb "google.golang.org/protobuf/types/known/durationpb"
	_ "google.golang.org/protobuf/types/known/structpb"
	timestamppb "google.golang.org/protobuf/types/known/timestamppb"
	reflect "reflect"
	sync "sync"
	unsafe "unsafe"
)

const (
	// Verify that this generated code is sufficiently up-to-date.
	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
	// Verify that runtime/protoimpl is sufficiently up-to-date.
	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)

type CodeRate int32

const (
	CodeRate_CR_UNDEFINED CodeRate = 0
	CodeRate_CR_4_5       CodeRate = 1 // LoRa
	CodeRate_CR_4_6       CodeRate = 2
	CodeRate_CR_4_7       CodeRate = 3
	CodeRate_CR_4_8       CodeRate = 4
	CodeRate_CR_3_8       CodeRate = 5 // LR-FHSS
	CodeRate_CR_2_6       CodeRate = 6
	CodeRate_CR_1_4       CodeRate = 7
	CodeRate_CR_1_6       CodeRate = 8
	CodeRate_CR_5_6       CodeRate = 9
	CodeRate_CR_LI_4_5    CodeRate = 10 // LoRa 2.4 gHz
	CodeRate_CR_LI_4_6    CodeRate = 11
	CodeRate_CR_LI_4_8    CodeRate = 12
)

// Enum value maps for CodeRate.
var (
	CodeRate_name = map[int32]string{
		0:  "CR_UNDEFINED",
		1:  "CR_4_5",
		2:  "CR_4_6",
		3:  "CR_4_7",
		4:  "CR_4_8",
		5:  "CR_3_8",
		6:  "CR_2_6",
		7:  "CR_1_4",
		8:  "CR_1_6",
		9:  "CR_5_6",
		10: "CR_LI_4_5",
		11: "CR_LI_4_6",
		12: "CR_LI_4_8",
	}
	CodeRate_value = map[string]int32{
		"CR_UNDEFINED": 0,
		"CR_4_5":       1,
		"CR_4_6":       2,
		"CR_4_7":       3,
		"CR_4_8":       4,
		"CR_3_8":       5,
		"CR_2_6":       6,
		"CR_1_4":       7,
		"CR_1_6":       8,
		"CR_5_6":       9,
		"CR_LI_4_5":    10,
		"CR_LI_4_6":    11,
		"CR_LI_4_8":    12,
	}
)

func (x CodeRate) Enum() *CodeRate {
	p := new(CodeRate)
	*p = x
	return p
}

func (x CodeRate) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (CodeRate) Descriptor() protoreflect.EnumDescriptor {
	return file_gw_gw_proto_enumTypes[0].Descriptor()
}

func (CodeRate) Type() protoreflect.EnumType {
	return &file_gw_gw_proto_enumTypes[0]
}

func (x CodeRate) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use CodeRate.Descriptor instead.
func (CodeRate) EnumDescriptor() ([]byte, []int) {
	return file_gw_gw_proto_rawDescGZIP(), []int{0}
}

type DownlinkTiming int32

const (
	// Send the downlink immediately.
	DownlinkTiming_IMMEDIATELY DownlinkTiming = 0
	// Send downlink at the given delay (based on provided context).
	DownlinkTiming_DELAY DownlinkTiming = 1
	// Send at given GPS epoch value.
	DownlinkTiming_GPS_EPOCH DownlinkTiming = 2
)

// Enum value maps for DownlinkTiming.
var (
	DownlinkTiming_name = map[int32]string{
		0: "IMMEDIATELY",
		1: "DELAY",
		2: "GPS_EPOCH",
	}
	DownlinkTiming_value = map[string]int32{
		"IMMEDIATELY": 0,
		"DELAY":       1,
		"GPS_EPOCH":   2,
	}
)

func (x DownlinkTiming) Enum() *DownlinkTiming {
	p := new(DownlinkTiming)
	*p = x
	return p
}

func (x DownlinkTiming) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (DownlinkTiming) Descriptor() protoreflect.EnumDescriptor {
	return file_gw_gw_proto_enumTypes[1].Descriptor()
}

func (DownlinkTiming) Type() protoreflect.EnumType {
	return &file_gw_gw_proto_enumTypes[1]
}

func (x DownlinkTiming) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use DownlinkTiming.Descriptor instead.
func (DownlinkTiming) EnumDescriptor() ([]byte, []int) {
	return file_gw_gw_proto_rawDescGZIP(), []int{1}
}

type FineTimestampType int32

const (
	// No fine-timestamp available.
	FineTimestampType_NONE FineTimestampType = 0
	// Encrypted fine-timestamp.
	FineTimestampType_ENCRYPTED FineTimestampType = 1
	// Plain fine-timestamp.
	FineTimestampType_PLAIN FineTimestampType = 2
)

// Enum value maps for FineTimestampType.
var (
	FineTimestampType_name = map[int32]string{
		0: "NONE",
		1: "ENCRYPTED",
		2: "PLAIN",
	}
	FineTimestampType_value = map[string]int32{
		"NONE":      0,
		"ENCRYPTED": 1,
		"PLAIN":     2,
	}
)

func (x FineTimestampType) Enum() *FineTimestampType {
	p := new(FineTimestampType)
	*p = x
	return p
}

func (x FineTimestampType) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (FineTimestampType) Descriptor() protoreflect.EnumDescriptor {
	return file_gw_gw_proto_enumTypes[2].Descriptor()
}

func (FineTimestampType) Type() protoreflect.EnumType {
	return &file_gw_gw_proto_enumTypes[2]
}

func (x FineTimestampType) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use FineTimestampType.Descriptor instead.
func (FineTimestampType) EnumDescriptor() ([]byte, []int) {
	return file_gw_gw_proto_rawDescGZIP(), []int{2}
}

type CRCStatus int32

const (
	// No CRC.
	CRCStatus_NO_CRC CRCStatus = 0
	// Bad CRC.
	CRCStatus_BAD_CRC CRCStatus = 1
	// CRC OK.
	CRCStatus_CRC_OK CRCStatus = 2
)

// Enum value maps for CRCStatus.
var (
	CRCStatus_name = map[int32]string{
		0: "NO_CRC",
		1: "BAD_CRC",
		2: "CRC_OK",
	}
	CRCStatus_value = map[string]int32{
		"NO_CRC":  0,
		"BAD_CRC": 1,
		"CRC_OK":  2,
	}
)

func (x CRCStatus) Enum() *CRCStatus {
	p := new(CRCStatus)
	*p = x
	return p
}

func (x CRCStatus) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (CRCStatus) Descriptor() protoreflect.EnumDescriptor {
	return file_gw_gw_proto_enumTypes[3].Descriptor()
}

func (CRCStatus) Type() protoreflect.EnumType {
	return &file_gw_gw_proto_enumTypes[3]
}

func (x CRCStatus) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use CRCStatus.Descriptor instead.
func (CRCStatus) EnumDescriptor() ([]byte, []int) {
	return file_gw_gw_proto_rawDescGZIP(), []int{3}
}

type TxAckStatus int32

const (
	// Ignored (when a previous item was already emitted).
	TxAckStatus_IGNORED TxAckStatus = 0
	// Packet has been programmed for downlink.
	TxAckStatus_OK TxAckStatus = 1
	// Rejected because it was already too late to program this packet for
	// downlink.
	TxAckStatus_TOO_LATE TxAckStatus = 2
	// Rejected because downlink packet timestamp is too much in advance.
	TxAckStatus_TOO_EARLY TxAckStatus = 3
	// Rejected because there was already a packet programmed in requested
	// timeframe.
	TxAckStatus_COLLISION_PACKET TxAckStatus = 4
	// Rejected because there was already a beacon planned in requested timeframe.
	TxAckStatus_COLLISION_BEACON TxAckStatus = 5
	// Rejected because requested frequency is not supported by TX RF chain.
	TxAckStatus_TX_FREQ TxAckStatus = 6
	// Rejected because requested power is not supported by gateway.
	TxAckStatus_TX_POWER TxAckStatus = 7
	// Rejected because GPS is unlocked, so GPS timestamp cannot be used.
	TxAckStatus_GPS_UNLOCKED TxAckStatus = 8
	// Downlink queue is full.
	TxAckStatus_QUEUE_FULL TxAckStatus = 9
	// Internal error.
	TxAckStatus_INTERNAL_ERROR TxAckStatus = 10
	// Duty-cycle overflow.
	TxAckStatus_DUTY_CYCLE_OVERFLOW TxAckStatus = 11
)

// Enum value maps for TxAckStatus.
var (
	TxAckStatus_name = map[int32]string{
		0:  "IGNORED",
		1:  "OK",
		2:  "TOO_LATE",
		3:  "TOO_EARLY",
		4:  "COLLISION_PACKET",
		5:  "COLLISION_BEACON",
		6:  "TX_FREQ",
		7:  "TX_POWER",
		8:  "GPS_UNLOCKED",
		9:  "QUEUE_FULL",
		10: "INTERNAL_ERROR",
		11: "DUTY_CYCLE_OVERFLOW",
	}
	TxAckStatus_value = map[string]int32{
		"IGNORED":             0,
		"OK":                  1,
		"TOO_LATE":            2,
		"TOO_EARLY":           3,
		"COLLISION_PACKET":    4,
		"COLLISION_BEACON":    5,
		"TX_FREQ":             6,
		"TX_POWER":            7,
		"GPS_UNLOCKED":        8,
		"QUEUE_FULL":          9,
		"INTERNAL_ERROR":      10,
		"DUTY_CYCLE_OVERFLOW": 11,
	}
)

func (x TxAckStatus) Enum() *TxAckStatus {
	p := new(TxAckStatus)
	*p = x
	return p
}

func (x TxAckStatus) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (TxAckStatus) Descriptor() protoreflect.EnumDescriptor {
	return file_gw_gw_proto_enumTypes[4].Descriptor()
}

func (TxAckStatus) Type() protoreflect.EnumType {
	return &file_gw_gw_proto_enumTypes[4]
}

func (x TxAckStatus) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use TxAckStatus.Descriptor instead.
func (TxAckStatus) EnumDescriptor() ([]byte, []int) {
	return file_gw_gw_proto_rawDescGZIP(), []int{4}
}

type ConnState_State int32

const (
	ConnState_OFFLINE ConnState_State = 0
	ConnState_ONLINE  ConnState_State = 1
)

// Enum value maps for ConnState_State.
var (
	ConnState_State_name = map[int32]string{
		0: "OFFLINE",
		1: "ONLINE",
	}
	ConnState_State_value = map[string]int32{
		"OFFLINE": 0,
		"ONLINE":  1,
	}
)

func (x ConnState_State) Enum() *ConnState_State {
	p := new(ConnState_State)
	*p = x
	return p
}

func (x ConnState_State) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (ConnState_State) Descriptor() protoreflect.EnumDescriptor {
	return file_gw_gw_proto_enumTypes[5].Descriptor()
}

func (ConnState_State) Type() protoreflect.EnumType {
	return &file_gw_gw_proto_enumTypes[5]
}

func (x ConnState_State) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use ConnState_State.Descriptor instead.
func (ConnState_State) EnumDescriptor() ([]byte, []int) {
	return file_gw_gw_proto_rawDescGZIP(), []int{44, 0}
}

// Gateway events as reported by the ChirpStack Concentratord ZMQ interface.
type Event struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Types that are valid to be assigned to Event:
	//
	//	*Event_UplinkFrame
	//	*Event_GatewayStats
	//	*Event_Mesh
	Event         isEvent_Event `protobuf_oneof:"event"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *Event) Reset() {
	*x = Event{}
	mi := &file_gw_gw_proto_msgTypes[0]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *Event) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*Event) ProtoMessage() {}

func (x *Event) ProtoReflect() protoreflect.Message {
	mi := &file_gw_gw_proto_msgTypes[0]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use Event.ProtoReflect.Descriptor instead.
func (*Event) Descriptor() ([]byte, []int) {
	return file_gw_gw_proto_rawDescGZIP(), []int{0}
}

func (x *Event) GetEvent() isEvent_Event {
	if x != nil {
		return x.Event
	}
	return nil
}

func (x *Event) GetUplinkFrame() *UplinkFrame {
	if x != nil {
		if x, ok := x.Event.(*Event_UplinkFrame); ok {
			return x.UplinkFrame
		}
	}
	return nil
}

func (x *Event) GetGatewayStats() *GatewayStats {
	if x != nil {
		if x, ok := x.Event.(*Event_GatewayStats); ok {
			return x.GatewayStats
		}
	}
	return nil
}

func (x *Event) GetMesh() *MeshEvent {
	if x != nil {
		if x, ok := x.Event.(*Event_Mesh); ok {
			return x.Mesh
		}
	}
	return nil
}

type isEvent_Event interface {
	isEvent_Event()
}

type Event_UplinkFrame struct {
	// Uplink frame.
	UplinkFrame *UplinkFrame `protobuf:"bytes,1,opt,name=uplink_frame,json=uplinkFrame,proto3,oneof"`
}

type Event_GatewayStats struct {
	// Gateway stats.
	GatewayStats *GatewayStats `protobuf:"bytes,2,opt,name=gateway_stats,json=gatewayStats,proto3,oneof"`
}

type Event_Mesh struct {
	// Gateway Mesh Event.
	Mesh *MeshEvent `protobuf:"bytes,3,opt,name=mesh,proto3,oneof"`
}

func (*Event_UplinkFrame) isEvent_Event() {}

func (*Event_GatewayStats) isEvent_Event() {}

func (*Event_Mesh) isEvent_Event() {}

// Commands that can be sent to the ChirpStack Concentratord ZMQ interface.
type Command struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Types that are valid to be assigned to Command:
	//
	//	*Command_SendDownlinkFrame
	//	*Command_SetGatewayConfiguration
	//	*Command_GetGatewayId
	//	*Command_GetLocation
	//	*Command_Mesh
	Command       isCommand_Command `protobuf_oneof:"command"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *Command) Reset() {
	*x = Command{}
	mi := &file_gw_gw_proto_msgTypes[1]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *Command) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*Command) ProtoMessage() {}

func (x *Command) ProtoReflect() protoreflect.Message {
	mi := &file_gw_gw_proto_msgTypes[1]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use Command.ProtoReflect.Descriptor instead.
func (*Command) Descriptor() ([]byte, []int) {
	return file_gw_gw_proto_rawDescGZIP(), []int{1}
}

func (x *Command) GetCommand() isCommand_Command {
	if x != nil {
		return x.Command
	}
	return nil
}

func (x *Command) GetSendDownlinkFrame() *DownlinkFrame {
	if x != nil {
		if x, ok := x.Command.(*Command_SendDownlinkFrame); ok {
			return x.SendDownlinkFrame
		}
	}
	return nil
}

func (x *Command) GetSetGatewayConfiguration() *GatewayConfiguration {
	if x != nil {
		if x, ok := x.Command.(*Command_SetGatewayConfiguration); ok {
			return x.SetGatewayConfiguration
		}
	}
	return nil
}

func (x *Command) GetGetGatewayId() *GetGatewayIdRequest {
	if x != nil {
		if x, ok := x.Command.(*Command_GetGatewayId); ok {
			return x.GetGatewayId
		}
	}
	return nil
}

func (x *Command) GetGetLocation() *GetLocationRequest {
	if x != nil {
		if x, ok := x.Command.(*Command_GetLocation); ok {
			return x.GetLocation
		}
	}
	return nil
}

func (x *Command) GetMesh() *MeshCommand {
	if x != nil {
		if x, ok := x.Command.(*Command_Mesh); ok {
			return x.Mesh
		}
	}
	return nil
}

type isCommand_Command interface {
	isCommand_Command()
}

type Command_SendDownlinkFrame struct {
	// Downlink frame.
	SendDownlinkFrame *DownlinkFrame `protobuf:"bytes,1,opt,name=send_downlink_frame,json=sendDownlinkFrame,proto3,oneof"`
}

type Command_SetGatewayConfiguration struct {
	// Gateway configuration.
	SetGatewayConfiguration *GatewayConfiguration `protobuf:"bytes,2,opt,name=set_gateway_configuration,json=setGatewayConfiguration,proto3,oneof"`
}

type Command_GetGatewayId struct {
	// Get Gateway ID.
	GetGatewayId *GetGatewayIdRequest `protobuf:"bytes,3,opt,name=get_gateway_id,json=getGatewayId,proto3,oneof"`
}

type Command_GetLocation struct {
	// Get location.
	GetLocation *GetLocationRequest `protobuf:"bytes,4,opt,name=get_location,json=getLocation,proto3,oneof"`
}

type Command_Mesh struct {
	// Gateway Mesh Command.
	Mesh *MeshCommand `protobuf:"bytes,5,opt,name=mesh,proto3,oneof"`
}

func (*Command_SendDownlinkFrame) isCommand_Command() {}

func (*Command_SetGatewayConfiguration) isCommand_Command() {}

func (*Command_GetGatewayId) isCommand_Command() {}

func (*Command_GetLocation) isCommand_Command() {}

func (*Command_Mesh) isCommand_Command() {}

type MeshEvent struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Gateway ID (of the Border Gateway).
	GatewayId string `protobuf:"bytes,1,opt,name=gateway_id,json=gatewayId,proto3" json:"gateway_id,omitempty"`
	// Relay ID.
	RelayId string `protobuf:"bytes,2,opt,name=relay_id,json=relayId,proto3" json:"relay_id,omitempty"`
	// Timestamp (second precision).
	Time *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=time,proto3" json:"time,omitempty"`
	// Mesh events.
	Events        []*MeshEventItem `protobuf:"bytes,4,rep,name=events,proto3" json:"events,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *MeshEvent) Reset() {
	*x = MeshEvent{}
	mi := &file_gw_gw_proto_msgTypes[2]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *MeshEvent) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*MeshEvent) ProtoMessage() {}

func (x *MeshEvent) ProtoReflect() protoreflect.Message {
	mi := &file_gw_gw_proto_msgTypes[2]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use MeshEvent.ProtoReflect.Descriptor instead.
func (*MeshEvent) Descriptor() ([]byte, []int) {
	return file_gw_gw_proto_rawDescGZIP(), []int{2}
}

func (x *MeshEvent) GetGatewayId() string {
	if x != nil {
		return x.GatewayId
	}
	return ""
}

func (x *MeshEvent) GetRelayId() string {
	if x != nil {
		return x.RelayId
	}
	return ""
}

func (x *MeshEvent) GetTime() *timestamppb.Timestamp {
	if x != nil {
		return x.Time
	}
	return nil
}

func (x *MeshEvent) GetEvents() []*MeshEventItem {
	if x != nil {
		return x.Events
	}
	return nil
}

type MeshEventItem struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Types that are valid to be assigned to Event:
	//
	//	*MeshEventItem_Proprietary
	//	*MeshEventItem_Heartbeat
	Event         isMeshEventItem_Event `protobuf_oneof:"event"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *MeshEventItem) Reset() {
	*x = MeshEventItem{}
	mi := &file_gw_gw_proto_msgTypes[3]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *MeshEventItem) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*MeshEventItem) ProtoMessage() {}

func (x *MeshEventItem) ProtoReflect() protoreflect.Message {
	mi := &file_gw_gw_proto_msgTypes[3]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use MeshEventItem.ProtoReflect.Descriptor instead.
func (*MeshEventItem) Descriptor() ([]byte, []int) {
	return file_gw_gw_proto_rawDescGZIP(), []int{3}
}

func (x *MeshEventItem) GetEvent() isMeshEventItem_Event {
	if x != nil {
		return x.Event
	}
	return nil
}

func (x *MeshEventItem) GetProprietary() *MeshEventProprietary {
	if x != nil {
		if x, ok := x.Event.(*MeshEventItem_Proprietary); ok {
			return x.Proprietary
		}
	}
	return nil
}

func (x *MeshEventItem) GetHeartbeat() *MeshEventHeartbeat {
	if x != nil {
		if x, ok := x.Event.(*MeshEventItem_Heartbeat); ok {
			return x.Heartbeat
		}
	}
	return nil
}

type isMeshEventItem_Event interface {
	isMeshEventItem_Event()
}

type MeshEventItem_Proprietary struct {
	// Proprietary Mesh event.
	Proprietary *MeshEventProprietary `protobuf:"bytes,1,opt,name=proprietary,proto3,oneof"`
}

type MeshEventItem_Heartbeat struct {
	// Mesh heartbeat.
	Heartbeat *MeshEventHeartbeat `protobuf:"bytes,2,opt,name=heartbeat,proto3,oneof"`
}

func (*MeshEventItem_Proprietary) isMeshEventItem_Event() {}

func (*MeshEventItem_Heartbeat) isMeshEventItem_Event() {}

type MeshCommand struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Gateway ID (of the Border Gateway).
	GatewayId string `protobuf:"bytes,1,opt,name=gateway_id,json=gatewayId,proto3" json:"gateway_id,omitempty"`
	// Relay ID.
	RelayId string `protobuf:"bytes,2,opt,name=relay_id,json=relayId,proto3" json:"relay_id,omitempty"`
	// Mesh events.
	Commands      []*MeshCommandItem `protobuf:"bytes,3,rep,name=commands,proto3" json:"commands,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *MeshCommand) Reset() {
	*x = MeshCommand{}
	mi := &file_gw_gw_proto_msgTypes[4]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *MeshCommand) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*MeshCommand) ProtoMessage() {}

func (x *MeshCommand) ProtoReflect() protoreflect.Message {
	mi := &file_gw_gw_proto_msgTypes[4]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use MeshCommand.ProtoReflect.Descriptor instead.
func (*MeshCommand) Descriptor() ([]byte, []int) {
	return file_gw_gw_proto_rawDescGZIP(), []int{4}
}

func (x *MeshCommand) GetGatewayId() string {
	if x != nil {
		return x.GatewayId
	}
	return ""
}

func (x *MeshCommand) GetRelayId() string {
	if x != nil {
		return x.RelayId
	}
	return ""
}

func (x *MeshCommand) GetCommands() []*MeshCommandItem {
	if x != nil {
		return x.Commands
	}
	return nil
}

type MeshCommandItem struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Types that are valid to be assigned to Command:
	//
	//	*MeshCommandItem_Proprietary
	Command       isMeshCommandItem_Command `protobuf_oneof:"command"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *MeshCommandItem) Reset() {
	*x = MeshCommandItem{}
	mi := &file_gw_gw_proto_msgTypes[5]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *MeshCommandItem) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*MeshCommandItem) ProtoMessage() {}

func (x *MeshCommandItem) ProtoReflect() protoreflect.Message {
	mi := &file_gw_gw_proto_msgTypes[5]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use MeshCommandItem.ProtoReflect.Descriptor instead.
func (*MeshCommandItem) Descriptor() ([]byte, []int) {
	return file_gw_gw_proto_rawDescGZIP(), []int{5}
}

func (x *MeshCommandItem) GetCommand() isMeshCommandItem_Command {
	if x != nil {
		return x.Command
	}
	return nil
}

func (x *MeshCommandItem) GetProprietary() *MeshCommandProprietary {
	if x != nil {
		if x, ok := x.Command.(*MeshCommandItem_Proprietary); ok {
			return x.Proprietary
		}
	}
	return nil
}

type isMeshCommandItem_Command interface {
	isMeshCommandItem_Command()
}

type MeshCommandItem_Proprietary struct {
	// Proprietary Mesh command.
	Proprietary *MeshCommandProprietary `protobuf:"bytes,1,opt,name=proprietary,proto3,oneof"`
}

func (*MeshCommandItem_Proprietary) isMeshCommandItem_Command() {}

type Modulation struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Types that are valid to be assigned to Parameters:
	//
	//	*Modulation_Lora
	//	*Modulation_Fsk
	//	*Modulation_LrFhss
	Parameters    isModulation_Parameters `protobuf_oneof:"parameters"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *Modulation) Reset() {
	*x = Modulation{}
	mi := &file_gw_gw_proto_msgTypes[6]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *Modulation) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*Modulation) ProtoMessage() {}

func (x *Modulation) ProtoReflect() protoreflect.Message {
	mi := &file_gw_gw_proto_msgTypes[6]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use Modulation.ProtoReflect.Descriptor instead.
func (*Modulation) Descriptor() ([]byte, []int) {
	return file_gw_gw_proto_rawDescGZIP(), []int{6}
}

func (x *Modulation) GetParameters() isModulation_Parameters {
	if x != nil {
		return x.Parameters
	}
	return nil
}

func (x *Modulation) GetLora() *LoraModulationInfo {
	if x != nil {
		if x, ok := x.Parameters.(*Modulation_Lora); ok {
			return x.Lora
		}
	}
	return nil
}

func (x *Modulation) GetFsk() *FskModulationInfo {
	if x != nil {
		if x, ok := x.Parameters.(*Modulation_Fsk); ok {
			return x.Fsk
		}
	}
	return nil
}

func (x *Modulation) GetLrFhss() *LrFhssModulationInfo {
	if x != nil {
		if x, ok := x.Parameters.(*Modulation_LrFhss); ok {
			return x.LrFhss
		}
	}
	return nil
}

type isModulation_Parameters interface {
	isModulation_Parameters()
}

type Modulation_Lora struct {
	// LoRa modulation information.
	Lora *LoraModulationInfo `protobuf:"bytes,3,opt,name=lora,proto3,oneof"`
}

type Modulation_Fsk struct {
	// FSK modulation information.
	Fsk *FskModulationInfo `protobuf:"bytes,4,opt,name=fsk,proto3,oneof"`
}

type Modulation_LrFhss struct {
	// LR-FHSS modulation information.
	LrFhss *LrFhssModulationInfo `protobuf:"bytes,5,opt,name=lr_fhss,json=lrFhss,proto3,oneof"`
}

func (*Modulation_Lora) isModulation_Parameters() {}

func (*Modulation_Fsk) isModulation_Parameters() {}

func (*Modulation_LrFhss) isModulation_Parameters() {}

type UplinkTxInfoLegacy struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Frequency (Hz).
	Frequency uint32 `protobuf:"varint,1,opt,name=frequency,proto3" json:"frequency,omitempty"`
	// Modulation.
	Modulation common.Modulation `protobuf:"varint,2,opt,name=modulation,proto3,enum=common.Modulation" json:"modulation,omitempty"`
	// Types that are valid to be assigned to ModulationInfo:
	//
	//	*UplinkTxInfoLegacy_LoraModulationInfo
	//	*UplinkTxInfoLegacy_FskModulationInfo
	//	*UplinkTxInfoLegacy_LrFhssModulationInfo
	ModulationInfo isUplinkTxInfoLegacy_ModulationInfo `protobuf_oneof:"modulation_info"`
	unknownFields  protoimpl.UnknownFields
	sizeCache      protoimpl.SizeCache
}

func (x *UplinkTxInfoLegacy) Reset() {
	*x = UplinkTxInfoLegacy{}
	mi := &file_gw_gw_proto_msgTypes[7]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *UplinkTxInfoLegacy) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*UplinkTxInfoLegacy) ProtoMessage() {}

func (x *UplinkTxInfoLegacy) ProtoReflect() protoreflect.Message {
	mi := &file_gw_gw_proto_msgTypes[7]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use UplinkTxInfoLegacy.ProtoReflect.Descriptor instead.
func (*UplinkTxInfoLegacy) Descriptor() ([]byte, []int) {
	return file_gw_gw_proto_rawDescGZIP(), []int{7}
}

func (x *UplinkTxInfoLegacy) GetFrequency() uint32 {
	if x != nil {
		return x.Frequency
	}
	return 0
}

func (x *UplinkTxInfoLegacy) GetModulation() common.Modulation {
	if x != nil {
		return x.Modulation
	}
	return common.Modulation(0)
}

func (x *UplinkTxInfoLegacy) GetModulationInfo() isUplinkTxInfoLegacy_ModulationInfo {
	if x != nil {
		return x.ModulationInfo
	}
	return nil
}

func (x *UplinkTxInfoLegacy) GetLoraModulationInfo() *LoraModulationInfo {
	if x != nil {
		if x, ok := x.ModulationInfo.(*UplinkTxInfoLegacy_LoraModulationInfo); ok {
			return x.LoraModulationInfo
		}
	}
	return nil
}

func (x *UplinkTxInfoLegacy) GetFskModulationInfo() *FskModulationInfo {
	if x != nil {
		if x, ok := x.ModulationInfo.(*UplinkTxInfoLegacy_FskModulationInfo); ok {
			return x.FskModulationInfo
		}
	}
	return nil
}

func (x *UplinkTxInfoLegacy) GetLrFhssModulationInfo() *LrFhssModulationInfo {
	if x != nil {
		if x, ok := x.ModulationInfo.(*UplinkTxInfoLegacy_LrFhssModulationInfo); ok {
			return x.LrFhssModulationInfo
		}
	}
	return nil
}

type isUplinkTxInfoLegacy_ModulationInfo interface {
	isUplinkTxInfoLegacy_ModulationInfo()
}

type UplinkTxInfoLegacy_LoraModulationInfo struct {
	// LoRa modulation information.
	LoraModulationInfo *LoraModulationInfo `protobuf:"bytes,3,opt,name=lora_modulation_info,json=loraModulationInfo,proto3,oneof"`
}

type UplinkTxInfoLegacy_FskModulationInfo struct {
	// FSK modulation information.
	FskModulationInfo *FskModulationInfo `protobuf:"bytes,4,opt,name=fsk_modulation_info,json=fskModulationInfo,proto3,oneof"`
}

type UplinkTxInfoLegacy_LrFhssModulationInfo struct {
	// LR-FHSS modulation information.
	LrFhssModulationInfo *LrFhssModulationInfo `protobuf:"bytes,5,opt,name=lr_fhss_modulation_info,json=lrFhssModulationInfo,proto3,oneof"`
}

func (*UplinkTxInfoLegacy_LoraModulationInfo) isUplinkTxInfoLegacy_ModulationInfo() {}

func (*UplinkTxInfoLegacy_FskModulationInfo) isUplinkTxInfoLegacy_ModulationInfo() {}

func (*UplinkTxInfoLegacy_LrFhssModulationInfo) isUplinkTxInfoLegacy_ModulationInfo() {}

type UplinkTxInfo struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Frequency (Hz).
	Frequency uint32 `protobuf:"varint,1,opt,name=frequency,proto3" json:"frequency,omitempty"`
	// Modulation.
	Modulation    *Modulation `protobuf:"bytes,2,opt,name=modulation,proto3" json:"modulation,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *UplinkTxInfo) Reset() {
	*x = UplinkTxInfo{}
	mi := &file_gw_gw_proto_msgTypes[8]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *UplinkTxInfo) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*UplinkTxInfo) ProtoMessage() {}

func (x *UplinkTxInfo) ProtoReflect() protoreflect.Message {
	mi := &file_gw_gw_proto_msgTypes[8]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use UplinkTxInfo.ProtoReflect.Descriptor instead.
func (*UplinkTxInfo) Descriptor() ([]byte, []int) {
	return file_gw_gw_proto_rawDescGZIP(), []int{8}
}

func (x *UplinkTxInfo) GetFrequency() uint32 {
	if x != nil {
		return x.Frequency
	}
	return 0
}

func (x *UplinkTxInfo) GetModulation() *Modulation {
	if x != nil {
		return x.Modulation
	}
	return nil
}

type LoraModulationInfo struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Bandwidth.
	Bandwidth uint32 `protobuf:"varint,1,opt,name=bandwidth,proto3" json:"bandwidth,omitempty"`
	// Speading-factor.
	SpreadingFactor uint32 `protobuf:"varint,2,opt,name=spreading_factor,json=spreadingFactor,proto3" json:"spreading_factor,omitempty"`
	// Code-rate.
	CodeRateLegacy string `protobuf:"bytes,3,opt,name=code_rate_legacy,json=codeRateLegacy,proto3" json:"code_rate_legacy,omitempty"`
	// Code-rate.
	CodeRate CodeRate `protobuf:"varint,5,opt,name=code_rate,json=codeRate,proto3,enum=gw.CodeRate" json:"code_rate,omitempty"`
	// Polarization inversion.
	PolarizationInversion bool `protobuf:"varint,4,opt,name=polarization_inversion,json=polarizationInversion,proto3" json:"polarization_inversion,omitempty"`
	// Preamble length (for TX).
	Preamble uint32 `protobuf:"varint,6,opt,name=preamble,proto3" json:"preamble,omitempty"`
	//	No CRC (for TX).
	//
	// If true, do not send a CRC in the packet.
	NoCrc         bool `protobuf:"varint,7,opt,name=no_crc,json=noCrc,proto3" json:"no_crc,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *LoraModulationInfo) Reset() {
	*x = LoraModulationInfo{}
	mi := &file_gw_gw_proto_msgTypes[9]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *LoraModulationInfo) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*LoraModulationInfo) ProtoMessage() {}

func (x *LoraModulationInfo) ProtoReflect() protoreflect.Message {
	mi := &file_gw_gw_proto_msgTypes[9]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use LoraModulationInfo.ProtoReflect.Descriptor instead.
func (*LoraModulationInfo) Descriptor() ([]byte, []int) {
	return file_gw_gw_proto_rawDescGZIP(), []int{9}
}

func (x *LoraModulationInfo) GetBandwidth() uint32 {
	if x != nil {
		return x.Bandwidth
	}
	return 0
}

func (x *LoraModulationInfo) GetSpreadingFactor() uint32 {
	if x != nil {
		return x.SpreadingFactor
	}
	return 0
}

func (x *LoraModulationInfo) GetCodeRateLegacy() string {
	if x != nil {
		return x.CodeRateLegacy
	}
	return ""
}

func (x *LoraModulationInfo) GetCodeRate() CodeRate {
	if x != nil {
		return x.CodeRate
	}
	return CodeRate_CR_UNDEFINED
}

func (x *LoraModulationInfo) GetPolarizationInversion() bool {
	if x != nil {
		return x.PolarizationInversion
	}
	return false
}

func (x *LoraModulationInfo) GetPreamble() uint32 {
	if x != nil {
		return x.Preamble
	}
	return 0
}

func (x *LoraModulationInfo) GetNoCrc() bool {
	if x != nil {
		return x.NoCrc
	}
	return false
}

type FskModulationInfo struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Frequency deviation.
	FrequencyDeviation uint32 `protobuf:"varint,1,opt,name=frequency_deviation,json=frequencyDeviation,proto3" json:"frequency_deviation,omitempty"`
	// FSK datarate (bits / sec).
	Datarate      uint32 `protobuf:"varint,2,opt,name=datarate,proto3" json:"datarate,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *FskModulationInfo) Reset() {
	*x = FskModulationInfo{}
	mi := &file_gw_gw_proto_msgTypes[10]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *FskModulationInfo) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*FskModulationInfo) ProtoMessage() {}

func (x *FskModulationInfo) ProtoReflect() protoreflect.Message {
	mi := &file_gw_gw_proto_msgTypes[10]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use FskModulationInfo.ProtoReflect.Descriptor instead.
func (*FskModulationInfo) Descriptor() ([]byte, []int) {
	return file_gw_gw_proto_rawDescGZIP(), []int{10}
}

func (x *FskModulationInfo) GetFrequencyDeviation() uint32 {
	if x != nil {
		return x.FrequencyDeviation
	}
	return 0
}

func (x *FskModulationInfo) GetDatarate() uint32 {
	if x != nil {
		return x.Datarate
	}
	return 0
}

type LrFhssModulationInfo struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Operating channel width (OCW) in Hz.
	OperatingChannelWidth uint32 `protobuf:"varint,1,opt,name=operating_channel_width,json=operatingChannelWidth,proto3" json:"operating_channel_width,omitempty"`
	// Code-rate.
	// Deprecated: use code_rate.
	CodeRateLegacy string `protobuf:"bytes,2,opt,name=code_rate_legacy,json=codeRateLegacy,proto3" json:"code_rate_legacy,omitempty"`
	// Code-rate.
	CodeRate CodeRate `protobuf:"varint,4,opt,name=code_rate,json=codeRate,proto3,enum=gw.CodeRate" json:"code_rate,omitempty"`
	// Hopping grid number of steps.
	GridSteps     uint32 `protobuf:"varint,3,opt,name=grid_steps,json=gridSteps,proto3" json:"grid_steps,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *LrFhssModulationInfo) Reset() {
	*x = LrFhssModulationInfo{}
	mi := &file_gw_gw_proto_msgTypes[11]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *LrFhssModulationInfo) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*LrFhssModulationInfo) ProtoMessage() {}

func (x *LrFhssModulationInfo) ProtoReflect() protoreflect.Message {
	mi := &file_gw_gw_proto_msgTypes[11]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use LrFhssModulationInfo.ProtoReflect.Descriptor instead.
func (*LrFhssModulationInfo) Descriptor() ([]byte, []int) {
	return file_gw_gw_proto_rawDescGZIP(), []int{11}
}

func (x *LrFhssModulationInfo) GetOperatingChannelWidth() uint32 {
	if x != nil {
		return x.OperatingChannelWidth
	}
	return 0
}

func (x *LrFhssModulationInfo) GetCodeRateLegacy() string {
	if x != nil {
		return x.CodeRateLegacy
	}
	return ""
}

func (x *LrFhssModulationInfo) GetCodeRate() CodeRate {
	if x != nil {
		return x.CodeRate
	}
	return CodeRate_CR_UNDEFINED
}

func (x *LrFhssModulationInfo) GetGridSteps() uint32 {
	if x != nil {
		return x.GridSteps
	}
	return 0
}

type EncryptedFineTimestamp struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// AES key index used for encrypting the fine timestamp.
	AesKeyIndex uint32 `protobuf:"varint,1,opt,name=aes_key_index,json=aesKeyIndex,proto3" json:"aes_key_index,omitempty"`
	// Encrypted 'main' fine-timestamp (ns precision part of the timestamp).
	EncryptedNs []byte `protobuf:"bytes,2,opt,name=encrypted_ns,json=encryptedNs,proto3" json:"encrypted_ns,omitempty"`
	// FPGA ID.
	FpgaId        []byte `protobuf:"bytes,3,opt,name=fpga_id,json=fpgaId,proto3" json:"fpga_id,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *EncryptedFineTimestamp) Reset() {
	*x = EncryptedFineTimestamp{}
	mi := &file_gw_gw_proto_msgTypes[12]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *EncryptedFineTimestamp) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*EncryptedFineTimestamp) ProtoMessage() {}

func (x *EncryptedFineTimestamp) ProtoReflect() protoreflect.Message {
	mi := &file_gw_gw_proto_msgTypes[12]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use EncryptedFineTimestamp.ProtoReflect.Descriptor instead.
func (*EncryptedFineTimestamp) Descriptor() ([]byte, []int) {
	return file_gw_gw_proto_rawDescGZIP(), []int{12}
}

func (x *EncryptedFineTimestamp) GetAesKeyIndex() uint32 {
	if x != nil {
		return x.AesKeyIndex
	}
	return 0
}

func (x *EncryptedFineTimestamp) GetEncryptedNs() []byte {
	if x != nil {
		return x.EncryptedNs
	}
	return nil
}

func (x *EncryptedFineTimestamp) GetFpgaId() []byte {
	if x != nil {
		return x.FpgaId
	}
	return nil
}

type PlainFineTimestamp struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Full timestamp.
	Time          *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=time,proto3" json:"time,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *PlainFineTimestamp) Reset() {
	*x = PlainFineTimestamp{}
	mi := &file_gw_gw_proto_msgTypes[13]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *PlainFineTimestamp) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*PlainFineTimestamp) ProtoMessage() {}

func (x *PlainFineTimestamp) ProtoReflect() protoreflect.Message {
	mi := &file_gw_gw_proto_msgTypes[13]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use PlainFineTimestamp.ProtoReflect.Descriptor instead.
func (*PlainFineTimestamp) Descriptor() ([]byte, []int) {
	return file_gw_gw_proto_rawDescGZIP(), []int{13}
}

func (x *PlainFineTimestamp) GetTime() *timestamppb.Timestamp {
	if x != nil {
		return x.Time
	}
	return nil
}

type GatewayStats struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Gateway ID.
	// Deprecated: use gateway_id.
	GatewayIdLegacy []byte `protobuf:"bytes,1,opt,name=gateway_id_legacy,json=gatewayIdLegacy,proto3" json:"gateway_id_legacy,omitempty"`
	// Gateway ID.
	GatewayId string `protobuf:"bytes,17,opt,name=gateway_id,json=gatewayId,proto3" json:"gateway_id,omitempty"`
	// Gateway time.
	Time *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=time,proto3" json:"time,omitempty"`
	// Gateway location.
	Location *common.Location `protobuf:"bytes,3,opt,name=location,proto3" json:"location,omitempty"`
	// Gateway configuration version (this maps to the config_version sent
	// by ChirpStack to the gateway).
	ConfigVersion string `protobuf:"bytes,4,opt,name=config_version,json=configVersion,proto3" json:"config_version,omitempty"`
	// Number of radio packets received.
	RxPacketsReceived uint32 `protobuf:"varint,5,opt,name=rx_packets_received,json=rxPacketsReceived,proto3" json:"rx_packets_received,omitempty"`
	// Number of radio packets received with valid PHY CRC.
	RxPacketsReceivedOk uint32 `protobuf:"varint,6,opt,name=rx_packets_received_ok,json=rxPacketsReceivedOk,proto3" json:"rx_packets_received_ok,omitempty"`
	// Number of downlink packets received for transmission.
	TxPacketsReceived uint32 `protobuf:"varint,7,opt,name=tx_packets_received,json=txPacketsReceived,proto3" json:"tx_packets_received,omitempty"`
	// Number of downlink packets emitted.
	TxPacketsEmitted uint32 `protobuf:"varint,8,opt,name=tx_packets_emitted,json=txPacketsEmitted,proto3" json:"tx_packets_emitted,omitempty"`
	// Additional gateway meta-data.
	Metadata map[string]string `protobuf:"bytes,10,rep,name=metadata,proto3" json:"metadata,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
	// Tx packets per frequency.
	TxPacketsPerFrequency map[uint32]uint32 `protobuf:"bytes,12,rep,name=tx_packets_per_frequency,json=txPacketsPerFrequency,proto3" json:"tx_packets_per_frequency,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"`
	// Rx packets per frequency.
	RxPacketsPerFrequency map[uint32]uint32 `protobuf:"bytes,13,rep,name=rx_packets_per_frequency,json=rxPacketsPerFrequency,proto3" json:"rx_packets_per_frequency,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"`
	// Tx packets per modulation parameters.
	TxPacketsPerModulation []*PerModulationCount `protobuf:"bytes,14,rep,name=tx_packets_per_modulation,json=txPacketsPerModulation,proto3" json:"tx_packets_per_modulation,omitempty"`
	// Rx packets per modulation parameters.
	RxPacketsPerModulation []*PerModulationCount `protobuf:"bytes,15,rep,name=rx_packets_per_modulation,json=rxPacketsPerModulation,proto3" json:"rx_packets_per_modulation,omitempty"`
	// Tx packets per status.
	TxPacketsPerStatus map[string]uint32 `protobuf:"bytes,16,rep,name=tx_packets_per_status,json=txPacketsPerStatus,proto3" json:"tx_packets_per_status,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"`
	// Duty-cycle statistics (Concentratord only).
	DutyCycleStats *DutyCycleStats `protobuf:"bytes,18,opt,name=duty_cycle_stats,json=dutyCycleStats,proto3" json:"duty_cycle_stats,omitempty"`
	unknownFields  protoimpl.UnknownFields
	sizeCache      protoimpl.SizeCache
}

func (x *GatewayStats) Reset() {
	*x = GatewayStats{}
	mi := &file_gw_gw_proto_msgTypes[14]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *GatewayStats) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*GatewayStats) ProtoMessage() {}

func (x *GatewayStats) ProtoReflect() protoreflect.Message {
	mi := &file_gw_gw_proto_msgTypes[14]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use GatewayStats.ProtoReflect.Descriptor instead.
func (*GatewayStats) Descriptor() ([]byte, []int) {
	return file_gw_gw_proto_rawDescGZIP(), []int{14}
}

func (x *GatewayStats) GetGatewayIdLegacy() []byte {
	if x != nil {
		return x.GatewayIdLegacy
	}
	return nil
}

func (x *GatewayStats) GetGatewayId() string {
	if x != nil {
		return x.GatewayId
	}
	return ""
}

func (x *GatewayStats) GetTime() *timestamppb.Timestamp {
	if x != nil {
		return x.Time
	}
	return nil
}

func (x *GatewayStats) GetLocation() *common.Location {
	if x != nil {
		return x.Location
	}
	return nil
}

func (x *GatewayStats) GetConfigVersion() string {
	if x != nil {
		return x.ConfigVersion
	}
	return ""
}

func (x *GatewayStats) GetRxPacketsReceived() uint32 {
	if x != nil {
		return x.RxPacketsReceived
	}
	return 0
}

func (x *GatewayStats) GetRxPacketsReceivedOk() uint32 {
	if x != nil {
		return x.RxPacketsReceivedOk
	}
	return 0
}

func (x *GatewayStats) GetTxPacketsReceived() uint32 {
	if x != nil {
		return x.TxPacketsReceived
	}
	return 0
}

func (x *GatewayStats) GetTxPacketsEmitted() uint32 {
	if x != nil {
		return x.TxPacketsEmitted
	}
	return 0
}

func (x *GatewayStats) GetMetadata() map[string]string {
	if x != nil {
		return x.Metadata
	}
	return nil
}

func (x *GatewayStats) GetTxPacketsPerFrequency() map[uint32]uint32 {
	if x != nil {
		return x.TxPacketsPerFrequency
	}
	return nil
}

func (x *GatewayStats) GetRxPacketsPerFrequency() map[uint32]uint32 {
	if x != nil {
		return x.RxPacketsPerFrequency
	}
	return nil
}

func (x *GatewayStats) GetTxPacketsPerModulation() []*PerModulationCount {
	if x != nil {
		return x.TxPacketsPerModulation
	}
	return nil
}

func (x *GatewayStats) GetRxPacketsPerModulation() []*PerModulationCount {
	if x != nil {
		return x.RxPacketsPerModulation
	}
	return nil
}

func (x *GatewayStats) GetTxPacketsPerStatus() map[string]uint32 {
	if x != nil {
		return x.TxPacketsPerStatus
	}
	return nil
}

func (x *GatewayStats) GetDutyCycleStats() *DutyCycleStats {
	if x != nil {
		return x.DutyCycleStats
	}
	return nil
}

type PerModulationCount struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Modulation.
	Modulation *Modulation `protobuf:"bytes,1,opt,name=modulation,proto3" json:"modulation,omitempty"`
	// Count.
	Count         uint32 `protobuf:"varint,2,opt,name=count,proto3" json:"count,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *PerModulationCount) Reset() {
	*x = PerModulationCount{}
	mi := &file_gw_gw_proto_msgTypes[15]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *PerModulationCount) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*PerModulationCount) ProtoMessage() {}

func (x *PerModulationCount) ProtoReflect() protoreflect.Message {
	mi := &file_gw_gw_proto_msgTypes[15]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use PerModulationCount.ProtoReflect.Descriptor instead.
func (*PerModulationCount) Descriptor() ([]byte, []int) {
	return file_gw_gw_proto_rawDescGZIP(), []int{15}
}

func (x *PerModulationCount) GetModulation() *Modulation {
	if x != nil {
		return x.Modulation
	}
	return nil
}

func (x *PerModulationCount) GetCount() uint32 {
	if x != nil {
		return x.Count
	}
	return 0
}

type DutyCycleStats struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Implemented regulation.
	Regulation common.Regulation `protobuf:"varint,1,opt,name=regulation,proto3,enum=common.Regulation" json:"regulation,omitempty"`
	// Tracking window.
	Window *durationpb.Duration `protobuf:"bytes,2,opt,name=window,proto3" json:"window,omitempty"`
	// Bands.
	Bands         []*DutyCycleBand `protobuf:"bytes,3,rep,name=bands,proto3" json:"bands,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *DutyCycleStats) Reset() {
	*x = DutyCycleStats{}
	mi := &file_gw_gw_proto_msgTypes[16]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *DutyCycleStats) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*DutyCycleStats) ProtoMessage() {}

func (x *DutyCycleStats) ProtoReflect() protoreflect.Message {
	mi := &file_gw_gw_proto_msgTypes[16]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use DutyCycleStats.ProtoReflect.Descriptor instead.
func (*DutyCycleStats) Descriptor() ([]byte, []int) {
	return file_gw_gw_proto_rawDescGZIP(), []int{16}
}

func (x *DutyCycleStats) GetRegulation() common.Regulation {
	if x != nil {
		return x.Regulation
	}
	return common.Regulation(0)
}

func (x *DutyCycleStats) GetWindow() *durationpb.Duration {
	if x != nil {
		return x.Window
	}
	return nil
}

func (x *DutyCycleStats) GetBands() []*DutyCycleBand {
	if x != nil {
		return x.Bands
	}
	return nil
}

type DutyCycleBand struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Band name.
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// Min frequency for this band.
	FrequencyMin uint32 `protobuf:"varint,2,opt,name=frequency_min,json=frequencyMin,proto3" json:"frequency_min,omitempty"`
	// Max frequency for this band.
	FrequencyMax uint32 `protobuf:"varint,3,opt,name=frequency_max,json=frequencyMax,proto3" json:"frequency_max,omitempty"`
	// Max. allowed load.
	LoadMax *durationpb.Duration `protobuf:"bytes,4,opt,name=load_max,json=loadMax,proto3" json:"load_max,omitempty"`
	// Tracked load (within the window of the regionlation).
	LoadTracked   *durationpb.Duration `protobuf:"bytes,5,opt,name=load_tracked,json=loadTracked,proto3" json:"load_tracked,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *DutyCycleBand) Reset() {
	*x = DutyCycleBand{}
	mi := &file_gw_gw_proto_msgTypes[17]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *DutyCycleBand) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*DutyCycleBand) ProtoMessage() {}

func (x *DutyCycleBand) ProtoReflect() protoreflect.Message {
	mi := &file_gw_gw_proto_msgTypes[17]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use DutyCycleBand.ProtoReflect.Descriptor instead.
func (*DutyCycleBand) Descriptor() ([]byte, []int) {
	return file_gw_gw_proto_rawDescGZIP(), []int{17}
}

func (x *DutyCycleBand) GetName() string {
	if x != nil {
		return x.Name
	}
	return ""
}

func (x *DutyCycleBand) GetFrequencyMin() uint32 {
	if x != nil {
		return x.FrequencyMin
	}
	return 0
}

func (x *DutyCycleBand) GetFrequencyMax() uint32 {
	if x != nil {
		return x.FrequencyMax
	}
	return 0
}

func (x *DutyCycleBand) GetLoadMax() *durationpb.Duration {
	if x != nil {
		return x.LoadMax
	}
	return nil
}

func (x *DutyCycleBand) GetLoadTracked() *durationpb.Duration {
	if x != nil {
		return x.LoadTracked
	}
	return nil
}

type UplinkRxInfoLegacy struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Gateway ID.
	GatewayId []byte `protobuf:"bytes,1,opt,name=gateway_id,json=gatewayId,proto3" json:"gateway_id,omitempty"`
	// RX time (only set when the gateway has a GPS module).
	Time *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=time,proto3" json:"time,omitempty"`
	// RX time since GPS epoch (only set when the gateway has a GPS module).
	TimeSinceGpsEpoch *durationpb.Duration `protobuf:"bytes,3,opt,name=time_since_gps_epoch,json=timeSinceGpsEpoch,proto3" json:"time_since_gps_epoch,omitempty"`
	// RSSI.
	Rssi int32 `protobuf:"varint,5,opt,name=rssi,proto3" json:"rssi,omitempty"`
	// LoRa SNR.
	LoraSnr float64 `protobuf:"fixed64,6,opt,name=lora_snr,json=loraSnr,proto3" json:"lora_snr,omitempty"`
	// Channel.
	Channel uint32 `protobuf:"varint,7,opt,name=channel,proto3" json:"channel,omitempty"`
	// RF Chain.
	RfChain uint32 `protobuf:"varint,8,opt,name=rf_chain,json=rfChain,proto3" json:"rf_chain,omitempty"`
	// Board.
	Board uint32 `protobuf:"varint,9,opt,name=board,proto3" json:"board,omitempty"`
	// Antenna.
	Antenna uint32 `protobuf:"varint,10,opt,name=antenna,proto3" json:"antenna,omitempty"`
	// Location.
	Location *common.Location `protobuf:"bytes,11,opt,name=location,proto3" json:"location,omitempty"`
	// Fine-timestamp type.
	FineTimestampType FineTimestampType `protobuf:"varint,12,opt,name=fine_timestamp_type,json=fineTimestampType,proto3,enum=gw.FineTimestampType" json:"fine_timestamp_type,omitempty"`
	// Fine-timestamp data.
	//
	// Types that are valid to be assigned to FineTimestamp:
	//
	//	*UplinkRxInfoLegacy_EncryptedFineTimestamp
	//	*UplinkRxInfoLegacy_PlainFineTimestamp
	FineTimestamp isUplinkRxInfoLegacy_FineTimestamp `protobuf_oneof:"fine_timestamp"`
	// Gateway specific context.
	Context []byte `protobuf:"bytes,15,opt,name=context,proto3" json:"context,omitempty"`
	// Uplink ID (UUID bytes).
	// Unique and random ID which can be used to correlate the uplink across
	// multiple logs.
	UplinkId []byte `protobuf:"bytes,16,opt,name=uplink_id,json=uplinkId,proto3" json:"uplink_id,omitempty"`
	// CRC status.
	CrcStatus CRCStatus `protobuf:"varint,17,opt,name=crc_status,json=crcStatus,proto3,enum=gw.CRCStatus" json:"crc_status,omitempty"`
	// Optional meta-data map.
	Metadata      map[string]string `protobuf:"bytes,18,rep,name=metadata,proto3" json:"metadata,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *UplinkRxInfoLegacy) Reset() {
	*x = UplinkRxInfoLegacy{}
	mi := &file_gw_gw_proto_msgTypes[18]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *UplinkRxInfoLegacy) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*UplinkRxInfoLegacy) ProtoMessage() {}

func (x *UplinkRxInfoLegacy) ProtoReflect() protoreflect.Message {
	mi := &file_gw_gw_proto_msgTypes[18]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use UplinkRxInfoLegacy.ProtoReflect.Descriptor instead.
func (*UplinkRxInfoLegacy) Descriptor() ([]byte, []int) {
	return file_gw_gw_proto_rawDescGZIP(), []int{18}
}

func (x *UplinkRxInfoLegacy) GetGatewayId() []byte {
	if x != nil {
		return x.GatewayId
	}
	return nil
}

func (x *UplinkRxInfoLegacy) GetTime() *timestamppb.Timestamp {
	if x != nil {
		return x.Time
	}
	return nil
}

func (x *UplinkRxInfoLegacy) GetTimeSinceGpsEpoch() *durationpb.Duration {
	if x != nil {
		return x.TimeSinceGpsEpoch
	}
	return nil
}

func (x *UplinkRxInfoLegacy) GetRssi() int32 {
	if x != nil {
		return x.Rssi
	}
	return 0
}

func (x *UplinkRxInfoLegacy) GetLoraSnr() float64 {
	if x != nil {
		return x.LoraSnr
	}
	return 0
}

func (x *UplinkRxInfoLegacy) GetChannel() uint32 {
	if x != nil {
		return x.Channel
	}
	return 0
}

func (x *UplinkRxInfoLegacy) GetRfChain() uint32 {
	if x != nil {
		return x.RfChain
	}
	return 0
}

func (x *UplinkRxInfoLegacy) GetBoard() uint32 {
	if x != nil {
		return x.Board
	}
	return 0
}

func (x *UplinkRxInfoLegacy) GetAntenna() uint32 {
	if x != nil {
		return x.Antenna
	}
	return 0
}

func (x *UplinkRxInfoLegacy) GetLocation() *common.Location {
	if x != nil {
		return x.Location
	}
	return nil
}

func (x *UplinkRxInfoLegacy) GetFineTimestampType() FineTimestampType {
	if x != nil {
		return x.FineTimestampType
	}
	return FineTimestampType_NONE
}

func (x *UplinkRxInfoLegacy) GetFineTimestamp() isUplinkRxInfoLegacy_FineTimestamp {
	if x != nil {
		return x.FineTimestamp
	}
	return nil
}

func (x *UplinkRxInfoLegacy) GetEncryptedFineTimestamp() *EncryptedFineTimestamp {
	if x != nil {
		if x, ok := x.FineTimestamp.(*UplinkRxInfoLegacy_EncryptedFineTimestamp); ok {
			return x.EncryptedFineTimestamp
		}
	}
	return nil
}

func (x *UplinkRxInfoLegacy) GetPlainFineTimestamp() *PlainFineTimestamp {
	if x != nil {
		if x, ok := x.FineTimestamp.(*UplinkRxInfoLegacy_PlainFineTimestamp); ok {
			return x.PlainFineTimestamp
		}
	}
	return nil
}

func (x *UplinkRxInfoLegacy) GetContext() []byte {
	if x != nil {
		return x.Context
	}
	return nil
}

func (x *UplinkRxInfoLegacy) GetUplinkId() []byte {
	if x != nil {
		return x.UplinkId
	}
	return nil
}

func (x *UplinkRxInfoLegacy) GetCrcStatus() CRCStatus {
	if x != nil {
		return x.CrcStatus
	}
	return CRCStatus_NO_CRC
}

func (x *UplinkRxInfoLegacy) GetMetadata() map[string]string {
	if x != nil {
		return x.Metadata
	}
	return nil
}

type isUplinkRxInfoLegacy_FineTimestamp interface {
	isUplinkRxInfoLegacy_FineTimestamp()
}

type UplinkRxInfoLegacy_EncryptedFineTimestamp struct {
	// Encrypted fine-timestamp data.
	EncryptedFineTimestamp *EncryptedFineTimestamp `protobuf:"bytes,13,opt,name=encrypted_fine_timestamp,json=encryptedFineTimestamp,proto3,oneof"`
}

type UplinkRxInfoLegacy_PlainFineTimestamp struct {
	// Plain fine-timestamp data.
	PlainFineTimestamp *PlainFineTimestamp `protobuf:"bytes,14,opt,name=plain_fine_timestamp,json=plainFineTimestamp,proto3,oneof"`
}

func (*UplinkRxInfoLegacy_EncryptedFineTimestamp) isUplinkRxInfoLegacy_FineTimestamp() {}

func (*UplinkRxInfoLegacy_PlainFineTimestamp) isUplinkRxInfoLegacy_FineTimestamp() {}

type UplinkRxInfo struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Gateway ID.
	GatewayId string `protobuf:"bytes,1,opt,name=gateway_id,json=gatewayId,proto3" json:"gateway_id,omitempty"`
	// Uplink ID.
	UplinkId uint32 `protobuf:"varint,2,opt,name=uplink_id,json=uplinkId,proto3" json:"uplink_id,omitempty"`
	// Gateway RX time (set if the gateway has a GNSS module).
	GwTime *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=gw_time,json=gwTime,proto3" json:"gw_time,omitempty"`
	// Network Server RX time (set by the NS on receiving the uplink).
	NsTime *timestamppb.Timestamp `protobuf:"bytes,17,opt,name=ns_time,json=nsTime,proto3" json:"ns_time,omitempty"`
	// RX time as time since GPS epoch (set if the gateway has a GNSS module).
	TimeSinceGpsEpoch *durationpb.Duration `protobuf:"bytes,4,opt,name=time_since_gps_epoch,json=timeSinceGpsEpoch,proto3" json:"time_since_gps_epoch,omitempty"`
	// Fine-timestamp.
	// This timestamp can be used for TDOA based geolocation.
	FineTimeSinceGpsEpoch *durationpb.Duration `protobuf:"bytes,5,opt,name=fine_time_since_gps_epoch,json=fineTimeSinceGpsEpoch,proto3" json:"fine_time_since_gps_epoch,omitempty"`
	// RSSI.
	Rssi int32 `protobuf:"varint,6,opt,name=rssi,proto3" json:"rssi,omitempty"`
	// SNR.
	// Note: only available for LoRa modulation.
	Snr float32 `protobuf:"fixed32,7,opt,name=snr,proto3" json:"snr,omitempty"`
	// Channel.
	Channel uint32 `protobuf:"varint,8,opt,name=channel,proto3" json:"channel,omitempty"`
	// RF chain.
	RfChain uint32 `protobuf:"varint,9,opt,name=rf_chain,json=rfChain,proto3" json:"rf_chain,omitempty"`
	// Board.
	Board uint32 `protobuf:"varint,10,opt,name=board,proto3" json:"board,omitempty"`
	// Antenna.
	Antenna uint32 `protobuf:"varint,11,opt,name=antenna,proto3" json:"antenna,omitempty"`
	// Location.
	Location *common.Location `protobuf:"bytes,12,opt,name=location,proto3" json:"location,omitempty"`
	// Gateway specific context.
	// This value must be returned to the gateway on (Class-A) downlink.
	Context []byte `protobuf:"bytes,13,opt,name=context,proto3" json:"context,omitempty"`
	// Additional gateway meta-data.
	Metadata map[string]string `protobuf:"bytes,15,rep,name=metadata,proto3" json:"metadata,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
	// CRC status.
	CrcStatus     CRCStatus `protobuf:"varint,16,opt,name=crc_status,json=crcStatus,proto3,enum=gw.CRCStatus" json:"crc_status,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *UplinkRxInfo) Reset() {
	*x = UplinkRxInfo{}
	mi := &file_gw_gw_proto_msgTypes[19]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *UplinkRxInfo) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*UplinkRxInfo) ProtoMessage() {}

func (x *UplinkRxInfo) ProtoReflect() protoreflect.Message {
	mi := &file_gw_gw_proto_msgTypes[19]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use UplinkRxInfo.ProtoReflect.Descriptor instead.
func (*UplinkRxInfo) Descriptor() ([]byte, []int) {
	return file_gw_gw_proto_rawDescGZIP(), []int{19}
}

func (x *UplinkRxInfo) GetGatewayId() string {
	if x != nil {
		return x.GatewayId
	}
	return ""
}

func (x *UplinkRxInfo) GetUplinkId() uint32 {
	if x != nil {
		return x.UplinkId
	}
	return 0
}

func (x *UplinkRxInfo) GetGwTime() *timestamppb.Timestamp {
	if x != nil {
		return x.GwTime
	}
	return nil
}

func (x *UplinkRxInfo) GetNsTime() *timestamppb.Timestamp {
	if x != nil {
		return x.NsTime
	}
	return nil
}

func (x *UplinkRxInfo) GetTimeSinceGpsEpoch() *durationpb.Duration {
	if x != nil {
		return x.TimeSinceGpsEpoch
	}
	return nil
}

func (x *UplinkRxInfo) GetFineTimeSinceGpsEpoch() *durationpb.Duration {
	if x != nil {
		return x.FineTimeSinceGpsEpoch
	}
	return nil
}

func (x *UplinkRxInfo) GetRssi() int32 {
	if x != nil {
		return x.Rssi
	}
	return 0
}

func (x *UplinkRxInfo) GetSnr() float32 {
	if x != nil {
		return x.Snr
	}
	return 0
}

func (x *UplinkRxInfo) GetChannel() uint32 {
	if x != nil {
		return x.Channel
	}
	return 0
}

func (x *UplinkRxInfo) GetRfChain() uint32 {
	if x != nil {
		return x.RfChain
	}
	return 0
}

func (x *UplinkRxInfo) GetBoard() uint32 {
	if x != nil {
		return x.Board
	}
	return 0
}

func (x *UplinkRxInfo) GetAntenna() uint32 {
	if x != nil {
		return x.Antenna
	}
	return 0
}

func (x *UplinkRxInfo) GetLocation() *common.Location {
	if x != nil {
		return x.Location
	}
	return nil
}

func (x *UplinkRxInfo) GetContext() []byte {
	if x != nil {
		return x.Context
	}
	return nil
}

func (x *UplinkRxInfo) GetMetadata() map[string]string {
	if x != nil {
		return x.Metadata
	}
	return nil
}

func (x *UplinkRxInfo) GetCrcStatus() CRCStatus {
	if x != nil {
		return x.CrcStatus
	}
	return CRCStatus_NO_CRC
}

type DownlinkTxInfoLegacy struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Gateway ID.
	// Deprecated: replaced by gateway_id in DownlinkFrame.
	GatewayId []byte `protobuf:"bytes,1,opt,name=gateway_id,json=gatewayId,proto3" json:"gateway_id,omitempty"`
	// TX frequency (in Hz).
	Frequency uint32 `protobuf:"varint,5,opt,name=frequency,proto3" json:"frequency,omitempty"`
	// TX power (in dBm EIRP).
	Power int32 `protobuf:"varint,6,opt,name=power,proto3" json:"power,omitempty"`
	// Modulation.
	Modulation common.Modulation `protobuf:"varint,7,opt,name=modulation,proto3,enum=common.Modulation" json:"modulation,omitempty"`
	// Types that are valid to be assigned to ModulationInfo:
	//
	//	*DownlinkTxInfoLegacy_LoraModulationInfo
	//	*DownlinkTxInfoLegacy_FskModulationInfo
	ModulationInfo isDownlinkTxInfoLegacy_ModulationInfo `protobuf_oneof:"modulation_info"`
	// The board identifier for emitting the frame.
	Board uint32 `protobuf:"varint,10,opt,name=board,proto3" json:"board,omitempty"`
	// The antenna identifier for emitting the frame.
	Antenna uint32 `protobuf:"varint,11,opt,name=antenna,proto3" json:"antenna,omitempty"`
	// Timing defines the downlink timing to use.
	Timing DownlinkTiming `protobuf:"varint,12,opt,name=timing,proto3,enum=gw.DownlinkTiming" json:"timing,omitempty"`
	// Types that are valid to be assigned to TimingInfo:
	//
	//	*DownlinkTxInfoLegacy_ImmediatelyTimingInfo
	//	*DownlinkTxInfoLegacy_DelayTimingInfo
	//	*DownlinkTxInfoLegacy_GpsEpochTimingInfo
	TimingInfo isDownlinkTxInfoLegacy_TimingInfo `protobuf_oneof:"timing_info"`
	// Gateway specific context.
	// In case of a Class-A downlink, this contains a copy of the uplink context.
	Context       []byte `protobuf:"bytes,16,opt,name=context,proto3" json:"context,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *DownlinkTxInfoLegacy) Reset() {
	*x = DownlinkTxInfoLegacy{}
	mi := &file_gw_gw_proto_msgTypes[20]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *DownlinkTxInfoLegacy) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*DownlinkTxInfoLegacy) ProtoMessage() {}

func (x *DownlinkTxInfoLegacy) ProtoReflect() protoreflect.Message {
	mi := &file_gw_gw_proto_msgTypes[20]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use DownlinkTxInfoLegacy.ProtoReflect.Descriptor instead.
func (*DownlinkTxInfoLegacy) Descriptor() ([]byte, []int) {
	return file_gw_gw_proto_rawDescGZIP(), []int{20}
}

func (x *DownlinkTxInfoLegacy) GetGatewayId() []byte {
	if x != nil {
		return x.GatewayId
	}
	return nil
}

func (x *DownlinkTxInfoLegacy) GetFrequency() uint32 {
	if x != nil {
		return x.Frequency
	}
	return 0
}

func (x *DownlinkTxInfoLegacy) GetPower() int32 {
	if x != nil {
		return x.Power
	}
	return 0
}

func (x *DownlinkTxInfoLegacy) GetModulation() common.Modulation {
	if x != nil {
		return x.Modulation
	}
	return common.Modulation(0)
}

func (x *DownlinkTxInfoLegacy) GetModulationInfo() isDownlinkTxInfoLegacy_ModulationInfo {
	if x != nil {
		return x.ModulationInfo
	}
	return nil
}

func (x *DownlinkTxInfoLegacy) GetLoraModulationInfo() *LoraModulationInfo {
	if x != nil {
		if x, ok := x.ModulationInfo.(*DownlinkTxInfoLegacy_LoraModulationInfo); ok {
			return x.LoraModulationInfo
		}
	}
	return nil
}

func (x *DownlinkTxInfoLegacy) GetFskModulationInfo() *FskModulationInfo {
	if x != nil {
		if x, ok := x.ModulationInfo.(*DownlinkTxInfoLegacy_FskModulationInfo); ok {
			return x.FskModulationInfo
		}
	}
	return nil
}

func (x *DownlinkTxInfoLegacy) GetBoard() uint32 {
	if x != nil {
		return x.Board
	}
	return 0
}

func (x *DownlinkTxInfoLegacy) GetAntenna() uint32 {
	if x != nil {
		return x.Antenna
	}
	return 0
}

func (x *DownlinkTxInfoLegacy) GetTiming() DownlinkTiming {
	if x != nil {
		return x.Timing
	}
	return DownlinkTiming_IMMEDIATELY
}

func (x *DownlinkTxInfoLegacy) GetTimingInfo() isDownlinkTxInfoLegacy_TimingInfo {
	if x != nil {
		return x.TimingInfo
	}
	return nil
}

func (x *DownlinkTxInfoLegacy) GetImmediatelyTimingInfo() *ImmediatelyTimingInfo {
	if x != nil {
		if x, ok := x.TimingInfo.(*DownlinkTxInfoLegacy_ImmediatelyTimingInfo); ok {
			return x.ImmediatelyTimingInfo
		}
	}
	return nil
}

func (x *DownlinkTxInfoLegacy) GetDelayTimingInfo() *DelayTimingInfo {
	if x != nil {
		if x, ok := x.TimingInfo.(*DownlinkTxInfoLegacy_DelayTimingInfo); ok {
			return x.DelayTimingInfo
		}
	}
	return nil
}

func (x *DownlinkTxInfoLegacy) GetGpsEpochTimingInfo() *GPSEpochTimingInfo {
	if x != nil {
		if x, ok := x.TimingInfo.(*DownlinkTxInfoLegacy_GpsEpochTimingInfo); ok {
			return x.GpsEpochTimingInfo
		}
	}
	return nil
}

func (x *DownlinkTxInfoLegacy) GetContext() []byte {
	if x != nil {
		return x.Context
	}
	return nil
}

type isDownlinkTxInfoLegacy_ModulationInfo interface {
	isDownlinkTxInfoLegacy_ModulationInfo()
}

type DownlinkTxInfoLegacy_LoraModulationInfo struct {
	// LoRa modulation information.
	LoraModulationInfo *LoraModulationInfo `protobuf:"bytes,8,opt,name=lora_modulation_info,json=loraModulationInfo,proto3,oneof"`
}

type DownlinkTxInfoLegacy_FskModulationInfo struct {
	// FSK modulation information.
	FskModulationInfo *FskModulationInfo `protobuf:"bytes,9,opt,name=fsk_modulation_info,json=fskModulationInfo,proto3,oneof"`
}

func (*DownlinkTxInfoLegacy_LoraModulationInfo) isDownlinkTxInfoLegacy_ModulationInfo() {}

func (*DownlinkTxInfoLegacy_FskModulationInfo) isDownlinkTxInfoLegacy_ModulationInfo() {}

type isDownlinkTxInfoLegacy_TimingInfo interface {
	isDownlinkTxInfoLegacy_TimingInfo()
}

type DownlinkTxInfoLegacy_ImmediatelyTimingInfo struct {
	// Immediately timing information.
	ImmediatelyTimingInfo *ImmediatelyTimingInfo `protobuf:"bytes,13,opt,name=immediately_timing_info,json=immediatelyTimingInfo,proto3,oneof"`
}

type DownlinkTxInfoLegacy_DelayTimingInfo struct {
	// Context based delay timing information.
	DelayTimingInfo *DelayTimingInfo `protobuf:"bytes,14,opt,name=delay_timing_info,json=delayTimingInfo,proto3,oneof"`
}

type DownlinkTxInfoLegacy_GpsEpochTimingInfo struct {
	// GPS Epoch timing information.
	GpsEpochTimingInfo *GPSEpochTimingInfo `protobuf:"bytes,15,opt,name=gps_epoch_timing_info,json=gpsEpochTimingInfo,proto3,oneof"`
}

func (*DownlinkTxInfoLegacy_ImmediatelyTimingInfo) isDownlinkTxInfoLegacy_TimingInfo() {}

func (*DownlinkTxInfoLegacy_DelayTimingInfo) isDownlinkTxInfoLegacy_TimingInfo() {}

func (*DownlinkTxInfoLegacy_GpsEpochTimingInfo) isDownlinkTxInfoLegacy_TimingInfo() {}

type DownlinkTxInfo struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// TX frequency (in Hz).
	Frequency uint32 `protobuf:"varint,1,opt,name=frequency,proto3" json:"frequency,omitempty"`
	// TX power (in dBm EIRP).
	Power int32 `protobuf:"varint,2,opt,name=power,proto3" json:"power,omitempty"`
	// Modulation.
	Modulation *Modulation `protobuf:"bytes,3,opt,name=modulation,proto3" json:"modulation,omitempty"`
	// The board identifier for emitting the frame.
	Board uint32 `protobuf:"varint,4,opt,name=board,proto3" json:"board,omitempty"`
	// The antenna identifier for emitting the frame.
	Antenna uint32 `protobuf:"varint,5,opt,name=antenna,proto3" json:"antenna,omitempty"`
	// Timing.
	Timing *Timing `protobuf:"bytes,6,opt,name=timing,proto3" json:"timing,omitempty"`
	// Gateway specific context.
	// In case of a Class-A downlink, this contains a copy of the uplink context.
	Context       []byte `protobuf:"bytes,7,opt,name=context,proto3" json:"context,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *DownlinkTxInfo) Reset() {
	*x = DownlinkTxInfo{}
	mi := &file_gw_gw_proto_msgTypes[21]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *DownlinkTxInfo) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*DownlinkTxInfo) ProtoMessage() {}

func (x *DownlinkTxInfo) ProtoReflect() protoreflect.Message {
	mi := &file_gw_gw_proto_msgTypes[21]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use DownlinkTxInfo.ProtoReflect.Descriptor instead.
func (*DownlinkTxInfo) Descriptor() ([]byte, []int) {
	return file_gw_gw_proto_rawDescGZIP(), []int{21}
}

func (x *DownlinkTxInfo) GetFrequency() uint32 {
	if x != nil {
		return x.Frequency
	}
	return 0
}

func (x *DownlinkTxInfo) GetPower() int32 {
	if x != nil {
		return x.Power
	}
	return 0
}

func (x *DownlinkTxInfo) GetModulation() *Modulation {
	if x != nil {
		return x.Modulation
	}
	return nil
}

func (x *DownlinkTxInfo) GetBoard() uint32 {
	if x != nil {
		return x.Board
	}
	return 0
}

func (x *DownlinkTxInfo) GetAntenna() uint32 {
	if x != nil {
		return x.Antenna
	}
	return 0
}

func (x *DownlinkTxInfo) GetTiming() *Timing {
	if x != nil {
		return x.Timing
	}
	return nil
}

func (x *DownlinkTxInfo) GetContext() []byte {
	if x != nil {
		return x.Context
	}
	return nil
}

type Timing struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Types that are valid to be assigned to Parameters:
	//
	//	*Timing_Immediately
	//	*Timing_Delay
	//	*Timing_GpsEpoch
	Parameters    isTiming_Parameters `protobuf_oneof:"parameters"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *Timing) Reset() {
	*x = Timing{}
	mi := &file_gw_gw_proto_msgTypes[22]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *Timing) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*Timing) ProtoMessage() {}

func (x *Timing) ProtoReflect() protoreflect.Message {
	mi := &file_gw_gw_proto_msgTypes[22]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use Timing.ProtoReflect.Descriptor instead.
func (*Timing) Descriptor() ([]byte, []int) {
	return file_gw_gw_proto_rawDescGZIP(), []int{22}
}

func (x *Timing) GetParameters() isTiming_Parameters {
	if x != nil {
		return x.Parameters
	}
	return nil
}

func (x *Timing) GetImmediately() *ImmediatelyTimingInfo {
	if x != nil {
		if x, ok := x.Parameters.(*Timing_Immediately); ok {
			return x.Immediately
		}
	}
	return nil
}

func (x *Timing) GetDelay() *DelayTimingInfo {
	if x != nil {
		if x, ok := x.Parameters.(*Timing_Delay); ok {
			return x.Delay
		}
	}
	return nil
}

func (x *Timing) GetGpsEpoch() *GPSEpochTimingInfo {
	if x != nil {
		if x, ok := x.Parameters.(*Timing_GpsEpoch); ok {
			return x.GpsEpoch
		}
	}
	return nil
}

type isTiming_Parameters interface {
	isTiming_Parameters()
}

type Timing_Immediately struct {
	// Immediately timing information.
	Immediately *ImmediatelyTimingInfo `protobuf:"bytes,1,opt,name=immediately,proto3,oneof"`
}

type Timing_Delay struct {
	// Context based delay timing information.
	Delay *DelayTimingInfo `protobuf:"bytes,2,opt,name=delay,proto3,oneof"`
}

type Timing_GpsEpoch struct {
	// GPS Epoch timing information.
	GpsEpoch *GPSEpochTimingInfo `protobuf:"bytes,3,opt,name=gps_epoch,json=gpsEpoch,proto3,oneof"`
}

func (*Timing_Immediately) isTiming_Parameters() {}

func (*Timing_Delay) isTiming_Parameters() {}

func (*Timing_GpsEpoch) isTiming_Parameters() {}

type ImmediatelyTimingInfo struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *ImmediatelyTimingInfo) Reset() {
	*x = ImmediatelyTimingInfo{}
	mi := &file_gw_gw_proto_msgTypes[23]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *ImmediatelyTimingInfo) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ImmediatelyTimingInfo) ProtoMessage() {}

func (x *ImmediatelyTimingInfo) ProtoReflect() protoreflect.Message {
	mi := &file_gw_gw_proto_msgTypes[23]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ImmediatelyTimingInfo.ProtoReflect.Descriptor instead.
func (*ImmediatelyTimingInfo) Descriptor() ([]byte, []int) {
	return file_gw_gw_proto_rawDescGZIP(), []int{23}
}

type DelayTimingInfo struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Delay (duration).
	// The delay will be added to the gateway internal timing, provided by the
	// context object.
	Delay         *durationpb.Duration `protobuf:"bytes,1,opt,name=delay,proto3" json:"delay,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *DelayTimingInfo) Reset() {
	*x = DelayTimingInfo{}
	mi := &file_gw_gw_proto_msgTypes[24]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *DelayTimingInfo) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*DelayTimingInfo) ProtoMessage() {}

func (x *DelayTimingInfo) ProtoReflect() protoreflect.Message {
	mi := &file_gw_gw_proto_msgTypes[24]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use DelayTimingInfo.ProtoReflect.Descriptor instead.
func (*DelayTimingInfo) Descriptor() ([]byte, []int) {
	return file_gw_gw_proto_rawDescGZIP(), []int{24}
}

func (x *DelayTimingInfo) GetDelay() *durationpb.Duration {
	if x != nil {
		return x.Delay
	}
	return nil
}

type GPSEpochTimingInfo struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Duration since GPS Epoch.
	TimeSinceGpsEpoch *durationpb.Duration `protobuf:"bytes,1,opt,name=time_since_gps_epoch,json=timeSinceGpsEpoch,proto3" json:"time_since_gps_epoch,omitempty"`
	unknownFields     protoimpl.UnknownFields
	sizeCache         protoimpl.SizeCache
}

func (x *GPSEpochTimingInfo) Reset() {
	*x = GPSEpochTimingInfo{}
	mi := &file_gw_gw_proto_msgTypes[25]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *GPSEpochTimingInfo) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*GPSEpochTimingInfo) ProtoMessage() {}

func (x *GPSEpochTimingInfo) ProtoReflect() protoreflect.Message {
	mi := &file_gw_gw_proto_msgTypes[25]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use GPSEpochTimingInfo.ProtoReflect.Descriptor instead.
func (*GPSEpochTimingInfo) Descriptor() ([]byte, []int) {
	return file_gw_gw_proto_rawDescGZIP(), []int{25}
}

func (x *GPSEpochTimingInfo) GetTimeSinceGpsEpoch() *durationpb.Duration {
	if x != nil {
		return x.TimeSinceGpsEpoch
	}
	return nil
}

type UplinkFrame struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// PHYPayload.
	PhyPayload []byte `protobuf:"bytes,1,opt,name=phy_payload,json=phyPayload,proto3" json:"phy_payload,omitempty"`
	// TX meta-data (deprecated).
	TxInfoLegacy *UplinkTxInfoLegacy `protobuf:"bytes,2,opt,name=tx_info_legacy,json=txInfoLegacy,proto3" json:"tx_info_legacy,omitempty"`
	// RX meta-data (deprecated).
	RxInfoLegacy *UplinkRxInfoLegacy `protobuf:"bytes,3,opt,name=rx_info_legacy,json=rxInfoLegacy,proto3" json:"rx_info_legacy,omitempty"`
	// Tx meta-data.
	TxInfo *UplinkTxInfo `protobuf:"bytes,4,opt,name=tx_info,json=txInfo,proto3" json:"tx_info,omitempty"`
	// Rx meta-data.
	RxInfo        *UplinkRxInfo `protobuf:"bytes,5,opt,name=rx_info,json=rxInfo,proto3" json:"rx_info,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *UplinkFrame) Reset() {
	*x = UplinkFrame{}
	mi := &file_gw_gw_proto_msgTypes[26]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *UplinkFrame) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*UplinkFrame) ProtoMessage() {}

func (x *UplinkFrame) ProtoReflect() protoreflect.Message {
	mi := &file_gw_gw_proto_msgTypes[26]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use UplinkFrame.ProtoReflect.Descriptor instead.
func (*UplinkFrame) Descriptor() ([]byte, []int) {
	return file_gw_gw_proto_rawDescGZIP(), []int{26}
}

func (x *UplinkFrame) GetPhyPayload() []byte {
	if x != nil {
		return x.PhyPayload
	}
	return nil
}

func (x *UplinkFrame) GetTxInfoLegacy() *UplinkTxInfoLegacy {
	if x != nil {
		return x.TxInfoLegacy
	}
	return nil
}

func (x *UplinkFrame) GetRxInfoLegacy() *UplinkRxInfoLegacy {
	if x != nil {
		return x.RxInfoLegacy
	}
	return nil
}

func (x *UplinkFrame) GetTxInfo() *UplinkTxInfo {
	if x != nil {
		return x.TxInfo
	}
	return nil
}

func (x *UplinkFrame) GetRxInfo() *UplinkRxInfo {
	if x != nil {
		return x.RxInfo
	}
	return nil
}

type UplinkFrameSet struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// PHYPayload.
	PhyPayload []byte `protobuf:"bytes,1,opt,name=phy_payload,json=phyPayload,proto3" json:"phy_payload,omitempty"`
	// TX meta-data.
	TxInfo *UplinkTxInfo `protobuf:"bytes,2,opt,name=tx_info,json=txInfo,proto3" json:"tx_info,omitempty"`
	// RX meta-data set.
	RxInfo        []*UplinkRxInfo `protobuf:"bytes,3,rep,name=rx_info,json=rxInfo,proto3" json:"rx_info,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *UplinkFrameSet) Reset() {
	*x = UplinkFrameSet{}
	mi := &file_gw_gw_proto_msgTypes[27]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *UplinkFrameSet) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*UplinkFrameSet) ProtoMessage() {}

func (x *UplinkFrameSet) ProtoReflect() protoreflect.Message {
	mi := &file_gw_gw_proto_msgTypes[27]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use UplinkFrameSet.ProtoReflect.Descriptor instead.
func (*UplinkFrameSet) Descriptor() ([]byte, []int) {
	return file_gw_gw_proto_rawDescGZIP(), []int{27}
}

func (x *UplinkFrameSet) GetPhyPayload() []byte {
	if x != nil {
		return x.PhyPayload
	}
	return nil
}

func (x *UplinkFrameSet) GetTxInfo() *UplinkTxInfo {
	if x != nil {
		return x.TxInfo
	}
	return nil
}

func (x *UplinkFrameSet) GetRxInfo() []*UplinkRxInfo {
	if x != nil {
		return x.RxInfo
	}
	return nil
}

type DownlinkFrame struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Downlink ID.
	DownlinkId uint32 `protobuf:"varint,3,opt,name=downlink_id,json=downlinkId,proto3" json:"downlink_id,omitempty"`
	// Downlink ID (UUID).
	// Deprecated: use downlink_id.
	DownlinkIdLegacy []byte `protobuf:"bytes,4,opt,name=downlink_id_legacy,json=downlinkIdLegacy,proto3" json:"downlink_id_legacy,omitempty"`
	// Downlink frame items.
	// This makes it possible to send multiple downlink opportunities to the
	// gateway at once (e.g. RX1 and RX2 in LoRaWAN). The first item has the
	// highest priority, the last the lowest. The gateway will emit at most
	// one item.
	Items []*DownlinkFrameItem `protobuf:"bytes,5,rep,name=items,proto3" json:"items,omitempty"`
	// Gateway ID.
	// Deprecated: use gateway_id
	GatewayIdLegacy []byte `protobuf:"bytes,6,opt,name=gateway_id_legacy,json=gatewayIdLegacy,proto3" json:"gateway_id_legacy,omitempty"`
	// Gateway ID.
	GatewayId     string `protobuf:"bytes,7,opt,name=gateway_id,json=gatewayId,proto3" json:"gateway_id,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *DownlinkFrame) Reset() {
	*x = DownlinkFrame{}
	mi := &file_gw_gw_proto_msgTypes[28]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *DownlinkFrame) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*DownlinkFrame) ProtoMessage() {}

func (x *DownlinkFrame) ProtoReflect() protoreflect.Message {
	mi := &file_gw_gw_proto_msgTypes[28]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use DownlinkFrame.ProtoReflect.Descriptor instead.
func (*DownlinkFrame) Descriptor() ([]byte, []int) {
	return file_gw_gw_proto_rawDescGZIP(), []int{28}
}

func (x *DownlinkFrame) GetDownlinkId() uint32 {
	if x != nil {
		return x.DownlinkId
	}
	return 0
}

func (x *DownlinkFrame) GetDownlinkIdLegacy() []byte {
	if x != nil {
		return x.DownlinkIdLegacy
	}
	return nil
}

func (x *DownlinkFrame) GetItems() []*DownlinkFrameItem {
	if x != nil {
		return x.Items
	}
	return nil
}

func (x *DownlinkFrame) GetGatewayIdLegacy() []byte {
	if x != nil {
		return x.GatewayIdLegacy
	}
	return nil
}

func (x *DownlinkFrame) GetGatewayId() string {
	if x != nil {
		return x.GatewayId
	}
	return ""
}

type DownlinkFrameItem struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// PHYPayload.
	PhyPayload []byte `protobuf:"bytes,1,opt,name=phy_payload,json=phyPayload,proto3" json:"phy_payload,omitempty"`
	// TX meta-data (deprecated).
	TxInfoLegacy *DownlinkTxInfoLegacy `protobuf:"bytes,2,opt,name=tx_info_legacy,json=txInfoLegacy,proto3" json:"tx_info_legacy,omitempty"`
	// Tx meta-data.
	TxInfo        *DownlinkTxInfo `protobuf:"bytes,3,opt,name=tx_info,json=txInfo,proto3" json:"tx_info,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *DownlinkFrameItem) Reset() {
	*x = DownlinkFrameItem{}
	mi := &file_gw_gw_proto_msgTypes[29]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *DownlinkFrameItem) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*DownlinkFrameItem) ProtoMessage() {}

func (x *DownlinkFrameItem) ProtoReflect() protoreflect.Message {
	mi := &file_gw_gw_proto_msgTypes[29]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use DownlinkFrameItem.ProtoReflect.Descriptor instead.
func (*DownlinkFrameItem) Descriptor() ([]byte, []int) {
	return file_gw_gw_proto_rawDescGZIP(), []int{29}
}

func (x *DownlinkFrameItem) GetPhyPayload() []byte {
	if x != nil {
		return x.PhyPayload
	}
	return nil
}

func (x *DownlinkFrameItem) GetTxInfoLegacy() *DownlinkTxInfoLegacy {
	if x != nil {
		return x.TxInfoLegacy
	}
	return nil
}

func (x *DownlinkFrameItem) GetTxInfo() *DownlinkTxInfo {
	if x != nil {
		return x.TxInfo
	}
	return nil
}

type DownlinkTxAck struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Gateway ID (deprecated).
	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"`
	// Downlink ID.
	DownlinkId uint32 `protobuf:"varint,2,opt,name=downlink_id,json=downlinkId,proto3" json:"downlink_id,omitempty"`
	// Downlink ID (deprecated).
	DownlinkIdLegacy []byte `protobuf:"bytes,4,opt,name=downlink_id_legacy,json=downlinkIdLegacy,proto3" json:"downlink_id_legacy,omitempty"`
	// Downlink frame items.
	// This list has the same length as the request and indicates which
	// downlink frame has been emitted of the requested list (or why it failed).
	// Note that at most one item has a positive acknowledgement.
	Items         []*DownlinkTxAckItem `protobuf:"bytes,5,rep,name=items,proto3" json:"items,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *DownlinkTxAck) Reset() {
	*x = DownlinkTxAck{}
	mi := &file_gw_gw_proto_msgTypes[30]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *DownlinkTxAck) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*DownlinkTxAck) ProtoMessage() {}

func (x *DownlinkTxAck) ProtoReflect() protoreflect.Message {
	mi := &file_gw_gw_proto_msgTypes[30]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use DownlinkTxAck.ProtoReflect.Descriptor instead.
func (*DownlinkTxAck) Descriptor() ([]byte, []int) {
	return file_gw_gw_proto_rawDescGZIP(), []int{30}
}

func (x *DownlinkTxAck) GetGatewayIdLegacy() []byte {
	if x != nil {
		return x.GatewayIdLegacy
	}
	return nil
}

func (x *DownlinkTxAck) GetGatewayId() string {
	if x != nil {
		return x.GatewayId
	}
	return ""
}

func (x *DownlinkTxAck) GetDownlinkId() uint32 {
	if x != nil {
		return x.DownlinkId
	}
	return 0
}

func (x *DownlinkTxAck) GetDownlinkIdLegacy() []byte {
	if x != nil {
		return x.DownlinkIdLegacy
	}
	return nil
}

func (x *DownlinkTxAck) GetItems() []*DownlinkTxAckItem {
	if x != nil {
		return x.Items
	}
	return nil
}

type DownlinkTxAckItem struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// The Ack status of this item.
	Status        TxAckStatus `protobuf:"varint,1,opt,name=status,proto3,enum=gw.TxAckStatus" json:"status,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *DownlinkTxAckItem) Reset() {
	*x = DownlinkTxAckItem{}
	mi := &file_gw_gw_proto_msgTypes[31]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *DownlinkTxAckItem) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*DownlinkTxAckItem) ProtoMessage() {}

func (x *DownlinkTxAckItem) ProtoReflect() protoreflect.Message {
	mi := &file_gw_gw_proto_msgTypes[31]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use DownlinkTxAckItem.ProtoReflect.Descriptor instead.
func (*DownlinkTxAckItem) Descriptor() ([]byte, []int) {
	return file_gw_gw_proto_rawDescGZIP(), []int{31}
}

func (x *DownlinkTxAckItem) GetStatus() TxAckStatus {
	if x != nil {
		return x.Status
	}
	return TxAckStatus_IGNORED
}

type GatewayConfiguration struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Gateway ID.
	// Deprecated: use gateway_id.
	GatewayIdLegacy []byte `protobuf:"bytes,1,opt,name=gateway_id_legacy,json=gatewayIdLegacy,proto3" json:"gateway_id_legacy,omitempty"`
	// Gateway ID.
	GatewayId string `protobuf:"bytes,5,opt,name=gateway_id,json=gatewayId,proto3" json:"gateway_id,omitempty"`
	// Configuration version.
	Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"`
	// Channels.
	Channels []*ChannelConfiguration `protobuf:"bytes,3,rep,name=channels,proto3" json:"channels,omitempty"`
	// Stats interval.
	StatsInterval *durationpb.Duration `protobuf:"bytes,4,opt,name=stats_interval,json=statsInterval,proto3" json:"stats_interval,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *GatewayConfiguration) Reset() {
	*x = GatewayConfiguration{}
	mi := &file_gw_gw_proto_msgTypes[32]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *GatewayConfiguration) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*GatewayConfiguration) ProtoMessage() {}

func (x *GatewayConfiguration) ProtoReflect() protoreflect.Message {
	mi := &file_gw_gw_proto_msgTypes[32]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use GatewayConfiguration.ProtoReflect.Descriptor instead.
func (*GatewayConfiguration) Descriptor() ([]byte, []int) {
	return file_gw_gw_proto_rawDescGZIP(), []int{32}
}

func (x *GatewayConfiguration) GetGatewayIdLegacy() []byte {
	if x != nil {
		return x.GatewayIdLegacy
	}
	return nil
}

func (x *GatewayConfiguration) GetGatewayId() string {
	if x != nil {
		return x.GatewayId
	}
	return ""
}

func (x *GatewayConfiguration) GetVersion() string {
	if x != nil {
		return x.Version
	}
	return ""
}

func (x *GatewayConfiguration) GetChannels() []*ChannelConfiguration {
	if x != nil {
		return x.Channels
	}
	return nil
}

func (x *GatewayConfiguration) GetStatsInterval() *durationpb.Duration {
	if x != nil {
		return x.StatsInterval
	}
	return nil
}

type GetGatewayIdRequest struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *GetGatewayIdRequest) Reset() {
	*x = GetGatewayIdRequest{}
	mi := &file_gw_gw_proto_msgTypes[33]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *GetGatewayIdRequest) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*GetGatewayIdRequest) ProtoMessage() {}

func (x *GetGatewayIdRequest) ProtoReflect() protoreflect.Message {
	mi := &file_gw_gw_proto_msgTypes[33]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use GetGatewayIdRequest.ProtoReflect.Descriptor instead.
func (*GetGatewayIdRequest) Descriptor() ([]byte, []int) {
	return file_gw_gw_proto_rawDescGZIP(), []int{33}
}

type GetGatewayIdResponse struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Gateway ID.
	GatewayId     string `protobuf:"bytes,1,opt,name=gateway_id,json=gatewayId,proto3" json:"gateway_id,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *GetGatewayIdResponse) Reset() {
	*x = GetGatewayIdResponse{}
	mi := &file_gw_gw_proto_msgTypes[34]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *GetGatewayIdResponse) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*GetGatewayIdResponse) ProtoMessage() {}

func (x *GetGatewayIdResponse) ProtoReflect() protoreflect.Message {
	mi := &file_gw_gw_proto_msgTypes[34]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use GetGatewayIdResponse.ProtoReflect.Descriptor instead.
func (*GetGatewayIdResponse) Descriptor() ([]byte, []int) {
	return file_gw_gw_proto_rawDescGZIP(), []int{34}
}

func (x *GetGatewayIdResponse) GetGatewayId() string {
	if x != nil {
		return x.GatewayId
	}
	return ""
}

type GetLocationRequest struct {
	state         protoimpl.MessageState `protogen:"open.v1"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *GetLocationRequest) Reset() {
	*x = GetLocationRequest{}
	mi := &file_gw_gw_proto_msgTypes[35]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *GetLocationRequest) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*GetLocationRequest) ProtoMessage() {}

func (x *GetLocationRequest) ProtoReflect() protoreflect.Message {
	mi := &file_gw_gw_proto_msgTypes[35]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use GetLocationRequest.ProtoReflect.Descriptor instead.
func (*GetLocationRequest) Descriptor() ([]byte, []int) {
	return file_gw_gw_proto_rawDescGZIP(), []int{35}
}

type GetLocationResponse struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Location.
	Location *common.Location `protobuf:"bytes,1,opt,name=location,proto3" json:"location,omitempty"`
	// Last updated at.
	UpdatedAt     *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *GetLocationResponse) Reset() {
	*x = GetLocationResponse{}
	mi := &file_gw_gw_proto_msgTypes[36]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *GetLocationResponse) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*GetLocationResponse) ProtoMessage() {}

func (x *GetLocationResponse) ProtoReflect() protoreflect.Message {
	mi := &file_gw_gw_proto_msgTypes[36]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use GetLocationResponse.ProtoReflect.Descriptor instead.
func (*GetLocationResponse) Descriptor() ([]byte, []int) {
	return file_gw_gw_proto_rawDescGZIP(), []int{36}
}

func (x *GetLocationResponse) GetLocation() *common.Location {
	if x != nil {
		return x.Location
	}
	return nil
}

func (x *GetLocationResponse) GetUpdatedAt() *timestamppb.Timestamp {
	if x != nil {
		return x.UpdatedAt
	}
	return nil
}

type ChannelConfiguration struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Frequency (Hz).
	Frequency uint32 `protobuf:"varint,1,opt,name=frequency,proto3" json:"frequency,omitempty"`
	// Modulation (deprecated).
	ModulationLegacy common.Modulation `protobuf:"varint,2,opt,name=modulation_legacy,json=modulationLegacy,proto3,enum=common.Modulation" json:"modulation_legacy,omitempty"`
	// Types that are valid to be assigned to ModulationConfig:
	//
	//	*ChannelConfiguration_LoraModulationConfig
	//	*ChannelConfiguration_FskModulationConfig
	ModulationConfig isChannelConfiguration_ModulationConfig `protobuf_oneof:"modulation_config"`
	// Board index.
	Board uint32 `protobuf:"varint,5,opt,name=board,proto3" json:"board,omitempty"`
	// Demodulator index (of the given board).
	Demodulator   uint32 `protobuf:"varint,6,opt,name=demodulator,proto3" json:"demodulator,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *ChannelConfiguration) Reset() {
	*x = ChannelConfiguration{}
	mi := &file_gw_gw_proto_msgTypes[37]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *ChannelConfiguration) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ChannelConfiguration) ProtoMessage() {}

func (x *ChannelConfiguration) ProtoReflect() protoreflect.Message {
	mi := &file_gw_gw_proto_msgTypes[37]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ChannelConfiguration.ProtoReflect.Descriptor instead.
func (*ChannelConfiguration) Descriptor() ([]byte, []int) {
	return file_gw_gw_proto_rawDescGZIP(), []int{37}
}

func (x *ChannelConfiguration) GetFrequency() uint32 {
	if x != nil {
		return x.Frequency
	}
	return 0
}

func (x *ChannelConfiguration) GetModulationLegacy() common.Modulation {
	if x != nil {
		return x.ModulationLegacy
	}
	return common.Modulation(0)
}

func (x *ChannelConfiguration) GetModulationConfig() isChannelConfiguration_ModulationConfig {
	if x != nil {
		return x.ModulationConfig
	}
	return nil
}

func (x *ChannelConfiguration) GetLoraModulationConfig() *LoraModulationConfig {
	if x != nil {
		if x, ok := x.ModulationConfig.(*ChannelConfiguration_LoraModulationConfig); ok {
			return x.LoraModulationConfig
		}
	}
	return nil
}

func (x *ChannelConfiguration) GetFskModulationConfig() *FskModulationConfig {
	if x != nil {
		if x, ok := x.ModulationConfig.(*ChannelConfiguration_FskModulationConfig); ok {
			return x.FskModulationConfig
		}
	}
	return nil
}

func (x *ChannelConfiguration) GetBoard() uint32 {
	if x != nil {
		return x.Board
	}
	return 0
}

func (x *ChannelConfiguration) GetDemodulator() uint32 {
	if x != nil {
		return x.Demodulator
	}
	return 0
}

type isChannelConfiguration_ModulationConfig interface {
	isChannelConfiguration_ModulationConfig()
}

type ChannelConfiguration_LoraModulationConfig struct {
	// LoRa modulation config.
	LoraModulationConfig *LoraModulationConfig `protobuf:"bytes,3,opt,name=lora_modulation_config,json=loraModulationConfig,proto3,oneof"`
}

type ChannelConfiguration_FskModulationConfig struct {
	// FSK modulation config.
	FskModulationConfig *FskModulationConfig `protobuf:"bytes,4,opt,name=fsk_modulation_config,json=fskModulationConfig,proto3,oneof"`
}

func (*ChannelConfiguration_LoraModulationConfig) isChannelConfiguration_ModulationConfig() {}

func (*ChannelConfiguration_FskModulationConfig) isChannelConfiguration_ModulationConfig() {}

type LoraModulationConfig struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Bandwidth (kHz).
	// Deprecated: use bandwidth.
	BandwidthLegacy uint32 `protobuf:"varint,1,opt,name=bandwidth_legacy,json=bandwidthLegacy,proto3" json:"bandwidth_legacy,omitempty"`
	// Bandwidth (Hz).
	Bandwidth uint32 `protobuf:"varint,3,opt,name=bandwidth,proto3" json:"bandwidth,omitempty"`
	// Spreading-factors.
	SpreadingFactors []uint32 `protobuf:"varint,2,rep,packed,name=spreading_factors,json=spreadingFactors,proto3" json:"spreading_factors,omitempty"`
	unknownFields    protoimpl.UnknownFields
	sizeCache        protoimpl.SizeCache
}

func (x *LoraModulationConfig) Reset() {
	*x = LoraModulationConfig{}
	mi := &file_gw_gw_proto_msgTypes[38]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *LoraModulationConfig) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*LoraModulationConfig) ProtoMessage() {}

func (x *LoraModulationConfig) ProtoReflect() protoreflect.Message {
	mi := &file_gw_gw_proto_msgTypes[38]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use LoraModulationConfig.ProtoReflect.Descriptor instead.
func (*LoraModulationConfig) Descriptor() ([]byte, []int) {
	return file_gw_gw_proto_rawDescGZIP(), []int{38}
}

func (x *LoraModulationConfig) GetBandwidthLegacy() uint32 {
	if x != nil {
		return x.BandwidthLegacy
	}
	return 0
}

func (x *LoraModulationConfig) GetBandwidth() uint32 {
	if x != nil {
		return x.Bandwidth
	}
	return 0
}

func (x *LoraModulationConfig) GetSpreadingFactors() []uint32 {
	if x != nil {
		return x.SpreadingFactors
	}
	return nil
}

type FskModulationConfig struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Bandwidth (kHz).
	// Deprecated: use bandwidth.
	BandwidthLegacy uint32 `protobuf:"varint,1,opt,name=bandwidth_legacy,json=bandwidthLegacy,proto3" json:"bandwidth_legacy,omitempty"`
	// Bandwidth (Hz).
	Bandwidth uint32 `protobuf:"varint,3,opt,name=bandwidth,proto3" json:"bandwidth,omitempty"`
	// Bitrate.
	Bitrate       uint32 `protobuf:"varint,2,opt,name=bitrate,proto3" json:"bitrate,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *FskModulationConfig) Reset() {
	*x = FskModulationConfig{}
	mi := &file_gw_gw_proto_msgTypes[39]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *FskModulationConfig) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*FskModulationConfig) ProtoMessage() {}

func (x *FskModulationConfig) ProtoReflect() protoreflect.Message {
	mi := &file_gw_gw_proto_msgTypes[39]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use FskModulationConfig.ProtoReflect.Descriptor instead.
func (*FskModulationConfig) Descriptor() ([]byte, []int) {
	return file_gw_gw_proto_rawDescGZIP(), []int{39}
}

func (x *FskModulationConfig) GetBandwidthLegacy() uint32 {
	if x != nil {
		return x.BandwidthLegacy
	}
	return 0
}

func (x *FskModulationConfig) GetBandwidth() uint32 {
	if x != nil {
		return x.Bandwidth
	}
	return 0
}

func (x *FskModulationConfig) GetBitrate() uint32 {
	if x != nil {
		return x.Bitrate
	}
	return 0
}

type GatewayCommandExecRequest struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Gateway ID.
	// Deprecated: use gateway_id.
	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"`
	// 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.
	// The same will be returned when the execution of the command has
	// completed.
	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.
	Environment   map[string]string `protobuf:"bytes,5,rep,name=environment,proto3" json:"environment,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *GatewayCommandExecRequest) Reset() {
	*x = GatewayCommandExecRequest{}
	mi := &file_gw_gw_proto_msgTypes[40]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *GatewayCommandExecRequest) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*GatewayCommandExecRequest) ProtoMessage() {}

func (x *GatewayCommandExecRequest) ProtoReflect() protoreflect.Message {
	mi := &file_gw_gw_proto_msgTypes[40]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use GatewayCommandExecRequest.ProtoReflect.Descriptor instead.
func (*GatewayCommandExecRequest) Descriptor() ([]byte, []int) {
	return file_gw_gw_proto_rawDescGZIP(), []int{40}
}

func (x *GatewayCommandExecRequest) GetGatewayIdLegacy() []byte {
	if x != nil {
		return x.GatewayIdLegacy
	}
	return nil
}

func (x *GatewayCommandExecRequest) GetGatewayId() string {
	if x != nil {
		return x.GatewayId
	}
	return ""
}

func (x *GatewayCommandExecRequest) GetCommand() string {
	if x != nil {
		return x.Command
	}
	return ""
}

func (x *GatewayCommandExecRequest) GetExecId() uint32 {
	if x != nil {
		return x.ExecId
	}
	return 0
}

func (x *GatewayCommandExecRequest) GetStdin() []byte {
	if x != nil {
		return x.Stdin
	}
	return nil
}

func (x *GatewayCommandExecRequest) GetEnvironment() map[string]string {
	if x != nil {
		return x.Environment
	}
	return nil
}

type GatewayCommandExecResponse struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Gateway ID.
	// Deprecated: use gateway_id.
	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.
	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.
	Stderr []byte `protobuf:"bytes,4,opt,name=stderr,proto3" json:"stderr,omitempty"`
	// Error message.
	Error         string `protobuf:"bytes,5,opt,name=error,proto3" json:"error,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *GatewayCommandExecResponse) Reset() {
	*x = GatewayCommandExecResponse{}
	mi := &file_gw_gw_proto_msgTypes[41]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *GatewayCommandExecResponse) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*GatewayCommandExecResponse) ProtoMessage() {}

func (x *GatewayCommandExecResponse) ProtoReflect() protoreflect.Message {
	mi := &file_gw_gw_proto_msgTypes[41]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use GatewayCommandExecResponse.ProtoReflect.Descriptor instead.
func (*GatewayCommandExecResponse) Descriptor() ([]byte, []int) {
	return file_gw_gw_proto_rawDescGZIP(), []int{41}
}

func (x *GatewayCommandExecResponse) GetGatewayIdLegacy() []byte {
	if x != nil {
		return x.GatewayIdLegacy
	}
	return nil
}

func (x *GatewayCommandExecResponse) GetGatewayId() string {
	if x != nil {
		return x.GatewayId
	}
	return ""
}

func (x *GatewayCommandExecResponse) GetExecId() uint32 {
	if x != nil {
		return x.ExecId
	}
	return 0
}

func (x *GatewayCommandExecResponse) GetStdout() []byte {
	if x != nil {
		return x.Stdout
	}
	return nil
}

func (x *GatewayCommandExecResponse) GetStderr() []byte {
	if x != nil {
		return x.Stderr
	}
	return nil
}

func (x *GatewayCommandExecResponse) GetError() string {
	if x != nil {
		return x.Error
	}
	return ""
}

// RawPacketForwarderEvent contains a raw packet-forwarder event.
// It can be used to access packet-forwarder features that are not (fully)
// integrated with the ChirpStack Gateway Bridge.
type RawPacketForwarderEvent struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Gateway ID.
	// Deprecated: use gateway_id.
	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"`
	// Payload contains the raw payload.
	Payload       []byte `protobuf:"bytes,3,opt,name=payload,proto3" json:"payload,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *RawPacketForwarderEvent) Reset() {
	*x = RawPacketForwarderEvent{}
	mi := &file_gw_gw_proto_msgTypes[42]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *RawPacketForwarderEvent) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*RawPacketForwarderEvent) ProtoMessage() {}

func (x *RawPacketForwarderEvent) ProtoReflect() protoreflect.Message {
	mi := &file_gw_gw_proto_msgTypes[42]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use RawPacketForwarderEvent.ProtoReflect.Descriptor instead.
func (*RawPacketForwarderEvent) Descriptor() ([]byte, []int) {
	return file_gw_gw_proto_rawDescGZIP(), []int{42}
}

func (x *RawPacketForwarderEvent) GetGatewayIdLegacy() []byte {
	if x != nil {
		return x.GatewayIdLegacy
	}
	return nil
}

func (x *RawPacketForwarderEvent) GetGatewayId() string {
	if x != nil {
		return x.GatewayId
	}
	return ""
}

func (x *RawPacketForwarderEvent) GetPayload() []byte {
	if x != nil {
		return x.Payload
	}
	return nil
}

// RawPacketForwarderEvent contains a raw packet-forwarder command.
// It can be used to access packet-forwarder features that are not (fully)
// integrated with the ChirpStack Gateway Bridge.
type RawPacketForwarderCommand struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Gateway ID.
	// Deprecated: use gateway_id.
	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"`
	// Payload contains the raw payload.
	Payload       []byte `protobuf:"bytes,3,opt,name=payload,proto3" json:"payload,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *RawPacketForwarderCommand) Reset() {
	*x = RawPacketForwarderCommand{}
	mi := &file_gw_gw_proto_msgTypes[43]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *RawPacketForwarderCommand) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*RawPacketForwarderCommand) ProtoMessage() {}

func (x *RawPacketForwarderCommand) ProtoReflect() protoreflect.Message {
	mi := &file_gw_gw_proto_msgTypes[43]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use RawPacketForwarderCommand.ProtoReflect.Descriptor instead.
func (*RawPacketForwarderCommand) Descriptor() ([]byte, []int) {
	return file_gw_gw_proto_rawDescGZIP(), []int{43}
}

func (x *RawPacketForwarderCommand) GetGatewayIdLegacy() []byte {
	if x != nil {
		return x.GatewayIdLegacy
	}
	return nil
}

func (x *RawPacketForwarderCommand) GetGatewayId() string {
	if x != nil {
		return x.GatewayId
	}
	return ""
}

func (x *RawPacketForwarderCommand) GetPayload() []byte {
	if x != nil {
		return x.Payload
	}
	return nil
}

// ConnState contains the connection state of a gateway.
type ConnState struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Gateway ID.
	// Deprecated: use gateway_id.
	GatewayIdLegacy []byte `protobuf:"bytes,1,opt,name=gateway_id_legacy,json=gatewayIdLegacy,proto3" json:"gateway_id_legacy,omitempty"`
	// Gateway ID.
	GatewayId     string          `protobuf:"bytes,3,opt,name=gateway_id,json=gatewayId,proto3" json:"gateway_id,omitempty"`
	State         ConnState_State `protobuf:"varint,2,opt,name=state,proto3,enum=gw.ConnState_State" json:"state,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *ConnState) Reset() {
	*x = ConnState{}
	mi := &file_gw_gw_proto_msgTypes[44]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *ConnState) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ConnState) ProtoMessage() {}

func (x *ConnState) ProtoReflect() protoreflect.Message {
	mi := &file_gw_gw_proto_msgTypes[44]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ConnState.ProtoReflect.Descriptor instead.
func (*ConnState) Descriptor() ([]byte, []int) {
	return file_gw_gw_proto_rawDescGZIP(), []int{44}
}

func (x *ConnState) GetGatewayIdLegacy() []byte {
	if x != nil {
		return x.GatewayIdLegacy
	}
	return nil
}

func (x *ConnState) GetGatewayId() string {
	if x != nil {
		return x.GatewayId
	}
	return ""
}

func (x *ConnState) GetState() ConnState_State {
	if x != nil {
		return x.State
	}
	return ConnState_OFFLINE
}

// Gateway Mesh heartbeat (sent periodically by the Relay Gateways).
type MeshEventHeartbeat struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Relay path.
	RelayPath     []*MeshEventHeartbeatRelayPath `protobuf:"bytes,4,rep,name=relay_path,json=relayPath,proto3" json:"relay_path,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *MeshEventHeartbeat) Reset() {
	*x = MeshEventHeartbeat{}
	mi := &file_gw_gw_proto_msgTypes[45]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *MeshEventHeartbeat) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*MeshEventHeartbeat) ProtoMessage() {}

func (x *MeshEventHeartbeat) ProtoReflect() protoreflect.Message {
	mi := &file_gw_gw_proto_msgTypes[45]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use MeshEventHeartbeat.ProtoReflect.Descriptor instead.
func (*MeshEventHeartbeat) Descriptor() ([]byte, []int) {
	return file_gw_gw_proto_rawDescGZIP(), []int{45}
}

func (x *MeshEventHeartbeat) GetRelayPath() []*MeshEventHeartbeatRelayPath {
	if x != nil {
		return x.RelayPath
	}
	return nil
}

type MeshEventHeartbeatRelayPath struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Relay ID.
	RelayId string `protobuf:"bytes,1,opt,name=relay_id,json=relayId,proto3" json:"relay_id,omitempty"`
	// RSSI.
	Rssi int32 `protobuf:"varint,2,opt,name=rssi,proto3" json:"rssi,omitempty"`
	// SNR.
	Snr           int32 `protobuf:"varint,3,opt,name=snr,proto3" json:"snr,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *MeshEventHeartbeatRelayPath) Reset() {
	*x = MeshEventHeartbeatRelayPath{}
	mi := &file_gw_gw_proto_msgTypes[46]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *MeshEventHeartbeatRelayPath) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*MeshEventHeartbeatRelayPath) ProtoMessage() {}

func (x *MeshEventHeartbeatRelayPath) ProtoReflect() protoreflect.Message {
	mi := &file_gw_gw_proto_msgTypes[46]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use MeshEventHeartbeatRelayPath.ProtoReflect.Descriptor instead.
func (*MeshEventHeartbeatRelayPath) Descriptor() ([]byte, []int) {
	return file_gw_gw_proto_rawDescGZIP(), []int{46}
}

func (x *MeshEventHeartbeatRelayPath) GetRelayId() string {
	if x != nil {
		return x.RelayId
	}
	return ""
}

func (x *MeshEventHeartbeatRelayPath) GetRssi() int32 {
	if x != nil {
		return x.Rssi
	}
	return 0
}

func (x *MeshEventHeartbeatRelayPath) GetSnr() int32 {
	if x != nil {
		return x.Snr
	}
	return 0
}

// Proprietary mesh event.
type MeshEventProprietary struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Event type.
	EventType uint32 `protobuf:"varint,1,opt,name=event_type,json=eventType,proto3" json:"event_type,omitempty"`
	// Payload.
	Payload       []byte `protobuf:"bytes,2,opt,name=payload,proto3" json:"payload,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *MeshEventProprietary) Reset() {
	*x = MeshEventProprietary{}
	mi := &file_gw_gw_proto_msgTypes[47]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *MeshEventProprietary) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*MeshEventProprietary) ProtoMessage() {}

func (x *MeshEventProprietary) ProtoReflect() protoreflect.Message {
	mi := &file_gw_gw_proto_msgTypes[47]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use MeshEventProprietary.ProtoReflect.Descriptor instead.
func (*MeshEventProprietary) Descriptor() ([]byte, []int) {
	return file_gw_gw_proto_rawDescGZIP(), []int{47}
}

func (x *MeshEventProprietary) GetEventType() uint32 {
	if x != nil {
		return x.EventType
	}
	return 0
}

func (x *MeshEventProprietary) GetPayload() []byte {
	if x != nil {
		return x.Payload
	}
	return nil
}

// Proprietary mesh command.
type MeshCommandProprietary struct {
	state protoimpl.MessageState `protogen:"open.v1"`
	// Command type.
	CommandType uint32 `protobuf:"varint,1,opt,name=command_type,json=commandType,proto3" json:"command_type,omitempty"`
	// Payload.
	Payload       []byte `protobuf:"bytes,2,opt,name=payload,proto3" json:"payload,omitempty"`
	unknownFields protoimpl.UnknownFields
	sizeCache     protoimpl.SizeCache
}

func (x *MeshCommandProprietary) Reset() {
	*x = MeshCommandProprietary{}
	mi := &file_gw_gw_proto_msgTypes[48]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *MeshCommandProprietary) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*MeshCommandProprietary) ProtoMessage() {}

func (x *MeshCommandProprietary) ProtoReflect() protoreflect.Message {
	mi := &file_gw_gw_proto_msgTypes[48]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use MeshCommandProprietary.ProtoReflect.Descriptor instead.
func (*MeshCommandProprietary) Descriptor() ([]byte, []int) {
	return file_gw_gw_proto_rawDescGZIP(), []int{48}
}

func (x *MeshCommandProprietary) GetCommandType() uint32 {
	if x != nil {
		return x.CommandType
	}
	return 0
}

func (x *MeshCommandProprietary) GetPayload() []byte {
	if x != nil {
		return x.Payload
	}
	return nil
}

var File_gw_gw_proto protoreflect.FileDescriptor

const file_gw_gw_proto_rawDesc = "" +
	"\n" +
	"\vgw/gw.proto\x12\x02gw\x1a\x13common/common.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1cgoogle/protobuf/struct.proto\"\xa4\x01\n" +
	"\x05Event\x124\n" +
	"\fuplink_frame\x18\x01 \x01(\v2\x0f.gw.UplinkFrameH\x00R\vuplinkFrame\x127\n" +
	"\rgateway_stats\x18\x02 \x01(\v2\x10.gw.GatewayStatsH\x00R\fgatewayStats\x12#\n" +
	"\x04mesh\x18\x03 \x01(\v2\r.gw.MeshEventH\x00R\x04meshB\a\n" +
	"\x05event\"\xd6\x02\n" +
	"\aCommand\x12C\n" +
	"\x13send_downlink_frame\x18\x01 \x01(\v2\x11.gw.DownlinkFrameH\x00R\x11sendDownlinkFrame\x12V\n" +
	"\x19set_gateway_configuration\x18\x02 \x01(\v2\x18.gw.GatewayConfigurationH\x00R\x17setGatewayConfiguration\x12?\n" +
	"\x0eget_gateway_id\x18\x03 \x01(\v2\x17.gw.GetGatewayIdRequestH\x00R\fgetGatewayId\x12;\n" +
	"\fget_location\x18\x04 \x01(\v2\x16.gw.GetLocationRequestH\x00R\vgetLocation\x12%\n" +
	"\x04mesh\x18\x05 \x01(\v2\x0f.gw.MeshCommandH\x00R\x04meshB\t\n" +
	"\acommand\"\xa0\x01\n" +
	"\tMeshEvent\x12\x1d\n" +
	"\n" +
	"gateway_id\x18\x01 \x01(\tR\tgatewayId\x12\x19\n" +
	"\brelay_id\x18\x02 \x01(\tR\arelayId\x12.\n" +
	"\x04time\x18\x03 \x01(\v2\x1a.google.protobuf.TimestampR\x04time\x12)\n" +
	"\x06events\x18\x04 \x03(\v2\x11.gw.MeshEventItemR\x06events\"\x8e\x01\n" +
	"\rMeshEventItem\x12<\n" +
	"\vproprietary\x18\x01 \x01(\v2\x18.gw.MeshEventProprietaryH\x00R\vproprietary\x126\n" +
	"\theartbeat\x18\x02 \x01(\v2\x16.gw.MeshEventHeartbeatH\x00R\theartbeatB\a\n" +
	"\x05event\"x\n" +
	"\vMeshCommand\x12\x1d\n" +
	"\n" +
	"gateway_id\x18\x01 \x01(\tR\tgatewayId\x12\x19\n" +
	"\brelay_id\x18\x02 \x01(\tR\arelayId\x12/\n" +
	"\bcommands\x18\x03 \x03(\v2\x13.gw.MeshCommandItemR\bcommands\"\\\n" +
	"\x0fMeshCommandItem\x12>\n" +
	"\vproprietary\x18\x01 \x01(\v2\x1a.gw.MeshCommandProprietaryH\x00R\vproprietaryB\t\n" +
	"\acommand\"\xa8\x01\n" +
	"\n" +
	"Modulation\x12,\n" +
	"\x04lora\x18\x03 \x01(\v2\x16.gw.LoraModulationInfoH\x00R\x04lora\x12)\n" +
	"\x03fsk\x18\x04 \x01(\v2\x15.gw.FskModulationInfoH\x00R\x03fsk\x123\n" +
	"\alr_fhss\x18\x05 \x01(\v2\x18.gw.LrFhssModulationInfoH\x00R\x06lrFhssB\f\n" +
	"\n" +
	"parameters\"\xe1\x02\n" +
	"\x12UplinkTxInfoLegacy\x12\x1c\n" +
	"\tfrequency\x18\x01 \x01(\rR\tfrequency\x122\n" +
	"\n" +
	"modulation\x18\x02 \x01(\x0e2\x12.common.ModulationR\n" +
	"modulation\x12J\n" +
	"\x14lora_modulation_info\x18\x03 \x01(\v2\x16.gw.LoraModulationInfoH\x00R\x12loraModulationInfo\x12G\n" +
	"\x13fsk_modulation_info\x18\x04 \x01(\v2\x15.gw.FskModulationInfoH\x00R\x11fskModulationInfo\x12Q\n" +
	"\x17lr_fhss_modulation_info\x18\x05 \x01(\v2\x18.gw.LrFhssModulationInfoH\x00R\x14lrFhssModulationInfoB\x11\n" +
	"\x0fmodulation_info\"\\\n" +
	"\fUplinkTxInfo\x12\x1c\n" +
	"\tfrequency\x18\x01 \x01(\rR\tfrequency\x12.\n" +
	"\n" +
	"modulation\x18\x02 \x01(\v2\x0e.gw.ModulationR\n" +
	"modulation\"\x9c\x02\n" +
	"\x12LoraModulationInfo\x12\x1c\n" +
	"\tbandwidth\x18\x01 \x01(\rR\tbandwidth\x12)\n" +
	"\x10spreading_factor\x18\x02 \x01(\rR\x0fspreadingFactor\x12(\n" +
	"\x10code_rate_legacy\x18\x03 \x01(\tR\x0ecodeRateLegacy\x12)\n" +
	"\tcode_rate\x18\x05 \x01(\x0e2\f.gw.CodeRateR\bcodeRate\x125\n" +
	"\x16polarization_inversion\x18\x04 \x01(\bR\x15polarizationInversion\x12\x1a\n" +
	"\bpreamble\x18\x06 \x01(\rR\bpreamble\x12\x15\n" +
	"\x06no_crc\x18\a \x01(\bR\x05noCrc\"`\n" +
	"\x11FskModulationInfo\x12/\n" +
	"\x13frequency_deviation\x18\x01 \x01(\rR\x12frequencyDeviation\x12\x1a\n" +
	"\bdatarate\x18\x02 \x01(\rR\bdatarate\"\xc2\x01\n" +
	"\x14LrFhssModulationInfo\x126\n" +
	"\x17operating_channel_width\x18\x01 \x01(\rR\x15operatingChannelWidth\x12(\n" +
	"\x10code_rate_legacy\x18\x02 \x01(\tR\x0ecodeRateLegacy\x12)\n" +
	"\tcode_rate\x18\x04 \x01(\x0e2\f.gw.CodeRateR\bcodeRate\x12\x1d\n" +
	"\n" +
	"grid_steps\x18\x03 \x01(\rR\tgridSteps\"x\n" +
	"\x16EncryptedFineTimestamp\x12\"\n" +
	"\raes_key_index\x18\x01 \x01(\rR\vaesKeyIndex\x12!\n" +
	"\fencrypted_ns\x18\x02 \x01(\fR\vencryptedNs\x12\x17\n" +
	"\afpga_id\x18\x03 \x01(\fR\x06fpgaId\"D\n" +
	"\x12PlainFineTimestamp\x12.\n" +
	"\x04time\x18\x01 \x01(\v2\x1a.google.protobuf.TimestampR\x04time\"\x82\n" +
	"\n" +
	"\fGatewayStats\x12*\n" +
	"\x11gateway_id_legacy\x18\x01 \x01(\fR\x0fgatewayIdLegacy\x12\x1d\n" +
	"\n" +
	"gateway_id\x18\x11 \x01(\tR\tgatewayId\x12.\n" +
	"\x04time\x18\x02 \x01(\v2\x1a.google.protobuf.TimestampR\x04time\x12,\n" +
	"\blocation\x18\x03 \x01(\v2\x10.common.LocationR\blocation\x12%\n" +
	"\x0econfig_version\x18\x04 \x01(\tR\rconfigVersion\x12.\n" +
	"\x13rx_packets_received\x18\x05 \x01(\rR\x11rxPacketsReceived\x123\n" +
	"\x16rx_packets_received_ok\x18\x06 \x01(\rR\x13rxPacketsReceivedOk\x12.\n" +
	"\x13tx_packets_received\x18\a \x01(\rR\x11txPacketsReceived\x12,\n" +
	"\x12tx_packets_emitted\x18\b \x01(\rR\x10txPacketsEmitted\x12:\n" +
	"\bmetadata\x18\n" +
	" \x03(\v2\x1e.gw.GatewayStats.MetadataEntryR\bmetadata\x12d\n" +
	"\x18tx_packets_per_frequency\x18\f \x03(\v2+.gw.GatewayStats.TxPacketsPerFrequencyEntryR\x15txPacketsPerFrequency\x12d\n" +
	"\x18rx_packets_per_frequency\x18\r \x03(\v2+.gw.GatewayStats.RxPacketsPerFrequencyEntryR\x15rxPacketsPerFrequency\x12Q\n" +
	"\x19tx_packets_per_modulation\x18\x0e \x03(\v2\x16.gw.PerModulationCountR\x16txPacketsPerModulation\x12Q\n" +
	"\x19rx_packets_per_modulation\x18\x0f \x03(\v2\x16.gw.PerModulationCountR\x16rxPacketsPerModulation\x12[\n" +
	"\x15tx_packets_per_status\x18\x10 \x03(\v2(.gw.GatewayStats.TxPacketsPerStatusEntryR\x12txPacketsPerStatus\x12<\n" +
	"\x10duty_cycle_stats\x18\x12 \x01(\v2\x12.gw.DutyCycleStatsR\x0edutyCycleStats\x1a;\n" +
	"\rMetadataEntry\x12\x10\n" +
	"\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" +
	"\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\x1aH\n" +
	"\x1aTxPacketsPerFrequencyEntry\x12\x10\n" +
	"\x03key\x18\x01 \x01(\rR\x03key\x12\x14\n" +
	"\x05value\x18\x02 \x01(\rR\x05value:\x028\x01\x1aH\n" +
	"\x1aRxPacketsPerFrequencyEntry\x12\x10\n" +
	"\x03key\x18\x01 \x01(\rR\x03key\x12\x14\n" +
	"\x05value\x18\x02 \x01(\rR\x05value:\x028\x01\x1aE\n" +
	"\x17TxPacketsPerStatusEntry\x12\x10\n" +
	"\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" +
	"\x05value\x18\x02 \x01(\rR\x05value:\x028\x01\"Z\n" +
	"\x12PerModulationCount\x12.\n" +
	"\n" +
	"modulation\x18\x01 \x01(\v2\x0e.gw.ModulationR\n" +
	"modulation\x12\x14\n" +
	"\x05count\x18\x02 \x01(\rR\x05count\"\xa0\x01\n" +
	"\x0eDutyCycleStats\x122\n" +
	"\n" +
	"regulation\x18\x01 \x01(\x0e2\x12.common.RegulationR\n" +
	"regulation\x121\n" +
	"\x06window\x18\x02 \x01(\v2\x19.google.protobuf.DurationR\x06window\x12'\n" +
	"\x05bands\x18\x03 \x03(\v2\x11.gw.DutyCycleBandR\x05bands\"\xe1\x01\n" +
	"\rDutyCycleBand\x12\x12\n" +
	"\x04name\x18\x01 \x01(\tR\x04name\x12#\n" +
	"\rfrequency_min\x18\x02 \x01(\rR\ffrequencyMin\x12#\n" +
	"\rfrequency_max\x18\x03 \x01(\rR\ffrequencyMax\x124\n" +
	"\bload_max\x18\x04 \x01(\v2\x19.google.protobuf.DurationR\aloadMax\x12<\n" +
	"\fload_tracked\x18\x05 \x01(\v2\x19.google.protobuf.DurationR\vloadTracked\"\xd2\x06\n" +
	"\x12UplinkRxInfoLegacy\x12\x1d\n" +
	"\n" +
	"gateway_id\x18\x01 \x01(\fR\tgatewayId\x12.\n" +
	"\x04time\x18\x02 \x01(\v2\x1a.google.protobuf.TimestampR\x04time\x12J\n" +
	"\x14time_since_gps_epoch\x18\x03 \x01(\v2\x19.google.protobuf.DurationR\x11timeSinceGpsEpoch\x12\x12\n" +
	"\x04rssi\x18\x05 \x01(\x05R\x04rssi\x12\x19\n" +
	"\blora_snr\x18\x06 \x01(\x01R\aloraSnr\x12\x18\n" +
	"\achannel\x18\a \x01(\rR\achannel\x12\x19\n" +
	"\brf_chain\x18\b \x01(\rR\arfChain\x12\x14\n" +
	"\x05board\x18\t \x01(\rR\x05board\x12\x18\n" +
	"\aantenna\x18\n" +
	" \x01(\rR\aantenna\x12,\n" +
	"\blocation\x18\v \x01(\v2\x10.common.LocationR\blocation\x12E\n" +
	"\x13fine_timestamp_type\x18\f \x01(\x0e2\x15.gw.FineTimestampTypeR\x11fineTimestampType\x12V\n" +
	"\x18encrypted_fine_timestamp\x18\r \x01(\v2\x1a.gw.EncryptedFineTimestampH\x00R\x16encryptedFineTimestamp\x12J\n" +
	"\x14plain_fine_timestamp\x18\x0e \x01(\v2\x16.gw.PlainFineTimestampH\x00R\x12plainFineTimestamp\x12\x18\n" +
	"\acontext\x18\x0f \x01(\fR\acontext\x12\x1b\n" +
	"\tuplink_id\x18\x10 \x01(\fR\buplinkId\x12,\n" +
	"\n" +
	"crc_status\x18\x11 \x01(\x0e2\r.gw.CRCStatusR\tcrcStatus\x12@\n" +
	"\bmetadata\x18\x12 \x03(\v2$.gw.UplinkRxInfoLegacy.MetadataEntryR\bmetadata\x1a;\n" +
	"\rMetadataEntry\x12\x10\n" +
	"\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" +
	"\x05value\x18\x02 \x01(\tR\x05value:\x028\x01B\x10\n" +
	"\x0efine_timestamp\"\xcf\x05\n" +
	"\fUplinkRxInfo\x12\x1d\n" +
	"\n" +
	"gateway_id\x18\x01 \x01(\tR\tgatewayId\x12\x1b\n" +
	"\tuplink_id\x18\x02 \x01(\rR\buplinkId\x123\n" +
	"\agw_time\x18\x03 \x01(\v2\x1a.google.protobuf.TimestampR\x06gwTime\x123\n" +
	"\ans_time\x18\x11 \x01(\v2\x1a.google.protobuf.TimestampR\x06nsTime\x12J\n" +
	"\x14time_since_gps_epoch\x18\x04 \x01(\v2\x19.google.protobuf.DurationR\x11timeSinceGpsEpoch\x12S\n" +
	"\x19fine_time_since_gps_epoch\x18\x05 \x01(\v2\x19.google.protobuf.DurationR\x15fineTimeSinceGpsEpoch\x12\x12\n" +
	"\x04rssi\x18\x06 \x01(\x05R\x04rssi\x12\x10\n" +
	"\x03snr\x18\a \x01(\x02R\x03snr\x12\x18\n" +
	"\achannel\x18\b \x01(\rR\achannel\x12\x19\n" +
	"\brf_chain\x18\t \x01(\rR\arfChain\x12\x14\n" +
	"\x05board\x18\n" +
	" \x01(\rR\x05board\x12\x18\n" +
	"\aantenna\x18\v \x01(\rR\aantenna\x12,\n" +
	"\blocation\x18\f \x01(\v2\x10.common.LocationR\blocation\x12\x18\n" +
	"\acontext\x18\r \x01(\fR\acontext\x12:\n" +
	"\bmetadata\x18\x0f \x03(\v2\x1e.gw.UplinkRxInfo.MetadataEntryR\bmetadata\x12,\n" +
	"\n" +
	"crc_status\x18\x10 \x01(\x0e2\r.gw.CRCStatusR\tcrcStatus\x1a;\n" +
	"\rMetadataEntry\x12\x10\n" +
	"\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" +
	"\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xaf\x05\n" +
	"\x14DownlinkTxInfoLegacy\x12\x1d\n" +
	"\n" +
	"gateway_id\x18\x01 \x01(\fR\tgatewayId\x12\x1c\n" +
	"\tfrequency\x18\x05 \x01(\rR\tfrequency\x12\x14\n" +
	"\x05power\x18\x06 \x01(\x05R\x05power\x122\n" +
	"\n" +
	"modulation\x18\a \x01(\x0e2\x12.common.ModulationR\n" +
	"modulation\x12J\n" +
	"\x14lora_modulation_info\x18\b \x01(\v2\x16.gw.LoraModulationInfoH\x00R\x12loraModulationInfo\x12G\n" +
	"\x13fsk_modulation_info\x18\t \x01(\v2\x15.gw.FskModulationInfoH\x00R\x11fskModulationInfo\x12\x14\n" +
	"\x05board\x18\n" +
	" \x01(\rR\x05board\x12\x18\n" +
	"\aantenna\x18\v \x01(\rR\aantenna\x12*\n" +
	"\x06timing\x18\f \x01(\x0e2\x12.gw.DownlinkTimingR\x06timing\x12S\n" +
	"\x17immediately_timing_info\x18\r \x01(\v2\x19.gw.ImmediatelyTimingInfoH\x01R\x15immediatelyTimingInfo\x12A\n" +
	"\x11delay_timing_info\x18\x0e \x01(\v2\x13.gw.DelayTimingInfoH\x01R\x0fdelayTimingInfo\x12K\n" +
	"\x15gps_epoch_timing_info\x18\x0f \x01(\v2\x16.gw.GPSEpochTimingInfoH\x01R\x12gpsEpochTimingInfo\x12\x18\n" +
	"\acontext\x18\x10 \x01(\fR\acontextB\x11\n" +
	"\x0fmodulation_infoB\r\n" +
	"\vtiming_info\"\xe2\x01\n" +
	"\x0eDownlinkTxInfo\x12\x1c\n" +
	"\tfrequency\x18\x01 \x01(\rR\tfrequency\x12\x14\n" +
	"\x05power\x18\x02 \x01(\x05R\x05power\x12.\n" +
	"\n" +
	"modulation\x18\x03 \x01(\v2\x0e.gw.ModulationR\n" +
	"modulation\x12\x14\n" +
	"\x05board\x18\x04 \x01(\rR\x05board\x12\x18\n" +
	"\aantenna\x18\x05 \x01(\rR\aantenna\x12\"\n" +
	"\x06timing\x18\x06 \x01(\v2\n" +
	".gw.TimingR\x06timing\x12\x18\n" +
	"\acontext\x18\a \x01(\fR\acontext\"\xb9\x01\n" +
	"\x06Timing\x12=\n" +
	"\vimmediately\x18\x01 \x01(\v2\x19.gw.ImmediatelyTimingInfoH\x00R\vimmediately\x12+\n" +
	"\x05delay\x18\x02 \x01(\v2\x13.gw.DelayTimingInfoH\x00R\x05delay\x125\n" +
	"\tgps_epoch\x18\x03 \x01(\v2\x16.gw.GPSEpochTimingInfoH\x00R\bgpsEpochB\f\n" +
	"\n" +
	"parameters\"\x17\n" +
	"\x15ImmediatelyTimingInfo\"B\n" +
	"\x0fDelayTimingInfo\x12/\n" +
	"\x05delay\x18\x01 \x01(\v2\x19.google.protobuf.DurationR\x05delay\"`\n" +
	"\x12GPSEpochTimingInfo\x12J\n" +
	"\x14time_since_gps_epoch\x18\x01 \x01(\v2\x19.google.protobuf.DurationR\x11timeSinceGpsEpoch\"\x80\x02\n" +
	"\vUplinkFrame\x12\x1f\n" +
	"\vphy_payload\x18\x01 \x01(\fR\n" +
	"phyPayload\x12<\n" +
	"\x0etx_info_legacy\x18\x02 \x01(\v2\x16.gw.UplinkTxInfoLegacyR\ftxInfoLegacy\x12<\n" +
	"\x0erx_info_legacy\x18\x03 \x01(\v2\x16.gw.UplinkRxInfoLegacyR\frxInfoLegacy\x12)\n" +
	"\atx_info\x18\x04 \x01(\v2\x10.gw.UplinkTxInfoR\x06txInfo\x12)\n" +
	"\arx_info\x18\x05 \x01(\v2\x10.gw.UplinkRxInfoR\x06rxInfo\"\x87\x01\n" +
	"\x0eUplinkFrameSet\x12\x1f\n" +
	"\vphy_payload\x18\x01 \x01(\fR\n" +
	"phyPayload\x12)\n" +
	"\atx_info\x18\x02 \x01(\v2\x10.gw.UplinkTxInfoR\x06txInfo\x12)\n" +
	"\arx_info\x18\x03 \x03(\v2\x10.gw.UplinkRxInfoR\x06rxInfo\"\xd6\x01\n" +
	"\rDownlinkFrame\x12\x1f\n" +
	"\vdownlink_id\x18\x03 \x01(\rR\n" +
	"downlinkId\x12,\n" +
	"\x12downlink_id_legacy\x18\x04 \x01(\fR\x10downlinkIdLegacy\x12+\n" +
	"\x05items\x18\x05 \x03(\v2\x15.gw.DownlinkFrameItemR\x05items\x12*\n" +
	"\x11gateway_id_legacy\x18\x06 \x01(\fR\x0fgatewayIdLegacy\x12\x1d\n" +
	"\n" +
	"gateway_id\x18\a \x01(\tR\tgatewayId\"\xa1\x01\n" +
	"\x11DownlinkFrameItem\x12\x1f\n" +
	"\vphy_payload\x18\x01 \x01(\fR\n" +
	"phyPayload\x12>\n" +
	"\x0etx_info_legacy\x18\x02 \x01(\v2\x18.gw.DownlinkTxInfoLegacyR\ftxInfoLegacy\x12+\n" +
	"\atx_info\x18\x03 \x01(\v2\x12.gw.DownlinkTxInfoR\x06txInfo\"\xd6\x01\n" +
	"\rDownlinkTxAck\x12*\n" +
	"\x11gateway_id_legacy\x18\x01 \x01(\fR\x0fgatewayIdLegacy\x12\x1d\n" +
	"\n" +
	"gateway_id\x18\x06 \x01(\tR\tgatewayId\x12\x1f\n" +
	"\vdownlink_id\x18\x02 \x01(\rR\n" +
	"downlinkId\x12,\n" +
	"\x12downlink_id_legacy\x18\x04 \x01(\fR\x10downlinkIdLegacy\x12+\n" +
	"\x05items\x18\x05 \x03(\v2\x15.gw.DownlinkTxAckItemR\x05items\"<\n" +
	"\x11DownlinkTxAckItem\x12'\n" +
	"\x06status\x18\x01 \x01(\x0e2\x0f.gw.TxAckStatusR\x06status\"\xf3\x01\n" +
	"\x14GatewayConfiguration\x12*\n" +
	"\x11gateway_id_legacy\x18\x01 \x01(\fR\x0fgatewayIdLegacy\x12\x1d\n" +
	"\n" +
	"gateway_id\x18\x05 \x01(\tR\tgatewayId\x12\x18\n" +
	"\aversion\x18\x02 \x01(\tR\aversion\x124\n" +
	"\bchannels\x18\x03 \x03(\v2\x18.gw.ChannelConfigurationR\bchannels\x12@\n" +
	"\x0estats_interval\x18\x04 \x01(\v2\x19.google.protobuf.DurationR\rstatsInterval\"\x15\n" +
	"\x13GetGatewayIdRequest\"5\n" +
	"\x14GetGatewayIdResponse\x12\x1d\n" +
	"\n" +
	"gateway_id\x18\x01 \x01(\tR\tgatewayId\"\x14\n" +
	"\x12GetLocationRequest\"~\n" +
	"\x13GetLocationResponse\x12,\n" +
	"\blocation\x18\x01 \x01(\v2\x10.common.LocationR\blocation\x129\n" +
	"\n" +
	"updated_at\x18\x02 \x01(\v2\x1a.google.protobuf.TimestampR\tupdatedAt\"\xe3\x02\n" +
	"\x14ChannelConfiguration\x12\x1c\n" +
	"\tfrequency\x18\x01 \x01(\rR\tfrequency\x12?\n" +
	"\x11modulation_legacy\x18\x02 \x01(\x0e2\x12.common.ModulationR\x10modulationLegacy\x12P\n" +
	"\x16lora_modulation_config\x18\x03 \x01(\v2\x18.gw.LoraModulationConfigH\x00R\x14loraModulationConfig\x12M\n" +
	"\x15fsk_modulation_config\x18\x04 \x01(\v2\x17.gw.FskModulationConfigH\x00R\x13fskModulationConfig\x12\x14\n" +
	"\x05board\x18\x05 \x01(\rR\x05board\x12 \n" +
	"\vdemodulator\x18\x06 \x01(\rR\vdemodulatorB\x13\n" +
	"\x11modulation_config\"\x8c\x01\n" +
	"\x14LoraModulationConfig\x12)\n" +
	"\x10bandwidth_legacy\x18\x01 \x01(\rR\x0fbandwidthLegacy\x12\x1c\n" +
	"\tbandwidth\x18\x03 \x01(\rR\tbandwidth\x12+\n" +
	"\x11spreading_factors\x18\x02 \x03(\rR\x10spreadingFactors\"x\n" +
	"\x13FskModulationConfig\x12)\n" +
	"\x10bandwidth_legacy\x18\x01 \x01(\rR\x0fbandwidthLegacy\x12\x1c\n" +
	"\tbandwidth\x18\x03 \x01(\rR\tbandwidth\x12\x18\n" +
	"\abitrate\x18\x02 \x01(\rR\abitrate\"\xc1\x02\n" +
	"\x19GatewayCommandExecRequest\x12*\n" +
	"\x11gateway_id_legacy\x18\x01 \x01(\fR\x0fgatewayIdLegacy\x12\x1d\n" +
	"\n" +
	"gateway_id\x18\x06 \x01(\tR\tgatewayId\x12\x18\n" +
	"\acommand\x18\x02 \x01(\tR\acommand\x12\x17\n" +
	"\aexec_id\x18\a \x01(\rR\x06execId\x12\x14\n" +
	"\x05stdin\x18\x04 \x01(\fR\x05stdin\x12P\n" +
	"\venvironment\x18\x05 \x03(\v2..gw.GatewayCommandExecRequest.EnvironmentEntryR\venvironment\x1a>\n" +
	"\x10EnvironmentEntry\x12\x10\n" +
	"\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" +
	"\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xc6\x01\n" +
	"\x1aGatewayCommandExecResponse\x12*\n" +
	"\x11gateway_id_legacy\x18\x01 \x01(\fR\x0fgatewayIdLegacy\x12\x1d\n" +
	"\n" +
	"gateway_id\x18\x06 \x01(\tR\tgatewayId\x12\x17\n" +
	"\aexec_id\x18\a \x01(\rR\x06execId\x12\x16\n" +
	"\x06stdout\x18\x03 \x01(\fR\x06stdout\x12\x16\n" +
	"\x06stderr\x18\x04 \x01(\fR\x06stderr\x12\x14\n" +
	"\x05error\x18\x05 \x01(\tR\x05error\"~\n" +
	"\x17RawPacketForwarderEvent\x12*\n" +
	"\x11gateway_id_legacy\x18\x01 \x01(\fR\x0fgatewayIdLegacy\x12\x1d\n" +
	"\n" +
	"gateway_id\x18\x04 \x01(\tR\tgatewayId\x12\x18\n" +
	"\apayload\x18\x03 \x01(\fR\apayload\"\x80\x01\n" +
	"\x19RawPacketForwarderCommand\x12*\n" +
	"\x11gateway_id_legacy\x18\x01 \x01(\fR\x0fgatewayIdLegacy\x12\x1d\n" +
	"\n" +
	"gateway_id\x18\x04 \x01(\tR\tgatewayId\x12\x18\n" +
	"\apayload\x18\x03 \x01(\fR\apayload\"\xa3\x01\n" +
	"\tConnState\x12*\n" +
	"\x11gateway_id_legacy\x18\x01 \x01(\fR\x0fgatewayIdLegacy\x12\x1d\n" +
	"\n" +
	"gateway_id\x18\x03 \x01(\tR\tgatewayId\x12)\n" +
	"\x05state\x18\x02 \x01(\x0e2\x13.gw.ConnState.StateR\x05state\" \n" +
	"\x05State\x12\v\n" +
	"\aOFFLINE\x10\x00\x12\n" +
	"\n" +
	"\x06ONLINE\x10\x01\"T\n" +
	"\x12MeshEventHeartbeat\x12>\n" +
	"\n" +
	"relay_path\x18\x04 \x03(\v2\x1f.gw.MeshEventHeartbeatRelayPathR\trelayPath\"^\n" +
	"\x1bMeshEventHeartbeatRelayPath\x12\x19\n" +
	"\brelay_id\x18\x01 \x01(\tR\arelayId\x12\x12\n" +
	"\x04rssi\x18\x02 \x01(\x05R\x04rssi\x12\x10\n" +
	"\x03snr\x18\x03 \x01(\x05R\x03snr\"O\n" +
	"\x14MeshEventProprietary\x12\x1d\n" +
	"\n" +
	"event_type\x18\x01 \x01(\rR\teventType\x12\x18\n" +
	"\apayload\x18\x02 \x01(\fR\apayload\"U\n" +
	"\x16MeshCommandProprietary\x12!\n" +
	"\fcommand_type\x18\x01 \x01(\rR\vcommandType\x12\x18\n" +
	"\apayload\x18\x02 \x01(\fR\apayload*\xb5\x01\n" +
	"\bCodeRate\x12\x10\n" +
	"\fCR_UNDEFINED\x10\x00\x12\n" +
	"\n" +
	"\x06CR_4_5\x10\x01\x12\n" +
	"\n" +
	"\x06CR_4_6\x10\x02\x12\n" +
	"\n" +
	"\x06CR_4_7\x10\x03\x12\n" +
	"\n" +
	"\x06CR_4_8\x10\x04\x12\n" +
	"\n" +
	"\x06CR_3_8\x10\x05\x12\n" +
	"\n" +
	"\x06CR_2_6\x10\x06\x12\n" +
	"\n" +
	"\x06CR_1_4\x10\a\x12\n" +
	"\n" +
	"\x06CR_1_6\x10\b\x12\n" +
	"\n" +
	"\x06CR_5_6\x10\t\x12\r\n" +
	"\tCR_LI_4_5\x10\n" +
	"\x12\r\n" +
	"\tCR_LI_4_6\x10\v\x12\r\n" +
	"\tCR_LI_4_8\x10\f*;\n" +
	"\x0eDownlinkTiming\x12\x0f\n" +
	"\vIMMEDIATELY\x10\x00\x12\t\n" +
	"\x05DELAY\x10\x01\x12\r\n" +
	"\tGPS_EPOCH\x10\x02*7\n" +
	"\x11FineTimestampType\x12\b\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\v\n" +
	"\aBAD_CRC\x10\x01\x12\n" +
	"\n" +
	"\x06CRC_OK\x10\x02*\xd5\x01\n" +
	"\vTxAckStatus\x12\v\n" +
	"\aIGNORED\x10\x00\x12\x06\n" +
	"\x02OK\x10\x01\x12\f\n" +
	"\bTOO_LATE\x10\x02\x12\r\n" +
	"\tTOO_EARLY\x10\x03\x12\x14\n" +
	"\x10COLLISION_PACKET\x10\x04\x12\x14\n" +
	"\x10COLLISION_BEACON\x10\x05\x12\v\n" +
	"\aTX_FREQ\x10\x06\x12\f\n" +
	"\bTX_POWER\x10\a\x12\x10\n" +
	"\fGPS_UNLOCKED\x10\b\x12\x0e\n" +
	"\n" +
	"QUEUE_FULL\x10\t\x12\x12\n" +
	"\x0eINTERNAL_ERROR\x10\n" +
	"\x12\x17\n" +
	"\x13DUTY_CYCLE_OVERFLOW\x10\vB\xa0\x01\n" +
	"\x14io.chirpstack.api.gwB\fGatewayProtoP\x01Z-github.com/chirpstack/chirpstack/api/go/v4/gw\xaa\x02\x12Chirpstack.Gateway\xca\x02\x12Chirpstack\\Gateway\xe2\x02\x1eGPBMetadata\\Chirpstack\\Gatewayb\x06proto3"

var (
	file_gw_gw_proto_rawDescOnce sync.Once
	file_gw_gw_proto_rawDescData []byte
)

func file_gw_gw_proto_rawDescGZIP() []byte {
	file_gw_gw_proto_rawDescOnce.Do(func() {
		file_gw_gw_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_gw_gw_proto_rawDesc), len(file_gw_gw_proto_rawDesc)))
	})
	return file_gw_gw_proto_rawDescData
}

var file_gw_gw_proto_enumTypes = make([]protoimpl.EnumInfo, 6)
var file_gw_gw_proto_msgTypes = make([]protoimpl.MessageInfo, 56)
var file_gw_gw_proto_goTypes = []any{
	(CodeRate)(0),                       // 0: gw.CodeRate
	(DownlinkTiming)(0),                 // 1: gw.DownlinkTiming
	(FineTimestampType)(0),              // 2: gw.FineTimestampType
	(CRCStatus)(0),                      // 3: gw.CRCStatus
	(TxAckStatus)(0),                    // 4: gw.TxAckStatus
	(ConnState_State)(0),                // 5: gw.ConnState.State
	(*Event)(nil),                       // 6: gw.Event
	(*Command)(nil),                     // 7: gw.Command
	(*MeshEvent)(nil),                   // 8: gw.MeshEvent
	(*MeshEventItem)(nil),               // 9: gw.MeshEventItem
	(*MeshCommand)(nil),                 // 10: gw.MeshCommand
	(*MeshCommandItem)(nil),             // 11: gw.MeshCommandItem
	(*Modulation)(nil),                  // 12: gw.Modulation
	(*UplinkTxInfoLegacy)(nil),          // 13: gw.UplinkTxInfoLegacy
	(*UplinkTxInfo)(nil),                // 14: gw.UplinkTxInfo
	(*LoraModulationInfo)(nil),          // 15: gw.LoraModulationInfo
	(*FskModulationInfo)(nil),           // 16: gw.FskModulationInfo
	(*LrFhssModulationInfo)(nil),        // 17: gw.LrFhssModulationInfo
	(*EncryptedFineTimestamp)(nil),      // 18: gw.EncryptedFineTimestamp
	(*PlainFineTimestamp)(nil),          // 19: gw.PlainFineTimestamp
	(*GatewayStats)(nil),                // 20: gw.GatewayStats
	(*PerModulationCount)(nil),          // 21: gw.PerModulationCount
	(*DutyCycleStats)(nil),              // 22: gw.DutyCycleStats
	(*DutyCycleBand)(nil),               // 23: gw.DutyCycleBand
	(*UplinkRxInfoLegacy)(nil),          // 24: gw.UplinkRxInfoLegacy
	(*UplinkRxInfo)(nil),                // 25: gw.UplinkRxInfo
	(*DownlinkTxInfoLegacy)(nil),        // 26: gw.DownlinkTxInfoLegacy
	(*DownlinkTxInfo)(nil),              // 27: gw.DownlinkTxInfo
	(*Timing)(nil),                      // 28: gw.Timing
	(*ImmediatelyTimingInfo)(nil),       // 29: gw.ImmediatelyTimingInfo
	(*DelayTimingInfo)(nil),             // 30: gw.DelayTimingInfo
	(*GPSEpochTimingInfo)(nil),          // 31: gw.GPSEpochTimingInfo
	(*UplinkFrame)(nil),                 // 32: gw.UplinkFrame
	(*UplinkFrameSet)(nil),              // 33: gw.UplinkFrameSet
	(*DownlinkFrame)(nil),               // 34: gw.DownlinkFrame
	(*DownlinkFrameItem)(nil),           // 35: gw.DownlinkFrameItem
	(*DownlinkTxAck)(nil),               // 36: gw.DownlinkTxAck
	(*DownlinkTxAckItem)(nil),           // 37: gw.DownlinkTxAckItem
	(*GatewayConfiguration)(nil),        // 38: gw.GatewayConfiguration
	(*GetGatewayIdRequest)(nil),         // 39: gw.GetGatewayIdRequest
	(*GetGatewayIdResponse)(nil),        // 40: gw.GetGatewayIdResponse
	(*GetLocationRequest)(nil),          // 41: gw.GetLocationRequest
	(*GetLocationResponse)(nil),         // 42: gw.GetLocationResponse
	(*ChannelConfiguration)(nil),        // 43: gw.ChannelConfiguration
	(*LoraModulationConfig)(nil),        // 44: gw.LoraModulationConfig
	(*FskModulationConfig)(nil),         // 45: gw.FskModulationConfig
	(*GatewayCommandExecRequest)(nil),   // 46: gw.GatewayCommandExecRequest
	(*GatewayCommandExecResponse)(nil),  // 47: gw.GatewayCommandExecResponse
	(*RawPacketForwarderEvent)(nil),     // 48: gw.RawPacketForwarderEvent
	(*RawPacketForwarderCommand)(nil),   // 49: gw.RawPacketForwarderCommand
	(*ConnState)(nil),                   // 50: gw.ConnState
	(*MeshEventHeartbeat)(nil),          // 51: gw.MeshEventHeartbeat
	(*MeshEventHeartbeatRelayPath)(nil), // 52: gw.MeshEventHeartbeatRelayPath
	(*MeshEventProprietary)(nil),        // 53: gw.MeshEventProprietary
	(*MeshCommandProprietary)(nil),      // 54: gw.MeshCommandProprietary
	nil,                                 // 55: gw.GatewayStats.MetadataEntry
	nil,                                 // 56: gw.GatewayStats.TxPacketsPerFrequencyEntry
	nil,                                 // 57: gw.GatewayStats.RxPacketsPerFrequencyEntry
	nil,                                 // 58: gw.GatewayStats.TxPacketsPerStatusEntry
	nil,                                 // 59: gw.UplinkRxInfoLegacy.MetadataEntry
	nil,                                 // 60: gw.UplinkRxInfo.MetadataEntry
	nil,                                 // 61: gw.GatewayCommandExecRequest.EnvironmentEntry
	(*timestamppb.Timestamp)(nil),       // 62: google.protobuf.Timestamp
	(common.Modulation)(0),              // 63: common.Modulation
	(*common.Location)(nil),             // 64: common.Location
	(common.Regulation)(0),              // 65: common.Regulation
	(*durationpb.Duration)(nil),         // 66: google.protobuf.Duration
}
var file_gw_gw_proto_depIdxs = []int32{
	32, // 0: gw.Event.uplink_frame:type_name -> gw.UplinkFrame
	20, // 1: gw.Event.gateway_stats:type_name -> gw.GatewayStats
	8,  // 2: gw.Event.mesh:type_name -> gw.MeshEvent
	34, // 3: gw.Command.send_downlink_frame:type_name -> gw.DownlinkFrame
	38, // 4: gw.Command.set_gateway_configuration:type_name -> gw.GatewayConfiguration
	39, // 5: gw.Command.get_gateway_id:type_name -> gw.GetGatewayIdRequest
	41, // 6: gw.Command.get_location:type_name -> gw.GetLocationRequest
	10, // 7: gw.Command.mesh:type_name -> gw.MeshCommand
	62, // 8: gw.MeshEvent.time:type_name -> google.protobuf.Timestamp
	9,  // 9: gw.MeshEvent.events:type_name -> gw.MeshEventItem
	53, // 10: gw.MeshEventItem.proprietary:type_name -> gw.MeshEventProprietary
	51, // 11: gw.MeshEventItem.heartbeat:type_name -> gw.MeshEventHeartbeat
	11, // 12: gw.MeshCommand.commands:type_name -> gw.MeshCommandItem
	54, // 13: gw.MeshCommandItem.proprietary:type_name -> gw.MeshCommandProprietary
	15, // 14: gw.Modulation.lora:type_name -> gw.LoraModulationInfo
	16, // 15: gw.Modulation.fsk:type_name -> gw.FskModulationInfo
	17, // 16: gw.Modulation.lr_fhss:type_name -> gw.LrFhssModulationInfo
	63, // 17: gw.UplinkTxInfoLegacy.modulation:type_name -> common.Modulation
	15, // 18: gw.UplinkTxInfoLegacy.lora_modulation_info:type_name -> gw.LoraModulationInfo
	16, // 19: gw.UplinkTxInfoLegacy.fsk_modulation_info:type_name -> gw.FskModulationInfo
	17, // 20: gw.UplinkTxInfoLegacy.lr_fhss_modulation_info:type_name -> gw.LrFhssModulationInfo
	12, // 21: gw.UplinkTxInfo.modulation:type_name -> gw.Modulation
	0,  // 22: gw.LoraModulationInfo.code_rate:type_name -> gw.CodeRate
	0,  // 23: gw.LrFhssModulationInfo.code_rate:type_name -> gw.CodeRate
	62, // 24: gw.PlainFineTimestamp.time:type_name -> google.protobuf.Timestamp
	62, // 25: gw.GatewayStats.time:type_name -> google.protobuf.Timestamp
	64, // 26: gw.GatewayStats.location:type_name -> common.Location
	55, // 27: gw.GatewayStats.metadata:type_name -> gw.GatewayStats.MetadataEntry
	56, // 28: gw.GatewayStats.tx_packets_per_frequency:type_name -> gw.GatewayStats.TxPacketsPerFrequencyEntry
	57, // 29: gw.GatewayStats.rx_packets_per_frequency:type_name -> gw.GatewayStats.RxPacketsPerFrequencyEntry
	21, // 30: gw.GatewayStats.tx_packets_per_modulation:type_name -> gw.PerModulationCount
	21, // 31: gw.GatewayStats.rx_packets_per_modulation:type_name -> gw.PerModulationCount
	58, // 32: gw.GatewayStats.tx_packets_per_status:type_name -> gw.GatewayStats.TxPacketsPerStatusEntry
	22, // 33: gw.GatewayStats.duty_cycle_stats:type_name -> gw.DutyCycleStats
	12, // 34: gw.PerModulationCount.modulation:type_name -> gw.Modulation
	65, // 35: gw.DutyCycleStats.regulation:type_name -> common.Regulation
	66, // 36: gw.DutyCycleStats.window:type_name -> google.protobuf.Duration
	23, // 37: gw.DutyCycleStats.bands:type_name -> gw.DutyCycleBand
	66, // 38: gw.DutyCycleBand.load_max:type_name -> google.protobuf.Duration
	66, // 39: gw.DutyCycleBand.load_tracked:type_name -> google.protobuf.Duration
	62, // 40: gw.UplinkRxInfoLegacy.time:type_name -> google.protobuf.Timestamp
	66, // 41: gw.UplinkRxInfoLegacy.time_since_gps_epoch:type_name -> google.protobuf.Duration
	64, // 42: gw.UplinkRxInfoLegacy.location:type_name -> common.Location
	2,  // 43: gw.UplinkRxInfoLegacy.fine_timestamp_type:type_name -> gw.FineTimestampType
	18, // 44: gw.UplinkRxInfoLegacy.encrypted_fine_timestamp:type_name -> gw.EncryptedFineTimestamp
	19, // 45: gw.UplinkRxInfoLegacy.plain_fine_timestamp:type_name -> gw.PlainFineTimestamp
	3,  // 46: gw.UplinkRxInfoLegacy.crc_status:type_name -> gw.CRCStatus
	59, // 47: gw.UplinkRxInfoLegacy.metadata:type_name -> gw.UplinkRxInfoLegacy.MetadataEntry
	62, // 48: gw.UplinkRxInfo.gw_time:type_name -> google.protobuf.Timestamp
	62, // 49: gw.UplinkRxInfo.ns_time:type_name -> google.protobuf.Timestamp
	66, // 50: gw.UplinkRxInfo.time_since_gps_epoch:type_name -> google.protobuf.Duration
	66, // 51: gw.UplinkRxInfo.fine_time_since_gps_epoch:type_name -> google.protobuf.Duration
	64, // 52: gw.UplinkRxInfo.location:type_name -> common.Location
	60, // 53: gw.UplinkRxInfo.metadata:type_name -> gw.UplinkRxInfo.MetadataEntry
	3,  // 54: gw.UplinkRxInfo.crc_status:type_name -> gw.CRCStatus
	63, // 55: gw.DownlinkTxInfoLegacy.modulation:type_name -> common.Modulation
	15, // 56: gw.DownlinkTxInfoLegacy.lora_modulation_info:type_name -> gw.LoraModulationInfo
	16, // 57: gw.DownlinkTxInfoLegacy.fsk_modulation_info:type_name -> gw.FskModulationInfo
	1,  // 58: gw.DownlinkTxInfoLegacy.timing:type_name -> gw.DownlinkTiming
	29, // 59: gw.DownlinkTxInfoLegacy.immediately_timing_info:type_name -> gw.ImmediatelyTimingInfo
	30, // 60: gw.DownlinkTxInfoLegacy.delay_timing_info:type_name -> gw.DelayTimingInfo
	31, // 61: gw.DownlinkTxInfoLegacy.gps_epoch_timing_info:type_name -> gw.GPSEpochTimingInfo
	12, // 62: gw.DownlinkTxInfo.modulation:type_name -> gw.Modulation
	28, // 63: gw.DownlinkTxInfo.timing:type_name -> gw.Timing
	29, // 64: gw.Timing.immediately:type_name -> gw.ImmediatelyTimingInfo
	30, // 65: gw.Timing.delay:type_name -> gw.DelayTimingInfo
	31, // 66: gw.Timing.gps_epoch:type_name -> gw.GPSEpochTimingInfo
	66, // 67: gw.DelayTimingInfo.delay:type_name -> google.protobuf.Duration
	66, // 68: gw.GPSEpochTimingInfo.time_since_gps_epoch:type_name -> google.protobuf.Duration
	13, // 69: gw.UplinkFrame.tx_info_legacy:type_name -> gw.UplinkTxInfoLegacy
	24, // 70: gw.UplinkFrame.rx_info_legacy:type_name -> gw.UplinkRxInfoLegacy
	14, // 71: gw.UplinkFrame.tx_info:type_name -> gw.UplinkTxInfo
	25, // 72: gw.UplinkFrame.rx_info:type_name -> gw.UplinkRxInfo
	14, // 73: gw.UplinkFrameSet.tx_info:type_name -> gw.UplinkTxInfo
	25, // 74: gw.UplinkFrameSet.rx_info:type_name -> gw.UplinkRxInfo
	35, // 75: gw.DownlinkFrame.items:type_name -> gw.DownlinkFrameItem
	26, // 76: gw.DownlinkFrameItem.tx_info_legacy:type_name -> gw.DownlinkTxInfoLegacy
	27, // 77: gw.DownlinkFrameItem.tx_info:type_name -> gw.DownlinkTxInfo
	37, // 78: gw.DownlinkTxAck.items:type_name -> gw.DownlinkTxAckItem
	4,  // 79: gw.DownlinkTxAckItem.status:type_name -> gw.TxAckStatus
	43, // 80: gw.GatewayConfiguration.channels:type_name -> gw.ChannelConfiguration
	66, // 81: gw.GatewayConfiguration.stats_interval:type_name -> google.protobuf.Duration
	64, // 82: gw.GetLocationResponse.location:type_name -> common.Location
	62, // 83: gw.GetLocationResponse.updated_at:type_name -> google.protobuf.Timestamp
	63, // 84: gw.ChannelConfiguration.modulation_legacy:type_name -> common.Modulation
	44, // 85: gw.ChannelConfiguration.lora_modulation_config:type_name -> gw.LoraModulationConfig
	45, // 86: gw.ChannelConfiguration.fsk_modulation_config:type_name -> gw.FskModulationConfig
	61, // 87: gw.GatewayCommandExecRequest.environment:type_name -> gw.GatewayCommandExecRequest.EnvironmentEntry
	5,  // 88: gw.ConnState.state:type_name -> gw.ConnState.State
	52, // 89: gw.MeshEventHeartbeat.relay_path:type_name -> gw.MeshEventHeartbeatRelayPath
	90, // [90:90] is the sub-list for method output_type
	90, // [90:90] is the sub-list for method input_type
	90, // [90:90] is the sub-list for extension type_name
	90, // [90:90] is the sub-list for extension extendee
	0,  // [0:90] is the sub-list for field type_name
}

func init() { file_gw_gw_proto_init() }
func file_gw_gw_proto_init() {
	if File_gw_gw_proto != nil {
		return
	}
	file_gw_gw_proto_msgTypes[0].OneofWrappers = []any{
		(*Event_UplinkFrame)(nil),
		(*Event_GatewayStats)(nil),
		(*Event_Mesh)(nil),
	}
	file_gw_gw_proto_msgTypes[1].OneofWrappers = []any{
		(*Command_SendDownlinkFrame)(nil),
		(*Command_SetGatewayConfiguration)(nil),
		(*Command_GetGatewayId)(nil),
		(*Command_GetLocation)(nil),
		(*Command_Mesh)(nil),
	}
	file_gw_gw_proto_msgTypes[3].OneofWrappers = []any{
		(*MeshEventItem_Proprietary)(nil),
		(*MeshEventItem_Heartbeat)(nil),
	}
	file_gw_gw_proto_msgTypes[5].OneofWrappers = []any{
		(*MeshCommandItem_Proprietary)(nil),
	}
	file_gw_gw_proto_msgTypes[6].OneofWrappers = []any{
		(*Modulation_Lora)(nil),
		(*Modulation_Fsk)(nil),
		(*Modulation_LrFhss)(nil),
	}
	file_gw_gw_proto_msgTypes[7].OneofWrappers = []any{
		(*UplinkTxInfoLegacy_LoraModulationInfo)(nil),
		(*UplinkTxInfoLegacy_FskModulationInfo)(nil),
		(*UplinkTxInfoLegacy_LrFhssModulationInfo)(nil),
	}
	file_gw_gw_proto_msgTypes[18].OneofWrappers = []any{
		(*UplinkRxInfoLegacy_EncryptedFineTimestamp)(nil),
		(*UplinkRxInfoLegacy_PlainFineTimestamp)(nil),
	}
	file_gw_gw_proto_msgTypes[20].OneofWrappers = []any{
		(*DownlinkTxInfoLegacy_LoraModulationInfo)(nil),
		(*DownlinkTxInfoLegacy_FskModulationInfo)(nil),
		(*DownlinkTxInfoLegacy_ImmediatelyTimingInfo)(nil),
		(*DownlinkTxInfoLegacy_DelayTimingInfo)(nil),
		(*DownlinkTxInfoLegacy_GpsEpochTimingInfo)(nil),
	}
	file_gw_gw_proto_msgTypes[22].OneofWrappers = []any{
		(*Timing_Immediately)(nil),
		(*Timing_Delay)(nil),
		(*Timing_GpsEpoch)(nil),
	}
	file_gw_gw_proto_msgTypes[37].OneofWrappers = []any{
		(*ChannelConfiguration_LoraModulationConfig)(nil),
		(*ChannelConfiguration_FskModulationConfig)(nil),
	}
	type x struct{}
	out := protoimpl.TypeBuilder{
		File: protoimpl.DescBuilder{
			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
			RawDescriptor: unsafe.Slice(unsafe.StringData(file_gw_gw_proto_rawDesc), len(file_gw_gw_proto_rawDesc)),
			NumEnums:      6,
			NumMessages:   56,
			NumExtensions: 0,
			NumServices:   0,
		},
		GoTypes:           file_gw_gw_proto_goTypes,
		DependencyIndexes: file_gw_gw_proto_depIdxs,
		EnumInfos:         file_gw_gw_proto_enumTypes,
		MessageInfos:      file_gw_gw_proto_msgTypes,
	}.Build()
	File_gw_gw_proto = out.File
	file_gw_gw_proto_goTypes = nil
	file_gw_gw_proto_depIdxs = nil
}
