Compare commits

..

90 Commits

Author SHA1 Message Date
Orne Brocaar
5418218aa1 ui: Run make format to format ui code. 2024-08-28 14:42:16 +01:00
Orne Brocaar
29b5c3de1c ui: Fix tooltip date formatting.
With the migration from moment to date-fns (#460) some of the formatting
strings were not updated accordingly.

Fixes #503.
2024-08-28 14:41:43 +01:00
Guillaume Milani
800d7d0efe api: Upgrade io.grpc dependencies in Java API. (#494)
This fixes a compatibility issue with Netty.

---
Co-authored-by: Guillaume Milani <guillaume.milani@sontex.ch>
2024-08-21 14:49:08 +01:00
Orne Brocaar
489a35e0ec Bump version to 4.9.0 2024-08-15 09:06:19 +01:00
Orne Brocaar
1848097e6c Fix missing last_seen_at field update of relay gateway. 2024-08-13 15:54:51 +01:00
Orne Brocaar
76b7ec4881 Add signal handling.
Fixes #480.
2024-08-13 13:04:06 +01:00
Orne Brocaar
3aaa114f46 Update deadpool-redis. 2024-08-08 16:53:07 +01:00
Orne Brocaar
a811ec5c80 Bump version to 4.9.0-test.6 2024-08-07 15:11:09 +01:00
Orne Brocaar
5794f41324 Fix clippy feedback (cargo clippy --fix). 2024-08-07 14:59:25 +01:00
Bernd Storath
7158c0c610 ui: Update codec template with JSDoc (#473) 2024-08-05 11:17:13 +01:00
Orne Brocaar
eda6646b18 Update dependencies. 2024-08-05 10:15:23 +01:00
Orne Brocaar
40a2b83bf5 Update redis dependency. 2024-08-05 10:06:48 +01:00
Orne Brocaar
4e0106a4e8 Replace warp with axum.
The warp dependency was causing some issues with upgrading dependencies
as it depends on http v0.2, where other dependencies (e.g. tonic) have
already upgraded to http v1+.
2024-08-01 11:33:57 +01:00
Orne Brocaar
98978135c4 ui: Fix formatting template after merging #460. 2024-07-30 11:18:52 +01:00
Orne Brocaar
6a691c62e2 Update dependencies. 2024-07-24 14:12:50 +01:00
Orne Brocaar
66ab41036b Update lapin crate.
This disables the default features (rustls), because lapin enables the
default rustls features, which pulls in the aws-lc-rs dependency besides
ring.

Most likely, the next lapin version will fix this by exposing feature
flags to either enable aws-lc-rs or ring backend for rustls.
2024-07-24 14:05:46 +01:00
Orne Brocaar
dc57e6fe51 Update rustls to 0.23. 2024-07-23 14:03:09 +01:00
Orne Brocaar
ebc4065ca2 Bump version to 4.9.0-test.5 2024-07-23 11:03:39 +01:00
Orne Brocaar
a23797ddbb Fix updating dependencies.
The previous update dependencies commit contained a dependency that
pulled in the aws-lc-rs crate, which fails to build on ARMv7. See also
370b84cb09.

This commit reverts the updates and only updates part of the crates.

A proper fix will be to update all dependencies to rustls 0.23 such that
we can enable the ring feature flag (which is the 0.22 default).
2024-07-23 10:39:58 +01:00
Orne Brocaar
8fabfd925e Bump version to 4.9.0-test.4 2024-07-22 14:40:01 +01:00
Orne Brocaar
2eb17bde92 Update install-nix-action workflow step. 2024-07-22 11:51:00 +01:00
Orne Brocaar
a22ed43883 Update dependencies.
There are still a few dependencies left to update, but these updates
require additional code changes.
2024-07-22 11:48:08 +01:00
Orne Brocaar
de656cf885 Add user_info config to region_... + format TOML.
Closes #462.
2024-07-22 10:48:43 +01:00
Bernd Storath
2a8e49bf8d ui: Replace moment with date-fns. (#460) 2024-07-22 10:16:08 +01:00
SAGAR PATEL
262f51da3f Update main.yml workflow. (#461) 2024-07-22 10:14:37 +01:00
Bernd Storath
4f0d2126d8 ui: Migrate from create-react-app to vite (#459) 2024-07-16 14:10:19 +01:00
pyttel
3777de706d Make OIDC and OAuth2 scopes configurable. (#445)
Co-authored-by: Orne Brocaar <info@brocaar.com>
2024-07-11 10:51:37 +01:00
Orne Brocaar
f76a4b7f83 lrwn: Allow empty string for AES128Key, DevAddr, EUI64 and NetID.
In case an empty string is provided, the default "null" value will be
used.

Fixes #453.
2024-07-11 10:05:23 +01:00
Orne Brocaar
920f485734 Update openidconnect dependency.
Fixes #423.
2024-07-11 09:56:13 +01:00
Orne Brocaar
2737284d2d Update oauth2 dependency. 2024-07-11 09:56:13 +01:00
Bernd Storath
d39fbea7af Fix typo in gateway stats handling. (#458) 2024-07-11 09:01:20 +01:00
tuialexandre
15461d8cc5 Improved device activation api documentation (#454) 2024-07-10 15:06:01 +01:00
Bernd Storath
ad2fecd1d2 ui: Make tileserver + attribution configurable. (#451)
Co-authored-by: Orne Brocaar <info@brocaar.com>
2024-07-10 15:05:33 +01:00
dependabot[bot]
4ef0fbbd8f Bump curve25519-dalek from 4.1.2 to 4.1.3 (#442)
Bumps [curve25519-dalek](https://github.com/dalek-cryptography/curve25519-dalek) from 4.1.2 to 4.1.3.
- [Release notes](https://github.com/dalek-cryptography/curve25519-dalek/releases)
- [Commits](https://github.com/dalek-cryptography/curve25519-dalek/compare/curve25519-4.1.2...curve25519-4.1.3)

---
updated-dependencies:
- dependency-name: curve25519-dalek
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-07-09 12:22:35 +01:00
dependabot[bot]
264f51a190 Bump ws from 7.5.9 to 7.5.10 in /ui (#441)
Bumps [ws](https://github.com/websockets/ws) from 7.5.9 to 7.5.10.
- [Release notes](https://github.com/websockets/ws/releases)
- [Commits](https://github.com/websockets/ws/compare/7.5.9...7.5.10)

---
updated-dependencies:
- dependency-name: ws
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-07-09 12:21:54 +01:00
dependabot[bot]
abde97f46d Bump braces from 3.0.2 to 3.0.3 in /ui (#436)
Bumps [braces](https://github.com/micromatch/braces) from 3.0.2 to 3.0.3.
- [Changelog](https://github.com/micromatch/braces/blob/master/CHANGELOG.md)
- [Commits](https://github.com/micromatch/braces/compare/3.0.2...3.0.3)

---
updated-dependencies:
- dependency-name: braces
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-07-09 12:21:35 +01:00
dependabot[bot]
6c8e87f505 Bump @grpc/grpc-js from 1.10.4 to 1.10.9 in /api/js (#434)
Bumps [@grpc/grpc-js](https://github.com/grpc/grpc-node) from 1.10.4 to 1.10.9.
- [Release notes](https://github.com/grpc/grpc-node/releases)
- [Commits](https://github.com/grpc/grpc-node/compare/@grpc/grpc-js@1.10.4...@grpc/grpc-js@1.10.9)

---
updated-dependencies:
- dependency-name: "@grpc/grpc-js"
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-07-09 12:21:16 +01:00
Bernd Storath
c173ace8bc api: Remove generated PHP code. (#452) 2024-07-09 12:15:16 +01:00
Orne Brocaar
f153eb8ca0 lrwn: Fix typo in snr clamp. 2024-07-09 11:57:20 +01:00
Orne Brocaar
4a33f67ed6 lrwn: Fix cargo clippy feedback. 2024-07-09 11:39:32 +01:00
Orne Brocaar
63bc1b57de ui: Fix isGatewayAdmin build error. 2024-07-09 11:25:10 +01:00
Orne Brocaar
f854236b79 Bump version to 4.9.0-test.3 2024-06-26 14:57:17 +01:00
Orne Brocaar
d25cc3ca6d Update mesh heartbeat MQTT topic. 2024-06-25 13:57:13 +01:00
Orne Brocaar
68473906c9 Bump version to 4.9.0-test.2 2024-06-25 12:27:28 +01:00
Orne Brocaar
3f1a47e1e2 Integrate Gateway Mesh feature.
This adds a Gateway Mesh section to the web-interface (+ API endpoints)
to see the status op each Relay Gateway within the Gateway Mesh.

The Gateway Mesh (https://github.com/chirpstack/chirpstack-gateway-mesh)
is an experimental feature to extend LoRaWAN coverage throug Relay
Gateways.
2024-06-25 11:37:57 +01:00
Orne Brocaar
c0b148fecb Fix exposing full JS codec error.
In some cases tests would fail (I assume based on load / running
concurrent tests) without the full JS codec error.

Fixes #440.
2024-06-19 09:34:09 +01:00
Orne Brocaar
6b9f7a9ea1 Fix cargo check / clippy warnings. 2024-06-19 09:27:15 +01:00
Orne Brocaar
3b95a413a6 Update Rust, Diesel CLI and dev. environment. 2024-06-18 13:56:31 +01:00
Bernd Storath
38d544a5f7 api: add grpc php support (#431) 2024-06-11 11:50:02 +01:00
Bernd Storath
880b319bfd Update sslmode options in config template. (#433) 2024-06-10 15:09:34 +01:00
Bernd Storath
a0abd4a4bb ui: Fix empty string in revision column (#432) 2024-06-10 14:59:18 +01:00
Orne Brocaar
52a08acf81 Add passive_roaming_validate_mic option.
This option does two things:

1) In case the passive-roaming agreement is not state-less, it will
   trigger the validation of MIC (this was already implemented at the
   roaming-session retrieval, but never used).
2) On PRStartAns, it will return the NwkSKey / FNwkSIntKey to the
   requester (such that the MIC validation can be performed).

For state-less passive-roaming, it is recommended to leave this option
set to false, such that no session-keys are exposed.
2024-05-27 11:27:26 +01:00
Orne Brocaar
04ffcf88a1 backend: Fix sending HomeNSAns response to HomeNSReq request. 2024-05-16 13:18:55 +01:00
Orne Brocaar
c7f1367bf8 api: Remove frame_log from __init__.py (Python).
Closes #422.
2024-05-16 11:54:39 +01:00
Orne Brocaar
ae31e4d85f Update cross-rs image to :main.
The :latest tag points to a very old image versions, which are not
consistent with regards to the base-image. This is causing differences
in library versions across different target platforms.

Once a v0.3.0 release is available, :main can be changed into :0.3.0.

Closes #421.
2024-05-14 11:40:32 +01:00
Orne Brocaar
4968f5d792 Bump version to 4.8.1 2024-05-13 16:47:14 +01:00
Orne Brocaar
36bbf8f153 api: Fix empty JS packages.
NPM uses the .gitignore file, which includes the generated JS code. This
caused the v4.8.0 JS packages to be completely empty. Adding an empty
.npmignore file resolves the issue as if a .npmignore file is detected,
the .gitignore file is ignored.
2024-05-13 16:32:59 +01:00
Orne Brocaar
c3de89a4a4 Bump version to 4.8.0 2024-05-13 15:35:00 +01:00
Orne Brocaar
73ad79a356 Bump version to 4.8.0-test.5 2024-05-09 13:45:24 +01:00
Orne Brocaar
a65ac0077e Update Rust to v1.78. 2024-05-09 13:17:36 +01:00
Orne Brocaar
370b84cb09 Revert "Update dependencies."
This reverts commit f475e4f642. One of the
updated dependencies introduces aws-lc-rs as dependency, which fails to
build on ARMv7.
2024-05-09 13:02:59 +01:00
Orne Brocaar
d03870ff11 Bump version to 4.8.0-test.4 2024-05-09 11:22:22 +01:00
Orne Brocaar
f62d8b325c Revert "Use mold linker for development."
This reverts commit 4f1a1bbce5. This was
intended to improve the development speed, but it breaks the build. This
is because even when cross-compiling, the Rust compiler does compile
some code for the host target for code-generation.
2024-05-09 10:53:50 +01:00
Orne Brocaar
e0a9e52cca Bump version to 4.8.0-test.3 2024-05-09 08:48:43 +01:00
Orne Brocaar
b7dad2a7d0 Add RP002-1.0.4 option to device-profile. 2024-05-08 15:05:14 +01:00
Orne Brocaar
2e65c5baa9 Set CARGO_INCREMENTAL=0 for CI builds. 2024-05-08 14:12:04 +01:00
Orne Brocaar
640a0f348e Fix formatting after cargo clippy --fix. 2024-05-08 12:09:30 +01:00
Orne Brocaar
057aed7f50 Fix cargo clippy warnings. 2024-05-08 11:53:34 +01:00
Orne Brocaar
66d0ec2f6f Speed up cargo check.
See also:
https://corrode.dev/blog/tips-for-faster-rust-compile-times/#avoid-procedural-macro-crates.
2024-05-08 11:46:35 +01:00
Orne Brocaar
f475e4f642 Update dependencies. 2024-05-08 10:59:27 +01:00
dependabot[bot]
17ae49ca7d Bump ejs from 3.1.9 to 3.1.10 in /ui (#414)
Bumps [ejs](https://github.com/mde/ejs) from 3.1.9 to 3.1.10.
- [Release notes](https://github.com/mde/ejs/releases)
- [Commits](https://github.com/mde/ejs/compare/v3.1.9...v3.1.10)

---
updated-dependencies:
- dependency-name: ejs
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-08 10:56:22 +01:00
Orne Brocaar
18e56957e2 lrwn: Validate max payload sizes for RP002-1.0.4. 2024-05-08 10:41:42 +01:00
Orne Brocaar
99dbefdfec Add support for handling HomeNSReq requests.
In this case, we return the (primary) NetID of the ChirpStack instance.
Supporting the HomeNSReq is useful in the case the roaming ChirpStack
instances are setup to resolve the servers using DNS. In case of OTAA,
the fNS resolves the JoinEUI to a hostname to which it must make the
HomeNSReq. This returns the HNetID, which then can be used to resolve
the hostname of the hNS to which the join-request must be forwarded.
2024-05-07 15:55:37 +01:00
Sajad Abdollahi
26832f3a5f api: add --depth=1 to googleapis and protobuf clones (#420) 2024-05-07 12:21:14 +01:00
Orne Brocaar
40cfa3ddf2 Update rquickjs dependency. 2024-05-07 12:15:24 +01:00
Orne Brocaar
ed9a9b0c88 Exclude disabled devices from Class-B/C scheduler.
Closes brocaar/chirpstack-network-server#612.
2024-05-07 09:31:53 +01:00
Orne Brocaar
4f1a1bbce5 Use mold linker for development.
This speeds up check and build times.
2024-05-03 16:32:06 +01:00
Orne Brocaar
c51653d1bc Fix loading options (onFocus > onDropdownVisibleChange).
onFocus is only triggered when when dropdown doesn't have focus where
onDropdownVisibleChange is always triggered when opening / closing the
dropdown.

Closes #334.
2024-05-03 12:42:33 +01:00
Orne Brocaar
3ec9ee2031 Convert Local to NaiveDateTime before calculating intervals.
This makes it a lot easier to iterate over the intervals, as we no
longer have to take into account DST changes that could either result in
an invalid or ambiguous date, or not incrementing by the expected
interval. E.g. incrementing by 1 day resulting in a 23 hour increment
because or DST change.

On returning the metrics, we try to convert the NaiveDateTime back into
a DateTime<Local>, failing that, we skip it rather than failing on it.

Closes #415.
2024-05-03 12:25:51 +01:00
Orne Brocaar
5f6ccc35fb Auto-detect if MQTT broker supports shared-subscriptions.
Closes #413.
2024-05-02 14:12:43 +01:00
dependabot[bot]
0d11ad609a Bump golang.org/x/net from 0.22.0 to 0.23.0 in /api/go (#406)
Bumps [golang.org/x/net](https://github.com/golang/net) from 0.22.0 to 0.23.0.
- [Commits](https://github.com/golang/net/compare/v0.22.0...v0.23.0)

---
updated-dependencies:
- dependency-name: golang.org/x/net
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-02 10:39:09 +01:00
dependabot[bot]
fed94a9b75 Bump golang.org/x/net from 0.19.0 to 0.23.0 in /examples/frame_log/go (#405)
Bumps [golang.org/x/net](https://github.com/golang/net) from 0.19.0 to 0.23.0.
- [Commits](https://github.com/golang/net/compare/v0.19.0...v0.23.0)

---
updated-dependencies:
- dependency-name: golang.org/x/net
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-02 10:38:59 +01:00
dependabot[bot]
13e26977f4 Bump golang.org/x/net from 0.19.0 to 0.23.0 in /examples/request_log/go (#404)
Bumps [golang.org/x/net](https://github.com/golang/net) from 0.19.0 to 0.23.0.
- [Commits](https://github.com/golang/net/compare/v0.19.0...v0.23.0)

---
updated-dependencies:
- dependency-name: golang.org/x/net
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-02 10:38:49 +01:00
dependabot[bot]
0b665c7a11 Bump protobufjs from 7.2.4 to 7.2.6 in /api/js (#401)
Bumps [protobufjs](https://github.com/protobufjs/protobuf.js) from 7.2.4 to 7.2.6.
- [Release notes](https://github.com/protobufjs/protobuf.js/releases)
- [Changelog](https://github.com/protobufjs/protobuf.js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/protobufjs/protobuf.js/compare/protobufjs-v7.2.4...protobufjs-v7.2.6)

---
updated-dependencies:
- dependency-name: protobufjs
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-02 10:38:29 +01:00
dependabot[bot]
3ee4598320 Bump tar from 6.1.15 to 6.2.1 in /api/grpc-web (#400)
Bumps [tar](https://github.com/isaacs/node-tar) from 6.1.15 to 6.2.1.
- [Release notes](https://github.com/isaacs/node-tar/releases)
- [Changelog](https://github.com/isaacs/node-tar/blob/main/CHANGELOG.md)
- [Commits](https://github.com/isaacs/node-tar/compare/v6.1.15...v6.2.1)

---
updated-dependencies:
- dependency-name: tar
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-02 10:38:15 +01:00
dependabot[bot]
8adc80bf4e Bump tar from 6.1.15 to 6.2.1 in /api/js (#399)
Bumps [tar](https://github.com/isaacs/node-tar) from 6.1.15 to 6.2.1.
- [Release notes](https://github.com/isaacs/node-tar/releases)
- [Changelog](https://github.com/isaacs/node-tar/blob/main/CHANGELOG.md)
- [Commits](https://github.com/isaacs/node-tar/compare/v6.1.15...v6.2.1)

---
updated-dependencies:
- dependency-name: tar
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-02 10:38:04 +01:00
Orne Brocaar
487f785302 Add option to increase RX1 Delay in device-profile.
In general ChirpStack is configured with a rx1_delay configuration
matching the network latency (e.g. on cellular, one might want to set
this to rx1_delay=3). However, this does not take into account a
possible latency of the end-application. Handling the uplink and
enqueueing a downlink might take more time than the configured rx1_delay
(and get_downlink_data_delay) allows.

This option makes it possible to increase the RX1 Delay in the
device-profile. If the RX1 Delay has between increased relative to
the system default, then the get_downlink_data_delay will be
incremented with the same amount of seconds.
2024-05-02 10:29:10 +01:00
Orne Brocaar
a5ff416fa2 Implement storing + display duty-cycle stats.
Note that these stats are only available for Concentratord based
gateways as these metrics must be aggregated by the gateway.
2024-04-17 14:34:11 +01:00
Orne Brocaar
2889da37c2 Exclude offline gateways from multicast scheduling. 2024-04-15 14:09:38 +01:00
Orne Brocaar
378b314a32 Update rcgen dependency + cargo update. 2024-04-10 11:52:23 +01:00
427 changed files with 13113 additions and 16540 deletions

View File

@@ -6,3 +6,6 @@ rustflags = ["-C", "target-feature=+crt-static", "-C", "link-arg=-s", "-C", "lin
[target.armv7-unknown-linux-musleabihf] [target.armv7-unknown-linux-musleabihf]
rustflags = ["-C", "target-feature=+crt-static", "-C", "link-arg=-s", "-C", "link-arg=-lc", "-C", "link-arg=-lgcc"] rustflags = ["-C", "target-feature=+crt-static", "-C", "link-arg=-s", "-C", "link-arg=-lc", "-C", "link-arg=-lgcc"]
[profile.dev.build-override]
opt-level = 3

View File

@@ -7,21 +7,24 @@ on:
- 'v*' - 'v*'
pull_request: pull_request:
env:
CARGO_INCREMENTAL: 0
jobs: jobs:
tests: tests:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- -
name: Checkout name: Checkout
uses: actions/checkout@v2 uses: actions/checkout@v4
- -
name: Install Nix name: Install Nix
uses: cachix/install-nix-action@v20 uses: cachix/install-nix-action@v27
with: with:
nix_path: nixpkgs=channel:nixos-22.11 nix_path: nixpkgs=channel:nixos-24.05
- -
name: Cargo cache name: Cargo cache
uses: actions/cache@v3 uses: actions/cache@v4
with: with:
path: | path: |
~/.cargo/bin/ ~/.cargo/bin/
@@ -47,15 +50,15 @@ jobs:
steps: steps:
- -
name: Checkout name: Checkout
uses: actions/checkout@v2 uses: actions/checkout@v4
- -
name: Install Nix name: Install Nix
uses: cachix/install-nix-action@v20 uses: cachix/install-nix-action@v27
with: with:
nix_path: nixpkgs=channel:nixos-22.11 nix_path: nixpkgs=channel:nixos-24.05
- -
name: Cargo cache name: Cargo cache
uses: actions/cache@v3 uses: actions/cache@v4
with: with:
path: | path: |
~/.cargo/bin/ ~/.cargo/bin/

1
.gitignore vendored
View File

@@ -3,6 +3,7 @@
!/chirpstack/.rpm !/chirpstack/.rpm
!/.cargo !/.cargo
!/.env !/.env
!.npmignore
# Log files # Log files
*.log *.log

2031
Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,22 +1,15 @@
[workspace] [workspace]
resolver = "2" resolver = "2"
members = [ members = [
"chirpstack", "chirpstack",
"chirpstack-integration", "chirpstack-integration",
"lrwn", "lrwn",
"lrwn-filters", "lrwn-filters",
"backend", "backend",
"api/rust", "api/rust",
] ]
[profile.release] [profile.release]
opt-level = 'z' opt-level = 'z'
lto = true lto = true
codegen-units = 1 codegen-units = 1
[patch.crates-io]
# Remove if diesel > 2.1.4
diesel = { git = "https://github.com/diesel-rs/diesel.git", rev = "566dcccc6df6adb6ceddef8df5e1806e2a065c40" }
# Remove if diesel-async > 0.4.1
diesel-async = { git = "https://github.com/weiznich/diesel_async.git", rev = "017ebe2fb7a2709ab5db92148dea5ce812a35e09" }

View File

@@ -8,25 +8,26 @@ dist:
# Install dev dependencies # Install dev dependencies
dev-dependencies: dev-dependencies:
cargo install cross --version 0.2.5 cargo install cross --version 0.2.5
cargo install diesel_cli --version 2.1.0 --no-default-features --features postgres cargo install diesel_cli --version 2.2.1 --no-default-features --features postgres
cargo install cargo-deb --version 1.43.1 cargo install cargo-deb --version 1.43.1
cargo install cargo-generate-rpm --version 0.12.1 cargo install cargo-generate-rpm --version 0.12.1
# Set the versions # Set the versions
version: version:
test -n "$(VERSION)" test -n "$(VERSION)"
sed -i 's/^version.*/version = "$(VERSION)"/g' ./chirpstack/Cargo.toml sed -i 's/^ version.*/ version = "$(VERSION)"/g' ./chirpstack/Cargo.toml
sed -i 's/^version.*/version = "$(VERSION)"/g' ./backend/Cargo.toml sed -i 's/^ version.*/ version = "$(VERSION)"/g' ./backend/Cargo.toml
sed -i 's/^version.*/version = "$(VERSION)"/g' ./lrwn/Cargo.toml sed -i 's/^ version.*/ version = "$(VERSION)"/g' ./lrwn/Cargo.toml
sed -i 's/^version.*/version = "$(VERSION)"/g' ./lrwn-filters/Cargo.toml sed -i 's/^ version.*/ version = "$(VERSION)"/g' ./lrwn-filters/Cargo.toml
sed -i 's/^version.*/version = "$(VERSION)"/g' ./chirpstack-integration/Cargo.toml sed -i 's/^ version.*/ version = "$(VERSION)"/g' ./chirpstack-integration/Cargo.toml
sed -i 's/"version.*/"version": "$(VERSION)",/g' ./ui/package.json sed -i 's/"version.*/"version": "$(VERSION)",/g' ./ui/package.json
sed -i 's/"version.*/"version": "$(VERSION)",/g' ./api/grpc-web/package.json sed -i 's/"version.*/"version": "$(VERSION)",/g' ./api/grpc-web/package.json
sed -i 's/"version.*/"version": "$(VERSION)",/g' ./api/js/package.json sed -i 's/"version.*/"version": "$(VERSION)",/g' ./api/js/package.json
sed -i 's/version.*/version = "$(VERSION)",/g' ./api/python/src/setup.py sed -i 's/version.*/version = "$(VERSION)",/g' ./api/python/src/setup.py
sed -i 's/^version.*/version = "$(VERSION)"/g' ./api/rust/Cargo.toml sed -i 's/^ version.*/ version = "$(VERSION)"/g' ./api/rust/Cargo.toml
sed -i 's/^version.*/version = "$(VERSION)"/g' ./api/java/build.gradle.kts sed -i 's/^version.*/version = "$(VERSION)"/g' ./api/java/build.gradle.kts
sed -i 's/^version.*/version = "$(VERSION)"/g' ./api/kotlin/build.gradle.kts sed -i 's/^version.*/version = "$(VERSION)"/g' ./api/kotlin/build.gradle.kts
sed -i 's/"version.*/"version": "$(VERSION)",/g' ./api/php/composer.json
cd api && make cd api && make
make build-ui make build-ui

View File

@@ -3,7 +3,7 @@ FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build
ENV PROJECT_PATH=/chirpstack/api ENV PROJECT_PATH=/chirpstack/api
RUN apt update && apt install -y make git RUN apt update && apt install -y make git
RUN git clone --depth=1 --branch=master https://github.com/googleapis/googleapis.git /googleapis RUN git clone --depth=1 https://github.com/googleapis/googleapis.git /googleapis
RUN mkdir -p /googleproto/google/api/ RUN mkdir -p /googleproto/google/api/
RUN mv /googleapis/google/api/http.proto /googleproto/google/api/ && mv /googleapis/google/api/annotations.proto /googleproto/google/api/ RUN mv /googleapis/google/api/http.proto /googleproto/google/api/ && mv /googleapis/google/api/annotations.proto /googleproto/google/api/
RUN rm -rf /googleapis RUN rm -rf /googleapis

2
api/Dockerfile-md vendored
View File

@@ -3,7 +3,7 @@ FROM golang:1.19.3-alpine
ENV PROJECT_PATH=/chirpstack/api ENV PROJECT_PATH=/chirpstack/api
RUN apk add --no-cache make git bash protobuf protobuf-dev RUN apk add --no-cache make git bash protobuf protobuf-dev
RUN git clone https://github.com/googleapis/googleapis.git /googleapis RUN git clone --depth=1 https://github.com/googleapis/googleapis.git /googleapis
RUN mkdir -p $PROJECT_PATH RUN mkdir -p $PROJECT_PATH
WORKDIR $PROJECT_PATH WORKDIR $PROJECT_PATH

9
api/Dockerfile-php vendored Normal file
View File

@@ -0,0 +1,9 @@
FROM php:8.1-bookworm
RUN apt update -y
RUN apt install -y make protobuf-compiler protobuf-compiler-grpc
ENV PROJECT_PATH=/chirpstack/api
RUN mkdir -p PROJECT_PATH
WORKDIR $PROJECT_PATH

View File

@@ -2,8 +2,8 @@ FROM python:3.11.0
ENV PROJECT_PATH=/chirpstack/api ENV PROJECT_PATH=/chirpstack/api
RUN git clone https://github.com/protocolbuffers/protobuf.git /protobuf RUN git clone --depth=1 https://github.com/protocolbuffers/protobuf.git /protobuf
RUN git clone https://github.com/googleapis/googleapis.git /googleapis RUN git clone --depth=1 https://github.com/googleapis/googleapis.git /googleapis
RUN mkdir -p PROJECT_PATH RUN mkdir -p PROJECT_PATH
WORKDIR $PROJECT_PATH WORKDIR $PROJECT_PATH

7
api/Makefile vendored
View File

@@ -1,6 +1,6 @@
.PHONY: rust grpc-web go js python md java kotlin csharp .PHONY: rust grpc-web go js python md java kotlin csharp php
all: rust grpc-web go js python md java kotlin csharp all: rust grpc-web go js python md java kotlin csharp php
rust: rust:
cd rust && make cd rust && make
@@ -28,3 +28,6 @@ kotlin:
csharp: csharp:
docker compose run --rm chirpstack-csharp docker compose run --rm chirpstack-csharp
php:
docker compose run --rm chirpstack-api-php

View File

@@ -42,3 +42,10 @@ services:
command: bash -c "cd csharp && make all" command: bash -c "cd csharp && make all"
volumes: volumes:
- ./:/chirpstack/api - ./:/chirpstack/api
chirpstack-api-php:
build:
context: .
dockerfile: Dockerfile-php
command: bash -c "cd php && make all"
volumes:
- ./:/chirpstack/api

View File

@@ -1,6 +1,6 @@
// Code generated by protoc-gen-go. DO NOT EDIT. // Code generated by protoc-gen-go. DO NOT EDIT.
// versions: // versions:
// protoc-gen-go v1.31.0 // protoc-gen-go v1.34.1
// protoc v4.24.4 // protoc v4.24.4
// source: api/application.proto // source: api/application.proto
@@ -5622,14 +5622,17 @@ var file_api_application_proto_rawDesc = []byte{
0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69,
0x64, 0x7d, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x64, 0x7d, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f,
0x6d, 0x71, 0x74, 0x74, 0x2f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x6d, 0x71, 0x74, 0x74, 0x2f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65,
0x42, 0x68, 0x0a, 0x11, 0x69, 0x6f, 0x2e, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x42, 0x96, 0x01, 0x0a, 0x11, 0x69, 0x6f, 0x2e, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61,
0x6b, 0x2e, 0x61, 0x70, 0x69, 0x42, 0x10, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x63, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x42, 0x10, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74,
0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2e, 0x67, 0x69, 0x74, 0x68,
0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63,
0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6b, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x61, 0x70, 0x69,
0x67, 0x6f, 0x2f, 0x76, 0x34, 0x2f, 0x61, 0x70, 0x69, 0xaa, 0x02, 0x0e, 0x43, 0x68, 0x69, 0x72, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x34, 0x2f, 0x61, 0x70, 0x69, 0xaa, 0x02, 0x0e, 0x43, 0x68, 0x69,
0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x41, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x41, 0x70, 0x69, 0xca, 0x02, 0x0e, 0x43, 0x68,
0x6f, 0x33, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5c, 0x41, 0x70, 0x69, 0xe2, 0x02, 0x1a, 0x47,
0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5c, 0x43, 0x68, 0x69, 0x72, 0x70,
0x73, 0x74, 0x61, 0x63, 0x6b, 0x5c, 0x41, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f,
0x33,
} }
var ( var (

View File

@@ -1,6 +1,6 @@
// Code generated by protoc-gen-go. DO NOT EDIT. // Code generated by protoc-gen-go. DO NOT EDIT.
// versions: // versions:
// protoc-gen-go v1.31.0 // protoc-gen-go v1.34.1
// protoc v4.24.4 // protoc v4.24.4
// source: api/device.proto // source: api/device.proto
@@ -1116,6 +1116,8 @@ type DeviceActivation struct {
// Application session key (HEX encoded). // Application session key (HEX encoded).
AppSKey string `protobuf:"bytes,3,opt,name=app_s_key,json=appSKey,proto3" json:"app_s_key,omitempty"` AppSKey string `protobuf:"bytes,3,opt,name=app_s_key,json=appSKey,proto3" json:"app_s_key,omitempty"`
// Network session encryption key (HEX encoded). // Network session encryption key (HEX encoded).
// Note: For ABP in LoRaWAN 1.0.x, use this, the serving and the forwarding
// network session integrity key fields with the LoRaWAN 1.0.x 'NwkSKey`!
NwkSEncKey string `protobuf:"bytes,4,opt,name=nwk_s_enc_key,json=nwkSEncKey,proto3" json:"nwk_s_enc_key,omitempty"` NwkSEncKey string `protobuf:"bytes,4,opt,name=nwk_s_enc_key,json=nwkSEncKey,proto3" json:"nwk_s_enc_key,omitempty"`
// Serving network session integrity key (HEX encoded). // Serving network session integrity key (HEX encoded).
SNwkSIntKey string `protobuf:"bytes,8,opt,name=s_nwk_s_int_key,json=sNwkSIntKey,proto3" json:"s_nwk_s_int_key,omitempty"` SNwkSIntKey string `protobuf:"bytes,8,opt,name=s_nwk_s_int_key,json=sNwkSIntKey,proto3" json:"s_nwk_s_int_key,omitempty"`
@@ -2888,13 +2890,16 @@ var file_api_device_proto_rawDesc = []byte{
0xe4, 0x93, 0x02, 0x2f, 0x3a, 0x01, 0x2a, 0x22, 0x2a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0xe4, 0x93, 0x02, 0x2f, 0x3a, 0x01, 0x2a, 0x22, 0x2a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65,
0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x64, 0x65, 0x76, 0x5f, 0x65, 0x75, 0x69, 0x7d, 0x2f, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x64, 0x65, 0x76, 0x5f, 0x65, 0x75, 0x69, 0x7d, 0x2f,
0x67, 0x65, 0x74, 0x2d, 0x6e, 0x65, 0x78, 0x74, 0x2d, 0x66, 0x2d, 0x63, 0x6e, 0x74, 0x2d, 0x64, 0x67, 0x65, 0x74, 0x2d, 0x6e, 0x65, 0x78, 0x74, 0x2d, 0x66, 0x2d, 0x63, 0x6e, 0x74, 0x2d, 0x64,
0x6f, 0x77, 0x6e, 0x42, 0x63, 0x0a, 0x11, 0x69, 0x6f, 0x2e, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x6f, 0x77, 0x6e, 0x42, 0x91, 0x01, 0x0a, 0x11, 0x69, 0x6f, 0x2e, 0x63, 0x68, 0x69, 0x72, 0x70,
0x74, 0x61, 0x63, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x42, 0x0b, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x42, 0x0b, 0x44, 0x65, 0x76, 0x69, 0x63,
0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62,
0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f,
0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67,
0x2f, 0x76, 0x34, 0x2f, 0x61, 0x70, 0x69, 0xaa, 0x02, 0x0e, 0x43, 0x68, 0x69, 0x72, 0x70, 0x73, 0x6f, 0x2f, 0x76, 0x34, 0x2f, 0x61, 0x70, 0x69, 0xaa, 0x02, 0x0e, 0x43, 0x68, 0x69, 0x72, 0x70,
0x74, 0x61, 0x63, 0x6b, 0x2e, 0x41, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x41, 0x70, 0x69, 0xca, 0x02, 0x0e, 0x43, 0x68, 0x69, 0x72,
0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5c, 0x41, 0x70, 0x69, 0xe2, 0x02, 0x1a, 0x47, 0x50, 0x42,
0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5c, 0x43, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74,
0x61, 0x63, 0x6b, 0x5c, 0x41, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
} }
var ( var (

View File

@@ -1,6 +1,6 @@
// Code generated by protoc-gen-go. DO NOT EDIT. // Code generated by protoc-gen-go. DO NOT EDIT.
// versions: // versions:
// protoc-gen-go v1.31.0 // protoc-gen-go v1.34.1
// protoc v4.24.4 // protoc v4.24.4
// source: api/device_profile.proto // source: api/device_profile.proto
@@ -544,6 +544,14 @@ type DeviceProfile struct {
// //
// If set to true, it means that the device is allowed to use roaming. // If set to true, it means that the device is allowed to use roaming.
AllowRoaming bool `protobuf:"varint,52,opt,name=allow_roaming,json=allowRoaming,proto3" json:"allow_roaming,omitempty"` AllowRoaming bool `protobuf:"varint,52,opt,name=allow_roaming,json=allowRoaming,proto3" json:"allow_roaming,omitempty"`
// RX1 Delay.
//
// This makes it possible to override the system RX1 Delay. Please note that
// this values only has effect in case it is higher than the system value.
// In other words, it can be used to increase the RX1 Delay but not to decrease
// it.
// Valid options are 1 - 15 (0 = always use system RX1 Delay).
Rx1Delay uint32 `protobuf:"varint,53,opt,name=rx1_delay,json=rx1Delay,proto3" json:"rx1_delay,omitempty"`
} }
func (x *DeviceProfile) Reset() { func (x *DeviceProfile) Reset() {
@@ -942,6 +950,13 @@ func (x *DeviceProfile) GetAllowRoaming() bool {
return false return false
} }
func (x *DeviceProfile) GetRx1Delay() uint32 {
if x != nil {
return x.Rx1Delay
}
return 0
}
type Measurement struct { type Measurement struct {
state protoimpl.MessageState state protoimpl.MessageState
sizeCache protoimpl.SizeCache sizeCache protoimpl.SizeCache
@@ -1692,7 +1707,7 @@ var file_api_device_profile_proto_rawDesc = []byte{
0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f,
0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x13, 0x63, 0x6f, 0x6d, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x13, 0x63, 0x6f, 0x6d,
0x6d, 0x6f, 0x6e, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x6d, 0x6f, 0x6e, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
0x22, 0xd3, 0x16, 0x0a, 0x0d, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x22, 0xf0, 0x16, 0x0a, 0x0d, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69,
0x6c, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x6c, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02,
0x69, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x69, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18,
0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x49, 0x64, 0x12,
@@ -1864,187 +1879,192 @@ var file_api_device_profile_proto_rawDesc = []byte{
0x76, 0x65, 0x72, 0x61, 0x6c, 0x6c, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x76, 0x65, 0x72, 0x61, 0x6c, 0x6c, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x42, 0x75, 0x63, 0x6b, 0x65,
0x74, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x72, 0x74, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x72,
0x6f, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x18, 0x34, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x61, 0x6c, 0x6f, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x18, 0x34, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x61, 0x6c,
0x6c, 0x6f, 0x77, 0x52, 0x6f, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x1a, 0x37, 0x0a, 0x09, 0x54, 0x61, 0x6c, 0x6f, 0x77, 0x52, 0x6f, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x78,
0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x31, 0x5f, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x18, 0x35, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x72,
0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x78, 0x31, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x1a, 0x37, 0x0a, 0x09, 0x54, 0x61, 0x67, 0x73, 0x45,
0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28,
0x02, 0x38, 0x01, 0x1a, 0x51, 0x0a, 0x11, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18,
0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01,
0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x26, 0x0a, 0x05, 0x76, 0x61, 0x1a, 0x51, 0x0a, 0x11, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73,
0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01,
0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x26, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x4b, 0x0a, 0x0b, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4d, 0x65, 0x61,
0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a,
0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x02, 0x38, 0x01, 0x22, 0x4b, 0x0a, 0x0b, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65,
0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4d, 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x4b, 0x69, 0x6e, 0x64, 0x52, 0x04, 0x6b, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x03,
0x69, 0x6e, 0x64, 0x22, 0xd2, 0x03, 0x0a, 0x15, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4d, 0x65, 0x61, 0x73, 0x75,
0x6f, 0x66, 0x69, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x0e, 0x0a, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x4b, 0x69, 0x6e, 0x64, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64,
0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x39, 0x0a, 0x22, 0xd2, 0x03, 0x0a, 0x15, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69,
0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64,
0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72,
0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a,
0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61,
0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64,
0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
0x64, 0x41, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65,
0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74,
0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0e, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
0x2e, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x12, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x18, 0x05,
0x33, 0x0a, 0x0b, 0x6d, 0x61, 0x63, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0e, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x52, 0x65,
0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x61, 0x67, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x12, 0x33, 0x0a, 0x0b,
0x63, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x6d, 0x61, 0x63, 0x56, 0x65, 0x72, 0x6d, 0x61, 0x63, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28,
0x73, 0x69, 0x6f, 0x6e, 0x12, 0x49, 0x0a, 0x13, 0x72, 0x65, 0x67, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x0e, 0x32, 0x12, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x61, 0x63, 0x56, 0x65,
0x6d, 0x73, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x6d, 0x61, 0x63, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f,
0x0e, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x67, 0x50, 0x61, 0x6e, 0x12, 0x49, 0x0a, 0x13, 0x72, 0x65, 0x67, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x5f,
0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x72, 0x65, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19,
0x67, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x67, 0x50, 0x61, 0x72, 0x61, 0x6d,
0x23, 0x0a, 0x0d, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x5f, 0x6f, 0x74, 0x61, 0x61, 0x73, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x72, 0x65, 0x67, 0x50, 0x61,
0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d,
0x4f, 0x74, 0x61, 0x61, 0x12, 0x28, 0x0a, 0x10, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x5f, 0x6f, 0x74, 0x61, 0x61, 0x18, 0x08, 0x20,
0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x62, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x4f, 0x74, 0x61,
0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x42, 0x12, 0x28, 0x61, 0x12, 0x28, 0x0a, 0x10, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x5f, 0x63, 0x6c,
0x0a, 0x10, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x61, 0x73, 0x73, 0x5f, 0x62, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x73, 0x75, 0x70,
0x5f, 0x63, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x42, 0x12, 0x28, 0x0a, 0x10, 0x73,
0x74, 0x73, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x43, 0x22, 0x57, 0x0a, 0x1a, 0x43, 0x72, 0x65, 0x61, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x63, 0x18,
0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x43,
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x0e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x6c, 0x61, 0x73, 0x73, 0x43, 0x22, 0x57, 0x0a, 0x1a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44,
0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12,
0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69,
0x6c, 0x65, 0x52, 0x0d, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c,
0x65, 0x22, 0x2d, 0x0a, 0x1b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63,
0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64,
0x22, 0x29, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f,
0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69,
0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0xcb, 0x01, 0x0a, 0x18,
0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65,
0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x0e, 0x64, 0x65, 0x76, 0x69,
0x63, 0x65, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
0x32, 0x12, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f,
0x66, 0x69, 0x6c, 0x65, 0x52, 0x0d, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66,
0x69, 0x6c, 0x65, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61,
0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74,
0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39,
0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01,
0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09,
0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x22, 0x57, 0x0a, 0x1a, 0x55, 0x70, 0x64,
0x61, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65,
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x0e, 0x64, 0x65, 0x76, 0x69, 0x63,
0x65, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
0x12, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66,
0x69, 0x6c, 0x65, 0x52, 0x0d, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69,
0x6c, 0x65, 0x22, 0x2c, 0x0a, 0x1a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69,
0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64,
0x22, 0x7e, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72,
0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a,
0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69,
0x6d, 0x69, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20,
0x01, 0x28, 0x0d, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73,
0x65, 0x61, 0x72, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x61,
0x72, 0x63, 0x68, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64,
0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x49, 0x64,
0x22, 0x71, 0x0a, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72,
0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f,
0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20,
0x01, 0x28, 0x0d, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12,
0x32, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32,
0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66,
0x69, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x06, 0x72, 0x65, 0x73,
0x75, 0x6c, 0x74, 0x22, 0x7c, 0x0a, 0x26, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63,
0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x41, 0x64, 0x72, 0x41, 0x6c, 0x67, 0x6f, 0x72,
0x69, 0x74, 0x68, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a,
0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01,
0x28, 0x0d, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x31,
0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19,
0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x64, 0x72, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68,
0x6d, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c,
0x74, 0x22, 0x3a, 0x0a, 0x14, 0x41, 0x64, 0x72, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68,
0x6d, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18,
0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d,
0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x2a, 0x31, 0x0a,
0x0c, 0x43, 0x6f, 0x64, 0x65, 0x63, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x08, 0x0a,
0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x43, 0x41, 0x59, 0x45, 0x4e,
0x4e, 0x45, 0x5f, 0x4c, 0x50, 0x50, 0x10, 0x01, 0x12, 0x06, 0x0a, 0x02, 0x4a, 0x53, 0x10, 0x02,
0x2a, 0x50, 0x0a, 0x0f, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x4b,
0x69, 0x6e, 0x64, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00,
0x12, 0x0b, 0x0a, 0x07, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x45, 0x52, 0x10, 0x01, 0x12, 0x0c, 0x0a,
0x08, 0x41, 0x42, 0x53, 0x4f, 0x4c, 0x55, 0x54, 0x45, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x47,
0x41, 0x55, 0x47, 0x45, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47,
0x10, 0x04, 0x2a, 0x55, 0x0a, 0x0e, 0x43, 0x61, 0x64, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x69,
0x63, 0x69, 0x74, 0x79, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x45, 0x43, 0x5f, 0x31, 0x10, 0x00, 0x12,
0x0a, 0x0a, 0x06, 0x4d, 0x53, 0x5f, 0x35, 0x30, 0x30, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x4d,
0x53, 0x5f, 0x32, 0x35, 0x30, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x4d, 0x53, 0x5f, 0x31, 0x30,
0x30, 0x10, 0x03, 0x12, 0x09, 0x0a, 0x05, 0x4d, 0x53, 0x5f, 0x35, 0x30, 0x10, 0x04, 0x12, 0x09,
0x0a, 0x05, 0x4d, 0x53, 0x5f, 0x32, 0x30, 0x10, 0x05, 0x2a, 0x61, 0x0a, 0x11, 0x53, 0x65, 0x63,
0x6f, 0x6e, 0x64, 0x43, 0x68, 0x41, 0x63, 0x6b, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x09,
0x0a, 0x05, 0x4b, 0x48, 0x5a, 0x5f, 0x30, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x4b, 0x48, 0x5a,
0x5f, 0x32, 0x30, 0x30, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x4b, 0x48, 0x5a, 0x5f, 0x34, 0x30,
0x30, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x4b, 0x48, 0x5a, 0x5f, 0x38, 0x30, 0x30, 0x10, 0x03,
0x12, 0x0c, 0x0a, 0x08, 0x4b, 0x48, 0x5a, 0x5f, 0x31, 0x36, 0x30, 0x30, 0x10, 0x04, 0x12, 0x0c,
0x0a, 0x08, 0x4b, 0x48, 0x5a, 0x5f, 0x33, 0x32, 0x30, 0x30, 0x10, 0x05, 0x2a, 0x6c, 0x0a, 0x13,
0x52, 0x65, 0x6c, 0x61, 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74,
0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x12, 0x44, 0x49, 0x53, 0x41, 0x42, 0x4c, 0x45, 0x5f, 0x52,
0x45, 0x4c, 0x41, 0x59, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x10, 0x00, 0x12, 0x15, 0x0a, 0x11, 0x45,
0x4e, 0x41, 0x42, 0x4c, 0x45, 0x5f, 0x52, 0x45, 0x4c, 0x41, 0x59, 0x5f, 0x4d, 0x4f, 0x44, 0x45,
0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x59, 0x4e, 0x41, 0x4d, 0x49, 0x43, 0x10, 0x02, 0x12,
0x19, 0x0a, 0x15, 0x45, 0x4e, 0x44, 0x5f, 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x43, 0x4f,
0x4e, 0x54, 0x52, 0x4f, 0x4c, 0x4c, 0x45, 0x44, 0x10, 0x03, 0x32, 0xb8, 0x05, 0x0a, 0x14, 0x44,
0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x65, 0x72, 0x76,
0x69, 0x63, 0x65, 0x12, 0x6c, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x1f, 0x2e,
0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65,
0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20,
0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63,
0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x3a, 0x01, 0x2a, 0x22, 0x14, 0x2f, 0x61, 0x70,
0x69, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65,
0x73, 0x12, 0x65, 0x0a, 0x03, 0x47, 0x65, 0x74, 0x12, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47,
0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52,
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74,
0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73,
0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x12, 0x19, 0x2f,
0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x66, 0x69,
0x6c, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x76, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61,
0x74, 0x65, 0x12, 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44,
0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75,
0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x0e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x70, 0x72,
0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x33, 0x82, 0xd3, 0xe4, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x70,
0x93, 0x02, 0x2d, 0x3a, 0x01, 0x2a, 0x1a, 0x28, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52,
0x69, 0x63, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2f, 0x7b, 0x64, 0x65, 0x0d, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x22, 0x2d,
0x76, 0x69, 0x63, 0x65, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x69, 0x64, 0x7d, 0x0a, 0x1b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72,
0x12, 0x64, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a,
0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x29, 0x0a,
0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x17, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c,
0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01,
0x70, 0x74, 0x79, 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x2a, 0x19, 0x2f, 0x61, 0x70, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0xcb, 0x01, 0x0a, 0x18, 0x47, 0x65, 0x74,
0x69, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73,
0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x65, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1e, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x0e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f,
0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e,
0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c,
0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x65, 0x52, 0x0d, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65,
0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x02,
0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x12, 0x14, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
0x76, 0x69, 0x63, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x85, 0x01, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70,
0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x64, 0x72, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75,
0x68, 0x6d, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32,
0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x2b, 0x2e, 0x61, 0x70, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64,
0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x22, 0x57, 0x0a, 0x1a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71,
0x75, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x0e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x70,
0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61,
0x70, 0x69, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65,
0x52, 0x0d, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x22,
0x2c, 0x0a, 0x1a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50,
0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a,
0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x7e, 0x0a,
0x19, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69,
0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69,
0x6d, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74,
0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d,
0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x61, 0x72,
0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68,
0x12, 0x1b, 0x0a, 0x09, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20,
0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x71, 0x0a,
0x1a, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69,
0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x74,
0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d,
0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x32, 0x0a, 0x06,
0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61,
0x70, 0x69, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65,
0x4c, 0x69, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74,
0x22, 0x7c, 0x0a, 0x26, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72,
0x6f, 0x66, 0x69, 0x6c, 0x65, 0x41, 0x64, 0x72, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68,
0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f,
0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52,
0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x31, 0x0a, 0x06, 0x72,
0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x70,
0x69, 0x2e, 0x41, 0x64, 0x72, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x4c, 0x69,
0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x3a,
0x0a, 0x14, 0x41, 0x64, 0x72, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x4c, 0x69,
0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,
0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02,
0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x2a, 0x31, 0x0a, 0x0c, 0x43, 0x6f,
0x64, 0x65, 0x63, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f,
0x4e, 0x45, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x43, 0x41, 0x59, 0x45, 0x4e, 0x4e, 0x45, 0x5f,
0x4c, 0x50, 0x50, 0x10, 0x01, 0x12, 0x06, 0x0a, 0x02, 0x4a, 0x53, 0x10, 0x02, 0x2a, 0x50, 0x0a,
0x0f, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x4b, 0x69, 0x6e, 0x64,
0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0b, 0x0a,
0x07, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x45, 0x52, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x41, 0x42,
0x53, 0x4f, 0x4c, 0x55, 0x54, 0x45, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x47, 0x41, 0x55, 0x47,
0x45, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x04, 0x2a,
0x55, 0x0a, 0x0e, 0x43, 0x61, 0x64, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x69, 0x63, 0x69, 0x74,
0x79, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x45, 0x43, 0x5f, 0x31, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06,
0x4d, 0x53, 0x5f, 0x35, 0x30, 0x30, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x4d, 0x53, 0x5f, 0x32,
0x35, 0x30, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x4d, 0x53, 0x5f, 0x31, 0x30, 0x30, 0x10, 0x03,
0x12, 0x09, 0x0a, 0x05, 0x4d, 0x53, 0x5f, 0x35, 0x30, 0x10, 0x04, 0x12, 0x09, 0x0a, 0x05, 0x4d,
0x53, 0x5f, 0x32, 0x30, 0x10, 0x05, 0x2a, 0x61, 0x0a, 0x11, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64,
0x43, 0x68, 0x41, 0x63, 0x6b, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x09, 0x0a, 0x05, 0x4b,
0x48, 0x5a, 0x5f, 0x30, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x4b, 0x48, 0x5a, 0x5f, 0x32, 0x30,
0x30, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x4b, 0x48, 0x5a, 0x5f, 0x34, 0x30, 0x30, 0x10, 0x02,
0x12, 0x0b, 0x0a, 0x07, 0x4b, 0x48, 0x5a, 0x5f, 0x38, 0x30, 0x30, 0x10, 0x03, 0x12, 0x0c, 0x0a,
0x08, 0x4b, 0x48, 0x5a, 0x5f, 0x31, 0x36, 0x30, 0x30, 0x10, 0x04, 0x12, 0x0c, 0x0a, 0x08, 0x4b,
0x48, 0x5a, 0x5f, 0x33, 0x32, 0x30, 0x30, 0x10, 0x05, 0x2a, 0x6c, 0x0a, 0x13, 0x52, 0x65, 0x6c,
0x61, 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e,
0x12, 0x16, 0x0a, 0x12, 0x44, 0x49, 0x53, 0x41, 0x42, 0x4c, 0x45, 0x5f, 0x52, 0x45, 0x4c, 0x41,
0x59, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x10, 0x00, 0x12, 0x15, 0x0a, 0x11, 0x45, 0x4e, 0x41, 0x42,
0x4c, 0x45, 0x5f, 0x52, 0x45, 0x4c, 0x41, 0x59, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x10, 0x01, 0x12,
0x0b, 0x0a, 0x07, 0x44, 0x59, 0x4e, 0x41, 0x4d, 0x49, 0x43, 0x10, 0x02, 0x12, 0x19, 0x0a, 0x15,
0x45, 0x4e, 0x44, 0x5f, 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x52,
0x4f, 0x4c, 0x4c, 0x45, 0x44, 0x10, 0x03, 0x32, 0xb8, 0x05, 0x0a, 0x14, 0x44, 0x65, 0x76, 0x69,
0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
0x12, 0x6c, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x1f, 0x2e, 0x61, 0x70, 0x69,
0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f,
0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x61, 0x70,
0x69, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72,
0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82,
0xd3, 0xe4, 0x93, 0x02, 0x19, 0x3a, 0x01, 0x2a, 0x22, 0x14, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64,
0x65, 0x76, 0x69, 0x63, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x65,
0x0a, 0x03, 0x47, 0x65, 0x74, 0x12, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x44,
0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75,
0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76,
0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
0x73, 0x65, 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x12, 0x19, 0x2f, 0x61, 0x70, 0x69,
0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73,
0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x76, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12,
0x1f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69,
0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x33, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d,
0x3a, 0x01, 0x2a, 0x1a, 0x28, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65,
0x2d, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2f, 0x7b, 0x64, 0x65, 0x76, 0x69, 0x63,
0x65, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x69, 0x64, 0x7d, 0x12, 0x64, 0x0a,
0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65,
0x6c, 0x65, 0x74, 0x65, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c,
0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79,
0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x2a, 0x19, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64,
0x65, 0x76, 0x69, 0x63, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2f, 0x7b,
0x69, 0x64, 0x7d, 0x12, 0x65, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1e, 0x2e, 0x61, 0x70,
0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66,
0x69, 0x6c, 0x65, 0x41, 0x64, 0x72, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x73, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x61, 0x70,
0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66,
0x12, 0x23, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2d, 0x70, 0x72, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x82, 0xd3,
0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x2f, 0x61, 0x64, 0x72, 0x2d, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0xe4, 0x93, 0x02, 0x16, 0x12, 0x14, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63,
0x69, 0x74, 0x68, 0x6d, 0x73, 0x42, 0x6a, 0x0a, 0x11, 0x69, 0x6f, 0x2e, 0x63, 0x68, 0x69, 0x72, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x85, 0x01, 0x0a, 0x11, 0x4c,
0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x42, 0x12, 0x44, 0x65, 0x76, 0x69, 0x69, 0x73, 0x74, 0x41, 0x64, 0x72, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x73,
0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
0x5a, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x68, 0x69, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x2b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c,
0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x69, 0x73, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65,
0x63, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x34, 0x2f, 0x61, 0x70, 0x69, 0x41, 0x64, 0x72, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x73, 0x52, 0x65, 0x73,
0xaa, 0x02, 0x0e, 0x43, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x41, 0x70, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x12, 0x23, 0x2f,
0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x66, 0x69,
0x6c, 0x65, 0x73, 0x2f, 0x61, 0x64, 0x72, 0x2d, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68,
0x6d, 0x73, 0x42, 0x98, 0x01, 0x0a, 0x11, 0x69, 0x6f, 0x2e, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73,
0x74, 0x61, 0x63, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x42, 0x12, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65,
0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2e,
0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70,
0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b,
0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x34, 0x2f, 0x61, 0x70, 0x69, 0xaa, 0x02,
0x0e, 0x43, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x41, 0x70, 0x69, 0xca,
0x02, 0x0e, 0x43, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5c, 0x41, 0x70, 0x69,
0xe2, 0x02, 0x1a, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5c, 0x43,
0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5c, 0x41, 0x70, 0x69, 0x62, 0x06, 0x70,
0x72, 0x6f, 0x74, 0x6f, 0x33,
} }
var ( var (

View File

@@ -1,6 +1,6 @@
// Code generated by protoc-gen-go. DO NOT EDIT. // Code generated by protoc-gen-go. DO NOT EDIT.
// versions: // versions:
// protoc-gen-go v1.31.0 // protoc-gen-go v1.34.1
// protoc v4.24.4 // protoc v4.24.4
// source: api/device_profile_template.proto // source: api/device_profile_template.proto
@@ -1088,14 +1088,17 @@ var file_api_device_profile_template_proto_rawDesc = []byte{
0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x25, 0x82, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x25, 0x82,
0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x12, 0x1d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76, 0x69, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x12, 0x1d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x65, 0x76, 0x69,
0x63, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2d, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x63, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2d, 0x74, 0x65, 0x6d, 0x70, 0x6c,
0x61, 0x74, 0x65, 0x73, 0x42, 0x72, 0x0a, 0x11, 0x69, 0x6f, 0x2e, 0x63, 0x68, 0x69, 0x72, 0x70, 0x61, 0x74, 0x65, 0x73, 0x42, 0xa0, 0x01, 0x0a, 0x11, 0x69, 0x6f, 0x2e, 0x63, 0x68, 0x69, 0x72,
0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x42, 0x1a, 0x44, 0x65, 0x76, 0x69, 0x63, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x42, 0x1a, 0x44, 0x65, 0x76, 0x69,
0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74,
0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62,
0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x63, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f,
0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67,
0x2f, 0x76, 0x34, 0x2f, 0x61, 0x70, 0x69, 0xaa, 0x02, 0x0e, 0x43, 0x68, 0x69, 0x72, 0x70, 0x73, 0x6f, 0x2f, 0x76, 0x34, 0x2f, 0x61, 0x70, 0x69, 0xaa, 0x02, 0x0e, 0x43, 0x68, 0x69, 0x72, 0x70,
0x74, 0x61, 0x63, 0x6b, 0x2e, 0x41, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x41, 0x70, 0x69, 0xca, 0x02, 0x0e, 0x43, 0x68, 0x69, 0x72,
0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5c, 0x41, 0x70, 0x69, 0xe2, 0x02, 0x1a, 0x47, 0x50, 0x42,
0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5c, 0x43, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74,
0x61, 0x63, 0x6b, 0x5c, 0x41, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
} }
var ( var (

1232
api/go/api/gateway.pb.go vendored

File diff suppressed because it is too large Load Diff

View File

@@ -27,6 +27,11 @@ const (
GatewayService_List_FullMethodName = "/api.GatewayService/List" GatewayService_List_FullMethodName = "/api.GatewayService/List"
GatewayService_GenerateClientCertificate_FullMethodName = "/api.GatewayService/GenerateClientCertificate" GatewayService_GenerateClientCertificate_FullMethodName = "/api.GatewayService/GenerateClientCertificate"
GatewayService_GetMetrics_FullMethodName = "/api.GatewayService/GetMetrics" GatewayService_GetMetrics_FullMethodName = "/api.GatewayService/GetMetrics"
GatewayService_GetDutyCycleMetrics_FullMethodName = "/api.GatewayService/GetDutyCycleMetrics"
GatewayService_GetRelayGateway_FullMethodName = "/api.GatewayService/GetRelayGateway"
GatewayService_ListRelayGateways_FullMethodName = "/api.GatewayService/ListRelayGateways"
GatewayService_UpdateRelayGateway_FullMethodName = "/api.GatewayService/UpdateRelayGateway"
GatewayService_DeleteRelayGateway_FullMethodName = "/api.GatewayService/DeleteRelayGateway"
) )
// GatewayServiceClient is the client API for GatewayService service. // GatewayServiceClient is the client API for GatewayService service.
@@ -47,6 +52,17 @@ type GatewayServiceClient interface {
GenerateClientCertificate(ctx context.Context, in *GenerateGatewayClientCertificateRequest, opts ...grpc.CallOption) (*GenerateGatewayClientCertificateResponse, error) GenerateClientCertificate(ctx context.Context, in *GenerateGatewayClientCertificateRequest, opts ...grpc.CallOption) (*GenerateGatewayClientCertificateResponse, error)
// GetMetrics returns the gateway metrics. // GetMetrics returns the gateway metrics.
GetMetrics(ctx context.Context, in *GetGatewayMetricsRequest, opts ...grpc.CallOption) (*GetGatewayMetricsResponse, error) GetMetrics(ctx context.Context, in *GetGatewayMetricsRequest, opts ...grpc.CallOption) (*GetGatewayMetricsResponse, error)
// GetDutyCycleMetrics returns the duty-cycle metrics.
// Note that only the last 2 hours of data are stored. Currently only per minute aggregation is available.
GetDutyCycleMetrics(ctx context.Context, in *GetGatewayDutyCycleMetricsRequest, opts ...grpc.CallOption) (*GetGatewayDutyCycleMetricsResponse, error)
// Get the given Relay Gateway.
GetRelayGateway(ctx context.Context, in *GetRelayGatewayRequest, opts ...grpc.CallOption) (*GetRelayGatewayResponse, error)
// List the detected Relay Gateways.
ListRelayGateways(ctx context.Context, in *ListRelayGatewaysRequest, opts ...grpc.CallOption) (*ListRelayGatewaysResponse, error)
// Update the given Relay Gateway.
UpdateRelayGateway(ctx context.Context, in *UpdateRelayGatewayRequest, opts ...grpc.CallOption) (*emptypb.Empty, error)
// Delete the given Relay Gateway.
DeleteRelayGateway(ctx context.Context, in *DeleteRelayGatewayRequest, opts ...grpc.CallOption) (*emptypb.Empty, error)
} }
type gatewayServiceClient struct { type gatewayServiceClient struct {
@@ -120,6 +136,51 @@ func (c *gatewayServiceClient) GetMetrics(ctx context.Context, in *GetGatewayMet
return out, nil return out, nil
} }
func (c *gatewayServiceClient) GetDutyCycleMetrics(ctx context.Context, in *GetGatewayDutyCycleMetricsRequest, opts ...grpc.CallOption) (*GetGatewayDutyCycleMetricsResponse, error) {
out := new(GetGatewayDutyCycleMetricsResponse)
err := c.cc.Invoke(ctx, GatewayService_GetDutyCycleMetrics_FullMethodName, in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *gatewayServiceClient) GetRelayGateway(ctx context.Context, in *GetRelayGatewayRequest, opts ...grpc.CallOption) (*GetRelayGatewayResponse, error) {
out := new(GetRelayGatewayResponse)
err := c.cc.Invoke(ctx, GatewayService_GetRelayGateway_FullMethodName, in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *gatewayServiceClient) ListRelayGateways(ctx context.Context, in *ListRelayGatewaysRequest, opts ...grpc.CallOption) (*ListRelayGatewaysResponse, error) {
out := new(ListRelayGatewaysResponse)
err := c.cc.Invoke(ctx, GatewayService_ListRelayGateways_FullMethodName, in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *gatewayServiceClient) UpdateRelayGateway(ctx context.Context, in *UpdateRelayGatewayRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) {
out := new(emptypb.Empty)
err := c.cc.Invoke(ctx, GatewayService_UpdateRelayGateway_FullMethodName, in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *gatewayServiceClient) DeleteRelayGateway(ctx context.Context, in *DeleteRelayGatewayRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) {
out := new(emptypb.Empty)
err := c.cc.Invoke(ctx, GatewayService_DeleteRelayGateway_FullMethodName, in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
// GatewayServiceServer is the server API for GatewayService service. // GatewayServiceServer is the server API for GatewayService service.
// All implementations must embed UnimplementedGatewayServiceServer // All implementations must embed UnimplementedGatewayServiceServer
// for forward compatibility // for forward compatibility
@@ -138,6 +199,17 @@ type GatewayServiceServer interface {
GenerateClientCertificate(context.Context, *GenerateGatewayClientCertificateRequest) (*GenerateGatewayClientCertificateResponse, error) GenerateClientCertificate(context.Context, *GenerateGatewayClientCertificateRequest) (*GenerateGatewayClientCertificateResponse, error)
// GetMetrics returns the gateway metrics. // GetMetrics returns the gateway metrics.
GetMetrics(context.Context, *GetGatewayMetricsRequest) (*GetGatewayMetricsResponse, error) GetMetrics(context.Context, *GetGatewayMetricsRequest) (*GetGatewayMetricsResponse, error)
// GetDutyCycleMetrics returns the duty-cycle metrics.
// Note that only the last 2 hours of data are stored. Currently only per minute aggregation is available.
GetDutyCycleMetrics(context.Context, *GetGatewayDutyCycleMetricsRequest) (*GetGatewayDutyCycleMetricsResponse, error)
// Get the given Relay Gateway.
GetRelayGateway(context.Context, *GetRelayGatewayRequest) (*GetRelayGatewayResponse, error)
// List the detected Relay Gateways.
ListRelayGateways(context.Context, *ListRelayGatewaysRequest) (*ListRelayGatewaysResponse, error)
// Update the given Relay Gateway.
UpdateRelayGateway(context.Context, *UpdateRelayGatewayRequest) (*emptypb.Empty, error)
// Delete the given Relay Gateway.
DeleteRelayGateway(context.Context, *DeleteRelayGatewayRequest) (*emptypb.Empty, error)
mustEmbedUnimplementedGatewayServiceServer() mustEmbedUnimplementedGatewayServiceServer()
} }
@@ -166,6 +238,21 @@ func (UnimplementedGatewayServiceServer) GenerateClientCertificate(context.Conte
func (UnimplementedGatewayServiceServer) GetMetrics(context.Context, *GetGatewayMetricsRequest) (*GetGatewayMetricsResponse, error) { func (UnimplementedGatewayServiceServer) GetMetrics(context.Context, *GetGatewayMetricsRequest) (*GetGatewayMetricsResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetMetrics not implemented") return nil, status.Errorf(codes.Unimplemented, "method GetMetrics not implemented")
} }
func (UnimplementedGatewayServiceServer) GetDutyCycleMetrics(context.Context, *GetGatewayDutyCycleMetricsRequest) (*GetGatewayDutyCycleMetricsResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetDutyCycleMetrics not implemented")
}
func (UnimplementedGatewayServiceServer) GetRelayGateway(context.Context, *GetRelayGatewayRequest) (*GetRelayGatewayResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetRelayGateway not implemented")
}
func (UnimplementedGatewayServiceServer) ListRelayGateways(context.Context, *ListRelayGatewaysRequest) (*ListRelayGatewaysResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method ListRelayGateways not implemented")
}
func (UnimplementedGatewayServiceServer) UpdateRelayGateway(context.Context, *UpdateRelayGatewayRequest) (*emptypb.Empty, error) {
return nil, status.Errorf(codes.Unimplemented, "method UpdateRelayGateway not implemented")
}
func (UnimplementedGatewayServiceServer) DeleteRelayGateway(context.Context, *DeleteRelayGatewayRequest) (*emptypb.Empty, error) {
return nil, status.Errorf(codes.Unimplemented, "method DeleteRelayGateway not implemented")
}
func (UnimplementedGatewayServiceServer) mustEmbedUnimplementedGatewayServiceServer() {} func (UnimplementedGatewayServiceServer) mustEmbedUnimplementedGatewayServiceServer() {}
// UnsafeGatewayServiceServer may be embedded to opt out of forward compatibility for this service. // UnsafeGatewayServiceServer may be embedded to opt out of forward compatibility for this service.
@@ -305,6 +392,96 @@ func _GatewayService_GetMetrics_Handler(srv interface{}, ctx context.Context, de
return interceptor(ctx, in, info, handler) return interceptor(ctx, in, info, handler)
} }
func _GatewayService_GetDutyCycleMetrics_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(GetGatewayDutyCycleMetricsRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(GatewayServiceServer).GetDutyCycleMetrics(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: GatewayService_GetDutyCycleMetrics_FullMethodName,
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(GatewayServiceServer).GetDutyCycleMetrics(ctx, req.(*GetGatewayDutyCycleMetricsRequest))
}
return interceptor(ctx, in, info, handler)
}
func _GatewayService_GetRelayGateway_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(GetRelayGatewayRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(GatewayServiceServer).GetRelayGateway(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: GatewayService_GetRelayGateway_FullMethodName,
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(GatewayServiceServer).GetRelayGateway(ctx, req.(*GetRelayGatewayRequest))
}
return interceptor(ctx, in, info, handler)
}
func _GatewayService_ListRelayGateways_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(ListRelayGatewaysRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(GatewayServiceServer).ListRelayGateways(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: GatewayService_ListRelayGateways_FullMethodName,
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(GatewayServiceServer).ListRelayGateways(ctx, req.(*ListRelayGatewaysRequest))
}
return interceptor(ctx, in, info, handler)
}
func _GatewayService_UpdateRelayGateway_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(UpdateRelayGatewayRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(GatewayServiceServer).UpdateRelayGateway(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: GatewayService_UpdateRelayGateway_FullMethodName,
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(GatewayServiceServer).UpdateRelayGateway(ctx, req.(*UpdateRelayGatewayRequest))
}
return interceptor(ctx, in, info, handler)
}
func _GatewayService_DeleteRelayGateway_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(DeleteRelayGatewayRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(GatewayServiceServer).DeleteRelayGateway(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: GatewayService_DeleteRelayGateway_FullMethodName,
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(GatewayServiceServer).DeleteRelayGateway(ctx, req.(*DeleteRelayGatewayRequest))
}
return interceptor(ctx, in, info, handler)
}
// GatewayService_ServiceDesc is the grpc.ServiceDesc for GatewayService service. // GatewayService_ServiceDesc is the grpc.ServiceDesc for GatewayService service.
// It's only intended for direct use with grpc.RegisterService, // It's only intended for direct use with grpc.RegisterService,
// and not to be introspected or modified (even as a copy) // and not to be introspected or modified (even as a copy)
@@ -340,6 +517,26 @@ var GatewayService_ServiceDesc = grpc.ServiceDesc{
MethodName: "GetMetrics", MethodName: "GetMetrics",
Handler: _GatewayService_GetMetrics_Handler, Handler: _GatewayService_GetMetrics_Handler,
}, },
{
MethodName: "GetDutyCycleMetrics",
Handler: _GatewayService_GetDutyCycleMetrics_Handler,
},
{
MethodName: "GetRelayGateway",
Handler: _GatewayService_GetRelayGateway_Handler,
},
{
MethodName: "ListRelayGateways",
Handler: _GatewayService_ListRelayGateways_Handler,
},
{
MethodName: "UpdateRelayGateway",
Handler: _GatewayService_UpdateRelayGateway_Handler,
},
{
MethodName: "DeleteRelayGateway",
Handler: _GatewayService_DeleteRelayGateway_Handler,
},
}, },
Streams: []grpc.StreamDesc{}, Streams: []grpc.StreamDesc{},
Metadata: "api/gateway.proto", Metadata: "api/gateway.proto",

View File

@@ -1,6 +1,6 @@
// Code generated by protoc-gen-go. DO NOT EDIT. // Code generated by protoc-gen-go. DO NOT EDIT.
// versions: // versions:
// protoc-gen-go v1.31.0 // protoc-gen-go v1.34.1
// protoc v4.24.4 // protoc v4.24.4
// source: api/internal.proto // source: api/internal.proto
@@ -893,6 +893,10 @@ type SettingsResponse struct {
OpenidConnect *OpenIdConnect `protobuf:"bytes,1,opt,name=openid_connect,json=openidConnect,proto3" json:"openid_connect,omitempty"` OpenidConnect *OpenIdConnect `protobuf:"bytes,1,opt,name=openid_connect,json=openidConnect,proto3" json:"openid_connect,omitempty"`
// OAuth2 settings. // OAuth2 settings.
Oauth2 *OAuth2 `protobuf:"bytes,2,opt,name=oauth2,proto3" json:"oauth2,omitempty"` Oauth2 *OAuth2 `protobuf:"bytes,2,opt,name=oauth2,proto3" json:"oauth2,omitempty"`
// Tileserver URL.
TileserverUrl string `protobuf:"bytes,3,opt,name=tileserver_url,json=tileserverUrl,proto3" json:"tileserver_url,omitempty"`
// Map attribution.
MapAttribution string `protobuf:"bytes,4,opt,name=map_attribution,json=mapAttribution,proto3" json:"map_attribution,omitempty"`
} }
func (x *SettingsResponse) Reset() { func (x *SettingsResponse) Reset() {
@@ -941,6 +945,20 @@ func (x *SettingsResponse) GetOauth2() *OAuth2 {
return nil return nil
} }
func (x *SettingsResponse) GetTileserverUrl() string {
if x != nil {
return x.TileserverUrl
}
return ""
}
func (x *SettingsResponse) GetMapAttribution() string {
if x != nil {
return x.MapAttribution
}
return ""
}
type OpenIdConnect struct { type OpenIdConnect struct {
state protoimpl.MessageState state protoimpl.MessageState
sizeCache protoimpl.SizeCache sizeCache protoimpl.SizeCache
@@ -2301,242 +2319,250 @@ var file_api_internal_proto_rawDesc = []byte{
0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61,
0x79, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x6e, 0x79, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x6e,
0x61, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x67, 0x61, 0x74, 0x65, 0x77,
0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x72, 0x0a, 0x10, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xc2, 0x01, 0x0a, 0x10, 0x53, 0x65, 0x74, 0x74, 0x69,
0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x0e, 0x6f, 0x70, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x0e, 0x6f,
0x65, 0x6e, 0x69, 0x64, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x70, 0x65, 0x6e, 0x69, 0x64, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20,
0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x64, 0x43, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x64,
0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x52, 0x0d, 0x6f, 0x70, 0x65, 0x6e, 0x69, 0x64, 0x43, 0x6f, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x52, 0x0d, 0x6f, 0x70, 0x65, 0x6e, 0x69, 0x64, 0x43,
0x6e, 0x6e, 0x65, 0x63, 0x74, 0x12, 0x23, 0x0a, 0x06, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x32, 0x18, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x12, 0x23, 0x0a, 0x06, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x32,
0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4f, 0x41, 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4f, 0x41, 0x75,
0x68, 0x32, 0x52, 0x06, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x32, 0x22, 0xad, 0x01, 0x0a, 0x0d, 0x4f, 0x74, 0x68, 0x32, 0x52, 0x06, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x32, 0x12, 0x25, 0x0a, 0x0e, 0x74,
0x70, 0x65, 0x6e, 0x49, 0x64, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x69, 0x6c, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20,
0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x69, 0x6c, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x55,
0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x5f, 0x72, 0x6c, 0x12, 0x27, 0x0a, 0x0f, 0x6d, 0x61, 0x70, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62,
0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6d, 0x61, 0x70,
0x55, 0x72, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x5f, 0x6c, 0x61, 0x62, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xad, 0x01, 0x0a, 0x0d,
0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x4c, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x64, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x12, 0x18, 0x0a,
0x61, 0x62, 0x65, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x6c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x5f, 0x75, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07,
0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x6c, 0x6f, 0x67, 0x69, 0x6e,
0x55, 0x72, 0x6c, 0x12, 0x25, 0x0a, 0x0e, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x5f, 0x72, 0x65, 0x64, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x6f, 0x67, 0x69,
0x69, 0x72, 0x65, 0x63, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x6c, 0x6f, 0x67, 0x6e, 0x55, 0x72, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x5f, 0x6c, 0x61,
0x69, 0x6e, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x22, 0xa6, 0x01, 0x0a, 0x06, 0x4f, 0x62, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6c, 0x6f, 0x67, 0x69, 0x6e,
0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x6c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x5f,
0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x75, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6c, 0x6f, 0x67, 0x6f, 0x75,
0x1b, 0x0a, 0x09, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x74, 0x55, 0x72, 0x6c, 0x12, 0x25, 0x0a, 0x0e, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x5f, 0x72, 0x65,
0x28, 0x09, 0x52, 0x08, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x55, 0x72, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x6c, 0x6f,
0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x22, 0xa6, 0x01, 0x0a, 0x06,
0x09, 0x52, 0x0a, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x1d, 0x0a, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65,
0x0a, 0x6c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64,
0x09, 0x52, 0x09, 0x6c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x55, 0x72, 0x6c, 0x12, 0x25, 0x0a, 0x0e, 0x12, 0x1b, 0x0a, 0x09, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20,
0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x5f, 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x18, 0x05, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x55, 0x72, 0x6c, 0x12, 0x1f, 0x0a,
0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x64, 0x69, 0x72, 0x0b, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01,
0x65, 0x63, 0x74, 0x22, 0x45, 0x0a, 0x19, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x64, 0x43, 0x6f, 0x6e, 0x28, 0x09, 0x52, 0x0a, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x1d,
0x6e, 0x65, 0x63, 0x74, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x0a, 0x0a, 0x6c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01,
0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x28, 0x09, 0x52, 0x09, 0x6c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x55, 0x72, 0x6c, 0x12, 0x25, 0x0a,
0x63, 0x6f, 0x64, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x0e, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x5f, 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x18,
0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0x32, 0x0a, 0x1a, 0x4f, 0x70, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x64, 0x69,
0x72, 0x65, 0x63, 0x74, 0x22, 0x45, 0x0a, 0x19, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x64, 0x43, 0x6f,
0x6e, 0x6e, 0x65, 0x63, 0x74, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
0x74, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02,
0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0x32, 0x0a, 0x1a, 0x4f,
0x70, 0x65, 0x6e, 0x49, 0x64, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x4c, 0x6f, 0x67, 0x69,
0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b,
0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22,
0x3e, 0x0a, 0x12, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65,
0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20,
0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61,
0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22,
0x2b, 0x0a, 0x13, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65,
0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18,
0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x37, 0x0a, 0x18,
0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72,
0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x65, 0x6e, 0x61,
0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, 0x6e,
0x61, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x93, 0x02, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76,
0x69, 0x63, 0x65, 0x73, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f,
0x6e, 0x73, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x63, 0x6f,
0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x61, 0x63, 0x74, 0x69, 0x76,
0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x69, 0x6e, 0x61, 0x63, 0x74, 0x69,
0x76, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d,
0x69, 0x6e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x46, 0x0a,
0x08, 0x64, 0x72, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32,
0x2b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73,
0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e,
0x44, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x64, 0x72,
0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x6e, 0x65, 0x76, 0x65, 0x72, 0x5f, 0x73,
0x65, 0x65, 0x6e, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52,
0x0e, 0x6e, 0x65, 0x76, 0x65, 0x72, 0x53, 0x65, 0x65, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x1a,
0x3a, 0x0a, 0x0c, 0x44, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12,
0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65,
0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d,
0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x38, 0x0a, 0x19, 0x47,
0x65, 0x74, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72,
0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x65, 0x6e, 0x61,
0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, 0x6e,
0x61, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x8e, 0x01, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x47, 0x61, 0x74,
0x65, 0x77, 0x61, 0x79, 0x73, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70,
0x6f, 0x6e, 0x73, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x6f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x63,
0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x6f, 0x6e, 0x6c, 0x69,
0x6e, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x6f, 0x66, 0x66, 0x6c, 0x69,
0x6e, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c,
0x6f, 0x66, 0x66, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x10,
0x6e, 0x65, 0x76, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x65, 0x6e, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74,
0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x6e, 0x65, 0x76, 0x65, 0x72, 0x53, 0x65, 0x65,
0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xfc, 0x01, 0x0a, 0x07, 0x4c, 0x6f, 0x67, 0x49, 0x74,
0x65, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02,
0x69, 0x64, 0x12, 0x2e, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b,
0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x04, 0x74, 0x69,
0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f,
0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70,
0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x04, 0x20, 0x01,
0x28, 0x09, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x12, 0x3c, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70,
0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x61,
0x70, 0x69, 0x2e, 0x4c, 0x6f, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x65,
0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70,
0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x1a, 0x3d, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72,
0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79,
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76,
0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75,
0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x3b, 0x0a, 0x1a, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x47,
0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75,
0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69,
0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79,
0x49, 0x64, 0x22, 0x34, 0x0a, 0x19, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x44, 0x65, 0x76, 0x69,
0x63, 0x65, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
0x17, 0x0a, 0x07, 0x64, 0x65, 0x76, 0x5f, 0x65, 0x75, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
0x52, 0x06, 0x64, 0x65, 0x76, 0x45, 0x75, 0x69, 0x22, 0x34, 0x0a, 0x19, 0x53, 0x74, 0x72, 0x65,
0x61, 0x6d, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65,
0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x64, 0x65, 0x76, 0x5f, 0x65, 0x75, 0x69,
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x65, 0x76, 0x45, 0x75, 0x69, 0x22, 0x44,
0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73,
0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x07, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x73,
0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x67,
0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x07, 0x72, 0x65, 0x67,
0x69, 0x6f, 0x6e, 0x73, 0x22, 0x6a, 0x0a, 0x0e, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4c, 0x69,
0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,
0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x26, 0x0a, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e,
0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0e, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e,
0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x12, 0x20,
0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20,
0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e,
0x22, 0x22, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71,
0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
0x52, 0x02, 0x69, 0x64, 0x22, 0xb2, 0x03, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x52, 0x65, 0x67, 0x69,
0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64,
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x26, 0x0a, 0x06, 0x72, 0x65,
0x67, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0e, 0x2e, 0x63, 0x6f, 0x6d,
0x6d, 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x72, 0x65, 0x67, 0x69,
0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18,
0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12,
0x3b, 0x0a, 0x0f, 0x75, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65,
0x6c, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52,
0x65, 0x67, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x0e, 0x75, 0x70,
0x6c, 0x69, 0x6e, 0x6b, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x12, 0x1b, 0x0a, 0x09,
0x72, 0x78, 0x31, 0x5f, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52,
0x08, 0x72, 0x78, 0x31, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x12, 0x22, 0x0a, 0x0d, 0x72, 0x78, 0x31,
0x5f, 0x64, 0x72, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d,
0x52, 0x0b, 0x72, 0x78, 0x31, 0x44, 0x72, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x15, 0x0a,
0x06, 0x72, 0x78, 0x32, 0x5f, 0x64, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x72,
0x78, 0x32, 0x44, 0x72, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x78, 0x32, 0x5f, 0x66, 0x72, 0x65, 0x71,
0x75, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x72, 0x78, 0x32,
0x46, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x2e, 0x0a, 0x14, 0x63, 0x6c, 0x61,
0x73, 0x73, 0x5f, 0x62, 0x5f, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x5f, 0x64,
0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x10, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x42, 0x50,
0x69, 0x6e, 0x67, 0x53, 0x6c, 0x6f, 0x74, 0x44, 0x72, 0x12, 0x3c, 0x0a, 0x1b, 0x63, 0x6c, 0x61,
0x73, 0x73, 0x5f, 0x62, 0x5f, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x5f, 0x66,
0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x17,
0x63, 0x6c, 0x61, 0x73, 0x73, 0x42, 0x50, 0x69, 0x6e, 0x67, 0x53, 0x6c, 0x6f, 0x74, 0x46, 0x72,
0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72,
0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65,
0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x5b, 0x0a, 0x0d, 0x52, 0x65, 0x67,
0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x1c, 0x0a, 0x09, 0x66, 0x72,
0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x66,
0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x15, 0x0a, 0x06, 0x64, 0x72, 0x5f, 0x6d,
0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x64, 0x72, 0x4d, 0x69, 0x6e, 0x12,
0x15, 0x0a, 0x06, 0x64, 0x72, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52,
0x05, 0x64, 0x72, 0x4d, 0x61, 0x78, 0x22, 0x2e, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x56, 0x65, 0x72,
0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07,
0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76,
0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x32, 0xb9, 0x09, 0x0a, 0x0f, 0x49, 0x6e, 0x74, 0x65, 0x72,
0x6e, 0x61, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x30, 0x0a, 0x05, 0x4c, 0x6f,
0x67, 0x69, 0x6e, 0x12, 0x11, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52,
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x12, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x6f, 0x67,
0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x39, 0x0a, 0x07,
0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a,
0x14, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73,
0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x45, 0x0a, 0x0c, 0x47, 0x6c, 0x6f, 0x62, 0x61,
0x6c, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x12, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x6c,
0x6f, 0x62, 0x61, 0x6c, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
0x74, 0x1a, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x65,
0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x45,
0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x12, 0x18,
0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x69, 0x4b, 0x65,
0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43,
0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f,
0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x42, 0x0a, 0x0c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41,
0x70, 0x69, 0x4b, 0x65, 0x79, 0x12, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x6c, 0x65,
0x74, 0x65, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x42, 0x0a, 0x0b, 0x4c, 0x69, 0x73,
0x74, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c,
0x69, 0x73, 0x74, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
0x74, 0x1a, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x69, 0x4b,
0x65, 0x79, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3b, 0x0a,
0x08, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74,
0x79, 0x1a, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73,
0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x57, 0x0a, 0x12, 0x4f, 0x70,
0x65, 0x6e, 0x49, 0x64, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x65, 0x6e, 0x49, 0x64, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x4c, 0x6f, 0x67, 0x69, 0x6e,
0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x12, 0x1e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x64, 0x43, 0x6f, 0x6e,
0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x3e, 0x6e, 0x65, 0x63, 0x74, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
0x0a, 0x12, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x64, 0x43, 0x6f, 0x6e,
0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x6e, 0x65, 0x63, 0x74, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0x00, 0x12, 0x42, 0x0a, 0x0b, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x4c, 0x6f, 0x67,
0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0x2b, 0x69, 0x6e, 0x12, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x4c,
0x0a, 0x13, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x61, 0x70,
0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x69, 0x2e, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x73,
0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x37, 0x0a, 0x18, 0x47, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x54, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x44, 0x65,
0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x76, 0x69, 0x63, 0x65, 0x73, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x1d, 0x2e, 0x61,
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x53, 0x75, 0x6d,
0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, 0x6e, 0x61, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x61, 0x70,
0x6e, 0x74, 0x49, 0x64, 0x22, 0x93, 0x02, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69,
0x63, 0x65, 0x73, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
0x73, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x63, 0x6f, 0x75,
0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65,
0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x69, 0x6e, 0x61, 0x63, 0x74, 0x69, 0x76,
0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x69,
0x6e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x46, 0x0a, 0x08,
0x64, 0x72, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b,
0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x53,
0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x44,
0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x64, 0x72, 0x43,
0x6f, 0x75, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x6e, 0x65, 0x76, 0x65, 0x72, 0x5f, 0x73, 0x65,
0x65, 0x6e, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e,
0x6e, 0x65, 0x76, 0x65, 0x72, 0x53, 0x65, 0x65, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x1a, 0x3a,
0x0a, 0x0c, 0x44, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10,
0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79,
0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52,
0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x38, 0x0a, 0x19, 0x47, 0x65,
0x74, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79,
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x65, 0x6e, 0x61, 0x6e,
0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, 0x6e, 0x61,
0x6e, 0x74, 0x49, 0x64, 0x22, 0x8e, 0x01, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x47, 0x61, 0x74, 0x65,
0x77, 0x61, 0x79, 0x73, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f,
0x6e, 0x73, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x6f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x63, 0x6f,
0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x6f, 0x6e, 0x6c, 0x69, 0x6e,
0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x6f, 0x66, 0x66, 0x6c, 0x69, 0x6e,
0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x6f,
0x66, 0x66, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x6e,
0x65, 0x76, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x65, 0x6e, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18,
0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x6e, 0x65, 0x76, 0x65, 0x72, 0x53, 0x65, 0x65, 0x6e,
0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xfc, 0x01, 0x0a, 0x07, 0x4c, 0x6f, 0x67, 0x49, 0x74, 0x65,
0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69,
0x64, 0x12, 0x2e, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,
0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x04, 0x74, 0x69, 0x6d,
0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e,
0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74,
0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28,
0x09, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x12, 0x3c, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65,
0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x61, 0x70,
0x69, 0x2e, 0x4c, 0x6f, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72,
0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65,
0x72, 0x74, 0x69, 0x65, 0x73, 0x1a, 0x3d, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74,
0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18,
0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61,
0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
0x3a, 0x02, 0x38, 0x01, 0x22, 0x3b, 0x0a, 0x1a, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x47, 0x61,
0x74, 0x65, 0x77, 0x61, 0x79, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65,
0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64,
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x49,
0x64, 0x22, 0x34, 0x0a, 0x19, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x44, 0x65, 0x76, 0x69, 0x63,
0x65, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17,
0x0a, 0x07, 0x64, 0x65, 0x76, 0x5f, 0x65, 0x75, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
0x06, 0x64, 0x65, 0x76, 0x45, 0x75, 0x69, 0x22, 0x34, 0x0a, 0x19, 0x53, 0x74, 0x72, 0x65, 0x61,
0x6d, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71,
0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x64, 0x65, 0x76, 0x5f, 0x65, 0x75, 0x69, 0x18,
0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x65, 0x76, 0x45, 0x75, 0x69, 0x22, 0x44, 0x0a,
0x13, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70,
0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x07, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x73, 0x18,
0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x67, 0x69,
0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x07, 0x72, 0x65, 0x67, 0x69,
0x6f, 0x6e, 0x73, 0x22, 0x6a, 0x0a, 0x0e, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73,
0x74, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x26, 0x0a, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x18,
0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0e, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x52,
0x65, 0x67, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a,
0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01,
0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22,
0x22, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75,
0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
0x02, 0x69, 0x64, 0x22, 0xb2, 0x03, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x52, 0x65, 0x67, 0x69, 0x6f,
0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18,
0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x26, 0x0a, 0x06, 0x72, 0x65, 0x67,
0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0e, 0x2e, 0x63, 0x6f, 0x6d, 0x6d,
0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f,
0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x03,
0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x3b,
0x0a, 0x0f, 0x75, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c,
0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65,
0x67, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x0e, 0x75, 0x70, 0x6c,
0x69, 0x6e, 0x6b, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x72,
0x78, 0x31, 0x5f, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08,
0x72, 0x78, 0x31, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x12, 0x22, 0x0a, 0x0d, 0x72, 0x78, 0x31, 0x5f,
0x64, 0x72, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52,
0x0b, 0x72, 0x78, 0x31, 0x44, 0x72, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x15, 0x0a, 0x06,
0x72, 0x78, 0x32, 0x5f, 0x64, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x72, 0x78,
0x32, 0x44, 0x72, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x78, 0x32, 0x5f, 0x66, 0x72, 0x65, 0x71, 0x75,
0x65, 0x6e, 0x63, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x72, 0x78, 0x32, 0x46,
0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x2e, 0x0a, 0x14, 0x63, 0x6c, 0x61, 0x73,
0x73, 0x5f, 0x62, 0x5f, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x5f, 0x64, 0x72,
0x18, 0x09, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x10, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x42, 0x50, 0x69,
0x6e, 0x67, 0x53, 0x6c, 0x6f, 0x74, 0x44, 0x72, 0x12, 0x3c, 0x0a, 0x1b, 0x63, 0x6c, 0x61, 0x73,
0x73, 0x5f, 0x62, 0x5f, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x5f, 0x66, 0x72,
0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x17, 0x63,
0x6c, 0x61, 0x73, 0x73, 0x42, 0x50, 0x69, 0x6e, 0x67, 0x53, 0x6c, 0x6f, 0x74, 0x46, 0x72, 0x65,
0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69,
0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73,
0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x5b, 0x0a, 0x0d, 0x52, 0x65, 0x67, 0x69,
0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x1c, 0x0a, 0x09, 0x66, 0x72, 0x65,
0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x66, 0x72,
0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x15, 0x0a, 0x06, 0x64, 0x72, 0x5f, 0x6d, 0x69,
0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x64, 0x72, 0x4d, 0x69, 0x6e, 0x12, 0x15,
0x0a, 0x06, 0x64, 0x72, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05,
0x64, 0x72, 0x4d, 0x61, 0x78, 0x22, 0x2e, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x56, 0x65, 0x72, 0x73,
0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76,
0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65,
0x72, 0x73, 0x69, 0x6f, 0x6e, 0x32, 0xb9, 0x09, 0x0a, 0x0f, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e,
0x61, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x30, 0x0a, 0x05, 0x4c, 0x6f, 0x67,
0x69, 0x6e, 0x12, 0x11, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65,
0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x12, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x6f, 0x67, 0x69,
0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x39, 0x0a, 0x07, 0x50,
0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x14,
0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70,
0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x45, 0x0a, 0x0c, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c,
0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x12, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x6c, 0x6f,
0x62, 0x61, 0x6c, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
0x1a, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x65, 0x61,
0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x45, 0x0a,
0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x12, 0x18, 0x2e,
0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79,
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72,
0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
0x73, 0x65, 0x22, 0x00, 0x12, 0x42, 0x0a, 0x0c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x70,
0x69, 0x4b, 0x65, 0x79, 0x12, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74,
0x65, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16,
0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x42, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74,
0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69,
0x73, 0x74, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
0x1a, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x69, 0x4b, 0x65,
0x79, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3b, 0x0a, 0x08,
0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79,
0x1a, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52,
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x57, 0x0a, 0x12, 0x4f, 0x70, 0x65,
0x6e, 0x49, 0x64, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x12,
0x1e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x64, 0x43, 0x6f, 0x6e, 0x6e,
0x65, 0x63, 0x74, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
0x1f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x64, 0x43, 0x6f, 0x6e, 0x6e,
0x65, 0x63, 0x74, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
0x22, 0x00, 0x12, 0x42, 0x0a, 0x0b, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x4c, 0x6f, 0x67, 0x69,
0x6e, 0x12, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x4c, 0x6f,
0x67, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x61, 0x70, 0x69,
0x2e, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70,
0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x54, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76,
0x69, 0x63, 0x65, 0x73, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x1d, 0x2e, 0x61, 0x70,
0x69, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x53, 0x75, 0x6d, 0x6d, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x53, 0x75, 0x6d, 0x6d,
0x61, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x61, 0x70, 0x69, 0x61, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x57, 0x0a,
0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x12, 0x47, 0x65, 0x74, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x53, 0x75, 0x6d, 0x6d,
0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x57, 0x0a, 0x12, 0x61, 0x72, 0x79, 0x12, 0x1e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x61, 0x74,
0x47, 0x65, 0x74, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x65, 0x77, 0x61, 0x79, 0x73, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75,
0x72, 0x79, 0x12, 0x1e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x61, 0x74, 0x65, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x61, 0x74,
0x77, 0x61, 0x79, 0x73, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x65, 0x77, 0x61, 0x79, 0x73, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70,
0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x61, 0x74, 0x65, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x48, 0x0a, 0x13, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d,
0x77, 0x61, 0x79, 0x73, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x1f, 0x2e,
0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x48, 0x0a, 0x13, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x47, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61,
0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x1f, 0x2e, 0x61, 0x79, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0c,
0x70, 0x69, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x6f, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x22, 0x00, 0x30, 0x01,
0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0c, 0x2e, 0x12, 0x46, 0x0a, 0x12, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65,
0x61, 0x70, 0x69, 0x2e, 0x4c, 0x6f, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x22, 0x00, 0x30, 0x01, 0x12, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x1e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x72,
0x46, 0x0a, 0x12, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x46, 0x65, 0x61, 0x6d, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x52,
0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x1e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x6f, 0x67,
0x61, 0x6d, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x22, 0x00, 0x30, 0x01, 0x12, 0x46, 0x0a, 0x12, 0x53, 0x74, 0x72, 0x65,
0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x6f, 0x67, 0x49, 0x61, 0x6d, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x1e,
0x74, 0x65, 0x6d, 0x22, 0x00, 0x30, 0x01, 0x12, 0x46, 0x0a, 0x12, 0x53, 0x74, 0x72, 0x65, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x44, 0x65, 0x76, 0x69, 0x63,
0x6d, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x1e, 0x2e, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0c,
0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x6f, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x22, 0x00, 0x30, 0x01,
0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0c, 0x2e, 0x12, 0x41, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x73, 0x12,
0x61, 0x70, 0x69, 0x2e, 0x4c, 0x6f, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x22, 0x00, 0x30, 0x01, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
0x41, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x16, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69,
0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x73, 0x74, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3c, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e,
0x74, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e,
0x22, 0x00, 0x12, 0x3c, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x12, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65,
0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x52, 0x74, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x00, 0x12, 0x3f, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12,
0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
0x12, 0x3f, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65,
0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x22, 0x00, 0x42, 0x93, 0x01, 0x0a, 0x11, 0x69, 0x6f, 0x2e, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73,
0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x42, 0x0d, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e,
0x00, 0x42, 0x65, 0x0a, 0x11, 0x69, 0x6f, 0x2e, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75,
0x63, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x42, 0x0d, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b,
0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f,
0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x63, 0x67, 0x6f, 0x2f, 0x76, 0x34, 0x2f, 0x61, 0x70, 0x69, 0xaa, 0x02, 0x0e, 0x43, 0x68, 0x69, 0x72,
0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x41, 0x70, 0x69, 0xca, 0x02, 0x0e, 0x43, 0x68, 0x69,
0x2f, 0x76, 0x34, 0x2f, 0x61, 0x70, 0x69, 0xaa, 0x02, 0x0e, 0x43, 0x68, 0x69, 0x72, 0x70, 0x73, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5c, 0x41, 0x70, 0x69, 0xe2, 0x02, 0x1a, 0x47, 0x50,
0x74, 0x61, 0x63, 0x6b, 0x2e, 0x41, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5c, 0x43, 0x68, 0x69, 0x72, 0x70, 0x73,
0x74, 0x61, 0x63, 0x6b, 0x5c, 0x41, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
} }
var ( var (

View File

@@ -1,6 +1,6 @@
// Code generated by protoc-gen-go. DO NOT EDIT. // Code generated by protoc-gen-go. DO NOT EDIT.
// versions: // versions:
// protoc-gen-go v1.31.0 // protoc-gen-go v1.34.1
// protoc v4.24.4 // protoc v4.24.4
// source: api/multicast_group.proto // source: api/multicast_group.proto
@@ -1654,14 +1654,17 @@ var file_api_multicast_group_proto_rawDesc = []byte{
0x32, 0x12, 0x30, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x32, 0x12, 0x30, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73,
0x74, 0x2d, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2f, 0x7b, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x74, 0x2d, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2f, 0x7b, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63,
0x61, 0x73, 0x74, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x71, 0x75, 0x61, 0x73, 0x74, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x71, 0x75,
0x65, 0x75, 0x65, 0x42, 0x6b, 0x0a, 0x11, 0x69, 0x6f, 0x2e, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x65, 0x75, 0x65, 0x42, 0x99, 0x01, 0x0a, 0x11, 0x69, 0x6f, 0x2e, 0x63, 0x68, 0x69, 0x72, 0x70,
0x74, 0x61, 0x63, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x42, 0x13, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x42, 0x13, 0x4d, 0x75, 0x6c, 0x74, 0x69,
0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x63, 0x61, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01,
0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x5a, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x68, 0x69,
0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61,
0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x34, 0x2f, 0x61, 0x70, 0x69, 0xaa, 0x63, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x34, 0x2f, 0x61, 0x70, 0x69,
0x02, 0x0e, 0x43, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x41, 0x70, 0x69, 0xaa, 0x02, 0x0e, 0x43, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x41, 0x70,
0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x69, 0xca, 0x02, 0x0e, 0x43, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5c, 0x41,
0x70, 0x69, 0xe2, 0x02, 0x1a, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
0x5c, 0x43, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5c, 0x41, 0x70, 0x69, 0x62,
0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
} }
var ( var (

View File

@@ -1,6 +1,6 @@
// Code generated by protoc-gen-go. DO NOT EDIT. // Code generated by protoc-gen-go. DO NOT EDIT.
// versions: // versions:
// protoc-gen-go v1.31.0 // protoc-gen-go v1.34.1
// protoc v4.24.4 // protoc v4.24.4
// source: api/relay.proto // source: api/relay.proto
@@ -595,14 +595,17 @@ var file_api_relay_proto_rawDesc = []byte{
0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, 0x82, 0xd3, 0xe4,
0x93, 0x02, 0x25, 0x12, 0x23, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x73, 0x93, 0x02, 0x25, 0x12, 0x23, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x73,
0x2f, 0x7b, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x64, 0x65, 0x76, 0x5f, 0x65, 0x75, 0x69, 0x7d, 0x2f, 0x7b, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x64, 0x65, 0x76, 0x5f, 0x65, 0x75, 0x69, 0x7d,
0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x42, 0x62, 0x0a, 0x11, 0x69, 0x6f, 0x2e, 0x63, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x42, 0x90, 0x01, 0x0a, 0x11, 0x69, 0x6f, 0x2e,
0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x42, 0x0a, 0x52, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x42, 0x0a,
0x65, 0x6c, 0x61, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2e, 0x67, 0x69, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2e, 0x67, 0x69,
0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74,
0x63, 0x6b, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x61, 0x70, 0x61, 0x63, 0x6b, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x61,
0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x34, 0x2f, 0x61, 0x70, 0x69, 0xaa, 0x02, 0x0e, 0x43, 0x68, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x34, 0x2f, 0x61, 0x70, 0x69, 0xaa, 0x02, 0x0e, 0x43,
0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x41, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x41, 0x70, 0x69, 0xca, 0x02, 0x0e,
0x6f, 0x74, 0x6f, 0x33, 0x43, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5c, 0x41, 0x70, 0x69, 0xe2, 0x02,
0x1a, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5c, 0x43, 0x68, 0x69,
0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5c, 0x41, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f,
0x74, 0x6f, 0x33,
} }
var ( var (

View File

@@ -1,6 +1,6 @@
// Code generated by protoc-gen-go. DO NOT EDIT. // Code generated by protoc-gen-go. DO NOT EDIT.
// versions: // versions:
// protoc-gen-go v1.31.0 // protoc-gen-go v1.34.1
// protoc v4.24.4 // protoc v4.24.4
// source: api/tenant.proto // source: api/tenant.proto
@@ -1565,14 +1565,16 @@ var file_api_tenant_proto_rawDesc = []byte{
0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x26, 0x82, 0xd3, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x26, 0x82, 0xd3,
0xe4, 0x93, 0x02, 0x20, 0x12, 0x1e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0xe4, 0x93, 0x02, 0x20, 0x12, 0x1e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x74, 0x65, 0x6e, 0x61, 0x6e,
0x74, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x75, 0x74, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x75,
0x73, 0x65, 0x72, 0x73, 0x42, 0x63, 0x0a, 0x11, 0x69, 0x6f, 0x2e, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x65, 0x72, 0x73, 0x42, 0x91, 0x01, 0x0a, 0x11, 0x69, 0x6f, 0x2e, 0x63, 0x68, 0x69, 0x72,
0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x42, 0x0b, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x42, 0x0b, 0x54, 0x65, 0x6e, 0x61,
0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75,
0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b,
0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f,
0x6f, 0x2f, 0x76, 0x34, 0x2f, 0x61, 0x70, 0x69, 0xaa, 0x02, 0x0e, 0x43, 0x68, 0x69, 0x72, 0x70, 0x67, 0x6f, 0x2f, 0x76, 0x34, 0x2f, 0x61, 0x70, 0x69, 0xaa, 0x02, 0x0e, 0x43, 0x68, 0x69, 0x72,
0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x41, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x41, 0x70, 0x69, 0xca, 0x02, 0x0e, 0x43, 0x68, 0x69,
0x33, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5c, 0x41, 0x70, 0x69, 0xe2, 0x02, 0x1a, 0x47, 0x50,
0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5c, 0x43, 0x68, 0x69, 0x72, 0x70, 0x73,
0x74, 0x61, 0x63, 0x6b, 0x5c, 0x41, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
} }
var ( var (

21
api/go/api/user.pb.go vendored
View File

@@ -1,6 +1,6 @@
// Code generated by protoc-gen-go. DO NOT EDIT. // Code generated by protoc-gen-go. DO NOT EDIT.
// versions: // versions:
// protoc-gen-go v1.31.0 // protoc-gen-go v1.34.1
// protoc v4.24.4 // protoc v4.24.4
// source: api/user.proto // source: api/user.proto
@@ -891,14 +891,17 @@ var file_api_user_proto_rawDesc = []byte{
0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d,
0x70, 0x74, 0x79, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x3a, 0x01, 0x2a, 0x22, 0x1d, 0x70, 0x74, 0x79, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x3a, 0x01, 0x2a, 0x22, 0x1d,
0x2f, 0x61, 0x70, 0x69, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x75, 0x73, 0x65, 0x72,
0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x42, 0x61, 0x0a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x42, 0x8f, 0x01,
0x11, 0x69, 0x6f, 0x2e, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x61, 0x0a, 0x11, 0x69, 0x6f, 0x2e, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e,
0x70, 0x69, 0x42, 0x09, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x61, 0x70, 0x69, 0x42, 0x09, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01,
0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x5a, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x68, 0x69,
0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61,
0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x34, 0x2f, 0x61, 0x70, 0x69, 0xaa, 0x63, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x34, 0x2f, 0x61, 0x70, 0x69,
0x02, 0x0e, 0x43, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x41, 0x70, 0x69, 0xaa, 0x02, 0x0e, 0x43, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x41, 0x70,
0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x69, 0xca, 0x02, 0x0e, 0x43, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5c, 0x41,
0x70, 0x69, 0xe2, 0x02, 0x1a, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
0x5c, 0x43, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5c, 0x41, 0x70, 0x69, 0x62,
0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
} }
var ( var (

View File

@@ -1,6 +1,6 @@
// Code generated by protoc-gen-go. DO NOT EDIT. // Code generated by protoc-gen-go. DO NOT EDIT.
// versions: // versions:
// protoc-gen-go v1.31.0 // protoc-gen-go v1.34.1
// protoc v4.24.4 // protoc v4.24.4
// source: common/common.proto // source: common/common.proto
@@ -308,6 +308,7 @@ const (
RegParamsRevision_RP002_1_0_1 RegParamsRevision = 3 RegParamsRevision_RP002_1_0_1 RegParamsRevision = 3
RegParamsRevision_RP002_1_0_2 RegParamsRevision = 4 RegParamsRevision_RP002_1_0_2 RegParamsRevision = 4
RegParamsRevision_RP002_1_0_3 RegParamsRevision = 5 RegParamsRevision_RP002_1_0_3 RegParamsRevision = 5
RegParamsRevision_RP002_1_0_4 RegParamsRevision = 6
) )
// Enum value maps for RegParamsRevision. // Enum value maps for RegParamsRevision.
@@ -319,6 +320,7 @@ var (
3: "RP002_1_0_1", 3: "RP002_1_0_1",
4: "RP002_1_0_2", 4: "RP002_1_0_2",
5: "RP002_1_0_3", 5: "RP002_1_0_3",
6: "RP002_1_0_4",
} }
RegParamsRevision_value = map[string]int32{ RegParamsRevision_value = map[string]int32{
"A": 0, "A": 0,
@@ -327,6 +329,7 @@ var (
"RP002_1_0_1": 3, "RP002_1_0_1": 3,
"RP002_1_0_2": 4, "RP002_1_0_2": 4,
"RP002_1_0_3": 5, "RP002_1_0_3": 5,
"RP002_1_0_4": 6,
} }
) )
@@ -434,6 +437,8 @@ const (
Aggregation_DAY Aggregation = 1 Aggregation_DAY Aggregation = 1
// Month. // Month.
Aggregation_MONTH Aggregation = 2 Aggregation_MONTH Aggregation = 2
// Minute.
Aggregation_MINUTE Aggregation = 3
) )
// Enum value maps for Aggregation. // Enum value maps for Aggregation.
@@ -442,11 +447,13 @@ var (
0: "HOUR", 0: "HOUR",
1: "DAY", 1: "DAY",
2: "MONTH", 2: "MONTH",
3: "MINUTE",
} }
Aggregation_value = map[string]int32{ Aggregation_value = map[string]int32{
"HOUR": 0, "HOUR": 0,
"DAY": 1, "DAY": 1,
"MONTH": 2, "MONTH": 2,
"MINUTE": 3,
} }
) )
@@ -1039,42 +1046,47 @@ var file_common_common_proto_rawDesc = []byte{
0x41, 0x4e, 0x5f, 0x31, 0x5f, 0x30, 0x5f, 0x33, 0x10, 0x03, 0x12, 0x11, 0x0a, 0x0d, 0x4c, 0x4f, 0x41, 0x4e, 0x5f, 0x31, 0x5f, 0x30, 0x5f, 0x33, 0x10, 0x03, 0x12, 0x11, 0x0a, 0x0d, 0x4c, 0x4f,
0x52, 0x41, 0x57, 0x41, 0x4e, 0x5f, 0x31, 0x5f, 0x30, 0x5f, 0x34, 0x10, 0x04, 0x12, 0x11, 0x0a, 0x52, 0x41, 0x57, 0x41, 0x4e, 0x5f, 0x31, 0x5f, 0x30, 0x5f, 0x34, 0x10, 0x04, 0x12, 0x11, 0x0a,
0x0d, 0x4c, 0x4f, 0x52, 0x41, 0x57, 0x41, 0x4e, 0x5f, 0x31, 0x5f, 0x31, 0x5f, 0x30, 0x10, 0x05, 0x0d, 0x4c, 0x4f, 0x52, 0x41, 0x57, 0x41, 0x4e, 0x5f, 0x31, 0x5f, 0x31, 0x5f, 0x30, 0x10, 0x05,
0x2a, 0x65, 0x0a, 0x11, 0x52, 0x65, 0x67, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x76, 0x2a, 0x76, 0x0a, 0x11, 0x52, 0x65, 0x67, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x76,
0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x05, 0x0a, 0x01, 0x41, 0x10, 0x00, 0x12, 0x05, 0x0a, 0x01, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x05, 0x0a, 0x01, 0x41, 0x10, 0x00, 0x12, 0x05, 0x0a, 0x01,
0x42, 0x10, 0x01, 0x12, 0x0f, 0x0a, 0x0b, 0x52, 0x50, 0x30, 0x30, 0x32, 0x5f, 0x31, 0x5f, 0x30, 0x42, 0x10, 0x01, 0x12, 0x0f, 0x0a, 0x0b, 0x52, 0x50, 0x30, 0x30, 0x32, 0x5f, 0x31, 0x5f, 0x30,
0x5f, 0x30, 0x10, 0x02, 0x12, 0x0f, 0x0a, 0x0b, 0x52, 0x50, 0x30, 0x30, 0x32, 0x5f, 0x31, 0x5f, 0x5f, 0x30, 0x10, 0x02, 0x12, 0x0f, 0x0a, 0x0b, 0x52, 0x50, 0x30, 0x30, 0x32, 0x5f, 0x31, 0x5f,
0x30, 0x5f, 0x31, 0x10, 0x03, 0x12, 0x0f, 0x0a, 0x0b, 0x52, 0x50, 0x30, 0x30, 0x32, 0x5f, 0x31, 0x30, 0x5f, 0x31, 0x10, 0x03, 0x12, 0x0f, 0x0a, 0x0b, 0x52, 0x50, 0x30, 0x30, 0x32, 0x5f, 0x31,
0x5f, 0x30, 0x5f, 0x32, 0x10, 0x04, 0x12, 0x0f, 0x0a, 0x0b, 0x52, 0x50, 0x30, 0x30, 0x32, 0x5f, 0x5f, 0x30, 0x5f, 0x32, 0x10, 0x04, 0x12, 0x0f, 0x0a, 0x0b, 0x52, 0x50, 0x30, 0x30, 0x32, 0x5f,
0x31, 0x5f, 0x30, 0x5f, 0x33, 0x10, 0x05, 0x2a, 0x8e, 0x01, 0x0a, 0x0e, 0x4c, 0x6f, 0x63, 0x61, 0x31, 0x5f, 0x30, 0x5f, 0x33, 0x10, 0x05, 0x12, 0x0f, 0x0a, 0x0b, 0x52, 0x50, 0x30, 0x30, 0x32,
0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x5f, 0x31, 0x5f, 0x30, 0x5f, 0x34, 0x10, 0x06, 0x2a, 0x8e, 0x01, 0x0a, 0x0e, 0x4c, 0x6f, 0x63,
0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x47, 0x50, 0x53, 0x10, 0x01, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55,
0x12, 0x0a, 0x0a, 0x06, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x10, 0x02, 0x12, 0x15, 0x0a, 0x11, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x47, 0x50, 0x53, 0x10,
0x47, 0x45, 0x4f, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x4c, 0x56, 0x45, 0x52, 0x5f, 0x54, 0x44, 0x4f, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x10, 0x02, 0x12, 0x15, 0x0a,
0x41, 0x10, 0x03, 0x12, 0x15, 0x0a, 0x11, 0x47, 0x45, 0x4f, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x4c, 0x11, 0x47, 0x45, 0x4f, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x4c, 0x56, 0x45, 0x52, 0x5f, 0x54, 0x44,
0x56, 0x45, 0x52, 0x5f, 0x52, 0x53, 0x53, 0x49, 0x10, 0x04, 0x12, 0x15, 0x0a, 0x11, 0x47, 0x45, 0x4f, 0x41, 0x10, 0x03, 0x12, 0x15, 0x0a, 0x11, 0x47, 0x45, 0x4f, 0x5f, 0x52, 0x45, 0x53, 0x4f,
0x4f, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x4c, 0x56, 0x45, 0x52, 0x5f, 0x47, 0x4e, 0x53, 0x53, 0x10, 0x4c, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x53, 0x53, 0x49, 0x10, 0x04, 0x12, 0x15, 0x0a, 0x11, 0x47,
0x05, 0x12, 0x15, 0x0a, 0x11, 0x47, 0x45, 0x4f, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x4c, 0x56, 0x45, 0x45, 0x4f, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x4c, 0x56, 0x45, 0x52, 0x5f, 0x47, 0x4e, 0x53, 0x53,
0x52, 0x5f, 0x57, 0x49, 0x46, 0x49, 0x10, 0x06, 0x2a, 0x2b, 0x0a, 0x0b, 0x41, 0x67, 0x67, 0x72, 0x10, 0x05, 0x12, 0x15, 0x0a, 0x11, 0x47, 0x45, 0x4f, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x4c, 0x56,
0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x08, 0x0a, 0x04, 0x48, 0x4f, 0x55, 0x52, 0x10, 0x45, 0x52, 0x5f, 0x57, 0x49, 0x46, 0x49, 0x10, 0x06, 0x2a, 0x37, 0x0a, 0x0b, 0x41, 0x67, 0x67,
0x00, 0x12, 0x07, 0x0a, 0x03, 0x44, 0x41, 0x59, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x4d, 0x4f, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x08, 0x0a, 0x04, 0x48, 0x4f, 0x55, 0x52,
0x4e, 0x54, 0x48, 0x10, 0x02, 0x2a, 0x32, 0x0a, 0x0a, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x4b, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x44, 0x41, 0x59, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x4d,
0x69, 0x6e, 0x64, 0x12, 0x0b, 0x0a, 0x07, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x45, 0x52, 0x10, 0x00, 0x4f, 0x4e, 0x54, 0x48, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x4d, 0x49, 0x4e, 0x55, 0x54, 0x45,
0x12, 0x0c, 0x0a, 0x08, 0x41, 0x42, 0x53, 0x4f, 0x4c, 0x55, 0x54, 0x45, 0x10, 0x01, 0x12, 0x09, 0x10, 0x03, 0x2a, 0x32, 0x0a, 0x0a, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x4b, 0x69, 0x6e, 0x64,
0x0a, 0x05, 0x47, 0x41, 0x55, 0x47, 0x45, 0x10, 0x02, 0x2a, 0x39, 0x0a, 0x0a, 0x52, 0x65, 0x67, 0x12, 0x0b, 0x0a, 0x07, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x45, 0x52, 0x10, 0x00, 0x12, 0x0c, 0x0a,
0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x12, 0x52, 0x45, 0x47, 0x55, 0x4c, 0x08, 0x41, 0x42, 0x53, 0x4f, 0x4c, 0x55, 0x54, 0x45, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x47,
0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x41, 0x55, 0x47, 0x45, 0x10, 0x02, 0x2a, 0x39, 0x0a, 0x0a, 0x52, 0x65, 0x67, 0x75, 0x6c, 0x61,
0x13, 0x0a, 0x0f, 0x45, 0x54, 0x53, 0x49, 0x5f, 0x45, 0x4e, 0x5f, 0x33, 0x30, 0x30, 0x5f, 0x32, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x12, 0x52, 0x45, 0x47, 0x55, 0x4c, 0x41, 0x54, 0x49,
0x32, 0x30, 0x10, 0x01, 0x2a, 0x34, 0x0a, 0x0b, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6c, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f,
0x61, 0x73, 0x73, 0x12, 0x0b, 0x0a, 0x07, 0x43, 0x4c, 0x41, 0x53, 0x53, 0x5f, 0x41, 0x10, 0x00, 0x45, 0x54, 0x53, 0x49, 0x5f, 0x45, 0x4e, 0x5f, 0x33, 0x30, 0x30, 0x5f, 0x32, 0x32, 0x30, 0x10,
0x12, 0x0b, 0x0a, 0x07, 0x43, 0x4c, 0x41, 0x53, 0x53, 0x5f, 0x42, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x01, 0x2a, 0x34, 0x0a, 0x0b, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73,
0x07, 0x43, 0x4c, 0x41, 0x53, 0x53, 0x5f, 0x43, 0x10, 0x02, 0x42, 0x69, 0x0a, 0x11, 0x69, 0x6f, 0x12, 0x0b, 0x0a, 0x07, 0x43, 0x4c, 0x41, 0x53, 0x53, 0x5f, 0x41, 0x10, 0x00, 0x12, 0x0b, 0x0a,
0x2e, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x42, 0x07, 0x43, 0x4c, 0x41, 0x53, 0x53, 0x5f, 0x42, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x43, 0x4c,
0x0b, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x31, 0x41, 0x53, 0x53, 0x5f, 0x43, 0x10, 0x02, 0x42, 0x9d, 0x01, 0x0a, 0x11, 0x69, 0x6f, 0x2e, 0x63,
0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x42, 0x0b, 0x43,
0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x31, 0x67, 0x69,
0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x34, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74,
0x6e, 0xaa, 0x02, 0x11, 0x43, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x43, 0x61, 0x63, 0x6b, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x61,
0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x34, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0xaa,
0x02, 0x11, 0x43, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x43, 0x6f, 0x6d,
0x6d, 0x6f, 0x6e, 0xca, 0x02, 0x11, 0x43, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b,
0x5c, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0xe2, 0x02, 0x1d, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74,
0x61, 0x64, 0x61, 0x74, 0x61, 0x5c, 0x43, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b,
0x5c, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
} }
var ( var (

2
api/go/go.mod vendored
View File

@@ -10,7 +10,7 @@ require (
require ( require (
github.com/golang/protobuf v1.5.4 // indirect github.com/golang/protobuf v1.5.4 // indirect
golang.org/x/net v0.22.0 // indirect golang.org/x/net v0.23.0 // indirect
golang.org/x/sys v0.18.0 // indirect golang.org/x/sys v0.18.0 // indirect
golang.org/x/text v0.14.0 // indirect golang.org/x/text v0.14.0 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20240325203815-454cdb8f5daa // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20240325203815-454cdb8f5daa // indirect

5
api/go/go.sum vendored
View File

@@ -1,8 +1,9 @@
github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
golang.org/x/net v0.22.0 h1:9sGLhx7iRIHEiX0oAJ3MRZMUCElJgy7Br1nO+AMN3Tc= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
golang.org/x/net v0.22.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs=
golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4=
golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=

374
api/go/gw/gw.pb.go vendored
View File

@@ -1,6 +1,6 @@
// Code generated by protoc-gen-go. DO NOT EDIT. // Code generated by protoc-gen-go. DO NOT EDIT.
// versions: // versions:
// protoc-gen-go v1.31.0 // protoc-gen-go v1.34.1
// protoc v4.24.4 // protoc v4.24.4
// source: gw/gw.proto // source: gw/gw.proto
@@ -3548,6 +3548,148 @@ func (x *ConnState) GetState() ConnState_State {
return ConnState_OFFLINE return ConnState_OFFLINE
} }
// Gateway Mesh heartbeat (sent periodically by the Relay Gateways).
type MeshHeartbeat struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// 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"`
// Relay path.
RelayPath []*MeshHeartbeatRelayPath `protobuf:"bytes,4,rep,name=relay_path,json=relayPath,proto3" json:"relay_path,omitempty"`
}
func (x *MeshHeartbeat) Reset() {
*x = MeshHeartbeat{}
if protoimpl.UnsafeEnabled {
mi := &file_gw_gw_proto_msgTypes[35]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *MeshHeartbeat) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*MeshHeartbeat) ProtoMessage() {}
func (x *MeshHeartbeat) ProtoReflect() protoreflect.Message {
mi := &file_gw_gw_proto_msgTypes[35]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use MeshHeartbeat.ProtoReflect.Descriptor instead.
func (*MeshHeartbeat) Descriptor() ([]byte, []int) {
return file_gw_gw_proto_rawDescGZIP(), []int{35}
}
func (x *MeshHeartbeat) GetGatewayId() string {
if x != nil {
return x.GatewayId
}
return ""
}
func (x *MeshHeartbeat) GetRelayId() string {
if x != nil {
return x.RelayId
}
return ""
}
func (x *MeshHeartbeat) GetTime() *timestamppb.Timestamp {
if x != nil {
return x.Time
}
return nil
}
func (x *MeshHeartbeat) GetRelayPath() []*MeshHeartbeatRelayPath {
if x != nil {
return x.RelayPath
}
return nil
}
type MeshHeartbeatRelayPath struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// 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"`
}
func (x *MeshHeartbeatRelayPath) Reset() {
*x = MeshHeartbeatRelayPath{}
if protoimpl.UnsafeEnabled {
mi := &file_gw_gw_proto_msgTypes[36]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *MeshHeartbeatRelayPath) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*MeshHeartbeatRelayPath) ProtoMessage() {}
func (x *MeshHeartbeatRelayPath) ProtoReflect() protoreflect.Message {
mi := &file_gw_gw_proto_msgTypes[36]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use MeshHeartbeatRelayPath.ProtoReflect.Descriptor instead.
func (*MeshHeartbeatRelayPath) Descriptor() ([]byte, []int) {
return file_gw_gw_proto_rawDescGZIP(), []int{36}
}
func (x *MeshHeartbeatRelayPath) GetRelayId() string {
if x != nil {
return x.RelayId
}
return ""
}
func (x *MeshHeartbeatRelayPath) GetRssi() int32 {
if x != nil {
return x.Rssi
}
return 0
}
func (x *MeshHeartbeatRelayPath) GetSnr() int32 {
if x != nil {
return x.Snr
}
return 0
}
var File_gw_gw_proto protoreflect.FileDescriptor var File_gw_gw_proto protoreflect.FileDescriptor
var file_gw_gw_proto_rawDesc = []byte{ var file_gw_gw_proto_rawDesc = []byte{
@@ -4116,50 +4258,70 @@ var file_gw_gw_proto_rawDesc = []byte{
0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74,
0x61, 0x74, 0x65, 0x22, 0x20, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x61, 0x74, 0x65, 0x22, 0x20, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0b, 0x0a, 0x07,
0x4f, 0x46, 0x46, 0x4c, 0x49, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x4f, 0x4e, 0x4c, 0x4f, 0x46, 0x46, 0x4c, 0x49, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x4f, 0x4e, 0x4c,
0x49, 0x4e, 0x45, 0x10, 0x01, 0x2a, 0xb5, 0x01, 0x0a, 0x08, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x61, 0x49, 0x4e, 0x45, 0x10, 0x01, 0x22, 0xb4, 0x01, 0x0a, 0x0d, 0x4d, 0x65, 0x73, 0x68, 0x48, 0x65,
0x74, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x43, 0x52, 0x5f, 0x55, 0x4e, 0x44, 0x45, 0x46, 0x49, 0x4e, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x61, 0x74, 0x65, 0x77,
0x45, 0x44, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x52, 0x5f, 0x34, 0x5f, 0x35, 0x10, 0x01, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x61, 0x74,
0x12, 0x0a, 0x0a, 0x06, 0x43, 0x52, 0x5f, 0x34, 0x5f, 0x36, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x65, 0x77, 0x61, 0x79, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x5f,
0x43, 0x52, 0x5f, 0x34, 0x5f, 0x37, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x52, 0x5f, 0x34, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x49,
0x5f, 0x38, 0x10, 0x04, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x52, 0x5f, 0x33, 0x5f, 0x38, 0x10, 0x05, 0x64, 0x12, 0x2e, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32,
0x12, 0x0a, 0x0a, 0x06, 0x43, 0x52, 0x5f, 0x32, 0x5f, 0x36, 0x10, 0x06, 0x12, 0x0a, 0x0a, 0x06, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
0x43, 0x52, 0x5f, 0x31, 0x5f, 0x34, 0x10, 0x07, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x52, 0x5f, 0x31, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x04, 0x74, 0x69, 0x6d,
0x5f, 0x36, 0x10, 0x08, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x52, 0x5f, 0x35, 0x5f, 0x36, 0x10, 0x09, 0x65, 0x12, 0x39, 0x0a, 0x0a, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18,
0x12, 0x0d, 0x0a, 0x09, 0x43, 0x52, 0x5f, 0x4c, 0x49, 0x5f, 0x34, 0x5f, 0x35, 0x10, 0x0a, 0x12, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x77, 0x2e, 0x4d, 0x65, 0x73, 0x68, 0x48,
0x0d, 0x0a, 0x09, 0x43, 0x52, 0x5f, 0x4c, 0x49, 0x5f, 0x34, 0x5f, 0x36, 0x10, 0x0b, 0x12, 0x0d, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x50, 0x61, 0x74,
0x0a, 0x09, 0x43, 0x52, 0x5f, 0x4c, 0x49, 0x5f, 0x34, 0x5f, 0x38, 0x10, 0x0c, 0x2a, 0x3b, 0x0a, 0x68, 0x52, 0x09, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x50, 0x61, 0x74, 0x68, 0x22, 0x59, 0x0a, 0x16,
0x0e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x54, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x12, 0x4d, 0x65, 0x73, 0x68, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x52, 0x65, 0x6c,
0x0f, 0x0a, 0x0b, 0x49, 0x4d, 0x4d, 0x45, 0x44, 0x49, 0x41, 0x54, 0x45, 0x4c, 0x59, 0x10, 0x00, 0x61, 0x79, 0x50, 0x61, 0x74, 0x68, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x5f,
0x12, 0x09, 0x0a, 0x05, 0x44, 0x45, 0x4c, 0x41, 0x59, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x47, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x49,
0x50, 0x53, 0x5f, 0x45, 0x50, 0x4f, 0x43, 0x48, 0x10, 0x02, 0x2a, 0x37, 0x0a, 0x11, 0x46, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x73, 0x73, 0x69, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52,
0x6e, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x54, 0x79, 0x70, 0x65, 0x12, 0x04, 0x72, 0x73, 0x73, 0x69, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x6e, 0x72, 0x18, 0x03, 0x20, 0x01,
0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x45, 0x4e, 0x43, 0x28, 0x05, 0x52, 0x03, 0x73, 0x6e, 0x72, 0x2a, 0xb5, 0x01, 0x0a, 0x08, 0x43, 0x6f, 0x64, 0x65,
0x52, 0x59, 0x50, 0x54, 0x45, 0x44, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x50, 0x4c, 0x41, 0x49, 0x52, 0x61, 0x74, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x43, 0x52, 0x5f, 0x55, 0x4e, 0x44, 0x45, 0x46,
0x4e, 0x10, 0x02, 0x2a, 0x30, 0x0a, 0x09, 0x43, 0x52, 0x43, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x49, 0x4e, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x52, 0x5f, 0x34, 0x5f, 0x35,
0x12, 0x0a, 0x0a, 0x06, 0x4e, 0x4f, 0x5f, 0x43, 0x52, 0x43, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x52, 0x5f, 0x34, 0x5f, 0x36, 0x10, 0x02, 0x12, 0x0a,
0x42, 0x41, 0x44, 0x5f, 0x43, 0x52, 0x43, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x52, 0x43, 0x0a, 0x06, 0x43, 0x52, 0x5f, 0x34, 0x5f, 0x37, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x52,
0x5f, 0x4f, 0x4b, 0x10, 0x02, 0x2a, 0xd5, 0x01, 0x0a, 0x0b, 0x54, 0x78, 0x41, 0x63, 0x6b, 0x53, 0x5f, 0x34, 0x5f, 0x38, 0x10, 0x04, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x52, 0x5f, 0x33, 0x5f, 0x38,
0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0b, 0x0a, 0x07, 0x49, 0x47, 0x4e, 0x4f, 0x52, 0x45, 0x44, 0x10, 0x05, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x52, 0x5f, 0x32, 0x5f, 0x36, 0x10, 0x06, 0x12, 0x0a,
0x10, 0x00, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x54, 0x4f, 0x0a, 0x06, 0x43, 0x52, 0x5f, 0x31, 0x5f, 0x34, 0x10, 0x07, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x52,
0x4f, 0x5f, 0x4c, 0x41, 0x54, 0x45, 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x4f, 0x4f, 0x5f, 0x5f, 0x31, 0x5f, 0x36, 0x10, 0x08, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x52, 0x5f, 0x35, 0x5f, 0x36,
0x45, 0x41, 0x52, 0x4c, 0x59, 0x10, 0x03, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x4f, 0x4c, 0x4c, 0x49, 0x10, 0x09, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x52, 0x5f, 0x4c, 0x49, 0x5f, 0x34, 0x5f, 0x35, 0x10,
0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x10, 0x04, 0x12, 0x14, 0x0a, 0x0a, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x52, 0x5f, 0x4c, 0x49, 0x5f, 0x34, 0x5f, 0x36, 0x10, 0x0b,
0x10, 0x43, 0x4f, 0x4c, 0x4c, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x52, 0x5f, 0x4c, 0x49, 0x5f, 0x34, 0x5f, 0x38, 0x10, 0x0c, 0x2a,
0x4e, 0x10, 0x05, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x58, 0x5f, 0x46, 0x52, 0x45, 0x51, 0x10, 0x06, 0x3b, 0x0a, 0x0e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x54, 0x69, 0x6d, 0x69, 0x6e,
0x12, 0x0c, 0x0a, 0x08, 0x54, 0x58, 0x5f, 0x50, 0x4f, 0x57, 0x45, 0x52, 0x10, 0x07, 0x12, 0x10, 0x67, 0x12, 0x0f, 0x0a, 0x0b, 0x49, 0x4d, 0x4d, 0x45, 0x44, 0x49, 0x41, 0x54, 0x45, 0x4c, 0x59,
0x0a, 0x0c, 0x47, 0x50, 0x53, 0x5f, 0x55, 0x4e, 0x4c, 0x4f, 0x43, 0x4b, 0x45, 0x44, 0x10, 0x08, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x44, 0x45, 0x4c, 0x41, 0x59, 0x10, 0x01, 0x12, 0x0d, 0x0a,
0x12, 0x0e, 0x0a, 0x0a, 0x51, 0x55, 0x45, 0x55, 0x45, 0x5f, 0x46, 0x55, 0x4c, 0x4c, 0x10, 0x09, 0x09, 0x47, 0x50, 0x53, 0x5f, 0x45, 0x50, 0x4f, 0x43, 0x48, 0x10, 0x02, 0x2a, 0x37, 0x0a, 0x11,
0x12, 0x12, 0x0a, 0x0e, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x5f, 0x45, 0x52, 0x52, 0x46, 0x69, 0x6e, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x54, 0x79, 0x70,
0x4f, 0x52, 0x10, 0x0a, 0x12, 0x17, 0x0a, 0x13, 0x44, 0x55, 0x54, 0x59, 0x5f, 0x43, 0x59, 0x43, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x45,
0x4c, 0x45, 0x5f, 0x4f, 0x56, 0x45, 0x52, 0x46, 0x4c, 0x4f, 0x57, 0x10, 0x0b, 0x42, 0x6a, 0x0a, 0x4e, 0x43, 0x52, 0x59, 0x50, 0x54, 0x45, 0x44, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x50, 0x4c,
0x14, 0x69, 0x6f, 0x2e, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x61, 0x41, 0x49, 0x4e, 0x10, 0x02, 0x2a, 0x30, 0x0a, 0x09, 0x43, 0x52, 0x43, 0x53, 0x74, 0x61, 0x74,
0x70, 0x69, 0x2e, 0x67, 0x77, 0x42, 0x0c, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x50, 0x72, 0x75, 0x73, 0x12, 0x0a, 0x0a, 0x06, 0x4e, 0x4f, 0x5f, 0x43, 0x52, 0x43, 0x10, 0x00, 0x12, 0x0b,
0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2d, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x0a, 0x07, 0x42, 0x41, 0x44, 0x5f, 0x43, 0x52, 0x43, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x43,
0x6d, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x63, 0x68, 0x69, 0x52, 0x43, 0x5f, 0x4f, 0x4b, 0x10, 0x02, 0x2a, 0xd5, 0x01, 0x0a, 0x0b, 0x54, 0x78, 0x41, 0x63,
0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0b, 0x0a, 0x07, 0x49, 0x47, 0x4e, 0x4f, 0x52,
0x34, 0x2f, 0x67, 0x77, 0xaa, 0x02, 0x12, 0x43, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x45, 0x44, 0x10, 0x00, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08,
0x6b, 0x2e, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x54, 0x4f, 0x4f, 0x5f, 0x4c, 0x41, 0x54, 0x45, 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x4f,
0x33, 0x4f, 0x5f, 0x45, 0x41, 0x52, 0x4c, 0x59, 0x10, 0x03, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x4f, 0x4c,
0x4c, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x10, 0x04, 0x12,
0x14, 0x0a, 0x10, 0x43, 0x4f, 0x4c, 0x4c, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x42, 0x45, 0x41,
0x43, 0x4f, 0x4e, 0x10, 0x05, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x58, 0x5f, 0x46, 0x52, 0x45, 0x51,
0x10, 0x06, 0x12, 0x0c, 0x0a, 0x08, 0x54, 0x58, 0x5f, 0x50, 0x4f, 0x57, 0x45, 0x52, 0x10, 0x07,
0x12, 0x10, 0x0a, 0x0c, 0x47, 0x50, 0x53, 0x5f, 0x55, 0x4e, 0x4c, 0x4f, 0x43, 0x4b, 0x45, 0x44,
0x10, 0x08, 0x12, 0x0e, 0x0a, 0x0a, 0x51, 0x55, 0x45, 0x55, 0x45, 0x5f, 0x46, 0x55, 0x4c, 0x4c,
0x10, 0x09, 0x12, 0x12, 0x0a, 0x0e, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x5f, 0x45,
0x52, 0x52, 0x4f, 0x52, 0x10, 0x0a, 0x12, 0x17, 0x0a, 0x13, 0x44, 0x55, 0x54, 0x59, 0x5f, 0x43,
0x59, 0x43, 0x4c, 0x45, 0x5f, 0x4f, 0x56, 0x45, 0x52, 0x46, 0x4c, 0x4f, 0x57, 0x10, 0x0b, 0x42,
0xa0, 0x01, 0x0a, 0x14, 0x69, 0x6f, 0x2e, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63,
0x6b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x67, 0x77, 0x42, 0x0c, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61,
0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2d, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62,
0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f,
0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67,
0x6f, 0x2f, 0x76, 0x34, 0x2f, 0x67, 0x77, 0xaa, 0x02, 0x12, 0x43, 0x68, 0x69, 0x72, 0x70, 0x73,
0x74, 0x61, 0x63, 0x6b, 0x2e, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0xca, 0x02, 0x12, 0x43,
0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5c, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61,
0x79, 0xe2, 0x02, 0x1e, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5c,
0x43, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5c, 0x47, 0x61, 0x74, 0x65, 0x77,
0x61, 0x79, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
} }
var ( var (
@@ -4175,7 +4337,7 @@ func file_gw_gw_proto_rawDescGZIP() []byte {
} }
var file_gw_gw_proto_enumTypes = make([]protoimpl.EnumInfo, 6) var file_gw_gw_proto_enumTypes = make([]protoimpl.EnumInfo, 6)
var file_gw_gw_proto_msgTypes = make([]protoimpl.MessageInfo, 42) var file_gw_gw_proto_msgTypes = make([]protoimpl.MessageInfo, 44)
var file_gw_gw_proto_goTypes = []interface{}{ var file_gw_gw_proto_goTypes = []interface{}{
(CodeRate)(0), // 0: gw.CodeRate (CodeRate)(0), // 0: gw.CodeRate
(DownlinkTiming)(0), // 1: gw.DownlinkTiming (DownlinkTiming)(0), // 1: gw.DownlinkTiming
@@ -4218,62 +4380,64 @@ var file_gw_gw_proto_goTypes = []interface{}{
(*RawPacketForwarderEvent)(nil), // 38: gw.RawPacketForwarderEvent (*RawPacketForwarderEvent)(nil), // 38: gw.RawPacketForwarderEvent
(*RawPacketForwarderCommand)(nil), // 39: gw.RawPacketForwarderCommand (*RawPacketForwarderCommand)(nil), // 39: gw.RawPacketForwarderCommand
(*ConnState)(nil), // 40: gw.ConnState (*ConnState)(nil), // 40: gw.ConnState
nil, // 41: gw.GatewayStats.MetadataEntry (*MeshHeartbeat)(nil), // 41: gw.MeshHeartbeat
nil, // 42: gw.GatewayStats.TxPacketsPerFrequencyEntry (*MeshHeartbeatRelayPath)(nil), // 42: gw.MeshHeartbeatRelayPath
nil, // 43: gw.GatewayStats.RxPacketsPerFrequencyEntry nil, // 43: gw.GatewayStats.MetadataEntry
nil, // 44: gw.GatewayStats.TxPacketsPerStatusEntry nil, // 44: gw.GatewayStats.TxPacketsPerFrequencyEntry
nil, // 45: gw.UplinkRxInfoLegacy.MetadataEntry nil, // 45: gw.GatewayStats.RxPacketsPerFrequencyEntry
nil, // 46: gw.UplinkRxInfo.MetadataEntry nil, // 46: gw.GatewayStats.TxPacketsPerStatusEntry
nil, // 47: gw.GatewayCommandExecRequest.EnvironmentEntry nil, // 47: gw.UplinkRxInfoLegacy.MetadataEntry
(common.Modulation)(0), // 48: common.Modulation nil, // 48: gw.UplinkRxInfo.MetadataEntry
(*timestamppb.Timestamp)(nil), // 49: google.protobuf.Timestamp nil, // 49: gw.GatewayCommandExecRequest.EnvironmentEntry
(*common.Location)(nil), // 50: common.Location (common.Modulation)(0), // 50: common.Modulation
(common.Regulation)(0), // 51: common.Regulation (*timestamppb.Timestamp)(nil), // 51: google.protobuf.Timestamp
(*durationpb.Duration)(nil), // 52: google.protobuf.Duration (*common.Location)(nil), // 52: common.Location
(common.Regulation)(0), // 53: common.Regulation
(*durationpb.Duration)(nil), // 54: google.protobuf.Duration
} }
var file_gw_gw_proto_depIdxs = []int32{ var file_gw_gw_proto_depIdxs = []int32{
9, // 0: gw.Modulation.lora:type_name -> gw.LoraModulationInfo 9, // 0: gw.Modulation.lora:type_name -> gw.LoraModulationInfo
10, // 1: gw.Modulation.fsk:type_name -> gw.FskModulationInfo 10, // 1: gw.Modulation.fsk:type_name -> gw.FskModulationInfo
11, // 2: gw.Modulation.lr_fhss:type_name -> gw.LrFhssModulationInfo 11, // 2: gw.Modulation.lr_fhss:type_name -> gw.LrFhssModulationInfo
48, // 3: gw.UplinkTxInfoLegacy.modulation:type_name -> common.Modulation 50, // 3: gw.UplinkTxInfoLegacy.modulation:type_name -> common.Modulation
9, // 4: gw.UplinkTxInfoLegacy.lora_modulation_info:type_name -> gw.LoraModulationInfo 9, // 4: gw.UplinkTxInfoLegacy.lora_modulation_info:type_name -> gw.LoraModulationInfo
10, // 5: gw.UplinkTxInfoLegacy.fsk_modulation_info:type_name -> gw.FskModulationInfo 10, // 5: gw.UplinkTxInfoLegacy.fsk_modulation_info:type_name -> gw.FskModulationInfo
11, // 6: gw.UplinkTxInfoLegacy.lr_fhss_modulation_info:type_name -> gw.LrFhssModulationInfo 11, // 6: gw.UplinkTxInfoLegacy.lr_fhss_modulation_info:type_name -> gw.LrFhssModulationInfo
6, // 7: gw.UplinkTxInfo.modulation:type_name -> gw.Modulation 6, // 7: gw.UplinkTxInfo.modulation:type_name -> gw.Modulation
0, // 8: gw.LoraModulationInfo.code_rate:type_name -> gw.CodeRate 0, // 8: gw.LoraModulationInfo.code_rate:type_name -> gw.CodeRate
0, // 9: gw.LrFhssModulationInfo.code_rate:type_name -> gw.CodeRate 0, // 9: gw.LrFhssModulationInfo.code_rate:type_name -> gw.CodeRate
49, // 10: gw.PlainFineTimestamp.time:type_name -> google.protobuf.Timestamp 51, // 10: gw.PlainFineTimestamp.time:type_name -> google.protobuf.Timestamp
49, // 11: gw.GatewayStats.time:type_name -> google.protobuf.Timestamp 51, // 11: gw.GatewayStats.time:type_name -> google.protobuf.Timestamp
50, // 12: gw.GatewayStats.location:type_name -> common.Location 52, // 12: gw.GatewayStats.location:type_name -> common.Location
41, // 13: gw.GatewayStats.metadata:type_name -> gw.GatewayStats.MetadataEntry 43, // 13: gw.GatewayStats.metadata:type_name -> gw.GatewayStats.MetadataEntry
42, // 14: gw.GatewayStats.tx_packets_per_frequency:type_name -> gw.GatewayStats.TxPacketsPerFrequencyEntry 44, // 14: gw.GatewayStats.tx_packets_per_frequency:type_name -> gw.GatewayStats.TxPacketsPerFrequencyEntry
43, // 15: gw.GatewayStats.rx_packets_per_frequency:type_name -> gw.GatewayStats.RxPacketsPerFrequencyEntry 45, // 15: gw.GatewayStats.rx_packets_per_frequency:type_name -> gw.GatewayStats.RxPacketsPerFrequencyEntry
15, // 16: gw.GatewayStats.tx_packets_per_modulation:type_name -> gw.PerModulationCount 15, // 16: gw.GatewayStats.tx_packets_per_modulation:type_name -> gw.PerModulationCount
15, // 17: gw.GatewayStats.rx_packets_per_modulation:type_name -> gw.PerModulationCount 15, // 17: gw.GatewayStats.rx_packets_per_modulation:type_name -> gw.PerModulationCount
44, // 18: gw.GatewayStats.tx_packets_per_status:type_name -> gw.GatewayStats.TxPacketsPerStatusEntry 46, // 18: gw.GatewayStats.tx_packets_per_status:type_name -> gw.GatewayStats.TxPacketsPerStatusEntry
16, // 19: gw.GatewayStats.duty_cycle_stats:type_name -> gw.DutyCycleStats 16, // 19: gw.GatewayStats.duty_cycle_stats:type_name -> gw.DutyCycleStats
6, // 20: gw.PerModulationCount.modulation:type_name -> gw.Modulation 6, // 20: gw.PerModulationCount.modulation:type_name -> gw.Modulation
51, // 21: gw.DutyCycleStats.regulation:type_name -> common.Regulation 53, // 21: gw.DutyCycleStats.regulation:type_name -> common.Regulation
52, // 22: gw.DutyCycleStats.window:type_name -> google.protobuf.Duration 54, // 22: gw.DutyCycleStats.window:type_name -> google.protobuf.Duration
17, // 23: gw.DutyCycleStats.bands:type_name -> gw.DutyCycleBand 17, // 23: gw.DutyCycleStats.bands:type_name -> gw.DutyCycleBand
52, // 24: gw.DutyCycleBand.load_max:type_name -> google.protobuf.Duration 54, // 24: gw.DutyCycleBand.load_max:type_name -> google.protobuf.Duration
52, // 25: gw.DutyCycleBand.load_tracked:type_name -> google.protobuf.Duration 54, // 25: gw.DutyCycleBand.load_tracked:type_name -> google.protobuf.Duration
49, // 26: gw.UplinkRxInfoLegacy.time:type_name -> google.protobuf.Timestamp 51, // 26: gw.UplinkRxInfoLegacy.time:type_name -> google.protobuf.Timestamp
52, // 27: gw.UplinkRxInfoLegacy.time_since_gps_epoch:type_name -> google.protobuf.Duration 54, // 27: gw.UplinkRxInfoLegacy.time_since_gps_epoch:type_name -> google.protobuf.Duration
50, // 28: gw.UplinkRxInfoLegacy.location:type_name -> common.Location 52, // 28: gw.UplinkRxInfoLegacy.location:type_name -> common.Location
2, // 29: gw.UplinkRxInfoLegacy.fine_timestamp_type:type_name -> gw.FineTimestampType 2, // 29: gw.UplinkRxInfoLegacy.fine_timestamp_type:type_name -> gw.FineTimestampType
12, // 30: gw.UplinkRxInfoLegacy.encrypted_fine_timestamp:type_name -> gw.EncryptedFineTimestamp 12, // 30: gw.UplinkRxInfoLegacy.encrypted_fine_timestamp:type_name -> gw.EncryptedFineTimestamp
13, // 31: gw.UplinkRxInfoLegacy.plain_fine_timestamp:type_name -> gw.PlainFineTimestamp 13, // 31: gw.UplinkRxInfoLegacy.plain_fine_timestamp:type_name -> gw.PlainFineTimestamp
3, // 32: gw.UplinkRxInfoLegacy.crc_status:type_name -> gw.CRCStatus 3, // 32: gw.UplinkRxInfoLegacy.crc_status:type_name -> gw.CRCStatus
45, // 33: gw.UplinkRxInfoLegacy.metadata:type_name -> gw.UplinkRxInfoLegacy.MetadataEntry 47, // 33: gw.UplinkRxInfoLegacy.metadata:type_name -> gw.UplinkRxInfoLegacy.MetadataEntry
49, // 34: gw.UplinkRxInfo.gw_time:type_name -> google.protobuf.Timestamp 51, // 34: gw.UplinkRxInfo.gw_time:type_name -> google.protobuf.Timestamp
49, // 35: gw.UplinkRxInfo.ns_time:type_name -> google.protobuf.Timestamp 51, // 35: gw.UplinkRxInfo.ns_time:type_name -> google.protobuf.Timestamp
52, // 36: gw.UplinkRxInfo.time_since_gps_epoch:type_name -> google.protobuf.Duration 54, // 36: gw.UplinkRxInfo.time_since_gps_epoch:type_name -> google.protobuf.Duration
52, // 37: gw.UplinkRxInfo.fine_time_since_gps_epoch:type_name -> google.protobuf.Duration 54, // 37: gw.UplinkRxInfo.fine_time_since_gps_epoch:type_name -> google.protobuf.Duration
50, // 38: gw.UplinkRxInfo.location:type_name -> common.Location 52, // 38: gw.UplinkRxInfo.location:type_name -> common.Location
46, // 39: gw.UplinkRxInfo.metadata:type_name -> gw.UplinkRxInfo.MetadataEntry 48, // 39: gw.UplinkRxInfo.metadata:type_name -> gw.UplinkRxInfo.MetadataEntry
3, // 40: gw.UplinkRxInfo.crc_status:type_name -> gw.CRCStatus 3, // 40: gw.UplinkRxInfo.crc_status:type_name -> gw.CRCStatus
48, // 41: gw.DownlinkTxInfoLegacy.modulation:type_name -> common.Modulation 50, // 41: gw.DownlinkTxInfoLegacy.modulation:type_name -> common.Modulation
9, // 42: gw.DownlinkTxInfoLegacy.lora_modulation_info:type_name -> gw.LoraModulationInfo 9, // 42: gw.DownlinkTxInfoLegacy.lora_modulation_info:type_name -> gw.LoraModulationInfo
10, // 43: gw.DownlinkTxInfoLegacy.fsk_modulation_info:type_name -> gw.FskModulationInfo 10, // 43: gw.DownlinkTxInfoLegacy.fsk_modulation_info:type_name -> gw.FskModulationInfo
1, // 44: gw.DownlinkTxInfoLegacy.timing:type_name -> gw.DownlinkTiming 1, // 44: gw.DownlinkTxInfoLegacy.timing:type_name -> gw.DownlinkTiming
@@ -4285,8 +4449,8 @@ var file_gw_gw_proto_depIdxs = []int32{
23, // 50: gw.Timing.immediately:type_name -> gw.ImmediatelyTimingInfo 23, // 50: gw.Timing.immediately:type_name -> gw.ImmediatelyTimingInfo
24, // 51: gw.Timing.delay:type_name -> gw.DelayTimingInfo 24, // 51: gw.Timing.delay:type_name -> gw.DelayTimingInfo
25, // 52: gw.Timing.gps_epoch:type_name -> gw.GPSEpochTimingInfo 25, // 52: gw.Timing.gps_epoch:type_name -> gw.GPSEpochTimingInfo
52, // 53: gw.DelayTimingInfo.delay:type_name -> google.protobuf.Duration 54, // 53: gw.DelayTimingInfo.delay:type_name -> google.protobuf.Duration
52, // 54: gw.GPSEpochTimingInfo.time_since_gps_epoch:type_name -> google.protobuf.Duration 54, // 54: gw.GPSEpochTimingInfo.time_since_gps_epoch:type_name -> google.protobuf.Duration
7, // 55: gw.UplinkFrame.tx_info_legacy:type_name -> gw.UplinkTxInfoLegacy 7, // 55: gw.UplinkFrame.tx_info_legacy:type_name -> gw.UplinkTxInfoLegacy
18, // 56: gw.UplinkFrame.rx_info_legacy:type_name -> gw.UplinkRxInfoLegacy 18, // 56: gw.UplinkFrame.rx_info_legacy:type_name -> gw.UplinkRxInfoLegacy
8, // 57: gw.UplinkFrame.tx_info:type_name -> gw.UplinkTxInfo 8, // 57: gw.UplinkFrame.tx_info:type_name -> gw.UplinkTxInfo
@@ -4299,17 +4463,19 @@ var file_gw_gw_proto_depIdxs = []int32{
31, // 64: gw.DownlinkTxAck.items:type_name -> gw.DownlinkTxAckItem 31, // 64: gw.DownlinkTxAck.items:type_name -> gw.DownlinkTxAckItem
4, // 65: gw.DownlinkTxAckItem.status:type_name -> gw.TxAckStatus 4, // 65: gw.DownlinkTxAckItem.status:type_name -> gw.TxAckStatus
33, // 66: gw.GatewayConfiguration.channels:type_name -> gw.ChannelConfiguration 33, // 66: gw.GatewayConfiguration.channels:type_name -> gw.ChannelConfiguration
52, // 67: gw.GatewayConfiguration.stats_interval:type_name -> google.protobuf.Duration 54, // 67: gw.GatewayConfiguration.stats_interval:type_name -> google.protobuf.Duration
48, // 68: gw.ChannelConfiguration.modulation_legacy:type_name -> common.Modulation 50, // 68: gw.ChannelConfiguration.modulation_legacy:type_name -> common.Modulation
34, // 69: gw.ChannelConfiguration.lora_modulation_config:type_name -> gw.LoraModulationConfig 34, // 69: gw.ChannelConfiguration.lora_modulation_config:type_name -> gw.LoraModulationConfig
35, // 70: gw.ChannelConfiguration.fsk_modulation_config:type_name -> gw.FskModulationConfig 35, // 70: gw.ChannelConfiguration.fsk_modulation_config:type_name -> gw.FskModulationConfig
47, // 71: gw.GatewayCommandExecRequest.environment:type_name -> gw.GatewayCommandExecRequest.EnvironmentEntry 49, // 71: gw.GatewayCommandExecRequest.environment:type_name -> gw.GatewayCommandExecRequest.EnvironmentEntry
5, // 72: gw.ConnState.state:type_name -> gw.ConnState.State 5, // 72: gw.ConnState.state:type_name -> gw.ConnState.State
73, // [73:73] is the sub-list for method output_type 51, // 73: gw.MeshHeartbeat.time:type_name -> google.protobuf.Timestamp
73, // [73:73] is the sub-list for method input_type 42, // 74: gw.MeshHeartbeat.relay_path:type_name -> gw.MeshHeartbeatRelayPath
73, // [73:73] is the sub-list for extension type_name 75, // [75:75] is the sub-list for method output_type
73, // [73:73] is the sub-list for extension extendee 75, // [75:75] is the sub-list for method input_type
0, // [0:73] is the sub-list for field type_name 75, // [75:75] is the sub-list for extension type_name
75, // [75:75] is the sub-list for extension extendee
0, // [0:75] is the sub-list for field type_name
} }
func init() { file_gw_gw_proto_init() } func init() { file_gw_gw_proto_init() }
@@ -4738,6 +4904,30 @@ func file_gw_gw_proto_init() {
return nil return nil
} }
} }
file_gw_gw_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*MeshHeartbeat); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_gw_gw_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*MeshHeartbeatRelayPath); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
} }
file_gw_gw_proto_msgTypes[0].OneofWrappers = []interface{}{ file_gw_gw_proto_msgTypes[0].OneofWrappers = []interface{}{
(*Modulation_Lora)(nil), (*Modulation_Lora)(nil),
@@ -4775,7 +4965,7 @@ func file_gw_gw_proto_init() {
GoPackagePath: reflect.TypeOf(x{}).PkgPath(), GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_gw_gw_proto_rawDesc, RawDescriptor: file_gw_gw_proto_rawDesc,
NumEnums: 6, NumEnums: 6,
NumMessages: 42, NumMessages: 44,
NumExtensions: 0, NumExtensions: 0,
NumServices: 0, NumServices: 0,
}, },

View File

@@ -1,6 +1,6 @@
// Code generated by protoc-gen-go. DO NOT EDIT. // Code generated by protoc-gen-go. DO NOT EDIT.
// versions: // versions:
// protoc-gen-go v1.31.0 // protoc-gen-go v1.34.1
// protoc v4.24.4 // protoc v4.24.4
// source: integration/integration.proto // source: integration/integration.proto
@@ -1581,7 +1581,7 @@ var file_integration_integration_proto_rawDesc = []byte{
0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x47, 0x41, 0x54, 0x45, 0x57, 0x41, 0x59, 0x10, 0x08, 0x12, 0x18, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x47, 0x41, 0x54, 0x45, 0x57, 0x41, 0x59, 0x10, 0x08, 0x12, 0x18,
0x0a, 0x14, 0x52, 0x45, 0x4c, 0x41, 0x59, 0x5f, 0x4e, 0x45, 0x57, 0x5f, 0x45, 0x4e, 0x44, 0x5f, 0x0a, 0x14, 0x52, 0x45, 0x4c, 0x41, 0x59, 0x5f, 0x4e, 0x45, 0x57, 0x5f, 0x45, 0x4e, 0x44, 0x5f,
0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x10, 0x09, 0x12, 0x0e, 0x0a, 0x0a, 0x46, 0x5f, 0x43, 0x4e, 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x10, 0x09, 0x12, 0x0e, 0x0a, 0x0a, 0x46, 0x5f, 0x43, 0x4e,
0x54, 0x5f, 0x44, 0x4f, 0x57, 0x4e, 0x10, 0x0a, 0x42, 0x81, 0x01, 0x0a, 0x1d, 0x69, 0x6f, 0x2e, 0x54, 0x5f, 0x44, 0x4f, 0x57, 0x4e, 0x10, 0x0a, 0x42, 0xbf, 0x01, 0x0a, 0x1d, 0x69, 0x6f, 0x2e,
0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x69, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x69,
0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x10, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x10, 0x49, 0x6e, 0x74, 0x65,
0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x33, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x33,
@@ -1589,8 +1589,12 @@ var file_integration_integration_proto_rawDesc = []byte{
0x61, 0x72, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x61, 0x70, 0x61, 0x72, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x61, 0x70,
0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x34, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x34, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74,
0x69, 0x6f, 0x6e, 0xaa, 0x02, 0x16, 0x43, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x69, 0x6f, 0x6e, 0xaa, 0x02, 0x16, 0x43, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b,
0x2e, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0xca, 0x02, 0x16, 0x43,
0x6f, 0x74, 0x6f, 0x33, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5c, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72,
0x61, 0x74, 0x69, 0x6f, 0x6e, 0xe2, 0x02, 0x22, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64,
0x61, 0x74, 0x61, 0x5c, 0x43, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5c, 0x49,
0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74,
0x6f, 0x33,
} }
var ( var (

View File

@@ -1,6 +1,6 @@
// Code generated by protoc-gen-go. DO NOT EDIT. // Code generated by protoc-gen-go. DO NOT EDIT.
// versions: // versions:
// protoc-gen-go v1.31.0 // protoc-gen-go v1.34.1
// protoc v4.24.4 // protoc v4.24.4
// source: stream/api_request.proto // source: stream/api_request.proto
@@ -110,15 +110,18 @@ var file_stream_api_request_proto_rawDesc = []byte{
0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b,
0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a,
0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61,
0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x74, 0x0a, 0x18, 0x69, 0x6f, 0x2e, 0x63, 0x68, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0xa8, 0x01, 0x0a, 0x18, 0x69, 0x6f, 0x2e, 0x63,
0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x73, 0x74, 0x72, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x73, 0x74,
0x65, 0x61, 0x6d, 0x42, 0x0f, 0x41, 0x70, 0x69, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x72, 0x65, 0x61, 0x6d, 0x42, 0x0f, 0x41, 0x70, 0x69, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x31, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x31, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e,
0x6f, 0x6d, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x63, 0x68, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x63,
0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f,
0x76, 0x34, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0xaa, 0x02, 0x11, 0x43, 0x68, 0x69, 0x72, 0x2f, 0x76, 0x34, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0xaa, 0x02, 0x11, 0x43, 0x68, 0x69,
0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x06, 0x70, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0xca, 0x02,
0x72, 0x6f, 0x74, 0x6f, 0x33, 0x11, 0x43, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5c, 0x53, 0x74, 0x72, 0x65,
0x61, 0x6d, 0xe2, 0x02, 0x1d, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
0x5c, 0x43, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5c, 0x53, 0x74, 0x72, 0x65,
0x61, 0x6d, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
} }
var ( var (

View File

@@ -1,6 +1,6 @@
// Code generated by protoc-gen-go. DO NOT EDIT. // Code generated by protoc-gen-go. DO NOT EDIT.
// versions: // versions:
// protoc-gen-go v1.31.0 // protoc-gen-go v1.34.1
// protoc v4.24.4 // protoc v4.24.4
// source: stream/backend_interfaces.proto // source: stream/backend_interfaces.proto
@@ -170,16 +170,19 @@ var file_stream_backend_interfaces_proto_rawDesc = []byte{
0x72, 0x72, 0x6f, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x71, 0x75, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x71, 0x75,
0x65, 0x73, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x70, 0x65, 0x73, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x70,
0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52,
0x0c, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x42, 0x7b, 0x0a, 0x0c, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x42, 0xaf, 0x01,
0x18, 0x69, 0x6f, 0x2e, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x61, 0x0a, 0x18, 0x69, 0x6f, 0x2e, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e,
0x70, 0x69, 0x2e, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x42, 0x16, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x61, 0x70, 0x69, 0x2e, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x42, 0x16, 0x42, 0x61, 0x63, 0x6b,
0x6e, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x65, 0x6e, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x50, 0x72, 0x6f,
0x6f, 0x50, 0x01, 0x5a, 0x31, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x31, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d,
0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x63, 0x68, 0x69, 0x72,
0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x34, 0x2f, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x34,
0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0xaa, 0x02, 0x11, 0x43, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0xaa, 0x02, 0x11, 0x43, 0x68, 0x69, 0x72, 0x70, 0x73,
0x61, 0x63, 0x6b, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0xca, 0x02, 0x11, 0x43, 0x68,
0x6f, 0x33, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5c, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0xe2,
0x02, 0x1d, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5c, 0x43, 0x68,
0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5c, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x62,
0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
} }
var ( var (

View File

@@ -1,6 +1,6 @@
// Code generated by protoc-gen-go. DO NOT EDIT. // Code generated by protoc-gen-go. DO NOT EDIT.
// versions: // versions:
// protoc-gen-go v1.31.0 // protoc-gen-go v1.34.1
// protoc v4.24.4 // protoc v4.24.4
// source: stream/frame.proto // source: stream/frame.proto
@@ -328,15 +328,18 @@ var file_stream_frame_proto_rawDesc = []byte{
0x65, 0x78, 0x74, 0x46, 0x4f, 0x70, 0x74, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x70, 0x6c, 0x61, 0x69, 0x65, 0x78, 0x74, 0x46, 0x4f, 0x70, 0x74, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x70, 0x6c, 0x61, 0x69,
0x6e, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x66, 0x72, 0x6d, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x66, 0x72, 0x6d, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61,
0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65,
0x78, 0x74, 0x46, 0x72, 0x6d, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x42, 0x6f, 0x0a, 0x18, 0x78, 0x74, 0x46, 0x72, 0x6d, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x42, 0xa3, 0x01, 0x0a,
0x69, 0x6f, 0x2e, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x61, 0x70, 0x18, 0x69, 0x6f, 0x2e, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x61,
0x69, 0x2e, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x42, 0x0a, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x50, 0x70, 0x69, 0x2e, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x42, 0x0a, 0x46, 0x72, 0x61, 0x6d, 0x65,
0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x31, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x31, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e,
0x6f, 0x6d, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x63, 0x68, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x63,
0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f,
0x76, 0x34, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0xaa, 0x02, 0x11, 0x43, 0x68, 0x69, 0x72, 0x2f, 0x76, 0x34, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0xaa, 0x02, 0x11, 0x43, 0x68, 0x69,
0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x06, 0x70, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0xca, 0x02,
0x72, 0x6f, 0x74, 0x6f, 0x33, 0x11, 0x43, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5c, 0x53, 0x74, 0x72, 0x65,
0x61, 0x6d, 0xe2, 0x02, 0x1d, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
0x5c, 0x43, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5c, 0x53, 0x74, 0x72, 0x65,
0x61, 0x6d, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
} }
var ( var (

View File

@@ -1,6 +1,6 @@
// Code generated by protoc-gen-go. DO NOT EDIT. // Code generated by protoc-gen-go. DO NOT EDIT.
// versions: // versions:
// protoc-gen-go v1.31.0 // protoc-gen-go v1.34.1
// protoc v4.24.4 // protoc v4.24.4
// source: stream/meta.proto // source: stream/meta.proto
@@ -288,14 +288,17 @@ var file_stream_meta_proto_rawDesc = []byte{
0x4d, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x4d, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79,
0x70, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x70, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64,
0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x49, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x49,
0x64, 0x42, 0x6e, 0x0a, 0x18, 0x69, 0x6f, 0x2e, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x64, 0x42, 0xa2, 0x01, 0x0a, 0x18, 0x69, 0x6f, 0x2e, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74,
0x63, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x42, 0x09, 0x4d, 0x61, 0x63, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x42, 0x09,
0x65, 0x74, 0x61, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x31, 0x67, 0x69, 0x74, 0x68, 0x4d, 0x65, 0x74, 0x61, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x31, 0x67, 0x69, 0x74,
0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61,
0x6b, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x63, 0x6b, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x61, 0x70,
0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x34, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0xaa, 0x02, 0x11, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x34, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0xaa, 0x02,
0x43, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x11, 0x43, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x53, 0x74, 0x72, 0x65,
0x6d, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x61, 0x6d, 0xca, 0x02, 0x11, 0x43, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5c,
0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0xe2, 0x02, 0x1d, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61,
0x64, 0x61, 0x74, 0x61, 0x5c, 0x43, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5c,
0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
} }
var ( var (

0
api/grpc-web/.npmignore vendored Normal file
View File

View File

@@ -1,6 +1,6 @@
{ {
"name": "@chirpstack/chirpstack-api-grpc-web", "name": "@chirpstack/chirpstack-api-grpc-web",
"version": "4.8.0-test.2", "version": "4.9.0",
"description": "Chirpstack gRPC-web API", "description": "Chirpstack gRPC-web API",
"license": "MIT", "license": "MIT",
"devDependencies": { "devDependencies": {

View File

@@ -353,9 +353,9 @@ strip-ansi@^6.0.1:
ansi-regex "^5.0.1" ansi-regex "^5.0.1"
tar@^6.1.11: tar@^6.1.11:
version "6.1.15" version "6.2.1"
resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.15.tgz#c9738b0b98845a3b344d334b8fa3041aaba53a69" resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.1.tgz#717549c541bc3c2af15751bea94b1dd068d4b03a"
integrity sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A== integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==
dependencies: dependencies:
chownr "^2.0.0" chownr "^2.0.0"
fs-minipass "^2.0.0" fs-minipass "^2.0.0"

View File

@@ -8,7 +8,7 @@ plugins {
} }
group = "io.chirpstack" group = "io.chirpstack"
version = "4.8.0-test.2" version = "4.9.0"
repositories { repositories {
mavenCentral() mavenCentral()
@@ -21,10 +21,10 @@ buildscript {
} }
dependencies { dependencies {
api("io.grpc:grpc-protobuf:1.51.0") api("io.grpc:grpc-protobuf:1.59.1")
api("io.grpc:grpc-api:1.51.0") api("io.grpc:grpc-api:1.59.1")
api("io.grpc:grpc-stub:1.51.0") api("io.grpc:grpc-stub:1.59.1")
api("io.grpc:grpc-netty:1.51.0") api("io.grpc:grpc-netty:1.59.1")
implementation("javax.annotation:javax.annotation-api:1.3.2") implementation("javax.annotation:javax.annotation-api:1.3.2")
} }

0
api/js/.npmignore vendored Normal file
View File

2
api/js/package.json vendored
View File

@@ -1,6 +1,6 @@
{ {
"name": "@chirpstack/chirpstack-api", "name": "@chirpstack/chirpstack-api",
"version": "4.8.0-test.2", "version": "4.9.0",
"description": "Chirpstack JS and TS API", "description": "Chirpstack JS and TS API",
"license": "MIT", "license": "MIT",
"devDependencies": { "devDependencies": {

32
api/js/yarn.lock vendored
View File

@@ -3,21 +3,21 @@
"@grpc/grpc-js@^1.10.4": "@grpc/grpc-js@^1.10.4":
version "1.10.4" version "1.10.9"
resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-1.10.4.tgz#a33f743f69ed531e917c9eafb4fd8bc3e5f2e617" resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-1.10.9.tgz#468cc1549a3fe37b760a16745fb7685d91f4f10c"
integrity sha512-MqBisuxTkYvPFnEiu+dag3xG/NBUDzSbAFAWlzfkGnQkjVZ6by3h4atbBc+Ikqup1z5BfB4BN18gKWR1YyppNw== integrity sha512-5tcgUctCG0qoNyfChZifz2tJqbRbXVO9J7X6duFcOjY3HUNCxg5D0ZCK7EP9vIcZ0zRpLU9bWkyCqVCLZ46IbQ==
dependencies: dependencies:
"@grpc/proto-loader" "^0.7.10" "@grpc/proto-loader" "^0.7.13"
"@js-sdsl/ordered-map" "^4.4.2" "@js-sdsl/ordered-map" "^4.4.2"
"@grpc/proto-loader@^0.7.10": "@grpc/proto-loader@^0.7.13":
version "0.7.12" version "0.7.13"
resolved "https://registry.yarnpkg.com/@grpc/proto-loader/-/proto-loader-0.7.12.tgz#787b58e3e3771df30b1567c057b6ab89e3a42911" resolved "https://registry.yarnpkg.com/@grpc/proto-loader/-/proto-loader-0.7.13.tgz#f6a44b2b7c9f7b609f5748c6eac2d420e37670cf"
integrity sha512-DCVwMxqYzpUCiDMl7hQ384FqP4T3DbNpXU8pt681l3UWCip1WUiD5JrkImUwCB9a7f2cq4CUTmi5r/xIMRPY1Q== integrity sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw==
dependencies: dependencies:
lodash.camelcase "^4.3.0" lodash.camelcase "^4.3.0"
long "^5.0.0" long "^5.0.0"
protobufjs "^7.2.4" protobufjs "^7.2.5"
yargs "^17.7.2" yargs "^17.7.2"
"@js-sdsl/ordered-map@^4.4.2": "@js-sdsl/ordered-map@^4.4.2":
@@ -410,10 +410,10 @@ path-is-absolute@^1.0.0:
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==
protobufjs@^7.2.4: protobufjs@^7.2.5:
version "7.2.4" version "7.3.0"
resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-7.2.4.tgz#3fc1ec0cdc89dd91aef9ba6037ba07408485c3ae" resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-7.3.0.tgz#a32ec0422c039798c41a0700306a6e305b9cb32c"
integrity sha512-AT+RJgD2sH8phPmCf7OUZR8xGdcJRga4+1cOaXJ64hvcSkVhNcRHOwIxUatPH15+nj59WAGTDv3LSGZPEQbJaQ== integrity sha512-YWD03n3shzV9ImZRX3ccbjqLxj7NokGN0V/ESiBV5xWqrommYHYiihuIyavq03pWSGqlyvYUFmfoMKd+1rPA/g==
dependencies: dependencies:
"@protobufjs/aspromise" "^1.1.2" "@protobufjs/aspromise" "^1.1.2"
"@protobufjs/base64" "^1.1.2" "@protobufjs/base64" "^1.1.2"
@@ -500,9 +500,9 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1:
ansi-regex "^5.0.1" ansi-regex "^5.0.1"
tar@^6.1.11: tar@^6.1.11:
version "6.1.15" version "6.2.1"
resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.15.tgz#c9738b0b98845a3b344d334b8fa3041aaba53a69" resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.1.tgz#717549c541bc3c2af15751bea94b1dd068d4b03a"
integrity sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A== integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==
dependencies: dependencies:
chownr "^2.0.0" chownr "^2.0.0"
fs-minipass "^2.0.0" fs-minipass "^2.0.0"

View File

@@ -9,7 +9,7 @@ plugins {
} }
group = "io.chirpstack" group = "io.chirpstack"
version = "4.8.0-test.2" version = "4.9.0"
repositories { repositories {
mavenCentral() mavenCentral()

1
api/php/.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
/generated

40
api/php/Makefile vendored Normal file
View File

@@ -0,0 +1,40 @@
.PHONY: requirements common gw api integration stream google
PROTOC_ARGS := -I=../proto --grpc_out=./generated --plugin=protoc-gen-grpc=/usr/bin/grpc_php_plugin --php_out=./generated
all: requirements common gw api integration stream google
requirements:
rm -rf generated
mkdir generated
common:
protoc ${PROTOC_ARGS} common/common.proto
gw:
protoc ${PROTOC_ARGS} gw/gw.proto
api:
protoc ${PROTOC_ARGS} api/internal.proto
protoc ${PROTOC_ARGS} api/user.proto
protoc ${PROTOC_ARGS} api/tenant.proto
protoc ${PROTOC_ARGS} api/application.proto
protoc ${PROTOC_ARGS} api/device_profile.proto
protoc ${PROTOC_ARGS} api/device_profile_template.proto
protoc ${PROTOC_ARGS} api/device.proto
protoc ${PROTOC_ARGS} api/gateway.proto
protoc ${PROTOC_ARGS} api/multicast_group.proto
protoc ${PROTOC_ARGS} api/relay.proto
integration:
protoc ${PROTOC_ARGS} integration/integration.proto
stream:
protoc ${PROTOC_ARGS} stream/meta.proto
protoc ${PROTOC_ARGS} stream/frame.proto
protoc ${PROTOC_ARGS} stream/api_request.proto
protoc ${PROTOC_ARGS} stream/backend_interfaces.proto
google:
protoc ${PROTOC_ARGS} google/api/annotations.proto
protoc ${PROTOC_ARGS} google/api/http.proto

44
api/php/README.md vendored Normal file
View File

@@ -0,0 +1,44 @@
# chirpstack-api
ChirpStack gRPC API message and service wrappers for PHP.
## Install
With composer:
```sh
composer require chirpstack/chirpstack-api
```
## Usage
All messages, services, constants, etc. are auto-generated from the ChirpStack protobuf definitions. The result is that
this package structure matches that of the protobuf definitions.
The protobuf definitions can be found here: https://github.com/chirpstack/chirpstack/tree/master/api/proto
## Example
```php
<?php
namespace Test;
use Chirpstack\API\ApplicationServiceClient;
use Chirpstack\API\ListApplicationsRequest;
use Grpc\Channel;
use Grpc\ChannelCredentials;
require dirname(__FILE__) . '/vendor/autoload.php';
function main() {
$channel = new Channel('url', ['credentials' => ChannelCredentials::createInsecure()]);
$client = new ApplicationServiceClient('url', [], $channel);
$request = new ListApplicationsRequest();
$response = $client->List($request);
$data = $response->wait();
print_r($data);
}
main();
```

23
api/php/composer.json vendored Normal file
View File

@@ -0,0 +1,23 @@
{
"name": "chirpstack/chirpstack-api",
"description": "Chirpstack PHP API",
"license": "MIT",
"type": "library",
"version": "4.9.0",
"require": {
"php": ">=7.0.0",
"grpc/grpc": "^v1.57.0",
"google/protobuf": "^v4.27.1"
},
"suggest": {
"ext-grpc": "To make it all work"
},
"autoload": {
"psr-4": {
"Chirpstack\\": "generated/Chirpstack/",
"Google\\": "generated/Google/",
"GPBMetadata\\Chirpstack\\": "generated/GPBMetadata/Chirpstack/",
"GPBMetadata\\Google\\": "generated/GPBMetadata/Google/"
}
}
}

View File

@@ -7,6 +7,8 @@ option java_package = "io.chirpstack.api";
option java_multiple_files = true; option java_multiple_files = true;
option java_outer_classname = "ApplicationProto"; option java_outer_classname = "ApplicationProto";
option csharp_namespace = "Chirpstack.Api"; option csharp_namespace = "Chirpstack.Api";
option php_namespace = "Chirpstack\\Api";
option php_metadata_namespace = "GPBMetadata\\Chirpstack\\Api";
import "google/api/annotations.proto"; import "google/api/annotations.proto";
import "google/protobuf/timestamp.proto"; import "google/protobuf/timestamp.proto";

View File

@@ -7,6 +7,8 @@ option java_package = "io.chirpstack.api";
option java_multiple_files = true; option java_multiple_files = true;
option java_outer_classname = "DeviceProto"; option java_outer_classname = "DeviceProto";
option csharp_namespace = "Chirpstack.Api"; option csharp_namespace = "Chirpstack.Api";
option php_namespace = "Chirpstack\\Api";
option php_metadata_namespace = "GPBMetadata\\Chirpstack\\Api";
import "common/common.proto"; import "common/common.proto";
import "google/api/annotations.proto"; import "google/api/annotations.proto";
@@ -382,6 +384,8 @@ message DeviceActivation {
string app_s_key = 3; string app_s_key = 3;
// Network session encryption key (HEX encoded). // Network session encryption key (HEX encoded).
// Note: For ABP in LoRaWAN 1.0.x, use this, the serving and the forwarding
// network session integrity key fields with the LoRaWAN 1.0.x 'NwkSKey`!
string nwk_s_enc_key = 4; string nwk_s_enc_key = 4;
// Serving network session integrity key (HEX encoded). // Serving network session integrity key (HEX encoded).

View File

@@ -7,6 +7,8 @@ option java_package = "io.chirpstack.api";
option java_multiple_files = true; option java_multiple_files = true;
option java_outer_classname = "DeviceProfileProto"; option java_outer_classname = "DeviceProfileProto";
option csharp_namespace = "Chirpstack.Api"; option csharp_namespace = "Chirpstack.Api";
option php_namespace = "Chirpstack\\Api";
option php_metadata_namespace = "GPBMetadata\\Chirpstack\\Api";
import "google/api/annotations.proto"; import "google/api/annotations.proto";
import "google/protobuf/timestamp.proto"; import "google/protobuf/timestamp.proto";
@@ -410,6 +412,15 @@ message DeviceProfile {
// //
// If set to true, it means that the device is allowed to use roaming. // If set to true, it means that the device is allowed to use roaming.
bool allow_roaming = 52; bool allow_roaming = 52;
// RX1 Delay.
//
// This makes it possible to override the system RX1 Delay. Please note that
// this values only has effect in case it is higher than the system value.
// In other words, it can be used to increase the RX1 Delay but not to decrease
// it.
// Valid options are 1 - 15 (0 = always use system RX1 Delay).
uint32 rx1_delay = 53;
} }
message Measurement { message Measurement {

View File

@@ -7,6 +7,8 @@ option java_package = "io.chirpstack.api";
option java_multiple_files = true; option java_multiple_files = true;
option java_outer_classname = "DeviceProfileTemplateProto"; option java_outer_classname = "DeviceProfileTemplateProto";
option csharp_namespace = "Chirpstack.Api"; option csharp_namespace = "Chirpstack.Api";
option php_namespace = "Chirpstack\\Api";
option php_metadata_namespace = "GPBMetadata\\Chirpstack\\Api";
import "google/api/annotations.proto"; import "google/api/annotations.proto";
import "google/protobuf/timestamp.proto"; import "google/protobuf/timestamp.proto";

View File

@@ -7,6 +7,8 @@ option java_package = "io.chirpstack.api";
option java_multiple_files = true; option java_multiple_files = true;
option java_outer_classname = "GatewayProto"; option java_outer_classname = "GatewayProto";
option csharp_namespace = "Chirpstack.Api"; option csharp_namespace = "Chirpstack.Api";
option php_namespace = "Chirpstack\\Api";
option php_metadata_namespace = "GPBMetadata\\Chirpstack\\Api";
import "google/api/annotations.proto"; import "google/api/annotations.proto";
import "google/protobuf/timestamp.proto"; import "google/protobuf/timestamp.proto";
@@ -65,6 +67,43 @@ service GatewayService {
get: "/api/gateways/{gateway_id}/metrics" get: "/api/gateways/{gateway_id}/metrics"
}; };
} }
// GetDutyCycleMetrics returns the duty-cycle metrics.
// Note that only the last 2 hours of data are stored. Currently only per minute aggregation is available.
rpc GetDutyCycleMetrics(GetGatewayDutyCycleMetricsRequest) returns (GetGatewayDutyCycleMetricsResponse) {
option(google.api.http) = {
get: "/api/gateways/{gateway_id}/duty-cycle-metrics"
};
}
// Get the given Relay Gateway.
rpc GetRelayGateway(GetRelayGatewayRequest) returns (GetRelayGatewayResponse) {
option(google.api.http) = {
get: "/api/gateways/relay-gateways/{tenant_id}/{relay_id}"
};
}
// List the detected Relay Gateways.
rpc ListRelayGateways(ListRelayGatewaysRequest) returns (ListRelayGatewaysResponse) {
option(google.api.http) = {
get: "/api/gateways/relay-gateways"
};
}
// Update the given Relay Gateway.
rpc UpdateRelayGateway(UpdateRelayGatewayRequest) returns (google.protobuf.Empty) {
option(google.api.http) = {
put: "/api/gateways/relay-gateways/{relay_gateway.tenant_id}/{relay_gateway.relay_id}"
body: "*"
};
}
// Delete the given Relay Gateway.
rpc DeleteRelayGateway(DeleteRelayGatewayRequest) returns (google.protobuf.Empty) {
option(google.api.http) = {
delete: "/api/gateways/relay-gateways/{tenant_id}/{relay_id}"
};
}
} }
enum GatewayState { enum GatewayState {
@@ -125,11 +164,11 @@ message GatewayListItem {
// Gateway properties. // Gateway properties.
map<string, string> properties = 6; map<string, string> properties = 6;
// Created at timestamp. // Created at timestamp.
google.protobuf.Timestamp created_at = 7; google.protobuf.Timestamp created_at = 7;
// Last update timestamp. // Last update timestamp.
google.protobuf.Timestamp updated_at = 8; google.protobuf.Timestamp updated_at = 8;
// Last seen at timestamp. // Last seen at timestamp.
google.protobuf.Timestamp last_seen_at = 9; google.protobuf.Timestamp last_seen_at = 9;
@@ -255,3 +294,130 @@ message GetGatewayMetricsResponse {
// TX packets per status. // TX packets per status.
common.Metric tx_packets_per_status = 7; common.Metric tx_packets_per_status = 7;
} }
message GetGatewayDutyCycleMetricsRequest {
// Gateway ID (EUI64).
string gateway_id = 1;
// Interval start timestamp.
google.protobuf.Timestamp start = 2;
// Interval end timestamp.
google.protobuf.Timestamp end = 3;
}
message GetGatewayDutyCycleMetricsResponse {
// Percentage relative to max load.
common.Metric max_load_percentage = 1;
// Percentage relative to tracking window.
common.Metric window_percentage = 2;
}
message GetRelayGatewayRequest {
// Tenant ID (UUID).
string tenant_id = 1;
// Relay ID (4 byte HEX).
string relay_id = 2;
}
message GetRelayGatewayResponse {
// Relay Gateway object.
RelayGateway relay_gateway = 1;
// Created at timestamp.
google.protobuf.Timestamp created_at = 2;
// Last update timestamp.
google.protobuf.Timestamp updated_at = 3;
// Last seen at timestamp.
google.protobuf.Timestamp last_seen_at = 4;
}
message ListRelayGatewaysRequest {
// Max number of relay-gateways to return in the result-set.
uint32 limit = 1;
// Offset in the result-set (for pagination).
uint32 offset = 2;
// Tenant ID (UUID) to filter relay-gateways on.
// To list all relay-gateways as a global admin user, this field can be left blank.
string tenant_id = 3;
}
message ListRelayGatewaysResponse {
// Total number of relay-gateways.
uint32 total_count = 1;
// Result-set.
repeated RelayGatewayListItem result = 2;
}
message RelayGatewayListItem {
// Tenant ID.
string tenant_id = 1;
// Relay ID (4 byte HEX).
string relay_id = 2;
// Name.
string name = 3;
// Description.
string description = 4;
// Created at timestamp.
google.protobuf.Timestamp created_at = 5;
// Last update timestamp.
google.protobuf.Timestamp updated_at = 6;
// Last seen at timestamp.
google.protobuf.Timestamp last_seen_at = 7;
// Gateway state.
// Please note that the state of the relay is driven by the last
// received stats packet sent by the relay-gateway.
GatewayState state = 10;
// Region configuration ID.
string region_config_id = 11;
}
message UpdateRelayGatewayRequest {
// Relay Gateway object.
RelayGateway relay_gateway = 1;
}
message DeleteRelayGatewayRequest {
// Tenant ID.
string tenant_id = 1;
// Relay ID (4 byte HEX).
string relay_id = 2;
}
message RelayGateway {
// Tenant ID.
string tenant_id = 1;
// Relay ID (4 byte HEX).
string relay_id = 2;
// Name.
string name = 3;
// Description.
string description = 4;
// Stats interval (seconds).
// This defines the expected interval in which the gateway sends its
// statistics.
uint32 stats_interval = 5;
// Region configuration ID.
string region_config_id = 6;
}

View File

@@ -7,6 +7,8 @@ option java_package = "io.chirpstack.api";
option java_multiple_files = true; option java_multiple_files = true;
option java_outer_classname = "InternalProto"; option java_outer_classname = "InternalProto";
option csharp_namespace = "Chirpstack.Api"; option csharp_namespace = "Chirpstack.Api";
option php_namespace = "Chirpstack\\Api";
option php_metadata_namespace = "GPBMetadata\\Chirpstack\\Api";
import "google/protobuf/timestamp.proto"; import "google/protobuf/timestamp.proto";
import "google/protobuf/empty.proto"; import "google/protobuf/empty.proto";
@@ -221,6 +223,12 @@ message SettingsResponse {
// OAuth2 settings. // OAuth2 settings.
OAuth2 oauth2 = 2; OAuth2 oauth2 = 2;
// Tileserver URL.
string tileserver_url = 3;
// Map attribution.
string map_attribution = 4;
} }
message OpenIdConnect { message OpenIdConnect {

View File

@@ -7,6 +7,8 @@ option java_package = "io.chirpstack.api";
option java_multiple_files = true; option java_multiple_files = true;
option java_outer_classname = "MulticastGroupProto"; option java_outer_classname = "MulticastGroupProto";
option csharp_namespace = "Chirpstack.Api"; option csharp_namespace = "Chirpstack.Api";
option php_namespace = "Chirpstack\\Api";
option php_metadata_namespace = "GPBMetadata\\Chirpstack\\Api";
import "google/api/annotations.proto"; import "google/api/annotations.proto";
import "google/protobuf/timestamp.proto"; import "google/protobuf/timestamp.proto";

View File

@@ -7,6 +7,8 @@ option java_package = "io.chirpstack.api";
option java_multiple_files = true; option java_multiple_files = true;
option java_outer_classname = "RelayProto"; option java_outer_classname = "RelayProto";
option csharp_namespace = "Chirpstack.Api"; option csharp_namespace = "Chirpstack.Api";
option php_namespace = "Chirpstack\\Api";
option php_metadata_namespace = "GPBMetadata\\Chirpstack\\Api";
import "google/api/annotations.proto"; import "google/api/annotations.proto";
import "google/protobuf/timestamp.proto"; import "google/protobuf/timestamp.proto";

View File

@@ -7,6 +7,8 @@ option java_package = "io.chirpstack.api";
option java_multiple_files = true; option java_multiple_files = true;
option java_outer_classname = "TenantProto"; option java_outer_classname = "TenantProto";
option csharp_namespace = "Chirpstack.Api"; option csharp_namespace = "Chirpstack.Api";
option php_namespace = "Chirpstack\\Api";
option php_metadata_namespace = "GPBMetadata\\Chirpstack\\Api";
import "google/api/annotations.proto"; import "google/api/annotations.proto";
import "google/protobuf/timestamp.proto"; import "google/protobuf/timestamp.proto";

View File

@@ -7,6 +7,8 @@ option java_package = "io.chirpstack.api";
option java_multiple_files = true; option java_multiple_files = true;
option java_outer_classname = "UserProto"; option java_outer_classname = "UserProto";
option csharp_namespace = "Chirpstack.Api"; option csharp_namespace = "Chirpstack.Api";
option php_namespace = "Chirpstack\\Api";
option php_metadata_namespace = "GPBMetadata\\Chirpstack\\Api";
import "google/api/annotations.proto"; import "google/api/annotations.proto";
import "google/protobuf/timestamp.proto"; import "google/protobuf/timestamp.proto";

View File

@@ -7,6 +7,8 @@ option java_package = "io.chirpstack.api";
option java_multiple_files = true; option java_multiple_files = true;
option java_outer_classname = "CommonProto"; option java_outer_classname = "CommonProto";
option csharp_namespace = "Chirpstack.Common"; option csharp_namespace = "Chirpstack.Common";
option php_namespace = "Chirpstack\\Common";
option php_metadata_namespace = "GPBMetadata\\Chirpstack\\Common";
import "google/protobuf/timestamp.proto"; import "google/protobuf/timestamp.proto";
@@ -107,6 +109,7 @@ enum RegParamsRevision {
RP002_1_0_1 = 3; RP002_1_0_1 = 3;
RP002_1_0_2 = 4; RP002_1_0_2 = 4;
RP002_1_0_3 = 5; RP002_1_0_3 = 5;
RP002_1_0_4 = 6;
} }
enum LocationSource { enum LocationSource {
@@ -141,6 +144,9 @@ enum Aggregation {
// Month. // Month.
MONTH = 2; MONTH = 2;
// Minute.
MINUTE = 3;
} }
enum MetricKind { enum MetricKind {

28
api/proto/gw/gw.proto vendored
View File

@@ -7,6 +7,8 @@ option java_package = "io.chirpstack.api.gw";
option java_multiple_files = true; option java_multiple_files = true;
option java_outer_classname = "GatewayProto"; option java_outer_classname = "GatewayProto";
option csharp_namespace = "Chirpstack.Gateway"; option csharp_namespace = "Chirpstack.Gateway";
option php_namespace = "Chirpstack\\Gateway";
option php_metadata_namespace = "GPBMetadata\\Chirpstack\\Gateway";
import "common/common.proto"; import "common/common.proto";
import "google/protobuf/timestamp.proto"; import "google/protobuf/timestamp.proto";
@@ -747,3 +749,29 @@ message ConnState {
State state = 2; State state = 2;
} }
// Gateway Mesh heartbeat (sent periodically by the Relay Gateways).
message MeshHeartbeat {
// Gateway ID (of the Border Gateway).
string gateway_id = 1;
// Relay ID.
string relay_id = 2;
// Timestamp (second precision).
google.protobuf.Timestamp time = 3;
// Relay path.
repeated MeshHeartbeatRelayPath relay_path = 4;
}
message MeshHeartbeatRelayPath {
// Relay ID.
string relay_id = 1;
// RSSI.
int32 rssi = 2;
// SNR.
int32 snr = 3;
}

View File

@@ -7,6 +7,8 @@ option java_package = "io.chirpstack.api.integration";
option java_multiple_files = true; option java_multiple_files = true;
option java_outer_classname = "IntegrationProto"; option java_outer_classname = "IntegrationProto";
option csharp_namespace = "Chirpstack.Integration"; option csharp_namespace = "Chirpstack.Integration";
option php_namespace = "Chirpstack\\Integration";
option php_metadata_namespace = "GPBMetadata\\Chirpstack\\Integration";
import "common/common.proto"; import "common/common.proto";
import "gw/gw.proto"; import "gw/gw.proto";

View File

@@ -7,6 +7,8 @@ option java_package = "io.chirpstack.api.stream";
option java_multiple_files = true; option java_multiple_files = true;
option java_outer_classname = "ApiRequestProto"; option java_outer_classname = "ApiRequestProto";
option csharp_namespace = "Chirpstack.Stream"; option csharp_namespace = "Chirpstack.Stream";
option php_namespace = "Chirpstack\\Stream";
option php_metadata_namespace = "GPBMetadata\\Chirpstack\\Stream";
import "google/protobuf/timestamp.proto"; import "google/protobuf/timestamp.proto";
import "common/common.proto"; import "common/common.proto";

View File

@@ -7,6 +7,8 @@ option java_package = "io.chirpstack.api.stream";
option java_multiple_files = true; option java_multiple_files = true;
option java_outer_classname = "BackendInterfacesProto"; option java_outer_classname = "BackendInterfacesProto";
option csharp_namespace = "Chirpstack.Stream"; option csharp_namespace = "Chirpstack.Stream";
option php_namespace = "Chirpstack\\Stream";
option php_metadata_namespace = "GPBMetadata\\Chirpstack\\Stream";
import "google/protobuf/timestamp.proto"; import "google/protobuf/timestamp.proto";

View File

@@ -7,6 +7,8 @@ option java_package = "io.chirpstack.api.stream";
option java_multiple_files = true; option java_multiple_files = true;
option java_outer_classname = "FrameProto"; option java_outer_classname = "FrameProto";
option csharp_namespace = "Chirpstack.Stream"; option csharp_namespace = "Chirpstack.Stream";
option php_namespace = "Chirpstack\\Stream";
option php_metadata_namespace = "GPBMetadata\\Chirpstack\\Stream";
import "google/protobuf/timestamp.proto"; import "google/protobuf/timestamp.proto";
import "common/common.proto"; import "common/common.proto";

View File

@@ -7,6 +7,8 @@ option java_package = "io.chirpstack.api.stream";
option java_multiple_files = true; option java_multiple_files = true;
option java_outer_classname = "MetaProto"; option java_outer_classname = "MetaProto";
option csharp_namespace = "Chirpstack.Stream"; option csharp_namespace = "Chirpstack.Stream";
option php_namespace = "Chirpstack\\Stream";
option php_metadata_namespace = "GPBMetadata\\Chirpstack\\Stream";
import "common/common.proto"; import "common/common.proto";
import "gw/gw.proto"; import "gw/gw.proto";

View File

@@ -6,8 +6,6 @@ from .device_profile_pb2 import *
from .device_profile_pb2_grpc import * from .device_profile_pb2_grpc import *
from .device_profile_template_pb2 import * from .device_profile_template_pb2 import *
from .device_profile_template_pb2_grpc import * from .device_profile_template_pb2_grpc import *
from .frame_log_pb2 import *
from .frame_log_pb2_grpc import *
from .gateway_pb2 import * from .gateway_pb2 import *
from .gateway_pb2_grpc import * from .gateway_pb2_grpc import *
from .internal_pb2 import * from .internal_pb2 import *

View File

@@ -18,7 +18,7 @@ CLASSIFIERS = [
setup( setup(
name='chirpstack-api', name='chirpstack-api',
version = "4.8.0-test.2", version = "4.9.0",
url='https://github.com/brocaar/chirpstack-api', url='https://github.com/brocaar/chirpstack-api',
author='Orne Brocaar', author='Orne Brocaar',
author_email='info@brocaar.com', author_email='info@brocaar.com',

55
api/rust/Cargo.toml vendored
View File

@@ -1,33 +1,38 @@
[package] [package]
name = "chirpstack_api" name = "chirpstack_api"
description = "ChirpStack Protobuf / gRPC API definitions." description = "ChirpStack Protobuf / gRPC API definitions."
version = "4.8.0-test.2" version = "4.9.0"
authors = ["Orne Brocaar <info@brocaar.com>"] authors = ["Orne Brocaar <info@brocaar.com>"]
license = "MIT" license = "MIT"
homepage = "https://www.chirpstack.io" homepage = "https://www.chirpstack.io"
repository = "https://github.com/chirpstack/chirpstack" repository = "https://github.com/chirpstack/chirpstack"
edition = "2021" edition = "2021"
[features] [features]
default = ["api", "json"] default = ["api", "json"]
api = ["tonic/transport", "tonic-build/transport", "tokio"] api = ["tonic/transport", "tonic-build/transport", "tokio"]
json = ["pbjson", "pbjson-types", "serde"] json = ["pbjson", "pbjson-types", "serde"]
diesel = ["dep:diesel"] diesel = ["dep:diesel"]
internal = [] internal = []
[dependencies] [dependencies]
prost = "0.12" prost = "0.13"
prost-types = "0.12" prost-types = "0.13"
hex = "0.4" hex = "0.4"
rand = "0.8" rand = "0.8"
tonic = { version = "0.11", features = ["codegen", "prost"], default-features = false, optional = true } tonic = { version = "0.12", features = [
tokio = { version = "1.37", features = ["macros"], optional = true } "codegen",
pbjson = { version = "0.6", optional = true } "prost",
pbjson-types = { version = "0.6", optional = true } ], default-features = false, optional = true }
serde = { version = "1.0", optional = true } tokio = { version = "1.38", features = ["macros"], optional = true }
diesel = { version = "2.1", features = ["postgres_backend"], optional = true } pbjson = { version = "0.7", optional = true }
pbjson-types = { version = "0.7", optional = true }
serde = { version = "1.0", optional = true }
diesel = { version = "2.2", features = ["postgres_backend"], optional = true }
[build-dependencies] [build-dependencies]
tonic-build = { version = "0.11", features = ["prost"], default-features = false } tonic-build = { version = "0.12", features = [
pbjson-build = "0.6" "prost",
], default-features = false }
pbjson-build = "0.7"

View File

@@ -7,6 +7,8 @@ option java_package = "io.chirpstack.api";
option java_multiple_files = true; option java_multiple_files = true;
option java_outer_classname = "ApplicationProto"; option java_outer_classname = "ApplicationProto";
option csharp_namespace = "Chirpstack.Api"; option csharp_namespace = "Chirpstack.Api";
option php_namespace = "Chirpstack\\Api";
option php_metadata_namespace = "GPBMetadata\\Chirpstack\\Api";
import "google/api/annotations.proto"; import "google/api/annotations.proto";
import "google/protobuf/timestamp.proto"; import "google/protobuf/timestamp.proto";

View File

@@ -7,6 +7,8 @@ option java_package = "io.chirpstack.api";
option java_multiple_files = true; option java_multiple_files = true;
option java_outer_classname = "DeviceProto"; option java_outer_classname = "DeviceProto";
option csharp_namespace = "Chirpstack.Api"; option csharp_namespace = "Chirpstack.Api";
option php_namespace = "Chirpstack\\Api";
option php_metadata_namespace = "GPBMetadata\\Chirpstack\\Api";
import "common/common.proto"; import "common/common.proto";
import "google/api/annotations.proto"; import "google/api/annotations.proto";
@@ -382,6 +384,8 @@ message DeviceActivation {
string app_s_key = 3; string app_s_key = 3;
// Network session encryption key (HEX encoded). // Network session encryption key (HEX encoded).
// Note: For ABP in LoRaWAN 1.0.x, use this, the serving and the forwarding
// network session integrity key fields with the LoRaWAN 1.0.x 'NwkSKey`!
string nwk_s_enc_key = 4; string nwk_s_enc_key = 4;
// Serving network session integrity key (HEX encoded). // Serving network session integrity key (HEX encoded).

View File

@@ -7,6 +7,8 @@ option java_package = "io.chirpstack.api";
option java_multiple_files = true; option java_multiple_files = true;
option java_outer_classname = "DeviceProfileProto"; option java_outer_classname = "DeviceProfileProto";
option csharp_namespace = "Chirpstack.Api"; option csharp_namespace = "Chirpstack.Api";
option php_namespace = "Chirpstack\\Api";
option php_metadata_namespace = "GPBMetadata\\Chirpstack\\Api";
import "google/api/annotations.proto"; import "google/api/annotations.proto";
import "google/protobuf/timestamp.proto"; import "google/protobuf/timestamp.proto";
@@ -410,6 +412,15 @@ message DeviceProfile {
// //
// If set to true, it means that the device is allowed to use roaming. // If set to true, it means that the device is allowed to use roaming.
bool allow_roaming = 52; bool allow_roaming = 52;
// RX1 Delay.
//
// This makes it possible to override the system RX1 Delay. Please note that
// this values only has effect in case it is higher than the system value.
// In other words, it can be used to increase the RX1 Delay but not to decrease
// it.
// Valid options are 1 - 15 (0 = always use system RX1 Delay).
uint32 rx1_delay = 53;
} }
message Measurement { message Measurement {

View File

@@ -7,6 +7,8 @@ option java_package = "io.chirpstack.api";
option java_multiple_files = true; option java_multiple_files = true;
option java_outer_classname = "DeviceProfileTemplateProto"; option java_outer_classname = "DeviceProfileTemplateProto";
option csharp_namespace = "Chirpstack.Api"; option csharp_namespace = "Chirpstack.Api";
option php_namespace = "Chirpstack\\Api";
option php_metadata_namespace = "GPBMetadata\\Chirpstack\\Api";
import "google/api/annotations.proto"; import "google/api/annotations.proto";
import "google/protobuf/timestamp.proto"; import "google/protobuf/timestamp.proto";

View File

@@ -7,6 +7,8 @@ option java_package = "io.chirpstack.api";
option java_multiple_files = true; option java_multiple_files = true;
option java_outer_classname = "GatewayProto"; option java_outer_classname = "GatewayProto";
option csharp_namespace = "Chirpstack.Api"; option csharp_namespace = "Chirpstack.Api";
option php_namespace = "Chirpstack\\Api";
option php_metadata_namespace = "GPBMetadata\\Chirpstack\\Api";
import "google/api/annotations.proto"; import "google/api/annotations.proto";
import "google/protobuf/timestamp.proto"; import "google/protobuf/timestamp.proto";
@@ -65,6 +67,43 @@ service GatewayService {
get: "/api/gateways/{gateway_id}/metrics" get: "/api/gateways/{gateway_id}/metrics"
}; };
} }
// GetDutyCycleMetrics returns the duty-cycle metrics.
// Note that only the last 2 hours of data are stored. Currently only per minute aggregation is available.
rpc GetDutyCycleMetrics(GetGatewayDutyCycleMetricsRequest) returns (GetGatewayDutyCycleMetricsResponse) {
option(google.api.http) = {
get: "/api/gateways/{gateway_id}/duty-cycle-metrics"
};
}
// Get the given Relay Gateway.
rpc GetRelayGateway(GetRelayGatewayRequest) returns (GetRelayGatewayResponse) {
option(google.api.http) = {
get: "/api/gateways/relay-gateways/{tenant_id}/{relay_id}"
};
}
// List the detected Relay Gateways.
rpc ListRelayGateways(ListRelayGatewaysRequest) returns (ListRelayGatewaysResponse) {
option(google.api.http) = {
get: "/api/gateways/relay-gateways"
};
}
// Update the given Relay Gateway.
rpc UpdateRelayGateway(UpdateRelayGatewayRequest) returns (google.protobuf.Empty) {
option(google.api.http) = {
put: "/api/gateways/relay-gateways/{relay_gateway.tenant_id}/{relay_gateway.relay_id}"
body: "*"
};
}
// Delete the given Relay Gateway.
rpc DeleteRelayGateway(DeleteRelayGatewayRequest) returns (google.protobuf.Empty) {
option(google.api.http) = {
delete: "/api/gateways/relay-gateways/{tenant_id}/{relay_id}"
};
}
} }
enum GatewayState { enum GatewayState {
@@ -125,11 +164,11 @@ message GatewayListItem {
// Gateway properties. // Gateway properties.
map<string, string> properties = 6; map<string, string> properties = 6;
// Created at timestamp. // Created at timestamp.
google.protobuf.Timestamp created_at = 7; google.protobuf.Timestamp created_at = 7;
// Last update timestamp. // Last update timestamp.
google.protobuf.Timestamp updated_at = 8; google.protobuf.Timestamp updated_at = 8;
// Last seen at timestamp. // Last seen at timestamp.
google.protobuf.Timestamp last_seen_at = 9; google.protobuf.Timestamp last_seen_at = 9;
@@ -255,3 +294,130 @@ message GetGatewayMetricsResponse {
// TX packets per status. // TX packets per status.
common.Metric tx_packets_per_status = 7; common.Metric tx_packets_per_status = 7;
} }
message GetGatewayDutyCycleMetricsRequest {
// Gateway ID (EUI64).
string gateway_id = 1;
// Interval start timestamp.
google.protobuf.Timestamp start = 2;
// Interval end timestamp.
google.protobuf.Timestamp end = 3;
}
message GetGatewayDutyCycleMetricsResponse {
// Percentage relative to max load.
common.Metric max_load_percentage = 1;
// Percentage relative to tracking window.
common.Metric window_percentage = 2;
}
message GetRelayGatewayRequest {
// Tenant ID (UUID).
string tenant_id = 1;
// Relay ID (4 byte HEX).
string relay_id = 2;
}
message GetRelayGatewayResponse {
// Relay Gateway object.
RelayGateway relay_gateway = 1;
// Created at timestamp.
google.protobuf.Timestamp created_at = 2;
// Last update timestamp.
google.protobuf.Timestamp updated_at = 3;
// Last seen at timestamp.
google.protobuf.Timestamp last_seen_at = 4;
}
message ListRelayGatewaysRequest {
// Max number of relay-gateways to return in the result-set.
uint32 limit = 1;
// Offset in the result-set (for pagination).
uint32 offset = 2;
// Tenant ID (UUID) to filter relay-gateways on.
// To list all relay-gateways as a global admin user, this field can be left blank.
string tenant_id = 3;
}
message ListRelayGatewaysResponse {
// Total number of relay-gateways.
uint32 total_count = 1;
// Result-set.
repeated RelayGatewayListItem result = 2;
}
message RelayGatewayListItem {
// Tenant ID.
string tenant_id = 1;
// Relay ID (4 byte HEX).
string relay_id = 2;
// Name.
string name = 3;
// Description.
string description = 4;
// Created at timestamp.
google.protobuf.Timestamp created_at = 5;
// Last update timestamp.
google.protobuf.Timestamp updated_at = 6;
// Last seen at timestamp.
google.protobuf.Timestamp last_seen_at = 7;
// Gateway state.
// Please note that the state of the relay is driven by the last
// received stats packet sent by the relay-gateway.
GatewayState state = 10;
// Region configuration ID.
string region_config_id = 11;
}
message UpdateRelayGatewayRequest {
// Relay Gateway object.
RelayGateway relay_gateway = 1;
}
message DeleteRelayGatewayRequest {
// Tenant ID.
string tenant_id = 1;
// Relay ID (4 byte HEX).
string relay_id = 2;
}
message RelayGateway {
// Tenant ID.
string tenant_id = 1;
// Relay ID (4 byte HEX).
string relay_id = 2;
// Name.
string name = 3;
// Description.
string description = 4;
// Stats interval (seconds).
// This defines the expected interval in which the gateway sends its
// statistics.
uint32 stats_interval = 5;
// Region configuration ID.
string region_config_id = 6;
}

View File

@@ -7,6 +7,8 @@ option java_package = "io.chirpstack.api";
option java_multiple_files = true; option java_multiple_files = true;
option java_outer_classname = "InternalProto"; option java_outer_classname = "InternalProto";
option csharp_namespace = "Chirpstack.Api"; option csharp_namespace = "Chirpstack.Api";
option php_namespace = "Chirpstack\\Api";
option php_metadata_namespace = "GPBMetadata\\Chirpstack\\Api";
import "google/protobuf/timestamp.proto"; import "google/protobuf/timestamp.proto";
import "google/protobuf/empty.proto"; import "google/protobuf/empty.proto";
@@ -221,6 +223,12 @@ message SettingsResponse {
// OAuth2 settings. // OAuth2 settings.
OAuth2 oauth2 = 2; OAuth2 oauth2 = 2;
// Tileserver URL.
string tileserver_url = 3;
// Map attribution.
string map_attribution = 4;
} }
message OpenIdConnect { message OpenIdConnect {

View File

@@ -7,6 +7,8 @@ option java_package = "io.chirpstack.api";
option java_multiple_files = true; option java_multiple_files = true;
option java_outer_classname = "MulticastGroupProto"; option java_outer_classname = "MulticastGroupProto";
option csharp_namespace = "Chirpstack.Api"; option csharp_namespace = "Chirpstack.Api";
option php_namespace = "Chirpstack\\Api";
option php_metadata_namespace = "GPBMetadata\\Chirpstack\\Api";
import "google/api/annotations.proto"; import "google/api/annotations.proto";
import "google/protobuf/timestamp.proto"; import "google/protobuf/timestamp.proto";

View File

@@ -7,6 +7,8 @@ option java_package = "io.chirpstack.api";
option java_multiple_files = true; option java_multiple_files = true;
option java_outer_classname = "RelayProto"; option java_outer_classname = "RelayProto";
option csharp_namespace = "Chirpstack.Api"; option csharp_namespace = "Chirpstack.Api";
option php_namespace = "Chirpstack\\Api";
option php_metadata_namespace = "GPBMetadata\\Chirpstack\\Api";
import "google/api/annotations.proto"; import "google/api/annotations.proto";
import "google/protobuf/timestamp.proto"; import "google/protobuf/timestamp.proto";

View File

@@ -7,6 +7,8 @@ option java_package = "io.chirpstack.api";
option java_multiple_files = true; option java_multiple_files = true;
option java_outer_classname = "TenantProto"; option java_outer_classname = "TenantProto";
option csharp_namespace = "Chirpstack.Api"; option csharp_namespace = "Chirpstack.Api";
option php_namespace = "Chirpstack\\Api";
option php_metadata_namespace = "GPBMetadata\\Chirpstack\\Api";
import "google/api/annotations.proto"; import "google/api/annotations.proto";
import "google/protobuf/timestamp.proto"; import "google/protobuf/timestamp.proto";

View File

@@ -7,6 +7,8 @@ option java_package = "io.chirpstack.api";
option java_multiple_files = true; option java_multiple_files = true;
option java_outer_classname = "UserProto"; option java_outer_classname = "UserProto";
option csharp_namespace = "Chirpstack.Api"; option csharp_namespace = "Chirpstack.Api";
option php_namespace = "Chirpstack\\Api";
option php_metadata_namespace = "GPBMetadata\\Chirpstack\\Api";
import "google/api/annotations.proto"; import "google/api/annotations.proto";
import "google/protobuf/timestamp.proto"; import "google/protobuf/timestamp.proto";

View File

@@ -7,6 +7,8 @@ option java_package = "io.chirpstack.api";
option java_multiple_files = true; option java_multiple_files = true;
option java_outer_classname = "CommonProto"; option java_outer_classname = "CommonProto";
option csharp_namespace = "Chirpstack.Common"; option csharp_namespace = "Chirpstack.Common";
option php_namespace = "Chirpstack\\Common";
option php_metadata_namespace = "GPBMetadata\\Chirpstack\\Common";
import "google/protobuf/timestamp.proto"; import "google/protobuf/timestamp.proto";
@@ -107,6 +109,7 @@ enum RegParamsRevision {
RP002_1_0_1 = 3; RP002_1_0_1 = 3;
RP002_1_0_2 = 4; RP002_1_0_2 = 4;
RP002_1_0_3 = 5; RP002_1_0_3 = 5;
RP002_1_0_4 = 6;
} }
enum LocationSource { enum LocationSource {
@@ -141,6 +144,9 @@ enum Aggregation {
// Month. // Month.
MONTH = 2; MONTH = 2;
// Minute.
MINUTE = 3;
} }
enum MetricKind { enum MetricKind {

View File

@@ -7,6 +7,8 @@ option java_package = "io.chirpstack.api.gw";
option java_multiple_files = true; option java_multiple_files = true;
option java_outer_classname = "GatewayProto"; option java_outer_classname = "GatewayProto";
option csharp_namespace = "Chirpstack.Gateway"; option csharp_namespace = "Chirpstack.Gateway";
option php_namespace = "Chirpstack\\Gateway";
option php_metadata_namespace = "GPBMetadata\\Chirpstack\\Gateway";
import "common/common.proto"; import "common/common.proto";
import "google/protobuf/timestamp.proto"; import "google/protobuf/timestamp.proto";
@@ -747,3 +749,29 @@ message ConnState {
State state = 2; State state = 2;
} }
// Gateway Mesh heartbeat (sent periodically by the Relay Gateways).
message MeshHeartbeat {
// Gateway ID (of the Border Gateway).
string gateway_id = 1;
// Relay ID.
string relay_id = 2;
// Timestamp (second precision).
google.protobuf.Timestamp time = 3;
// Relay path.
repeated MeshHeartbeatRelayPath relay_path = 4;
}
message MeshHeartbeatRelayPath {
// Relay ID.
string relay_id = 1;
// RSSI.
int32 rssi = 2;
// SNR.
int32 snr = 3;
}

View File

@@ -7,6 +7,8 @@ option java_package = "io.chirpstack.api.integration";
option java_multiple_files = true; option java_multiple_files = true;
option java_outer_classname = "IntegrationProto"; option java_outer_classname = "IntegrationProto";
option csharp_namespace = "Chirpstack.Integration"; option csharp_namespace = "Chirpstack.Integration";
option php_namespace = "Chirpstack\\Integration";
option php_metadata_namespace = "GPBMetadata\\Chirpstack\\Integration";
import "common/common.proto"; import "common/common.proto";
import "gw/gw.proto"; import "gw/gw.proto";

View File

@@ -7,6 +7,8 @@ option java_package = "io.chirpstack.api.stream";
option java_multiple_files = true; option java_multiple_files = true;
option java_outer_classname = "ApiRequestProto"; option java_outer_classname = "ApiRequestProto";
option csharp_namespace = "Chirpstack.Stream"; option csharp_namespace = "Chirpstack.Stream";
option php_namespace = "Chirpstack\\Stream";
option php_metadata_namespace = "GPBMetadata\\Chirpstack\\Stream";
import "google/protobuf/timestamp.proto"; import "google/protobuf/timestamp.proto";
import "common/common.proto"; import "common/common.proto";

View File

@@ -7,6 +7,8 @@ option java_package = "io.chirpstack.api.stream";
option java_multiple_files = true; option java_multiple_files = true;
option java_outer_classname = "BackendInterfacesProto"; option java_outer_classname = "BackendInterfacesProto";
option csharp_namespace = "Chirpstack.Stream"; option csharp_namespace = "Chirpstack.Stream";
option php_namespace = "Chirpstack\\Stream";
option php_metadata_namespace = "GPBMetadata\\Chirpstack\\Stream";
import "google/protobuf/timestamp.proto"; import "google/protobuf/timestamp.proto";

View File

@@ -7,6 +7,8 @@ option java_package = "io.chirpstack.api.stream";
option java_multiple_files = true; option java_multiple_files = true;
option java_outer_classname = "FrameProto"; option java_outer_classname = "FrameProto";
option csharp_namespace = "Chirpstack.Stream"; option csharp_namespace = "Chirpstack.Stream";
option php_namespace = "Chirpstack\\Stream";
option php_metadata_namespace = "GPBMetadata\\Chirpstack\\Stream";
import "google/protobuf/timestamp.proto"; import "google/protobuf/timestamp.proto";
import "common/common.proto"; import "common/common.proto";

View File

@@ -7,6 +7,8 @@ option java_package = "io.chirpstack.api.stream";
option java_multiple_files = true; option java_multiple_files = true;
option java_outer_classname = "MetaProto"; option java_outer_classname = "MetaProto";
option csharp_namespace = "Chirpstack.Stream"; option csharp_namespace = "Chirpstack.Stream";
option php_namespace = "Chirpstack\\Stream";
option php_metadata_namespace = "GPBMetadata\\Chirpstack\\Stream";
import "common/common.proto"; import "common/common.proto";
import "gw/gw.proto"; import "gw/gw.proto";

View File

@@ -122,6 +122,7 @@ impl Into<String> for RegParamsRevision {
RegParamsRevision::Rp002101 => "RP002_1.0.1", RegParamsRevision::Rp002101 => "RP002_1.0.1",
RegParamsRevision::Rp002102 => "RP002_1.0.2", RegParamsRevision::Rp002102 => "RP002_1.0.2",
RegParamsRevision::Rp002103 => "RP002_1.0.3", RegParamsRevision::Rp002103 => "RP002_1.0.3",
RegParamsRevision::Rp002104 => "RP002_1.0.4",
} }
.to_string() .to_string()
} }
@@ -138,6 +139,7 @@ impl FromStr for RegParamsRevision {
"RP002_1.0.1" => RegParamsRevision::Rp002101, "RP002_1.0.1" => RegParamsRevision::Rp002101,
"RP002_1.0.2" => RegParamsRevision::Rp002102, "RP002_1.0.2" => RegParamsRevision::Rp002102,
"RP002_1.0.3" => RegParamsRevision::Rp002103, "RP002_1.0.3" => RegParamsRevision::Rp002103,
"RP002_1.0.4" => RegParamsRevision::Rp002104,
_ => { _ => {
return Err("invalid reg param revision".into()); return Err("invalid reg param revision".into());
} }

24
api/rust/src/gw.rs vendored
View File

@@ -95,7 +95,7 @@ impl UplinkFrame {
}) })
} }
uplink_tx_info_legacy::ModulationInfo::FskModulationInfo(info) => { uplink_tx_info_legacy::ModulationInfo::FskModulationInfo(info) => {
modulation::Parameters::Fsk(info.clone()) modulation::Parameters::Fsk(*info)
} }
uplink_tx_info_legacy::ModulationInfo::LrFhssModulationInfo(info) => { uplink_tx_info_legacy::ModulationInfo::LrFhssModulationInfo(info) => {
modulation::Parameters::LrFhss(LrFhssModulationInfo { modulation::Parameters::LrFhss(LrFhssModulationInfo {
@@ -120,9 +120,9 @@ impl UplinkFrame {
self.rx_info = Some(UplinkRxInfo { self.rx_info = Some(UplinkRxInfo {
gateway_id: hex::encode(&rx_info.gateway_id), gateway_id: hex::encode(&rx_info.gateway_id),
uplink_id: rng.gen::<u32>(), uplink_id: rng.gen::<u32>(),
gw_time: rx_info.time.clone(), gw_time: rx_info.time,
ns_time: None, ns_time: None,
time_since_gps_epoch: rx_info.time_since_gps_epoch.clone(), time_since_gps_epoch: rx_info.time_since_gps_epoch,
fine_time_since_gps_epoch: None, fine_time_since_gps_epoch: None,
rssi: rx_info.rssi, rssi: rx_info.rssi,
snr: rx_info.lora_snr as f32, snr: rx_info.lora_snr as f32,
@@ -130,7 +130,7 @@ impl UplinkFrame {
rf_chain: rx_info.rf_chain, rf_chain: rx_info.rf_chain,
board: rx_info.board, board: rx_info.board,
antenna: rx_info.antenna, antenna: rx_info.antenna,
location: rx_info.location.clone(), location: rx_info.location,
context: rx_info.context.clone(), context: rx_info.context.clone(),
metadata: rx_info.metadata.clone(), metadata: rx_info.metadata.clone(),
crc_status: rx_info.crc_status, crc_status: rx_info.crc_status,
@@ -195,23 +195,19 @@ impl DownlinkFrame {
Some(timing::Parameters::Immediately(v)) => { Some(timing::Parameters::Immediately(v)) => {
tx_info_legacy.timing = DownlinkTiming::Immediately.into(); tx_info_legacy.timing = DownlinkTiming::Immediately.into();
tx_info_legacy.timing_info = Some( tx_info_legacy.timing_info = Some(
downlink_tx_info_legacy::TimingInfo::ImmediatelyTimingInfo( downlink_tx_info_legacy::TimingInfo::ImmediatelyTimingInfo(*v),
v.clone(),
),
); );
} }
Some(timing::Parameters::Delay(v)) => { Some(timing::Parameters::Delay(v)) => {
tx_info_legacy.timing = DownlinkTiming::Delay.into(); tx_info_legacy.timing = DownlinkTiming::Delay.into();
tx_info_legacy.timing_info = Some( tx_info_legacy.timing_info =
downlink_tx_info_legacy::TimingInfo::DelayTimingInfo(v.clone()), Some(downlink_tx_info_legacy::TimingInfo::DelayTimingInfo(*v));
);
} }
Some(timing::Parameters::GpsEpoch(v)) => { Some(timing::Parameters::GpsEpoch(v)) => {
tx_info_legacy.timing = DownlinkTiming::GpsEpoch.into(); tx_info_legacy.timing = DownlinkTiming::GpsEpoch.into();
tx_info_legacy.timing_info = tx_info_legacy.timing_info = Some(
Some(downlink_tx_info_legacy::TimingInfo::GpsEpochTimingInfo( downlink_tx_info_legacy::TimingInfo::GpsEpochTimingInfo(*v),
v.clone(), );
));
} }
_ => {} _ => {}
} }

View File

@@ -1,24 +1,29 @@
[package] [package]
name = "backend" name = "backend"
version = "4.8.0-test.2" version = "4.9.0"
authors = ["Orne Brocaar <info@brocaar.com>"] authors = ["Orne Brocaar <info@brocaar.com>"]
edition = "2018" edition = "2018"
publish = false publish = false
[dependencies] [dependencies]
serde = { version = "1.0", features = ["derive", "rc"] } serde = { version = "1.0", features = ["derive", "rc"] }
serde_json = "1.0" serde_json = "1.0"
thiserror = "1.0" thiserror = "1.0"
anyhow = "1.0" anyhow = "1.0"
tracing = "0.1" tracing = "0.1"
hex = "0.4" hex = "0.4"
rand = "0.8" rand = "0.8"
aes-kw = "0.2" aes-kw = "0.2"
reqwest = { version = "0.12", features = ["json", "rustls-tls"], default-features = false } reqwest = { version = "0.12", features = [
chrono = { version = "0.4", features = ["serde"] } "json",
tokio = { version = "1.36", features = ["macros" ] } "rustls-tls",
chirpstack_api = { path = "../api/rust", default-features = false, features = ["json"] } ], default-features = false }
chrono = { version = "0.4", features = ["serde"] }
tokio = { version = "1.38", features = ["macros"] }
chirpstack_api = { path = "../api/rust", default-features = false, features = [
"json",
] }
# Development and testing # Development and testing
[dev-dependencies] [dev-dependencies]
httpmock = "0.7.0" httpmock = "0.7.0"

View File

@@ -160,7 +160,7 @@ impl Client {
pl: &mut JoinReqPayload, pl: &mut JoinReqPayload,
async_resp: Option<Receiver<Vec<u8>>>, async_resp: Option<Receiver<Vec<u8>>>,
) -> Result<JoinAnsPayload> { ) -> Result<JoinAnsPayload> {
pl.base.sender_id = self.config.sender_id.clone(); pl.base.sender_id.clone_from(&self.config.sender_id);
pl.base.receiver_id = receiver_id; pl.base.receiver_id = receiver_id;
pl.base.message_type = MessageType::JoinReq; pl.base.message_type = MessageType::JoinReq;
@@ -174,8 +174,8 @@ impl Client {
pl: &mut RejoinReqPayload, pl: &mut RejoinReqPayload,
async_resp: Option<Receiver<Vec<u8>>>, async_resp: Option<Receiver<Vec<u8>>>,
) -> Result<RejoinAnsPayload> { ) -> Result<RejoinAnsPayload> {
pl.base.sender_id = self.config.sender_id.clone(); pl.base.sender_id.clone_from(&self.config.sender_id);
pl.base.receiver_id = self.config.receiver_id.clone(); pl.base.receiver_id.clone_from(&self.config.receiver_id);
pl.base.message_type = MessageType::RejoinReq; pl.base.message_type = MessageType::RejoinReq;
let mut ans: RejoinAnsPayload = Default::default(); let mut ans: RejoinAnsPayload = Default::default();
@@ -188,8 +188,8 @@ impl Client {
pl: &mut AppSKeyReqPayload, pl: &mut AppSKeyReqPayload,
async_resp: Option<Receiver<Vec<u8>>>, async_resp: Option<Receiver<Vec<u8>>>,
) -> Result<AppSKeyAnsPayload> { ) -> Result<AppSKeyAnsPayload> {
pl.base.sender_id = self.config.sender_id.clone(); pl.base.sender_id.clone_from(&self.config.sender_id);
pl.base.receiver_id = self.config.receiver_id.clone(); pl.base.receiver_id.clone_from(&self.config.receiver_id);
pl.base.message_type = MessageType::AppSKeyReq; pl.base.message_type = MessageType::AppSKeyReq;
let mut ans: AppSKeyAnsPayload = Default::default(); let mut ans: AppSKeyAnsPayload = Default::default();
@@ -203,8 +203,8 @@ impl Client {
pl: &mut PRStartReqPayload, pl: &mut PRStartReqPayload,
async_resp: Option<Receiver<Vec<u8>>>, async_resp: Option<Receiver<Vec<u8>>>,
) -> Result<PRStartAnsPayload> { ) -> Result<PRStartAnsPayload> {
pl.base.sender_id = self.config.sender_id.clone(); pl.base.sender_id.clone_from(&self.config.sender_id);
pl.base.receiver_id = self.config.receiver_id.clone(); pl.base.receiver_id.clone_from(&self.config.receiver_id);
pl.base.message_type = MessageType::PRStartReq; pl.base.message_type = MessageType::PRStartReq;
let mut ans: PRStartAnsPayload = Default::default(); let mut ans: PRStartAnsPayload = Default::default();
@@ -223,8 +223,8 @@ impl Client {
pl: &mut PRStopReqPayload, pl: &mut PRStopReqPayload,
async_resp: Option<Receiver<Vec<u8>>>, async_resp: Option<Receiver<Vec<u8>>>,
) -> Result<PRStopAnsPayload> { ) -> Result<PRStopAnsPayload> {
pl.base.sender_id = self.config.sender_id.clone(); pl.base.sender_id.clone_from(&self.config.sender_id);
pl.base.receiver_id = self.config.receiver_id.clone(); pl.base.receiver_id.clone_from(&self.config.receiver_id);
pl.base.message_type = MessageType::PRStopReq; pl.base.message_type = MessageType::PRStopReq;
let mut ans: PRStopAnsPayload = Default::default(); let mut ans: PRStopAnsPayload = Default::default();
@@ -243,7 +243,7 @@ impl Client {
pl: &mut HomeNSReqPayload, pl: &mut HomeNSReqPayload,
async_resp: Option<Receiver<Vec<u8>>>, async_resp: Option<Receiver<Vec<u8>>>,
) -> Result<HomeNSAnsPayload> { ) -> Result<HomeNSAnsPayload> {
pl.base.sender_id = self.config.sender_id.clone(); pl.base.sender_id.clone_from(&self.config.sender_id);
pl.base.receiver_id = receiver_id; pl.base.receiver_id = receiver_id;
pl.base.message_type = MessageType::HomeNSReq; pl.base.message_type = MessageType::HomeNSReq;
@@ -252,14 +252,18 @@ impl Client {
Ok(ans) Ok(ans)
} }
pub async fn home_ns_ans(&self, target_role: Role, pl: &HomeNSAnsPayload) -> Result<()> {
self.response_request(Some(target_role), pl).await
}
pub async fn xmit_data_req( pub async fn xmit_data_req(
&self, &self,
target_role: Role, target_role: Role,
pl: &mut XmitDataReqPayload, pl: &mut XmitDataReqPayload,
async_resp: Option<Receiver<Vec<u8>>>, async_resp: Option<Receiver<Vec<u8>>>,
) -> Result<XmitDataAnsPayload> { ) -> Result<XmitDataAnsPayload> {
pl.base.sender_id = self.config.sender_id.clone(); pl.base.sender_id.clone_from(&self.config.sender_id);
pl.base.receiver_id = self.config.receiver_id.clone(); pl.base.receiver_id.clone_from(&self.config.receiver_id);
pl.base.message_type = MessageType::XmitDataReq; pl.base.message_type = MessageType::XmitDataReq;
let mut ans: XmitDataAnsPayload = Default::default(); let mut ans: XmitDataAnsPayload = Default::default();
@@ -372,7 +376,7 @@ impl Client {
}; };
let body = serde_json::to_string(&pl)?; let body = serde_json::to_string(&pl)?;
be_req_log.request_body = body.clone(); be_req_log.request_body.clone_from(&body);
info!(server = %server, async_interface = %async_resp.is_some(), "Making request"); info!(server = %server, async_interface = %async_resp.is_some(), "Making request");
@@ -403,7 +407,7 @@ impl Client {
None => res.text().await?, None => res.text().await?,
}; };
be_req_log.response_body = resp_json.clone(); be_req_log.response_body.clone_from(&resp_json);
let base: BasePayloadResult = serde_json::from_str(&resp_json)?; let base: BasePayloadResult = serde_json::from_str(&resp_json)?;
be_req_log.result_code = format!("{:?}", base.result.result_code); be_req_log.result_code = format!("{:?}", base.result.result_code);
@@ -518,6 +522,7 @@ impl BasePayload {
MessageType::PRStartReq => MessageType::PRStartAns, MessageType::PRStartReq => MessageType::PRStartAns,
MessageType::PRStopReq => MessageType::PRStopAns, MessageType::PRStopReq => MessageType::PRStopAns,
MessageType::XmitDataReq => MessageType::XmitDataAns, MessageType::XmitDataReq => MessageType::XmitDataAns,
MessageType::HomeNSReq => MessageType::HomeNSAns,
_ => self.message_type, _ => self.message_type,
}, },
sender_token: self.receiver_token.clone(), sender_token: self.receiver_token.clone(),

View File

@@ -3,14 +3,14 @@
description = "Library for building external ChirpStack integrations" description = "Library for building external ChirpStack integrations"
homepage = "https://www.chirpstack.io/" homepage = "https://www.chirpstack.io/"
license = "MIT" license = "MIT"
version = "4.6.0" version = "4.9.0"
authors = ["Orne Brocaar <info@brocaar.com>"] authors = ["Orne Brocaar <info@brocaar.com>"]
edition = "2021" edition = "2021"
repository = "https://github.com/chirpstack/chirpstack" repository = "https://github.com/chirpstack/chirpstack"
[dependencies] [dependencies]
chirpstack_api = { path = "../api/rust", version = "4.8.0-test.1" } chirpstack_api = { path = "../api/rust", version = "4.9.0-test.1" }
redis = { version = "0.25", features = [ redis = { version = "0.26", features = [
"cluster-async", "cluster-async",
"tokio-rustls-comp", "tokio-rustls-comp",
] } ] }

View File

@@ -215,7 +215,7 @@ impl Integration {
info!(key = %k, "Event received from Redis stream"); info!(key = %k, "Event received from Redis stream");
match k.as_ref() { match k.as_ref() {
"up" => { "up" => {
if let redis::Value::Data(b) = v { if let redis::Value::BulkString(b) = v {
let pl = integration_pb::UplinkEvent::decode( let pl = integration_pb::UplinkEvent::decode(
&mut Cursor::new(b), &mut Cursor::new(b),
)?; )?;
@@ -223,21 +223,21 @@ impl Integration {
} }
} }
"join" => { "join" => {
if let redis::Value::Data(b) = v { if let redis::Value::BulkString(b) = v {
let pl = let pl =
integration_pb::JoinEvent::decode(&mut Cursor::new(b))?; integration_pb::JoinEvent::decode(&mut Cursor::new(b))?;
tokio::spawn(join_event(pl)); tokio::spawn(join_event(pl));
} }
} }
"ack" => { "ack" => {
if let redis::Value::Data(b) = v { if let redis::Value::BulkString(b) = v {
let pl = let pl =
integration_pb::AckEvent::decode(&mut Cursor::new(b))?; integration_pb::AckEvent::decode(&mut Cursor::new(b))?;
tokio::spawn(ack_event(pl)); tokio::spawn(ack_event(pl));
} }
} }
"txack" => { "txack" => {
if let redis::Value::Data(b) = v { if let redis::Value::BulkString(b) = v {
let pl = integration_pb::TxAckEvent::decode( let pl = integration_pb::TxAckEvent::decode(
&mut Cursor::new(b), &mut Cursor::new(b),
)?; )?;
@@ -245,7 +245,7 @@ impl Integration {
} }
} }
"status" => { "status" => {
if let redis::Value::Data(b) = v { if let redis::Value::BulkString(b) = v {
let pl = integration_pb::StatusEvent::decode( let pl = integration_pb::StatusEvent::decode(
&mut Cursor::new(b), &mut Cursor::new(b),
)?; )?;
@@ -253,14 +253,14 @@ impl Integration {
} }
} }
"log" => { "log" => {
if let redis::Value::Data(b) = v { if let redis::Value::BulkString(b) = v {
let pl = let pl =
integration_pb::LogEvent::decode(&mut Cursor::new(b))?; integration_pb::LogEvent::decode(&mut Cursor::new(b))?;
tokio::spawn(log_event(pl)); tokio::spawn(log_event(pl));
} }
} }
"location" => { "location" => {
if let redis::Value::Data(b) = v { if let redis::Value::BulkString(b) = v {
let pl = integration_pb::LocationEvent::decode( let pl = integration_pb::LocationEvent::decode(
&mut Cursor::new(b), &mut Cursor::new(b),
)?; )?;
@@ -268,7 +268,7 @@ impl Integration {
} }
} }
"integration" => { "integration" => {
if let redis::Value::Data(b) = v { if let redis::Value::BulkString(b) = v {
let pl = integration_pb::IntegrationEvent::decode( let pl = integration_pb::IntegrationEvent::decode(
&mut Cursor::new(b), &mut Cursor::new(b),
)?; )?;

View File

@@ -1,220 +1,251 @@
[package] [package]
name = "chirpstack" name = "chirpstack"
description = "ChirpStack is an open-source LoRaWAN(TM) Network Server" description = "ChirpStack is an open-source LoRaWAN(TM) Network Server"
repository = "https://github.com/chirpstack/chirpstack" repository = "https://github.com/chirpstack/chirpstack"
homepage = "https://www.chirpstack.io/" homepage = "https://www.chirpstack.io/"
version = "4.8.0-test.2" version = "4.9.0"
authors = ["Orne Brocaar <info@brocaar.com>"] authors = ["Orne Brocaar <info@brocaar.com>"]
edition = "2021" edition = "2021"
publish = false publish = false
license = "MIT" license = "MIT"
[dependencies] [dependencies]
# CLI interface # CLI interface
clap = { version = "4.5", features = ["derive"] } clap = { version = "4.5", features = ["derive"] }
# Configuration # Configuration
serde = { version = "1.0", features = ["derive", "rc"] } serde = { version = "1.0", features = ["derive", "rc"] }
serde_yaml = "0.9" serde_yaml = "0.9"
serde_json = "1.0" serde_json = "1.0"
serde_urlencoded = "0.7" serde_urlencoded = "0.7"
humantime-serde = "1.1" humantime-serde = "1.1"
toml = "0.8" toml = "0.8"
handlebars = "5.1" handlebars = "6.0"
# Database # Database
email_address = "0.2" email_address = "0.2"
diesel = { version = "2.1", features = [ diesel = { version = "2.2", features = [
"chrono", "chrono",
"uuid", "uuid",
"serde_json", "serde_json",
"numeric", "numeric",
"64-column-tables", "64-column-tables",
"postgres_backend", "postgres_backend",
] } ] }
diesel_migrations = { version = "2.1" } diesel_migrations = { version = "2.2" }
diesel-async = { version = "0.4", features = ["deadpool", "postgres", "async-connection-wrapper"] } diesel-async = { version = "0.5", features = [
tokio-postgres = "0.7" "deadpool",
tokio-postgres-rustls = "0.11" "postgres",
bigdecimal = "0.4" "async-connection-wrapper",
redis = { version = "0.25.2", features = [ "tls-rustls", "tokio-rustls-comp"] } ] }
deadpool-redis = { version = "0.15", features = ["cluster"] } tokio-postgres = "0.7"
tokio-postgres-rustls = "0.12"
bigdecimal = "0.4"
redis = { version = "0.26", features = ["tls-rustls", "tokio-rustls-comp"] }
deadpool-redis = { version = "0.16", features = ["cluster"] }
# Logging # Logging
tracing = "0.1" tracing = "0.1"
tracing-subscriber = { version = "0.3", features = [ tracing-subscriber = { version = "0.3", features = [
"fmt", "fmt",
"ansi", "ansi",
"json", "json",
], default-features = true } ], default-features = true }
# ChirpStack API definitions # ChirpStack API definitions
chirpstack_api = { path = "../api/rust", features = ["default", "internal", "diesel"] } chirpstack_api = { path = "../api/rust", features = [
lrwn = { path = "../lrwn", features = ["serde", "diesel", "regions", "crypto"] } "default",
backend = { path = "../backend" } "internal",
"diesel",
] }
lrwn = { path = "../lrwn", features = [
"serde",
"diesel",
"regions",
"crypto",
] }
backend = { path = "../backend" }
# HTTP # HTTP
reqwest = { version = "0.12", features = [ reqwest = { version = "0.12", features = [
"json", "json",
"rustls-tls-native-roots", "rustls-tls-native-roots",
], default-features = false } ], default-features = false }
# Integrations # Integrations
aws-sign-v4 = "0.3" aws-sign-v4 = "0.3"
hmac = "0.12" hmac = "0.12"
sha2 = "0.10" sha2 = "0.10"
urlencoding = "2.1" urlencoding = "2.1"
geohash = "0.13" geohash = "0.13"
gcp_auth = "0.11" gcp_auth = "0.12"
lapin = "2.3" lapin = { version = "2.5", default-features = false }
tokio-executor-trait = "2.1" tokio-executor-trait = "2.1"
tokio-reactor-trait = "1.1" tokio-reactor-trait = "1.1"
rdkafka = { version = "0.36", default-features = false, features = ["tokio", "cmake-build"] } rdkafka = { version = "0.36", default-features = false, features = [
"tokio",
"cmake-build",
] }
# gRPC and Protobuf # gRPC and Protobuf
tonic = "0.11" tonic = "0.12"
tonic-web = "0.11" tonic-web = "0.12"
tonic-reflection = "0.11" tonic-reflection = "0.12"
tokio = { version = "1.36", features = ["macros", "rt-multi-thread"] } tokio = { version = "1.38", features = ["macros", "rt-multi-thread"] }
tokio-stream = "0.1" tokio-stream = "0.1"
prost-types = "0.12" prost-types = "0.13"
prost = "0.12" prost = "0.13"
pbjson-types = "0.6" pbjson-types = "0.7"
# gRPC and HTTP multiplexing # gRPC and HTTP multiplexing
warp = { version = "0.3", features = ["tls"], default-features = false } axum = "0.7"
hyper = "0.14" axum-server = { version = "0.7.1", features = ["tls-rustls-no-provider"] }
tower = "0.4" tower = { version = "0.4" }
futures = "0.3" futures = "0.3"
futures-util = "0.3" futures-util = "0.3"
http = "0.2" http = "1.1"
http-body = "0.4" http-body = "1.0"
rust-embed = "8.3" rust-embed = "8.5"
mime_guess = "2.0" mime_guess = "2.0"
tower-http = { version = "0.4", features = ["trace", "auth"] } tower-http = { version = "0.5", features = ["trace", "auth"] }
# Error handling # Error handling
thiserror = "1.0" thiserror = "1.0"
anyhow = "1.0" anyhow = "1.0"
# Authentication # Authentication
pbkdf2 = { version = "0.12", features = ["simple"] } pbkdf2 = { version = "0.12", features = ["simple"] }
rand_core = { version = "0.6", features = ["std"] } rand_core = { version = "0.6", features = ["std"] }
jsonwebtoken = "9.2" jsonwebtoken = "9.2"
rustls = "0.22" rustls = { version = "0.23", default-features = false, features = [
rustls-native-certs = "0.7" "logging",
rustls-pemfile = "2.1" "std",
rsa = "0.9" "tls12",
elliptic-curve = { version = "0.13", features = ["pem"] } "ring",
p256 = "0.13" ] }
rcgen = { version = "0.12", features = [ "x509-parser" ] } rustls-native-certs = "0.7"
openidconnect = { version = "3.5", features = ["accept-rfc3339-timestamps"] } rustls-pemfile = "2.1"
oauth2 = "4.4" pem = "3.0"
x509-parser = "0.16"
rsa = "0.9"
elliptic-curve = { version = "0.13", features = ["pem"] }
p256 = "0.13"
rcgen = { version = "0.13.1", features = ["x509-parser"] }
oauth2 = "5.0.0-alpha.4"
openidconnect = { version = "4.0.0-alpha.2", features = [
"accept-rfc3339-timestamps",
] }
# MQTT # MQTT
rumqttc = { version = "0.24", features = ["url"] } rumqttc = { version = "0.24", features = ["url"] }
hex = "0.4" hex = "0.4"
# Codecs # Codecs
rquickjs = { version = "0.5", features = [ rquickjs = { version = "0.6", features = [
"bindgen", "bindgen",
"loader", "loader",
"array-buffer", "array-buffer",
"chrono", "chrono",
] } ] }
# Misc # Misc
lazy_static = "1.4" lazy_static = "1.5"
uuid = { version = "1.8", features = ["v4", "serde"] } uuid = { version = "1.10", features = ["v4", "serde"] }
chrono = "0.4" chrono = "0.4"
async-trait = "0.1" async-trait = "0.1"
aes = "0.8" aes = "0.8"
rand = "0.8" rand = "0.8"
base64 = "0.22" base64 = "0.22"
async-recursion = "1.0" async-recursion = "1.1"
regex = "1.10" regex = "1.10"
petgraph = "0.6" petgraph = "0.6"
prometheus-client = "0.22" prometheus-client = "0.22"
pin-project = "1.1" pin-project = "1.1"
signal-hook = "0.3"
signal-hook-tokio = { version = "0.3", features = ["futures-v0_3"] }
# Development and testing # Development and testing
[dev-dependencies] [dev-dependencies]
httpmock = "0.7.0" httpmock = "0.7.0"
bytes = "1.5" bytes = "1.6"
dotenv = "0.15" dotenv = "0.15"
[features] [features]
test-all-integrations = ["test-integration-amqp", "test-integration-kafka", "test-integration-mqtt"] test-all-integrations = [
test-integration-amqp = [] "test-integration-amqp",
test-integration-kafka = [] "test-integration-kafka",
test-integration-mqtt = [] "test-integration-mqtt",
]
test-integration-amqp = []
test-integration-kafka = []
test-integration-mqtt = []
# Debian packaging. # Debian packaging.
[package.metadata.deb] [package.metadata.deb]
assets = [ assets = [
[ [
"target/release/chirpstack", "target/release/chirpstack",
"usr/bin/", "usr/bin/",
"755", "755",
], ],
[ [
"configuration/*.toml", "configuration/*.toml",
"etc/chirpstack/", "etc/chirpstack/",
"640", "640",
], ],
] ]
conf-files = [ conf-files = [
"/etc/chirpstack/chirpstack.toml", "/etc/chirpstack/chirpstack.toml",
"/etc/chirpstack/region_as923.toml", "/etc/chirpstack/region_as923.toml",
"/etc/chirpstack/region_as923_2.toml", "/etc/chirpstack/region_as923_2.toml",
"/etc/chirpstack/region_as923_3.toml", "/etc/chirpstack/region_as923_3.toml",
"/etc/chirpstack/region_as923_4.toml", "/etc/chirpstack/region_as923_4.toml",
"/etc/chirpstack/region_au915_0.toml", "/etc/chirpstack/region_au915_0.toml",
"/etc/chirpstack/region_au915_1.toml", "/etc/chirpstack/region_au915_1.toml",
"/etc/chirpstack/region_au915_2.toml", "/etc/chirpstack/region_au915_2.toml",
"/etc/chirpstack/region_au915_3.toml", "/etc/chirpstack/region_au915_3.toml",
"/etc/chirpstack/region_au915_4.toml", "/etc/chirpstack/region_au915_4.toml",
"/etc/chirpstack/region_au915_5.toml", "/etc/chirpstack/region_au915_5.toml",
"/etc/chirpstack/region_au915_6.toml", "/etc/chirpstack/region_au915_6.toml",
"/etc/chirpstack/region_au915_7.toml", "/etc/chirpstack/region_au915_7.toml",
"/etc/chirpstack/region_cn779.toml", "/etc/chirpstack/region_cn779.toml",
"/etc/chirpstack/region_eu433.toml", "/etc/chirpstack/region_eu433.toml",
"/etc/chirpstack/region_eu868.toml", "/etc/chirpstack/region_eu868.toml",
"/etc/chirpstack/region_in865.toml", "/etc/chirpstack/region_in865.toml",
"/etc/chirpstack/region_ism2400.toml", "/etc/chirpstack/region_ism2400.toml",
"/etc/chirpstack/region_kr920.toml", "/etc/chirpstack/region_kr920.toml",
"/etc/chirpstack/region_ru864.toml", "/etc/chirpstack/region_ru864.toml",
"/etc/chirpstack/region_us915_0.toml", "/etc/chirpstack/region_us915_0.toml",
"/etc/chirpstack/region_us915_1.toml", "/etc/chirpstack/region_us915_1.toml",
"/etc/chirpstack/region_us915_2.toml", "/etc/chirpstack/region_us915_2.toml",
"/etc/chirpstack/region_us915_3.toml", "/etc/chirpstack/region_us915_3.toml",
"/etc/chirpstack/region_us915_4.toml", "/etc/chirpstack/region_us915_4.toml",
"/etc/chirpstack/region_us915_5.toml", "/etc/chirpstack/region_us915_5.toml",
"/etc/chirpstack/region_us915_6.toml", "/etc/chirpstack/region_us915_6.toml",
"/etc/chirpstack/region_us915_7.toml", "/etc/chirpstack/region_us915_7.toml",
] ]
suggests = "postgresql, mosquitto, redis" suggests = "postgresql, mosquitto, redis"
maintainer-scripts = "debian/" maintainer-scripts = "debian/"
systemd-units = { enable = true } systemd-units = { enable = true }
[package.metadata.generate-rpm] [package.metadata.generate-rpm]
auto-req = "no" auto-req = "no"
pre_install_script = ''' pre_install_script = '''
id chirpstack &>/dev/null id chirpstack &>/dev/null
if [[ $? -ne 0 ]]; then if [[ $? -ne 0 ]]; then
useradd --system -U -M chirpstack -s /bin/false -d /etc/chirpstack useradd --system -U -M chirpstack -s /bin/false -d /etc/chirpstack
fi fi
''' '''
post_install_script = ''' post_install_script = '''
chown -R chirpstack:chirpstack /etc/chirpstack chown -R chirpstack:chirpstack /etc/chirpstack
chmod 750 /etc/chirpstack chmod 750 /etc/chirpstack
chmod 640 /etc/chirpstack/*.toml chmod 640 /etc/chirpstack/*.toml
''' '''
assets = [ assets = [
{ source = "target/release/chirpstack", dest = "/usr/bin/chirpstack", mode = "755" }, { source = "target/release/chirpstack", dest = "/usr/bin/chirpstack", mode = "755" },
{ source = "configuration/*", dest = "/etc/chirpstack"}, { source = "configuration/*", dest = "/etc/chirpstack" },
{ source = "rpm/chirpstack.service", dest = "/lib/systemd/system/chirpstack.service"}, { source = "rpm/chirpstack.service", dest = "/lib/systemd/system/chirpstack.service" },
] ]

View File

@@ -4,7 +4,7 @@
# Log level. # Log level.
# #
# Options are: trace, debug, info, warn error. # Options are: trace, debug, info, warn error.
level="info" level = "info"
# PostgreSQL configuration. # PostgreSQL configuration.
@@ -19,19 +19,19 @@
# * require - Always SSL (skip verification) # * require - Always SSL (skip verification)
# * verify-ca - Always SSL (verify that the certificate presented by the server was signed by a trusted CA) # * verify-ca - Always SSL (verify that the certificate presented by the server was signed by a trusted CA)
# * verify-full - Always SSL (verify that the certification presented by the server was signed by a trusted CA and the server host name matches the one in the certificate) # * verify-full - Always SSL (verify that the certification presented by the server was signed by a trusted CA and the server host name matches the one in the certificate)
dsn="postgres://chirpstack:chirpstack@localhost/chirpstack?sslmode=disable" dsn = "postgres://chirpstack:chirpstack@localhost/chirpstack?sslmode=disable"
# Max open connections. # Max open connections.
# #
# This sets the max. number of open connections that are allowed in the # This sets the max. number of open connections that are allowed in the
# PostgreSQL connection pool. # PostgreSQL connection pool.
max_open_connections=10 max_open_connections = 10
# Min idle connections. # Min idle connections.
# #
# This sets the min. number of idle connections in the PostgreSQL connection # This sets the min. number of idle connections in the PostgreSQL connection
# pool (0 = equal to max_open_connections). # pool (0 = equal to max_open_connections).
min_idle_connections=0 min_idle_connections = 0
# Redis configuration. # Redis configuration.
@@ -40,28 +40,26 @@
# Server address or addresses. # Server address or addresses.
# #
# Set multiple addresses when connecting to a cluster. # Set multiple addresses when connecting to a cluster.
servers=[ servers = ["redis://localhost/"]
"redis://localhost/",
]
# Redis Cluster. # Redis Cluster.
# #
# Set this to true when the provided URLs are pointing to a Redis Cluster # Set this to true when the provided URLs are pointing to a Redis Cluster
# instance. # instance.
cluster=false cluster = false
# Network related configuration. # Network related configuration.
[network] [network]
# Network identifier (NetID, 3 bytes) encoded as HEX (e.g. 010203). # Network identifier (NetID, 3 bytes) encoded as HEX (e.g. 010203).
net_id="000000" net_id = "000000"
# Enabled regions. # Enabled regions.
# #
# Multiple regions can be enabled simultaneously. Each region must match # Multiple regions can be enabled simultaneously. Each region must match
# the 'name' parameter of the region configuration in '[[regions]]'. # the 'name' parameter of the region configuration in '[[regions]]'.
enabled_regions=[ enabled_regions = [
"as923", "as923",
"as923_2", "as923_2",
"as923_3", "as923_3",
@@ -84,7 +82,7 @@
[api] [api]
# interface:port to bind the API interface to. # interface:port to bind the API interface to.
bind="0.0.0.0:8080" bind = "0.0.0.0:8080"
# Secret. # Secret.
# #
@@ -92,12 +90,12 @@
# is never exposed. Changing this secret will invalidate all login and API # is never exposed. Changing this secret will invalidate all login and API
# tokens. The following command can be used to generate a random secret: # tokens. The following command can be used to generate a random secret:
# openssl rand -base64 32 # openssl rand -base64 32
secret="you-must-replace-this" secret = "you-must-replace-this"
[integration] [integration]
enabled=["mqtt"] enabled = ["mqtt"]
[integration.mqtt] [integration.mqtt]
server="tcp://localhost:1883/" server = "tcp://localhost:1883/"
json=true json = true

View File

@@ -2,14 +2,23 @@
[[regions]] [[regions]]
# ID is an user-defined identifier for this region. # ID is an user-defined identifier for this region.
id="as923" id = "as923"
# Description is a short description for this region. # Description is a short description for this region.
description="AS923" description = "AS923"
# Common-name refers to the common-name of this region as defined by # Common-name refers to the common-name of this region as defined by
# the LoRa Alliance. # the LoRa Alliance.
common_name="AS923" common_name = "AS923"
# User-defined region information.
#
# This information will be displayed on top of the region page in then
# ChirpStack web-interface. For example, it can contain information about
# how users should connect their gateways when using this region (e.g. MQTT
# end-point, MQTT topic prefix, TLS configuration etc). Markdown syntax can
# be used for formatting.
user_info = ""
# Gateway configuration. # Gateway configuration.
@@ -18,14 +27,14 @@
# Force gateways as private. # Force gateways as private.
# #
# If enabled, gateways can only be used by devices under the same tenant. # If enabled, gateways can only be used by devices under the same tenant.
force_gws_private=false force_gws_private = false
# Gateway backend configuration. # Gateway backend configuration.
[regions.gateway.backend] [regions.gateway.backend]
# The enabled backend type. # The enabled backend type.
enabled="mqtt" enabled = "mqtt"
# MQTT configuration. # MQTT configuration.
[regions.gateway.backend.mqtt] [regions.gateway.backend.mqtt]
@@ -35,7 +44,7 @@
# The topic prefix can be used to define the region of the gateway. # The topic prefix can be used to define the region of the gateway.
# Note, there is no need to add a trailing '/' to the prefix. The trailing # Note, there is no need to add a trailing '/' to the prefix. The trailing
# '/' is automatically added to the prefix if it is configured. # '/' is automatically added to the prefix if it is configured.
topic_prefix="as923" topic_prefix = "as923"
# Shared subscription name. # Shared subscription name.
# #
@@ -45,16 +54,16 @@
# test-environment connected to the same MQTT broker, make sure that # test-environment connected to the same MQTT broker, make sure that
# each environment has its own subscription name, for example: # each environment has its own subscription name, for example:
# chirpstack_prod and chirpstack_tst. # chirpstack_prod and chirpstack_tst.
share_name="chirpstack" share_name = "chirpstack"
# MQTT server (e.g. scheme://host:port where scheme is tcp, ssl or ws) # MQTT server (e.g. scheme://host:port where scheme is tcp, ssl or ws)
server="tcp://localhost:1883" server = "tcp://localhost:1883"
# Connect with the given username (optional) # Connect with the given username (optional)
username="" username = ""
# Connect with the given password (optional) # Connect with the given password (optional)
password="" password = ""
# Quality of service level # Quality of service level
# #
@@ -64,40 +73,40 @@
# #
# Note: an increase of this value will decrease the performance. # Note: an increase of this value will decrease the performance.
# For more information: https://www.hivemq.com/blog/mqtt-essentials-part-6-mqtt-quality-of-service-levels # For more information: https://www.hivemq.com/blog/mqtt-essentials-part-6-mqtt-quality-of-service-levels
qos=0 qos = 0
# Clean session # Clean session
# #
# Set the "clean session" flag in the connect message when this client # Set the "clean session" flag in the connect message when this client
# connects to an MQTT broker. By setting this flag you are indicating # connects to an MQTT broker. By setting this flag you are indicating
# that no messages saved by the broker for this client should be delivered. # that no messages saved by the broker for this client should be delivered.
clean_session=false clean_session = false
# Client ID # Client ID
# #
# Set the client id to be used by this client when connecting to the MQTT # Set the client id to be used by this client when connecting to the MQTT
# broker. A client id must be no longer than 23 characters. If left blank, # broker. A client id must be no longer than 23 characters. If left blank,
# a random id will be generated by ChirpStack. # a random id will be generated by ChirpStack.
client_id="" client_id = ""
# Keep alive interval. # Keep alive interval.
# #
# This defines the maximum time that that should pass without communication # This defines the maximum time that that should pass without communication
# between the client and server. # between the client and server.
keep_alive_interval="30s" keep_alive_interval = "30s"
# CA certificate file (optional) # CA certificate file (optional)
# #
# Use this when setting up a secure connection (when server uses ssl://...) # Use this when setting up a secure connection (when server uses ssl://...)
# but the certificate used by the server is not trusted by any CA certificate # but the certificate used by the server is not trusted by any CA certificate
# on the server (e.g. when self generated). # on the server (e.g. when self generated).
ca_cert="" ca_cert = ""
# TLS certificate file (optional) # TLS certificate file (optional)
tls_cert="" tls_cert = ""
# TLS key file (optional) # TLS key file (optional)
tls_key="" tls_key = ""
# Gateway channel configuration. # Gateway channel configuration.
@@ -106,16 +115,16 @@
# ChirpStack Concentratord daemon. In any other case, this configuration # ChirpStack Concentratord daemon. In any other case, this configuration
# is ignored. # is ignored.
[[regions.gateway.channels]] [[regions.gateway.channels]]
frequency=923200000 frequency = 923200000
bandwidth=125000 bandwidth = 125000
modulation="LORA" modulation = "LORA"
spreading_factors=[7, 8, 9, 10, 11, 12] spreading_factors = [7, 8, 9, 10, 11, 12]
[[regions.gateway.channels]] [[regions.gateway.channels]]
frequency=923400000 frequency = 923400000
bandwidth=125000 bandwidth = 125000
modulation="LORA" modulation = "LORA"
spreading_factors=[7, 8, 9, 10, 11, 12] spreading_factors = [7, 8, 9, 10, 11, 12]
# Region specific network configuration. # Region specific network configuration.
@@ -127,7 +136,7 @@
# resulting in a lower data-rate but decreasing the chance that the # resulting in a lower data-rate but decreasing the chance that the
# device gets disconnected because it is unable to reach one of the # device gets disconnected because it is unable to reach one of the
# surrounded gateways. # surrounded gateways.
installation_margin=10 installation_margin = 10
# RX window (Class-A). # RX window (Class-A).
# #
@@ -135,19 +144,19 @@
# 0: RX1 / RX2 # 0: RX1 / RX2
# 1: RX1 only # 1: RX1 only
# 2: RX2 only # 2: RX2 only
rx_window=0 rx_window = 0
# RX1 delay (1 - 15 seconds). # RX1 delay (1 - 15 seconds).
rx1_delay=1 rx1_delay = 1
# RX1 data-rate offset # RX1 data-rate offset
rx1_dr_offset=0 rx1_dr_offset = 0
# RX2 data-rate # RX2 data-rate
rx2_dr=2 rx2_dr = 2
# RX2 frequency (Hz) # RX2 frequency (Hz)
rx2_frequency=923200000 rx2_frequency = 923200000
# Prefer RX2 on RX1 data-rate less than. # Prefer RX2 on RX1 data-rate less than.
# #
@@ -155,13 +164,13 @@
# is smaller than the configured value, then the Network Server will # is smaller than the configured value, then the Network Server will
# first try to schedule the downlink for RX2, failing that (e.g. the gateway # first try to schedule the downlink for RX2, failing that (e.g. the gateway
# has already a payload scheduled at the RX2 timing) it will try RX1. # has already a payload scheduled at the RX2 timing) it will try RX1.
rx2_prefer_on_rx1_dr_lt=0 rx2_prefer_on_rx1_dr_lt = 0
# Prefer RX2 on link budget. # Prefer RX2 on link budget.
# #
# When the link-budget is better for RX2 than for RX1, the Network Server will first # When the link-budget is better for RX2 than for RX1, the Network Server will first
# try to schedule the downlink in RX2, failing that it will try RX1. # try to schedule the downlink in RX2, failing that it will try RX1.
rx2_prefer_on_link_budget=false rx2_prefer_on_link_budget = false
# Downlink TX Power (in dBm EIRP) # Downlink TX Power (in dBm EIRP)
# #
@@ -171,44 +180,44 @@
# Please consult the LoRaWAN Regional Parameters and local regulations # Please consult the LoRaWAN Regional Parameters and local regulations
# for valid and legal options. Note that the configured TX Power must be # for valid and legal options. Note that the configured TX Power must be
# supported by your gateway(s). # supported by your gateway(s).
downlink_tx_power=-1 downlink_tx_power = -1
# ADR is disabled. # ADR is disabled.
adr_disabled=false adr_disabled = false
# Minimum data-rate. # Minimum data-rate.
min_dr=0 min_dr = 0
# Maximum data-rate. # Maximum data-rate.
max_dr=5 max_dr = 5
# Rejoin-request configuration (LoRaWAN 1.1) # Rejoin-request configuration (LoRaWAN 1.1)
[regions.network.rejoin_request] [regions.network.rejoin_request]
# Request devices to periodically send rejoin-requests. # Request devices to periodically send rejoin-requests.
enabled=false enabled = false
# The device must send a rejoin-request type 0 at least every 2^(max_count_n + 4) # The device must send a rejoin-request type 0 at least every 2^(max_count_n + 4)
# uplink messages. Valid values are 0 to 15. # uplink messages. Valid values are 0 to 15.
max_count_n=0 max_count_n = 0
# The device must send a rejoin-request type 0 at least every 2^(max_time_n + 10) # The device must send a rejoin-request type 0 at least every 2^(max_time_n + 10)
# seconds. Valid values are 0 to 15. # seconds. Valid values are 0 to 15.
# #
# 0 = roughly 17 minutes # 0 = roughly 17 minutes
# 15 = about 1 year # 15 = about 1 year
max_time_n=0 max_time_n = 0
# Class-B configuration. # Class-B configuration.
[regions.network.class_b] [regions.network.class_b]
# Ping-slot data-rate. # Ping-slot data-rate.
ping_slot_dr=3 ping_slot_dr = 3
# Ping-slot frequency (Hz) # Ping-slot frequency (Hz)
# #
# set this to 0 to use the default frequency plan for the configured region # set this to 0 to use the default frequency plan for the configured region
# (which could be frequency hopping). # (which could be frequency hopping).
ping_slot_frequency=0 ping_slot_frequency = 0

View File

@@ -2,14 +2,23 @@
[[regions]] [[regions]]
# ID is an user-defined identifier for this region. # ID is an user-defined identifier for this region.
id="as923_2" id = "as923_2"
# Description is a short description for this region. # Description is a short description for this region.
description="AS923-2" description = "AS923-2"
# Common-name refers to the common-name of this region as defined by # Common-name refers to the common-name of this region as defined by
# the LoRa Alliance. # the LoRa Alliance.
common_name="AS923_2" common_name = "AS923_2"
# User-defined region information.
#
# This information will be displayed on top of the region page in then
# ChirpStack web-interface. For example, it can contain information about
# how users should connect their gateways when using this region (e.g. MQTT
# end-point, MQTT topic prefix, TLS configuration etc). Markdown syntax can
# be used for formatting.
user_info = ""
# Gateway configuration. # Gateway configuration.
@@ -18,14 +27,14 @@
# Force gateways as private. # Force gateways as private.
# #
# If enabled, gateways can only be used by devices under the same tenant. # If enabled, gateways can only be used by devices under the same tenant.
force_gws_private=false force_gws_private = false
# Gateway backend configuration. # Gateway backend configuration.
[regions.gateway.backend] [regions.gateway.backend]
# The enabled backend type. # The enabled backend type.
enabled="mqtt" enabled = "mqtt"
# MQTT configuration. # MQTT configuration.
[regions.gateway.backend.mqtt] [regions.gateway.backend.mqtt]
@@ -35,7 +44,7 @@
# The topic prefix can be used to define the region of the gateway. # The topic prefix can be used to define the region of the gateway.
# Note, there is no need to add a trailing '/' to the prefix. The trailing # Note, there is no need to add a trailing '/' to the prefix. The trailing
# '/' is automatically added to the prefix if it is configured. # '/' is automatically added to the prefix if it is configured.
topic_prefix="as923_2" topic_prefix = "as923_2"
# Shared subscription name. # Shared subscription name.
# #
@@ -45,16 +54,16 @@
# test-environment connected to the same MQTT broker, make sure that # test-environment connected to the same MQTT broker, make sure that
# each environment has its own subscription name, for example: # each environment has its own subscription name, for example:
# chirpstack_prod and chirpstack_tst. # chirpstack_prod and chirpstack_tst.
share_name="chirpstack" share_name = "chirpstack"
# MQTT server (e.g. scheme://host:port where scheme is tcp, ssl or ws) # MQTT server (e.g. scheme://host:port where scheme is tcp, ssl or ws)
server="tcp://localhost:1883" server = "tcp://localhost:1883"
# Connect with the given username (optional) # Connect with the given username (optional)
username="" username = ""
# Connect with the given password (optional) # Connect with the given password (optional)
password="" password = ""
# Quality of service level # Quality of service level
# #
@@ -64,40 +73,40 @@
# #
# Note: an increase of this value will decrease the performance. # Note: an increase of this value will decrease the performance.
# For more information: https://www.hivemq.com/blog/mqtt-essentials-part-6-mqtt-quality-of-service-levels # For more information: https://www.hivemq.com/blog/mqtt-essentials-part-6-mqtt-quality-of-service-levels
qos=0 qos = 0
# Clean session # Clean session
# #
# Set the "clean session" flag in the connect message when this client # Set the "clean session" flag in the connect message when this client
# connects to an MQTT broker. By setting this flag you are indicating # connects to an MQTT broker. By setting this flag you are indicating
# that no messages saved by the broker for this client should be delivered. # that no messages saved by the broker for this client should be delivered.
clean_session=false clean_session = false
# Client ID # Client ID
# #
# Set the client id to be used by this client when connecting to the MQTT # Set the client id to be used by this client when connecting to the MQTT
# broker. A client id must be no longer than 23 characters. If left blank, # broker. A client id must be no longer than 23 characters. If left blank,
# a random id will be generated by ChirpStack. # a random id will be generated by ChirpStack.
client_id="" client_id = ""
# Keep alive interval. # Keep alive interval.
# #
# This defines the maximum time that that should pass without communication # This defines the maximum time that that should pass without communication
# between the client and server. # between the client and server.
keep_alive_interval="30s" keep_alive_interval = "30s"
# CA certificate file (optional) # CA certificate file (optional)
# #
# Use this when setting up a secure connection (when server uses ssl://...) # Use this when setting up a secure connection (when server uses ssl://...)
# but the certificate used by the server is not trusted by any CA certificate # but the certificate used by the server is not trusted by any CA certificate
# on the server (e.g. when self generated). # on the server (e.g. when self generated).
ca_cert="" ca_cert = ""
# TLS certificate file (optional) # TLS certificate file (optional)
tls_cert="" tls_cert = ""
# TLS key file (optional) # TLS key file (optional)
tls_key="" tls_key = ""
# Gateway channel configuration. # Gateway channel configuration.
@@ -106,16 +115,16 @@
# ChirpStack Concentratord daemon. In any other case, this configuration # ChirpStack Concentratord daemon. In any other case, this configuration
# is ignored. # is ignored.
[[regions.gateway.channels]] [[regions.gateway.channels]]
frequency=921400000 frequency = 921400000
bandwidth=125000 bandwidth = 125000
modulation="LORA" modulation = "LORA"
spreading_factors=[7, 8, 9, 10, 11, 12] spreading_factors = [7, 8, 9, 10, 11, 12]
[[regions.gateway.channels]] [[regions.gateway.channels]]
frequency=921600000 frequency = 921600000
bandwidth=125000 bandwidth = 125000
modulation="LORA" modulation = "LORA"
spreading_factors=[7, 8, 9, 10, 11, 12] spreading_factors = [7, 8, 9, 10, 11, 12]
# Region specific network configuration. # Region specific network configuration.
@@ -127,7 +136,7 @@
# resulting in a lower data-rate but decreasing the chance that the # resulting in a lower data-rate but decreasing the chance that the
# device gets disconnected because it is unable to reach one of the # device gets disconnected because it is unable to reach one of the
# surrounded gateways. # surrounded gateways.
installation_margin=10 installation_margin = 10
# RX window (Class-A). # RX window (Class-A).
# #
@@ -135,19 +144,19 @@
# 0: RX1 / RX2 # 0: RX1 / RX2
# 1: RX1 only # 1: RX1 only
# 2: RX2 only # 2: RX2 only
rx_window=0 rx_window = 0
# RX1 delay (1 - 15 seconds). # RX1 delay (1 - 15 seconds).
rx1_delay=1 rx1_delay = 1
# RX1 data-rate offset # RX1 data-rate offset
rx1_dr_offset=0 rx1_dr_offset = 0
# RX2 data-rate # RX2 data-rate
rx2_dr=0 rx2_dr = 0
# RX2 frequency (Hz) # RX2 frequency (Hz)
rx2_frequency=921400000 rx2_frequency = 921400000
# Prefer RX2 on RX1 data-rate less than. # Prefer RX2 on RX1 data-rate less than.
# #
@@ -155,13 +164,13 @@
# is smaller than the configured value, then the Network Server will # is smaller than the configured value, then the Network Server will
# first try to schedule the downlink for RX2, failing that (e.g. the gateway # first try to schedule the downlink for RX2, failing that (e.g. the gateway
# has already a payload scheduled at the RX2 timing) it will try RX1. # has already a payload scheduled at the RX2 timing) it will try RX1.
rx2_prefer_on_rx1_dr_lt=0 rx2_prefer_on_rx1_dr_lt = 0
# Prefer RX2 on link budget. # Prefer RX2 on link budget.
# #
# When the link-budget is better for RX2 than for RX1, the Network Server will first # When the link-budget is better for RX2 than for RX1, the Network Server will first
# try to schedule the downlink in RX2, failing that it will try RX1. # try to schedule the downlink in RX2, failing that it will try RX1.
rx2_prefer_on_link_budget=false rx2_prefer_on_link_budget = false
# Downlink TX Power (in dBm EIRP) # Downlink TX Power (in dBm EIRP)
# #
@@ -171,44 +180,44 @@
# Please consult the LoRaWAN Regional Parameters and local regulations # Please consult the LoRaWAN Regional Parameters and local regulations
# for valid and legal options. Note that the configured TX Power must be # for valid and legal options. Note that the configured TX Power must be
# supported by your gateway(s). # supported by your gateway(s).
downlink_tx_power=-1 downlink_tx_power = -1
# ADR is disabled. # ADR is disabled.
adr_disabled=false adr_disabled = false
# Minimum data-rate. # Minimum data-rate.
min_dr=0 min_dr = 0
# Maximum data-rate. # Maximum data-rate.
max_dr=5 max_dr = 5
# Rejoin-request configuration (LoRaWAN 1.1) # Rejoin-request configuration (LoRaWAN 1.1)
[regions.network.rejoin_request] [regions.network.rejoin_request]
# Request devices to periodically send rejoin-requests. # Request devices to periodically send rejoin-requests.
enabled=false enabled = false
# The device must send a rejoin-request type 0 at least every 2^(max_count_n + 4) # The device must send a rejoin-request type 0 at least every 2^(max_count_n + 4)
# uplink messages. Valid values are 0 to 15. # uplink messages. Valid values are 0 to 15.
max_count_n=0 max_count_n = 0
# The device must send a rejoin-request type 0 at least every 2^(max_time_n + 10) # The device must send a rejoin-request type 0 at least every 2^(max_time_n + 10)
# seconds. Valid values are 0 to 15. # seconds. Valid values are 0 to 15.
# #
# 0 = roughly 17 minutes # 0 = roughly 17 minutes
# 15 = about 1 year # 15 = about 1 year
max_time_n=0 max_time_n = 0
# Class-B configuration. # Class-B configuration.
[regions.network.class_b] [regions.network.class_b]
# Ping-slot data-rate. # Ping-slot data-rate.
ping_slot_dr=3 ping_slot_dr = 3
# Ping-slot frequency (Hz) # Ping-slot frequency (Hz)
# #
# set this to 0 to use the default frequency plan for the configured region # set this to 0 to use the default frequency plan for the configured region
# (which could be frequency hopping). # (which could be frequency hopping).
ping_slot_frequency=0 ping_slot_frequency = 0

View File

@@ -2,14 +2,23 @@
[[regions]] [[regions]]
# ID is an user-defined identifier for this region. # ID is an user-defined identifier for this region.
id="as923_3" id = "as923_3"
# Description is a short description for this region. # Description is a short description for this region.
description="AS923-3" description = "AS923-3"
# Common-name refers to the common-name of this region as defined by # Common-name refers to the common-name of this region as defined by
# the LoRa Alliance. # the LoRa Alliance.
common_name="AS923_3" common_name = "AS923_3"
# User-defined region information.
#
# This information will be displayed on top of the region page in then
# ChirpStack web-interface. For example, it can contain information about
# how users should connect their gateways when using this region (e.g. MQTT
# end-point, MQTT topic prefix, TLS configuration etc). Markdown syntax can
# be used for formatting.
user_info = ""
# Gateway configuration. # Gateway configuration.
@@ -18,14 +27,14 @@
# Force gateways as private. # Force gateways as private.
# #
# If enabled, gateways can only be used by devices under the same tenant. # If enabled, gateways can only be used by devices under the same tenant.
force_gws_private=false force_gws_private = false
# Gateway backend configuration. # Gateway backend configuration.
[regions.gateway.backend] [regions.gateway.backend]
# The enabled backend type. # The enabled backend type.
enabled="mqtt" enabled = "mqtt"
# MQTT configuration. # MQTT configuration.
[regions.gateway.backend.mqtt] [regions.gateway.backend.mqtt]
@@ -35,7 +44,7 @@
# The topic prefix can be used to define the region of the gateway. # The topic prefix can be used to define the region of the gateway.
# Note, there is no need to add a trailing '/' to the prefix. The trailing # Note, there is no need to add a trailing '/' to the prefix. The trailing
# '/' is automatically added to the prefix if it is configured. # '/' is automatically added to the prefix if it is configured.
topic_prefix="as923_3" topic_prefix = "as923_3"
# Shared subscription name. # Shared subscription name.
# #
@@ -45,16 +54,16 @@
# test-environment connected to the same MQTT broker, make sure that # test-environment connected to the same MQTT broker, make sure that
# each environment has its own subscription name, for example: # each environment has its own subscription name, for example:
# chirpstack_prod and chirpstack_tst. # chirpstack_prod and chirpstack_tst.
share_name="chirpstack" share_name = "chirpstack"
# MQTT server (e.g. scheme://host:port where scheme is tcp, ssl or ws) # MQTT server (e.g. scheme://host:port where scheme is tcp, ssl or ws)
server="tcp://localhost:1883" server = "tcp://localhost:1883"
# Connect with the given username (optional) # Connect with the given username (optional)
username="" username = ""
# Connect with the given password (optional) # Connect with the given password (optional)
password="" password = ""
# Quality of service level # Quality of service level
# #
@@ -64,40 +73,40 @@
# #
# Note: an increase of this value will decrease the performance. # Note: an increase of this value will decrease the performance.
# For more information: https://www.hivemq.com/blog/mqtt-essentials-part-6-mqtt-quality-of-service-levels # For more information: https://www.hivemq.com/blog/mqtt-essentials-part-6-mqtt-quality-of-service-levels
qos=0 qos = 0
# Clean session # Clean session
# #
# Set the "clean session" flag in the connect message when this client # Set the "clean session" flag in the connect message when this client
# connects to an MQTT broker. By setting this flag you are indicating # connects to an MQTT broker. By setting this flag you are indicating
# that no messages saved by the broker for this client should be delivered. # that no messages saved by the broker for this client should be delivered.
clean_session=false clean_session = false
# Client ID # Client ID
# #
# Set the client id to be used by this client when connecting to the MQTT # Set the client id to be used by this client when connecting to the MQTT
# broker. A client id must be no longer than 23 characters. If left blank, # broker. A client id must be no longer than 23 characters. If left blank,
# a random id will be generated by ChirpStack. # a random id will be generated by ChirpStack.
client_id="" client_id = ""
# Keep alive interval. # Keep alive interval.
# #
# This defines the maximum time that that should pass without communication # This defines the maximum time that that should pass without communication
# between the client and server. # between the client and server.
keep_alive_interval="30s" keep_alive_interval = "30s"
# CA certificate file (optional) # CA certificate file (optional)
# #
# Use this when setting up a secure connection (when server uses ssl://...) # Use this when setting up a secure connection (when server uses ssl://...)
# but the certificate used by the server is not trusted by any CA certificate # but the certificate used by the server is not trusted by any CA certificate
# on the server (e.g. when self generated). # on the server (e.g. when self generated).
ca_cert="" ca_cert = ""
# TLS certificate file (optional) # TLS certificate file (optional)
tls_cert="" tls_cert = ""
# TLS key file (optional) # TLS key file (optional)
tls_key="" tls_key = ""
# Gateway channel configuration. # Gateway channel configuration.
@@ -106,16 +115,16 @@
# ChirpStack Concentratord daemon. In any other case, this configuration # ChirpStack Concentratord daemon. In any other case, this configuration
# is ignored. # is ignored.
[[regions.gateway.channels]] [[regions.gateway.channels]]
frequency=916600000 frequency = 916600000
bandwidth=125000 bandwidth = 125000
modulation="LORA" modulation = "LORA"
spreading_factors=[7, 8, 9, 10, 11, 12] spreading_factors = [7, 8, 9, 10, 11, 12]
[[regions.gateway.channels]] [[regions.gateway.channels]]
frequency=916800000 frequency = 916800000
bandwidth=125000 bandwidth = 125000
modulation="LORA" modulation = "LORA"
spreading_factors=[7, 8, 9, 10, 11, 12] spreading_factors = [7, 8, 9, 10, 11, 12]
# Region specific network configuration. # Region specific network configuration.
@@ -127,7 +136,7 @@
# resulting in a lower data-rate but decreasing the chance that the # resulting in a lower data-rate but decreasing the chance that the
# device gets disconnected because it is unable to reach one of the # device gets disconnected because it is unable to reach one of the
# surrounded gateways. # surrounded gateways.
installation_margin=10 installation_margin = 10
# RX window (Class-A). # RX window (Class-A).
# #
@@ -135,19 +144,19 @@
# 0: RX1 / RX2 # 0: RX1 / RX2
# 1: RX1 only # 1: RX1 only
# 2: RX2 only # 2: RX2 only
rx_window=0 rx_window = 0
# RX1 delay (1 - 15 seconds). # RX1 delay (1 - 15 seconds).
rx1_delay=1 rx1_delay = 1
# RX1 data-rate offset # RX1 data-rate offset
rx1_dr_offset=0 rx1_dr_offset = 0
# RX2 data-rate # RX2 data-rate
rx2_dr=2 rx2_dr = 2
# RX2 frequency (Hz) # RX2 frequency (Hz)
rx2_frequency=916600000 rx2_frequency = 916600000
# Prefer RX2 on RX1 data-rate less than. # Prefer RX2 on RX1 data-rate less than.
# #
@@ -155,13 +164,13 @@
# is smaller than the configured value, then the Network Server will # is smaller than the configured value, then the Network Server will
# first try to schedule the downlink for RX2, failing that (e.g. the gateway # first try to schedule the downlink for RX2, failing that (e.g. the gateway
# has already a payload scheduled at the RX2 timing) it will try RX1. # has already a payload scheduled at the RX2 timing) it will try RX1.
rx2_prefer_on_rx1_dr_lt=0 rx2_prefer_on_rx1_dr_lt = 0
# Prefer RX2 on link budget. # Prefer RX2 on link budget.
# #
# When the link-budget is better for RX2 than for RX1, the Network Server will first # When the link-budget is better for RX2 than for RX1, the Network Server will first
# try to schedule the downlink in RX2, failing that it will try RX1. # try to schedule the downlink in RX2, failing that it will try RX1.
rx2_prefer_on_link_budget=false rx2_prefer_on_link_budget = false
# Downlink TX Power (in dBm EIRP) # Downlink TX Power (in dBm EIRP)
# #
@@ -171,44 +180,44 @@
# Please consult the LoRaWAN Regional Parameters and local regulations # Please consult the LoRaWAN Regional Parameters and local regulations
# for valid and legal options. Note that the configured TX Power must be # for valid and legal options. Note that the configured TX Power must be
# supported by your gateway(s). # supported by your gateway(s).
downlink_tx_power=-1 downlink_tx_power = -1
# ADR is disabled. # ADR is disabled.
adr_disabled=false adr_disabled = false
# Minimum data-rate. # Minimum data-rate.
min_dr=0 min_dr = 0
# Maximum data-rate. # Maximum data-rate.
max_dr=5 max_dr = 5
# Rejoin-request configuration (LoRaWAN 1.1) # Rejoin-request configuration (LoRaWAN 1.1)
[regions.network.rejoin_request] [regions.network.rejoin_request]
# Request devices to periodically send rejoin-requests. # Request devices to periodically send rejoin-requests.
enabled=false enabled = false
# The device must send a rejoin-request type 0 at least every 2^(max_count_n + 4) # The device must send a rejoin-request type 0 at least every 2^(max_count_n + 4)
# uplink messages. Valid values are 0 to 15. # uplink messages. Valid values are 0 to 15.
max_count_n=0 max_count_n = 0
# The device must send a rejoin-request type 0 at least every 2^(max_time_n + 10) # The device must send a rejoin-request type 0 at least every 2^(max_time_n + 10)
# seconds. Valid values are 0 to 15. # seconds. Valid values are 0 to 15.
# #
# 0 = roughly 17 minutes # 0 = roughly 17 minutes
# 15 = about 1 year # 15 = about 1 year
max_time_n=0 max_time_n = 0
# Class-B configuration. # Class-B configuration.
[regions.network.class_b] [regions.network.class_b]
# Ping-slot data-rate. # Ping-slot data-rate.
ping_slot_dr=3 ping_slot_dr = 3
# Ping-slot frequency (Hz) # Ping-slot frequency (Hz)
# #
# set this to 0 to use the default frequency plan for the configured region # set this to 0 to use the default frequency plan for the configured region
# (which could be frequency hopping). # (which could be frequency hopping).
ping_slot_frequency=0 ping_slot_frequency = 0

View File

@@ -2,14 +2,23 @@
[[regions]] [[regions]]
# ID is an user-defined identifier for this region. # ID is an user-defined identifier for this region.
id="as923_4" id = "as923_4"
# Description is a short description for this region. # Description is a short description for this region.
description="AS923-4" description = "AS923-4"
# Common-name refers to the common-name of this region as defined by # Common-name refers to the common-name of this region as defined by
# the LoRa Alliance. # the LoRa Alliance.
common_name="AS923_4" common_name = "AS923_4"
# User-defined region information.
#
# This information will be displayed on top of the region page in then
# ChirpStack web-interface. For example, it can contain information about
# how users should connect their gateways when using this region (e.g. MQTT
# end-point, MQTT topic prefix, TLS configuration etc). Markdown syntax can
# be used for formatting.
user_info = ""
# Gateway configuration. # Gateway configuration.
@@ -18,14 +27,14 @@
# Force gateways as private. # Force gateways as private.
# #
# If enabled, gateways can only be used by devices under the same tenant. # If enabled, gateways can only be used by devices under the same tenant.
force_gws_private=false force_gws_private = false
# Gateway backend configuration. # Gateway backend configuration.
[regions.gateway.backend] [regions.gateway.backend]
# The enabled backend type. # The enabled backend type.
enabled="mqtt" enabled = "mqtt"
# MQTT configuration. # MQTT configuration.
[regions.gateway.backend.mqtt] [regions.gateway.backend.mqtt]
@@ -35,7 +44,7 @@
# The topic prefix can be used to define the region of the gateway. # The topic prefix can be used to define the region of the gateway.
# Note, there is no need to add a trailing '/' to the prefix. The trailing # Note, there is no need to add a trailing '/' to the prefix. The trailing
# '/' is automatically added to the prefix if it is configured. # '/' is automatically added to the prefix if it is configured.
topic_prefix="as923_4" topic_prefix = "as923_4"
# Shared subscription name. # Shared subscription name.
# #
@@ -45,16 +54,16 @@
# test-environment connected to the same MQTT broker, make sure that # test-environment connected to the same MQTT broker, make sure that
# each environment has its own subscription name, for example: # each environment has its own subscription name, for example:
# chirpstack_prod and chirpstack_tst. # chirpstack_prod and chirpstack_tst.
share_name="chirpstack" share_name = "chirpstack"
# MQTT server (e.g. scheme://host:port where scheme is tcp, ssl or ws) # MQTT server (e.g. scheme://host:port where scheme is tcp, ssl or ws)
server="tcp://localhost:1883" server = "tcp://localhost:1883"
# Connect with the given username (optional) # Connect with the given username (optional)
username="" username = ""
# Connect with the given password (optional) # Connect with the given password (optional)
password="" password = ""
# Quality of service level # Quality of service level
# #
@@ -64,40 +73,40 @@
# #
# Note: an increase of this value will decrease the performance. # Note: an increase of this value will decrease the performance.
# For more information: https://www.hivemq.com/blog/mqtt-essentials-part-6-mqtt-quality-of-service-levels # For more information: https://www.hivemq.com/blog/mqtt-essentials-part-6-mqtt-quality-of-service-levels
qos=0 qos = 0
# Clean session # Clean session
# #
# Set the "clean session" flag in the connect message when this client # Set the "clean session" flag in the connect message when this client
# connects to an MQTT broker. By setting this flag you are indicating # connects to an MQTT broker. By setting this flag you are indicating
# that no messages saved by the broker for this client should be delivered. # that no messages saved by the broker for this client should be delivered.
clean_session=false clean_session = false
# Client ID # Client ID
# #
# Set the client id to be used by this client when connecting to the MQTT # Set the client id to be used by this client when connecting to the MQTT
# broker. A client id must be no longer than 23 characters. If left blank, # broker. A client id must be no longer than 23 characters. If left blank,
# a random id will be generated by ChirpStack. # a random id will be generated by ChirpStack.
client_id="" client_id = ""
# Keep alive interval. # Keep alive interval.
# #
# This defines the maximum time that that should pass without communication # This defines the maximum time that that should pass without communication
# between the client and server. # between the client and server.
keep_alive_interval="30s" keep_alive_interval = "30s"
# CA certificate file (optional) # CA certificate file (optional)
# #
# Use this when setting up a secure connection (when server uses ssl://...) # Use this when setting up a secure connection (when server uses ssl://...)
# but the certificate used by the server is not trusted by any CA certificate # but the certificate used by the server is not trusted by any CA certificate
# on the server (e.g. when self generated). # on the server (e.g. when self generated).
ca_cert="" ca_cert = ""
# TLS certificate file (optional) # TLS certificate file (optional)
tls_cert="" tls_cert = ""
# TLS key file (optional) # TLS key file (optional)
tls_key="" tls_key = ""
# Gateway channel configuration. # Gateway channel configuration.
@@ -106,16 +115,16 @@
# ChirpStack Concentratord daemon. In any other case, this configuration # ChirpStack Concentratord daemon. In any other case, this configuration
# is ignored. # is ignored.
[[regions.gateway.channels]] [[regions.gateway.channels]]
frequency=917300000 frequency = 917300000
bandwidth=125000 bandwidth = 125000
modulation="LORA" modulation = "LORA"
spreading_factors=[7, 8, 9, 10, 11, 12] spreading_factors = [7, 8, 9, 10, 11, 12]
[[regions.gateway.channels]] [[regions.gateway.channels]]
frequency=917500000 frequency = 917500000
bandwidth=125000 bandwidth = 125000
modulation="LORA" modulation = "LORA"
spreading_factors=[7, 8, 9, 10, 11, 12] spreading_factors = [7, 8, 9, 10, 11, 12]
# Region specific network configuration. # Region specific network configuration.
@@ -127,7 +136,7 @@
# resulting in a lower data-rate but decreasing the chance that the # resulting in a lower data-rate but decreasing the chance that the
# device gets disconnected because it is unable to reach one of the # device gets disconnected because it is unable to reach one of the
# surrounded gateways. # surrounded gateways.
installation_margin=10 installation_margin = 10
# RX window (Class-A). # RX window (Class-A).
# #
@@ -135,19 +144,19 @@
# 0: RX1 / RX2 # 0: RX1 / RX2
# 1: RX1 only # 1: RX1 only
# 2: RX2 only # 2: RX2 only
rx_window=0 rx_window = 0
# RX1 delay (1 - 15 seconds). # RX1 delay (1 - 15 seconds).
rx1_delay=1 rx1_delay = 1
# RX1 data-rate offset # RX1 data-rate offset
rx1_dr_offset=0 rx1_dr_offset = 0
# RX2 data-rate # RX2 data-rate
rx2_dr=2 rx2_dr = 2
# RX2 frequency (Hz) # RX2 frequency (Hz)
rx2_frequency=917300000 rx2_frequency = 917300000
# Prefer RX2 on RX1 data-rate less than. # Prefer RX2 on RX1 data-rate less than.
# #
@@ -155,13 +164,13 @@
# is smaller than the configured value, then the Network Server will # is smaller than the configured value, then the Network Server will
# first try to schedule the downlink for RX2, failing that (e.g. the gateway # first try to schedule the downlink for RX2, failing that (e.g. the gateway
# has already a payload scheduled at the RX2 timing) it will try RX1. # has already a payload scheduled at the RX2 timing) it will try RX1.
rx2_prefer_on_rx1_dr_lt=0 rx2_prefer_on_rx1_dr_lt = 0
# Prefer RX2 on link budget. # Prefer RX2 on link budget.
# #
# When the link-budget is better for RX2 than for RX1, the Network Server will first # When the link-budget is better for RX2 than for RX1, the Network Server will first
# try to schedule the downlink in RX2, failing that it will try RX1. # try to schedule the downlink in RX2, failing that it will try RX1.
rx2_prefer_on_link_budget=false rx2_prefer_on_link_budget = false
# Downlink TX Power (in dBm EIRP) # Downlink TX Power (in dBm EIRP)
# #
@@ -171,44 +180,44 @@
# Please consult the LoRaWAN Regional Parameters and local regulations # Please consult the LoRaWAN Regional Parameters and local regulations
# for valid and legal options. Note that the configured TX Power must be # for valid and legal options. Note that the configured TX Power must be
# supported by your gateway(s). # supported by your gateway(s).
downlink_tx_power=-1 downlink_tx_power = -1
# ADR is disabled. # ADR is disabled.
adr_disabled=false adr_disabled = false
# Minimum data-rate. # Minimum data-rate.
min_dr=0 min_dr = 0
# Maximum data-rate. # Maximum data-rate.
max_dr=5 max_dr = 5
# Rejoin-request configuration (LoRaWAN 1.1) # Rejoin-request configuration (LoRaWAN 1.1)
[regions.network.rejoin_request] [regions.network.rejoin_request]
# Request devices to periodically send rejoin-requests. # Request devices to periodically send rejoin-requests.
enabled=false enabled = false
# The device must send a rejoin-request type 0 at least every 2^(max_count_n + 4) # The device must send a rejoin-request type 0 at least every 2^(max_count_n + 4)
# uplink messages. Valid values are 0 to 15. # uplink messages. Valid values are 0 to 15.
max_count_n=0 max_count_n = 0
# The device must send a rejoin-request type 0 at least every 2^(max_time_n + 10) # The device must send a rejoin-request type 0 at least every 2^(max_time_n + 10)
# seconds. Valid values are 0 to 15. # seconds. Valid values are 0 to 15.
# #
# 0 = roughly 17 minutes # 0 = roughly 17 minutes
# 15 = about 1 year # 15 = about 1 year
max_time_n=0 max_time_n = 0
# Class-B configuration. # Class-B configuration.
[regions.network.class_b] [regions.network.class_b]
# Ping-slot data-rate. # Ping-slot data-rate.
ping_slot_dr=3 ping_slot_dr = 3
# Ping-slot frequency (Hz) # Ping-slot frequency (Hz)
# #
# set this to 0 to use the default frequency plan for the configured region # set this to 0 to use the default frequency plan for the configured region
# (which could be frequency hopping). # (which could be frequency hopping).
ping_slot_frequency=0 ping_slot_frequency = 0

View File

@@ -2,14 +2,23 @@
[[regions]] [[regions]]
# ID is an use-defined identifier for this region. # ID is an use-defined identifier for this region.
id="au915_0" id = "au915_0"
# Description is a short description for this region. # Description is a short description for this region.
description="AU915 (channels 0-7 + 64)" description = "AU915 (channels 0-7 + 64)"
# Common-name refers to the common-name of this region as defined by # Common-name refers to the common-name of this region as defined by
# the LoRa Alliance. # the LoRa Alliance.
common_name="AU915" common_name = "AU915"
# User-defined region information.
#
# This information will be displayed on top of the region page in then
# ChirpStack web-interface. For example, it can contain information about
# how users should connect their gateways when using this region (e.g. MQTT
# end-point, MQTT topic prefix, TLS configuration etc). Markdown syntax can
# be used for formatting.
user_info = ""
# Gateway configuration. # Gateway configuration.
@@ -18,14 +27,14 @@
# Force gateways as private. # Force gateways as private.
# #
# If enabled, gateways can only be used by devices under the same tenant. # If enabled, gateways can only be used by devices under the same tenant.
force_gws_private=false force_gws_private = false
# Gateway backend configuration. # Gateway backend configuration.
[regions.gateway.backend] [regions.gateway.backend]
# The enabled backend type. # The enabled backend type.
enabled="mqtt" enabled = "mqtt"
# MQTT configuration. # MQTT configuration.
[regions.gateway.backend.mqtt] [regions.gateway.backend.mqtt]
@@ -35,7 +44,7 @@
# The topic prefix can be used to define the region of the gateway. # The topic prefix can be used to define the region of the gateway.
# Note, there is no need to add a trailing '/' to the prefix. The trailing # Note, there is no need to add a trailing '/' to the prefix. The trailing
# '/' is automatically added to the prefix if it is configured. # '/' is automatically added to the prefix if it is configured.
topic_prefix="au915_0" topic_prefix = "au915_0"
# Shared subscription name. # Shared subscription name.
# #
@@ -45,16 +54,16 @@
# test-environment connected to the same MQTT broker, make sure that # test-environment connected to the same MQTT broker, make sure that
# each environment has its own subscription name, for example: # each environment has its own subscription name, for example:
# chirpstack_prod and chirpstack_tst. # chirpstack_prod and chirpstack_tst.
share_name="chirpstack" share_name = "chirpstack"
# MQTT server (e.g. scheme://host:port where scheme is tcp, ssl or ws) # MQTT server (e.g. scheme://host:port where scheme is tcp, ssl or ws)
server="tcp://localhost:1883" server = "tcp://localhost:1883"
# Connect with the given username (optional) # Connect with the given username (optional)
username="" username = ""
# Connect with the given password (optional) # Connect with the given password (optional)
password="" password = ""
# Quality of service level # Quality of service level
# #
@@ -64,40 +73,40 @@
# #
# Note: an increase of this value will decrease the performance. # Note: an increase of this value will decrease the performance.
# For more information: https://www.hivemq.com/blog/mqtt-essentials-part-6-mqtt-quality-of-service-levels # For more information: https://www.hivemq.com/blog/mqtt-essentials-part-6-mqtt-quality-of-service-levels
qos=0 qos = 0
# Clean session # Clean session
# #
# Set the "clean session" flag in the connect message when this client # Set the "clean session" flag in the connect message when this client
# connects to an MQTT broker. By setting this flag you are indicating # connects to an MQTT broker. By setting this flag you are indicating
# that no messages saved by the broker for this client should be delivered. # that no messages saved by the broker for this client should be delivered.
clean_session=false clean_session = false
# Client ID # Client ID
# #
# Set the client id to be used by this client when connecting to the MQTT # Set the client id to be used by this client when connecting to the MQTT
# broker. A client id must be no longer than 23 characters. If left blank, # broker. A client id must be no longer than 23 characters. If left blank,
# a random id will be generated by ChirpStack. # a random id will be generated by ChirpStack.
client_id="" client_id = ""
# Keep alive interval. # Keep alive interval.
# #
# This defines the maximum time that that should pass without communication # This defines the maximum time that that should pass without communication
# between the client and server. # between the client and server.
keep_alive_interval="30s" keep_alive_interval = "30s"
# CA certificate file (optional) # CA certificate file (optional)
# #
# Use this when setting up a secure connection (when server uses ssl://...) # Use this when setting up a secure connection (when server uses ssl://...)
# but the certificate used by the server is not trusted by any CA certificate # but the certificate used by the server is not trusted by any CA certificate
# on the server (e.g. when self generated). # on the server (e.g. when self generated).
ca_cert="" ca_cert = ""
# TLS certificate file (optional) # TLS certificate file (optional)
tls_cert="" tls_cert = ""
# TLS key file (optional) # TLS key file (optional)
tls_key="" tls_key = ""
# Gateway channel configuration. # Gateway channel configuration.
@@ -106,58 +115,58 @@
# ChirpStack Concentratord daemon. In any other case, this configuration # ChirpStack Concentratord daemon. In any other case, this configuration
# is ignored. # is ignored.
[[regions.gateway.channels]] [[regions.gateway.channels]]
frequency=915200000 frequency = 915200000
bandwidth=125000 bandwidth = 125000
modulation="LORA" modulation = "LORA"
spreading_factors=[7, 8, 9, 10, 11, 12] spreading_factors = [7, 8, 9, 10, 11, 12]
[[regions.gateway.channels]] [[regions.gateway.channels]]
frequency=915400000 frequency = 915400000
bandwidth=125000 bandwidth = 125000
modulation="LORA" modulation = "LORA"
spreading_factors=[7, 8, 9, 10, 11, 12] spreading_factors = [7, 8, 9, 10, 11, 12]
[[regions.gateway.channels]] [[regions.gateway.channels]]
frequency=915600000 frequency = 915600000
bandwidth=125000 bandwidth = 125000
modulation="LORA" modulation = "LORA"
spreading_factors=[7, 8, 9, 10, 11, 12] spreading_factors = [7, 8, 9, 10, 11, 12]
[[regions.gateway.channels]] [[regions.gateway.channels]]
frequency=915800000 frequency = 915800000
bandwidth=125000 bandwidth = 125000
modulation="LORA" modulation = "LORA"
spreading_factors=[7, 8, 9, 10, 11, 12] spreading_factors = [7, 8, 9, 10, 11, 12]
[[regions.gateway.channels]] [[regions.gateway.channels]]
frequency=916000000 frequency = 916000000
bandwidth=125000 bandwidth = 125000
modulation="LORA" modulation = "LORA"
spreading_factors=[7, 8, 9, 10, 11, 12] spreading_factors = [7, 8, 9, 10, 11, 12]
[[regions.gateway.channels]] [[regions.gateway.channels]]
frequency=916200000 frequency = 916200000
bandwidth=125000 bandwidth = 125000
modulation="LORA" modulation = "LORA"
spreading_factors=[7, 8, 9, 10, 11, 12] spreading_factors = [7, 8, 9, 10, 11, 12]
[[regions.gateway.channels]] [[regions.gateway.channels]]
frequency=916400000 frequency = 916400000
bandwidth=125000 bandwidth = 125000
modulation="LORA" modulation = "LORA"
spreading_factors=[7, 8, 9, 10, 11, 12] spreading_factors = [7, 8, 9, 10, 11, 12]
[[regions.gateway.channels]] [[regions.gateway.channels]]
frequency=916600000 frequency = 916600000
bandwidth=125000 bandwidth = 125000
modulation="LORA" modulation = "LORA"
spreading_factors=[7, 8, 9, 10, 11, 12] spreading_factors = [7, 8, 9, 10, 11, 12]
[[regions.gateway.channels]] [[regions.gateway.channels]]
frequency=915900000 frequency = 915900000
bandwidth=500000 bandwidth = 500000
modulation="LORA" modulation = "LORA"
spreading_factors=[8] spreading_factors = [8]
# Region specific network configuration. # Region specific network configuration.
@@ -169,7 +178,7 @@
# resulting in a lower data-rate but decreasing the chance that the # resulting in a lower data-rate but decreasing the chance that the
# device gets disconnected because it is unable to reach one of the # device gets disconnected because it is unable to reach one of the
# surrounded gateways. # surrounded gateways.
installation_margin=10 installation_margin = 10
# RX window (Class-A). # RX window (Class-A).
# #
@@ -177,19 +186,19 @@
# 0: RX1 / RX2 # 0: RX1 / RX2
# 1: RX1 only # 1: RX1 only
# 2: RX2 only # 2: RX2 only
rx_window=0 rx_window = 0
# RX1 delay (1 - 15 seconds). # RX1 delay (1 - 15 seconds).
rx1_delay=1 rx1_delay = 1
# RX1 data-rate offset # RX1 data-rate offset
rx1_dr_offset=0 rx1_dr_offset = 0
# RX2 data-rate # RX2 data-rate
rx2_dr=8 rx2_dr = 8
# RX2 frequency (Hz) # RX2 frequency (Hz)
rx2_frequency=923300000 rx2_frequency = 923300000
# Prefer RX2 on RX1 data-rate less than. # Prefer RX2 on RX1 data-rate less than.
# #
@@ -197,13 +206,13 @@
# is smaller than the configured value, then the Network Server will # is smaller than the configured value, then the Network Server will
# first try to schedule the downlink for RX2, failing that (e.g. the gateway # first try to schedule the downlink for RX2, failing that (e.g. the gateway
# has already a payload scheduled at the RX2 timing) it will try RX1. # has already a payload scheduled at the RX2 timing) it will try RX1.
rx2_prefer_on_rx1_dr_lt=0 rx2_prefer_on_rx1_dr_lt = 0
# Prefer RX2 on link budget. # Prefer RX2 on link budget.
# #
# When the link-budget is better for RX2 than for RX1, the Network Server will first # When the link-budget is better for RX2 than for RX1, the Network Server will first
# try to schedule the downlink in RX2, failing that it will try RX1. # try to schedule the downlink in RX2, failing that it will try RX1.
rx2_prefer_on_link_budget=false rx2_prefer_on_link_budget = false
# Downlink TX Power (in dBm EIRP) # Downlink TX Power (in dBm EIRP)
# #
@@ -213,51 +222,51 @@
# Please consult the LoRaWAN Regional Parameters and local regulations # Please consult the LoRaWAN Regional Parameters and local regulations
# for valid and legal options. Note that the configured TX Power must be # for valid and legal options. Note that the configured TX Power must be
# supported by your gateway(s). # supported by your gateway(s).
downlink_tx_power=-1 downlink_tx_power = -1
# ADR is disabled. # ADR is disabled.
adr_disabled=false adr_disabled = false
# Minimum data-rate. # Minimum data-rate.
min_dr=0 min_dr = 0
# Maximum data-rate. # Maximum data-rate.
max_dr=5 max_dr = 5
# Enabled uplink channels. # Enabled uplink channels.
# #
# Use this when ony a sub-set of the by default enabled channels are being # Use this when ony a sub-set of the by default enabled channels are being
# used. For example when only using the first 8 channels of the US band. # used. For example when only using the first 8 channels of the US band.
# Note: when left blank / empty array, all channels will be enabled. # Note: when left blank / empty array, all channels will be enabled.
enabled_uplink_channels=[0, 1, 2, 3, 4, 5, 6, 7, 64] enabled_uplink_channels = [0, 1, 2, 3, 4, 5, 6, 7, 64]
# Rejoin-request configuration (LoRaWAN 1.1) # Rejoin-request configuration (LoRaWAN 1.1)
[regions.network.rejoin_request] [regions.network.rejoin_request]
# Request devices to periodically send rejoin-requests. # Request devices to periodically send rejoin-requests.
enabled=false enabled = false
# The device must send a rejoin-request type 0 at least every 2^(max_count_n + 4) # The device must send a rejoin-request type 0 at least every 2^(max_count_n + 4)
# uplink messages. Valid values are 0 to 15. # uplink messages. Valid values are 0 to 15.
max_count_n=0 max_count_n = 0
# The device must send a rejoin-request type 0 at least every 2^(max_time_n + 10) # The device must send a rejoin-request type 0 at least every 2^(max_time_n + 10)
# seconds. Valid values are 0 to 15. # seconds. Valid values are 0 to 15.
# #
# 0 = roughly 17 minutes # 0 = roughly 17 minutes
# 15 = about 1 year # 15 = about 1 year
max_time_n=0 max_time_n = 0
# Class-B configuration. # Class-B configuration.
[regions.network.class_b] [regions.network.class_b]
# Ping-slot data-rate. # Ping-slot data-rate.
ping_slot_dr=8 ping_slot_dr = 8
# Ping-slot frequency (Hz) # Ping-slot frequency (Hz)
# #
# set this to 0 to use the default frequency plan for the configured region # set this to 0 to use the default frequency plan for the configured region
# (which could be frequency hopping). # (which could be frequency hopping).
ping_slot_frequency=0 ping_slot_frequency = 0

View File

@@ -2,14 +2,23 @@
[[regions]] [[regions]]
# ID is an use-defined identifier for this region. # ID is an use-defined identifier for this region.
id="au915_1" id = "au915_1"
# Description is a short description for this region. # Description is a short description for this region.
description="AU915 (channels 8-15 + 65)" description = "AU915 (channels 8-15 + 65)"
# Common-name refers to the common-name of this region as defined by # Common-name refers to the common-name of this region as defined by
# the LoRa Alliance. # the LoRa Alliance.
common_name="AU915" common_name = "AU915"
# User-defined region information.
#
# This information will be displayed on top of the region page in then
# ChirpStack web-interface. For example, it can contain information about
# how users should connect their gateways when using this region (e.g. MQTT
# end-point, MQTT topic prefix, TLS configuration etc). Markdown syntax can
# be used for formatting.
user_info = ""
# Gateway configuration. # Gateway configuration.
@@ -18,14 +27,14 @@
# Force gateways as private. # Force gateways as private.
# #
# If enabled, gateways can only be used by devices under the same tenant. # If enabled, gateways can only be used by devices under the same tenant.
force_gws_private=false force_gws_private = false
# Gateway backend configuration. # Gateway backend configuration.
[regions.gateway.backend] [regions.gateway.backend]
# The enabled backend type. # The enabled backend type.
enabled="mqtt" enabled = "mqtt"
# MQTT configuration. # MQTT configuration.
[regions.gateway.backend.mqtt] [regions.gateway.backend.mqtt]
@@ -35,7 +44,7 @@
# The topic prefix can be used to define the region of the gateway. # The topic prefix can be used to define the region of the gateway.
# Note, there is no need to add a trailing '/' to the prefix. The trailing # Note, there is no need to add a trailing '/' to the prefix. The trailing
# '/' is automatically added to the prefix if it is configured. # '/' is automatically added to the prefix if it is configured.
topic_prefix="au915_1" topic_prefix = "au915_1"
# Shared subscription name. # Shared subscription name.
# #
@@ -45,16 +54,16 @@
# test-environment connected to the same MQTT broker, make sure that # test-environment connected to the same MQTT broker, make sure that
# each environment has its own subscription name, for example: # each environment has its own subscription name, for example:
# chirpstack_prod and chirpstack_tst. # chirpstack_prod and chirpstack_tst.
share_name="chirpstack" share_name = "chirpstack"
# MQTT server (e.g. scheme://host:port where scheme is tcp, ssl or ws) # MQTT server (e.g. scheme://host:port where scheme is tcp, ssl or ws)
server="tcp://localhost:1883" server = "tcp://localhost:1883"
# Connect with the given username (optional) # Connect with the given username (optional)
username="" username = ""
# Connect with the given password (optional) # Connect with the given password (optional)
password="" password = ""
# Quality of service level # Quality of service level
# #
@@ -64,40 +73,40 @@
# #
# Note: an increase of this value will decrease the performance. # Note: an increase of this value will decrease the performance.
# For more information: https://www.hivemq.com/blog/mqtt-essentials-part-6-mqtt-quality-of-service-levels # For more information: https://www.hivemq.com/blog/mqtt-essentials-part-6-mqtt-quality-of-service-levels
qos=0 qos = 0
# Clean session # Clean session
# #
# Set the "clean session" flag in the connect message when this client # Set the "clean session" flag in the connect message when this client
# connects to an MQTT broker. By setting this flag you are indicating # connects to an MQTT broker. By setting this flag you are indicating
# that no messages saved by the broker for this client should be delivered. # that no messages saved by the broker for this client should be delivered.
clean_session=false clean_session = false
# Client ID # Client ID
# #
# Set the client id to be used by this client when connecting to the MQTT # Set the client id to be used by this client when connecting to the MQTT
# broker. A client id must be no longer than 23 characters. If left blank, # broker. A client id must be no longer than 23 characters. If left blank,
# a random id will be generated by ChirpStack. # a random id will be generated by ChirpStack.
client_id="" client_id = ""
# Keep alive interval. # Keep alive interval.
# #
# This defines the maximum time that that should pass without communication # This defines the maximum time that that should pass without communication
# between the client and server. # between the client and server.
keep_alive_interval="30s" keep_alive_interval = "30s"
# CA certificate file (optional) # CA certificate file (optional)
# #
# Use this when setting up a secure connection (when server uses ssl://...) # Use this when setting up a secure connection (when server uses ssl://...)
# but the certificate used by the server is not trusted by any CA certificate # but the certificate used by the server is not trusted by any CA certificate
# on the server (e.g. when self generated). # on the server (e.g. when self generated).
ca_cert="" ca_cert = ""
# TLS certificate file (optional) # TLS certificate file (optional)
tls_cert="" tls_cert = ""
# TLS key file (optional) # TLS key file (optional)
tls_key="" tls_key = ""
# Gateway channel configuration. # Gateway channel configuration.
@@ -106,58 +115,58 @@
# ChirpStack Concentratord daemon. In any other case, this configuration # ChirpStack Concentratord daemon. In any other case, this configuration
# is ignored. # is ignored.
[[regions.gateway.channels]] [[regions.gateway.channels]]
frequency=916800000 frequency = 916800000
bandwidth=125000 bandwidth = 125000
modulation="LORA" modulation = "LORA"
spreading_factors=[7, 8, 9, 10, 11, 12] spreading_factors = [7, 8, 9, 10, 11, 12]
[[regions.gateway.channels]] [[regions.gateway.channels]]
frequency=917000000 frequency = 917000000
bandwidth=125000 bandwidth = 125000
modulation="LORA" modulation = "LORA"
spreading_factors=[7, 8, 9, 10, 11, 12] spreading_factors = [7, 8, 9, 10, 11, 12]
[[regions.gateway.channels]] [[regions.gateway.channels]]
frequency=917200000 frequency = 917200000
bandwidth=125000 bandwidth = 125000
modulation="LORA" modulation = "LORA"
spreading_factors=[7, 8, 9, 10, 11, 12] spreading_factors = [7, 8, 9, 10, 11, 12]
[[regions.gateway.channels]] [[regions.gateway.channels]]
frequency=917400000 frequency = 917400000
bandwidth=125000 bandwidth = 125000
modulation="LORA" modulation = "LORA"
spreading_factors=[7, 8, 9, 10, 11, 12] spreading_factors = [7, 8, 9, 10, 11, 12]
[[regions.gateway.channels]] [[regions.gateway.channels]]
frequency=917600000 frequency = 917600000
bandwidth=125000 bandwidth = 125000
modulation="LORA" modulation = "LORA"
spreading_factors=[7, 8, 9, 10, 11, 12] spreading_factors = [7, 8, 9, 10, 11, 12]
[[regions.gateway.channels]] [[regions.gateway.channels]]
frequency=917800000 frequency = 917800000
bandwidth=125000 bandwidth = 125000
modulation="LORA" modulation = "LORA"
spreading_factors=[7, 8, 9, 10, 11, 12] spreading_factors = [7, 8, 9, 10, 11, 12]
[[regions.gateway.channels]] [[regions.gateway.channels]]
frequency=918000000 frequency = 918000000
bandwidth=125000 bandwidth = 125000
modulation="LORA" modulation = "LORA"
spreading_factors=[7, 8, 9, 10, 11, 12] spreading_factors = [7, 8, 9, 10, 11, 12]
[[regions.gateway.channels]] [[regions.gateway.channels]]
frequency=918200000 frequency = 918200000
bandwidth=125000 bandwidth = 125000
modulation="LORA" modulation = "LORA"
spreading_factors=[7, 8, 9, 10, 11, 12] spreading_factors = [7, 8, 9, 10, 11, 12]
[[regions.gateway.channels]] [[regions.gateway.channels]]
frequency=917500000 frequency = 917500000
bandwidth=500000 bandwidth = 500000
modulation="LORA" modulation = "LORA"
spreading_factors=[8] spreading_factors = [8]
# Region specific network configuration. # Region specific network configuration.
@@ -169,7 +178,7 @@
# resulting in a lower data-rate but decreasing the chance that the # resulting in a lower data-rate but decreasing the chance that the
# device gets disconnected because it is unable to reach one of the # device gets disconnected because it is unable to reach one of the
# surrounded gateways. # surrounded gateways.
installation_margin=10 installation_margin = 10
# RX window (Class-A). # RX window (Class-A).
# #
@@ -177,19 +186,19 @@
# 0: RX1 / RX2 # 0: RX1 / RX2
# 1: RX1 only # 1: RX1 only
# 2: RX2 only # 2: RX2 only
rx_window=0 rx_window = 0
# RX1 delay (1 - 15 seconds). # RX1 delay (1 - 15 seconds).
rx1_delay=1 rx1_delay = 1
# RX1 data-rate offset # RX1 data-rate offset
rx1_dr_offset=0 rx1_dr_offset = 0
# RX2 data-rate # RX2 data-rate
rx2_dr=8 rx2_dr = 8
# RX2 frequency (Hz) # RX2 frequency (Hz)
rx2_frequency=923300000 rx2_frequency = 923300000
# Prefer RX2 on RX1 data-rate less than. # Prefer RX2 on RX1 data-rate less than.
# #
@@ -197,13 +206,13 @@
# is smaller than the configured value, then the Network Server will # is smaller than the configured value, then the Network Server will
# first try to schedule the downlink for RX2, failing that (e.g. the gateway # first try to schedule the downlink for RX2, failing that (e.g. the gateway
# has already a payload scheduled at the RX2 timing) it will try RX1. # has already a payload scheduled at the RX2 timing) it will try RX1.
rx2_prefer_on_rx1_dr_lt=0 rx2_prefer_on_rx1_dr_lt = 0
# Prefer RX2 on link budget. # Prefer RX2 on link budget.
# #
# When the link-budget is better for RX2 than for RX1, the Network Server will first # When the link-budget is better for RX2 than for RX1, the Network Server will first
# try to schedule the downlink in RX2, failing that it will try RX1. # try to schedule the downlink in RX2, failing that it will try RX1.
rx2_prefer_on_link_budget=false rx2_prefer_on_link_budget = false
# Downlink TX Power (in dBm EIRP) # Downlink TX Power (in dBm EIRP)
# #
@@ -213,51 +222,51 @@
# Please consult the LoRaWAN Regional Parameters and local regulations # Please consult the LoRaWAN Regional Parameters and local regulations
# for valid and legal options. Note that the configured TX Power must be # for valid and legal options. Note that the configured TX Power must be
# supported by your gateway(s). # supported by your gateway(s).
downlink_tx_power=-1 downlink_tx_power = -1
# ADR is disabled. # ADR is disabled.
adr_disabled=false adr_disabled = false
# Minimum data-rate. # Minimum data-rate.
min_dr=0 min_dr = 0
# Maximum data-rate. # Maximum data-rate.
max_dr=5 max_dr = 5
# Enabled uplink channels. # Enabled uplink channels.
# #
# Use this when ony a sub-set of the by default enabled channels are being # Use this when ony a sub-set of the by default enabled channels are being
# used. For example when only using the first 8 channels of the US band. # used. For example when only using the first 8 channels of the US band.
# Note: when left blank / empty array, all channels will be enabled. # Note: when left blank / empty array, all channels will be enabled.
enabled_uplink_channels=[8, 9, 10, 11, 12, 13, 14, 15, 65] enabled_uplink_channels = [8, 9, 10, 11, 12, 13, 14, 15, 65]
# Rejoin-request configuration (LoRaWAN 1.1) # Rejoin-request configuration (LoRaWAN 1.1)
[regions.network.rejoin_request] [regions.network.rejoin_request]
# Request devices to periodically send rejoin-requests. # Request devices to periodically send rejoin-requests.
enabled=false enabled = false
# The device must send a rejoin-request type 0 at least every 2^(max_count_n + 4) # The device must send a rejoin-request type 0 at least every 2^(max_count_n + 4)
# uplink messages. Valid values are 0 to 15. # uplink messages. Valid values are 0 to 15.
max_count_n=0 max_count_n = 0
# The device must send a rejoin-request type 0 at least every 2^(max_time_n + 10) # The device must send a rejoin-request type 0 at least every 2^(max_time_n + 10)
# seconds. Valid values are 0 to 15. # seconds. Valid values are 0 to 15.
# #
# 0 = roughly 17 minutes # 0 = roughly 17 minutes
# 15 = about 1 year # 15 = about 1 year
max_time_n=0 max_time_n = 0
# Class-B configuration. # Class-B configuration.
[regions.network.class_b] [regions.network.class_b]
# Ping-slot data-rate. # Ping-slot data-rate.
ping_slot_dr=8 ping_slot_dr = 8
# Ping-slot frequency (Hz) # Ping-slot frequency (Hz)
# #
# set this to 0 to use the default frequency plan for the configured region # set this to 0 to use the default frequency plan for the configured region
# (which could be frequency hopping). # (which could be frequency hopping).
ping_slot_frequency=0 ping_slot_frequency = 0

View File

@@ -2,14 +2,23 @@
[[regions]] [[regions]]
# ID is an use-defined identifier for this region. # ID is an use-defined identifier for this region.
id="au915_2" id = "au915_2"
# Description is a short description for this region. # Description is a short description for this region.
description="AU915 (channels 16-23 + 66)" description = "AU915 (channels 16-23 + 66)"
# Common-name refers to the common-name of this region as defined by # Common-name refers to the common-name of this region as defined by
# the LoRa Alliance. # the LoRa Alliance.
common_name="AU915" common_name = "AU915"
# User-defined region information.
#
# This information will be displayed on top of the region page in then
# ChirpStack web-interface. For example, it can contain information about
# how users should connect their gateways when using this region (e.g. MQTT
# end-point, MQTT topic prefix, TLS configuration etc). Markdown syntax can
# be used for formatting.
user_info = ""
# Gateway configuration. # Gateway configuration.
@@ -18,14 +27,14 @@
# Force gateways as private. # Force gateways as private.
# #
# If enabled, gateways can only be used by devices under the same tenant. # If enabled, gateways can only be used by devices under the same tenant.
force_gws_private=false force_gws_private = false
# Gateway backend configuration. # Gateway backend configuration.
[regions.gateway.backend] [regions.gateway.backend]
# The enabled backend type. # The enabled backend type.
enabled="mqtt" enabled = "mqtt"
# MQTT configuration. # MQTT configuration.
[regions.gateway.backend.mqtt] [regions.gateway.backend.mqtt]
@@ -35,7 +44,7 @@
# The topic prefix can be used to define the region of the gateway. # The topic prefix can be used to define the region of the gateway.
# Note, there is no need to add a trailing '/' to the prefix. The trailing # Note, there is no need to add a trailing '/' to the prefix. The trailing
# '/' is automatically added to the prefix if it is configured. # '/' is automatically added to the prefix if it is configured.
topic_prefix="au915_2" topic_prefix = "au915_2"
# Shared subscription name. # Shared subscription name.
# #
@@ -45,16 +54,16 @@
# test-environment connected to the same MQTT broker, make sure that # test-environment connected to the same MQTT broker, make sure that
# each environment has its own subscription name, for example: # each environment has its own subscription name, for example:
# chirpstack_prod and chirpstack_tst. # chirpstack_prod and chirpstack_tst.
share_name="chirpstack" share_name = "chirpstack"
# MQTT server (e.g. scheme://host:port where scheme is tcp, ssl or ws) # MQTT server (e.g. scheme://host:port where scheme is tcp, ssl or ws)
server="tcp://localhost:1883" server = "tcp://localhost:1883"
# Connect with the given username (optional) # Connect with the given username (optional)
username="" username = ""
# Connect with the given password (optional) # Connect with the given password (optional)
password="" password = ""
# Quality of service level # Quality of service level
# #
@@ -64,40 +73,40 @@
# #
# Note: an increase of this value will decrease the performance. # Note: an increase of this value will decrease the performance.
# For more information: https://www.hivemq.com/blog/mqtt-essentials-part-6-mqtt-quality-of-service-levels # For more information: https://www.hivemq.com/blog/mqtt-essentials-part-6-mqtt-quality-of-service-levels
qos=0 qos = 0
# Clean session # Clean session
# #
# Set the "clean session" flag in the connect message when this client # Set the "clean session" flag in the connect message when this client
# connects to an MQTT broker. By setting this flag you are indicating # connects to an MQTT broker. By setting this flag you are indicating
# that no messages saved by the broker for this client should be delivered. # that no messages saved by the broker for this client should be delivered.
clean_session=false clean_session = false
# Client ID # Client ID
# #
# Set the client id to be used by this client when connecting to the MQTT # Set the client id to be used by this client when connecting to the MQTT
# broker. A client id must be no longer than 23 characters. If left blank, # broker. A client id must be no longer than 23 characters. If left blank,
# a random id will be generated by ChirpStack. # a random id will be generated by ChirpStack.
client_id="" client_id = ""
# Keep alive interval. # Keep alive interval.
# #
# This defines the maximum time that that should pass without communication # This defines the maximum time that that should pass without communication
# between the client and server. # between the client and server.
keep_alive_interval="30s" keep_alive_interval = "30s"
# CA certificate file (optional) # CA certificate file (optional)
# #
# Use this when setting up a secure connection (when server uses ssl://...) # Use this when setting up a secure connection (when server uses ssl://...)
# but the certificate used by the server is not trusted by any CA certificate # but the certificate used by the server is not trusted by any CA certificate
# on the server (e.g. when self generated). # on the server (e.g. when self generated).
ca_cert="" ca_cert = ""
# TLS certificate file (optional) # TLS certificate file (optional)
tls_cert="" tls_cert = ""
# TLS key file (optional) # TLS key file (optional)
tls_key="" tls_key = ""
# Gateway channel configuration. # Gateway channel configuration.
@@ -106,58 +115,58 @@
# ChirpStack Concentratord daemon. In any other case, this configuration # ChirpStack Concentratord daemon. In any other case, this configuration
# is ignored. # is ignored.
[[regions.gateway.channels]] [[regions.gateway.channels]]
frequency=918400000 frequency = 918400000
bandwidth=125000 bandwidth = 125000
modulation="LORA" modulation = "LORA"
spreading_factors=[7, 8, 9, 10, 11, 12] spreading_factors = [7, 8, 9, 10, 11, 12]
[[regions.gateway.channels]] [[regions.gateway.channels]]
frequency=918600000 frequency = 918600000
bandwidth=125000 bandwidth = 125000
modulation="LORA" modulation = "LORA"
spreading_factors=[7, 8, 9, 10, 11, 12] spreading_factors = [7, 8, 9, 10, 11, 12]
[[regions.gateway.channels]] [[regions.gateway.channels]]
frequency=918800000 frequency = 918800000
bandwidth=125000 bandwidth = 125000
modulation="LORA" modulation = "LORA"
spreading_factors=[7, 8, 9, 10, 11, 12] spreading_factors = [7, 8, 9, 10, 11, 12]
[[regions.gateway.channels]] [[regions.gateway.channels]]
frequency=919000000 frequency = 919000000
bandwidth=125000 bandwidth = 125000
modulation="LORA" modulation = "LORA"
spreading_factors=[7, 8, 9, 10, 11, 12] spreading_factors = [7, 8, 9, 10, 11, 12]
[[regions.gateway.channels]] [[regions.gateway.channels]]
frequency=919200000 frequency = 919200000
bandwidth=125000 bandwidth = 125000
modulation="LORA" modulation = "LORA"
spreading_factors=[7, 8, 9, 10, 11, 12] spreading_factors = [7, 8, 9, 10, 11, 12]
[[regions.gateway.channels]] [[regions.gateway.channels]]
frequency=919400000 frequency = 919400000
bandwidth=125000 bandwidth = 125000
modulation="LORA" modulation = "LORA"
spreading_factors=[7, 8, 9, 10, 11, 12] spreading_factors = [7, 8, 9, 10, 11, 12]
[[regions.gateway.channels]] [[regions.gateway.channels]]
frequency=919600000 frequency = 919600000
bandwidth=125000 bandwidth = 125000
modulation="LORA" modulation = "LORA"
spreading_factors=[7, 8, 9, 10, 11, 12] spreading_factors = [7, 8, 9, 10, 11, 12]
[[regions.gateway.channels]] [[regions.gateway.channels]]
frequency=919800000 frequency = 919800000
bandwidth=125000 bandwidth = 125000
modulation="LORA" modulation = "LORA"
spreading_factors=[7, 8, 9, 10, 11, 12] spreading_factors = [7, 8, 9, 10, 11, 12]
[[regions.gateway.channels]] [[regions.gateway.channels]]
frequency=919100000 frequency = 919100000
bandwidth=500000 bandwidth = 500000
modulation="LORA" modulation = "LORA"
spreading_factors=[8] spreading_factors = [8]
# Region specific network configuration. # Region specific network configuration.
@@ -169,7 +178,7 @@
# resulting in a lower data-rate but decreasing the chance that the # resulting in a lower data-rate but decreasing the chance that the
# device gets disconnected because it is unable to reach one of the # device gets disconnected because it is unable to reach one of the
# surrounded gateways. # surrounded gateways.
installation_margin=10 installation_margin = 10
# RX window (Class-A). # RX window (Class-A).
# #
@@ -177,19 +186,19 @@
# 0: RX1 / RX2 # 0: RX1 / RX2
# 1: RX1 only # 1: RX1 only
# 2: RX2 only # 2: RX2 only
rx_window=0 rx_window = 0
# RX1 delay (1 - 15 seconds). # RX1 delay (1 - 15 seconds).
rx1_delay=1 rx1_delay = 1
# RX1 data-rate offset # RX1 data-rate offset
rx1_dr_offset=0 rx1_dr_offset = 0
# RX2 data-rate # RX2 data-rate
rx2_dr=8 rx2_dr = 8
# RX2 frequency (Hz) # RX2 frequency (Hz)
rx2_frequency=923300000 rx2_frequency = 923300000
# Prefer RX2 on RX1 data-rate less than. # Prefer RX2 on RX1 data-rate less than.
# #
@@ -197,13 +206,13 @@
# is smaller than the configured value, then the Network Server will # is smaller than the configured value, then the Network Server will
# first try to schedule the downlink for RX2, failing that (e.g. the gateway # first try to schedule the downlink for RX2, failing that (e.g. the gateway
# has already a payload scheduled at the RX2 timing) it will try RX1. # has already a payload scheduled at the RX2 timing) it will try RX1.
rx2_prefer_on_rx1_dr_lt=0 rx2_prefer_on_rx1_dr_lt = 0
# Prefer RX2 on link budget. # Prefer RX2 on link budget.
# #
# When the link-budget is better for RX2 than for RX1, the Network Server will first # When the link-budget is better for RX2 than for RX1, the Network Server will first
# try to schedule the downlink in RX2, failing that it will try RX1. # try to schedule the downlink in RX2, failing that it will try RX1.
rx2_prefer_on_link_budget=false rx2_prefer_on_link_budget = false
# Downlink TX Power (in dBm EIRP) # Downlink TX Power (in dBm EIRP)
# #
@@ -213,51 +222,51 @@
# Please consult the LoRaWAN Regional Parameters and local regulations # Please consult the LoRaWAN Regional Parameters and local regulations
# for valid and legal options. Note that the configured TX Power must be # for valid and legal options. Note that the configured TX Power must be
# supported by your gateway(s). # supported by your gateway(s).
downlink_tx_power=-1 downlink_tx_power = -1
# ADR is disabled. # ADR is disabled.
adr_disabled=false adr_disabled = false
# Minimum data-rate. # Minimum data-rate.
min_dr=0 min_dr = 0
# Maximum data-rate. # Maximum data-rate.
max_dr=5 max_dr = 5
# Enabled uplink channels. # Enabled uplink channels.
# #
# Use this when ony a sub-set of the by default enabled channels are being # Use this when ony a sub-set of the by default enabled channels are being
# used. For example when only using the first 8 channels of the US band. # used. For example when only using the first 8 channels of the US band.
# Note: when left blank / empty array, all channels will be enabled. # Note: when left blank / empty array, all channels will be enabled.
enabled_uplink_channels=[16, 17, 18, 19, 20, 21, 22, 23, 66] enabled_uplink_channels = [16, 17, 18, 19, 20, 21, 22, 23, 66]
# Rejoin-request configuration (LoRaWAN 1.1) # Rejoin-request configuration (LoRaWAN 1.1)
[regions.network.rejoin_request] [regions.network.rejoin_request]
# Request devices to periodically send rejoin-requests. # Request devices to periodically send rejoin-requests.
enabled=false enabled = false
# The device must send a rejoin-request type 0 at least every 2^(max_count_n + 4) # The device must send a rejoin-request type 0 at least every 2^(max_count_n + 4)
# uplink messages. Valid values are 0 to 15. # uplink messages. Valid values are 0 to 15.
max_count_n=0 max_count_n = 0
# The device must send a rejoin-request type 0 at least every 2^(max_time_n + 10) # The device must send a rejoin-request type 0 at least every 2^(max_time_n + 10)
# seconds. Valid values are 0 to 15. # seconds. Valid values are 0 to 15.
# #
# 0 = roughly 17 minutes # 0 = roughly 17 minutes
# 15 = about 1 year # 15 = about 1 year
max_time_n=0 max_time_n = 0
# Class-B configuration. # Class-B configuration.
[regions.network.class_b] [regions.network.class_b]
# Ping-slot data-rate. # Ping-slot data-rate.
ping_slot_dr=8 ping_slot_dr = 8
# Ping-slot frequency (Hz) # Ping-slot frequency (Hz)
# #
# set this to 0 to use the default frequency plan for the configured region # set this to 0 to use the default frequency plan for the configured region
# (which could be frequency hopping). # (which could be frequency hopping).
ping_slot_frequency=0 ping_slot_frequency = 0

View File

@@ -2,14 +2,23 @@
[[regions]] [[regions]]
# ID is an use-defined identifier for this region. # ID is an use-defined identifier for this region.
id="au915_3" id = "au915_3"
# Description is a short description for this region. # Description is a short description for this region.
description="AU915 (channels 24-31 + 67)" description = "AU915 (channels 24-31 + 67)"
# Common-name refers to the common-name of this region as defined by # Common-name refers to the common-name of this region as defined by
# the LoRa Alliance. # the LoRa Alliance.
common_name="AU915" common_name = "AU915"
# User-defined region information.
#
# This information will be displayed on top of the region page in then
# ChirpStack web-interface. For example, it can contain information about
# how users should connect their gateways when using this region (e.g. MQTT
# end-point, MQTT topic prefix, TLS configuration etc). Markdown syntax can
# be used for formatting.
user_info = ""
# Gateway configuration. # Gateway configuration.
@@ -18,14 +27,14 @@
# Force gateways as private. # Force gateways as private.
# #
# If enabled, gateways can only be used by devices under the same tenant. # If enabled, gateways can only be used by devices under the same tenant.
force_gws_private=false force_gws_private = false
# Gateway backend configuration. # Gateway backend configuration.
[regions.gateway.backend] [regions.gateway.backend]
# The enabled backend type. # The enabled backend type.
enabled="mqtt" enabled = "mqtt"
# MQTT configuration. # MQTT configuration.
[regions.gateway.backend.mqtt] [regions.gateway.backend.mqtt]
@@ -35,7 +44,7 @@
# The topic prefix can be used to define the region of the gateway. # The topic prefix can be used to define the region of the gateway.
# Note, there is no need to add a trailing '/' to the prefix. The trailing # Note, there is no need to add a trailing '/' to the prefix. The trailing
# '/' is automatically added to the prefix if it is configured. # '/' is automatically added to the prefix if it is configured.
topic_prefix="au915_3" topic_prefix = "au915_3"
# Shared subscription name. # Shared subscription name.
# #
@@ -45,16 +54,16 @@
# test-environment connected to the same MQTT broker, make sure that # test-environment connected to the same MQTT broker, make sure that
# each environment has its own subscription name, for example: # each environment has its own subscription name, for example:
# chirpstack_prod and chirpstack_tst. # chirpstack_prod and chirpstack_tst.
share_name="chirpstack" share_name = "chirpstack"
# MQTT server (e.g. scheme://host:port where scheme is tcp, ssl or ws) # MQTT server (e.g. scheme://host:port where scheme is tcp, ssl or ws)
server="tcp://localhost:1883" server = "tcp://localhost:1883"
# Connect with the given username (optional) # Connect with the given username (optional)
username="" username = ""
# Connect with the given password (optional) # Connect with the given password (optional)
password="" password = ""
# Quality of service level # Quality of service level
# #
@@ -64,40 +73,40 @@
# #
# Note: an increase of this value will decrease the performance. # Note: an increase of this value will decrease the performance.
# For more information: https://www.hivemq.com/blog/mqtt-essentials-part-6-mqtt-quality-of-service-levels # For more information: https://www.hivemq.com/blog/mqtt-essentials-part-6-mqtt-quality-of-service-levels
qos=0 qos = 0
# Clean session # Clean session
# #
# Set the "clean session" flag in the connect message when this client # Set the "clean session" flag in the connect message when this client
# connects to an MQTT broker. By setting this flag you are indicating # connects to an MQTT broker. By setting this flag you are indicating
# that no messages saved by the broker for this client should be delivered. # that no messages saved by the broker for this client should be delivered.
clean_session=false clean_session = false
# Client ID # Client ID
# #
# Set the client id to be used by this client when connecting to the MQTT # Set the client id to be used by this client when connecting to the MQTT
# broker. A client id must be no longer than 23 characters. If left blank, # broker. A client id must be no longer than 23 characters. If left blank,
# a random id will be generated by ChirpStack. # a random id will be generated by ChirpStack.
client_id="" client_id = ""
# Keep alive interval. # Keep alive interval.
# #
# This defines the maximum time that that should pass without communication # This defines the maximum time that that should pass without communication
# between the client and server. # between the client and server.
keep_alive_interval="30s" keep_alive_interval = "30s"
# CA certificate file (optional) # CA certificate file (optional)
# #
# Use this when setting up a secure connection (when server uses ssl://...) # Use this when setting up a secure connection (when server uses ssl://...)
# but the certificate used by the server is not trusted by any CA certificate # but the certificate used by the server is not trusted by any CA certificate
# on the server (e.g. when self generated). # on the server (e.g. when self generated).
ca_cert="" ca_cert = ""
# TLS certificate file (optional) # TLS certificate file (optional)
tls_cert="" tls_cert = ""
# TLS key file (optional) # TLS key file (optional)
tls_key="" tls_key = ""
# Gateway channel configuration. # Gateway channel configuration.
@@ -106,58 +115,58 @@
# ChirpStack Concentratord daemon. In any other case, this configuration # ChirpStack Concentratord daemon. In any other case, this configuration
# is ignored. # is ignored.
[[regions.gateway.channels]] [[regions.gateway.channels]]
frequency=920000000 frequency = 920000000
bandwidth=125000 bandwidth = 125000
modulation="LORA" modulation = "LORA"
spreading_factors=[7, 8, 9, 10, 11, 12] spreading_factors = [7, 8, 9, 10, 11, 12]
[[regions.gateway.channels]] [[regions.gateway.channels]]
frequency=920200000 frequency = 920200000
bandwidth=125000 bandwidth = 125000
modulation="LORA" modulation = "LORA"
spreading_factors=[7, 8, 9, 10, 11, 12] spreading_factors = [7, 8, 9, 10, 11, 12]
[[regions.gateway.channels]] [[regions.gateway.channels]]
frequency=920400000 frequency = 920400000
bandwidth=125000 bandwidth = 125000
modulation="LORA" modulation = "LORA"
spreading_factors=[7, 8, 9, 10, 11, 12] spreading_factors = [7, 8, 9, 10, 11, 12]
[[regions.gateway.channels]] [[regions.gateway.channels]]
frequency=920600000 frequency = 920600000
bandwidth=125000 bandwidth = 125000
modulation="LORA" modulation = "LORA"
spreading_factors=[7, 8, 9, 10, 11, 12] spreading_factors = [7, 8, 9, 10, 11, 12]
[[regions.gateway.channels]] [[regions.gateway.channels]]
frequency=920800000 frequency = 920800000
bandwidth=125000 bandwidth = 125000
modulation="LORA" modulation = "LORA"
spreading_factors=[7, 8, 9, 10, 11, 12] spreading_factors = [7, 8, 9, 10, 11, 12]
[[regions.gateway.channels]] [[regions.gateway.channels]]
frequency=921000000 frequency = 921000000
bandwidth=125000 bandwidth = 125000
modulation="LORA" modulation = "LORA"
spreading_factors=[7, 8, 9, 10, 11, 12] spreading_factors = [7, 8, 9, 10, 11, 12]
[[regions.gateway.channels]] [[regions.gateway.channels]]
frequency=921200000 frequency = 921200000
bandwidth=125000 bandwidth = 125000
modulation="LORA" modulation = "LORA"
spreading_factors=[7, 8, 9, 10, 11, 12] spreading_factors = [7, 8, 9, 10, 11, 12]
[[regions.gateway.channels]] [[regions.gateway.channels]]
frequency=921400000 frequency = 921400000
bandwidth=125000 bandwidth = 125000
modulation="LORA" modulation = "LORA"
spreading_factors=[7, 8, 9, 10, 11, 12] spreading_factors = [7, 8, 9, 10, 11, 12]
[[regions.gateway.channels]] [[regions.gateway.channels]]
frequency=920700000 frequency = 920700000
bandwidth=500000 bandwidth = 500000
modulation="LORA" modulation = "LORA"
spreading_factors=[8] spreading_factors = [8]
# Region specific network configuration. # Region specific network configuration.
@@ -169,7 +178,7 @@
# resulting in a lower data-rate but decreasing the chance that the # resulting in a lower data-rate but decreasing the chance that the
# device gets disconnected because it is unable to reach one of the # device gets disconnected because it is unable to reach one of the
# surrounded gateways. # surrounded gateways.
installation_margin=10 installation_margin = 10
# RX window (Class-A). # RX window (Class-A).
# #
@@ -177,19 +186,19 @@
# 0: RX1 / RX2 # 0: RX1 / RX2
# 1: RX1 only # 1: RX1 only
# 2: RX2 only # 2: RX2 only
rx_window=0 rx_window = 0
# RX1 delay (1 - 15 seconds). # RX1 delay (1 - 15 seconds).
rx1_delay=1 rx1_delay = 1
# RX1 data-rate offset # RX1 data-rate offset
rx1_dr_offset=0 rx1_dr_offset = 0
# RX2 data-rate # RX2 data-rate
rx2_dr=8 rx2_dr = 8
# RX2 frequency (Hz) # RX2 frequency (Hz)
rx2_frequency=923300000 rx2_frequency = 923300000
# Prefer RX2 on RX1 data-rate less than. # Prefer RX2 on RX1 data-rate less than.
# #
@@ -197,13 +206,13 @@
# is smaller than the configured value, then the Network Server will # is smaller than the configured value, then the Network Server will
# first try to schedule the downlink for RX2, failing that (e.g. the gateway # first try to schedule the downlink for RX2, failing that (e.g. the gateway
# has already a payload scheduled at the RX2 timing) it will try RX1. # has already a payload scheduled at the RX2 timing) it will try RX1.
rx2_prefer_on_rx1_dr_lt=0 rx2_prefer_on_rx1_dr_lt = 0
# Prefer RX2 on link budget. # Prefer RX2 on link budget.
# #
# When the link-budget is better for RX2 than for RX1, the Network Server will first # When the link-budget is better for RX2 than for RX1, the Network Server will first
# try to schedule the downlink in RX2, failing that it will try RX1. # try to schedule the downlink in RX2, failing that it will try RX1.
rx2_prefer_on_link_budget=false rx2_prefer_on_link_budget = false
# Downlink TX Power (in dBm EIRP) # Downlink TX Power (in dBm EIRP)
# #
@@ -213,51 +222,51 @@
# Please consult the LoRaWAN Regional Parameters and local regulations # Please consult the LoRaWAN Regional Parameters and local regulations
# for valid and legal options. Note that the configured TX Power must be # for valid and legal options. Note that the configured TX Power must be
# supported by your gateway(s). # supported by your gateway(s).
downlink_tx_power=-1 downlink_tx_power = -1
# ADR is disabled. # ADR is disabled.
adr_disabled=false adr_disabled = false
# Minimum data-rate. # Minimum data-rate.
min_dr=0 min_dr = 0
# Maximum data-rate. # Maximum data-rate.
max_dr=5 max_dr = 5
# Enabled uplink channels. # Enabled uplink channels.
# #
# Use this when ony a sub-set of the by default enabled channels are being # Use this when ony a sub-set of the by default enabled channels are being
# used. For example when only using the first 8 channels of the US band. # used. For example when only using the first 8 channels of the US band.
# Note: when left blank / empty array, all channels will be enabled. # Note: when left blank / empty array, all channels will be enabled.
enabled_uplink_channels=[24, 25, 26, 27, 28, 29, 30, 31, 67] enabled_uplink_channels = [24, 25, 26, 27, 28, 29, 30, 31, 67]
# Rejoin-request configuration (LoRaWAN 1.1) # Rejoin-request configuration (LoRaWAN 1.1)
[regions.network.rejoin_request] [regions.network.rejoin_request]
# Request devices to periodically send rejoin-requests. # Request devices to periodically send rejoin-requests.
enabled=false enabled = false
# The device must send a rejoin-request type 0 at least every 2^(max_count_n + 4) # The device must send a rejoin-request type 0 at least every 2^(max_count_n + 4)
# uplink messages. Valid values are 0 to 15. # uplink messages. Valid values are 0 to 15.
max_count_n=0 max_count_n = 0
# The device must send a rejoin-request type 0 at least every 2^(max_time_n + 10) # The device must send a rejoin-request type 0 at least every 2^(max_time_n + 10)
# seconds. Valid values are 0 to 15. # seconds. Valid values are 0 to 15.
# #
# 0 = roughly 17 minutes # 0 = roughly 17 minutes
# 15 = about 1 year # 15 = about 1 year
max_time_n=0 max_time_n = 0
# Class-B configuration. # Class-B configuration.
[regions.network.class_b] [regions.network.class_b]
# Ping-slot data-rate. # Ping-slot data-rate.
ping_slot_dr=8 ping_slot_dr = 8
# Ping-slot frequency (Hz) # Ping-slot frequency (Hz)
# #
# set this to 0 to use the default frequency plan for the configured region # set this to 0 to use the default frequency plan for the configured region
# (which could be frequency hopping). # (which could be frequency hopping).
ping_slot_frequency=0 ping_slot_frequency = 0

View File

@@ -2,14 +2,23 @@
[[regions]] [[regions]]
# ID is an use-defined identifier for this region. # ID is an use-defined identifier for this region.
id="au915_4" id = "au915_4"
# Description is a short description for this region. # Description is a short description for this region.
description="AU915 (channels 32-39 + 68)" description = "AU915 (channels 32-39 + 68)"
# Common-name refers to the common-name of this region as defined by # Common-name refers to the common-name of this region as defined by
# the LoRa Alliance. # the LoRa Alliance.
common_name="AU915" common_name = "AU915"
# User-defined region information.
#
# This information will be displayed on top of the region page in then
# ChirpStack web-interface. For example, it can contain information about
# how users should connect their gateways when using this region (e.g. MQTT
# end-point, MQTT topic prefix, TLS configuration etc). Markdown syntax can
# be used for formatting.
user_info = ""
# Gateway configuration. # Gateway configuration.
@@ -18,14 +27,14 @@
# Force gateways as private. # Force gateways as private.
# #
# If enabled, gateways can only be used by devices under the same tenant. # If enabled, gateways can only be used by devices under the same tenant.
force_gws_private=false force_gws_private = false
# Gateway backend configuration. # Gateway backend configuration.
[regions.gateway.backend] [regions.gateway.backend]
# The enabled backend type. # The enabled backend type.
enabled="mqtt" enabled = "mqtt"
# MQTT configuration. # MQTT configuration.
[regions.gateway.backend.mqtt] [regions.gateway.backend.mqtt]
@@ -35,7 +44,7 @@
# The topic prefix can be used to define the region of the gateway. # The topic prefix can be used to define the region of the gateway.
# Note, there is no need to add a trailing '/' to the prefix. The trailing # Note, there is no need to add a trailing '/' to the prefix. The trailing
# '/' is automatically added to the prefix if it is configured. # '/' is automatically added to the prefix if it is configured.
topic_prefix="au915_4" topic_prefix = "au915_4"
# Shared subscription name. # Shared subscription name.
# #
@@ -45,16 +54,16 @@
# test-environment connected to the same MQTT broker, make sure that # test-environment connected to the same MQTT broker, make sure that
# each environment has its own subscription name, for example: # each environment has its own subscription name, for example:
# chirpstack_prod and chirpstack_tst. # chirpstack_prod and chirpstack_tst.
share_name="chirpstack" share_name = "chirpstack"
# MQTT server (e.g. scheme://host:port where scheme is tcp, ssl or ws) # MQTT server (e.g. scheme://host:port where scheme is tcp, ssl or ws)
server="tcp://localhost:1883" server = "tcp://localhost:1883"
# Connect with the given username (optional) # Connect with the given username (optional)
username="" username = ""
# Connect with the given password (optional) # Connect with the given password (optional)
password="" password = ""
# Quality of service level # Quality of service level
# #
@@ -64,40 +73,40 @@
# #
# Note: an increase of this value will decrease the performance. # Note: an increase of this value will decrease the performance.
# For more information: https://www.hivemq.com/blog/mqtt-essentials-part-6-mqtt-quality-of-service-levels # For more information: https://www.hivemq.com/blog/mqtt-essentials-part-6-mqtt-quality-of-service-levels
qos=0 qos = 0
# Clean session # Clean session
# #
# Set the "clean session" flag in the connect message when this client # Set the "clean session" flag in the connect message when this client
# connects to an MQTT broker. By setting this flag you are indicating # connects to an MQTT broker. By setting this flag you are indicating
# that no messages saved by the broker for this client should be delivered. # that no messages saved by the broker for this client should be delivered.
clean_session=false clean_session = false
# Client ID # Client ID
# #
# Set the client id to be used by this client when connecting to the MQTT # Set the client id to be used by this client when connecting to the MQTT
# broker. A client id must be no longer than 23 characters. If left blank, # broker. A client id must be no longer than 23 characters. If left blank,
# a random id will be generated by ChirpStack. # a random id will be generated by ChirpStack.
client_id="" client_id = ""
# Keep alive interval. # Keep alive interval.
# #
# This defines the maximum time that that should pass without communication # This defines the maximum time that that should pass without communication
# between the client and server. # between the client and server.
keep_alive_interval="30s" keep_alive_interval = "30s"
# CA certificate file (optional) # CA certificate file (optional)
# #
# Use this when setting up a secure connection (when server uses ssl://...) # Use this when setting up a secure connection (when server uses ssl://...)
# but the certificate used by the server is not trusted by any CA certificate # but the certificate used by the server is not trusted by any CA certificate
# on the server (e.g. when self generated). # on the server (e.g. when self generated).
ca_cert="" ca_cert = ""
# TLS certificate file (optional) # TLS certificate file (optional)
tls_cert="" tls_cert = ""
# TLS key file (optional) # TLS key file (optional)
tls_key="" tls_key = ""
# Gateway channel configuration. # Gateway channel configuration.
@@ -106,58 +115,58 @@
# ChirpStack Concentratord daemon. In any other case, this configuration # ChirpStack Concentratord daemon. In any other case, this configuration
# is ignored. # is ignored.
[[regions.gateway.channels]] [[regions.gateway.channels]]
frequency=921600000 frequency = 921600000
bandwidth=125000 bandwidth = 125000
modulation="LORA" modulation = "LORA"
spreading_factors=[7, 8, 9, 10, 11, 12] spreading_factors = [7, 8, 9, 10, 11, 12]
[[regions.gateway.channels]] [[regions.gateway.channels]]
frequency=921800000 frequency = 921800000
bandwidth=125000 bandwidth = 125000
modulation="LORA" modulation = "LORA"
spreading_factors=[7, 8, 9, 10, 11, 12] spreading_factors = [7, 8, 9, 10, 11, 12]
[[regions.gateway.channels]] [[regions.gateway.channels]]
frequency=922000000 frequency = 922000000
bandwidth=125000 bandwidth = 125000
modulation="LORA" modulation = "LORA"
spreading_factors=[7, 8, 9, 10, 11, 12] spreading_factors = [7, 8, 9, 10, 11, 12]
[[regions.gateway.channels]] [[regions.gateway.channels]]
frequency=922200000 frequency = 922200000
bandwidth=125000 bandwidth = 125000
modulation="LORA" modulation = "LORA"
spreading_factors=[7, 8, 9, 10, 11, 12] spreading_factors = [7, 8, 9, 10, 11, 12]
[[regions.gateway.channels]] [[regions.gateway.channels]]
frequency=922400000 frequency = 922400000
bandwidth=125000 bandwidth = 125000
modulation="LORA" modulation = "LORA"
spreading_factors=[7, 8, 9, 10, 11, 12] spreading_factors = [7, 8, 9, 10, 11, 12]
[[regions.gateway.channels]] [[regions.gateway.channels]]
frequency=922600000 frequency = 922600000
bandwidth=125000 bandwidth = 125000
modulation="LORA" modulation = "LORA"
spreading_factors=[7, 8, 9, 10, 11, 12] spreading_factors = [7, 8, 9, 10, 11, 12]
[[regions.gateway.channels]] [[regions.gateway.channels]]
frequency=922800000 frequency = 922800000
bandwidth=125000 bandwidth = 125000
modulation="LORA" modulation = "LORA"
spreading_factors=[7, 8, 9, 10, 11, 12] spreading_factors = [7, 8, 9, 10, 11, 12]
[[regions.gateway.channels]] [[regions.gateway.channels]]
frequency=923000000 frequency = 923000000
bandwidth=125000 bandwidth = 125000
modulation="LORA" modulation = "LORA"
spreading_factors=[7, 8, 9, 10, 11, 12] spreading_factors = [7, 8, 9, 10, 11, 12]
[[regions.gateway.channels]] [[regions.gateway.channels]]
frequency=922300000 frequency = 922300000
bandwidth=500000 bandwidth = 500000
modulation="LORA" modulation = "LORA"
spreading_factors=[8] spreading_factors = [8]
# Region specific network configuration. # Region specific network configuration.
@@ -169,7 +178,7 @@
# resulting in a lower data-rate but decreasing the chance that the # resulting in a lower data-rate but decreasing the chance that the
# device gets disconnected because it is unable to reach one of the # device gets disconnected because it is unable to reach one of the
# surrounded gateways. # surrounded gateways.
installation_margin=10 installation_margin = 10
# RX window (Class-A). # RX window (Class-A).
# #
@@ -177,19 +186,19 @@
# 0: RX1 / RX2 # 0: RX1 / RX2
# 1: RX1 only # 1: RX1 only
# 2: RX2 only # 2: RX2 only
rx_window=0 rx_window = 0
# RX1 delay (1 - 15 seconds). # RX1 delay (1 - 15 seconds).
rx1_delay=1 rx1_delay = 1
# RX1 data-rate offset # RX1 data-rate offset
rx1_dr_offset=0 rx1_dr_offset = 0
# RX2 data-rate # RX2 data-rate
rx2_dr=8 rx2_dr = 8
# RX2 frequency (Hz) # RX2 frequency (Hz)
rx2_frequency=923300000 rx2_frequency = 923300000
# Prefer RX2 on RX1 data-rate less than. # Prefer RX2 on RX1 data-rate less than.
# #
@@ -197,13 +206,13 @@
# is smaller than the configured value, then the Network Server will # is smaller than the configured value, then the Network Server will
# first try to schedule the downlink for RX2, failing that (e.g. the gateway # first try to schedule the downlink for RX2, failing that (e.g. the gateway
# has already a payload scheduled at the RX2 timing) it will try RX1. # has already a payload scheduled at the RX2 timing) it will try RX1.
rx2_prefer_on_rx1_dr_lt=0 rx2_prefer_on_rx1_dr_lt = 0
# Prefer RX2 on link budget. # Prefer RX2 on link budget.
# #
# When the link-budget is better for RX2 than for RX1, the Network Server will first # When the link-budget is better for RX2 than for RX1, the Network Server will first
# try to schedule the downlink in RX2, failing that it will try RX1. # try to schedule the downlink in RX2, failing that it will try RX1.
rx2_prefer_on_link_budget=false rx2_prefer_on_link_budget = false
# Downlink TX Power (in dBm EIRP) # Downlink TX Power (in dBm EIRP)
# #
@@ -213,51 +222,51 @@
# Please consult the LoRaWAN Regional Parameters and local regulations # Please consult the LoRaWAN Regional Parameters and local regulations
# for valid and legal options. Note that the configured TX Power must be # for valid and legal options. Note that the configured TX Power must be
# supported by your gateway(s). # supported by your gateway(s).
downlink_tx_power=-1 downlink_tx_power = -1
# ADR is disabled. # ADR is disabled.
adr_disabled=false adr_disabled = false
# Minimum data-rate. # Minimum data-rate.
min_dr=0 min_dr = 0
# Maximum data-rate. # Maximum data-rate.
max_dr=5 max_dr = 5
# Enabled uplink channels. # Enabled uplink channels.
# #
# Use this when ony a sub-set of the by default enabled channels are being # Use this when ony a sub-set of the by default enabled channels are being
# used. For example when only using the first 8 channels of the US band. # used. For example when only using the first 8 channels of the US band.
# Note: when left blank / empty array, all channels will be enabled. # Note: when left blank / empty array, all channels will be enabled.
enabled_uplink_channels=[32, 33, 34, 35, 36, 37, 38, 39, 68] enabled_uplink_channels = [32, 33, 34, 35, 36, 37, 38, 39, 68]
# Rejoin-request configuration (LoRaWAN 1.1) # Rejoin-request configuration (LoRaWAN 1.1)
[regions.network.rejoin_request] [regions.network.rejoin_request]
# Request devices to periodically send rejoin-requests. # Request devices to periodically send rejoin-requests.
enabled=false enabled = false
# The device must send a rejoin-request type 0 at least every 2^(max_count_n + 4) # The device must send a rejoin-request type 0 at least every 2^(max_count_n + 4)
# uplink messages. Valid values are 0 to 15. # uplink messages. Valid values are 0 to 15.
max_count_n=0 max_count_n = 0
# The device must send a rejoin-request type 0 at least every 2^(max_time_n + 10) # The device must send a rejoin-request type 0 at least every 2^(max_time_n + 10)
# seconds. Valid values are 0 to 15. # seconds. Valid values are 0 to 15.
# #
# 0 = roughly 17 minutes # 0 = roughly 17 minutes
# 15 = about 1 year # 15 = about 1 year
max_time_n=0 max_time_n = 0
# Class-B configuration. # Class-B configuration.
[regions.network.class_b] [regions.network.class_b]
# Ping-slot data-rate. # Ping-slot data-rate.
ping_slot_dr=8 ping_slot_dr = 8
# Ping-slot frequency (Hz) # Ping-slot frequency (Hz)
# #
# set this to 0 to use the default frequency plan for the configured region # set this to 0 to use the default frequency plan for the configured region
# (which could be frequency hopping). # (which could be frequency hopping).
ping_slot_frequency=0 ping_slot_frequency = 0

View File

@@ -2,14 +2,23 @@
[[regions]] [[regions]]
# ID is an use-defined identifier for this region. # ID is an use-defined identifier for this region.
id="au915_5" id = "au915_5"
# Description is a short description for this region. # Description is a short description for this region.
description="AU915 (channels 40-47 + 69)" description = "AU915 (channels 40-47 + 69)"
# Common-name refers to the common-name of this region as defined by # Common-name refers to the common-name of this region as defined by
# the LoRa Alliance. # the LoRa Alliance.
common_name="AU915" common_name = "AU915"
# User-defined region information.
#
# This information will be displayed on top of the region page in then
# ChirpStack web-interface. For example, it can contain information about
# how users should connect their gateways when using this region (e.g. MQTT
# end-point, MQTT topic prefix, TLS configuration etc). Markdown syntax can
# be used for formatting.
user_info = ""
# Gateway configuration. # Gateway configuration.
@@ -18,14 +27,14 @@
# Force gateways as private. # Force gateways as private.
# #
# If enabled, gateways can only be used by devices under the same tenant. # If enabled, gateways can only be used by devices under the same tenant.
force_gws_private=false force_gws_private = false
# Gateway backend configuration. # Gateway backend configuration.
[regions.gateway.backend] [regions.gateway.backend]
# The enabled backend type. # The enabled backend type.
enabled="mqtt" enabled = "mqtt"
# MQTT configuration. # MQTT configuration.
[regions.gateway.backend.mqtt] [regions.gateway.backend.mqtt]
@@ -35,7 +44,7 @@
# The topic prefix can be used to define the region of the gateway. # The topic prefix can be used to define the region of the gateway.
# Note, there is no need to add a trailing '/' to the prefix. The trailing # Note, there is no need to add a trailing '/' to the prefix. The trailing
# '/' is automatically added to the prefix if it is configured. # '/' is automatically added to the prefix if it is configured.
topic_prefix="au915_5" topic_prefix = "au915_5"
# Shared subscription name. # Shared subscription name.
# #
@@ -45,16 +54,16 @@
# test-environment connected to the same MQTT broker, make sure that # test-environment connected to the same MQTT broker, make sure that
# each environment has its own subscription name, for example: # each environment has its own subscription name, for example:
# chirpstack_prod and chirpstack_tst. # chirpstack_prod and chirpstack_tst.
share_name="chirpstack" share_name = "chirpstack"
# MQTT server (e.g. scheme://host:port where scheme is tcp, ssl or ws) # MQTT server (e.g. scheme://host:port where scheme is tcp, ssl or ws)
server="tcp://localhost:1883" server = "tcp://localhost:1883"
# Connect with the given username (optional) # Connect with the given username (optional)
username="" username = ""
# Connect with the given password (optional) # Connect with the given password (optional)
password="" password = ""
# Quality of service level # Quality of service level
# #
@@ -64,40 +73,40 @@
# #
# Note: an increase of this value will decrease the performance. # Note: an increase of this value will decrease the performance.
# For more information: https://www.hivemq.com/blog/mqtt-essentials-part-6-mqtt-quality-of-service-levels # For more information: https://www.hivemq.com/blog/mqtt-essentials-part-6-mqtt-quality-of-service-levels
qos=0 qos = 0
# Clean session # Clean session
# #
# Set the "clean session" flag in the connect message when this client # Set the "clean session" flag in the connect message when this client
# connects to an MQTT broker. By setting this flag you are indicating # connects to an MQTT broker. By setting this flag you are indicating
# that no messages saved by the broker for this client should be delivered. # that no messages saved by the broker for this client should be delivered.
clean_session=false clean_session = false
# Client ID # Client ID
# #
# Set the client id to be used by this client when connecting to the MQTT # Set the client id to be used by this client when connecting to the MQTT
# broker. A client id must be no longer than 23 characters. If left blank, # broker. A client id must be no longer than 23 characters. If left blank,
# a random id will be generated by ChirpStack. # a random id will be generated by ChirpStack.
client_id="" client_id = ""
# Keep alive interval. # Keep alive interval.
# #
# This defines the maximum time that that should pass without communication # This defines the maximum time that that should pass without communication
# between the client and server. # between the client and server.
keep_alive_interval="30s" keep_alive_interval = "30s"
# CA certificate file (optional) # CA certificate file (optional)
# #
# Use this when setting up a secure connection (when server uses ssl://...) # Use this when setting up a secure connection (when server uses ssl://...)
# but the certificate used by the server is not trusted by any CA certificate # but the certificate used by the server is not trusted by any CA certificate
# on the server (e.g. when self generated). # on the server (e.g. when self generated).
ca_cert="" ca_cert = ""
# TLS certificate file (optional) # TLS certificate file (optional)
tls_cert="" tls_cert = ""
# TLS key file (optional) # TLS key file (optional)
tls_key="" tls_key = ""
# Gateway channel configuration. # Gateway channel configuration.
@@ -106,58 +115,58 @@
# ChirpStack Concentratord daemon. In any other case, this configuration # ChirpStack Concentratord daemon. In any other case, this configuration
# is ignored. # is ignored.
[[regions.gateway.channels]] [[regions.gateway.channels]]
frequency=923200000 frequency = 923200000
bandwidth=125000 bandwidth = 125000
modulation="LORA" modulation = "LORA"
spreading_factors=[7, 8, 9, 10, 11, 12] spreading_factors = [7, 8, 9, 10, 11, 12]
[[regions.gateway.channels]] [[regions.gateway.channels]]
frequency=923400000 frequency = 923400000
bandwidth=125000 bandwidth = 125000
modulation="LORA" modulation = "LORA"
spreading_factors=[7, 8, 9, 10, 11, 12] spreading_factors = [7, 8, 9, 10, 11, 12]
[[regions.gateway.channels]] [[regions.gateway.channels]]
frequency=923600000 frequency = 923600000
bandwidth=125000 bandwidth = 125000
modulation="LORA" modulation = "LORA"
spreading_factors=[7, 8, 9, 10, 11, 12] spreading_factors = [7, 8, 9, 10, 11, 12]
[[regions.gateway.channels]] [[regions.gateway.channels]]
frequency=923800000 frequency = 923800000
bandwidth=125000 bandwidth = 125000
modulation="LORA" modulation = "LORA"
spreading_factors=[7, 8, 9, 10, 11, 12] spreading_factors = [7, 8, 9, 10, 11, 12]
[[regions.gateway.channels]] [[regions.gateway.channels]]
frequency=924000000 frequency = 924000000
bandwidth=125000 bandwidth = 125000
modulation="LORA" modulation = "LORA"
spreading_factors=[7, 8, 9, 10, 11, 12] spreading_factors = [7, 8, 9, 10, 11, 12]
[[regions.gateway.channels]] [[regions.gateway.channels]]
frequency=924200000 frequency = 924200000
bandwidth=125000 bandwidth = 125000
modulation="LORA" modulation = "LORA"
spreading_factors=[7, 8, 9, 10, 11, 12] spreading_factors = [7, 8, 9, 10, 11, 12]
[[regions.gateway.channels]] [[regions.gateway.channels]]
frequency=924400000 frequency = 924400000
bandwidth=125000 bandwidth = 125000
modulation="LORA" modulation = "LORA"
spreading_factors=[7, 8, 9, 10, 11, 12] spreading_factors = [7, 8, 9, 10, 11, 12]
[[regions.gateway.channels]] [[regions.gateway.channels]]
frequency=924600000 frequency = 924600000
bandwidth=125000 bandwidth = 125000
modulation="LORA" modulation = "LORA"
spreading_factors=[7, 8, 9, 10, 11, 12] spreading_factors = [7, 8, 9, 10, 11, 12]
[[regions.gateway.channels]] [[regions.gateway.channels]]
frequency=923900000 frequency = 923900000
bandwidth=500000 bandwidth = 500000
modulation="LORA" modulation = "LORA"
spreading_factors=[8] spreading_factors = [8]
# Region specific network configuration. # Region specific network configuration.
@@ -169,7 +178,7 @@
# resulting in a lower data-rate but decreasing the chance that the # resulting in a lower data-rate but decreasing the chance that the
# device gets disconnected because it is unable to reach one of the # device gets disconnected because it is unable to reach one of the
# surrounded gateways. # surrounded gateways.
installation_margin=10 installation_margin = 10
# RX window (Class-A). # RX window (Class-A).
# #
@@ -177,19 +186,19 @@
# 0: RX1 / RX2 # 0: RX1 / RX2
# 1: RX1 only # 1: RX1 only
# 2: RX2 only # 2: RX2 only
rx_window=0 rx_window = 0
# RX1 delay (1 - 15 seconds). # RX1 delay (1 - 15 seconds).
rx1_delay=1 rx1_delay = 1
# RX1 data-rate offset # RX1 data-rate offset
rx1_dr_offset=0 rx1_dr_offset = 0
# RX2 data-rate # RX2 data-rate
rx2_dr=8 rx2_dr = 8
# RX2 frequency (Hz) # RX2 frequency (Hz)
rx2_frequency=923300000 rx2_frequency = 923300000
# Prefer RX2 on RX1 data-rate less than. # Prefer RX2 on RX1 data-rate less than.
# #
@@ -197,13 +206,13 @@
# is smaller than the configured value, then the Network Server will # is smaller than the configured value, then the Network Server will
# first try to schedule the downlink for RX2, failing that (e.g. the gateway # first try to schedule the downlink for RX2, failing that (e.g. the gateway
# has already a payload scheduled at the RX2 timing) it will try RX1. # has already a payload scheduled at the RX2 timing) it will try RX1.
rx2_prefer_on_rx1_dr_lt=0 rx2_prefer_on_rx1_dr_lt = 0
# Prefer RX2 on link budget. # Prefer RX2 on link budget.
# #
# When the link-budget is better for RX2 than for RX1, the Network Server will first # When the link-budget is better for RX2 than for RX1, the Network Server will first
# try to schedule the downlink in RX2, failing that it will try RX1. # try to schedule the downlink in RX2, failing that it will try RX1.
rx2_prefer_on_link_budget=false rx2_prefer_on_link_budget = false
# Downlink TX Power (in dBm EIRP) # Downlink TX Power (in dBm EIRP)
# #
@@ -213,51 +222,51 @@
# Please consult the LoRaWAN Regional Parameters and local regulations # Please consult the LoRaWAN Regional Parameters and local regulations
# for valid and legal options. Note that the configured TX Power must be # for valid and legal options. Note that the configured TX Power must be
# supported by your gateway(s). # supported by your gateway(s).
downlink_tx_power=-1 downlink_tx_power = -1
# ADR is disabled. # ADR is disabled.
adr_disabled=false adr_disabled = false
# Minimum data-rate. # Minimum data-rate.
min_dr=0 min_dr = 0
# Maximum data-rate. # Maximum data-rate.
max_dr=5 max_dr = 5
# Enabled uplink channels. # Enabled uplink channels.
# #
# Use this when ony a sub-set of the by default enabled channels are being # Use this when ony a sub-set of the by default enabled channels are being
# used. For example when only using the first 8 channels of the US band. # used. For example when only using the first 8 channels of the US band.
# Note: when left blank / empty array, all channels will be enabled. # Note: when left blank / empty array, all channels will be enabled.
enabled_uplink_channels=[40, 41, 42, 43, 44, 45, 46, 47, 69] enabled_uplink_channels = [40, 41, 42, 43, 44, 45, 46, 47, 69]
# Rejoin-request configuration (LoRaWAN 1.1) # Rejoin-request configuration (LoRaWAN 1.1)
[regions.network.rejoin_request] [regions.network.rejoin_request]
# Request devices to periodically send rejoin-requests. # Request devices to periodically send rejoin-requests.
enabled=false enabled = false
# The device must send a rejoin-request type 0 at least every 2^(max_count_n + 4) # The device must send a rejoin-request type 0 at least every 2^(max_count_n + 4)
# uplink messages. Valid values are 0 to 15. # uplink messages. Valid values are 0 to 15.
max_count_n=0 max_count_n = 0
# The device must send a rejoin-request type 0 at least every 2^(max_time_n + 10) # The device must send a rejoin-request type 0 at least every 2^(max_time_n + 10)
# seconds. Valid values are 0 to 15. # seconds. Valid values are 0 to 15.
# #
# 0 = roughly 17 minutes # 0 = roughly 17 minutes
# 15 = about 1 year # 15 = about 1 year
max_time_n=0 max_time_n = 0
# Class-B configuration. # Class-B configuration.
[regions.network.class_b] [regions.network.class_b]
# Ping-slot data-rate. # Ping-slot data-rate.
ping_slot_dr=8 ping_slot_dr = 8
# Ping-slot frequency (Hz) # Ping-slot frequency (Hz)
# #
# set this to 0 to use the default frequency plan for the configured region # set this to 0 to use the default frequency plan for the configured region
# (which could be frequency hopping). # (which could be frequency hopping).
ping_slot_frequency=0 ping_slot_frequency = 0

View File

@@ -2,14 +2,23 @@
[[regions]] [[regions]]
# ID is an use-defined identifier for this region. # ID is an use-defined identifier for this region.
id="au915_6" id = "au915_6"
# Description is a short description for this region. # Description is a short description for this region.
description="AU915 (channels 48-55 + 70)" description = "AU915 (channels 48-55 + 70)"
# Common-name refers to the common-name of this region as defined by # Common-name refers to the common-name of this region as defined by
# the LoRa Alliance. # the LoRa Alliance.
common_name="AU915" common_name = "AU915"
# User-defined region information.
#
# This information will be displayed on top of the region page in then
# ChirpStack web-interface. For example, it can contain information about
# how users should connect their gateways when using this region (e.g. MQTT
# end-point, MQTT topic prefix, TLS configuration etc). Markdown syntax can
# be used for formatting.
user_info = ""
# Gateway configuration. # Gateway configuration.
@@ -18,14 +27,14 @@
# Force gateways as private. # Force gateways as private.
# #
# If enabled, gateways can only be used by devices under the same tenant. # If enabled, gateways can only be used by devices under the same tenant.
force_gws_private=false force_gws_private = false
# Gateway backend configuration. # Gateway backend configuration.
[regions.gateway.backend] [regions.gateway.backend]
# The enabled backend type. # The enabled backend type.
enabled="mqtt" enabled = "mqtt"
# MQTT configuration. # MQTT configuration.
[regions.gateway.backend.mqtt] [regions.gateway.backend.mqtt]
@@ -35,7 +44,7 @@
# The topic prefix can be used to define the region of the gateway. # The topic prefix can be used to define the region of the gateway.
# Note, there is no need to add a trailing '/' to the prefix. The trailing # Note, there is no need to add a trailing '/' to the prefix. The trailing
# '/' is automatically added to the prefix if it is configured. # '/' is automatically added to the prefix if it is configured.
topic_prefix="au915_6" topic_prefix = "au915_6"
# Shared subscription name. # Shared subscription name.
# #
@@ -45,16 +54,16 @@
# test-environment connected to the same MQTT broker, make sure that # test-environment connected to the same MQTT broker, make sure that
# each environment has its own subscription name, for example: # each environment has its own subscription name, for example:
# chirpstack_prod and chirpstack_tst. # chirpstack_prod and chirpstack_tst.
share_name="chirpstack" share_name = "chirpstack"
# MQTT server (e.g. scheme://host:port where scheme is tcp, ssl or ws) # MQTT server (e.g. scheme://host:port where scheme is tcp, ssl or ws)
server="tcp://localhost:1883" server = "tcp://localhost:1883"
# Connect with the given username (optional) # Connect with the given username (optional)
username="" username = ""
# Connect with the given password (optional) # Connect with the given password (optional)
password="" password = ""
# Quality of service level # Quality of service level
# #
@@ -64,40 +73,40 @@
# #
# Note: an increase of this value will decrease the performance. # Note: an increase of this value will decrease the performance.
# For more information: https://www.hivemq.com/blog/mqtt-essentials-part-6-mqtt-quality-of-service-levels # For more information: https://www.hivemq.com/blog/mqtt-essentials-part-6-mqtt-quality-of-service-levels
qos=0 qos = 0
# Clean session # Clean session
# #
# Set the "clean session" flag in the connect message when this client # Set the "clean session" flag in the connect message when this client
# connects to an MQTT broker. By setting this flag you are indicating # connects to an MQTT broker. By setting this flag you are indicating
# that no messages saved by the broker for this client should be delivered. # that no messages saved by the broker for this client should be delivered.
clean_session=false clean_session = false
# Client ID # Client ID
# #
# Set the client id to be used by this client when connecting to the MQTT # Set the client id to be used by this client when connecting to the MQTT
# broker. A client id must be no longer than 23 characters. If left blank, # broker. A client id must be no longer than 23 characters. If left blank,
# a random id will be generated by ChirpStack. # a random id will be generated by ChirpStack.
client_id="" client_id = ""
# Keep alive interval. # Keep alive interval.
# #
# This defines the maximum time that that should pass without communication # This defines the maximum time that that should pass without communication
# between the client and server. # between the client and server.
keep_alive_interval="30s" keep_alive_interval = "30s"
# CA certificate file (optional) # CA certificate file (optional)
# #
# Use this when setting up a secure connection (when server uses ssl://...) # Use this when setting up a secure connection (when server uses ssl://...)
# but the certificate used by the server is not trusted by any CA certificate # but the certificate used by the server is not trusted by any CA certificate
# on the server (e.g. when self generated). # on the server (e.g. when self generated).
ca_cert="" ca_cert = ""
# TLS certificate file (optional) # TLS certificate file (optional)
tls_cert="" tls_cert = ""
# TLS key file (optional) # TLS key file (optional)
tls_key="" tls_key = ""
# Gateway channel configuration. # Gateway channel configuration.
@@ -106,58 +115,58 @@
# ChirpStack Concentratord daemon. In any other case, this configuration # ChirpStack Concentratord daemon. In any other case, this configuration
# is ignored. # is ignored.
[[regions.gateway.channels]] [[regions.gateway.channels]]
frequency=924800000 frequency = 924800000
bandwidth=125000 bandwidth = 125000
modulation="LORA" modulation = "LORA"
spreading_factors=[7, 8, 9, 10, 11, 12] spreading_factors = [7, 8, 9, 10, 11, 12]
[[regions.gateway.channels]] [[regions.gateway.channels]]
frequency=925000000 frequency = 925000000
bandwidth=125000 bandwidth = 125000
modulation="LORA" modulation = "LORA"
spreading_factors=[7, 8, 9, 10, 11, 12] spreading_factors = [7, 8, 9, 10, 11, 12]
[[regions.gateway.channels]] [[regions.gateway.channels]]
frequency=925200000 frequency = 925200000
bandwidth=125000 bandwidth = 125000
modulation="LORA" modulation = "LORA"
spreading_factors=[7, 8, 9, 10, 11, 12] spreading_factors = [7, 8, 9, 10, 11, 12]
[[regions.gateway.channels]] [[regions.gateway.channels]]
frequency=925400000 frequency = 925400000
bandwidth=125000 bandwidth = 125000
modulation="LORA" modulation = "LORA"
spreading_factors=[7, 8, 9, 10, 11, 12] spreading_factors = [7, 8, 9, 10, 11, 12]
[[regions.gateway.channels]] [[regions.gateway.channels]]
frequency=925600000 frequency = 925600000
bandwidth=125000 bandwidth = 125000
modulation="LORA" modulation = "LORA"
spreading_factors=[7, 8, 9, 10, 11, 12] spreading_factors = [7, 8, 9, 10, 11, 12]
[[regions.gateway.channels]] [[regions.gateway.channels]]
frequency=925800000 frequency = 925800000
bandwidth=125000 bandwidth = 125000
modulation="LORA" modulation = "LORA"
spreading_factors=[7, 8, 9, 10, 11, 12] spreading_factors = [7, 8, 9, 10, 11, 12]
[[regions.gateway.channels]] [[regions.gateway.channels]]
frequency=926000000 frequency = 926000000
bandwidth=125000 bandwidth = 125000
modulation="LORA" modulation = "LORA"
spreading_factors=[7, 8, 9, 10, 11, 12] spreading_factors = [7, 8, 9, 10, 11, 12]
[[regions.gateway.channels]] [[regions.gateway.channels]]
frequency=926200000 frequency = 926200000
bandwidth=125000 bandwidth = 125000
modulation="LORA" modulation = "LORA"
spreading_factors=[7, 8, 9, 10, 11, 12] spreading_factors = [7, 8, 9, 10, 11, 12]
[[regions.gateway.channels]] [[regions.gateway.channels]]
frequency=925500000 frequency = 925500000
bandwidth=500000 bandwidth = 500000
modulation="LORA" modulation = "LORA"
spreading_factors=[8] spreading_factors = [8]
# Region specific network configuration. # Region specific network configuration.
@@ -169,7 +178,7 @@
# resulting in a lower data-rate but decreasing the chance that the # resulting in a lower data-rate but decreasing the chance that the
# device gets disconnected because it is unable to reach one of the # device gets disconnected because it is unable to reach one of the
# surrounded gateways. # surrounded gateways.
installation_margin=10 installation_margin = 10
# RX window (Class-A). # RX window (Class-A).
# #
@@ -177,19 +186,19 @@
# 0: RX1 / RX2 # 0: RX1 / RX2
# 1: RX1 only # 1: RX1 only
# 2: RX2 only # 2: RX2 only
rx_window=0 rx_window = 0
# RX1 delay (1 - 15 seconds). # RX1 delay (1 - 15 seconds).
rx1_delay=1 rx1_delay = 1
# RX1 data-rate offset # RX1 data-rate offset
rx1_dr_offset=0 rx1_dr_offset = 0
# RX2 data-rate # RX2 data-rate
rx2_dr=8 rx2_dr = 8
# RX2 frequency (Hz) # RX2 frequency (Hz)
rx2_frequency=923300000 rx2_frequency = 923300000
# Prefer RX2 on RX1 data-rate less than. # Prefer RX2 on RX1 data-rate less than.
# #
@@ -197,13 +206,13 @@
# is smaller than the configured value, then the Network Server will # is smaller than the configured value, then the Network Server will
# first try to schedule the downlink for RX2, failing that (e.g. the gateway # first try to schedule the downlink for RX2, failing that (e.g. the gateway
# has already a payload scheduled at the RX2 timing) it will try RX1. # has already a payload scheduled at the RX2 timing) it will try RX1.
rx2_prefer_on_rx1_dr_lt=0 rx2_prefer_on_rx1_dr_lt = 0
# Prefer RX2 on link budget. # Prefer RX2 on link budget.
# #
# When the link-budget is better for RX2 than for RX1, the Network Server will first # When the link-budget is better for RX2 than for RX1, the Network Server will first
# try to schedule the downlink in RX2, failing that it will try RX1. # try to schedule the downlink in RX2, failing that it will try RX1.
rx2_prefer_on_link_budget=false rx2_prefer_on_link_budget = false
# Downlink TX Power (in dBm EIRP) # Downlink TX Power (in dBm EIRP)
# #
@@ -213,51 +222,51 @@
# Please consult the LoRaWAN Regional Parameters and local regulations # Please consult the LoRaWAN Regional Parameters and local regulations
# for valid and legal options. Note that the configured TX Power must be # for valid and legal options. Note that the configured TX Power must be
# supported by your gateway(s). # supported by your gateway(s).
downlink_tx_power=-1 downlink_tx_power = -1
# ADR is disabled. # ADR is disabled.
adr_disabled=false adr_disabled = false
# Minimum data-rate. # Minimum data-rate.
min_dr=0 min_dr = 0
# Maximum data-rate. # Maximum data-rate.
max_dr=5 max_dr = 5
# Enabled uplink channels. # Enabled uplink channels.
# #
# Use this when ony a sub-set of the by default enabled channels are being # Use this when ony a sub-set of the by default enabled channels are being
# used. For example when only using the first 8 channels of the US band. # used. For example when only using the first 8 channels of the US band.
# Note: when left blank / empty array, all channels will be enabled. # Note: when left blank / empty array, all channels will be enabled.
enabled_uplink_channels=[48, 49, 50, 51, 52, 53, 54, 55, 70] enabled_uplink_channels = [48, 49, 50, 51, 52, 53, 54, 55, 70]
# Rejoin-request configuration (LoRaWAN 1.1) # Rejoin-request configuration (LoRaWAN 1.1)
[regions.network.rejoin_request] [regions.network.rejoin_request]
# Request devices to periodically send rejoin-requests. # Request devices to periodically send rejoin-requests.
enabled=false enabled = false
# The device must send a rejoin-request type 0 at least every 2^(max_count_n + 4) # The device must send a rejoin-request type 0 at least every 2^(max_count_n + 4)
# uplink messages. Valid values are 0 to 15. # uplink messages. Valid values are 0 to 15.
max_count_n=0 max_count_n = 0
# The device must send a rejoin-request type 0 at least every 2^(max_time_n + 10) # The device must send a rejoin-request type 0 at least every 2^(max_time_n + 10)
# seconds. Valid values are 0 to 15. # seconds. Valid values are 0 to 15.
# #
# 0 = roughly 17 minutes # 0 = roughly 17 minutes
# 15 = about 1 year # 15 = about 1 year
max_time_n=0 max_time_n = 0
# Class-B configuration. # Class-B configuration.
[regions.network.class_b] [regions.network.class_b]
# Ping-slot data-rate. # Ping-slot data-rate.
ping_slot_dr=8 ping_slot_dr = 8
# Ping-slot frequency (Hz) # Ping-slot frequency (Hz)
# #
# set this to 0 to use the default frequency plan for the configured region # set this to 0 to use the default frequency plan for the configured region
# (which could be frequency hopping). # (which could be frequency hopping).
ping_slot_frequency=0 ping_slot_frequency = 0

Some files were not shown because too many files have changed in this diff Show More