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 >
Text File  |  2006-11-29  |  4KB  |  136 lines

  1. /**
  2.  *  File:
  3.  *    OSRModuleLoading.ycp
  4.  *
  5.  *  Module:
  6.  *    OSRModuleLoading
  7.  *
  8.  *  Summary:
  9.  *    Load and unload kernel modules
  10.  *
  11.  *  Author:
  12.  *    Johannes Buchhold <jbuch@suse.de>
  13.  *
  14.  * $Id: OSRModuleLoading.ycp 15132 2004-03-01 20:29:12Z jsuchome $
  15.  */
  16. {
  17.   module "OSRModuleLoading";
  18.  
  19.   import "ModuleLoading";
  20.  
  21.   textdomain "repair";
  22.  
  23.   /**
  24.    * Contains a list with the name of all kernel modules loaded at the first
  25.    * import of the OSRModuleLoading module.
  26.    */
  27.   list<string> startup_loaded_modules    = [];
  28.  
  29.   /**
  30.    * Contains a list with the name of all kernel modules loaded with
  31.    * the Load define (OSRModuleLoading::Load(..); .
  32.    */
  33.   list<string> loaded_modules        = [];
  34.  
  35.   /**
  36.    * The constructor init the startup_loaded_modules list.
  37.    */
  38.   global define void OSRModuleLoading()``{
  39.     startup_loaded_modules = (list<string>)
  40.     maplist (string key, any v, (map<string,any>)SCR::Read(.proc.modules), ``(key));
  41.  
  42.     y2milestone ("module loaded at start: %1", startup_loaded_modules);
  43.   }
  44.  
  45.   /**
  46.    * Load a module if not already loaded by linuxrc and
  47.    * saves the name of the loaded modules in the list
  48.    * loaded_modules.
  49.    *
  50.    * @param    string modulename
  51.    * @param    string moduleargs
  52.    * @param    string vendorname
  53.    * @param    string devicename
  54.    * @param    boolean ask_before_loading
  55.    * @param    boolean with_modprobe
  56.    *
  57.    * @return symbol:    `dont    user choose *not* to load module
  58.    *            `ok    module loaded ok
  59.    *            `fail    module loading failed
  60.    */
  61.   global define boolean Load( string modulename, string moduleargs,
  62.                   string vendorname, string devicename,
  63.                   boolean ask_before_loading,
  64.                   boolean with_modprobe ) ``{
  65.       // always look whether the module is already loaded
  66.       map current_modules = $[];
  67.       if (is (SCR::Read(.proc.modules), map))
  68.           current_modules = (map) SCR::Read(.proc.modules);
  69.       if (size (current_modules[modulename]:$[]) > 0)
  70.       {
  71.         // already loaded
  72.         return true;
  73.       }
  74.       else {
  75.         y2milestone ("loading module: %1", modulename);
  76.         if ( ModuleLoading::Load (modulename, moduleargs, vendorname,
  77.                      devicename, ask_before_loading,
  78.                      with_modprobe ) == `ok )
  79.         {
  80.         loaded_modules = add( loaded_modules, modulename );
  81.             return true;
  82.         }
  83.         else return false;
  84.       }
  85.   }
  86.  
  87.   /**
  88.    * Unload one kernel module.
  89.    * @param modname name of the kernel module that should be unloaded
  90.    */
  91.   global define boolean Unload(string modname ) ``{
  92.  
  93.     if (modname == "") return true;
  94.  
  95.     if ((integer) WFM::Execute(.local.bash, sformat("/sbin/rmmod %1", modname))
  96.     != 0 )
  97.     {
  98.         y2warning("Can't remove module %1", modname );
  99.     return false;
  100.     }
  101.     return true;
  102.   }
  103.  
  104.   /**
  105.    * Unload all loaded kernel modules.
  106.    */
  107.   global define boolean UnloadAll()``{
  108.       integer index = size(loaded_modules );
  109.       boolean error = false;
  110.  
  111.       // unload all with OSR code loaded modules
  112.       while ( index != 0 && ! error  ) {
  113.       if( ! Unload( loaded_modules[index - 1]:"" )) error = true;
  114.       else {
  115.           index = index - 1;
  116.       }
  117.       }
  118.  
  119.       // unload all with other code loaded modules
  120.       list<string> end_loaded_modules = (list<string>)
  121.     maplist (string key, any v, (map<string,any>) SCR::Read(.proc.modules), ``(key));
  122.  
  123.       list<string> unload_modules    = (list<string>)
  124.     filter (string key, end_loaded_modules,
  125.         ``( ! contains( startup_loaded_modules, key ))
  126.     );
  127.  
  128.       foreach (string module_to_unload, unload_modules, ``{
  129.           if ( !Unload (module_to_unload))
  130.             error = true;
  131.       });
  132.       return ! error;
  133.   }
  134.  
  135. }//EOF
  136.