From 603d47d5e2cfc9b72a6de689136231115a3e0d6f Mon Sep 17 00:00:00 2001 From: DmitriyEshenko Date: Tue, 14 Apr 2020 18:42:54 +0000 Subject: ipoe: T2256: Rewrite op-mode commands --- op-mode-definitions/ipoe-server.xml | 33 ++++++++++++------- src/completion/list_ipoe.py | 16 +++++++++ src/op_mode/ipoe-control.py | 65 +++++++++++++++++++++++++++++++++++++ 3 files changed, 102 insertions(+), 12 deletions(-) create mode 100755 src/completion/list_ipoe.py create mode 100755 src/op_mode/ipoe-control.py diff --git a/op-mode-definitions/ipoe-server.xml b/op-mode-definitions/ipoe-server.xml index c05e2d2c1..c20d3aa2a 100644 --- a/op-mode-definitions/ipoe-server.xml +++ b/op-mode-definitions/ipoe-server.xml @@ -12,24 +12,33 @@ Clear ipoe-server session - + Clear ipoe-server session by username - + - /usr/bin/accel-cmd -p 2002 terminate username $5 - - + ${vyos_op_scripts_dir}/ipoe-control.py --action="terminate" --selector="username" --target="$5" + + - Clear ipoe-server session by sid + Clear ipoe-server session by Session ID - + - /usr/bin/accel-cmd -p 2002 terminate sid $5 - + ${vyos_op_scripts_dir}/ipoe-control.py --action="terminate" --selector="sid" --target="$5" + + + + Clear ipoe-server session by interface + + + + + ${vyos_op_scripts_dir}/ipoe-control.py --action="terminate" --selector="if" --target="$5" + @@ -47,13 +56,13 @@ Show active IPoE server sessions - /usr/bin/accel-cmd -p 2002 show sessions ifname,username,called-sid,calling-sid,ip,ip6,ip6-dp,rate-limit,state,uptime,sid + ${vyos_op_scripts_dir}/ipoe-control.py --action="show_sessions" Show IPoE server statistics - /usr/bin/accel-cmd -p 2002 show stat + ${vyos_op_scripts_dir}/ipoe-control.py --action="show_stat" @@ -65,7 +74,7 @@ show ipoe-server status - if [ -e /var/run/accel_ipoe.pid ]; then /usr/bin/accel-cmd restart -p 2002; else echo "ipoe-server not running"; fi + ${vyos_op_scripts_dir}/ipoe-control.py --action="restart" diff --git a/src/completion/list_ipoe.py b/src/completion/list_ipoe.py new file mode 100755 index 000000000..c386b46a2 --- /dev/null +++ b/src/completion/list_ipoe.py @@ -0,0 +1,16 @@ +#!/usr/bin/env python3 + +import argparse +from vyos.util import popen + +if __name__ == '__main__': + parser = argparse.ArgumentParser() + parser.add_argument('--selector', help='Selector: username|ifname|sid', required=True) + args = parser.parse_args() + + output, err = popen("accel-cmd -p 2002 show sessions {0}".format(args.selector)) + if not err: + res = output.split("\r\n") + # Delete header from list + del res[:2] + print(' '.join(res)) diff --git a/src/op_mode/ipoe-control.py b/src/op_mode/ipoe-control.py new file mode 100755 index 000000000..7111498b2 --- /dev/null +++ b/src/op_mode/ipoe-control.py @@ -0,0 +1,65 @@ +#!/usr/bin/env python3 +# +# Copyright (C) 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 +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +import sys +import argparse + +from vyos.config import Config +from vyos.util import popen, run + +cmd_dict = { + 'cmd_base' : '/usr/bin/accel-cmd -p 2002 ', + 'selector' : ['if', 'username', 'sid'], + 'actions' : { + 'show_sessions' : 'show sessions', + 'show_stat' : 'show stat', + 'terminate' : 'teminate' + } +} + +def is_ipoe_configured(): + if not Config().exists_effective('service ipoe-server'): + print("Service IPoE is not configured") + sys.exit(1) + +def main(): + #parese args + parser = argparse.ArgumentParser() + parser.add_argument('--action', help='Control action', required=True) + parser.add_argument('--selector', help='Selector username|ifname|sid', required=False) + parser.add_argument('--target', help='Target must contain username|ifname|sid', required=False) + args = parser.parse_args() + + + # Check is IPoE configured + is_ipoe_configured() + + if args.action == "restart": + run(cmd_dict['cmd_base'] + "restart") + sys.exit(0) + + if args.action in cmd_dict['actions']: + if args.selector in cmd_dict['selector'] and args.target: + run(cmd_dict['cmd_base'] + "{0} {1} {2}".format(args.action, args.selector, args.target)) + else: + output, err = popen(cmd_dict['cmd_base'] + cmd_dict['actions'][args.action], decode='utf-8') + if not err: + print(output) + else: + print("IPoE server is not running") + +if __name__ == '__main__': + main() -- cgit v1.2.3