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