Whamcloud - gitweb
LU-9098 lnet: Move lnet_routes.conf to /etc
[fs/lustre-release.git] / lustre / scripts / lnet
index 7033891..01f7e4f 100644 (file)
@@ -6,7 +6,7 @@
 # chkconfig: - 59 76
 # description:  Part of the lustre file system.
 # probe: true
-# config: /etc/sysconfig/lustre
+# config: /etc/sysconfig/lnet
 
 # Source function library.
 [ -f /etc/rc.d/init.d/functions ] && . /etc/rc.d/init.d/functions
 # Check for and source configuration file otherwise set defaults
 [ -f /etc/sysconfig/lnet ] && . /etc/sysconfig/lnet
 
-declare -r TOP_MODULES=(       \
-       obdecho                 \
-       llite                   \
-       lustre                  \
-       osc                     \
-       lov                     \
-       mds                     \
-       mdc                     \
-       mgs                     \
-       mgc                     \
-       ost                     \
-       obdfilter               \
-       lquota                  \
-       ptlrpc                  \
-)
-declare -r BOTTOM_MODULES=(    \
-       ksocklnd                \
-       kqswlnd                 \
-       ko2iblnd                \
-       fsfilt_ldiskfs          \
-       obdclass                \
-       lnet                    \
-       lvfs                    \
-       libcfs                  \
-       ldiskfs                 \
-)
-
 declare -r awkprog='BEGIN { rc = -1 }
                       { if ( $1 == module_name ) { rc = $3; exit; } }
                    END { print rc }'
@@ -79,58 +52,6 @@ run_postexec_check ()
        fi
 }
 
-remove_modules ()
-{
-       local modules="${@}"
-       local ref_cnt
-
-       for mod in $modules; do
-               ref_cnt=`/sbin/lsmod | awk "$awkprog" "module_name=$mod"`
-               if [ $ref_cnt -lt 0 ]; then
-                       # module not loaded, skip it
-                       continue
-               fi
-               if [ $ref_cnt -gt 0 ]; then
-                       # module in use.  maybe it just needs a few seconds
-                       # after removal of previous modules.
-                       sleep 5
-                       ref_cnt=`/sbin/lsmod | awk "$awkprog" module_name=$mod`
-               fi
-               if [ $ref_cnt -eq 0 ]; then
-                       # unload the module
-                       echo "Removing module $mod"
-                       /sbin/rmmod $mod
-                       if [ $? -ne 0 ]; then
-                               echo "ERROR: Failed to remove module $mod."
-                               return 1
-                       fi
-               else
-                       # boo!  module still in use.
-                       echo "ERROR: Module $mod has non-zero reference count."
-                       return 1
-               fi
-       done
-
-       return 0
-}
-
-stop_lnet ()
-{
-       local errmsg=`/usr/sbin/lctl network unconfigure 2>&1`
-       if [ $? -gt 0 ]; then
-               # The following error message means that lnet is already
-               # unconfigured, and the modules are not loaded.
-               echo $errmsg | grep "LNET unconfigure error 19" > /dev/null
-               if [ $? -gt 0 ]; then
-                       return 0
-               else
-                       echo "$errmsg"
-                       return 1
-               fi
-       fi
-       return 0
-}
-
 status ()
 {
        old_nullglob="`shopt -p nullglob`"
@@ -146,42 +67,72 @@ status ()
        egrep -q "lnet" /proc/modules && STATE="loaded"
 
        # check for any routes - on a portals router this is the only thing
-       [ "`cat /proc/sys/lnet/routes 2> /dev/null`" ] && STATE="running" && RETVAL=0
+       VAR=$(lctl get_param -n routes 2>&1)
+       if [ $? = 0 ] ; then
+               STATE="running"
+               RETVAL=0
+       fi
 
        # check if this is a router
-       if [ -d /proc/sys/lnet ]; then
-               ROUTER="`cat /proc/sys/lnet/routes | head -1 | grep -i -c \"Routing enabled\"`"
-               if [[ ! -z ${ROUTER} && ${ROUTER} -ge 1 ]]; then
-                       STATE="running"
-                       RETVAL=0
-               fi
+       if [[ "$(lctl get_param -n routes)" =~ "Routing enabled" ]]; then
+               STATE="running"
+               RETVAL=0
        fi
 
        # check for error in health_check
-       HEALTH="/proc/fs/lustre/health_check"
-       [ -f "$HEALTH" ] && grep -q "NOT HEALTHY" $HEALTH && STATE="unhealthy" && RETVAL=1
+       local health_check=$(lctl get_param -n health_check)
+       if [[ "$health_check" =~ "NOT HEALTHY" ]]; then
+               STATE="unhealthy"
+               RETVAL=1
+       fi
 
-       # check for LBUG
-       [ -f  "$HEALTH" ] && grep -q "LBUG" $HEALTH && STATE="LBUG" && RETVAL=152
+       if [[ "$health_check" =~ "LBUG" ]]; then
+               STATE="LBUG"
+               RETVAL=152
+       fi
 
        echo $STATE
        eval $old_nullglob
 }
 
+LUSTRE_ROUTES_CONFIG_FILE="/etc/lnet_routes.conf"
+LUSTRE_LNET_CONFIG_FILE="/etc/sysconfig/lnet.conf"
+LUSTRE_LNET_CONFIG_UTILITY="/usr/sbin/lnetctl"
+
 # See how we were called.
 case "$1" in
   start)
        run_preexec_check "start"
        touch /var/lock/subsys/lnet
        modprobe lnet || exit 1
-       lctl network up || exit 1
+       # if lnet.conf file exists then use lnetctl lnet configure, since
+       # that doesn't load the networks and routes defined in the mod
+       # params.  The appropriate configuration will be picked up from
+       # the lnet.conf YAML file.
+       if [ -x $LUSTRE_LNET_CONFIG_UTILITY -a -f "$LUSTRE_LNET_CONFIG_FILE" ]; then
+               $LUSTRE_LNET_CONFIG_UTILITY lnet configure || exit 1
+       else
+               lctl network up || exit 1
+       fi
+       # if an lnet.conf file exists then pass that to the lnetctl
+       # utility for parsing.  This will configure the items defined
+       # in YAML format in the config file.
+       if [ -x $LUSTRE_LNET_CONFIG_UTILITY -a -f "$LUSTRE_LNET_CONFIG_FILE" ]; then
+               $LUSTRE_LNET_CONFIG_UTILITY import < $LUSTRE_LNET_CONFIG_FILE
+       fi
+       # if a routes config file is given then use it to configure the
+       # routes if not then default to LUSTRE_ROUTES_CONFIG_FILE
+       if [ -f "$2" ]; then
+               lustre_routes_config $2
+       elif [ -f "$LUSTRE_ROUTES_CONFIG_FILE" ]; then
+               lustre_routes_config $LUSTRE_ROUTES_CONFIG_FILE
+       fi
        run_postexec_check "start"
        ;;
   stop)
        run_preexec_check "stop"
-       remove_modules ${TOP_MODULES[*]} || exit 1
-       stop_lnet || exit 1
-       remove_modules ${BOTTOM_MODULES[*]} || exit 1
+       lctl network down || exit 1
+       lustre_rmmod || exit 1
        rm -f /var/lock/subsys/lnet
        run_postexec_check "stop"
        ;;
@@ -207,7 +158,7 @@ case "$1" in
        }
        ;;
   *)
-       echo $"Usage: lustre {start|stop|status|restart|reload|condrestart}"
+       echo $"Usage: lnet {start|stop|status|restart|reload|condrestart}"
        exit 1
 esac