From ea4271d7cb23a7972f2f2530dd359d133bc2525f Mon Sep 17 00:00:00 2001
From: Blake Harnden <32446120+bharnden@users.noreply.github.com>
Date: Fri, 1 May 2020 19:15:53 -0700
Subject: [PATCH] changed defaultroute service to behave similarly as before
 and use the first interface for a default .1 address

---
 .../configservices/utilservices/services.py   | 21 +++++++-----------
 daemon/core/services/utility.py               | 22 +++++++------------
 2 files changed, 16 insertions(+), 27 deletions(-)

diff --git a/daemon/core/configservices/utilservices/services.py b/daemon/core/configservices/utilservices/services.py
index 75b5c745..8ddf1cc7 100644
--- a/daemon/core/configservices/utilservices/services.py
+++ b/daemon/core/configservices/utilservices/services.py
@@ -4,7 +4,6 @@ import netaddr
 
 from core import utils
 from core.configservice.base import ConfigService, ConfigServiceMode
-from core.nodes.base import CoreNode
 
 GROUP_NAME = "Utility"
 
@@ -26,18 +25,14 @@ class DefaultRouteService(ConfigService):
     def data(self) -> Dict[str, Any]:
         # only add default routes for linked routing nodes
         routes = []
-        for other_node in self.node.session.nodes.values():
-            if not isinstance(other_node, CoreNode):
-                continue
-            if other_node.type not in ["router", "mdr"]:
-                continue
-            commonnets = self.node.commonnets(other_node)
-            if commonnets:
-                _, _, router_eth = commonnets[0]
-                for x in router_eth.addrlist:
-                    addr, prefix = x.split("/")
-                    routes.append(addr)
-                break
+        netifs = self.node.netifs(sort=True)
+        if netifs:
+            netif = netifs[0]
+            for x in netif.addrlist:
+                net = netaddr.IPNetwork(x).cidr
+                if net.size > 1:
+                    router = net[1]
+                    routes.append(str(router))
         return dict(routes=routes)
 
 
diff --git a/daemon/core/services/utility.py b/daemon/core/services/utility.py
index 028c2c0b..8a6e828b 100644
--- a/daemon/core/services/utility.py
+++ b/daemon/core/services/utility.py
@@ -7,7 +7,6 @@ import netaddr
 
 from core import constants, utils
 from core.errors import CoreCommandError
-from core.nodes.base import CoreNode
 from core.services.coreservices import CoreService, ServiceMode
 
 
@@ -77,20 +76,15 @@ class DefaultRouteService(UtilService):
 
     @classmethod
     def generate_config(cls, node, filename):
-        # only add default routes for linked routing nodes
         routes = []
-        for other_node in node.session.nodes.values():
-            if not isinstance(other_node, CoreNode):
-                continue
-            if other_node.type not in ["router", "mdr"]:
-                continue
-            commonnets = node.commonnets(other_node)
-            if commonnets:
-                _, _, router_eth = commonnets[0]
-                for x in router_eth.addrlist:
-                    addr, prefix = x.split("/")
-                    routes.append(addr)
-                break
+        netifs = node.netifs(sort=True)
+        if netifs:
+            netif = netifs[0]
+            for x in netif.addrlist:
+                net = netaddr.IPNetwork(x).cidr
+                if net.size > 1:
+                    router = net[1]
+                    routes.append(str(router))
         cfg = "#!/bin/sh\n"
         cfg += "# auto-generated by DefaultRoute service (utility.py)\n"
         for route in routes: