From a2d608edfdc023b713662d798e19937cb9cee1e5 Mon Sep 17 00:00:00 2001 From: Imre Halasz Date: Tue, 10 Dec 2024 17:02:54 +0100 Subject: [PATCH 1/2] ns: Fix `RelayNotifyNewEndDeviceReq` fields order --- pkg/encoding/lorawan/mac.go | 18 +++++++++--------- pkg/encoding/lorawan/mac_test.go | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/pkg/encoding/lorawan/mac.go b/pkg/encoding/lorawan/mac.go index ece8e44004..6338a32470 100644 --- a/pkg/encoding/lorawan/mac.go +++ b/pkg/encoding/lorawan/mac.go @@ -1430,6 +1430,12 @@ var DefaultMACCommands = MACCommandSpec{ UplinkLength: 6, AppendUplink: func(phy band.Band, b []byte, cmd *ttnpb.MACCommand) ([]byte, error) { pld := cmd.GetRelayNotifyNewEndDeviceReq() + if n := len(pld.DevAddr); n != 4 { + return nil, errExpectedLengthEncodedEqual("DevAddr", 4)(n) + } + devAddr := make([]byte, 4) + copyReverse(devAddr, pld.DevAddr) + b = append(b, devAddr...) var powerLevel uint16 if pld.Snr < -20 || pld.Snr > 11 { return nil, errExpectedBetween("SNR", -20, 11)(pld.Snr) @@ -1440,12 +1446,6 @@ var DefaultMACCommands = MACCommandSpec{ } powerLevel |= uint16(-pld.Rssi-15) & 0x7f << 5 b = byteutil.AppendUint16(b, powerLevel, 2) - if n := len(pld.DevAddr); n != 4 { - return nil, errExpectedLengthEncodedEqual("DevAddr", 4)(n) - } - devAddr := make([]byte, 4) - copyReverse(devAddr, pld.DevAddr) - b = append(b, devAddr...) return b, nil }, UnmarshalUplink: newMACUnmarshaler( @@ -1457,11 +1457,11 @@ var DefaultMACCommands = MACCommandSpec{ cmd.Payload = &ttnpb.MACCommand_RelayNotifyNewEndDeviceReq_{ RelayNotifyNewEndDeviceReq: req, } - powerLevel := byteutil.ParseUint16(b[0:2]) + req.DevAddr = make([]byte, 4) + copyReverse(req.DevAddr, b[0:4]) + powerLevel := byteutil.ParseUint16(b[4:6]) req.Snr = int32(powerLevel&0x1f) - 20 req.Rssi = -int32(powerLevel>>5&0x7f) - 15 - req.DevAddr = make([]byte, 4) - copyReverse(req.DevAddr, b[2:6]) return nil }, ), diff --git a/pkg/encoding/lorawan/mac_test.go b/pkg/encoding/lorawan/mac_test.go index 189fd73fc9..c5e4682e28 100644 --- a/pkg/encoding/lorawan/mac_test.go +++ b/pkg/encoding/lorawan/mac_test.go @@ -597,7 +597,7 @@ func TestLoRaWANEncodingMAC(t *testing.T) { Snr: 6, Rssi: -64, }, - []byte{0x46, 0x3a, 0x06, 0x44, 0x43, 0x42, 0x41}, + []byte{0x46, 0x44, 0x43, 0x42, 0x41, 0x3a, 0x06}, true, }, } { From 13e23d8804daf8c5bf25388737ba1cb12f9bc45c Mon Sep 17 00:00:00 2001 From: Imre Halasz Date: Tue, 10 Dec 2024 18:03:41 +0100 Subject: [PATCH 2/2] dev: Update CHANGELOG --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e5d8be821d..98b0382db3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ For details about compatibility between different releases, see the **Commitment ### Fixed - Enforce default page limit on AS and NS List RPCs if a value is not provided in the request. +- Swapped field order in `RelayNotifyNewEndDeviceReq` MAC command. ### Security