From d8570fe8ada6ad1d1192a5143239770f6ace0dec Mon Sep 17 00:00:00 2001 From: Craig Anderson Date: Thu, 20 Sep 2018 21:59:39 +0000 Subject: [PATCH] Improve gate NIC HW compatibility/portability Change-Id: I5d878b664f552fe04cd2e672293c27578560dab4 --- divingbell/templates/bin/_ethtool.sh.tpl | 2 +- tools/gate/scripts/020-test-divingbell.sh | 30 ++++++++++++++++++----- 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/divingbell/templates/bin/_ethtool.sh.tpl b/divingbell/templates/bin/_ethtool.sh.tpl index 0f2f497..66e1c86 100644 --- a/divingbell/templates/bin/_ethtool.sh.tpl +++ b/divingbell/templates/bin/_ethtool.sh.tpl @@ -76,7 +76,7 @@ add_ethtool_param(){ [ "$(echo "${current_val_raw}" | wc -l)" -le 1 ] || die "More than one match for '${user_key}'" [[ ! ${current_val_raw} = *fixed* ]] || - die "'${deivce}' does not permit changing the '${user_key}' setting" + die "'${device}' does not permit changing the '${user_key}' setting" if [[ ${current_val_raw} = *off\ \[requested\ on\] ]]; then current_val_raw='off' elif [[ ${current_val_raw} = *on\ \[requested\ off\] ]]; then diff --git a/tools/gate/scripts/020-test-divingbell.sh b/tools/gate/scripts/020-test-divingbell.sh index 22c3347..7039fda 100755 --- a/tools/gate/scripts/020-test-divingbell.sh +++ b/tools/gate/scripts/020-test-divingbell.sh @@ -26,10 +26,13 @@ MOUNTS_PATH3=${MOUNTS_SYSTEMD}3 ETHTOOL_KEY2=tx-tcp-segmentation ETHTOOL_VAL2_DEFAULT=on ETHTOOL_KEY3=tx-tcp6-segmentation +# Not all NIC hardware has enough ethtool tunables available +ETHTOOL_KEY3_BACKUP='' ETHTOOL_VAL3_DEFAULT=on ETHTOOL_KEY4=tx-nocache-copy ETHTOOL_VAL4_DEFAULT=off ETHTOOL_KEY5=tx-checksum-ip-generic +ETHTOOL_KEY5_BACKUP=tx-scatter-gather ETHTOOL_VAL5_DEFAULT=on USERNAME1=userone USERNAME1_SUDO=true @@ -59,6 +62,13 @@ for line in ${nic_info}; do fi done [ -n "${DEVICE}" ] || (echo Could not find physical NIC for tesing; exit 1) +# Not all hardware has the same NIC tunables to use for testing +if [[ $(/sbin/ethtool -k "${DEVICE}" | grep "${ETHTOOL_KEY3}:") =~ .*fixed.* ]]; then + ETHTOOL_KEY3="${ETHTOOL_KEY3_BACKUP}" +fi +if [[ $(/sbin/ethtool -k "${DEVICE}" | grep "${ETHTOOL_KEY5}:") =~ .*fixed.* ]]; then + ETHTOOL_KEY5="${ETHTOOL_KEY5_BACKUP}" +fi exec >& >(while read line; do echo "${line}" | sudo tee -a ${LOG_NAME}; done) @@ -101,6 +111,9 @@ _write_sysctl(){ _write_ethtool(){ local cur_val + if [ -z "${2}" ]; then + return + fi cur_val="$(/sbin/ethtool -k ${1} | grep "${2}:" | cut -d':' -f2 | cut -d' ' -f2)" if [ "${cur_val}" != "${3}" ]; then @@ -126,7 +139,7 @@ init_default_state(){ _write_sysctl ${SYSCTL_KEY4} ${SYSCTL_VAL4_DEFAULT} # set ethtool original vals _write_ethtool ${DEVICE} ${ETHTOOL_KEY2} ${ETHTOOL_VAL2_DEFAULT} - _write_ethtool ${DEVICE} ${ETHTOOL_KEY3} ${ETHTOOL_VAL3_DEFAULT} + _write_ethtool ${DEVICE} "${ETHTOOL_KEY3}" ${ETHTOOL_VAL3_DEFAULT} _write_ethtool ${DEVICE} ${ETHTOOL_KEY4} ${ETHTOOL_VAL4_DEFAULT} _write_ethtool ${DEVICE} ${ETHTOOL_KEY5} ${ETHTOOL_VAL5_DEFAULT} # Remove any created accounts, SSH keys @@ -403,6 +416,9 @@ test_mounts(){ } _test_ethtool_value(){ + if [ -z "${1}" ]; then + return + fi test "$(/sbin/ethtool -k ${DEVICE} | grep "${1}:" | cut -d':' -f2 | tr -d '[:space:]')" = "${2}" } @@ -412,17 +428,18 @@ test_ethtool(){ local overrides_yaml=${LOGS_SUBDIR}/${FUNCNAME}-set1.yaml local val2=on local val3=off + [ -n "${ETHTOOL_KEY3}" ] && local line2_1="${ETHTOOL_KEY3}: $val3" local val4=off echo "conf: ethtool: ${DEVICE}: $ETHTOOL_KEY2: $val2 - $ETHTOOL_KEY3: $val3 + $line2_1 $ETHTOOL_KEY4: $val4" > "${overrides_yaml}" install_base "--values=${overrides_yaml}" get_container_status ethtool _test_ethtool_value $ETHTOOL_KEY2 $val2 - _test_ethtool_value $ETHTOOL_KEY3 $val3 + _test_ethtool_value "$ETHTOOL_KEY3" $val3 _test_ethtool_value $ETHTOOL_KEY4 $val4 echo '[SUCCESS] ethtool test1 passed successfully' >> "${TEST_RESULTS}" @@ -430,17 +447,18 @@ test_ethtool(){ overrides_yaml=${LOGS_SUBDIR}/${FUNCNAME}-set2.yaml val2=off val3=on + [ -n "${ETHTOOL_KEY3}" ] && local line2_2="${ETHTOOL_KEY3}: $val3" val4=on echo "conf: ethtool: ${DEVICE}: $ETHTOOL_KEY2: $val2 - $ETHTOOL_KEY3: $val3 + $line2_2 $ETHTOOL_KEY4: $val4" > "${overrides_yaml}" install_base "--values=${overrides_yaml}" get_container_status ethtool _test_ethtool_value $ETHTOOL_KEY2 $val2 - _test_ethtool_value $ETHTOOL_KEY3 $val3 + _test_ethtool_value "$ETHTOOL_KEY3" $val3 _test_ethtool_value $ETHTOOL_KEY4 $val4 echo '[SUCCESS] ethtool test2 passed successfully' >> "${TEST_RESULTS}" @@ -448,7 +466,7 @@ test_ethtool(){ install_base get_container_status ethtool _test_ethtool_value $ETHTOOL_KEY2 $ETHTOOL_VAL2_DEFAULT - _test_ethtool_value $ETHTOOL_KEY3 $ETHTOOL_VAL3_DEFAULT + _test_ethtool_value "$ETHTOOL_KEY3" $ETHTOOL_VAL3_DEFAULT _test_ethtool_value $ETHTOOL_KEY4 $ETHTOOL_VAL4_DEFAULT echo '[SUCCESS] ethtool test3 passed successfully' >> "${TEST_RESULTS}"