strat9_kernel/shell/commands/
mod.rs1pub mod gfx;
6pub mod help;
7pub mod hw;
8pub mod mem;
9pub mod net;
10pub mod proc;
11pub mod ps;
12pub mod sys;
13pub mod timer;
14pub mod top;
15pub mod util;
16pub mod vfs;
17
18use super::ShellError;
19use alloc::{collections::BTreeMap, string::String};
20
21pub struct CommandRegistry {
22 commands: BTreeMap<String, fn(&[String]) -> Result<(), ShellError>>,
23}
24
25impl CommandRegistry {
26 pub fn new() -> Self {
27 let mut registry = Self {
28 commands: BTreeMap::new(),
29 };
30
31 registry.register("help", help::cmd_help);
33 registry.register("version", sys::cmd_version);
34 registry.register("clear", sys::cmd_clear);
35 registry.register("reboot", sys::cmd_reboot);
36 registry.register("shutdown", sys::cmd_shutdown);
37 registry.register("uptime", util::cmd_uptime);
38 registry.register("echo", util::cmd_echo);
39 registry.register("watch", util::cmd_watch);
40 registry.register("date", util::cmd_date);
41 registry.register("ntpdate", util::cmd_ntpdate);
42
43 registry.register("ps", ps::cmd_ps);
45 registry.register("kill", proc::cmd_kill);
46 registry.register("whoami", util::cmd_whoami);
47
48 registry.register("scheme", vfs::cmd_scheme);
50 registry.register("mount", vfs::cmd_mount);
51 registry.register("umount", vfs::cmd_umount);
52 registry.register("cd", vfs::cmd_cd);
53 registry.register("ls", vfs::cmd_ls);
54 registry.register("cat", vfs::cmd_cat);
55 registry.register("stat", vfs::cmd_stat);
56 registry.register("mkdir", vfs::cmd_mkdir);
57 registry.register("touch", vfs::cmd_touch);
58 registry.register("rm", vfs::cmd_rm);
59 registry.register("write", vfs::cmd_write);
60 registry.register("cp", vfs::cmd_cp);
61 registry.register("mv", vfs::cmd_mv);
62 registry.register("df", vfs::cmd_df);
63 registry.register("grep", util::cmd_grep);
64
65 registry.register("mem", mem::cmd_mem);
67
68 registry.register("lspci", hw::cmd_lspci);
70 registry.register("lsns", hw::cmd_lsns);
71 registry.register("cpuinfo", sys::cmd_cpuinfo);
72 registry.register("dmesg", util::cmd_dmesg);
73 registry.register("audit", util::cmd_audit);
74 registry.register("env", util::cmd_env);
75 registry.register("setenv", util::cmd_setenv);
76 registry.register("unsetenv", util::cmd_unsetenv);
77 registry.register("health", sys::cmd_health);
78
79 registry.register("strate", sys::cmd_strate);
81 registry.register("silo", sys::cmd_silo);
82 registry.register("silos", sys::cmd_silos);
83
84 registry.register("ping", net::cmd_ping);
86 registry.register("ifconfig", net::cmd_ifconfig);
87 registry.register("net", net::cmd_net);
88 registry.register("nslookup", net::cmd_nslookup);
89 registry.register("telnet", net::cmd_telnet);
90
91 registry.register("scheduler", sys::cmd_scheduler);
93 registry.register("trace", sys::cmd_trace);
94
95 registry.register("gfx", gfx::cmd_gfx);
97 registry.register("gfx-demo", gfx::cmd_gfx_demo);
98 registry.register("top", top::cmd_top);
99 registry.register("timer", timer::cmd_timer);
100
101 registry.register("test_pid", sys::cmd_test_pid);
103 registry.register("test_syscalls", sys::cmd_test_syscalls);
104 registry.register("test_mem", sys::cmd_test_mem);
105 registry.register("test_mem_stressed", sys::cmd_test_mem_stressed);
106 registry.register("wasm-run", sys::cmd_wasm_run);
107
108 registry
109 }
110
111 pub fn register(&mut self, name: &str, func: fn(&[String]) -> Result<(), ShellError>) {
112 self.commands.insert(String::from(name), func);
113 }
114
115 pub fn execute(&self, cmd: &super::parser::Command) -> Result<(), ShellError> {
116 if let Some(func) = self.commands.get(&cmd.name) {
117 func(&cmd.args)
118 } else {
119 Err(ShellError::UnknownCommand)
120 }
121 }
122
123 pub fn command_names(&self) -> alloc::vec::Vec<&str> {
125 self.commands.keys().map(|k| k.as_str()).collect()
126 }
127}