Skip to content

Commit

Permalink
ns: Use the MAC settings profile
Browse files Browse the repository at this point in the history
  • Loading branch information
halimi committed Feb 21, 2025
1 parent a3f3793 commit 01cdfec
Show file tree
Hide file tree
Showing 13 changed files with 525 additions and 162 deletions.
14 changes: 10 additions & 4 deletions pkg/networkserver/downlink.go
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ func (ns *NetworkServer) nextDataDownlinkTaskAt(ctx context.Context, dev *ttnpb.
log.FromContext(ctx).WithError(err).Warn("Failed to determine device band")
return time.Time{}, nil
}
slot, ok := nextDataDownlinkSlot(ctx, dev, phy, ns.defaultMACSettings, earliestAt)
slot, ok := nextDataDownlinkSlot(ctx, dev, phy, ns.defaultMACSettings, earliestAt, &ttnpb.MACSettingsProfile{})
if !ok {
return time.Time{}, nil
}
Expand Down Expand Up @@ -598,7 +598,13 @@ func (ns *NetworkServer) generateDataDownlink(ctx context.Context, dev *ttnpb.En
ctx = log.NewContext(ctx, logger)

if mType == ttnpb.MType_CONFIRMED_DOWN && class != ttnpb.Class_CLASS_A {
confirmedAt, ok := nextConfirmedNetworkInitiatedDownlinkAt(ctx, dev, phy, ns.defaultMACSettings)
confirmedAt, ok := nextConfirmedNetworkInitiatedDownlinkAt(
ctx,
dev,
phy,
ns.defaultMACSettings,
&ttnpb.MACSettingsProfile{},
)
if !ok {
return nil, genState, ErrCorruptedMACState.
WithCause(ErrNetworkDownlinkSlot)
Expand Down Expand Up @@ -1931,7 +1937,7 @@ func (ns *NetworkServer) processDownlinkTask(ctx context.Context, consumerID str
return nil, nil, nil
}

if !mac.DeviceScheduleDownlinks(dev, ns.defaultMACSettings) {
if !mac.DeviceScheduleDownlinks(dev, ns.defaultMACSettings, &ttnpb.MACSettingsProfile{}) {
logger.Debug("Downlink slot skipped since scheduling is disabled")
return dev, nil, nil
}
Expand Down Expand Up @@ -2154,7 +2160,7 @@ func (ns *NetworkServer) processDownlinkTask(ctx context.Context, consumerID str
}
var earliestAt time.Time
for {
v, ok := nextDataDownlinkSlot(ctx, dev, phy, ns.defaultMACSettings, earliestAt)
v, ok := nextDataDownlinkSlot(ctx, dev, phy, ns.defaultMACSettings, earliestAt, &ttnpb.MACSettingsProfile{})
if !ok {
return dev, nil, nil
}
Expand Down
58 changes: 29 additions & 29 deletions pkg/networkserver/grpc.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,45 +42,45 @@ func (ns *NetworkServer) GetDefaultMACSettings(ctx context.Context, req *ttnpb.G
if err != nil {
return nil, err
}
classBTimeout := mac.DeviceClassBTimeout(nil, ns.defaultMACSettings)
classCTimeout := mac.DeviceClassCTimeout(nil, ns.defaultMACSettings)
classBTimeout := mac.DeviceClassBTimeout(nil, ns.defaultMACSettings, nil)
classCTimeout := mac.DeviceClassCTimeout(nil, ns.defaultMACSettings, nil)
adrMargin := mac.DeviceADRMargin(nil, ns.defaultMACSettings)
statusTimePeriodicity := mac.DeviceStatusTimePeriodicity(nil, ns.defaultMACSettings)
statusCountPeriodicity := mac.DeviceStatusCountPeriodicity(nil, ns.defaultMACSettings)
settings := &ttnpb.MACSettings{
ClassBTimeout: durationpb.New(classBTimeout),
PingSlotPeriodicity: mac.DeviceDefaultPingSlotPeriodicity(nil, ns.defaultMACSettings),
PingSlotDataRateIndex: mac.DeviceDefaultPingSlotDataRateIndexValue(nil, phy, ns.defaultMACSettings),
PingSlotFrequency: &ttnpb.ZeroableFrequencyValue{Value: mac.DeviceDefaultPingSlotFrequency(nil, phy, ns.defaultMACSettings)},
BeaconFrequency: &ttnpb.ZeroableFrequencyValue{Value: mac.DeviceDefaultBeaconFrequency(nil, phy, ns.defaultMACSettings)},
PingSlotPeriodicity: mac.DeviceDefaultPingSlotPeriodicity(nil, ns.defaultMACSettings, nil),
PingSlotDataRateIndex: mac.DeviceDefaultPingSlotDataRateIndexValue(nil, phy, ns.defaultMACSettings, nil),
PingSlotFrequency: &ttnpb.ZeroableFrequencyValue{Value: mac.DeviceDefaultPingSlotFrequency(nil, phy, ns.defaultMACSettings, nil)}, // nolint: lll
BeaconFrequency: &ttnpb.ZeroableFrequencyValue{Value: mac.DeviceDefaultBeaconFrequency(nil, phy, ns.defaultMACSettings, nil)}, // nolint: lll
ClassCTimeout: durationpb.New(classCTimeout),
Rx1Delay: &ttnpb.RxDelayValue{Value: mac.DeviceDefaultRX1Delay(nil, phy, ns.defaultMACSettings)},
Rx1DataRateOffset: &ttnpb.DataRateOffsetValue{Value: mac.DeviceDefaultRX1DataRateOffset(nil, ns.defaultMACSettings)},
Rx2DataRateIndex: &ttnpb.DataRateIndexValue{Value: mac.DeviceDefaultRX2DataRateIndex(nil, phy, ns.defaultMACSettings)},
Rx2Frequency: &ttnpb.FrequencyValue{Value: mac.DeviceDefaultRX2Frequency(nil, phy, ns.defaultMACSettings)},
MaxDutyCycle: &ttnpb.AggregatedDutyCycleValue{Value: mac.DeviceDefaultMaxDutyCycle(nil, ns.defaultMACSettings)},
Supports_32BitFCnt: &ttnpb.BoolValue{Value: mac.DeviceSupports32BitFCnt(nil, ns.defaultMACSettings)},
Rx1Delay: &ttnpb.RxDelayValue{Value: mac.DeviceDefaultRX1Delay(nil, phy, ns.defaultMACSettings, nil)}, // nolint: lll
Rx1DataRateOffset: &ttnpb.DataRateOffsetValue{Value: mac.DeviceDefaultRX1DataRateOffset(nil, ns.defaultMACSettings, nil)}, // nolint: lll
Rx2DataRateIndex: &ttnpb.DataRateIndexValue{Value: mac.DeviceDefaultRX2DataRateIndex(nil, phy, ns.defaultMACSettings, nil)}, // nolint: lll
Rx2Frequency: &ttnpb.FrequencyValue{Value: mac.DeviceDefaultRX2Frequency(nil, phy, ns.defaultMACSettings, nil)}, // nolint: lll
MaxDutyCycle: &ttnpb.AggregatedDutyCycleValue{Value: mac.DeviceDefaultMaxDutyCycle(nil, ns.defaultMACSettings, nil)}, // nolint: lll
Supports_32BitFCnt: &ttnpb.BoolValue{Value: mac.DeviceSupports32BitFCnt(nil, ns.defaultMACSettings, nil)}, // nolint: lll
UseAdr: &ttnpb.BoolValue{Value: mac.DeviceUseADR(nil, ns.defaultMACSettings, phy)},
AdrMargin: &wrapperspb.FloatValue{Value: adrMargin},
ResetsFCnt: &ttnpb.BoolValue{Value: mac.DeviceResetsFCnt(nil, ns.defaultMACSettings)},
ResetsFCnt: &ttnpb.BoolValue{Value: mac.DeviceResetsFCnt(nil, ns.defaultMACSettings, nil)},
StatusTimePeriodicity: durationpb.New(statusTimePeriodicity),
StatusCountPeriodicity: &wrapperspb.UInt32Value{Value: statusCountPeriodicity},
DesiredRx1Delay: &ttnpb.RxDelayValue{Value: mac.DeviceDesiredRX1Delay(nil, phy, ns.defaultMACSettings)},
DesiredRx1DataRateOffset: &ttnpb.DataRateOffsetValue{Value: mac.DeviceDesiredRX1DataRateOffset(nil, ns.defaultMACSettings)},
DesiredRx2DataRateIndex: &ttnpb.DataRateIndexValue{Value: mac.DeviceDesiredRX2DataRateIndex(nil, phy, fp, ns.defaultMACSettings)},
DesiredRx2Frequency: &ttnpb.FrequencyValue{Value: mac.DeviceDesiredRX2Frequency(nil, phy, fp, ns.defaultMACSettings)},
DesiredMaxDutyCycle: &ttnpb.AggregatedDutyCycleValue{Value: mac.DeviceDesiredMaxDutyCycle(nil, ns.defaultMACSettings)},
DesiredAdrAckLimitExponent: mac.DeviceDesiredADRAckLimitExponent(nil, phy, ns.defaultMACSettings),
DesiredAdrAckDelayExponent: mac.DeviceDesiredADRAckDelayExponent(nil, phy, ns.defaultMACSettings),
DesiredPingSlotDataRateIndex: mac.DeviceDesiredPingSlotDataRateIndexValue(nil, phy, fp, ns.defaultMACSettings),
DesiredPingSlotFrequency: &ttnpb.ZeroableFrequencyValue{Value: mac.DeviceDesiredPingSlotFrequency(nil, phy, fp, ns.defaultMACSettings)},
DesiredBeaconFrequency: &ttnpb.ZeroableFrequencyValue{Value: mac.DeviceDesiredBeaconFrequency(nil, phy, ns.defaultMACSettings)},
DesiredMaxEirp: &ttnpb.DeviceEIRPValue{Value: lorawan.Float32ToDeviceEIRP(mac.DeviceDesiredMaxEIRP(nil, phy, fp, ns.defaultMACSettings))},
UplinkDwellTime: mac.DeviceUplinkDwellTime(nil, phy, ns.defaultMACSettings),
DownlinkDwellTime: mac.DeviceDownlinkDwellTime(nil, phy, ns.defaultMACSettings),
ScheduleDownlinks: &ttnpb.BoolValue{Value: mac.DeviceScheduleDownlinks(nil, ns.defaultMACSettings)},
Relay: mac.DeviceDefaultRelaySettings(nil, ns.defaultMACSettings),
DesiredRelay: mac.DeviceDesiredRelaySettings(nil, ns.defaultMACSettings),
DesiredRx1Delay: &ttnpb.RxDelayValue{Value: mac.DeviceDesiredRX1Delay(nil, phy, ns.defaultMACSettings, nil)}, // nolint: lll
DesiredRx1DataRateOffset: &ttnpb.DataRateOffsetValue{Value: mac.DeviceDesiredRX1DataRateOffset(nil, ns.defaultMACSettings, nil)}, // nolint: lll
DesiredRx2DataRateIndex: &ttnpb.DataRateIndexValue{Value: mac.DeviceDesiredRX2DataRateIndex(nil, phy, fp, ns.defaultMACSettings, nil)}, // nolint: lll
DesiredRx2Frequency: &ttnpb.FrequencyValue{Value: mac.DeviceDesiredRX2Frequency(nil, phy, fp, ns.defaultMACSettings, nil)}, // nolint: lll
DesiredMaxDutyCycle: &ttnpb.AggregatedDutyCycleValue{Value: mac.DeviceDesiredMaxDutyCycle(nil, ns.defaultMACSettings, nil)}, // nolint: lll
DesiredAdrAckLimitExponent: mac.DeviceDesiredADRAckLimitExponent(nil, phy, ns.defaultMACSettings, nil),
DesiredAdrAckDelayExponent: mac.DeviceDesiredADRAckDelayExponent(nil, phy, ns.defaultMACSettings, nil),
DesiredPingSlotDataRateIndex: mac.DeviceDesiredPingSlotDataRateIndexValue(nil, phy, fp, ns.defaultMACSettings, nil),
DesiredPingSlotFrequency: &ttnpb.ZeroableFrequencyValue{Value: mac.DeviceDesiredPingSlotFrequency(nil, phy, fp, ns.defaultMACSettings, nil)}, // nolint: lll
DesiredBeaconFrequency: &ttnpb.ZeroableFrequencyValue{Value: mac.DeviceDesiredBeaconFrequency(nil, phy, ns.defaultMACSettings, nil)}, // nolint: lll
DesiredMaxEirp: &ttnpb.DeviceEIRPValue{Value: lorawan.Float32ToDeviceEIRP(mac.DeviceDesiredMaxEIRP(nil, phy, fp, ns.defaultMACSettings, nil))}, // nolint: lll
UplinkDwellTime: mac.DeviceUplinkDwellTime(nil, phy, ns.defaultMACSettings, nil),
DownlinkDwellTime: mac.DeviceDownlinkDwellTime(nil, phy, ns.defaultMACSettings, nil),
ScheduleDownlinks: &ttnpb.BoolValue{Value: mac.DeviceScheduleDownlinks(nil, ns.defaultMACSettings, nil)},
Relay: mac.DeviceDefaultRelaySettings(nil, ns.defaultMACSettings, nil),
DesiredRelay: mac.DeviceDesiredRelaySettings(nil, ns.defaultMACSettings, nil),
}
return settings, nil
}
Expand Down
7 changes: 4 additions & 3 deletions pkg/networkserver/grpc_deviceregistry.go
Original file line number Diff line number Diff line change
Expand Up @@ -410,6 +410,7 @@ func (ns *NetworkServer) Set(ctx context.Context, req *ttnpb.SetEndDeviceRequest
return nil, err
}

profile := &ttnpb.MACSettingsProfile{}
if st.HasSetField(
"mac_settings_profile_ids",
"mac_settings_profile_ids.application_ids",
Expand All @@ -419,7 +420,7 @@ func (ns *NetworkServer) Set(ctx context.Context, req *ttnpb.SetEndDeviceRequest
if st.HasSetField(macSettingsFields...) {
return nil, newInvalidFieldValueError("mac_settings")
}
profile, err := ns.macSettingsProfiles.Get(ctx, st.Device.MacSettingsProfileIds, []string{"mac_settings"})
profile, err = ns.macSettingsProfiles.Get(ctx, st.Device.MacSettingsProfileIds, []string{"mac_settings"})
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -1355,7 +1356,7 @@ func (ns *NetworkServer) Set(ctx context.Context, req *ttnpb.SetEndDeviceRequest
if err != nil {
return err
}
macState, err := mac.NewState(st.Device, fps, ns.defaultMACSettings)
macState, err := mac.NewState(st.Device, fps, ns.defaultMACSettings, profile)
if err != nil {
return err
}
Expand Down Expand Up @@ -1510,7 +1511,7 @@ func (ns *NetworkServer) ResetFactoryDefaults(ctx context.Context, req *ttnpb.Re
if err != nil {
return nil, nil, err
}
macState, err := mac.NewState(stored, fps, ns.defaultMACSettings)
macState, err := mac.NewState(stored, fps, ns.defaultMACSettings, &ttnpb.MACSettingsProfile{})
if err != nil {
return nil, nil, err
}
Expand Down
2 changes: 1 addition & 1 deletion pkg/networkserver/grpc_deviceregistry_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1167,7 +1167,7 @@ func TestDeviceRegistryResetFactoryDefaults(t *testing.T) {
}
var newErr error
defaultMACSettings := test.Must(DefaultConfig.DefaultMACSettings.Parse())
macState, newErr = mac.NewState(created, fps, defaultMACSettings)
macState, newErr = mac.NewState(created, fps, defaultMACSettings, &ttnpb.MACSettingsProfile{})
if newErr != nil {
a.So(err, should.NotBeNil)
a.So(err, should.HaveSameErrorDefinitionAs, newErr)
Expand Down
33 changes: 26 additions & 7 deletions pkg/networkserver/grpc_gsns.go
Original file line number Diff line number Diff line change
Expand Up @@ -307,13 +307,22 @@ func (ns *NetworkServer) matchAndHandleDataUplink(ctx context.Context, dev *ttnp
}
}

profile := &ttnpb.MACSettingsProfile{}
if dev.MacSettingsProfileIds != nil {
profile, err = ns.macSettingsProfiles.Get(ctx, dev.GetMacSettingsProfileIds(), []string{"mac_settings"})
if err != nil {
log.FromContext(ctx).WithError(err).Warn("Failed to get MAC settings profile")
return nil, false, nil
}
}

// Current session match
if matchType != pendingMatch &&
dev.Session != nil &&
dev.MacState != nil &&
devAddr.Equal(types.MustDevAddr(dev.Session.DevAddr).OrZero()) &&
macspec.UseLegacyMIC(cmacFMatchResult.LoRaWANVersion) == macspec.UseLegacyMIC(dev.MacState.LorawanVersion) &&
(cmacFMatchResult.FullFCnt == FullFCnt(uint16(pld.FHdr.FCnt), dev.Session.LastFCntUp, mac.DeviceSupports32BitFCnt(dev, ns.defaultMACSettings)) ||
(cmacFMatchResult.FullFCnt == FullFCnt(uint16(pld.FHdr.FCnt), dev.Session.LastFCntUp, mac.DeviceSupports32BitFCnt(dev, ns.defaultMACSettings, profile)) || // nolint: gosec, lll
cmacFMatchResult.FullFCnt == pld.FHdr.FCnt) {
fNwkSIntKey, err := cryptoutil.UnwrapAES128Key(ctx, dev.Session.Keys.FNwkSIntKey, ns.KeyService())
if err != nil {
Expand All @@ -328,12 +337,14 @@ func (ns *NetworkServer) matchAndHandleDataUplink(ctx context.Context, dev *ttnp
))
switch {
case cmacFMatchResult.FullFCnt < dev.Session.LastFCntUp:
if pld.FHdr.FCtrl.Ack || dev.Session.LastFCntUp != cmacFMatchResult.LastFCnt || !mac.DeviceResetsFCnt(dev, ns.defaultMACSettings) {
if pld.FHdr.FCtrl.Ack ||
dev.Session.LastFCntUp != cmacFMatchResult.LastFCnt ||
!mac.DeviceResetsFCnt(dev, ns.defaultMACSettings, profile) {
return nil, false, nil
}
ctx = log.NewContextWithField(ctx, "f_cnt_reset", true)

macState, err := mac.NewState(dev, fps, ns.defaultMACSettings)
macState, err := mac.NewState(dev, fps, ns.defaultMACSettings, profile)
if err != nil {
log.FromContext(ctx).WithError(err).Warn("Failed to generate new MAC state")
return nil, false, nil
Expand Down Expand Up @@ -543,7 +554,7 @@ macLoop:
var err error
switch cmd.Cid {
case ttnpb.MACCommandIdentifier_CID_RESET:
evs, err = mac.HandleResetInd(ctx, dev, cmd.GetResetInd(), fps, ns.defaultMACSettings)
evs, err = mac.HandleResetInd(ctx, dev, cmd.GetResetInd(), fps, ns.defaultMACSettings, profile)
case ttnpb.MACCommandIdentifier_CID_LINK_CHECK:
if !deduplicated {
deferredMACHandlers = append(deferredMACHandlers, makeDeferredMACHandler(dev, mac.HandleLinkCheckReq))
Expand Down Expand Up @@ -969,15 +980,15 @@ func (ns *NetworkServer) handleDataUplink(ctx context.Context, up *ttnpb.UplinkM
MacSettings: &ttnpb.MACSettings{
Supports_32BitFCnt: match.Supports32BitFCnt,
},
}, ns.defaultMACSettings))
}, ns.defaultMACSettings, nil))

var cmacF [4]byte
cmacF, ok = matchCmacF(ctx, fNwkSIntKey, match.LoRaWANVersion, fCnt, up)
if !ok && fCnt != pld.FHdr.FCnt && !pld.FHdr.FCtrl.Ack && !match.IsPending && mac.DeviceResetsFCnt(&ttnpb.EndDevice{
MacSettings: &ttnpb.MACSettings{
ResetsFCnt: match.ResetsFCnt,
},
}, ns.defaultMACSettings) {
}, ns.defaultMACSettings, nil) {
// FCnt reset
fCnt = pld.FHdr.FCnt
cmacF, ok = matchCmacF(ctx, fNwkSIntKey, match.LoRaWANVersion, fCnt, up)
Expand Down Expand Up @@ -1316,7 +1327,15 @@ func (ns *NetworkServer) handleJoinRequest(ctx context.Context, up *ttnpb.Uplink
"data_rate", up.Settings.DataRate,
)

macState, err := mac.NewState(matched, fps, ns.defaultMACSettings)
profile := &ttnpb.MACSettingsProfile{}
if matched.MacSettingsProfileIds != nil {
profile, err = ns.macSettingsProfiles.Get(ctx, matched.MacSettingsProfileIds, []string{"mac_settings"})
if err != nil {
log.FromContext(ctx).WithError(err).Warn("Failed to get MAC settings profile")
return err
}
}
macState, err := mac.NewState(matched, fps, ns.defaultMACSettings, profile)
if err != nil {
log.FromContext(ctx).WithError(err).Warn("Failed to reset device's MAC state")
return err
Expand Down
18 changes: 15 additions & 3 deletions pkg/networkserver/mac/relay.go
Original file line number Diff line number Diff line change
Expand Up @@ -129,8 +129,14 @@ func relayCtrlUplinkListReqFields(req *ttnpb.MACCommand_RelayCtrlUplinkListReq)
}

// DeviceDefaultRelaySettings returns the default relay parameters for the given device.
func DeviceDefaultRelaySettings(dev *ttnpb.EndDevice, defaults *ttnpb.MACSettings) *ttnpb.RelaySettings {
func DeviceDefaultRelaySettings(
dev *ttnpb.EndDevice,
defaults *ttnpb.MACSettings,
profile *ttnpb.MACSettingsProfile,
) *ttnpb.RelaySettings {
switch {
case profile.GetMacSettings().GetRelay() != nil:
return profile.MacSettings.Relay
case dev.GetMacSettings().GetRelay() != nil:
return dev.MacSettings.Relay
case defaults.Relay != nil:
Expand All @@ -141,14 +147,20 @@ func DeviceDefaultRelaySettings(dev *ttnpb.EndDevice, defaults *ttnpb.MACSetting
}

// DeviceDesiredRelaySettings returns the desired relay parameters for the given device.
func DeviceDesiredRelaySettings(dev *ttnpb.EndDevice, defaults *ttnpb.MACSettings) *ttnpb.RelaySettings {
func DeviceDesiredRelaySettings(
dev *ttnpb.EndDevice,
defaults *ttnpb.MACSettings,
profile *ttnpb.MACSettingsProfile,
) *ttnpb.RelaySettings {
switch {
case profile.GetMacSettings().GetDesiredRelay() != nil:
return profile.MacSettings.DesiredRelay
case dev.GetMacSettings().GetDesiredRelay() != nil:
return dev.MacSettings.DesiredRelay
case defaults.DesiredRelay != nil:
return defaults.DesiredRelay
default:
return DeviceDefaultRelaySettings(dev, defaults)
return DeviceDefaultRelaySettings(dev, defaults, profile)
}
}

Expand Down
13 changes: 11 additions & 2 deletions pkg/networkserver/mac/reset.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,16 @@ var (
)()
)

func HandleResetInd(ctx context.Context, dev *ttnpb.EndDevice, pld *ttnpb.MACCommand_ResetInd, fps *frequencyplans.Store, defaults *ttnpb.MACSettings) (events.Builders, error) {
// HandleResetInd handles the uplink of a reset indication.
// This method is called by the Network Server when an uplink with a reset indication is received.
func HandleResetInd(
_ context.Context,
dev *ttnpb.EndDevice,
pld *ttnpb.MACCommand_ResetInd,
fps *frequencyplans.Store,
defaults *ttnpb.MACSettings,
profile *ttnpb.MACSettingsProfile,
) (events.Builders, error) {
if pld == nil {
return nil, ErrNoPayload.New()
}
Expand All @@ -45,7 +54,7 @@ func HandleResetInd(ctx context.Context, dev *ttnpb.EndDevice, pld *ttnpb.MACCom
return evs, nil
}

macState, err := NewState(dev, fps, defaults)
macState, err := NewState(dev, fps, defaults, profile)
if err != nil {
return evs, err
}
Expand Down
23 changes: 20 additions & 3 deletions pkg/networkserver/mac/reset_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,12 @@ func TestHandleResetInd(t *testing.T) {
SupportsJoin: false,
FrequencyPlanId: test.EUFrequencyPlanID,
}
macState, err := NewState(dev, frequencyplans.NewStore(test.FrequencyPlansFetcher), &ttnpb.MACSettings{})
macState, err := NewState(
dev,
frequencyplans.NewStore(test.FrequencyPlansFetcher),
&ttnpb.MACSettings{},
&ttnpb.MACSettingsProfile{},
)
if err != nil {
t.Fatalf("Failed to reset MACState: %v", errors.Stack(err))
}
Expand Down Expand Up @@ -122,7 +127,12 @@ func TestHandleResetInd(t *testing.T) {
SupportsJoin: false,
FrequencyPlanId: test.EUFrequencyPlanID,
}
macState, err := NewState(dev, frequencyplans.NewStore(test.FrequencyPlansFetcher), &ttnpb.MACSettings{})
macState, err := NewState(
dev,
frequencyplans.NewStore(test.FrequencyPlansFetcher),
&ttnpb.MACSettings{},
&ttnpb.MACSettingsProfile{},
)
if err != nil {
t.Fatalf("Failed to reset MACState: %v", errors.Stack(err))
}
Expand Down Expand Up @@ -155,7 +165,14 @@ func TestHandleResetInd(t *testing.T) {
Func: func(ctx context.Context, t *testing.T, a *assertions.Assertion) {
dev := ttnpb.Clone(tc.Device)

evs, err := HandleResetInd(ctx, dev, tc.Payload, frequencyplans.NewStore(test.FrequencyPlansFetcher), &ttnpb.MACSettings{})
evs, err := HandleResetInd(
ctx,
dev,
tc.Payload,
frequencyplans.NewStore(test.FrequencyPlansFetcher),
&ttnpb.MACSettings{},
&ttnpb.MACSettingsProfile{},
)
if tc.Error != nil && !a.So(err, should.EqualErrorOrDefinition, tc.Error) ||
tc.Error == nil && !a.So(err, should.BeNil) {
t.FailNow()
Expand Down
Loading

0 comments on commit 01cdfec

Please sign in to comment.