summaryrefslogtreecommitdiff
path: root/src/op_mode
diff options
context:
space:
mode:
authorJohn Estabrook <jestabro@vyos.io>2024-06-24 07:12:25 -0500
committerGitHub <noreply@github.com>2024-06-24 07:12:25 -0500
commit819b4a3556481ec516caca2731714ff69a57c2a5 (patch)
treef1c739d61ed5f6876cfa182e0a6f6d419fc57d0a /src/op_mode
parentc90a55375f6b60ba0d0d545b33927a2aae4d6aad (diff)
parent6114192dbe3f8bfd69dc3509da3bfc7125636ab3 (diff)
downloadvyos-1x-819b4a3556481ec516caca2731714ff69a57c2a5.tar.gz
vyos-1x-819b4a3556481ec516caca2731714ff69a57c2a5.zip
Merge pull request #3683 from dmbaturin/T6501-lsmod-on-steroids
op mode: T6501: add "run show kernel modules"
Diffstat (limited to 'src/op_mode')
-rwxr-xr-xsrc/op_mode/kernel_modules.py82
1 files changed, 82 insertions, 0 deletions
diff --git a/src/op_mode/kernel_modules.py b/src/op_mode/kernel_modules.py
new file mode 100755
index 000000000..e381a1df7
--- /dev/null
+++ b/src/op_mode/kernel_modules.py
@@ -0,0 +1,82 @@
+#!/usr/bin/env python3
+#
+# Copyright (C) 2024 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/>.
+#
+# Purpose:
+# Provides commands for retrieving information about kernel modules.
+
+import sys
+import typing
+
+import vyos.opmode
+
+
+lsmod_tmpl = """
+{% for m in modules -%}
+Module: {{m.name}}
+
+{% if m.holders -%}
+Holders: {{m.holders | join(", ")}}
+{%- endif %}
+
+{% if m.drivers -%}
+Drivers: {{m.drivers | join(", ")}}
+{%- endif %}
+
+{% for k in m.fields -%}
+{{k}}: {{m["fields"][k]}}
+{% endfor %}
+{% if m.parameters %}
+
+Parameters:
+
+{% for p in m.parameters -%}
+{{p}}: {{m["parameters"][p]}}
+{% endfor -%}
+{% endif -%}
+
+-------------
+
+{% endfor %}
+"""
+
+def _get_raw_data(module=None):
+ from vyos.utils.kernel import get_module_data, lsmod
+
+ if module:
+ return [get_module_data(module)]
+ else:
+ return lsmod()
+
+def show(raw: bool, module: typing.Optional[str]):
+ from jinja2 import Template
+
+ data = _get_raw_data(module=module)
+
+ if raw:
+ return data
+ else:
+ t = Template(lsmod_tmpl)
+ output = t.render({"modules": data})
+ return output
+
+if __name__ == '__main__':
+ try:
+ res = vyos.opmode.run(sys.modules[__name__])
+ if res:
+ print(res)
+ except (ValueError, vyos.opmode.Error) as e:
+ print(e)
+ sys.exit(1)