Skip to content

Commit cbdcd17

Browse files
committed
ns: Use the MAC settings profile
1 parent 20a254f commit cbdcd17

13 files changed

+525
-162
lines changed

pkg/networkserver/downlink.go

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ func (ns *NetworkServer) nextDataDownlinkTaskAt(ctx context.Context, dev *ttnpb.
135135
log.FromContext(ctx).WithError(err).Warn("Failed to determine device band")
136136
return time.Time{}, nil
137137
}
138-
slot, ok := nextDataDownlinkSlot(ctx, dev, phy, ns.defaultMACSettings, earliestAt)
138+
slot, ok := nextDataDownlinkSlot(ctx, dev, phy, ns.defaultMACSettings, earliestAt, &ttnpb.MACSettingsProfile{})
139139
if !ok {
140140
return time.Time{}, nil
141141
}
@@ -598,7 +598,13 @@ func (ns *NetworkServer) generateDataDownlink(ctx context.Context, dev *ttnpb.En
598598
ctx = log.NewContext(ctx, logger)
599599

600600
if mType == ttnpb.MType_CONFIRMED_DOWN && class != ttnpb.Class_CLASS_A {
601-
confirmedAt, ok := nextConfirmedNetworkInitiatedDownlinkAt(ctx, dev, phy, ns.defaultMACSettings)
601+
confirmedAt, ok := nextConfirmedNetworkInitiatedDownlinkAt(
602+
ctx,
603+
dev,
604+
phy,
605+
ns.defaultMACSettings,
606+
&ttnpb.MACSettingsProfile{},
607+
)
602608
if !ok {
603609
return nil, genState, ErrCorruptedMACState.
604610
WithCause(ErrNetworkDownlinkSlot)
@@ -1931,7 +1937,7 @@ func (ns *NetworkServer) processDownlinkTask(ctx context.Context, consumerID str
19311937
return nil, nil, nil
19321938
}
19331939

1934-
if !mac.DeviceScheduleDownlinks(dev, ns.defaultMACSettings) {
1940+
if !mac.DeviceScheduleDownlinks(dev, ns.defaultMACSettings, &ttnpb.MACSettingsProfile{}) {
19351941
logger.Debug("Downlink slot skipped since scheduling is disabled")
19361942
return dev, nil, nil
19371943
}
@@ -2154,7 +2160,7 @@ func (ns *NetworkServer) processDownlinkTask(ctx context.Context, consumerID str
21542160
}
21552161
var earliestAt time.Time
21562162
for {
2157-
v, ok := nextDataDownlinkSlot(ctx, dev, phy, ns.defaultMACSettings, earliestAt)
2163+
v, ok := nextDataDownlinkSlot(ctx, dev, phy, ns.defaultMACSettings, earliestAt, &ttnpb.MACSettingsProfile{})
21582164
if !ok {
21592165
return dev, nil, nil
21602166
}

pkg/networkserver/grpc.go

Lines changed: 29 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -42,45 +42,45 @@ func (ns *NetworkServer) GetDefaultMACSettings(ctx context.Context, req *ttnpb.G
4242
if err != nil {
4343
return nil, err
4444
}
45-
classBTimeout := mac.DeviceClassBTimeout(nil, ns.defaultMACSettings)
46-
classCTimeout := mac.DeviceClassCTimeout(nil, ns.defaultMACSettings)
45+
classBTimeout := mac.DeviceClassBTimeout(nil, ns.defaultMACSettings, nil)
46+
classCTimeout := mac.DeviceClassCTimeout(nil, ns.defaultMACSettings, nil)
4747
adrMargin := mac.DeviceADRMargin(nil, ns.defaultMACSettings)
4848
statusTimePeriodicity := mac.DeviceStatusTimePeriodicity(nil, ns.defaultMACSettings)
4949
statusCountPeriodicity := mac.DeviceStatusCountPeriodicity(nil, ns.defaultMACSettings)
5050
settings := &ttnpb.MACSettings{
5151
ClassBTimeout: durationpb.New(classBTimeout),
52-
PingSlotPeriodicity: mac.DeviceDefaultPingSlotPeriodicity(nil, ns.defaultMACSettings),
53-
PingSlotDataRateIndex: mac.DeviceDefaultPingSlotDataRateIndexValue(nil, phy, ns.defaultMACSettings),
54-
PingSlotFrequency: &ttnpb.ZeroableFrequencyValue{Value: mac.DeviceDefaultPingSlotFrequency(nil, phy, ns.defaultMACSettings)},
55-
BeaconFrequency: &ttnpb.ZeroableFrequencyValue{Value: mac.DeviceDefaultBeaconFrequency(nil, phy, ns.defaultMACSettings)},
52+
PingSlotPeriodicity: mac.DeviceDefaultPingSlotPeriodicity(nil, ns.defaultMACSettings, nil),
53+
PingSlotDataRateIndex: mac.DeviceDefaultPingSlotDataRateIndexValue(nil, phy, ns.defaultMACSettings, nil),
54+
PingSlotFrequency: &ttnpb.ZeroableFrequencyValue{Value: mac.DeviceDefaultPingSlotFrequency(nil, phy, ns.defaultMACSettings, nil)}, // nolint: lll
55+
BeaconFrequency: &ttnpb.ZeroableFrequencyValue{Value: mac.DeviceDefaultBeaconFrequency(nil, phy, ns.defaultMACSettings, nil)}, // nolint: lll
5656
ClassCTimeout: durationpb.New(classCTimeout),
57-
Rx1Delay: &ttnpb.RxDelayValue{Value: mac.DeviceDefaultRX1Delay(nil, phy, ns.defaultMACSettings)},
58-
Rx1DataRateOffset: &ttnpb.DataRateOffsetValue{Value: mac.DeviceDefaultRX1DataRateOffset(nil, ns.defaultMACSettings)},
59-
Rx2DataRateIndex: &ttnpb.DataRateIndexValue{Value: mac.DeviceDefaultRX2DataRateIndex(nil, phy, ns.defaultMACSettings)},
60-
Rx2Frequency: &ttnpb.FrequencyValue{Value: mac.DeviceDefaultRX2Frequency(nil, phy, ns.defaultMACSettings)},
61-
MaxDutyCycle: &ttnpb.AggregatedDutyCycleValue{Value: mac.DeviceDefaultMaxDutyCycle(nil, ns.defaultMACSettings)},
62-
Supports_32BitFCnt: &ttnpb.BoolValue{Value: mac.DeviceSupports32BitFCnt(nil, ns.defaultMACSettings)},
57+
Rx1Delay: &ttnpb.RxDelayValue{Value: mac.DeviceDefaultRX1Delay(nil, phy, ns.defaultMACSettings, nil)}, // nolint: lll
58+
Rx1DataRateOffset: &ttnpb.DataRateOffsetValue{Value: mac.DeviceDefaultRX1DataRateOffset(nil, ns.defaultMACSettings, nil)}, // nolint: lll
59+
Rx2DataRateIndex: &ttnpb.DataRateIndexValue{Value: mac.DeviceDefaultRX2DataRateIndex(nil, phy, ns.defaultMACSettings, nil)}, // nolint: lll
60+
Rx2Frequency: &ttnpb.FrequencyValue{Value: mac.DeviceDefaultRX2Frequency(nil, phy, ns.defaultMACSettings, nil)}, // nolint: lll
61+
MaxDutyCycle: &ttnpb.AggregatedDutyCycleValue{Value: mac.DeviceDefaultMaxDutyCycle(nil, ns.defaultMACSettings, nil)}, // nolint: lll
62+
Supports_32BitFCnt: &ttnpb.BoolValue{Value: mac.DeviceSupports32BitFCnt(nil, ns.defaultMACSettings, nil)}, // nolint: lll
6363
UseAdr: &ttnpb.BoolValue{Value: mac.DeviceUseADR(nil, ns.defaultMACSettings, phy)},
6464
AdrMargin: &wrapperspb.FloatValue{Value: adrMargin},
65-
ResetsFCnt: &ttnpb.BoolValue{Value: mac.DeviceResetsFCnt(nil, ns.defaultMACSettings)},
65+
ResetsFCnt: &ttnpb.BoolValue{Value: mac.DeviceResetsFCnt(nil, ns.defaultMACSettings, nil)},
6666
StatusTimePeriodicity: durationpb.New(statusTimePeriodicity),
6767
StatusCountPeriodicity: &wrapperspb.UInt32Value{Value: statusCountPeriodicity},
68-
DesiredRx1Delay: &ttnpb.RxDelayValue{Value: mac.DeviceDesiredRX1Delay(nil, phy, ns.defaultMACSettings)},
69-
DesiredRx1DataRateOffset: &ttnpb.DataRateOffsetValue{Value: mac.DeviceDesiredRX1DataRateOffset(nil, ns.defaultMACSettings)},
70-
DesiredRx2DataRateIndex: &ttnpb.DataRateIndexValue{Value: mac.DeviceDesiredRX2DataRateIndex(nil, phy, fp, ns.defaultMACSettings)},
71-
DesiredRx2Frequency: &ttnpb.FrequencyValue{Value: mac.DeviceDesiredRX2Frequency(nil, phy, fp, ns.defaultMACSettings)},
72-
DesiredMaxDutyCycle: &ttnpb.AggregatedDutyCycleValue{Value: mac.DeviceDesiredMaxDutyCycle(nil, ns.defaultMACSettings)},
73-
DesiredAdrAckLimitExponent: mac.DeviceDesiredADRAckLimitExponent(nil, phy, ns.defaultMACSettings),
74-
DesiredAdrAckDelayExponent: mac.DeviceDesiredADRAckDelayExponent(nil, phy, ns.defaultMACSettings),
75-
DesiredPingSlotDataRateIndex: mac.DeviceDesiredPingSlotDataRateIndexValue(nil, phy, fp, ns.defaultMACSettings),
76-
DesiredPingSlotFrequency: &ttnpb.ZeroableFrequencyValue{Value: mac.DeviceDesiredPingSlotFrequency(nil, phy, fp, ns.defaultMACSettings)},
77-
DesiredBeaconFrequency: &ttnpb.ZeroableFrequencyValue{Value: mac.DeviceDesiredBeaconFrequency(nil, phy, ns.defaultMACSettings)},
78-
DesiredMaxEirp: &ttnpb.DeviceEIRPValue{Value: lorawan.Float32ToDeviceEIRP(mac.DeviceDesiredMaxEIRP(nil, phy, fp, ns.defaultMACSettings))},
79-
UplinkDwellTime: mac.DeviceUplinkDwellTime(nil, phy, ns.defaultMACSettings),
80-
DownlinkDwellTime: mac.DeviceDownlinkDwellTime(nil, phy, ns.defaultMACSettings),
81-
ScheduleDownlinks: &ttnpb.BoolValue{Value: mac.DeviceScheduleDownlinks(nil, ns.defaultMACSettings)},
82-
Relay: mac.DeviceDefaultRelaySettings(nil, ns.defaultMACSettings),
83-
DesiredRelay: mac.DeviceDesiredRelaySettings(nil, ns.defaultMACSettings),
68+
DesiredRx1Delay: &ttnpb.RxDelayValue{Value: mac.DeviceDesiredRX1Delay(nil, phy, ns.defaultMACSettings, nil)}, // nolint: lll
69+
DesiredRx1DataRateOffset: &ttnpb.DataRateOffsetValue{Value: mac.DeviceDesiredRX1DataRateOffset(nil, ns.defaultMACSettings, nil)}, // nolint: lll
70+
DesiredRx2DataRateIndex: &ttnpb.DataRateIndexValue{Value: mac.DeviceDesiredRX2DataRateIndex(nil, phy, fp, ns.defaultMACSettings, nil)}, // nolint: lll
71+
DesiredRx2Frequency: &ttnpb.FrequencyValue{Value: mac.DeviceDesiredRX2Frequency(nil, phy, fp, ns.defaultMACSettings, nil)}, // nolint: lll
72+
DesiredMaxDutyCycle: &ttnpb.AggregatedDutyCycleValue{Value: mac.DeviceDesiredMaxDutyCycle(nil, ns.defaultMACSettings, nil)}, // nolint: lll
73+
DesiredAdrAckLimitExponent: mac.DeviceDesiredADRAckLimitExponent(nil, phy, ns.defaultMACSettings, nil),
74+
DesiredAdrAckDelayExponent: mac.DeviceDesiredADRAckDelayExponent(nil, phy, ns.defaultMACSettings, nil),
75+
DesiredPingSlotDataRateIndex: mac.DeviceDesiredPingSlotDataRateIndexValue(nil, phy, fp, ns.defaultMACSettings, nil),
76+
DesiredPingSlotFrequency: &ttnpb.ZeroableFrequencyValue{Value: mac.DeviceDesiredPingSlotFrequency(nil, phy, fp, ns.defaultMACSettings, nil)}, // nolint: lll
77+
DesiredBeaconFrequency: &ttnpb.ZeroableFrequencyValue{Value: mac.DeviceDesiredBeaconFrequency(nil, phy, ns.defaultMACSettings, nil)}, // nolint: lll
78+
DesiredMaxEirp: &ttnpb.DeviceEIRPValue{Value: lorawan.Float32ToDeviceEIRP(mac.DeviceDesiredMaxEIRP(nil, phy, fp, ns.defaultMACSettings, nil))}, // nolint: lll
79+
UplinkDwellTime: mac.DeviceUplinkDwellTime(nil, phy, ns.defaultMACSettings, nil),
80+
DownlinkDwellTime: mac.DeviceDownlinkDwellTime(nil, phy, ns.defaultMACSettings, nil),
81+
ScheduleDownlinks: &ttnpb.BoolValue{Value: mac.DeviceScheduleDownlinks(nil, ns.defaultMACSettings, nil)},
82+
Relay: mac.DeviceDefaultRelaySettings(nil, ns.defaultMACSettings, nil),
83+
DesiredRelay: mac.DeviceDesiredRelaySettings(nil, ns.defaultMACSettings, nil),
8484
}
8585
return settings, nil
8686
}

pkg/networkserver/grpc_deviceregistry.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -410,6 +410,7 @@ func (ns *NetworkServer) Set(ctx context.Context, req *ttnpb.SetEndDeviceRequest
410410
return nil, err
411411
}
412412

413+
profile := &ttnpb.MACSettingsProfile{}
413414
if st.HasSetField(
414415
"mac_settings_profile_ids",
415416
"mac_settings_profile_ids.application_ids",
@@ -419,7 +420,7 @@ func (ns *NetworkServer) Set(ctx context.Context, req *ttnpb.SetEndDeviceRequest
419420
if st.HasSetField(macSettingsFields...) {
420421
return nil, newInvalidFieldValueError("mac_settings")
421422
}
422-
profile, err := ns.macSettingsProfiles.Get(ctx, st.Device.MacSettingsProfileIds, []string{"mac_settings"})
423+
profile, err = ns.macSettingsProfiles.Get(ctx, st.Device.MacSettingsProfileIds, []string{"mac_settings"})
423424
if err != nil {
424425
return nil, err
425426
}
@@ -1355,7 +1356,7 @@ func (ns *NetworkServer) Set(ctx context.Context, req *ttnpb.SetEndDeviceRequest
13551356
if err != nil {
13561357
return err
13571358
}
1358-
macState, err := mac.NewState(st.Device, fps, ns.defaultMACSettings)
1359+
macState, err := mac.NewState(st.Device, fps, ns.defaultMACSettings, profile)
13591360
if err != nil {
13601361
return err
13611362
}
@@ -1510,7 +1511,7 @@ func (ns *NetworkServer) ResetFactoryDefaults(ctx context.Context, req *ttnpb.Re
15101511
if err != nil {
15111512
return nil, nil, err
15121513
}
1513-
macState, err := mac.NewState(stored, fps, ns.defaultMACSettings)
1514+
macState, err := mac.NewState(stored, fps, ns.defaultMACSettings, &ttnpb.MACSettingsProfile{})
15141515
if err != nil {
15151516
return nil, nil, err
15161517
}

pkg/networkserver/grpc_deviceregistry_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1167,7 +1167,7 @@ func TestDeviceRegistryResetFactoryDefaults(t *testing.T) {
11671167
}
11681168
var newErr error
11691169
defaultMACSettings := test.Must(DefaultConfig.DefaultMACSettings.Parse())
1170-
macState, newErr = mac.NewState(created, fps, defaultMACSettings)
1170+
macState, newErr = mac.NewState(created, fps, defaultMACSettings, &ttnpb.MACSettingsProfile{})
11711171
if newErr != nil {
11721172
a.So(err, should.NotBeNil)
11731173
a.So(err, should.HaveSameErrorDefinitionAs, newErr)

pkg/networkserver/grpc_gsns.go

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -307,13 +307,22 @@ func (ns *NetworkServer) matchAndHandleDataUplink(ctx context.Context, dev *ttnp
307307
}
308308
}
309309

310+
profile := &ttnpb.MACSettingsProfile{}
311+
if dev.MacSettingsProfileIds != nil {
312+
profile, err = ns.macSettingsProfiles.Get(ctx, dev.GetMacSettingsProfileIds(), []string{"mac_settings"})
313+
if err != nil {
314+
log.FromContext(ctx).WithError(err).Warn("Failed to get MAC settings profile")
315+
return nil, false, nil
316+
}
317+
}
318+
310319
// Current session match
311320
if matchType != pendingMatch &&
312321
dev.Session != nil &&
313322
dev.MacState != nil &&
314323
devAddr.Equal(types.MustDevAddr(dev.Session.DevAddr).OrZero()) &&
315324
macspec.UseLegacyMIC(cmacFMatchResult.LoRaWANVersion) == macspec.UseLegacyMIC(dev.MacState.LorawanVersion) &&
316-
(cmacFMatchResult.FullFCnt == FullFCnt(uint16(pld.FHdr.FCnt), dev.Session.LastFCntUp, mac.DeviceSupports32BitFCnt(dev, ns.defaultMACSettings)) ||
325+
(cmacFMatchResult.FullFCnt == FullFCnt(uint16(pld.FHdr.FCnt), dev.Session.LastFCntUp, mac.DeviceSupports32BitFCnt(dev, ns.defaultMACSettings, profile)) || // nolint: gosec, lll
317326
cmacFMatchResult.FullFCnt == pld.FHdr.FCnt) {
318327
fNwkSIntKey, err := cryptoutil.UnwrapAES128Key(ctx, dev.Session.Keys.FNwkSIntKey, ns.KeyService())
319328
if err != nil {
@@ -328,12 +337,14 @@ func (ns *NetworkServer) matchAndHandleDataUplink(ctx context.Context, dev *ttnp
328337
))
329338
switch {
330339
case cmacFMatchResult.FullFCnt < dev.Session.LastFCntUp:
331-
if pld.FHdr.FCtrl.Ack || dev.Session.LastFCntUp != cmacFMatchResult.LastFCnt || !mac.DeviceResetsFCnt(dev, ns.defaultMACSettings) {
340+
if pld.FHdr.FCtrl.Ack ||
341+
dev.Session.LastFCntUp != cmacFMatchResult.LastFCnt ||
342+
!mac.DeviceResetsFCnt(dev, ns.defaultMACSettings, profile) {
332343
return nil, false, nil
333344
}
334345
ctx = log.NewContextWithField(ctx, "f_cnt_reset", true)
335346

336-
macState, err := mac.NewState(dev, fps, ns.defaultMACSettings)
347+
macState, err := mac.NewState(dev, fps, ns.defaultMACSettings, profile)
337348
if err != nil {
338349
log.FromContext(ctx).WithError(err).Warn("Failed to generate new MAC state")
339350
return nil, false, nil
@@ -543,7 +554,7 @@ macLoop:
543554
var err error
544555
switch cmd.Cid {
545556
case ttnpb.MACCommandIdentifier_CID_RESET:
546-
evs, err = mac.HandleResetInd(ctx, dev, cmd.GetResetInd(), fps, ns.defaultMACSettings)
557+
evs, err = mac.HandleResetInd(ctx, dev, cmd.GetResetInd(), fps, ns.defaultMACSettings, profile)
547558
case ttnpb.MACCommandIdentifier_CID_LINK_CHECK:
548559
if !deduplicated {
549560
deferredMACHandlers = append(deferredMACHandlers, makeDeferredMACHandler(dev, mac.HandleLinkCheckReq))
@@ -969,15 +980,15 @@ func (ns *NetworkServer) handleDataUplink(ctx context.Context, up *ttnpb.UplinkM
969980
MacSettings: &ttnpb.MACSettings{
970981
Supports_32BitFCnt: match.Supports32BitFCnt,
971982
},
972-
}, ns.defaultMACSettings))
983+
}, ns.defaultMACSettings, nil))
973984

974985
var cmacF [4]byte
975986
cmacF, ok = matchCmacF(ctx, fNwkSIntKey, match.LoRaWANVersion, fCnt, up)
976987
if !ok && fCnt != pld.FHdr.FCnt && !pld.FHdr.FCtrl.Ack && !match.IsPending && mac.DeviceResetsFCnt(&ttnpb.EndDevice{
977988
MacSettings: &ttnpb.MACSettings{
978989
ResetsFCnt: match.ResetsFCnt,
979990
},
980-
}, ns.defaultMACSettings) {
991+
}, ns.defaultMACSettings, nil) {
981992
// FCnt reset
982993
fCnt = pld.FHdr.FCnt
983994
cmacF, ok = matchCmacF(ctx, fNwkSIntKey, match.LoRaWANVersion, fCnt, up)
@@ -1316,7 +1327,15 @@ func (ns *NetworkServer) handleJoinRequest(ctx context.Context, up *ttnpb.Uplink
13161327
"data_rate", up.Settings.DataRate,
13171328
)
13181329

1319-
macState, err := mac.NewState(matched, fps, ns.defaultMACSettings)
1330+
profile := &ttnpb.MACSettingsProfile{}
1331+
if matched.MacSettingsProfileIds != nil {
1332+
profile, err = ns.macSettingsProfiles.Get(ctx, matched.MacSettingsProfileIds, []string{"mac_settings"})
1333+
if err != nil {
1334+
log.FromContext(ctx).WithError(err).Warn("Failed to get MAC settings profile")
1335+
return err
1336+
}
1337+
}
1338+
macState, err := mac.NewState(matched, fps, ns.defaultMACSettings, profile)
13201339
if err != nil {
13211340
log.FromContext(ctx).WithError(err).Warn("Failed to reset device's MAC state")
13221341
return err

pkg/networkserver/mac/relay.go

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -129,8 +129,14 @@ func relayCtrlUplinkListReqFields(req *ttnpb.MACCommand_RelayCtrlUplinkListReq)
129129
}
130130

131131
// DeviceDefaultRelaySettings returns the default relay parameters for the given device.
132-
func DeviceDefaultRelaySettings(dev *ttnpb.EndDevice, defaults *ttnpb.MACSettings) *ttnpb.RelaySettings {
132+
func DeviceDefaultRelaySettings(
133+
dev *ttnpb.EndDevice,
134+
defaults *ttnpb.MACSettings,
135+
profile *ttnpb.MACSettingsProfile,
136+
) *ttnpb.RelaySettings {
133137
switch {
138+
case profile.GetMacSettings().GetRelay() != nil:
139+
return profile.MacSettings.Relay
134140
case dev.GetMacSettings().GetRelay() != nil:
135141
return dev.MacSettings.Relay
136142
case defaults.Relay != nil:
@@ -141,14 +147,20 @@ func DeviceDefaultRelaySettings(dev *ttnpb.EndDevice, defaults *ttnpb.MACSetting
141147
}
142148

143149
// DeviceDesiredRelaySettings returns the desired relay parameters for the given device.
144-
func DeviceDesiredRelaySettings(dev *ttnpb.EndDevice, defaults *ttnpb.MACSettings) *ttnpb.RelaySettings {
150+
func DeviceDesiredRelaySettings(
151+
dev *ttnpb.EndDevice,
152+
defaults *ttnpb.MACSettings,
153+
profile *ttnpb.MACSettingsProfile,
154+
) *ttnpb.RelaySettings {
145155
switch {
156+
case profile.GetMacSettings().GetDesiredRelay() != nil:
157+
return profile.MacSettings.DesiredRelay
146158
case dev.GetMacSettings().GetDesiredRelay() != nil:
147159
return dev.MacSettings.DesiredRelay
148160
case defaults.DesiredRelay != nil:
149161
return defaults.DesiredRelay
150162
default:
151-
return DeviceDefaultRelaySettings(dev, defaults)
163+
return DeviceDefaultRelaySettings(dev, defaults, profile)
152164
}
153165
}
154166

pkg/networkserver/mac/reset.go

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,16 @@ var (
3333
)()
3434
)
3535

36-
func HandleResetInd(ctx context.Context, dev *ttnpb.EndDevice, pld *ttnpb.MACCommand_ResetInd, fps *frequencyplans.Store, defaults *ttnpb.MACSettings) (events.Builders, error) {
36+
// HandleResetInd handles the uplink of a reset indication.
37+
// This method is called by the Network Server when an uplink with a reset indication is received.
38+
func HandleResetInd(
39+
_ context.Context,
40+
dev *ttnpb.EndDevice,
41+
pld *ttnpb.MACCommand_ResetInd,
42+
fps *frequencyplans.Store,
43+
defaults *ttnpb.MACSettings,
44+
profile *ttnpb.MACSettingsProfile,
45+
) (events.Builders, error) {
3746
if pld == nil {
3847
return nil, ErrNoPayload.New()
3948
}
@@ -45,7 +54,7 @@ func HandleResetInd(ctx context.Context, dev *ttnpb.EndDevice, pld *ttnpb.MACCom
4554
return evs, nil
4655
}
4756

48-
macState, err := NewState(dev, fps, defaults)
57+
macState, err := NewState(dev, fps, defaults, profile)
4958
if err != nil {
5059
return evs, err
5160
}

pkg/networkserver/mac/reset_test.go

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,12 @@ func TestHandleResetInd(t *testing.T) {
7373
SupportsJoin: false,
7474
FrequencyPlanId: test.EUFrequencyPlanID,
7575
}
76-
macState, err := NewState(dev, frequencyplans.NewStore(test.FrequencyPlansFetcher), &ttnpb.MACSettings{})
76+
macState, err := NewState(
77+
dev,
78+
frequencyplans.NewStore(test.FrequencyPlansFetcher),
79+
&ttnpb.MACSettings{},
80+
&ttnpb.MACSettingsProfile{},
81+
)
7782
if err != nil {
7883
t.Fatalf("Failed to reset MACState: %v", errors.Stack(err))
7984
}
@@ -122,7 +127,12 @@ func TestHandleResetInd(t *testing.T) {
122127
SupportsJoin: false,
123128
FrequencyPlanId: test.EUFrequencyPlanID,
124129
}
125-
macState, err := NewState(dev, frequencyplans.NewStore(test.FrequencyPlansFetcher), &ttnpb.MACSettings{})
130+
macState, err := NewState(
131+
dev,
132+
frequencyplans.NewStore(test.FrequencyPlansFetcher),
133+
&ttnpb.MACSettings{},
134+
&ttnpb.MACSettingsProfile{},
135+
)
126136
if err != nil {
127137
t.Fatalf("Failed to reset MACState: %v", errors.Stack(err))
128138
}
@@ -155,7 +165,14 @@ func TestHandleResetInd(t *testing.T) {
155165
Func: func(ctx context.Context, t *testing.T, a *assertions.Assertion) {
156166
dev := ttnpb.Clone(tc.Device)
157167

158-
evs, err := HandleResetInd(ctx, dev, tc.Payload, frequencyplans.NewStore(test.FrequencyPlansFetcher), &ttnpb.MACSettings{})
168+
evs, err := HandleResetInd(
169+
ctx,
170+
dev,
171+
tc.Payload,
172+
frequencyplans.NewStore(test.FrequencyPlansFetcher),
173+
&ttnpb.MACSettings{},
174+
&ttnpb.MACSettingsProfile{},
175+
)
159176
if tc.Error != nil && !a.So(err, should.EqualErrorOrDefinition, tc.Error) ||
160177
tc.Error == nil && !a.So(err, should.BeNil) {
161178
t.FailNow()

0 commit comments

Comments
 (0)