summaryrefslogtreecommitdiff
path: root/src/conf_mode/interfaces-wirelessmodem.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/conf_mode/interfaces-wirelessmodem.py')
-rwxr-xr-xsrc/conf_mode/interfaces-wirelessmodem.py128
1 files changed, 39 insertions, 89 deletions
diff --git a/src/conf_mode/interfaces-wirelessmodem.py b/src/conf_mode/interfaces-wirelessmodem.py
index 7aee5c9bd..da33d54e4 100755
--- a/src/conf_mode/interfaces-wirelessmodem.py
+++ b/src/conf_mode/interfaces-wirelessmodem.py
@@ -18,84 +18,14 @@ import os
from sys import exit
from copy import deepcopy
-from jinja2 import Template
-from subprocess import Popen, PIPE
+from jinja2 import FileSystemLoader, Environment
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.util import chown_file, chmod_x, subprocess_cmd
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 ''
-
-"""
-
-config_wwan_ip_up_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': '',
@@ -114,10 +44,6 @@ default_config_data = {
'vrf': ''
}
-def subprocess_cmd(command):
- p = Popen(command, stdout=PIPE, shell=True)
- p.communicate()
-
def check_kmod():
modules = ['option', 'usb_wwan', 'usbserial']
for module in modules:
@@ -206,12 +132,22 @@ 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_file_wwan = f'/etc/ppp/peers/{intf}'
- config_file_wwan_chat = wwan['chat_script']
- ip_up_script_file = f'/etc/ppp/ip-up.d/9991-vyos-vrf-{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-wwan-{intf}'
+ script_wwan_ip_up = f'/etc/ppp/ip-up.d/1010-vyos-wwan-{intf}'
+ script_wwan_ip_down = f'/etc/ppp/ip-down.d/1010-vyos-wwan-{intf}'
- config_files = [config_file_wwan, config_file_wwan_chat, ip_up_script_file]
+ config_files = [config_wwan, config_wwan_chat, script_wwan_pre_up,
+ script_wwan_ip_up, script_wwan_ip_down]
# Ensure directories for config files exist - otherwise create them on demand
for file in config_files:
@@ -231,25 +167,39 @@ 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_file_wwan, 'w') as f:
+ 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 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)
+
+ # Create script for ip-up.d
+ tmpl = env.get_template('ip-up.script.tmpl')
config_text = tmpl.render(wwan)
- with open(wwan['chat_script'], 'w') as f:
+ with open(script_wwan_ip_up, 'w') as f:
f.write(config_text)
- # Create ip-pre-up script
- tmpl = Template(config_wwan_ip_up_tmpl)
+ # Create script for ip-down.d
+ tmpl = env.get_template('ip-down.script.tmpl')
config_text = tmpl.render(wwan)
- with open(ip_up_script_file, 'w') as f:
+ with open(script_wwan_ip_down, 'w') as f:
f.write(config_text)
# make generated script file executable
- chmod_x_file(ip_up_script_file)
+ chmod_x(script_wwan_pre_up)
+ chmod_x(script_wwan_ip_up)
+ chmod_x(script_wwan_ip_down)
return None