summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Poessinger <christian@poessinger.com>2020-04-14 20:59:03 +0200
committerGitHub <noreply@github.com>2020-04-14 20:59:03 +0200
commit9bcfdc20ade97b2d746bbe1b8506524aae710ca2 (patch)
tree5796a09f5f06e7c9737a356792a3cd900a4aa391
parent8019881c599a3ae93ca859856f3b700ff4aeeb6f (diff)
parent603d47d5e2cfc9b72a6de689136231115a3e0d6f (diff)
downloadvyos-1x-9bcfdc20ade97b2d746bbe1b8506524aae710ca2.tar.gz
vyos-1x-9bcfdc20ade97b2d746bbe1b8506524aae710ca2.zip
Merge pull request #344 from DmitriyEshenko/ipoe-op
ipoe: T2256: Rewrite op-mode commands
-rw-r--r--op-mode-definitions/ipoe-server.xml33
-rwxr-xr-xsrc/completion/list_ipoe.py16
-rwxr-xr-xsrc/op_mode/ipoe-control.py65
3 files changed, 102 insertions, 12 deletions
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 @@
<help>Clear ipoe-server session</help>
</properties>
<children>
- <leafNode name="username">
+ <tagNode name="username">
<properties>
<help>Clear ipoe-server session by username</help>
<completionHelp>
- <script>/usr/bin/accel-cmd -p 2002 show sessions username | sed -e 's/ \r//g' | tail -n +3</script>
+ <script>${vyos_completion_dir}/list_ipoe.py --selector="username"</script>
</completionHelp>
</properties>
- <command>/usr/bin/accel-cmd -p 2002 terminate username $5</command>
- </leafNode>
- <leafNode name="sid">
+ <command>${vyos_op_scripts_dir}/ipoe-control.py --action="terminate" --selector="username" --target="$5"</command>
+ </tagNode>
+ <tagNode name="sid">
<properties>
- <help>Clear ipoe-server session by sid</help>
+ <help>Clear ipoe-server session by Session ID</help>
<completionHelp>
- <script>/usr/bin/accel-cmd -p 2002 show sessions sid | sed -e 's/ \r//g' | tail -n +3</script>
+ <script>${vyos_completion_dir}/list_ipoe.py --selector="sid"</script>
</completionHelp>
</properties>
- <command>/usr/bin/accel-cmd -p 2002 terminate sid $5</command>
- </leafNode>
+ <command>${vyos_op_scripts_dir}/ipoe-control.py --action="terminate" --selector="sid" --target="$5"</command>
+ </tagNode>
+ <tagNode name="interface">
+ <properties>
+ <help>Clear ipoe-server session by interface</help>
+ <completionHelp>
+ <script>${vyos_completion_dir}/list_ipoe.py --selector="ifname"</script>
+ </completionHelp>
+ </properties>
+ <command>${vyos_op_scripts_dir}/ipoe-control.py --action="terminate" --selector="if" --target="$5"</command>
+ </tagNode>
</children>
</node>
</children>
@@ -47,13 +56,13 @@
<properties>
<help>Show active IPoE server sessions</help>
</properties>
- <command>/usr/bin/accel-cmd -p 2002 show sessions ifname,username,called-sid,calling-sid,ip,ip6,ip6-dp,rate-limit,state,uptime,sid</command>
+ <command>${vyos_op_scripts_dir}/ipoe-control.py --action="show_sessions"</command>
</leafNode>
<leafNode name="statistics">
<properties>
<help>Show IPoE server statistics</help>
</properties>
- <command>/usr/bin/accel-cmd -p 2002 show stat</command>
+ <command>${vyos_op_scripts_dir}/ipoe-control.py --action="show_stat"</command>
</leafNode>
</children>
</node>
@@ -65,7 +74,7 @@
<properties>
<help>show ipoe-server status</help>
</properties>
- <command>if [ -e /var/run/accel_ipoe.pid ]; then /usr/bin/accel-cmd restart -p 2002; else echo "ipoe-server not running"; fi</command>
+ <command>${vyos_op_scripts_dir}/ipoe-control.py --action="restart"</command>
</leafNode>
</children>
</node>
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 <http://www.gnu.org/licenses/>.
+
+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()