106925cdb4867024b3b5f54445be3ba895c352966mridge#!/bin/bash
206925cdb4867024b3b5f54445be3ba895c352966mridge
306925cdb4867024b3b5f54445be3ba895c352966mridge
406925cdb4867024b3b5f54445be3ba895c352966mridge##############################################################
506925cdb4867024b3b5f54445be3ba895c352966mridge#
606925cdb4867024b3b5f54445be3ba895c352966mridge#  Copyright (c) International Business Machines  Corp., 2003
706925cdb4867024b3b5f54445be3ba895c352966mridge#
806925cdb4867024b3b5f54445be3ba895c352966mridge#  This program is free software;  you can redistribute it and/or modify
906925cdb4867024b3b5f54445be3ba895c352966mridge#  it under the terms of the GNU General Public License as published by
1006925cdb4867024b3b5f54445be3ba895c352966mridge#  the Free Software Foundation; either version 2 of the License, or
1106925cdb4867024b3b5f54445be3ba895c352966mridge#  (at your option) any later version.
1206925cdb4867024b3b5f54445be3ba895c352966mridge#
1306925cdb4867024b3b5f54445be3ba895c352966mridge#  This program is distributed in the hope that it will be useful,
1406925cdb4867024b3b5f54445be3ba895c352966mridge#  but WITHOUT ANY WARRANTY;  without even the implied warranty of
1506925cdb4867024b3b5f54445be3ba895c352966mridge#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
1606925cdb4867024b3b5f54445be3ba895c352966mridge#  the GNU General Public License for more details.
1706925cdb4867024b3b5f54445be3ba895c352966mridge#
1806925cdb4867024b3b5f54445be3ba895c352966mridge#  You should have received a copy of the GNU General Public License
1906925cdb4867024b3b5f54445be3ba895c352966mridge#  along with this program;  if not, write to the Free Software
204548c6cf9bcdd96d8303caa4130ab638b61f8a30Wanlong Gao#  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
2106925cdb4867024b3b5f54445be3ba895c352966mridge#
2206925cdb4867024b3b5f54445be3ba895c352966mridge#  FILE        : sysfs.sh
2306925cdb4867024b3b5f54445be3ba895c352966mridge#  USAGE       : sysfs.sh [ -k <kernel_module> ]
2406925cdb4867024b3b5f54445be3ba895c352966mridge#
2506925cdb4867024b3b5f54445be3ba895c352966mridge#  DESCRIPTION : A script that will test sysfs on Linux system.
2637550cf5a86c7ca7424a2a318dd64e550f13f5dfChris Dearman#  REQUIREMENTS: CONFIG_DUMMY must have been used to build kernel, and the
2721294e18de04875dc599cdcaf4fb344d226feb6brobbiew#		 dummy network module must exist.
2806925cdb4867024b3b5f54445be3ba895c352966mridge#
2906925cdb4867024b3b5f54445be3ba895c352966mridge#  HISTORY     :
3006925cdb4867024b3b5f54445be3ba895c352966mridge#      06/24/2003 Prakash Narayana (prakashn@us.ibm.com)
3106925cdb4867024b3b5f54445be3ba895c352966mridge#
3206925cdb4867024b3b5f54445be3ba895c352966mridge#  CODE COVERAGE: 31.3% - fs/sysfs (Total Coverage)
3306925cdb4867024b3b5f54445be3ba895c352966mridge#
3406925cdb4867024b3b5f54445be3ba895c352966mridge#                  0.0% - fs/sysfs/bin.c
3506925cdb4867024b3b5f54445be3ba895c352966mridge#                 61.8% - fs/sysfs/dir.c
3606925cdb4867024b3b5f54445be3ba895c352966mridge#                 27.5% - fs/sysfs/file.c
3706925cdb4867024b3b5f54445be3ba895c352966mridge#                 40.4% - fs/sysfs/inode.c
3806925cdb4867024b3b5f54445be3ba895c352966mridge#                 41.2% - fs/sysfs/mount.c
3906925cdb4867024b3b5f54445be3ba895c352966mridge#                 58.1% - fs/sysfs/symlink.c
4006925cdb4867024b3b5f54445be3ba895c352966mridge#
4106925cdb4867024b3b5f54445be3ba895c352966mridge##############################################################
4206925cdb4867024b3b5f54445be3ba895c352966mridge
4306925cdb4867024b3b5f54445be3ba895c352966mridge
4406925cdb4867024b3b5f54445be3ba895c352966mridgeMNT_POINT="/tmp/sysfs_$$"
4506925cdb4867024b3b5f54445be3ba895c352966mridge
4606925cdb4867024b3b5f54445be3ba895c352966mridgeKERNEL_NAME=`uname -a | awk ' { print $3 } '`
4706925cdb4867024b3b5f54445be3ba895c352966mridgeKERN_MODULE=/lib/modules/$KERNEL_NAME/kernel/drivers/net/dummy.ko
4806925cdb4867024b3b5f54445be3ba895c352966mridgeUSAGE="$0 [ -k <kernel_module> ]"
4906925cdb4867024b3b5f54445be3ba895c352966mridge
5006925cdb4867024b3b5f54445be3ba895c352966mridge
5106925cdb4867024b3b5f54445be3ba895c352966mridge##############################################################
5206925cdb4867024b3b5f54445be3ba895c352966mridge#
5306925cdb4867024b3b5f54445be3ba895c352966mridge# Make sure that uid=root is running this script.
5406925cdb4867024b3b5f54445be3ba895c352966mridge# Validate the command line arguments.
5506925cdb4867024b3b5f54445be3ba895c352966mridge#
5606925cdb4867024b3b5f54445be3ba895c352966mridge##############################################################
5706925cdb4867024b3b5f54445be3ba895c352966mridge
5806925cdb4867024b3b5f54445be3ba895c352966mridgeif [ $UID != 0 ]
5906925cdb4867024b3b5f54445be3ba895c352966mridgethen
6006925cdb4867024b3b5f54445be3ba895c352966mridge	echo "FAILED: Must have root access to execute this script"
6106925cdb4867024b3b5f54445be3ba895c352966mridge	exit 1
6206925cdb4867024b3b5f54445be3ba895c352966mridgefi
6306925cdb4867024b3b5f54445be3ba895c352966mridge
6406925cdb4867024b3b5f54445be3ba895c352966mridgewhile getopts k: args
6506925cdb4867024b3b5f54445be3ba895c352966mridgedo
6606925cdb4867024b3b5f54445be3ba895c352966mridge	case $args in
6706925cdb4867024b3b5f54445be3ba895c352966mridge	k)	KERN_MODULE=$OPTARG ;;
6806925cdb4867024b3b5f54445be3ba895c352966mridge	\?)	echo $USAGE ; exit 1 ;;
6906925cdb4867024b3b5f54445be3ba895c352966mridge	esac
7006925cdb4867024b3b5f54445be3ba895c352966mridgedone
7106925cdb4867024b3b5f54445be3ba895c352966mridge
7206925cdb4867024b3b5f54445be3ba895c352966mridgeif [ -z "$KERN_MODULE" ]
7306925cdb4867024b3b5f54445be3ba895c352966mridgethen
7406925cdb4867024b3b5f54445be3ba895c352966mridge	echo $USAGE
7506925cdb4867024b3b5f54445be3ba895c352966mridge	echo "FAILED: kernel module to insert not specified"
7606925cdb4867024b3b5f54445be3ba895c352966mridge	exit 1
7706925cdb4867024b3b5f54445be3ba895c352966mridgefi
7806925cdb4867024b3b5f54445be3ba895c352966mridge
7906925cdb4867024b3b5f54445be3ba895c352966mridge# Here is the code coverage for fs/sysfs
8006925cdb4867024b3b5f54445be3ba895c352966mridge# insmod/rmmod net/dummy.ko creates and deletes a directory
8106925cdb4867024b3b5f54445be3ba895c352966mridge# under sysfs.
8206925cdb4867024b3b5f54445be3ba895c352966mridge# In kernel, 2.5.73 or higher, insert/delete base/firmware_class.ko
8306925cdb4867024b3b5f54445be3ba895c352966mridge
8406925cdb4867024b3b5f54445be3ba895c352966mridgemkdir -p -m 777 $MNT_POINT
8506925cdb4867024b3b5f54445be3ba895c352966mridgemount -t sysfs sysfs $MNT_POINT
8606925cdb4867024b3b5f54445be3ba895c352966mridgeif [ $? != 0 ]
8706925cdb4867024b3b5f54445be3ba895c352966mridgethen
8806925cdb4867024b3b5f54445be3ba895c352966mridge	echo "FAILED: sysfs mount failed"
8906925cdb4867024b3b5f54445be3ba895c352966mridge	exit 1
9006925cdb4867024b3b5f54445be3ba895c352966mridgefi
9106925cdb4867024b3b5f54445be3ba895c352966mridge
9206925cdb4867024b3b5f54445be3ba895c352966mridgeinsmod $KERN_MODULE
9306925cdb4867024b3b5f54445be3ba895c352966mridgeif [ $? != 0 ]
9406925cdb4867024b3b5f54445be3ba895c352966mridgethen
9506925cdb4867024b3b5f54445be3ba895c352966mridge	umount $MNT_POINT
9606925cdb4867024b3b5f54445be3ba895c352966mridge	rm -rf $MNT_POINT
9706925cdb4867024b3b5f54445be3ba895c352966mridge	echo "FAILED: insmod failed"
9806925cdb4867024b3b5f54445be3ba895c352966mridge	exit 1
9906925cdb4867024b3b5f54445be3ba895c352966mridgefi
10006925cdb4867024b3b5f54445be3ba895c352966mridge
10106925cdb4867024b3b5f54445be3ba895c352966mridgermmod $KERN_MODULE
10206925cdb4867024b3b5f54445be3ba895c352966mridgeif [ $? != 0 ]
10306925cdb4867024b3b5f54445be3ba895c352966mridgethen
10406925cdb4867024b3b5f54445be3ba895c352966mridge	umount $MNT_POINT
10506925cdb4867024b3b5f54445be3ba895c352966mridge	rm -rf $MNT_POINT
10606925cdb4867024b3b5f54445be3ba895c352966mridge	echo "FAILED: rmmod failed"
10706925cdb4867024b3b5f54445be3ba895c352966mridge	exit 1
10806925cdb4867024b3b5f54445be3ba895c352966mridgefi
10906925cdb4867024b3b5f54445be3ba895c352966mridge
11006925cdb4867024b3b5f54445be3ba895c352966mridge
11106925cdb4867024b3b5f54445be3ba895c352966mridge#######################################################
11206925cdb4867024b3b5f54445be3ba895c352966mridge#
11306925cdb4867024b3b5f54445be3ba895c352966mridge# Just before exit, perform the cleanup.
11406925cdb4867024b3b5f54445be3ba895c352966mridge#
11506925cdb4867024b3b5f54445be3ba895c352966mridge#######################################################
11606925cdb4867024b3b5f54445be3ba895c352966mridge
11706925cdb4867024b3b5f54445be3ba895c352966mridgeumount $MNT_POINT
11806925cdb4867024b3b5f54445be3ba895c352966mridgerm -rf $MNT_POINT
11906925cdb4867024b3b5f54445be3ba895c352966mridge
12006925cdb4867024b3b5f54445be3ba895c352966mridgeecho "PASSED: $0 passed!"
12106925cdb4867024b3b5f54445be3ba895c352966mridgeexit 0
122