pbnew

package
v0.0.0-...-2a67468 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 11, 2024 License: MIT Imports: 5 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	MacVersion_name = map[int32]string{
		0: "LORAWAN_1_0_0",
		1: "LORAWAN_1_0_1",
		2: "LORAWAN_1_0_2",
		3: "LORAWAN_1_0_3",
		4: "LORAWAN_1_0_4",
		5: "LORAWAN_1_1_0",
	}
	MacVersion_value = map[string]int32{
		"LORAWAN_1_0_0": 0,
		"LORAWAN_1_0_1": 1,
		"LORAWAN_1_0_2": 2,
		"LORAWAN_1_0_3": 3,
		"LORAWAN_1_0_4": 4,
		"LORAWAN_1_1_0": 5,
	}
)

Enum value maps for MacVersion.

View Source
var File_pbnew_pb_proto protoreflect.FileDescriptor

Functions

This section is empty.

Types

type DeviceGatewayRxInfo

type DeviceGatewayRxInfo struct {

	// DevEUI (EUI64).
	DevEui []byte `protobuf:"bytes,1,opt,name=dev_eui,json=devEui,proto3" json:"dev_eui,omitempty"`
	// Data-rate.
	Dr uint32 `protobuf:"varint,2,opt,name=dr,proto3" json:"dr,omitempty"`
	// Gateway RxInfo elements.
	Items []*DeviceGatewayRxInfoItem `protobuf:"bytes,3,rep,name=items,proto3" json:"items,omitempty"`
	// contains filtered or unexported fields
}

func (*DeviceGatewayRxInfo) Descriptor deprecated

func (*DeviceGatewayRxInfo) Descriptor() ([]byte, []int)

Deprecated: Use DeviceGatewayRxInfo.ProtoReflect.Descriptor instead.

func (*DeviceGatewayRxInfo) GetDevEui

func (x *DeviceGatewayRxInfo) GetDevEui() []byte

func (*DeviceGatewayRxInfo) GetDr

func (x *DeviceGatewayRxInfo) GetDr() uint32

func (*DeviceGatewayRxInfo) GetItems

func (*DeviceGatewayRxInfo) ProtoMessage

func (*DeviceGatewayRxInfo) ProtoMessage()

func (*DeviceGatewayRxInfo) ProtoReflect

func (x *DeviceGatewayRxInfo) ProtoReflect() protoreflect.Message

func (*DeviceGatewayRxInfo) Reset

func (x *DeviceGatewayRxInfo) Reset()

func (*DeviceGatewayRxInfo) String

func (x *DeviceGatewayRxInfo) String() string

type DeviceGatewayRxInfoItem

type DeviceGatewayRxInfoItem struct {

	// Gateway ID (EUI64).
	GatewayId []byte `protobuf:"bytes,1,opt,name=gateway_id,json=gatewayId,proto3" json:"gateway_id,omitempty"`
	// RSSI.
	Rssi int32 `protobuf:"varint,2,opt,name=rssi,proto3" json:"rssi,omitempty"`
	// LoRa SNR.
	LoraSnr float32 `protobuf:"fixed32,3,opt,name=lora_snr,json=loraSnr,proto3" json:"lora_snr,omitempty"`
	// Antenna.
	Antenna uint32 `protobuf:"varint,4,opt,name=antenna,proto3" json:"antenna,omitempty"`
	// Board.
	Board uint32 `protobuf:"varint,5,opt,name=board,proto3" json:"board,omitempty"`
	// Context blob.
	Context []byte `protobuf:"bytes,6,opt,name=context,proto3" json:"context,omitempty"`
	// contains filtered or unexported fields
}

func (*DeviceGatewayRxInfoItem) Descriptor deprecated

func (*DeviceGatewayRxInfoItem) Descriptor() ([]byte, []int)

Deprecated: Use DeviceGatewayRxInfoItem.ProtoReflect.Descriptor instead.

func (*DeviceGatewayRxInfoItem) GetAntenna

func (x *DeviceGatewayRxInfoItem) GetAntenna() uint32

func (*DeviceGatewayRxInfoItem) GetBoard

func (x *DeviceGatewayRxInfoItem) GetBoard() uint32

func (*DeviceGatewayRxInfoItem) GetContext

func (x *DeviceGatewayRxInfoItem) GetContext() []byte

func (*DeviceGatewayRxInfoItem) GetGatewayId

func (x *DeviceGatewayRxInfoItem) GetGatewayId() []byte

func (*DeviceGatewayRxInfoItem) GetLoraSnr

func (x *DeviceGatewayRxInfoItem) GetLoraSnr() float32

func (*DeviceGatewayRxInfoItem) GetRssi

func (x *DeviceGatewayRxInfoItem) GetRssi() int32

func (*DeviceGatewayRxInfoItem) ProtoMessage

func (*DeviceGatewayRxInfoItem) ProtoMessage()

func (*DeviceGatewayRxInfoItem) ProtoReflect

func (x *DeviceGatewayRxInfoItem) ProtoReflect() protoreflect.Message

func (*DeviceGatewayRxInfoItem) Reset

func (x *DeviceGatewayRxInfoItem) Reset()

func (*DeviceGatewayRxInfoItem) String

func (x *DeviceGatewayRxInfoItem) String() string

type DeviceSession

type DeviceSession struct {

	// Device EUI.
	DevEui []byte `protobuf:"bytes,1,opt,name=dev_eui,json=devEui,proto3" json:"dev_eui,omitempty"`
	// Device address.
	DevAddr []byte `protobuf:"bytes,2,opt,name=dev_addr,json=devAddr,proto3" json:"dev_addr,omitempty"`
	// Join EUI.
	JoinEui []byte `protobuf:"bytes,3,opt,name=join_eui,json=joinEui,proto3" json:"join_eui,omitempty"`
	// LoRaWAN mac-version.
	MacVersion MacVersion `protobuf:"varint,4,opt,name=mac_version,json=macVersion,proto3,enum=pbnew.MacVersion" json:"mac_version,omitempty"`
	// FNwkSIntKey.
	FNwkSIntKey []byte `protobuf:"bytes,5,opt,name=f_nwk_s_int_key,json=fNwkSIntKey,proto3" json:"f_nwk_s_int_key,omitempty"`
	// SNwkSIntKey.
	SNwkSIntKey []byte `protobuf:"bytes,6,opt,name=s_nwk_s_int_key,json=sNwkSIntKey,proto3" json:"s_nwk_s_int_key,omitempty"`
	// NwkSEncKey.
	NwkSEncKey []byte `protobuf:"bytes,7,opt,name=nwk_s_enc_key,json=nwkSEncKey,proto3" json:"nwk_s_enc_key,omitempty"`
	// AppSKey envelope.
	AppSKey *KeyEnvelope `protobuf:"bytes,8,opt,name=app_s_key,json=appSKey,proto3" json:"app_s_key,omitempty"`
	// Uplink frame-counter.
	FCntUp uint32 `protobuf:"varint,9,opt,name=f_cnt_up,json=fCntUp,proto3" json:"f_cnt_up,omitempty"`
	// Downlink frame-counter (ns).
	NFCntDown uint32 `protobuf:"varint,10,opt,name=n_f_cnt_down,json=nFCntDown,proto3" json:"n_f_cnt_down,omitempty"`
	// Downlink frame-counter (as).
	AFCntDown uint32 `protobuf:"varint,11,opt,name=a_f_cnt_down,json=aFCntDown,proto3" json:"a_f_cnt_down,omitempty"`
	// Frame-counter holding the last confirmed downlink frame (n_f_cnt_down or a_f_cnt_down).
	ConfFCnt uint32 `protobuf:"varint,12,opt,name=conf_f_cnt,json=confFCnt,proto3" json:"conf_f_cnt,omitempty"`
	// Skip uplink frame-counter validation.
	SkipFCntCheck bool `protobuf:"varint,13,opt,name=skip_f_cnt_check,json=skipFCntCheck,proto3" json:"skip_f_cnt_check,omitempty"`
	// RX1 delay.
	Rx1Delay uint32 `protobuf:"varint,14,opt,name=rx1_delay,json=rx1Delay,proto3" json:"rx1_delay,omitempty"`
	// RX1 data-rate offset.
	Rx1DrOffset uint32 `protobuf:"varint,15,opt,name=rx1_dr_offset,json=rx1DrOffset,proto3" json:"rx1_dr_offset,omitempty"`
	// RX2 data-rate.
	Rx2Dr uint32 `protobuf:"varint,16,opt,name=rx2_dr,json=rx2Dr,proto3" json:"rx2_dr,omitempty"`
	// RX2 frequency.
	Rx2Frequency uint32 `protobuf:"varint,17,opt,name=rx2_frequency,json=rx2Frequency,proto3" json:"rx2_frequency,omitempty"`
	// Enabled uplink channels.
	EnabledUplinkChannelIndices []uint32 `` /* 155-byte string literal not displayed */
	// Extra user-defined uplink channels.
	ExtraUplinkChannels map[uint32]*DeviceSessionChannel `` /* 210-byte string literal not displayed */
	// Class-B ping-slot data-rate.
	ClassBPingSlotDr uint32 `protobuf:"varint,20,opt,name=class_b_ping_slot_dr,json=classBPingSlotDr,proto3" json:"class_b_ping_slot_dr,omitempty"`
	// Class-B ping-slot frequency.
	ClassBPingSlotFreq uint32 `protobuf:"varint,21,opt,name=class_b_ping_slot_freq,json=classBPingSlotFreq,proto3" json:"class_b_ping_slot_freq,omitempty"`
	// Class-B ping-slot nb.
	ClassBPingSlotNb uint32 `protobuf:"varint,22,opt,name=class_b_ping_slot_nb,json=classBPingSlotNb,proto3" json:"class_b_ping_slot_nb,omitempty"`
	// Nb. transmissions.
	NbTrans uint32 `protobuf:"varint,23,opt,name=nb_trans,json=nbTrans,proto3" json:"nb_trans,omitempty"`
	// TXPowerIndex which the node is using. The possible values are defined
	// by the lorawan/band package and are region specific. By default it is
	// assumed that the node is using TXPower 0. This value is controlled by
	// the ADR engine.
	TxPowerIndex uint32 `protobuf:"varint,24,opt,name=tx_power_index,json=txPowerIndex,proto3" json:"tx_power_index,omitempty"`
	// DR defines the (last known) data-rate at which the node is operating.
	// This value is controlled by the ADR engine.
	Dr uint32 `protobuf:"varint,25,opt,name=dr,proto3" json:"dr,omitempty"`
	// ADR defines if the device has ADR enabled.
	Adr bool `protobuf:"varint,26,opt,name=adr,proto3" json:"adr,omitempty"`
	// MaxSupportedTXPowerIndex defines the maximum supported tx-power index
	// by the node, or 0 when not set.
	MaxSupportedTxPowerIndex uint32 `` /* 141-byte string literal not displayed */
	// MinSupportedTXPowerIndex defines the minimum supported tx-power index
	// by the node (default 0).
	MinSupportedTxPowerIndex uint32 `` /* 141-byte string literal not displayed */
	// Pending rejoin device-session contains a device-session which has not
	// yet been activated by the device (by sending a first uplink).
	PendingRejoinDeviceSession *DeviceSession `` /* 144-byte string literal not displayed */
	// Uplink history for ADR (last 20 uplink transmissions).
	UplinkAdrHistory []*UplinkAdrHistory `protobuf:"bytes,30,rep,name=uplink_adr_history,json=uplinkAdrHistory,proto3" json:"uplink_adr_history,omitempty"`
	// Mac-command error count.
	MacCommandErrorCount map[uint32]uint32 `` /* 216-byte string literal not displayed */
	// Last device-status request.
	LastDeviceStatusRequest *timestamppb.Timestamp `` /* 135-byte string literal not displayed */
	// RejoinRequestEnabled defines if the rejoin-request is enabled on the
	// device.
	RejoinRequestEnabled bool `protobuf:"varint,33,opt,name=rejoin_request_enabled,json=rejoinRequestEnabled,proto3" json:"rejoin_request_enabled,omitempty"`
	// RejoinRequestMaxCountN defines the 2^(C+4) uplink message interval for
	// the rejoin-request.
	RejoinRequestMaxCountN uint32 `` /* 135-byte string literal not displayed */
	// RejoinRequestMaxTimeN defines the 2^(T+10) time interval (seconds)
	// for the rejoin-request.
	RejoinRequestMaxTimeN uint32 `` /* 132-byte string literal not displayed */
	// Rejoin counter (RJCount0).
	// This counter is reset to 0 after each successful join-accept.
	RejoinCount_0 uint32 `protobuf:"varint,36,opt,name=rejoin_count_0,json=rejoinCount0,proto3" json:"rejoin_count_0,omitempty"`
	// Uplink dwell time.
	UplinkDwellTime_400Ms bool `` /* 127-byte string literal not displayed */
	// Downlink dwell time.
	DownlinkDwellTime_400Ms bool `` /* 133-byte string literal not displayed */
	// Uplink max. EIRP index.
	UplinkMaxEirpIndex uint32 `protobuf:"varint,39,opt,name=uplink_max_eirp_index,json=uplinkMaxEirpIndex,proto3" json:"uplink_max_eirp_index,omitempty"`
	// Region name.
	RegionName string `protobuf:"bytes,40,opt,name=region_name,json=regionName,proto3" json:"region_name,omitempty"`
	// contains filtered or unexported fields
}

func (*DeviceSession) Descriptor deprecated

func (*DeviceSession) Descriptor() ([]byte, []int)

Deprecated: Use DeviceSession.ProtoReflect.Descriptor instead.

func (*DeviceSession) GetAFCntDown

func (x *DeviceSession) GetAFCntDown() uint32

func (*DeviceSession) GetAdr

func (x *DeviceSession) GetAdr() bool

func (*DeviceSession) GetAppSKey

func (x *DeviceSession) GetAppSKey() *KeyEnvelope

func (*DeviceSession) GetClassBPingSlotDr

func (x *DeviceSession) GetClassBPingSlotDr() uint32

func (*DeviceSession) GetClassBPingSlotFreq

func (x *DeviceSession) GetClassBPingSlotFreq() uint32

func (*DeviceSession) GetClassBPingSlotNb

func (x *DeviceSession) GetClassBPingSlotNb() uint32

func (*DeviceSession) GetConfFCnt

func (x *DeviceSession) GetConfFCnt() uint32

func (*DeviceSession) GetDevAddr

func (x *DeviceSession) GetDevAddr() []byte

func (*DeviceSession) GetDevEui

func (x *DeviceSession) GetDevEui() []byte

func (*DeviceSession) GetDownlinkDwellTime_400Ms

func (x *DeviceSession) GetDownlinkDwellTime_400Ms() bool

func (*DeviceSession) GetDr

func (x *DeviceSession) GetDr() uint32

func (*DeviceSession) GetEnabledUplinkChannelIndices

func (x *DeviceSession) GetEnabledUplinkChannelIndices() []uint32

func (*DeviceSession) GetExtraUplinkChannels

func (x *DeviceSession) GetExtraUplinkChannels() map[uint32]*DeviceSessionChannel

func (*DeviceSession) GetFCntUp

func (x *DeviceSession) GetFCntUp() uint32

func (*DeviceSession) GetFNwkSIntKey

func (x *DeviceSession) GetFNwkSIntKey() []byte

func (*DeviceSession) GetJoinEui

func (x *DeviceSession) GetJoinEui() []byte

func (*DeviceSession) GetLastDeviceStatusRequest

func (x *DeviceSession) GetLastDeviceStatusRequest() *timestamppb.Timestamp

func (*DeviceSession) GetMacCommandErrorCount

func (x *DeviceSession) GetMacCommandErrorCount() map[uint32]uint32

func (*DeviceSession) GetMacVersion

func (x *DeviceSession) GetMacVersion() MacVersion

func (*DeviceSession) GetMaxSupportedTxPowerIndex

func (x *DeviceSession) GetMaxSupportedTxPowerIndex() uint32

func (*DeviceSession) GetMinSupportedTxPowerIndex

func (x *DeviceSession) GetMinSupportedTxPowerIndex() uint32

func (*DeviceSession) GetNFCntDown

func (x *DeviceSession) GetNFCntDown() uint32

func (*DeviceSession) GetNbTrans

func (x *DeviceSession) GetNbTrans() uint32

func (*DeviceSession) GetNwkSEncKey

func (x *DeviceSession) GetNwkSEncKey() []byte

func (*DeviceSession) GetPendingRejoinDeviceSession

func (x *DeviceSession) GetPendingRejoinDeviceSession() *DeviceSession

func (*DeviceSession) GetRegionName

func (x *DeviceSession) GetRegionName() string

func (*DeviceSession) GetRejoinCount_0

func (x *DeviceSession) GetRejoinCount_0() uint32

func (*DeviceSession) GetRejoinRequestEnabled

func (x *DeviceSession) GetRejoinRequestEnabled() bool

func (*DeviceSession) GetRejoinRequestMaxCountN

func (x *DeviceSession) GetRejoinRequestMaxCountN() uint32

func (*DeviceSession) GetRejoinRequestMaxTimeN

func (x *DeviceSession) GetRejoinRequestMaxTimeN() uint32

func (*DeviceSession) GetRx1Delay

func (x *DeviceSession) GetRx1Delay() uint32

func (*DeviceSession) GetRx1DrOffset

func (x *DeviceSession) GetRx1DrOffset() uint32

func (*DeviceSession) GetRx2Dr

func (x *DeviceSession) GetRx2Dr() uint32

func (*DeviceSession) GetRx2Frequency

func (x *DeviceSession) GetRx2Frequency() uint32

func (*DeviceSession) GetSNwkSIntKey

func (x *DeviceSession) GetSNwkSIntKey() []byte

func (*DeviceSession) GetSkipFCntCheck

func (x *DeviceSession) GetSkipFCntCheck() bool

func (*DeviceSession) GetTxPowerIndex

func (x *DeviceSession) GetTxPowerIndex() uint32

func (*DeviceSession) GetUplinkAdrHistory

func (x *DeviceSession) GetUplinkAdrHistory() []*UplinkAdrHistory

func (*DeviceSession) GetUplinkDwellTime_400Ms

func (x *DeviceSession) GetUplinkDwellTime_400Ms() bool

func (*DeviceSession) GetUplinkMaxEirpIndex

func (x *DeviceSession) GetUplinkMaxEirpIndex() uint32

func (*DeviceSession) ProtoMessage

func (*DeviceSession) ProtoMessage()

func (*DeviceSession) ProtoReflect

func (x *DeviceSession) ProtoReflect() protoreflect.Message

func (*DeviceSession) Reset

func (x *DeviceSession) Reset()

func (*DeviceSession) String

func (x *DeviceSession) String() string

type DeviceSessionChannel

type DeviceSessionChannel struct {

	// Frequency Hz.
	Frequency uint32 `protobuf:"varint,1,opt,name=frequency,proto3" json:"frequency,omitempty"`
	// Min. data-rate.
	MinDr uint32 `protobuf:"varint,2,opt,name=min_dr,json=minDr,proto3" json:"min_dr,omitempty"`
	// Max. data-rate.
	MaxDr uint32 `protobuf:"varint,3,opt,name=max_dr,json=maxDr,proto3" json:"max_dr,omitempty"`
	// contains filtered or unexported fields
}

func (*DeviceSessionChannel) Descriptor deprecated

func (*DeviceSessionChannel) Descriptor() ([]byte, []int)

Deprecated: Use DeviceSessionChannel.ProtoReflect.Descriptor instead.

func (*DeviceSessionChannel) GetFrequency

func (x *DeviceSessionChannel) GetFrequency() uint32

func (*DeviceSessionChannel) GetMaxDr

func (x *DeviceSessionChannel) GetMaxDr() uint32

func (*DeviceSessionChannel) GetMinDr

func (x *DeviceSessionChannel) GetMinDr() uint32

func (*DeviceSessionChannel) ProtoMessage

func (*DeviceSessionChannel) ProtoMessage()

func (*DeviceSessionChannel) ProtoReflect

func (x *DeviceSessionChannel) ProtoReflect() protoreflect.Message

func (*DeviceSessionChannel) Reset

func (x *DeviceSessionChannel) Reset()

func (*DeviceSessionChannel) String

func (x *DeviceSessionChannel) String() string

type KeyEnvelope

type KeyEnvelope struct {

	// KEK label.
	KekLabel string `protobuf:"bytes,1,opt,name=kek_label,json=kekLabel,proto3" json:"kek_label,omitempty"`
	// AES key (when the kek_label is set, this value must first be decrypted).
	AesKey []byte `protobuf:"bytes,2,opt,name=aes_key,json=aesKey,proto3" json:"aes_key,omitempty"`
	// contains filtered or unexported fields
}

func (*KeyEnvelope) Descriptor deprecated

func (*KeyEnvelope) Descriptor() ([]byte, []int)

Deprecated: Use KeyEnvelope.ProtoReflect.Descriptor instead.

func (*KeyEnvelope) GetAesKey

func (x *KeyEnvelope) GetAesKey() []byte

func (*KeyEnvelope) GetKekLabel

func (x *KeyEnvelope) GetKekLabel() string

func (*KeyEnvelope) ProtoMessage

func (*KeyEnvelope) ProtoMessage()

func (*KeyEnvelope) ProtoReflect

func (x *KeyEnvelope) ProtoReflect() protoreflect.Message

func (*KeyEnvelope) Reset

func (x *KeyEnvelope) Reset()

func (*KeyEnvelope) String

func (x *KeyEnvelope) String() string

type MacVersion

type MacVersion int32
const (
	MacVersion_LORAWAN_1_0_0 MacVersion = 0
	MacVersion_LORAWAN_1_0_1 MacVersion = 1
	MacVersion_LORAWAN_1_0_2 MacVersion = 2
	MacVersion_LORAWAN_1_0_3 MacVersion = 3
	MacVersion_LORAWAN_1_0_4 MacVersion = 4
	MacVersion_LORAWAN_1_1_0 MacVersion = 5
)

func (MacVersion) Descriptor

func (MacVersion) Descriptor() protoreflect.EnumDescriptor

func (MacVersion) Enum

func (x MacVersion) Enum() *MacVersion

func (MacVersion) EnumDescriptor deprecated

func (MacVersion) EnumDescriptor() ([]byte, []int)

Deprecated: Use MacVersion.Descriptor instead.

func (MacVersion) Number

func (x MacVersion) Number() protoreflect.EnumNumber

func (MacVersion) String

func (x MacVersion) String() string

func (MacVersion) Type

type UplinkAdrHistory

type UplinkAdrHistory struct {

	// Uplink frame-counter.
	FCnt uint32 `protobuf:"varint,1,opt,name=f_cnt,json=fCnt,proto3" json:"f_cnt,omitempty"`
	// Max SNR (of deduplicated frames received by one or multiple gateways).
	MaxSnr float32 `protobuf:"fixed32,2,opt,name=max_snr,json=maxSnr,proto3" json:"max_snr,omitempty"`
	// Max RSSI.
	MaxRssi int32 `protobuf:"varint,5,opt,name=max_rssi,json=maxRssi,proto3" json:"max_rssi,omitempty"`
	// TX Power (as known by the network-server).
	TxPowerIndex uint32 `protobuf:"varint,3,opt,name=tx_power_index,json=txPowerIndex,proto3" json:"tx_power_index,omitempty"`
	// Number of receiving gateways.
	GatewayCount uint32 `protobuf:"varint,4,opt,name=gateway_count,json=gatewayCount,proto3" json:"gateway_count,omitempty"`
	// contains filtered or unexported fields
}

func (*UplinkAdrHistory) Descriptor deprecated

func (*UplinkAdrHistory) Descriptor() ([]byte, []int)

Deprecated: Use UplinkAdrHistory.ProtoReflect.Descriptor instead.

func (*UplinkAdrHistory) GetFCnt

func (x *UplinkAdrHistory) GetFCnt() uint32

func (*UplinkAdrHistory) GetGatewayCount

func (x *UplinkAdrHistory) GetGatewayCount() uint32

func (*UplinkAdrHistory) GetMaxRssi

func (x *UplinkAdrHistory) GetMaxRssi() int32

func (*UplinkAdrHistory) GetMaxSnr

func (x *UplinkAdrHistory) GetMaxSnr() float32

func (*UplinkAdrHistory) GetTxPowerIndex

func (x *UplinkAdrHistory) GetTxPowerIndex() uint32

func (*UplinkAdrHistory) ProtoMessage

func (*UplinkAdrHistory) ProtoMessage()

func (*UplinkAdrHistory) ProtoReflect

func (x *UplinkAdrHistory) ProtoReflect() protoreflect.Message

func (*UplinkAdrHistory) Reset

func (x *UplinkAdrHistory) Reset()

func (*UplinkAdrHistory) String

func (x *UplinkAdrHistory) String() string

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL