1# 2# CDDL HEADER START 3# 4# The contents of this file are subject to the terms of the 5# Common Development and Distribution License (the "License"). 6# You may not use this file except in compliance with the License. 7# 8# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9# or https://opensource.org/licenses/CDDL-1.0. 10# See the License for the specific language governing permissions 11# and limitations under the License. 12# 13# When distributing Covered Code, include this CDDL HEADER in each 14# file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15# If applicable, add the following below this CDDL HEADER, with the 16# fields enclosed by brackets "[]" replaced with your own identifying 17# information: Portions Copyright [yyyy] [name of copyright owner] 18# 19# CDDL HEADER END 20# 21 22# 23# Copyright 2007 Sun Microsystems, Inc. All rights reserved. 24# Use is subject to license terms. 25# 26 27# 28# Copyright (c) 2013, 2016 by Delphix. All rights reserved. 29# 30 31. $STF_SUITE/tests/functional/devices/devices.cfg 32. $STF_SUITE/include/libtest.shlib 33 34# 35# Create block file or character file according to parameter. 36# 37# $1 device file type 38# $2 file name 39# $3 device path (used for 'b' device type) 40# 41function create_dev_file 42{ 43 typeset filetype=$1 44 typeset filename=$2 45 typeset devstr=$3 46 47 case $filetype in 48 b) 49 case $(uname) in 50 Linux) 51 # 52 # stat(1) --format=FORMAT tokens 53 # %t - major device type in hex 54 # %T - minor device type in hex 55 # 56 major=$(stat --dereference --format="%t" "$devstr") 57 minor=$(stat --dereference --format="%T" "$devstr") 58 log_must mknod $filename b "0x${major}" "0x${minor}" 59 ;; 60 *) 61 # 62 # Get the device file information. i.e: 63 # $devstr: block special (28/768) 64 # 65 devstr=$(file $devstr) 66 major=${devstr##*\(} 67 major=${major%%/*} 68 minor=${devstr##*/} 69 minor=${minor%\)} 70 log_must mknod $filename b $major $minor 71 ;; 72 esac 73 ;; 74 c) 75 # 76 # Create device file '/dev/null', $devstr is unused. 77 # 78 case $(uname) in 79 Linux) 80 # 81 # stat(1) --format=FORMAT tokens 82 # %t - major device type in hex 83 # %T - minor device type in hex 84 # 85 major=$(stat --format="%t" /dev/null) 86 minor=$(stat --format="%T" /dev/null) 87 log_must mknod $filename c "0x${major}" "0x${minor}" 88 ;; 89 FreeBSD) 90 # 91 # Create device file '/dev/null' 92 # 93 major=13 94 minor=2 95 log_must mknod $filename b $major $minor 96 ;; 97 *) 98 major=$(getmajor mm) 99 minor=2 100 log_must mknod $filename b $major $minor 101 ;; 102 esac 103 ;; 104 *) 105 log_fail "'$filetype' is wrong." 106 ;; 107 esac 108 109 return 0 110} 111 112function cleanup 113{ 114 log_must zfs set devices=on $TESTPOOL/$TESTFS 115 log_must rm -f $TESTDIR/$TESTFILE1 116 log_must rm -f $TESTDIR/$TESTFILE2 117 log_must rm -f $TESTDIR/$TESTFILE1.out1 118 log_must rm -f $TESTDIR/$TESTFILE1.out2 119} 120