From 2e1562fb02e7a2b45e84c0b8d861d149bfa890d2 Mon Sep 17 00:00:00 2001 From: Christian Poessinger Date: Sat, 4 Apr 2020 11:08:50 +0200 Subject: wwan: T1988: move Jinja2 templates to data/templates folder This makes the actual code which generates the configs much more human readable. --- data/templates/wwan/chat.tmpl | 6 +++ data/templates/wwan/ip-pre-up.script.tmpl | 23 ++++++++ data/templates/wwan/peer.tmpl | 30 +++++++++++ src/conf_mode/interfaces-wirelessmodem.py | 90 +++++-------------------------- 4 files changed, 73 insertions(+), 76 deletions(-) create mode 100644 data/templates/wwan/chat.tmpl create mode 100644 data/templates/wwan/ip-pre-up.script.tmpl create mode 100644 data/templates/wwan/peer.tmpl diff --git a/data/templates/wwan/chat.tmpl b/data/templates/wwan/chat.tmpl new file mode 100644 index 000000000..78453bc5b --- /dev/null +++ b/data/templates/wwan/chat.tmpl @@ -0,0 +1,6 @@ +ABORT 'NO DIAL TONE' ABORT 'NO ANSWER' ABORT 'NO CARRIER' ABORT DELAYED +'' AT +OK ATZ +OK 'AT+CGDCONT=1,"IP","{{ apn }}"' +OK ATD*99# +CONNECT '' diff --git a/data/templates/wwan/ip-pre-up.script.tmpl b/data/templates/wwan/ip-pre-up.script.tmpl new file mode 100644 index 000000000..f20c75ea3 --- /dev/null +++ b/data/templates/wwan/ip-pre-up.script.tmpl @@ -0,0 +1,23 @@ +#!/bin/sh +# As WWAN is an "on demand" interface we need to re-configure it when it +# becomes 'up' + +ipparam=$6 + +# device name and metric are received using ipparam +device=`echo "$ipparam"|awk '{ print $1 }'` + +if [ "$device" != "{{ intf }}" ]; then + exit +fi + +# add some info to syslog +DIALER_PID=$(cat /var/run/{{ intf }}.pid) +logger -t pppd[$DIALER_PID] "executing $0" + +echo "{{ description }}" > /sys/class/net/{{ intf }}/ifalias + +{% if vrf -%} +logger -t pppd[$DIALER_PID] "configuring interface {{ intf }} for VRF {{ vrf }}" +ip link set dev {{ intf }} master {{ vrf }} +{% endif %} diff --git a/data/templates/wwan/peer.tmpl b/data/templates/wwan/peer.tmpl new file mode 100644 index 000000000..7de1c8764 --- /dev/null +++ b/data/templates/wwan/peer.tmpl @@ -0,0 +1,30 @@ +### Autogenerated by interfaces-wirelessmodem.py ### + +{% if description %} +# {{ description }} +{% endif %} +ifname {{ intf }} +ipparam "{{ intf }} {{ metric }}" +linkname {{ intf }} +{% if name_server -%} +usepeerdns +{%- endif %} +# physical device +/dev/{{ device }} +lcp-echo-failure 0 +115200 +debug +logfile {{ logfile }} +nodefaultroute +ipcp-max-failure 4 +ipcp-accept-local +ipcp-accept-remote +noauth +crtscts +lock +persist +{% if on_demand -%} +demand +{%- endif %} + +connect '/usr/sbin/chat -v -t6 -f {{ chat_script }}' diff --git a/src/conf_mode/interfaces-wirelessmodem.py b/src/conf_mode/interfaces-wirelessmodem.py index e9c3ad55b..bfefa5dd1 100755 --- a/src/conf_mode/interfaces-wirelessmodem.py +++ b/src/conf_mode/interfaces-wirelessmodem.py @@ -18,84 +18,15 @@ import os from sys import exit from copy import deepcopy -from jinja2 import Template +from jinja2 import FileSystemLoader, Environment from subprocess import Popen, PIPE from netifaces import interfaces from vyos.config import Config from vyos.util import chown_file, chmod_x_file +from vyos.defaults import directories as vyos_data_dir from vyos import ConfigError -# Please be careful if you edit the template. -config_wwan_tmpl = """### Autogenerated by interfaces-wirelessmodem.py ### -{% if description %} -# {{ description }} -{% endif %} -ifname {{ intf }} -ipparam "{{ intf }} {{ metric }}" -linkname {{ intf }} -{% if name_server -%} -usepeerdns -{%- endif %} -# physical device -/dev/{{ device }} -lcp-echo-failure 0 -115200 -debug -logfile {{ logfile }} -nodefaultroute -ipcp-max-failure 4 -ipcp-accept-local -ipcp-accept-remote -noauth -crtscts -lock -persist -{% if on_demand -%} -demand -{%- endif %} - -connect '/usr/sbin/chat -v -t6 -f {{ chat_script }}' - -""" - -# Please be careful if you edit the template. -chat_wwan_tmpl = """ -ABORT 'NO DIAL TONE' ABORT 'NO ANSWER' ABORT 'NO CARRIER' ABORT DELAYED -'' AT -OK ATZ -OK 'AT+CGDCONT=1,"IP","{{ apn }}"' -OK ATD*99# -CONNECT '' - -""" - -script_wwan_ippreup_tmpl = """#!/bin/sh -# As WWAN is an "on demand" interface we need to re-configure it when it -# becomes 'up' - -ipparam=$6 - -# device name and metric are received using ipparam -device=`echo "$ipparam"|awk '{ print $1 }'` - -if [ "$device" != "{{ intf }}" ]; then - exit -fi - -# add some info to syslog -DIALER_PID=$(cat /var/run/{{ intf }}.pid) -logger -t pppd[$DIALER_PID] "executing $0" - -echo "{{ description }}" > /sys/class/net/{{ intf }}/ifalias - -{% if vrf -%} -logger -t pppd[$DIALER_PID] "configuring interface {{ intf }} for VRF {{ vrf }}" -ip link set dev {{ intf }} master {{ vrf }} -{% endif %} - -""" - default_config_data = { 'address': [], 'apn': '', @@ -206,10 +137,17 @@ def verify(wwan): return None def generate(wwan): + # Prepare Jinja2 template loader from files + tmpl_path = os.path.join(vyos_data_dir["data"], "templates", "wwan") + fs_loader = FileSystemLoader(tmpl_path) + env = Environment(loader=fs_loader) + + # set up configuration file path variables where our templates will be + # rendered into intf = wwan['intf'] config_wwan = f'/etc/ppp/peers/{intf}' config_wwan_chat = wwan['chat_script'] - script_wwan_pre_up = f'/etc/ppp/ip-pre-up.d/1010-vyos-vrf-{intf}' + script_wwan_pre_up = f'/etc/ppp/ip-pre-up.d/1010-vyos-wwan-{intf}' config_files = [config_wwan, config_wwan_chat, script_wwan_pre_up] @@ -231,19 +169,19 @@ def generate(wwan): else: # Create PPP configuration files - tmpl = Template(config_wwan_tmpl) + tmpl = env.get_template('peer.tmpl') config_text = tmpl.render(wwan) with open(config_wwan, 'w') as f: f.write(config_text) # Create PPP chat script - tmpl = Template(chat_wwan_tmpl) + tmpl = env.get_template('chat.tmpl') config_text = tmpl.render(wwan) with open(config_wwan_chat, 'w') as f: f.write(config_text) - # Create ip-pre-up script - tmpl = Template(script_wwan_ippreup_tmpl) + # Create script for ip-pre-up.d + tmpl = env.get_template('ip-pre-up.script.tmpl') config_text = tmpl.render(wwan) with open(script_wwan_pre_up, 'w') as f: f.write(config_text) -- cgit v1.2.3