summaryrefslogtreecommitdiff
path: root/src/conf_mode/protocols_pim.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/conf_mode/protocols_pim.py')
-rwxr-xr-xsrc/conf_mode/protocols_pim.py63
1 files changed, 17 insertions, 46 deletions
diff --git a/src/conf_mode/protocols_pim.py b/src/conf_mode/protocols_pim.py
index dc65a59a6..7b360d62c 100755
--- a/src/conf_mode/protocols_pim.py
+++ b/src/conf_mode/protocols_pim.py
@@ -13,55 +13,19 @@
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-#
-import sys
-import jinja2
-import copy
import os
-import vyos.validate
+
from ipaddress import IPv4Address
+from jinja2 import FileSystemLoader, Environment
+from sys import exit
-from vyos import ConfigError
from vyos.config import Config
+from vyos.defaults import directories as vyos_data_dir
+from vyos import ConfigError
config_file = r'/tmp/pimd.frr'
-# Please be careful if you edit the template.
-config_tmpl = """
-!
-{% for rp_addr in old_pim.rp -%}
-{% for group in old_pim.rp[rp_addr] -%}
-no ip pim rp {{ rp_addr }} {{ group }}
-{% endfor -%}
-{% endfor -%}
-{% if old_pim.rp_keep_alive -%}
-no ip pim rp keep-alive-timer {{ old_pim.rp_keep_alive }}
-{% endif -%}
-{% for iface in old_pim.ifaces -%}
-interface {{ iface }}
-no ip pim
-!
-{% endfor -%}
-{% for iface in pim.ifaces -%}
-interface {{ iface }}
-{% if pim.ifaces[iface].hello -%}
-ip pim hello {{ pim.ifaces[iface].hello }}
-{% endif -%}
-ip pim
-!
-{% endfor -%}
-{% for rp_addr in pim.rp -%}
-{% for group in pim.rp[rp_addr] -%}
-ip pim rp {{ rp_addr }} {{ group }}
-{% endfor -%}
-{% endfor -%}
-{% if pim.rp_keep_alive -%}
-ip pim rp keep-alive-timer {{ pim.rp_keep_alive }}
-{% endif -%}
-!
-"""
-
def get_config():
conf = Config()
pim_conf = {
@@ -87,14 +51,16 @@ def get_config():
for iface in conf.list_effective_nodes('interface'):
pim_conf['old_pim']['ifaces'].update({
iface : {
- 'hello' : conf.return_effective_value('interface {0} hello'.format(iface))
+ 'hello' : conf.return_effective_value('interface {0} hello'.format(iface)),
+ 'dr_prio' : conf.return_effective_value('interface {0} dr-priority'.format(iface))
}
})
for iface in conf.list_nodes('interface'):
pim_conf['pim']['ifaces'].update({
iface : {
- 'hello' : conf.return_value('interface {0} hello'.format(iface))
+ 'hello' : conf.return_value('interface {0} hello'.format(iface)),
+ 'dr_prio' : conf.return_value('interface {0} dr-priority'.format(iface)),
}
})
@@ -147,7 +113,12 @@ def generate(pim):
if pim is None:
return None
- tmpl = jinja2.Template(config_tmpl)
+ # Prepare Jinja2 template loader from files
+ tmpl_path = os.path.join(vyos_data_dir['data'], 'templates', 'pim')
+ fs_loader = FileSystemLoader(tmpl_path)
+ env = Environment(loader=fs_loader)
+
+ tmpl = env.get_template('pimd.frr.tmpl')
config_text = tmpl.render(pim)
with open(config_file, 'w') as f:
f.write(config_text)
@@ -159,7 +130,7 @@ def apply(pim):
return None
if os.path.exists(config_file):
- os.system("sudo vtysh -d pimd -f " + config_file)
+ os.system("vtysh -d pimd -f " + config_file)
os.remove(config_file)
return None
@@ -172,4 +143,4 @@ if __name__ == '__main__':
apply(c)
except ConfigError as e:
print(e)
- sys.exit(1)
+ exit(1)