8765 dladm tries setting persistent prop on temporary link
[unleashed.git] / usr / src / test / util-tests / tests / dladm / set-linkprop.ksh
blob37e318fe345dca6b15c5797841abb38a705ba56f
1 #!/bin/ksh
3 # This file and its contents are supplied under the terms of the
4 # Common Development and Distribution License ("CDDL"), version 1.0.
5 # You may only use this file in accordance with the terms of version
6 # 1.0 of the CDDL.
8 # A full copy of the text of the CDDL should have accompanied this
9 # source. A copy of the CDDL is also available via the Internet at
10 # http://www.illumos.org/license/CDDL.
14 # Copyright 2017 Joyent, Inc.
18 # The purpose of this test is to verify that set-linkprop performs as
19 # it should -- both on persistent and temporary links.
22 vm_arg0="$(basename $0)"
23 vm_stub="teststub$$"
24 vm_pvnic="test_pvnic$$"
25 vm_tvnic="test_tvnic$$"
27 DL_FILE=/etc/dladm/datalink.conf
29 fatal()
31 typeset msg="$*"
32 [[ -z "$msg" ]] && msg="failed"
33 echo "TEST_FAIL: $vm_arg0: $msg" >&2
35 # Try to clean up just in case
36 dladm delete-vnic $vm_pvnic 2>/dev/null
37 dladm delete-vnic $vm_tvnic 2>/dev/null
38 dladm delete-etherstub $vm_stub 2>/dev/null
39 exit 1
42 delete_stub()
44 dladm delete-etherstub $vm_stub || fatal \
45 "failed to delete stub $vm_stub"
48 create_stub()
50 dladm create-etherstub $vm_stub || fatal \
51 "failed to create stub"
54 create_vnic()
56 typeset dev=$1
57 typeset flags=$2
59 dladm create-vnic $flags -l $vm_stub $dev 2>/dev/null || fatal \
60 "failed to create vnic: $dev"
63 delete_vnic()
65 typeset dev=$1
67 dladm delete-vnic $dev || fatal "failed to delete vnic: $dev"
71 # Validate the property is reported by dladm.
73 validate_prop()
75 typeset dev=$1
76 typeset prop=$2
77 typeset val=$3
78 typeset oval
80 [[ -z "$dev" ]] && fatal "missing required device"
81 [[ -z "$prop" ]] && fatal "missing required prop"
82 [[ -z "$val" ]] && fatal "missing required val"
83 oval=$(dladm show-linkprop -c -o value -p $prop $dev | tr -d ' ')
84 [[ $? -eq 0 ]] || fatal "failed to get $prop for $dev"
85 [[ "$val" == "$oval" ]] || fatal \
86 "$prop mismatch on $dev: expected $val, got $oval"
90 # Validate the property is persistent.
92 validate_pprop()
94 typeset dev=$1
95 typeset prop=$2
96 typeset val=$3
97 typeset oval
99 [[ -z "$dev" ]] && fatal "missing required device"
100 [[ -z "$prop" ]] && fatal "missing required prop"
101 [[ -z "$val" ]] && fatal "missing required val"
103 oval=$(awk "/^$dev/ { print \$2 }" $DL_FILE | \
104 awk -F, "BEGIN { RS=\";\"; } /^$prop/ { print \$2; }")
106 [[ $? -eq 0 ]] || fatal "failed to get persistent $prop for $dev"
107 [[ "$val" == "$oval" ]] || fatal \
108 "persistent $prop mismatch on $dev: expected $val, got $oval"
112 # Validate the the property is not persistent.
114 validate_not_pprop()
116 typeset dev=$1
117 typeset prop=$2
119 [[ -z "$dev" ]] && fatal "missing required device"
120 [[ -z "$prop" ]] && fatal "missing required prop"
122 oval=$(awk "/^$dev/ { print \$2 }" $DL_FILE | \
123 awk -F, "BEGIN { RS=\";\"; } /^$prop/ { print \$2; }")
125 [[ $? -eq 0 ]] || fatal "failed to search $DL_FILE"
127 [[ -z "$oval" ]] || fatal \
128 "found persistent $prop for $dev but didn't expect to"
132 set_prop_pass()
134 typeset dev=$1
135 typeset flags=$2
136 typeset prop=$3
137 typeset val=$4
138 typeset msg="failed to set prop $prop on $dev"
140 [[ "$#" -ne 4 ]] && fatal "set_prop_pass() requires 4 args"
141 [[ -z "$dev" ]] && fatal "missing required device"
142 [[ -z "$prop" ]] && fatal "missing required prop"
143 [[ -z "$val" ]] && fatal "missing required val"
145 if [ -n "$flags" ]; then
146 typeset msg="failed to set temp prop $prop on $dev"
149 dladm set-linkprop $flags -p $prop=$val $dev || fatal $msg
152 test_pass()
154 [[ -f $DL_FILE ]] || fatal "datalink file does not exist: $DL_FILE"
156 create_stub
159 # Test setting persistent and temp properties on a persistent
160 # link.
162 create_vnic $vm_pvnic
164 set_prop_pass $vm_pvnic "-t" maxbw 89
165 validate_prop $vm_pvnic maxbw 89
166 validate_not_pprop $vm_pvnic maxbw 89
167 set_prop_pass $vm_pvnic "-t" priority medium
168 validate_prop $vm_pvnic priority medium
169 validate_not_pprop $vm_pvnic priority medium
171 set_prop_pass $vm_pvnic "" maxbw 99
172 validate_prop $vm_pvnic maxbw 99
173 validate_pprop $vm_pvnic maxbw 99
174 set_prop_pass $vm_pvnic "" priority low
175 validate_prop $vm_pvnic priority low
176 validate_pprop $vm_pvnic priority low
178 delete_vnic $vm_pvnic
181 # Test setting persistent and temp properties on a temp link.
182 # A "persistent" property on a temp link is really just a temp
183 # property. But setting a property on a temp link, without
184 # passing -t, should still work and report success to the
185 # user.
187 create_vnic $vm_tvnic "-t"
189 set_prop_pass $vm_tvnic "-t" maxbw 89
190 validate_prop $vm_tvnic maxbw 89
191 validate_not_pprop $vm_tvnic maxbw 89
192 set_prop_pass $vm_tvnic "-t" priority medium
193 validate_prop $vm_tvnic priority medium
194 validate_not_pprop $vm_tvnic priority medium
196 set_prop_pass $vm_tvnic "" maxbw 99
197 validate_prop $vm_tvnic maxbw 99
198 validate_not_pprop $vm_tvnic maxbw 99
199 set_prop_pass $vm_tvnic "" priority low
200 validate_prop $vm_tvnic priority low
201 validate_not_pprop $vm_tvnic priority low
203 delete_vnic $vm_tvnic
205 delete_stub
208 test_pass