1*fe4627efSSebastien Roy#!/bin/bash
2*fe4627efSSebastien Roy
3*fe4627efSSebastien Roy#
4*fe4627efSSebastien Roy# This file and its contents are supplied under the terms of the
5*fe4627efSSebastien Roy# Common Development and Distribution License ("CDDL"), version 1.0.
6*fe4627efSSebastien Roy# You may only use this file in accordance with the terms of version
7*fe4627efSSebastien Roy# 1.0 of the CDDL.
8*fe4627efSSebastien Roy#
9*fe4627efSSebastien Roy# A full copy of the text of the CDDL should have accompanied this
10*fe4627efSSebastien Roy# source.  A copy of the CDDL is also available via the Internet at
11*fe4627efSSebastien Roy# http://www.illumos.org/license/CDDL.
12*fe4627efSSebastien Roy#
13*fe4627efSSebastien Roy
14*fe4627efSSebastien Roy#
15*fe4627efSSebastien Roy# Copyright (c) 2016 by Delphix. All rights reserved.
16*fe4627efSSebastien Roy#
17*fe4627efSSebastien Roy
18*fe4627efSSebastien Roy#
19*fe4627efSSebastien Roy# This test attempts to stress the interaction between threads adding
20*fe4627efSSebastien Roy# and deleting datalinks, and those reading kstats associated with
21*fe4627efSSebastien Roy# those datalinks.
22*fe4627efSSebastien Roy#
23*fe4627efSSebastien Roy
24*fe4627efSSebastien RoyRUNFILE=$(mktemp)
25*fe4627efSSebastien Roylinkname1=laverne0
26*fe4627efSSebastien Roylinkname2=shirley0
27*fe4627efSSebastien Royduration=20 # seconds
28*fe4627efSSebastien Roy
29*fe4627efSSebastien Roy#
30*fe4627efSSebastien Roy# Delete any potential datalinks left behind by the etherstub function.
31*fe4627efSSebastien Roy#
32*fe4627efSSebastien Royfunction cleanup
33*fe4627efSSebastien Roy{
34*fe4627efSSebastien Roy	rm -f $RUNFILE
35*fe4627efSSebastien Roy}
36*fe4627efSSebastien Roy
37*fe4627efSSebastien Royfunction etherstub
38*fe4627efSSebastien Roy{
39*fe4627efSSebastien Roy	while [[ -e $RUNFILE ]]; do
40*fe4627efSSebastien Roy		dladm create-etherstub -t $linkname1
41*fe4627efSSebastien Roy		dladm rename-link $linkname1 $linkname2
42*fe4627efSSebastien Roy		dladm delete-etherstub -t $linkname2
43*fe4627efSSebastien Roy	done
44*fe4627efSSebastien Roy}
45*fe4627efSSebastien Roy
46*fe4627efSSebastien Royfunction readkstat
47*fe4627efSSebastien Roy{
48*fe4627efSSebastien Roy	local linkname=$1
49*fe4627efSSebastien Roy	while [[ -e $RUNFILE ]]; do
50*fe4627efSSebastien Roy		kstat link:0:$linkname &>/dev/null
51*fe4627efSSebastien Roy	done
52*fe4627efSSebastien Roy}
53*fe4627efSSebastien Roy
54*fe4627efSSebastien Roytrap "cleanup; exit" SIGHUP SIGINT SIGTERM
55*fe4627efSSebastien Roy
56*fe4627efSSebastien Royetherstub &
57*fe4627efSSebastien Royreadkstat $linkname1 &
58*fe4627efSSebastien Royreadkstat $linkname1 &
59*fe4627efSSebastien Royreadkstat $linkname2 &
60*fe4627efSSebastien Royreadkstat $linkname2 &
61*fe4627efSSebastien Roy
62*fe4627efSSebastien Roysleep $duration
63*fe4627efSSebastien Roycleanup
64*fe4627efSSebastien Roy
65*fe4627efSSebastien Roywait
66*fe4627efSSebastien Roy
67*fe4627efSSebastien Royexit 0
68