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