#!/usr/local/bin/cbsd
#v12.0.4
MYARG="mode"
MYOPTARG="jname devpath ioslots maxq qsz ram sectsz ser"
MYDESC="Manage bhyve NVMe storage controller"
CBSDMODULE="bhyve"
EXTHELP="wf_bhyve"
ADDHELP="mode=attach,detach,list\n"

. ${subrdir}/nc.subr

. ${cbsdinit}

. ${system}
. ${subrdir}/bhyve.subr
. ${subrdir}/virtual.subr
. ${distdir}/share/bhyve/bhyve-nvme.subr
. ${distdir}/share/bhyve/bhyve-dsk.subr

nvme_attach()
{
	local _val
	for i in jname devpath ioslots maxq qsz ram sectsz ser; do
		_val=
		eval _val="\$$i"
		[ -z "${_val}" ] && err 1 "${N1_COLOR}bhyve-nvme error: ${N2_COLOR}${i}= ${N1_COLOR}is mandatory${N0_COLOR}"
	done

	local lunname=$( /usr/bin/basename ${devpath} )

	add_nvme -d "${devpath}" -i "${ioslots}" -m "${maxq}" -q "${qsz}" -r "${ram}" -s "${sectsz}" -v "${ser}"
	add_dsk -c "nvme" -d "${devpath}" -s "${ram}"
	media mode=register name="hdd-${lunname}" path="${devpath}" type="hdd" jname="${jname}"
}

nvme_detach()
{
	local _val
	for i in jname devpath; do
		_val=
		eval _val="\$$i"
		[ -z "${_val}" ] && err 1 "${N1_COLOR}bhyve-nvme error: ${N2_COLOR}${i}= ${N1_COLOR}is mandatory${N0_COLOR}"
	done

	cbsdsqlrw ${jailsysdir}/${jname}/local.sqlite DELETE FROM bhyve_nvme WHERE devpath=\"${devpath}\"
}

case "${mode}" in
	attach)
		nvme_attach
		;;
	detach)
		nvme_detach
		;;
	list)
		bhyve-nvme-list
		;;
	*)
		err 1 "${N1_COLOR}Unknown mode: ${N2_COLOR}${mode}${N0_COLOR}"
		;;
esac
