From 56bb811e1ce626aa783ffafe9fe8952da9bda82d Mon Sep 17 00:00:00 2001
From: Christian Poessinger <christian@poessinger.com>
Date: Sun, 13 Sep 2020 10:32:26 +0200
Subject: qat: T2857: cleanup configuration script

---
 src/conf_mode/intel_qat.py | 145 +++++++++++++++++++++------------------------
 1 file changed, 69 insertions(+), 76 deletions(-)

diff --git a/src/conf_mode/intel_qat.py b/src/conf_mode/intel_qat.py
index 1e5101a9f..86dbccaf0 100755
--- a/src/conf_mode/intel_qat.py
+++ b/src/conf_mode/intel_qat.py
@@ -1,6 +1,6 @@
 #!/usr/bin/env python3
 #
-# Copyright (C) 2019 VyOS maintainers and contributors
+# Copyright (C) 2019-2020 VyOS maintainers and contributors
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License version 2 or later as
@@ -13,94 +13,87 @@
 #
 # 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 os
 import re
 
+from sys import exit
+
 from vyos.config import Config
-from vyos import ConfigError
 from vyos.util import popen, run
-
+from vyos import ConfigError
 from vyos import airbag
 airbag.enable()
 
-# Define for recovering
-gl_ipsec_conf = None
+qat_init_script = '/etc/init.d/qat_service'
 
 def get_config(config=None):
-  if config:
-      c = config
-  else:
-      c = Config()
-  config_data = {
-    'qat_conf'     : None,
-    'ipsec_conf'   : None,
-    'openvpn_conf' : None,
-  }
-
-  if c.exists('system acceleration qat'):
-    config_data['qat_conf'] = True
-
-  if c.exists('vpn ipsec '):
-    gl_ipsec_conf = True
-    config_data['ipsec_conf'] = True
-
-  if c.exists('interfaces openvpn'):
-    config_data['openvpn_conf'] = True
-
-  return config_data
-
-# Control configured VPN service which can use QAT
-def vpn_control(action):
-  # XXX: Should these commands report failure
-  if action == 'restore' and gl_ipsec_conf:
-    return run('ipsec start')
-  return run(f'ipsec {action}')
-
-def verify(c):
-  # Check if QAT service installed
-  if not os.path.exists('/etc/init.d/qat_service'):
-    raise ConfigError("Warning: QAT init file not found")
-
-  if c['qat_conf'] == None:
-    return
-
-  # Check if QAT device exist
-  output, err = popen('lspci -nn', decode='utf-8')
-  if not err:
-    data = re.findall('(8086:19e2)|(8086:37c8)|(8086:0435)|(8086:6f54)', output)
-    #If QAT devices found
-    if not data:
-      print("\t No QAT acceleration device found")
-      sys.exit(1)
-
-def apply(c):
-  if c['ipsec_conf']:
+    if config:
+        conf = config
+    else:
+        conf = Config()
+
+    data = {}
+
+    if conf.exists(['system', 'acceleration', 'qat']):
+        data.update({'qat_enable' : ''})
+
+    if conf.exists(['vpn', 'ipsec']):
+        data.update({'ipsec' : ''})
+
+    if conf.exists(['interfaces', 'openvpn']):
+        data.update({'openvpn' : ''})
+
+    return data
+
+
+def vpn_control(action, force_ipsec=False):
+    # XXX: Should these commands report failure?
+    if action == 'restore' and force_ipsec:
+        return run('ipsec start')
+
+    return run(f'ipsec {action}')
+
+
+def verify(qat):
+    if 'qat_enable' not in qat:
+        return
+
+    # Check if QAT service installed
+    if not os.path.exists(qat_init_script):
+        raise ConfigError('QAT init script not found')
+
+    # Check if QAT device exist
+    output, err = popen('lspci -nn', decode='utf-8')
+    if not err:
+        data = re.findall(
+            '(8086:19e2)|(8086:37c8)|(8086:0435)|(8086:6f54)', output)
+        # If QAT devices found
+        if not data:
+            raise ConfigError('No QAT acceleration device found')
+
+def apply(qat):
     # Shutdown VPN service which can use QAT
-    vpn_control('stop')
+    if 'ipsec' in qat:
+        vpn_control('stop')
+
+    # Enable/Disable QAT service
+    if 'qat_enable' in qat:
+        run(f'{qat_init_script} start')
+    else:
+        run(f'{qat_init_script} stop')
 
-  # Disable QAT service
-  if c['qat_conf'] == None:
-    run('/etc/init.d/qat_service stop')
-    if c['ipsec_conf']:
-      vpn_control('start')
-    return
+    # Recover VPN service
+    if 'ipsec' in qat:
+        vpn_control('start')
 
-  # Run qat init.d script
-  run('/etc/init.d/qat_service start')
-  if c['ipsec_conf']:
-    # Recovery VPN service
-    vpn_control('start')
 
 if __name__ == '__main__':
-  try:
-    c = get_config()
-    verify(c)
-    apply(c)
-  except ConfigError as e:
-    print(e)
-    vpn_control('restore')
-    sys.exit(1)
+    try:
+        c = get_config()
+        verify(c)
+        apply(c)
+    except ConfigError as e:
+        print(e)
+        vpn_control('restore', force_ipsec=('ipsec' in c))
+        exit(1)
-- 
cgit v1.2.3