diff --git a/internal/backend/basicstation/backend.go b/internal/backend/basicstation/backend.go index 5fc0b021..308ba0b1 100644 --- a/internal/backend/basicstation/backend.go +++ b/internal/backend/basicstation/backend.go @@ -63,13 +63,13 @@ type Backend struct { gatewayStatsFunc func(*gw.GatewayStats) rawPacketForwarderEventFunc func(*gw.RawPacketForwarderEvent) - band band.Band - region band.Name - netIDs []lorawan.NetID - joinEUIs [][2]lorawan.EUI64 - frequencyMin uint32 - frequencyMax uint32 - routerConfig structs.RouterConfig + band band.Band + region band.Name + netIDs []lorawan.NetID + joinEUIs [][2]lorawan.EUI64 + frequencyMin uint32 + frequencyMax uint32 + concentrators []config.BasicStationConcentrator // Cache to store diid to UUIDs. diidCache *cache.Cache @@ -94,9 +94,10 @@ func NewBackend(conf config.Config) (*Backend, error) { readTimeout: conf.Backend.BasicStation.ReadTimeout, writeTimeout: conf.Backend.BasicStation.WriteTimeout, - region: band.Name(conf.Backend.BasicStation.Region), - frequencyMin: conf.Backend.BasicStation.FrequencyMin, - frequencyMax: conf.Backend.BasicStation.FrequencyMax, + region: band.Name(conf.Backend.BasicStation.Region), + frequencyMin: conf.Backend.BasicStation.FrequencyMin, + frequencyMax: conf.Backend.BasicStation.FrequencyMax, + concentrators: config.C.Backend.BasicStation.Concentrators, diidCache: cache.New(time.Minute, time.Minute), } @@ -127,11 +128,6 @@ func NewBackend(conf config.Config) (*Backend, error) { return nil, errors.Wrap(err, "get band config error") } - b.routerConfig, err = structs.GetRouterConfig(b.region, b.netIDs, b.joinEUIs, b.frequencyMin, b.frequencyMax, conf.Backend.BasicStation.Concentrators) - if err != nil { - return nil, errors.Wrap(err, "get router config error") - } - mux := http.NewServeMux() mux.HandleFunc("/router-info", func(w http.ResponseWriter, r *http.Request) { b.websocketWrap(b.handleRouterInfo, w, r) @@ -295,6 +291,10 @@ func (b *Backend) Stop() error { return b.ln.Close() } +func (b *Backend) getRouterConfig() (structs.RouterConfig, error) { + return structs.GetRouterConfig(b.region, b.netIDs, b.joinEUIs, b.frequencyMin, b.frequencyMax, b.concentrators) +} + func (b *Backend) handleRouterInfo(r *http.Request, conn *connection) { websocketReceiveCounter("router_info").Inc() var req structs.RouterInfoRequest @@ -553,8 +553,14 @@ func (b *Backend) handleVersion(gatewayID lorawan.EUI64, pl structs.Version) { // "features": pl.Features, }).Info("backend/basicstation: gateway version received") + routerConfig, err := b.getRouterConfig() + if err != nil { + log.WithError(err).Error("backend/basicstation: get router config error") + return + } + websocketSendCounter("router_config").Inc() - if err := b.sendToGateway(gatewayID, b.routerConfig); err != nil { + if err := b.sendToGateway(gatewayID, routerConfig); err != nil { log.WithError(err).Error("backend/basicstation: send to gateway error") return } diff --git a/internal/backend/basicstation/backend_test.go b/internal/backend/basicstation/backend_test.go index e06097e0..946866e0 100644 --- a/internal/backend/basicstation/backend_test.go +++ b/internal/backend/basicstation/backend_test.go @@ -111,9 +111,6 @@ func (ts *BackendTestSuite) TestRouterInfo() { func (ts *BackendTestSuite) TestVersion() { assert := require.New(ts.T()) - ts.backend.routerConfig = structs.RouterConfig{ - MessageType: structs.RouterConfigMessage, - } ver := structs.Version{ MessageType: structs.VersionMessage, @@ -125,7 +122,10 @@ func (ts *BackendTestSuite) TestVersion() { var routerConfig structs.RouterConfig assert.NoError(ts.wsClient.ReadJSON(&routerConfig)) - assert.Equal(ts.backend.routerConfig, routerConfig) + routerConfig, err := ts.backend.getRouterConfig() + assert.NoError(err) + + assert.Equal(routerConfig, routerConfig) } func (ts *BackendTestSuite) TestUplinkDataFrame() {