Loading...
Searching...
No Matches
lorawan.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2019 HAW Hamburg
3 * SPDX-License-Identifier: LGPL-2.1-only
4 */
5
6#pragma once
7
17
18#include "compiler_hints.h"
19#include "net/gnrc/lorawan.h"
20#include "ztimer.h"
21
22#ifdef __cplusplus
23extern "C" {
24#endif
25
29#define GNRC_NETIF_LORAWAN_FLAGS_LINK_CHECK (0x1U)
30
34typedef struct {
38#if IS_USED(MODULE_GNRC_LORAWAN_1_1)
39 uint8_t appkey[LORAMAC_APPKEY_LEN];
40 uint8_t snwksintkey[LORAMAC_SNWKSINTKEY_LEN];
41 uint8_t nwksenckey[LORAMAC_NWKSENCKEY_LEN];
42 uint8_t jsintkey[LORAMAC_JSINTKEY_LEN];
43 uint8_t jsenckey[LORAMAC_JSENCKEY_LEN];
44#endif
50 uint8_t flags;
51 uint8_t demod_margin;
52 uint8_t num_gateways;
53 uint8_t datarate;
54 uint8_t port;
55 uint8_t ack_req;
56 uint8_t otaa;
58
71ACCESS(read_only, 2, 3)
73 const uint8_t *key,
74 size_t len)
75{
76 (void)lw_netif;
77 (void)key;
78 (void)len;
79
80#if IS_USED(MODULE_GNRC_LORAWAN_1_1)
81 if (sizeof(lw_netif->appkey) < len) {
82 return -1;
83 }
84 memcpy(lw_netif->appkey, key, len);
85#endif
86 return 0;
87}
88
98static inline uint8_t * gnrc_netif_lorawan_get_appkey(gnrc_netif_lorawan_t *lw_netif)
99{
100 (void)lw_netif;
101
102#if IS_USED(MODULE_GNRC_LORAWAN_1_1)
103 return lw_netif->appkey;
104#endif
105 return NULL; /* NO-OP */
106}
107
120ACCESS(read_only, 2, 3)
122 const uint8_t *key, size_t len)
123{
124 (void)lw_netif;
125 (void)key;
126 (void)len;
127
128#if IS_USED(MODULE_GNRC_LORAWAN_1_1)
129 if (sizeof(lw_netif->snwksintkey) < len) {
130 return -1;
131 }
132 memcpy(lw_netif->snwksintkey, key, len);
133#endif
134 return 0;
135}
136
149ACCESS(read_only, 2, 3)
151 const uint8_t *key, size_t len)
152{
153 (void)lw_netif;
154 (void)key;
155 (void)len;
156
157#if IS_USED(MODULE_GNRC_LORAWAN_1_1)
158 if (sizeof(lw_netif->nwksenckey) < len) {
159 return -1;
160 }
161 memcpy(lw_netif->nwksenckey, key, len);
162#endif
163 return 0;
164}
165
166#ifdef __cplusplus
167}
168#endif
169
Common macros and compiler attributes/pragmas configuration.
#define ACCESS(mode, ptr_idx, size_idx)
Emit an attribute (if supported by the compiler) that declares how a function will access its paramet...
#define LORAMAC_NWKSENCKEY_LEN
Network session encryption key length in bytes.
Definition loramac.h:596
#define LORAMAC_FNWKSINTKEY_LEN
Forwarding Network session integrity key length in bytes.
Definition loramac.h:586
#define LORAMAC_APPKEY_LEN
Application key length in bytes.
Definition loramac.h:566
#define LORAMAC_JOINEUI_LEN
Join EUI length in bytes.
Definition loramac.h:561
#define LORAMAC_DEVEUI_LEN
Device EUI length in bytes.
Definition loramac.h:546
#define LORAMAC_JSINTKEY_LEN
Join session integrity key length in bytes.
Definition loramac.h:601
#define LORAMAC_JSENCKEY_LEN
Join session encryption key length in bytes.
Definition loramac.h:606
#define LORAMAC_NWKKEY_LEN
Network key length in bytes.
Definition loramac.h:571
#define LORAMAC_APPSKEY_LEN
Application session key length in bytes.
Definition loramac.h:576
#define LORAMAC_SNWKSINTKEY_LEN
Serving Network session integrity key length in bytes.
Definition loramac.h:591
GNRC LoRaWAN API definition.
static int gnrc_netif_lorawan_set_snwksintkey(gnrc_netif_lorawan_t *lw_netif, const uint8_t *key, size_t len)
Set the serving network session integrity key in the interface descriptor.
Definition lorawan.h:121
static int gnrc_netif_lorawan_set_nwksenckey(gnrc_netif_lorawan_t *lw_netif, const uint8_t *key, size_t len)
Set the network session encryption key in the interface descriptor.
Definition lorawan.h:150
static int gnrc_netif_lorawan_set_appkey(gnrc_netif_lorawan_t *lw_netif, const uint8_t *key, size_t len)
Set the app key in the interface descriptor.
Definition lorawan.h:72
static uint8_t * gnrc_netif_lorawan_get_appkey(gnrc_netif_lorawan_t *lw_netif)
Get the app key from the interface descriptor.
Definition lorawan.h:98
GNRC LoRaWAN mac descriptor.
GNRC LoRaWAN interface descriptor.
Definition lorawan.h:34
uint8_t joineui[LORAMAC_JOINEUI_LEN]
Join EUI buffer.
Definition lorawan.h:46
ztimer_t timer
General purpose timer.
Definition lorawan.h:48
gnrc_lorawan_t mac
gnrc lorawan mac descriptor
Definition lorawan.h:47
uint8_t num_gateways
number of gateways of last link check
Definition lorawan.h:52
uint8_t otaa
whether the next transmission is OTAA or not
Definition lorawan.h:56
uint8_t deveui[LORAMAC_DEVEUI_LEN]
Device EUI buffer.
Definition lorawan.h:45
uint8_t port
LoRaWAN port for the next transmission.
Definition lorawan.h:54
ztimer_t backoff_timer
Backoff timer.
Definition lorawan.h:49
uint8_t datarate
LoRaWAN datarate for the next transmission.
Definition lorawan.h:53
uint8_t demod_margin
value of last demodulation margin
Definition lorawan.h:51
uint8_t nwkkey[LORAMAC_NWKKEY_LEN]
Network key buffer.
Definition lorawan.h:37
uint8_t appskey[LORAMAC_APPSKEY_LEN]
App SKey buffer.
Definition lorawan.h:35
uint8_t flags
flags for the LoRaWAN interface
Definition lorawan.h:50
uint8_t ack_req
Request ACK in the next transmission.
Definition lorawan.h:55
uint8_t fnwksintkey[LORAMAC_FNWKSINTKEY_LEN]
Forwarding Network session integrity key buffer.
Definition lorawan.h:36
ztimer structure
Definition ztimer.h:316
ztimer API