#!/bin/bash
#
# Copyright (c) 2006 Mellanox Technologies. All rights reserved.
#
# This Software is licensed under one of the following licenses:
#
# 1) under the terms of the "Common Public License 1.0" a copy of which is
# available from the Open Source Initiative, see
# http://www.opensource.org/licenses/cpl.php.
#
# 2) under the terms of the "The BSD License" a copy of which is
# available from the Open Source Initiative, see
# http://www.opensource.org/licenses/bsd-license.php.
#
# 3) under the terms of the "GNU General Public License (GPL) Version 2" a
# copy of which is available from the Open Source Initiative, see
# http://www.opensource.org/licenses/gpl-license.php.
#
# Licensee has the right to choose one of the above licenses.
#
# Redistributions of source code must retain the above copyright
# notice and one of the license notices.
#
# Redistributions in binary form must reproduce both the above copyright
# notice, one of the license notices in the documentation
# and/or other materials provided with the distribution.
#
# $Id$
#
shopt -s nullglob
prog=@CMAKE_INSTALL_FULL_SBINDIR@/srp_daemon
params=("$@")
ibdir="/sys/class/infiniband"
rescan_interval=60
pids=()
pidfile="@CMAKE_INSTALL_FULL_RUNDIR@/srp_daemon.sh.pid"
mypid=$$
trap_handler()
{
if [ "${#pids[@]}" ]; then
kill -15 "${pids[@]}" > /dev/null 2>&1
wait "${pids[@]}"
fi
logger -i -t "$(basename "$0")" "killing $prog."
/bin/rm -f "$pidfile"
exit 0
}
# Check if there is another copy running of srp_daemon.sh
if [ -f "$pidfile" ]; then
if [ -e "/proc/$(cat "$pidfile" 2>/dev/null)/status" ]; then
echo "$(basename "$0") is already running. Exiting."
exit 1
else
/bin/rm -f "$pidfile"
fi
fi
if ! echo $mypid > "$pidfile"; then
echo "Creating $pidfile for pid $mypid failed"
exit 1
fi
trap 'trap_handler' 2 15
while [ ! -d ${ibdir} ]
do
sleep 30
done
for d in ${ibdir}_mad/umad*; do
hca_id="$(<"$d/ibdev")"
port="$(<"$d/port")"
add_target="${ibdir}_srp/srp-${hca_id}-${port}/add_target"
if [ -e "${add_target}" ]; then
${prog} -e -c -n -i "${hca_id}" -p "${port}" -R "${rescan_interval}" "${params[@]}" >/dev/null 2>&1 &
pids+=($!)
fi
done
wait