home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 2007 January, February, March & April
/
Chip-Cover-CD-2007-02.iso
/
boot
/
i386
/
root
/
usr
/
share
/
YaST2
/
modules
/
OSRModuleLoading.ycp
< prev
next >
Wrap
Text File
|
2006-11-29
|
4KB
|
136 lines
/**
* File:
* OSRModuleLoading.ycp
*
* Module:
* OSRModuleLoading
*
* Summary:
* Load and unload kernel modules
*
* Author:
* Johannes Buchhold <jbuch@suse.de>
*
* $Id: OSRModuleLoading.ycp 15132 2004-03-01 20:29:12Z jsuchome $
*/
{
module "OSRModuleLoading";
import "ModuleLoading";
textdomain "repair";
/**
* Contains a list with the name of all kernel modules loaded at the first
* import of the OSRModuleLoading module.
*/
list<string> startup_loaded_modules = [];
/**
* Contains a list with the name of all kernel modules loaded with
* the Load define (OSRModuleLoading::Load(..); .
*/
list<string> loaded_modules = [];
/**
* The constructor init the startup_loaded_modules list.
*/
global define void OSRModuleLoading()``{
startup_loaded_modules = (list<string>)
maplist (string key, any v, (map<string,any>)SCR::Read(.proc.modules), ``(key));
y2milestone ("module loaded at start: %1", startup_loaded_modules);
}
/**
* Load a module if not already loaded by linuxrc and
* saves the name of the loaded modules in the list
* loaded_modules.
*
* @param string modulename
* @param string moduleargs
* @param string vendorname
* @param string devicename
* @param boolean ask_before_loading
* @param boolean with_modprobe
*
* @return symbol: `dont user choose *not* to load module
* `ok module loaded ok
* `fail module loading failed
*/
global define boolean Load( string modulename, string moduleargs,
string vendorname, string devicename,
boolean ask_before_loading,
boolean with_modprobe ) ``{
// always look whether the module is already loaded
map current_modules = $[];
if (is (SCR::Read(.proc.modules), map))
current_modules = (map) SCR::Read(.proc.modules);
if (size (current_modules[modulename]:$[]) > 0)
{
// already loaded
return true;
}
else {
y2milestone ("loading module: %1", modulename);
if ( ModuleLoading::Load (modulename, moduleargs, vendorname,
devicename, ask_before_loading,
with_modprobe ) == `ok )
{
loaded_modules = add( loaded_modules, modulename );
return true;
}
else return false;
}
}
/**
* Unload one kernel module.
* @param modname name of the kernel module that should be unloaded
*/
global define boolean Unload(string modname ) ``{
if (modname == "") return true;
if ((integer) WFM::Execute(.local.bash, sformat("/sbin/rmmod %1", modname))
!= 0 )
{
y2warning("Can't remove module %1", modname );
return false;
}
return true;
}
/**
* Unload all loaded kernel modules.
*/
global define boolean UnloadAll()``{
integer index = size(loaded_modules );
boolean error = false;
// unload all with OSR code loaded modules
while ( index != 0 && ! error ) {
if( ! Unload( loaded_modules[index - 1]:"" )) error = true;
else {
index = index - 1;
}
}
// unload all with other code loaded modules
list<string> end_loaded_modules = (list<string>)
maplist (string key, any v, (map<string,any>) SCR::Read(.proc.modules), ``(key));
list<string> unload_modules = (list<string>)
filter (string key, end_loaded_modules,
``( ! contains( startup_loaded_modules, key ))
);
foreach (string module_to_unload, unload_modules, ``{
if ( !Unload (module_to_unload))
error = true;
});
return ! error;
}
}//EOF