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