Skip to main content

strat9_kernel/shell/commands/
mod.rs

1//! Shell command registry and entry points
2//!
3
4pub 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        // General
31        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        // Process
43        registry.register("ps", ps::cmd_ps);
44        registry.register("kill", proc::cmd_kill);
45        registry.register("whoami", util::cmd_whoami);
46
47        // Filesystem
48        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        // Memory
65        registry.register("mem", mem::cmd_mem);
66        registry.register("frame-meta", sys::cmd_frame_meta);
67        registry.register("heap", sys::cmd_heap);
68
69        // Hardware / IPC / Diagnostics
70        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        // Silo / Strate
81        registry.register("strate", sys::cmd_strate);
82        registry.register("silo", sys::cmd_silo);
83        registry.register("silos", sys::cmd_silos);
84
85        // Network
86        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        // Scheduler
93        registry.register("scheduler", sys::cmd_scheduler);
94        registry.register("trace", sys::cmd_trace);
95
96        // Graphics
97        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        // Testing
103        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    /// Return all registered command names (sorted).
128    pub fn command_names(&self) -> alloc::vec::Vec<&str> {
129        self.commands.keys().map(|k| k.as_str()).collect()
130    }
131}