From 1cb93d76ed050dc3581a5e394c8b8120e1852db7 Mon Sep 17 00:00:00 2001 From: Quentin McGaw Date: Mon, 10 May 2021 22:16:26 +0000 Subject: [PATCH] Feature: only teardown routing if changes occurred --- internal/routing/enable.go | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/internal/routing/enable.go b/internal/routing/enable.go index ad3d1ab9..e46d9bac 100644 --- a/internal/routing/enable.go +++ b/internal/routing/enable.go @@ -30,17 +30,20 @@ func (r *routing) Setup() (err error) { return fmt.Errorf("%w: %s", ErrDefaultRoute, err) } + touched := false defer func() { - if err == nil { - return - } - if err := r.TearDown(); err != nil { - r.logger.Error("cannot reverse routing changes: " + err.Error()) + if err != nil && touched { + if tearDownErr := r.TearDown(); tearDownErr != nil { + r.logger.Error("cannot reverse routing changes: " + tearDownErr.Error()) + } } }() if err := r.addIPRule(defaultIP, table, priority); err != nil { return fmt.Errorf("%w: %s", ErrIPRuleAdd, err) } + + touched = true + defaultDestination := net.IPNet{IP: net.IPv4(0, 0, 0, 0), Mask: net.IPv4Mask(0, 0, 0, 0)} if err := r.addRouteVia(defaultDestination, defaultGateway, defaultInterfaceName, table); err != nil { return fmt.Errorf("%w: %s", ErrRouteAdd, err)