Overview | Index by: file name |
procedure name |
procedure call |
annotation
kernel-1.0.tm
(annotations | original source)
#
# Copyright (C) 2010 Alexandros Stergiakis <alsterg@gmail.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# 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 Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
#//#
# The "kernel" module defines command for low level system configuration.
#//#
module require base 1.0
module provide kernel 1.0
namespace eval ::module::kernel {
namespace import ::helper::* ::module::api::*
proc description {} {
return "Low level system functions"
}
proc version {} {
}
proc check {} {
foreach feature [list \
CONFIG_DEPMOD \
CONFIG_LSMOD \
CONFIG_RMMOD \
CONFIG_MODPROBE \
CONFIG_PS \
CONFIG_MOUNT \
CONFIG_WHO \
CONFIG_BB_SYSCTL \
CONFIG_FREE] {
if {! [::helper::busybox_has $feature]} { ;# Can return error.
error "Busybox doesn't have support for $feature."
}
}
}
proc reset {} {
variable kernel_modules
foreach mod [lreverse $kernel_modules] {
exec rmmod $mod
lremove kernel_modules $mod
}
}
proc constructor {} {
log::Info "Loading \"kernel\" module: [description]"
check
variable kernel_modules {}
reset
# Finally load Command Specs
sysconf loadspecs "modules/kernel/kernel.specs"
}
proc destructor {} {
# First unload Command Specs
sysconf remove "kernel"
reset
}
################
# Handlers
################
# @limit display IPs
command ShUsers {cmdline argstart sid out no arguments args} {
if {[dict exists $arguments all]} {
exec who -a
} else {
exec who
}
}
command ShMemory {cmdline argstart sid out no arguments args} {
Global PROC_DIR
if {[dict exists $arguments detailed]} {
::fileutil::cat [file join $PROC_DIR "meminfo"]
} else {
exec free
}
}
command ShProtocols {cmdline argstart sid out no arguments args} {
Global PROC_DIR
::fileutil::cat [file join $PROC_DIR "net" "protocols"]
}
command ShKernelFilesystems {cmdline argstart sid out no arguments args} {
Global PROC_DIR
::fileutil::cat [file join $PROC_DIR "filesystems"]
}
command ShProcs {cmdline argstart sid out no arguments args} {
exec ps
}
command ShKernelModules {cmdline argstart sid out no arguments args} {
exec lsmod
}
command ShKernelMounts {cmdline argstart sid out no arguments args} {
exec mount
}
command ShKernelSwaps {cmdline argstart sid out no arguments args} {
Global PROC_DIR
::fileutil::cat [file join $PROC_DIR "swaps"]
}
# @todo Improve formatting.
command ShCpu {cmdline argstart sid out no arguments args} {
Global PROC_DIR
::fileutil::cat [file join $PROC_DIR "cpuinfo"]
}
command ShKernelParams {cmdline argstart sid out no arguments args} {
if {[dict exists $arguments NAME]} {
exec sysctl [dict get $arguments NAME]
} else {
exec sysctl -a
}
}
command UpdateModules {cmdline argstart sid out no arguments args} {
bgexec depmod
}
# Note: It will try to unload modules loaded by other means as well.
# Note: It won't record modules loaded by 'modprobe' in order to satisfy dependencies.
command KernelModule {cmdline argstart sid out no arguments args} {
variable kernel_modules
set mod [dict get $arguments MODULE]
if {$no} {
exec rmmod $mod
lremove kernel_modules $mod ;# will ignore if not loaded by MikroConf
} else {
exec modprobe $mod
lappend kernel_modules $mod
}
return
}
proc print_KernelModule {} {
variable kernel_modules
set result {}
foreach m $kernel_modules {
append result "kernel module $m\n"
}
if {! [lempty $result]} {
set result "#\n# Kernel Modules:\n${result}\n"
}
return $result
}
proc dlist_modules {sid args} {
Global MOD_DIR
set modules [list]
foreach f [::fileutil::findByPattern $MOD_DIR -- *.ko] {
if {! [file isfile $f]} { break }
lappend modules [file rootname [file tail $f]]
}
return $modules
}
} ;# End of Namespace
Overview | Index by: file name |
procedure name |
procedure call |
annotation
File generated 2010-03-13 at 22:28.