1*3ce53722SRobert Mustacchi#!/usr/bin/ksh
2*3ce53722SRobert Mustacchi#
3*3ce53722SRobert Mustacchi#
4*3ce53722SRobert Mustacchi# This file and its contents are supplied under the terms of the
5*3ce53722SRobert Mustacchi# Common Development and Distribution License ("CDDL"), version 1.0.
6*3ce53722SRobert Mustacchi# You may only use this file in accordance with the terms of version
7*3ce53722SRobert Mustacchi# 1.0 of the CDDL.
8*3ce53722SRobert Mustacchi#
9*3ce53722SRobert Mustacchi# A full copy of the text of the CDDL should have accompanied this
10*3ce53722SRobert Mustacchi# source.  A copy of the CDDL is also available via the Internet at
11*3ce53722SRobert Mustacchi# http://www.illumos.org/license/CDDL.
12*3ce53722SRobert Mustacchi#
13*3ce53722SRobert Mustacchi
14*3ce53722SRobert Mustacchi#
15*3ce53722SRobert Mustacchi# Copyright 2020 Oxide Computer Company
16*3ce53722SRobert Mustacchi#
17*3ce53722SRobert Mustacchi
18*3ce53722SRobert Mustacchi#
19*3ce53722SRobert Mustacchi# Sit in a loop trying to unload the driver specified as an argument.
20*3ce53722SRobert Mustacchi#
21*3ce53722SRobert Mustacchi
22*3ce53722SRobert Mustacchiksensor_id=
23*3ce53722SRobert Mustacchiksensor_drv=
24*3ce53722SRobert Mustacchiksensor_to=30
25*3ce53722SRobert Mustacchiksensor_skew=5
26*3ce53722SRobert Mustacchi
27*3ce53722SRobert Mustacchifunction get_id
28*3ce53722SRobert Mustacchi{
29*3ce53722SRobert Mustacchi
30*3ce53722SRobert Mustacchi	while [[ -z "$ksensor_id" ]]; do
31*3ce53722SRobert Mustacchi		sleep 1
32*3ce53722SRobert Mustacchi		ksensor_id=$(modinfo | awk "{
33*3ce53722SRobert Mustacchi			if (\$6 == \"$1\") {
34*3ce53722SRobert Mustacchi			    print \$1
35*3ce53722SRobert Mustacchi			} }")
36*3ce53722SRobert Mustacchi	done
37*3ce53722SRobert Mustacchi}
38*3ce53722SRobert Mustacchi
39*3ce53722SRobert Mustacchifunction unload
40*3ce53722SRobert Mustacchi{
41*3ce53722SRobert Mustacchi	while :; do
42*3ce53722SRobert Mustacchi		if ! modunload -i $ksensor_id 2>/dev/null; then
43*3ce53722SRobert Mustacchi			echo "failed to unload $ksensor_drv" >&2
44*3ce53722SRobert Mustacchi		else
45*3ce53722SRobert Mustacchi			echo "unloaded $ksensor_drv"
46*3ce53722SRobert Mustacchi		fi
47*3ce53722SRobert Mustacchi		sleep $((($RANDOM % $ksensor_to) + $ksensor_skew))
48*3ce53722SRobert Mustacchi	done
49*3ce53722SRobert Mustacchi}
50*3ce53722SRobert Mustacchi
51*3ce53722SRobert Mustacchiif [[ -z "$1" ]]; then
52*3ce53722SRobert Mustacchi	echo "Missing required driver name" >&2
53*3ce53722SRobert Mustacchi	exit 1
54*3ce53722SRobert Mustacchifi
55*3ce53722SRobert Mustacchi
56*3ce53722SRobert Mustacchiksensor_drv=$1
57*3ce53722SRobert Mustacchiget_id $ksensor_drv
58*3ce53722SRobert Mustacchiprintf "Got module id for %s: %u\n" "$ksensor_drv" $ksensor_id
59*3ce53722SRobert Mustacchiunload
60