396 Commits

Author SHA1 Message Date
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
880b319bfd
Update sslmode options in config template. (#433) 2024-06-10 15:09:34 +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
4968f5d792 Bump version to 4.8.1 2024-05-13 16:47:14 +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
d03870ff11 Bump version to 4.8.0-test.4 2024-05-09 11:22:22 +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
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
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
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
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
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
Orne Brocaar
9207effb5b Bump version to 4.8.0-test.2 2024-04-10 10:12:06 +01:00
Orne Brocaar
b3ba23f32c Bump version to 4.8.0-test.1 2024-04-04 15:25:59 +01:00
Orne Brocaar
2bb05fba58 Update dependencies. 2024-04-02 11:40:47 +01:00
Orne Brocaar
161cd9008c Fix multicast class-b ping-slot migration in case value is 0. 2024-04-02 09:25:58 +01:00
Orne Brocaar
a66f085782 Use PKCS#8 fallback for all private keys reads.
This fallback was already implemented for reading the private key when
generating MQTT client-certificates, but it was not used when reading a
private key for connecting to the MQTT broker.

While it is recommended to use PKCS#8 private-keys, this will perform an
auto conversion for RSA PKCS#1 and EC P256 SEC1 private-keys to PKCS#8.
2024-03-27 10:25:22 +00:00
Orne Brocaar
2c06edd6ff Add auto conversion for SEC1 EC keys to PKCS#8.
Fixes #386.
2024-03-27 09:50:18 +00:00
Orne Brocaar
c71b856c78 Align multicast class-b ping-slot config.
This aligns the multicast class-b ping-slot configuration with the way
how it is configured in the device-profile. This deprecates the
class_b_ping_slot_period field in favor of the class_b_ping_slot_nb_k
field, which should be a value between 0 - 7 (this is defined and
explained by the LoRaWAN specification).

Closes #255.
2024-03-26 16:45:24 +00:00
Orne Brocaar
e96e828d3f Document that keys need to be in PKCS#8.
Closes #386.
2024-03-26 12:47:20 +00:00
Orne Brocaar
e3752fb19d Expose more verbose JS codec error output.
Closes #391.
2024-03-26 11:06:43 +00:00
Orne Brocaar
f970e94cca Show version in UI (for admin users).
Closes #73 and #158.
2024-03-26 09:01:21 +00:00
Orne Brocaar
5a865c924c Fix setting gateway after 0cd5dd8d313481922faab0a960bf69093c79a474. 2024-03-19 14:00:47 +00:00
Orne Brocaar
56336fa685 Update dependencies. 2024-03-19 12:41:18 +00:00
Orne Brocaar
c426e48b8d Update dependencies + fix check / clippy feedback. 2024-03-19 12:15:48 +00:00
Orne Brocaar
a78bc226f6 Update redis crate.
This version solves inconsistent pipeline output types when using
multiplexed async connections.
2024-03-19 10:38:08 +00:00
Orne Brocaar
06bcca147c Update tonic. 2024-03-19 10:38:08 +00:00
Orne Brocaar
26cef0b2ca Update rustls / tls functions. 2024-03-19 10:38:08 +00:00
Simon Arnell
b118ab56be
Fix typo in error string. (#367) 2024-03-14 14:53:38 +00:00
Orne Brocaar
0cd5dd8d31 Update updating gw loc + tls cert.
This refactors the multiple update functions into a single function
accepting a change-set struct. This also adds a sanity check to make
sure we are not updating the gw loc when lat / lon / alt are all set to
0.
2024-03-14 12:20:11 +00:00
Orne Brocaar
8c875c3bf1 Bump version to 4.7.0 2024-03-13 10:44:21 +00:00
Orne Brocaar
519f53940e Bump version to 4.7.0-test.4 2024-02-27 16:48:40 +00:00
Orne Brocaar
098f8db4c6 Migrate device-sessions from Redis to PostgreSQL.
This migrates the device-sessions from Redis into PostgreSQL. This fixes
a performance issue in case the same DevAddr is reused many times
(e.g. devices rejoining very often or a NetID with small DevAddr space).

There were two issues:

The Redis key containing the DevAddr -> DevEUIs mapping could contain
DevEUIs that no longer used the DevAddr. This mapping would only expire
from the Redis database after none of the devices would use the DevAddr
for more than the configured device_session_ttl.

The other issue with the previous approach was that on for example a
Type 7 NetID, a single DevAddr could be re-used multiple times. As each
device-session could be stored on a different Redis Cluster instance,
there was no option to retrieve all device-sessions at once. Thus a high
re-usage of a single DevAddr would cause an increase in Redis queries.

Both issues are solved by moving the device-session into PostgreSQL
as the DevAddr is a column of the device record and thus filtering on
this DevAddr would always result in the devices using that DevAddr, as
well all device-sessions for a DevAddr can be retrieved by a single
query.

Note that to migrate the device-sessions, you must run:

chirpstack -c path/to/config migrate-device-sessions-to-postgres

A nice side-effect is that a PostgreSQL backup / restore will also
restore the device connectivity.

Closes #362 and #74.
2024-02-27 16:17:15 +00:00
Orne Brocaar
fc30a3b7e5 Add OIDC CustomClaims struct.
This is needed when custom claims are returned that are not used by
ChirpStack, but might be used during user registration.
2024-02-22 13:38:29 +00:00
Orne Brocaar
d599e7a276 Add js context to get_activation api method. 2024-02-06 13:16:26 +00:00
Orne Brocaar
8cde64c4b7 Save metrics in one pipelined Redis query.
This saves the metrics in one pipelined Redis query, rather than one
query per aggregation level. This saves 2 queries per save.
2024-01-31 12:11:54 +00:00
Orne Brocaar
b65faf7b98 Merge deduplication_put and _locked queries.
This merges the deduplication_put and deduplication_locked Redis queries
into a single pipelined query. Simulating 400 uplinks / seconds through
3 gateways (thus 1200 messages / second), and an artificial TCP latency
of 5ms between ChirpStack <> Redis, this reduces the
storage_redis_conn_get_duration_seconds_sum metric by about 50%.

What we are trying to solve here is that under high (simulated) load, we
exhaust the Redis connection pool. This situation gets worse when there
is a significant latency between ChirpStack <> Redis, because the query
takes longer to complete and is reserved from the pool for a longer
time. The result can be that during the de-duplication process, the key
containing the uplink set has already expired before the
deduplicate_collect function is able to get a Redis connection from the
pool.

This query merge is a quick win, because each uplink can be received by
N gateways, thus this merge saves N Redis queries per uplink.
2024-01-31 11:06:03 +00:00
Orne Brocaar
9de86ffdec Track pg and redis get conn metrics.
This data is useful when debugging connection-pool size related issues.
E.g. when more connections are requested than the connection pool allows
then this will result in a longer wait time.
2024-01-31 09:54:00 +00:00
Orne Brocaar
107fbfa7bb Fix setting dev_addr field on ABP activate. 2024-01-25 11:23:33 +00:00
Orne Brocaar
be26e60111 Bump version to 4.7.0-test.3 2024-01-12 09:19:50 +00:00
Orne Brocaar
e1334f647d Bump version to 4.7.0-test.2 2024-01-11 15:42:16 +00:00