Skip to content

Commit 463423e

Browse files
committed
Support multi-downlink commands and acks.
This makes it possible for the NS to send multiple downlink opportunities (e.g. RX1 and RX2) so that the gateway can immediately retry without the need of another nACK + downlink command roundtrip. This has been implemented in a backwards compatible way.
1 parent f8f65f2 commit 463423e

File tree

16 files changed

+1015
-350
lines changed

16 files changed

+1015
-350
lines changed

docs/content/payloads/commands.md

Lines changed: 74 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,11 @@ For the Protobuf definitions, please refer to [gw.proto](https://github.com/broc
2222

2323
Request the gateway to schedule a downlink transmission.
2424

25+
The `items` must contain at least one downlink option but can contain multiple
26+
items. At most one item will be emitted by the gateway. By specifying multiple
27+
items (e.g. RX1 and RX2), the gateway can retry with the next item in case of a
28+
scheduling issue.
29+
2530
The `context` key must contain the same value as the related uplink frame.
2631
It holds the gateway internal context (e.g. internal timing information).
2732

@@ -31,78 +36,90 @@ It holds the gateway internal context (e.g. internal timing information).
3136

3237
{{<highlight json>}}
3338
{
34-
"phyPayload": "IHN792Ld0vEHetyVv9+llJnnmz88Up6pFz8UiUdJMnUc",
35-
"txInfo": {
36-
"gatewayID": "AQIDBAUGBwg=",
37-
"frequency": 868100000,
38-
"power": 14,
39-
"modulation": "LORA",
40-
"loRaModulationInfo": {
41-
"bandwidth": 125,
42-
"spreadingFactor": 10,
43-
"codeRate": "4/5",
44-
"polarizationInversion": true
45-
},
46-
"board": 0,
47-
"antenna": 0,
48-
"timing": "DELAY",
49-
"delayTimingInfo": {
50-
"delay": "1s"
51-
},
52-
"context": "AAAAAAAAAAMAAAAAAAAABA=="
53-
},
54-
"token": 1234
39+
"gatewayID": "AQIDBAUGBwg=",
40+
"token": 1234,
41+
"items": [
42+
{
43+
"phyPayload": "IHN792Ld0vEHetyVv9+llJnnmz88Up6pFz8UiUdJMnUc",
44+
"txInfo": {
45+
"frequency": 868100000,
46+
"power": 14,
47+
"modulation": "LORA",
48+
"loRaModulationInfo": {
49+
"bandwidth": 125,
50+
"spreadingFactor": 10,
51+
"codeRate": "4/5",
52+
"polarizationInversion": true
53+
},
54+
"board": 0,
55+
"antenna": 0,
56+
"timing": "DELAY",
57+
"delayTimingInfo": {
58+
"delay": "1s"
59+
},
60+
"context": "AAAAAAAAAAMAAAAAAAAABA=="
61+
}
62+
}
63+
]
5564
}
5665
{{</highlight>}}
5766

5867
#### GPS timing (e.g. Class-B)
5968

6069
{{<highlight json>}}
6170
{
62-
"phyPayload": "IHN792Ld0vEHetyVv9+llJnnmz88Up6pFz8UiUdJMnUc",
63-
"txInfo": {
64-
"gatewayID": "AQIDBAUGBwg=",
65-
"frequency": 868100000,
66-
"power": 14,
67-
"modulation": "LORA",
68-
"loRaModulationInfo": {
69-
"bandwidth": 125,
70-
"spreadingFactor": 10,
71-
"codeRate": "4/5",
72-
"polarizationInversion": true
73-
},
74-
"board": 0,
75-
"antenna": 0,
76-
"timing": "GPS_EPOCH",
77-
"gpsEpochTimingInfo": {
78-
"timeSinceGPSEpoch": "1s"
71+
"token": 1234,
72+
"gatewayID": "AQIDBAUGBwg=",
73+
"items": [
74+
{
75+
"phyPayload": "IHN792Ld0vEHetyVv9+llJnnmz88Up6pFz8UiUdJMnUc",
76+
"txInfo": {
77+
"frequency": 868100000,
78+
"power": 14,
79+
"modulation": "LORA",
80+
"loRaModulationInfo": {
81+
"bandwidth": 125,
82+
"spreadingFactor": 10,
83+
"codeRate": "4/5",
84+
"polarizationInversion": true
85+
},
86+
"board": 0,
87+
"antenna": 0,
88+
"timing": "GPS_EPOCH",
89+
"gpsEpochTimingInfo": {
90+
"timeSinceGPSEpoch": "1s"
91+
}
92+
},
7993
}
80-
},
81-
"token": 1234
94+
]
8295
}
8396
{{</highlight>}}
8497

8598
#### Immediately (e.g. Class-C)
8699

87100
{{<highlight json>}}
88101
{
89-
"phyPayload": "IHN792Ld0vEHetyVv9+llJnnmz88Up6pFz8UiUdJMnUc",
90-
"txInfo": {
91-
"gatewayID": "AQIDBAUGBwg=",
92-
"frequency": 868100000,
93-
"power": 14,
94-
"modulation": "LORA",
95-
"loRaModulationInfo": {
96-
"bandwidth": 125,
97-
"spreadingFactor": 10,
98-
"codeRate": "4/5",
99-
"polarizationInversion": true
100-
},
101-
"board": 0,
102-
"antenna": 0,
103-
"timing": "IMMEDIATELY"
104-
},
105-
"token": 1234
102+
"token": 1234,
103+
"gatewayID": "AQIDBAUGBwg=",
104+
"items": [
105+
{
106+
"phyPayload": "IHN792Ld0vEHetyVv9+llJnnmz88Up6pFz8UiUdJMnUc",
107+
"txInfo": {
108+
"frequency": 868100000,
109+
"power": 14,
110+
"modulation": "LORA",
111+
"loRaModulationInfo": {
112+
"bandwidth": 125,
113+
"spreadingFactor": 10,
114+
"codeRate": "4/5",
115+
"polarizationInversion": true
116+
},
117+
"board": 0,
118+
"antenna": 0,
119+
"timing": "IMMEDIATELY"
120+
},
121+
}
122+
]
106123
}
107124
{{</highlight>}}
108125

docs/content/payloads/events.md

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -94,23 +94,24 @@ This message is defined by the `UplinkFrame` Protobuf message.
9494

9595
Acknowledgement (or error) after a downlink command.
9696

97-
Possible error values are:
97+
The index of `items` correlates to the same order of the `down` command payload
98+
`items`.
9899

99-
* `TOO_LATE`: Rejected because it was already too late to program this packet for downlink
100-
* `TOO_EARLY`: Rejected because downlink packet timestamp is too much in advance
101-
* `COLLISION_PACKET`: Rejected because there was already a packet programmed in requested timeframe
102-
* `COLLISION_BEACON`: Rejected because there was already a beacon planned in requested timeframe
103-
* `TX_FREQ`: Rejected because requested frequency is not supported by TX RF chain
104-
* `TX_POWER`: Rejected because requested power is not supported by gateway
105-
* `GPS_UNLOCKED`: Rejected because GPS is unlocked, so GPS timestamp cannot be used
100+
Possible status values are specified by the `TxAckStatus` enum in the
101+
[gw.proto](https://github.com/brocaar/chirpstack-api/blob/master/protobuf/gw/gw.proto)
102+
Protobuf definition.
106103

107104
### JSON
108105

109106
{{<highlight json>}}
110107
{
111108
"gatewayID": "cnb/AC4GLBg=",
112109
"token": 12345,
113-
"error": "GPS_UNLOCKED"
110+
"items": [
111+
{
112+
"status": "GPS_UNLOCKED"
113+
}
114+
]
114115
}
115116
{{< /highlight >}}
116117

go.mod

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,20 @@ module github.com/brocaar/chirpstack-gateway-bridge
33
go 1.14
44

55
require (
6-
github.com/brocaar/chirpstack-api/go/v3 v3.0.7
6+
github.com/brocaar/chirpstack-api/go/v3 v3.4.1
77
github.com/brocaar/lorawan v0.0.0-20190814113539-8eb2a8d6da09
88
github.com/dgrijalva/jwt-go v3.2.0+incompatible
99
github.com/eclipse/paho.mqtt.golang v1.2.0
1010
github.com/go-zeromq/zmq4 v0.7.0
1111
github.com/gofrs/uuid v3.2.0+incompatible
12-
github.com/golang/protobuf v1.3.2
12+
github.com/golang/protobuf v1.3.5
1313
github.com/gopherjs/gopherjs v0.0.0-20190430165422-3e4dfb77656c // indirect
1414
github.com/goreleaser/goreleaser v0.106.0
1515
github.com/goreleaser/nfpm v0.11.0
1616
github.com/gorilla/websocket v1.4.1
1717
github.com/jacobsa/crypto v0.0.0-20190317225127-9f44e2d11115 // indirect
1818
github.com/konsorten/go-windows-terminal-sequences v1.0.2 // indirect
19+
github.com/patrickmn/go-cache v2.1.0+incompatible
1920
github.com/pkg/errors v0.8.1
2021
github.com/prometheus/client_golang v1.1.0
2122
github.com/sirupsen/logrus v1.4.2
@@ -25,7 +26,6 @@ require (
2526
github.com/spf13/viper v1.4.0
2627
github.com/stretchr/testify v1.4.0
2728
golang.org/x/lint v0.0.0-20190409202823-959b441ac422
28-
golang.org/x/net v0.0.0-20190628185345-da137c7871d7 // indirect
2929
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 // indirect
3030
golang.org/x/tools v0.0.0-20190709211700-7b25e351ac0e // indirect
3131
google.golang.org/appengine v1.6.1 // indirect

go.sum

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,16 +24,18 @@ github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
2424
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
2525
github.com/blakesmith/ar v0.0.0-20150311145944-8bd4349a67f2 h1:oMCHnXa6CCCafdPDbMh/lWRhRByN0VFLvv+g+ayx1SI=
2626
github.com/blakesmith/ar v0.0.0-20150311145944-8bd4349a67f2/go.mod h1:PkYb9DJNAwrSvRx5DYA+gUcOIgTGVMNkfSCbZM8cWpI=
27-
github.com/brocaar/chirpstack-api/go/v3 v3.0.7 h1:cE6f9cAH9SF+RHHB/QfI7acNQqeWmhdiPIrkm1Q1zQo=
28-
github.com/brocaar/chirpstack-api/go/v3 v3.0.7/go.mod h1:sCxojNSPGdUUIImu2OBwP/GRa6xrCEN7H8eP2AYr178=
27+
github.com/brocaar/chirpstack-api/go/v3 v3.4.1 h1:b3dubhgjWKBBQHH0zGCHIjxN5Q2e7rVXHT+45AE4pfk=
28+
github.com/brocaar/chirpstack-api/go/v3 v3.4.1/go.mod h1:ex/wqXQaClwDMa2zDN6crp9ZiMGc1GMVQhjxiB+OJcg=
2929
github.com/brocaar/lorawan v0.0.0-20190814113539-8eb2a8d6da09 h1:hV+axbeTsoTCa1tEkXzDjucdg1GPSX9j1fn95saTKBo=
3030
github.com/brocaar/lorawan v0.0.0-20190814113539-8eb2a8d6da09/go.mod h1:Fm+51pxK6mZoAQjIaWJqPmnRuXecozsM5Mf9c+kr/ko=
3131
github.com/caarlos0/ctrlc v1.0.0 h1:2DtF8GSIcajgffDFJzyG15vO+1PuBWOMUdFut7NnXhw=
3232
github.com/caarlos0/ctrlc v1.0.0/go.mod h1:CdXpj4rmq0q/1Eb44M9zi2nKB0QraNKuRGYGrrHhcQw=
3333
github.com/campoy/unique v0.0.0-20180121183637-88950e537e7e h1:V9a67dfYqPLAvzk5hMQOXYJlZ4SLIXgyKIE+ZiHzgGQ=
3434
github.com/campoy/unique v0.0.0-20180121183637-88950e537e7e/go.mod h1:9IOqJGCPMSc6E5ydlp5NIonxObaeu/Iub/X03EKPVYo=
35+
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
3536
github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
3637
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
38+
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
3739
github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
3840
github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
3941
github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk=
@@ -49,6 +51,9 @@ github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZm
4951
github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no=
5052
github.com/eclipse/paho.mqtt.golang v1.2.0 h1:1F8mhG9+aO5/xpdtFkW4SxOJB67ukuDC3t2y2qayIX0=
5153
github.com/eclipse/paho.mqtt.golang v1.2.0/go.mod h1:H9keYFcgq3Qr5OUJm/JZI/i6U7joQ8SYLhZwfeOo6Ts=
54+
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
55+
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
56+
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
5257
github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys=
5358
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
5459
github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
@@ -75,6 +80,9 @@ github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg
7580
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
7681
github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs=
7782
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
83+
github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
84+
github.com/golang/protobuf v1.3.5 h1:F768QJ1E9tib+q5Sc8MkdJi1RxLTbRcTf8LJV56aRls=
85+
github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk=
7886
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
7987
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
8088
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
@@ -163,6 +171,8 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lN
163171
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
164172
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
165173
github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
174+
github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc=
175+
github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ=
166176
github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc=
167177
github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
168178
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
@@ -180,6 +190,8 @@ github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910 h1:idejC8f
180190
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
181191
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90 h1:S/YWwWx/RA8rT8tKFRuGUZhuA90OyIBpPCXkcbwU8DE=
182192
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
193+
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4 h1:gQz4mCbXsO+nc9n1hCxHcGA3Zx3Eo+UHZoInFGUIXNM=
194+
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
183195
github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
184196
github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
185197
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
@@ -243,7 +255,9 @@ golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnf
243255
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
244256
golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
245257
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
258+
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
246259
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
260+
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
247261
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
248262
golang.org/x/lint v0.0.0-20190409202823-959b441ac422 h1:QzoH/1pFpZguR8NrRHLcO6jKqfv2zpuSqZLgdm7ZmjI=
249263
golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
@@ -253,6 +267,7 @@ golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73r
253267
golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
254268
golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
255269
golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
270+
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
256271
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
257272
golang.org/x/net v0.0.0-20190328230028-74de082e2cca h1:hyA6yiAgbUwuWqtscNvWAI7U1CtlaD1KilQ6iudt1aI=
258273
golang.org/x/net v0.0.0-20190328230028-74de082e2cca/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
@@ -261,8 +276,8 @@ golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR
261276
golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
262277
golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
263278
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
264-
golang.org/x/net v0.0.0-20190628185345-da137c7871d7 h1:rTIdg5QFRR7XCaK4LCjBiPbx8j4DQRpdYMnGn/bJUEU=
265-
golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
279+
golang.org/x/net v0.0.0-20191002035440-2ec189313ef0 h1:2mqDk8w/o6UmeUCu5Qiq2y7iMf6anbx+YA8d1JFoFrs=
280+
golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
266281
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
267282
golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
268283
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 h1:SVwTIAaPC2U/AvvLNZ2a7OVsmBpC8L5BlwK1whH3hm0=
@@ -295,6 +310,7 @@ golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxb
295310
golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
296311
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
297312
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
313+
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
298314
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
299315
golang.org/x/tools v0.0.0-20190328211700-ab21143f2384 h1:TFlARGu6Czu1z7q93HTxcP1P+/ZFC/IKythI5RzrnRg=
300316
golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
@@ -311,9 +327,13 @@ google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7
311327
google.golang.org/appengine v1.6.1 h1:QzqyMA1tlu6CgqCDUtU9V+ZKhLFT2dkJuANu5QaxI3I=
312328
google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
313329
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
330+
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
331+
google.golang.org/genproto v0.0.0-20190927181202-20e1ac93f88c/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8=
314332
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
315333
google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
316-
google.golang.org/grpc v1.24.0/go.mod h1:XDChyiUovWa60DnaeDeZmSW86xtLtjtZbwvSiRnRtcA=
334+
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
335+
google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
336+
google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60=
317337
gopkg.in/alecthomas/kingpin.v2 v2.2.6 h1:jMFz6MfLP0/4fUyZle81rXUoxOBFi19VUFKVDOQfozc=
318338
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
319339
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
@@ -324,5 +344,7 @@ gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bl
324344
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
325345
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
326346
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
347+
gopkg.in/yaml.v2 v2.2.3 h1:fvjTMHxHEw/mxHbtzPi3JCcKXQRAnQTBRo6YCJSVHKI=
348+
gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
327349
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
328350
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=

internal/backend/basicstation/backend.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,7 @@ func (b *Backend) SendDownlinkFrame(df gw.DownlinkFrame) error {
235235

236236
var gatewayID lorawan.EUI64
237237
var downID uuid.UUID
238-
copy(gatewayID[:], df.GetTxInfo().GetGatewayId())
238+
copy(gatewayID[:], df.GetGatewayId())
239239
copy(downID[:], df.GetDownlinkId())
240240

241241
// store token to UUID mapping

0 commit comments

Comments
 (0)