From b2fc5f6362a6febddfd5c7735fb3a3781cebf995 Mon Sep 17 00:00:00 2001
From: Christian Poessinger <christian@poessinger.com>
Date: Sat, 25 Jun 2022 09:11:44 +0200
Subject: dhcp: pppoe: T4384: bugfix not honoring no-default-route CLI option

Commit a2ab95ff68b ("pppoe: T4384: replace default-route CLI option with common
CLI nodes already present for DHCP") had an issue as the PPPoE interface options
and also DHCP interface options did not honor the no-default-route option.

This has been fixed.
---
 data/templates/frr/staticd.frr.j2 | 4 ++--
 python/vyos/configdict.py         | 3 ++-
 2 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/data/templates/frr/staticd.frr.j2 b/data/templates/frr/staticd.frr.j2
index 589f03c2c..55c05ceb7 100644
--- a/data/templates/frr/staticd.frr.j2
+++ b/data/templates/frr/staticd.frr.j2
@@ -17,7 +17,7 @@ vrf {{ vrf }}
 {% endif %}
 {# IPv4 default routes from DHCP interfaces #}
 {% if dhcp is vyos_defined %}
-{%     for interface, interface_config in dhcp.items() %}
+{%     for interface, interface_config in dhcp.items() if interface_config.dhcp_options.no_default_route is not vyos_defined %}
 {%         set next_hop = interface | get_dhcp_router %}
 {%         if next_hop is vyos_defined %}
 {{ ip_prefix }} route 0.0.0.0/0 {{ next_hop }} {{ interface }} tag 210 {{ interface_config.dhcp_options.default_route_distance if interface_config.dhcp_options.default_route_distance is vyos_defined }}
@@ -26,7 +26,7 @@ vrf {{ vrf }}
 {% endif %}
 {# IPv4 default routes from PPPoE interfaces #}
 {% if pppoe is vyos_defined %}
-{%     for interface, interface_config in pppoe.items() %}
+{%     for interface, interface_config in pppoe.items() if interface_config.no_default_route is not vyos_defined %}
 {{ ip_prefix }} route 0.0.0.0/0 {{ interface }} tag 210 {{ interface_config.default_route_distance if interface_config.default_route_distance is vyos_defined }}
 {%     endfor %}
 {% endif %}
diff --git a/python/vyos/configdict.py b/python/vyos/configdict.py
index 04ddc10e9..7bbf2eae1 100644
--- a/python/vyos/configdict.py
+++ b/python/vyos/configdict.py
@@ -358,13 +358,14 @@ def get_pppoe_interfaces(conf, vrf=None):
     """ Common helper functions to retrieve all interfaces from current CLI
     sessions that have DHCP configured. """
     pppoe_interfaces = {}
+    conf.set_level([])
     for ifname in conf.list_nodes(['interfaces', 'pppoe']):
         # always reset config level, as get_interface_dict() will alter it
         conf.set_level([])
         # we already have a dict representation of the config from get_config_dict(),
         # but with the extended information from get_interface_dict() we also
         # get the DHCP client default-route-distance default option if not specified.
-        ifconfig = get_interface_dict(conf, ['interfaces', 'pppoe'], ifname)
+        _, ifconfig = get_interface_dict(conf, ['interfaces', 'pppoe'], ifname)
 
         options = {}
         if 'default_route_distance' in ifconfig:
-- 
cgit v1.2.3