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