#!/bin/bash
#
# Copyright (c) 2005-2009 Wind River Systems, Inc.
#
# SPDX-License-Identifier: GPL-2.0-only
#

usage() {
	echo "Usage: $0 {start|stop|restart} <nfs-export-dir>"
}

if [ $# != 2 ]; then
	usage
	exit 1
fi

if [[ "$1" != "start" && "$1" != "stop" && "$1" != "restart" ]]; then
	echo "Unknown command '$1'"
	usage
	exit 1
fi

if [ ! -d "$2" ]; then
	echo "Error: '$2' does not exist"
	usage
	exit 1
fi
# Ensure the nfs-export-dir is an absolute path
NFS_EXPORT_DIR=$(cd "$2" && pwd)

SYSROOT_SETUP_SCRIPT=`which oe-find-native-sysroot 2> /dev/null`
if [ -z "$SYSROOT_SETUP_SCRIPT" ]; then
	echo "Error: Unable to find the oe-find-native-sysroot script"
	echo "Did you forget to source your build environment setup script?"
	exit 1
fi
. $SYSROOT_SETUP_SCRIPT qemu-helper-native

if [ ! -e "$OECORE_NATIVE_SYSROOT/usr/bin/unfsd" ]; then
	echo "Error: Unable to find unfsd binary in $OECORE_NATIVE_SYSROOT/usr/bin/"

	echo "This shouldn't happen - something is missing from your toolchain installation"
	exit 1
fi

if [ ! -d ~/.runqemu-sdk ]; then
	mkdir -p ~/.runqemu-sdk
fi

NFS_INSTANCE=${NFS_INSTANCE:=0}
EXPORTS=~/.runqemu-sdk/exports$NFS_INSTANCE
RMTAB=~/.runqemu-sdk/rmtab$NFS_INSTANCE
NFSPID=~/.runqemu-sdk/nfs$NFS_INSTANCE.pid
MOUNTPID=~/.runqemu-sdk/mount$NFS_INSTANCE.pid

PSEUDO_OPTS="-P $OECORE_NATIVE_SYSROOT/usr"
PSEUDO_LOCALSTATEDIR="$NFS_EXPORT_DIR/../$(basename $NFS_EXPORT_DIR).pseudo_state"
export PSEUDO_LOCALSTATEDIR

if [ ! -d "$PSEUDO_LOCALSTATEDIR" ]; then
	echo "Error: $PSEUDO_LOCALSTATEDIR does not exist."
	echo "Did you create the export directory using runqemu-extract-sdk?"
	exit 1	
fi

# NFS server port number
NFSD_PORT=${NFSD_PORT:=$[ 3049 + 2 * $NFS_INSTANCE ]}
# mountd port number
MOUNTD_PORT=${MOUNTD_PORT:=$[ 3048 + 2 * $NFS_INSTANCE ]}

## For debugging you would additionally add
## --debug all
UNFSD_OPTS="-p -i $NFSPID -e $EXPORTS -n $NFSD_PORT -m $MOUNTD_PORT"

# See how we were called.
case "$1" in
  start)
	echo "Creating exports file..."
	echo "$NFS_EXPORT_DIR (rw,no_root_squash,no_all_squash,insecure)" > $EXPORTS

	echo "Starting User Mode nfsd"
	echo "  $PSEUDO $PSEUDO_OPTS $OECORE_NATIVE_SYSROOT/usr/bin/unfsd $UNFSD_OPTS"
	$PSEUDO $PSEUDO_OPTS $OECORE_NATIVE_SYSROOT/usr/bin/unfsd $UNFSD_OPTS
	if [ ! $? = 0 ]; then
		echo "Error starting nfsd"
		exit 1
	fi
	# Check to make sure everything started ok.
	if [ ! -f $NFSPID ]; then
		echo "rpc.nfsd did not start correctly"
		exit 1
	fi
	ps -fp `cat $NFSPID` > /dev/null 2> /dev/null
	if [ ! $? = 0 ]; then
		echo "rpc.nfsd did not start correctly"
		exit 1
	fi
	echo " "
	echo "On your target please remember to add the following options for NFS"
	echo "nfsroot=IP_ADDRESS:$NFS_EXPORT_DIR,nfsvers=3,port=$NFSD_PORT,udp,mountport=$MOUNTD_PORT"
	;;
  stop)
	if [ -f "$NFSPID" ]; then
		echo "Stopping rpc.nfsd"
		kill `cat $NFSPID`
		rm -f $NFSPID
	else
		echo "No PID file, not stopping rpc.nfsd"
	fi
	if [ -f "$EXPORTS" ]; then
		echo "Removing exports file"
		rm -f $EXPORTS
	fi
	;;
  restart)
	$0 stop $NFS_EXPORT_DIR
	$0 start $NFS_EXPORT_DIR 
	if [ ! $? = 0 ]; then
		exit 1
	fi
	;;
  *)
	echo "$0 {start|stop|restart} <nfs-export-dir>"
	;;
esac

exit 0
