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