From 43c1468bcb7eb2f0ad7e82289435dc6ea1a5442b Mon Sep 17 00:00:00 2001 From: Marc Brooks Date: Mon, 10 Nov 2025 23:45:52 -0600 Subject: [PATCH] Create lldpService then start/stop Rx/Tx Emit more logging on errors Eliminated the redundant lldp.Start. --- internal/lldp/lldp.go | 39 ++++++--------------------------------- network.go | 21 ++++++++++++++------- 2 files changed, 20 insertions(+), 40 deletions(-) diff --git a/internal/lldp/lldp.go b/internal/lldp/lldp.go index c568e9a1..5a5017b4 100644 --- a/internal/lldp/lldp.go +++ b/internal/lldp/lldp.go @@ -54,8 +54,6 @@ type AdvertiseOptions struct { type Options struct { InterfaceName string AdvertiseOptions *AdvertiseOptions - EnableRx bool - EnableTx bool OnChange func(neighbors []Neighbor) Logger *zerolog.Logger } @@ -72,40 +70,15 @@ func NewLLDP(opts *Options) *LLDP { return &LLDP{ interfaceName: opts.InterfaceName, advertiseOptions: opts.AdvertiseOptions, - Rx: &RunningState{ - Enabled: opts.EnableRx, - }, - Tx: &RunningState{ - Enabled: opts.EnableTx, - }, - rxWaitGroup: &sync.WaitGroup{}, - l: opts.Logger, - neighbors: make(map[neighborCacheKey]Neighbor), - onChange: opts.OnChange, + neighbors: make(map[neighborCacheKey]Neighbor), + onChange: opts.OnChange, + Rx: &RunningState{}, + Tx: &RunningState{}, + rxWaitGroup: &sync.WaitGroup{}, + l: opts.Logger, } } -func (l *LLDP) Start() error { - l.mu.RLock() - rxEnabled, txEnabled := l.Rx.Enabled, l.Tx.Enabled - l.mu.RUnlock() - - if rxEnabled { - if err := l.startRx(); err != nil { - return fmt.Errorf("failed to start RX: %w", err) - } - } - - // Start TX if enabled - if txEnabled { - if err := l.startTx(); err != nil { - return fmt.Errorf("failed to start TX: %w", err) - } - } - - return nil -} - // StartRx starts the LLDP receiver if not already running func (l *LLDP) startRx() error { l.mu.RLock() diff --git a/network.go b/network.go index ba8acd25..1feecba4 100644 --- a/network.go +++ b/network.go @@ -185,12 +185,20 @@ func initNetwork() error { nm := nmlite.NewNetworkManager(context.Background(), networkLogger) networkLogger.Info().Interface("networkConfig", nc).Str("hostname", nc.Hostname.String).Str("domain", nc.Domain.String).Msg("initializing network manager") - _ = setHostname(nm, nc.Hostname.String, nc.Domain.String) + + if err := setHostname(nm, nc.Hostname.String, nc.Domain.String); err != nil { + networkLogger.Warn().Err(err).Msg("failed to set hostname") + } + nm.SetOnInterfaceStateChange(networkStateChanged) + if err := nm.AddInterface(NetIfName, nc); err != nil { return fmt.Errorf("failed to add interface: %w", err) } - _ = nm.CleanUpLegacyDHCPClients() + + if err := nm.CleanUpLegacyDHCPClients(); err != nil { + networkLogger.Warn().Err(err).Msg("failed to clean up legacy DHCP clients") + } networkManager = nm @@ -202,8 +210,6 @@ func initNetwork() error { advertiseOptions := getLLDPAdvertiseOptions(ifState) lldpService = lldp.NewLLDP(&lldp.Options{ InterfaceName: NetIfName, - EnableRx: nc.ShouldEnableLLDPReceive(), - EnableTx: nc.ShouldEnableLLDPTransmit(), AdvertiseOptions: advertiseOptions, OnChange: func(neighbors []lldp.Neighbor) { // TODO: send deltas instead of the whole list @@ -212,8 +218,9 @@ func initNetwork() error { Logger: networkLogger, }) - if err := lldpService.Start(); err != nil { - networkLogger.Error().Err(err).Msg("failed to start LLDP service") + // this will start up the LLDP Tx and Rx as needed + if err := lldpService.SetRxAndTx(nc.ShouldEnableLLDPReceive(), nc.ShouldEnableLLDPTransmit()); err != nil { + networkLogger.Error().Err(err).Msg("failed to initialize LLDP RX and TX") } return nil @@ -234,7 +241,7 @@ func updateLLDPOptions(nc *types.NetworkConfig, ifState *types.InterfaceState) { } if err := lldpService.SetRxAndTx(nc.ShouldEnableLLDPReceive(), nc.ShouldEnableLLDPTransmit()); err != nil { - networkLogger.Error().Err(err).Msg("failed to set LLDP RX and TX") + networkLogger.Error().Err(err).Msg("failed to update LLDP RX and TX") } if ifState == nil {