add load_kld to rc.subr
authorAlex Hornung <alex@alexhornung.com>
Sun, 13 Jul 2014 07:06:13 +0000 (08:06 +0100)
committerAlex Hornung <alex@alexhornung.com>
Sun, 13 Jul 2014 11:22:24 +0000 (12:22 +0100)
Obtained-from: FreeBSD

etc/rc.subr

index f8eb674..d3daa2e 100644 (file)
@@ -1021,6 +1021,53 @@ run_rc_script()
        esac
 }
 
+# Code common to scripts that need to load a kernel module
+# if it isn't in the kernel yet. Syntax:
+#   load_kld [-e regex] [-m module] file
+# where -e or -m chooses the way to check if the module
+# is already loaded:
+#   regex is egrep'd in the output from `kldstat -v',
+#   module is passed to `kldstat -m'.
+# The default way is as though `-m file' were specified.
+load_kld()
+{
+       local _loaded _mod _opt _re
+
+       while getopts "e:m:" _opt; do
+               case "$_opt" in
+               e) _re="$OPTARG" ;;
+               m) _mod="$OPTARG" ;;
+               *) err 3 'USAGE: load_kld [-e regex] [-m module] file' ;;
+               esac
+       done
+       shift $(($OPTIND - 1))
+       if [ $# -ne 1 ]; then
+               err 3 'USAGE: load_kld [-e regex] [-m module] file'
+       fi
+       _mod=${_mod:-$1}
+       _loaded=false
+       if [ -n "$_re" ]; then
+               if kldstat -v | egrep -q -e "$_re"; then
+                       _loaded=true
+               fi
+       else
+               if kldstat -q -m "$_mod"; then
+                       _loaded=true
+               fi
+       fi
+       if ! $_loaded; then
+               if ! kldload "$1"; then
+                       warn "Unable to load kernel module $1"
+                       return 1
+               else
+                       info "$1 kernel module loaded."
+               fi
+       else
+               debug "load_kld: $1 kernel module already loaded."
+       fi
+       return 0
+}
+
 # ltr str src dst
 #      Change every $src in $str to $dst.
 #      Useful when /usr is not yet mounted and we cannot use tr(1), sed(1) nor