#!/bin/bash
### BEGIN INIT INFO
# Provides:          vzballoon_bind
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: vzvirtio balloon daemon
# Description:       Rebind virtio device from virtio_balloon to vzvirtio_balloon.
### END INIT INFO

PATH=/sbin:/usr/sbin:$PATH
RETVAL=0

check_kernel ()
{
	[ $((echo `uname -r`; echo '4.6') | sort -Vr | head -n1) = "4.6" ] && return 0 || return 1
}

usage ()
{
	echo $"Usage: $0 {start|stop|status|restart}" 1>&2
	RETVAL=2
}

stop ()
{
	check_kernel || return 0
	# Do nothing for now, though maybe it makes sense to unload
	# vzvirtio_balloon module and bind devices back to virtio_balloon
	modprobe -r vzvirtio_balloon
	[ "$?" != "0" ] && RETVAL=4
}

start ()
{
	check_kernel || return 0
	modprobe vzvirtio_balloon
	[ "$?" != "0" ] && RETVAL=1

	if [ -d /sys/bus/virtio/drivers/virtio_balloon ]; then
	    ls /sys/bus/virtio/drivers/virtio_balloon | grep virtio | while read dev; do
		echo $dev > /sys/bus/virtio/drivers/virtio_balloon/unbind
		echo $dev > /sys/bus/virtio/drivers/vzvirtio_balloon/bind
	    done
	fi
}

status ()
{
	if /sbin/lsmod | grep vzvirtio_balloon >/dev/null 2>&1 ; then
		echo $"vzvirtio_balloon module loaded"
		RETVAL=0
	else
		echo $"vzvirtio_balloon module not loaded"
		RETVAL=3
	fi
}

restart ()
{
	stop
	start
}

case "$1" in
    stop) stop ;;
    status) status ;;
    start|restart|reload|force-reload) restart ;;
    *) usage ;;
esac

exit $RETVAL
