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