Feature: only teardown routing if changes occurred

This commit is contained in:
Quentin McGaw
2021-05-10 22:16:26 +00:00
parent dadc939aab
commit 1cb93d76ed

View File

@@ -30,17 +30,20 @@ func (r *routing) Setup() (err error) {
return fmt.Errorf("%w: %s", ErrDefaultRoute, err) return fmt.Errorf("%w: %s", ErrDefaultRoute, err)
} }
touched := false
defer func() { defer func() {
if err == nil { if err != nil && touched {
return if tearDownErr := r.TearDown(); tearDownErr != nil {
r.logger.Error("cannot reverse routing changes: " + tearDownErr.Error())
} }
if err := r.TearDown(); err != nil {
r.logger.Error("cannot reverse routing changes: " + err.Error())
} }
}() }()
if err := r.addIPRule(defaultIP, table, priority); err != nil { if err := r.addIPRule(defaultIP, table, priority); err != nil {
return fmt.Errorf("%w: %s", ErrIPRuleAdd, err) 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)} 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 { if err := r.addRouteVia(defaultDestination, defaultGateway, defaultInterfaceName, table); err != nil {
return fmt.Errorf("%w: %s", ErrRouteAdd, err) return fmt.Errorf("%w: %s", ErrRouteAdd, err)