+check_gss_daemon_facet() {
+ facet=$1
+ dname=$2
+
+ num=`do_facet $facet ps -o cmd -C $dname | grep $dname | wc -l`
+ if [ $num -ne 1 ]; then
+ echo "$num instance of $dname on $facet"
+ return 1
+ fi
+ return 0
+}
+
+send_sigint() {
+ local facet=$1
+ shift
+ do_facet $facet "killall -2 $@ 2>/dev/null || true"
+}
+
+start_gss_daemons() {
+ # starting on MDT
+ for num in `seq $MDSCOUNT`; do
+ do_facet mds$num "$LSVCGSSD -v"
+ do_facet mds$num "$LGSSD -v"
+ done
+ # starting on OSTs
+ for num in `seq $OSTCOUNT`; do
+ do_facet ost$num "$LSVCGSSD -v"
+ done
+ # starting on client
+ # FIXME: is "client" the right facet name?
+ do_facet client "$LGSSD -v"
+
+ # wait daemons entering "stable" status
+ sleep 5
+
+ #
+ # check daemons are running
+ #
+ for num in `seq $MDSCOUNT`; do
+ check_gss_daemon_facet mds$num lsvcgssd
+ check_gss_daemon_facet mds$num lgssd
+ done
+ for num in `seq $OSTCOUNT`; do
+ check_gss_daemon_facet ost$num lsvcgssd
+ done
+ check_gss_daemon_facet client lgssd
+}
+
+stop_gss_daemons() {
+ for num in `seq $MDSCOUNT`; do
+ send_sigint mds$num lsvcgssd lgssd
+ done
+ for num in `seq $OSTCOUNT`; do
+ send_sigint ost$num lsvcgssd
+ done
+ send_sigint client lgssd
+}
+
+init_krb5_env() {
+ if [ ! -z $SEC ]; then
+ MDS_MOUNT_OPTS=$MDS_MOUNT_OPTS,sec=$SEC
+ OST_MOUNT_OPTS=$OST_MOUNT_OPTS,sec=$SEC
+ fi
+
+ if [ ! -z $USING_KRB5 ]; then
+ start_gss_daemons
+ fi
+}
+
+cleanup_krb5_env() {
+ if [ ! -z $USING_KRB5 ]; then
+ stop_gss_daemons
+ # maybe cleanup credential cache?
+ fi
+}
+
+mdsdevlabel() {
+ local num=$1
+ local device=`mdsdevname $num`
+ local label=`do_facet mds$num "e2label ${device}" | grep -v "CMD: "`
+ echo -n $label
+}
+
+ostdevlabel() {
+ local num=$1
+ local device=`ostdevname $num`
+ local label=`do_facet ost$num "e2label ${device}" | grep -v "CMD: "`
+ echo -n $label
+}
+