From f42ec738bb15f4e740c3bdfad8de65d229451238 Mon Sep 17 00:00:00 2001 From: Johan Stokking Date: Thu, 30 May 2024 15:04:45 +0200 Subject: [PATCH 1/3] gs: Set protocol for Semtech web socket --- pkg/gatewayserver/io/semtechws/format.go | 2 ++ pkg/gatewayserver/io/semtechws/lbslns/format.go | 2 ++ pkg/gatewayserver/io/semtechws/ws.go | 2 +- 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/pkg/gatewayserver/io/semtechws/format.go b/pkg/gatewayserver/io/semtechws/format.go index 902a388592..1bf31708fd 100644 --- a/pkg/gatewayserver/io/semtechws/format.go +++ b/pkg/gatewayserver/io/semtechws/format.go @@ -37,6 +37,8 @@ type Endpoints struct { // Formatter abstracts messages to/from websocket based gateways. type Formatter interface { + // ID returns the ID of the formatter. + ID() string // Endpoints fetches the connection endpoints for the protocol. Endpoints() Endpoints // HandleConnectionInfo handles connection information requests from web socket based protocols. diff --git a/pkg/gatewayserver/io/semtechws/lbslns/format.go b/pkg/gatewayserver/io/semtechws/lbslns/format.go index 6226dcd4b3..52e5b356ab 100644 --- a/pkg/gatewayserver/io/semtechws/lbslns/format.go +++ b/pkg/gatewayserver/io/semtechws/lbslns/format.go @@ -40,6 +40,8 @@ func NewFormatter(maxRoundTripDelay time.Duration) semtechws.Formatter { } } +func (f *lbsLNS) ID() string { return "lbslns" } + func (f *lbsLNS) Endpoints() semtechws.Endpoints { return semtechws.Endpoints{ ConnectionInfo: "/router-info", diff --git a/pkg/gatewayserver/io/semtechws/ws.go b/pkg/gatewayserver/io/semtechws/ws.go index 6602f46441..48f878daa6 100644 --- a/pkg/gatewayserver/io/semtechws/ws.go +++ b/pkg/gatewayserver/io/semtechws/ws.go @@ -61,7 +61,7 @@ type srv struct { formatter Formatter } -func (*srv) Protocol() string { return "ws" } +func (s *srv) Protocol() string { return "semtechws/" + s.formatter.ID() } func (*srv) SupportsDownlinkClaim() bool { return false } func (*srv) DutyCycleStyle() scheduling.DutyCycleStyle { return scheduling.DutyCycleStyleBlockingWindow From 2c95f63d99b6b2f33d4fe238747009a116e823c7 Mon Sep 17 00:00:00 2001 From: Johan Stokking Date: Thu, 30 May 2024 16:52:56 +0200 Subject: [PATCH 2/3] gs: Set rate limit key to Semtech web socket's protocol --- pkg/gatewayserver/io/semtechws/ws.go | 2 +- pkg/gatewayserver/io/semtechws/ws_test.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/gatewayserver/io/semtechws/ws.go b/pkg/gatewayserver/io/semtechws/ws.go index 48f878daa6..119aa8db3c 100644 --- a/pkg/gatewayserver/io/semtechws/ws.go +++ b/pkg/gatewayserver/io/semtechws/ws.go @@ -96,7 +96,7 @@ func New(ctx context.Context, server io.Server, formatter Formatter, cfg Config) router := w.RootRouter() router.Use( - ratelimit.HTTPMiddleware(server.RateLimiter(), "gs:accept:ws"), + ratelimit.HTTPMiddleware(server.RateLimiter(), "gs:accept:"+s.Protocol()), ) eps := s.formatter.Endpoints() diff --git a/pkg/gatewayserver/io/semtechws/ws_test.go b/pkg/gatewayserver/io/semtechws/ws_test.go index ef28e07e8c..ee94ccad36 100644 --- a/pkg/gatewayserver/io/semtechws/ws_test.go +++ b/pkg/gatewayserver/io/semtechws/ws_test.go @@ -1800,7 +1800,7 @@ func TestRateLimit(t *testing.T) { Name: "accept connections", MaxPerMin: maxRate, MaxBurst: maxRate, - Associations: []string{"gs:accept:ws"}, + Associations: []string{"gs:accept:semtechws/lbslns"}, }}, } withServer(t, defaultConfig, conf, func(t *testing.T, _ *mockis.MockDefinition, serverAddress string) { From 1f41f8f7cf812cc90a88e00e3b0d02e7e6e3bad9 Mon Sep 17 00:00:00 2001 From: Johan Stokking Date: Fri, 31 May 2024 14:58:37 +0200 Subject: [PATCH 3/3] dev: Update changelog --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d998c5228f..55da25bbd3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,8 @@ For details about compatibility between different releases, see the **Commitment ### Changed +- The rate limit key for LoRa Basics Station has changed from `gs:accept:ws` to `gs:accept:semtechws/lbslns`. + ### Deprecated ### Removed