From 94be454f4f1bb1c4dd16df7438b7dca54aa99dee Mon Sep 17 00:00:00 2001 From: Nate Brown Date: Wed, 7 Oct 2026 14:06:27 -0500 Subject: [PATCH] lighthouse: Recompute relays for me when relay.am_relay changes (#1917) --- lighthouse.go | 3 ++- lighthouse_test.go | 21 +++++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/lighthouse.go b/lighthouse.go index f3a6f737..619c16a0 100644 --- a/lighthouse.go +++ b/lighthouse.go @@ -359,7 +359,8 @@ func (lh *LightHouse) reload(c *config.C, initial bool) error { } } - if initial || c.HasChanged("relay.relays") { + // am_relay decides whether relay.relays applies to us at all + if initial || c.HasChanged("relay.relays") || c.HasChanged("relay.am_relay") { var before []netip.Addr if !initial { before = lh.GetRelaysForMe() diff --git a/lighthouse_test.go b/lighthouse_test.go index fab44cb9..ace29c15 100644 --- a/lighthouse_test.go +++ b/lighthouse_test.go @@ -976,3 +976,24 @@ func TestLighthouse_reloadRelaysTriggersUpdate(t *testing.T) { assert.Equal(t, []netip.Addr{netip.MustParseAddr("10.128.0.6")}, lh.GetRelaysForMe()) assert.Empty(t, lh.updateTrigger) } + +func TestLighthouse_reloadAmRelayAlone(t *testing.T) { + l := test.NewLogger() + c := config.NewC(l) + base := "lighthouse:\n am_lighthouse: true\nlisten:\n port: 4242\nrelay:\n relays: [10.128.0.5]\n" + require.NoError(t, c.LoadString(base+" am_relay: false\n")) + + lh, err := NewLightHouseFromConfig(t.Context(), l, c, testCertState(netip.MustParsePrefix("10.128.0.1/24")), nil, nil) + require.NoError(t, err) + assert.Equal(t, []netip.Addr{netip.MustParseAddr("10.128.0.5")}, lh.GetRelaysForMe()) + + // Relays aren't allowed to have relays, flipping am_relay alone must drop them and tell the lighthouses + require.NoError(t, c.ReloadConfigString(base+" am_relay: true\n")) + assert.Empty(t, lh.GetRelaysForMe()) + require.Len(t, lh.updateTrigger, 1) + <-lh.updateTrigger + + require.NoError(t, c.ReloadConfigString(base+" am_relay: false\n")) + assert.Equal(t, []netip.Addr{netip.MustParseAddr("10.128.0.5")}, lh.GetRelaysForMe()) + require.Len(t, lh.updateTrigger, 1) +}