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