#!/bin/sh /etc/rc.common
# Copyright (C) 2006 OpenWrt.org
# Copyright (C) 2015 GuoGuo <gch981213@gmail.com>

START=99
STOP=60

USE_PROCD=1

NFS_D=/var/lib/nfs
LOCK_D=/var/lib/nfs/sm

nfsd_wrap_cfg() {
	local cfg=$1
	config_get share_dir "$cfg" 'share_dir'
	config_get share_ip "$cfg" 'share_ip' '*'
	config_get share_options "$cfg" 'share_options' 'ro,insecure,sync'
	[ -z $share_dir ] && {
		echo "Config $cfg has no share_dir.ignore this."
		return
	}
	echo "${share_dir} ${share_ip}(${share_options})" >> /var/etc/nfs_mounts
}

nfsd_cfg_gen() {
	[ -f /etc/exports ] || {
		touch /var/etc/nfs_mounts
		ln -s /var/etc/nfs_mounts /etc/exports
	}
	echo > /var/etc/nfs_mounts
	config_load 'nfsd'
	config_foreach nfsd_wrap_cfg 'nfsd_mount'
}

start_service() {
	nfsd_cfg_gen
	grep -q /proc/fs/nfsd /proc/mounts || \
		mount -t nfsd nfsd /proc/fs/nfsd
	mkdir -p $NFS_D
	mkdir -p $LOCK_D
	touch $NFS_D/rmtab

        sysctl -w fs.nfs.nlm_tcpport=32777 fs.nfs.nlm_udpport=32777 > /dev/null

	procd_open_instance
	procd_set_param command /usr/sbin/rpc.statd -p 32778 -o 32779 -F
	procd_close_instance

	/usr/sbin/exportfs -r
	/usr/sbin/rpc.nfsd

	procd_open_instance
	procd_set_param command /usr/sbin/rpc.mountd -p 32780 -F
	procd_close_instance
}

stop_service() {
	rpc.nfsd 0 2> /dev/null
	/usr/sbin/exportfs -au
	grep -q /proc/fs/nfsd /proc/mounts && \
		umount /proc/fs/nfsd
}
