From 04fad1b781d965080986823efa829db67dfa68cc Mon Sep 17 00:00:00 2001 From: "Quentin McGaw (desktop)" Date: Wed, 25 Aug 2021 17:22:48 +0000 Subject: [PATCH] Maint: `internal/subnet` package --- internal/firewall/outboundsubnets.go | 12 +++--- internal/firewall/subnets.go | 53 ------------------------- internal/routing/outboundsubnets.go | 12 +++--- internal/{routing => subnet}/subnets.go | 8 ++-- 4 files changed, 18 insertions(+), 67 deletions(-) delete mode 100644 internal/firewall/subnets.go rename internal/{routing => subnet}/subnets.go (81%) diff --git a/internal/firewall/outboundsubnets.go b/internal/firewall/outboundsubnets.go index 771f1a2b..fdd65492 100644 --- a/internal/firewall/outboundsubnets.go +++ b/internal/firewall/outboundsubnets.go @@ -4,6 +4,8 @@ import ( "context" "fmt" "net" + + "github.com/qdm12/gluetun/internal/subnet" ) type OutboundSubnetsSetter interface { @@ -23,8 +25,8 @@ func (c *Config) SetOutboundSubnets(ctx context.Context, subnets []net.IPNet) (e c.logger.Info("setting allowed subnets through firewall...") - subnetsToAdd := findSubnetsToAdd(c.outboundSubnets, subnets) - subnetsToRemove := findSubnetsToRemove(c.outboundSubnets, subnets) + subnetsToAdd := subnet.FindSubnetsToAdd(c.outboundSubnets, subnets) + subnetsToRemove := subnet.FindSubnetsToRemove(c.outboundSubnets, subnets) if len(subnetsToAdd) == 0 && len(subnetsToRemove) == 0 { return nil } @@ -39,12 +41,12 @@ func (c *Config) SetOutboundSubnets(ctx context.Context, subnets []net.IPNet) (e func (c *Config) removeOutboundSubnets(ctx context.Context, subnets []net.IPNet) { const remove = true - for _, subnet := range subnets { - if err := c.acceptOutputFromIPToSubnet(ctx, c.defaultInterface, c.localIP, subnet, remove); err != nil { + for _, subNet := range subnets { + if err := c.acceptOutputFromIPToSubnet(ctx, c.defaultInterface, c.localIP, subNet, remove); err != nil { c.logger.Error("cannot remove outdated outbound subnet through firewall: " + err.Error()) continue } - c.outboundSubnets = removeSubnetFromSubnets(c.outboundSubnets, subnet) + c.outboundSubnets = subnet.RemoveSubnetFromSubnets(c.outboundSubnets, subNet) } } diff --git a/internal/firewall/subnets.go b/internal/firewall/subnets.go deleted file mode 100644 index 7d74f5f1..00000000 --- a/internal/firewall/subnets.go +++ /dev/null @@ -1,53 +0,0 @@ -package firewall - -import ( - "net" -) - -func findSubnetsToAdd(oldSubnets, newSubnets []net.IPNet) (subnetsToAdd []net.IPNet) { - for _, newSubnet := range newSubnets { - found := false - for _, oldSubnet := range oldSubnets { - if subnetsAreEqual(oldSubnet, newSubnet) { - found = true - break - } - } - if !found { - subnetsToAdd = append(subnetsToAdd, newSubnet) - } - } - return subnetsToAdd -} - -func findSubnetsToRemove(oldSubnets, newSubnets []net.IPNet) (subnetsToRemove []net.IPNet) { - for _, oldSubnet := range oldSubnets { - found := false - for _, newSubnet := range newSubnets { - if subnetsAreEqual(oldSubnet, newSubnet) { - found = true - break - } - } - if !found { - subnetsToRemove = append(subnetsToRemove, oldSubnet) - } - } - return subnetsToRemove -} - -func subnetsAreEqual(a, b net.IPNet) bool { - return a.IP.Equal(b.IP) && a.Mask.String() == b.Mask.String() -} - -func removeSubnetFromSubnets(subnets []net.IPNet, subnet net.IPNet) []net.IPNet { - L := len(subnets) - for i := range subnets { - if subnetsAreEqual(subnet, subnets[i]) { - subnets[i] = subnets[L-1] - subnets = subnets[:L-1] - break - } - } - return subnets -} diff --git a/internal/routing/outboundsubnets.go b/internal/routing/outboundsubnets.go index 3230d151..87ebadc3 100644 --- a/internal/routing/outboundsubnets.go +++ b/internal/routing/outboundsubnets.go @@ -4,6 +4,8 @@ import ( "errors" "fmt" "net" + + "github.com/qdm12/gluetun/internal/subnet" ) var ( @@ -27,8 +29,8 @@ func (r *Routing) setOutboundRoutes(outboundSubnets []net.IPNet, r.stateMutex.Lock() defer r.stateMutex.Unlock() - subnetsToRemove := findSubnetsToRemove(r.outboundSubnets, outboundSubnets) - subnetsToAdd := findSubnetsToAdd(r.outboundSubnets, outboundSubnets) + subnetsToRemove := subnet.FindSubnetsToRemove(r.outboundSubnets, outboundSubnets) + subnetsToAdd := subnet.FindSubnetsToAdd(r.outboundSubnets, outboundSubnets) if len(subnetsToAdd) == 0 && len(subnetsToRemove) == 0 { return nil @@ -40,13 +42,13 @@ func (r *Routing) setOutboundRoutes(outboundSubnets []net.IPNet, func (r *Routing) removeOutboundSubnets(subnets []net.IPNet, defaultInterfaceName string, defaultGateway net.IP) { - for _, subnet := range subnets { + for _, subNet := range subnets { const table = 0 - if err := r.deleteRouteVia(subnet, defaultGateway, defaultInterfaceName, table); err != nil { + if err := r.deleteRouteVia(subNet, defaultGateway, defaultInterfaceName, table); err != nil { r.logger.Error("cannot remove outdated outbound subnet from routing: " + err.Error()) continue } - r.outboundSubnets = removeSubnetFromSubnets(r.outboundSubnets, subnet) + r.outboundSubnets = subnet.RemoveSubnetFromSubnets(r.outboundSubnets, subNet) } } diff --git a/internal/routing/subnets.go b/internal/subnet/subnets.go similarity index 81% rename from internal/routing/subnets.go rename to internal/subnet/subnets.go index ac7d4aa8..f857d529 100644 --- a/internal/routing/subnets.go +++ b/internal/subnet/subnets.go @@ -1,10 +1,10 @@ -package routing +package subnet import ( "net" ) -func findSubnetsToAdd(oldSubnets, newSubnets []net.IPNet) (subnetsToAdd []net.IPNet) { +func FindSubnetsToAdd(oldSubnets, newSubnets []net.IPNet) (subnetsToAdd []net.IPNet) { for _, newSubnet := range newSubnets { found := false for _, oldSubnet := range oldSubnets { @@ -20,7 +20,7 @@ func findSubnetsToAdd(oldSubnets, newSubnets []net.IPNet) (subnetsToAdd []net.IP return subnetsToAdd } -func findSubnetsToRemove(oldSubnets, newSubnets []net.IPNet) (subnetsToRemove []net.IPNet) { +func FindSubnetsToRemove(oldSubnets, newSubnets []net.IPNet) (subnetsToRemove []net.IPNet) { for _, oldSubnet := range oldSubnets { found := false for _, newSubnet := range newSubnets { @@ -40,7 +40,7 @@ func subnetsAreEqual(a, b net.IPNet) bool { return a.IP.Equal(b.IP) && a.Mask.String() == b.Mask.String() } -func removeSubnetFromSubnets(subnets []net.IPNet, subnet net.IPNet) []net.IPNet { +func RemoveSubnetFromSubnets(subnets []net.IPNet, subnet net.IPNet) []net.IPNet { L := len(subnets) for i := range subnets { if subnetsAreEqual(subnet, subnets[i]) {