xref: /titanic_44/usr/src/test/util-tests/tests/dladm/set-linkprop.ksh (revision 05ced67b02237ea9affe85c884006563a21526c9)
1*05ced67bSRyan Zezeski#!/bin/ksh
2*05ced67bSRyan Zezeski#
3*05ced67bSRyan Zezeski# This file and its contents are supplied under the terms of the
4*05ced67bSRyan Zezeski# Common Development and Distribution License ("CDDL"), version 1.0.
5*05ced67bSRyan Zezeski# You may only use this file in accordance with the terms of version
6*05ced67bSRyan Zezeski# 1.0 of the CDDL.
7*05ced67bSRyan Zezeski#
8*05ced67bSRyan Zezeski# A full copy of the text of the CDDL should have accompanied this
9*05ced67bSRyan Zezeski# source.  A copy of the CDDL is also available via the Internet at
10*05ced67bSRyan Zezeski# http://www.illumos.org/license/CDDL.
11*05ced67bSRyan Zezeski#
12*05ced67bSRyan Zezeski
13*05ced67bSRyan Zezeski#
14*05ced67bSRyan Zezeski# Copyright 2017 Joyent, Inc.
15*05ced67bSRyan Zezeski#
16*05ced67bSRyan Zezeski
17*05ced67bSRyan Zezeski#
18*05ced67bSRyan Zezeski# The purpose of this test is to verify that set-linkprop performs as
19*05ced67bSRyan Zezeski# it should -- both on persistent and temporary links.
20*05ced67bSRyan Zezeski#
21*05ced67bSRyan Zezeski
22*05ced67bSRyan Zezeskivm_arg0="$(basename $0)"
23*05ced67bSRyan Zezeskivm_stub="teststub$$"
24*05ced67bSRyan Zezeskivm_pvnic="test_pvnic$$"
25*05ced67bSRyan Zezeskivm_tvnic="test_tvnic$$"
26*05ced67bSRyan Zezeski
27*05ced67bSRyan ZezeskiDL_FILE=/etc/dladm/datalink.conf
28*05ced67bSRyan Zezeski
29*05ced67bSRyan Zezeskifatal()
30*05ced67bSRyan Zezeski{
31*05ced67bSRyan Zezeski	typeset msg="$*"
32*05ced67bSRyan Zezeski	[[ -z "$msg" ]] && msg="failed"
33*05ced67bSRyan Zezeski	echo "TEST_FAIL: $vm_arg0: $msg" >&2
34*05ced67bSRyan Zezeski
35*05ced67bSRyan Zezeski	# Try to clean up just in case
36*05ced67bSRyan Zezeski	dladm delete-vnic $vm_pvnic 2>/dev/null
37*05ced67bSRyan Zezeski	dladm delete-vnic $vm_tvnic 2>/dev/null
38*05ced67bSRyan Zezeski	dladm delete-etherstub $vm_stub 2>/dev/null
39*05ced67bSRyan Zezeski	exit 1
40*05ced67bSRyan Zezeski}
41*05ced67bSRyan Zezeski
42*05ced67bSRyan Zezeskidelete_stub()
43*05ced67bSRyan Zezeski{
44*05ced67bSRyan Zezeski	dladm delete-etherstub $vm_stub || fatal \
45*05ced67bSRyan Zezeski	    "failed to delete stub $vm_stub"
46*05ced67bSRyan Zezeski}
47*05ced67bSRyan Zezeski
48*05ced67bSRyan Zezeskicreate_stub()
49*05ced67bSRyan Zezeski{
50*05ced67bSRyan Zezeski	dladm create-etherstub $vm_stub || fatal \
51*05ced67bSRyan Zezeski	    "failed to create stub"
52*05ced67bSRyan Zezeski}
53*05ced67bSRyan Zezeski
54*05ced67bSRyan Zezeskicreate_vnic()
55*05ced67bSRyan Zezeski{
56*05ced67bSRyan Zezeski	typeset dev=$1
57*05ced67bSRyan Zezeski	typeset flags=$2
58*05ced67bSRyan Zezeski
59*05ced67bSRyan Zezeski	dladm create-vnic $flags -l $vm_stub $dev 2>/dev/null || fatal \
60*05ced67bSRyan Zezeski	    "failed to create vnic: $dev"
61*05ced67bSRyan Zezeski}
62*05ced67bSRyan Zezeski
63*05ced67bSRyan Zezeskidelete_vnic()
64*05ced67bSRyan Zezeski{
65*05ced67bSRyan Zezeski	typeset dev=$1
66*05ced67bSRyan Zezeski
67*05ced67bSRyan Zezeski	dladm delete-vnic $dev || fatal "failed to delete vnic: $dev"
68*05ced67bSRyan Zezeski}
69*05ced67bSRyan Zezeski
70*05ced67bSRyan Zezeski#
71*05ced67bSRyan Zezeski# Validate the property is reported by dladm.
72*05ced67bSRyan Zezeski#
73*05ced67bSRyan Zezeskivalidate_prop()
74*05ced67bSRyan Zezeski{
75*05ced67bSRyan Zezeski	typeset dev=$1
76*05ced67bSRyan Zezeski	typeset prop=$2
77*05ced67bSRyan Zezeski	typeset val=$3
78*05ced67bSRyan Zezeski	typeset oval
79*05ced67bSRyan Zezeski
80*05ced67bSRyan Zezeski	[[ -z "$dev" ]] && fatal "missing required device"
81*05ced67bSRyan Zezeski	[[ -z "$prop" ]] && fatal "missing required prop"
82*05ced67bSRyan Zezeski	[[ -z "$val" ]] && fatal "missing required val"
83*05ced67bSRyan Zezeski	oval=$(dladm show-linkprop -c -o value -p $prop $dev | tr -d ' ')
84*05ced67bSRyan Zezeski	[[ $? -eq 0 ]] || fatal "failed to get $prop for $dev"
85*05ced67bSRyan Zezeski	[[ "$val" == "$oval" ]] || fatal \
86*05ced67bSRyan Zezeski	    "$prop mismatch on $dev: expected $val, got $oval"
87*05ced67bSRyan Zezeski}
88*05ced67bSRyan Zezeski
89*05ced67bSRyan Zezeski#
90*05ced67bSRyan Zezeski# Validate the property is persistent.
91*05ced67bSRyan Zezeski#
92*05ced67bSRyan Zezeskivalidate_pprop()
93*05ced67bSRyan Zezeski{
94*05ced67bSRyan Zezeski	typeset dev=$1
95*05ced67bSRyan Zezeski	typeset prop=$2
96*05ced67bSRyan Zezeski	typeset val=$3
97*05ced67bSRyan Zezeski	typeset oval
98*05ced67bSRyan Zezeski
99*05ced67bSRyan Zezeski	[[ -z "$dev" ]] && fatal "missing required device"
100*05ced67bSRyan Zezeski	[[ -z "$prop" ]] && fatal "missing required prop"
101*05ced67bSRyan Zezeski	[[ -z "$val" ]] && fatal "missing required val"
102*05ced67bSRyan Zezeski
103*05ced67bSRyan Zezeski	oval=$(awk "/^$dev/ { print \$2 }" $DL_FILE | \
104*05ced67bSRyan Zezeski	    awk -F, "BEGIN { RS=\";\"; } /^$prop/ { print \$2; }")
105*05ced67bSRyan Zezeski
106*05ced67bSRyan Zezeski	[[ $? -eq 0 ]] || fatal "failed to get persistent $prop for $dev"
107*05ced67bSRyan Zezeski	[[ "$val" == "$oval" ]] || fatal \
108*05ced67bSRyan Zezeski	    "persistent $prop mismatch on $dev: expected $val, got $oval"
109*05ced67bSRyan Zezeski}
110*05ced67bSRyan Zezeski
111*05ced67bSRyan Zezeski#
112*05ced67bSRyan Zezeski# Validate the the property is not persistent.
113*05ced67bSRyan Zezeski#
114*05ced67bSRyan Zezeskivalidate_not_pprop()
115*05ced67bSRyan Zezeski{
116*05ced67bSRyan Zezeski	typeset dev=$1
117*05ced67bSRyan Zezeski	typeset prop=$2
118*05ced67bSRyan Zezeski
119*05ced67bSRyan Zezeski	[[ -z "$dev" ]] && fatal "missing required device"
120*05ced67bSRyan Zezeski	[[ -z "$prop" ]] && fatal "missing required prop"
121*05ced67bSRyan Zezeski
122*05ced67bSRyan Zezeski	oval=$(awk "/^$dev/ { print \$2 }" $DL_FILE | \
123*05ced67bSRyan Zezeski	    awk -F, "BEGIN { RS=\";\"; } /^$prop/ { print \$2; }")
124*05ced67bSRyan Zezeski
125*05ced67bSRyan Zezeski	[[ $? -eq 0 ]] || fatal "failed to search $DL_FILE"
126*05ced67bSRyan Zezeski
127*05ced67bSRyan Zezeski	[[ -z "$oval" ]] || fatal \
128*05ced67bSRyan Zezeski	    "found persistent $prop for $dev but didn't expect to"
129*05ced67bSRyan Zezeski
130*05ced67bSRyan Zezeski}
131*05ced67bSRyan Zezeski
132*05ced67bSRyan Zezeskiset_prop_pass()
133*05ced67bSRyan Zezeski{
134*05ced67bSRyan Zezeski	typeset dev=$1
135*05ced67bSRyan Zezeski	typeset flags=$2
136*05ced67bSRyan Zezeski	typeset prop=$3
137*05ced67bSRyan Zezeski	typeset val=$4
138*05ced67bSRyan Zezeski	typeset msg="failed to set prop $prop on $dev"
139*05ced67bSRyan Zezeski
140*05ced67bSRyan Zezeski	[[ "$#" -ne 4 ]] && fatal "set_prop_pass() requires 4 args"
141*05ced67bSRyan Zezeski	[[ -z "$dev" ]] && fatal "missing required device"
142*05ced67bSRyan Zezeski	[[ -z "$prop" ]] && fatal "missing required prop"
143*05ced67bSRyan Zezeski	[[ -z "$val" ]] && fatal "missing required val"
144*05ced67bSRyan Zezeski
145*05ced67bSRyan Zezeski	if [ -n "$flags" ]; then
146*05ced67bSRyan Zezeski		typeset msg="failed to set temp prop $prop on $dev"
147*05ced67bSRyan Zezeski	fi
148*05ced67bSRyan Zezeski
149*05ced67bSRyan Zezeski	dladm set-linkprop $flags -p $prop=$val $dev || fatal $msg
150*05ced67bSRyan Zezeski}
151*05ced67bSRyan Zezeski
152*05ced67bSRyan Zezeskitest_pass()
153*05ced67bSRyan Zezeski{
154*05ced67bSRyan Zezeski	[[ -f $DL_FILE ]] || fatal "datalink file does not exist: $DL_FILE"
155*05ced67bSRyan Zezeski
156*05ced67bSRyan Zezeski	create_stub
157*05ced67bSRyan Zezeski
158*05ced67bSRyan Zezeski	#
159*05ced67bSRyan Zezeski	# Test setting persistent and temp properties on a persistent
160*05ced67bSRyan Zezeski	# link.
161*05ced67bSRyan Zezeski	#
162*05ced67bSRyan Zezeski	create_vnic $vm_pvnic
163*05ced67bSRyan Zezeski
164*05ced67bSRyan Zezeski	set_prop_pass $vm_pvnic "-t" maxbw 89
165*05ced67bSRyan Zezeski	validate_prop $vm_pvnic maxbw 89
166*05ced67bSRyan Zezeski	validate_not_pprop $vm_pvnic maxbw 89
167*05ced67bSRyan Zezeski	set_prop_pass $vm_pvnic "-t" priority medium
168*05ced67bSRyan Zezeski	validate_prop $vm_pvnic priority medium
169*05ced67bSRyan Zezeski	validate_not_pprop $vm_pvnic priority medium
170*05ced67bSRyan Zezeski
171*05ced67bSRyan Zezeski	set_prop_pass $vm_pvnic "" maxbw 99
172*05ced67bSRyan Zezeski	validate_prop $vm_pvnic maxbw 99
173*05ced67bSRyan Zezeski	validate_pprop $vm_pvnic maxbw 99
174*05ced67bSRyan Zezeski	set_prop_pass $vm_pvnic "" priority low
175*05ced67bSRyan Zezeski	validate_prop $vm_pvnic priority low
176*05ced67bSRyan Zezeski	validate_pprop $vm_pvnic priority low
177*05ced67bSRyan Zezeski
178*05ced67bSRyan Zezeski	delete_vnic $vm_pvnic
179*05ced67bSRyan Zezeski
180*05ced67bSRyan Zezeski	#
181*05ced67bSRyan Zezeski	# Test setting persistent and temp properties on a temp link.
182*05ced67bSRyan Zezeski	# A "persistent" property on a temp link is really just a temp
183*05ced67bSRyan Zezeski	# property. But setting a property on a temp link, without
184*05ced67bSRyan Zezeski	# passing -t, should still work and report success to the
185*05ced67bSRyan Zezeski	# user.
186*05ced67bSRyan Zezeski	#
187*05ced67bSRyan Zezeski	create_vnic $vm_tvnic "-t"
188*05ced67bSRyan Zezeski
189*05ced67bSRyan Zezeski	set_prop_pass $vm_tvnic "-t" maxbw 89
190*05ced67bSRyan Zezeski	validate_prop $vm_tvnic maxbw 89
191*05ced67bSRyan Zezeski	validate_not_pprop $vm_tvnic maxbw 89
192*05ced67bSRyan Zezeski	set_prop_pass $vm_tvnic "-t" priority medium
193*05ced67bSRyan Zezeski	validate_prop $vm_tvnic priority medium
194*05ced67bSRyan Zezeski	validate_not_pprop $vm_tvnic priority medium
195*05ced67bSRyan Zezeski
196*05ced67bSRyan Zezeski	set_prop_pass $vm_tvnic "" maxbw 99
197*05ced67bSRyan Zezeski	validate_prop $vm_tvnic maxbw 99
198*05ced67bSRyan Zezeski	validate_not_pprop $vm_tvnic maxbw 99
199*05ced67bSRyan Zezeski	set_prop_pass $vm_tvnic "" priority low
200*05ced67bSRyan Zezeski	validate_prop $vm_tvnic priority low
201*05ced67bSRyan Zezeski	validate_not_pprop $vm_tvnic priority low
202*05ced67bSRyan Zezeski
203*05ced67bSRyan Zezeski	delete_vnic $vm_tvnic
204*05ced67bSRyan Zezeski
205*05ced67bSRyan Zezeski	delete_stub
206*05ced67bSRyan Zezeski}
207*05ced67bSRyan Zezeski
208*05ced67bSRyan Zezeskitest_pass
209