diff --git a/CHANGELOG.md b/CHANGELOG.md index 6b348b86..d8bb2e81 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ Release history for s390-tools (MIT version) - smc_dbg: Add support for SMC sockets Changes of existing tools: + - dbginfo: Gather ethtool related data Bug Fixes: diff --git a/scripts/dbginfo.sh b/scripts/dbginfo.sh index 42620c1d..388007bf 100755 --- a/scripts/dbginfo.sh +++ b/scripts/dbginfo.sh @@ -173,6 +173,9 @@ readonly OUTPUT_FILE_LSOF="${WORKPATH}open_files.out" # File that includes content of OSA OAT readonly OUTPUT_FILE_OSAOAT="${WORKPATH}osa_oat" +# File that includes content of Ethtool commands +readonly OUTPUT_FILE_ETHTOOL="${WORKPATH}ethtool.out" + # File that includes the output of journalctl readonly OUTPUT_FILE_JOURNALCTL="${WORKPATH}journalctl.out" @@ -192,7 +195,7 @@ readonly OUTPUT_FILE_NVME="${WORKPATH}nvme.out" readonly MOUNT_POINT_DEBUGFS="/sys/kernel/debug" # The amount of steps running the whole collections -readonly COLLECTION_COUNT=12 +readonly COLLECTION_COUNT=13 # The kernel version (e.g. '2' from 2.6.32 or '3' from 3.2.1) readonly KERNEL_VERSION=$(uname -r 2>/dev/null | cut -d'.' -f1) @@ -752,6 +755,37 @@ collect_osaoat() { pr_log_stdout " " } +######################################## +collect_ethtool() { + local network_devices + local network_device + + network_devices=$(ls /sys/class/net 2>/dev/null) + if which ethtool >/dev/null 2>&1; then + if test -n "${network_devices}"; then + pr_syslog_stdout "8 of ${COLLECTION_COUNT}: Collecting ethtool output" + for network_device in ${network_devices}; do + call_run_command "ethtool ${network_device}" "${OUTPUT_FILE_ETHTOOL}" + call_run_command "ethtool -k ${network_device}" "${OUTPUT_FILE_ETHTOOL}" + call_run_command "ethtool -a ${network_device}" "${OUTPUT_FILE_ETHTOOL}" + call_run_command "ethtool -c ${network_device}" "${OUTPUT_FILE_ETHTOOL}" + call_run_command "ethtool -g ${network_device}" "${OUTPUT_FILE_ETHTOOL}" + call_run_command "ethtool -i ${network_device}" "${OUTPUT_FILE_ETHTOOL}" + call_run_command "ethtool -l ${network_device}" "${OUTPUT_FILE_ETHTOOL}" + call_run_command "ethtool -P ${network_device}" "${OUTPUT_FILE_ETHTOOL}" + call_run_command "ethtool -S ${network_device}" "${OUTPUT_FILE_ETHTOOL}" + call_run_command "ethtool -T ${network_device}" "${OUTPUT_FILE_ETHTOOL}" + done + else + pr_syslog_stdout "8 of ${COLLECTION_COUNT}: Collecting ethtool output skipped - no devices" + fi + else + pr_syslog_stdout "8 of ${COLLECTION_COUNT}: Collecting ethtool output skipped - not available" + fi + + pr_log_stdout " " +} + ######################################## # OpenVSwitch collect_ovs() { @@ -768,7 +802,7 @@ collect_ovs() { :ovsdb-client dump\ " if test -n "${br_list}"; then - pr_syslog_stdout "8 of ${COLLECTION_COUNT}: Collecting OpenVSwitch output" + pr_syslog_stdout "9 of ${COLLECTION_COUNT}: Collecting OpenVSwitch output" IFS=: for ovscmd in ${ovscmds}; do IFS=${ifs_orig} call_run_command "${ovscmd}" "${OUTPUT_FILE_OVS}.out" @@ -787,7 +821,7 @@ collect_ovs() { IFS="${ifs_orig}" done else - pr_syslog_stdout "8 of ${COLLECTION_COUNT}: Collecting OpenVSwitch output skipped" + pr_syslog_stdout "9 of ${COLLECTION_COUNT}: Collecting OpenVSwitch output skipped" fi pr_log_stdout " " @@ -800,12 +834,12 @@ collect_domain_xml() { domain_list=$(virsh list --all --name) if test -n "${domain_list}"; then - pr_syslog_stdout "9 of ${COLLECTION_COUNT}: Collecting domain xml files" + pr_syslog_stdout "10 of ${COLLECTION_COUNT}: Collecting domain xml files" for domain in ${domain_list}; do call_run_command "virsh dumpxml ${domain}" "${OUTPUT_FILE_XML}_${domain}.xml" done else - pr_syslog_stdout "9 of ${COLLECTION_COUNT}: Collecting domain xml files skipped" + pr_syslog_stdout "10 of ${COLLECTION_COUNT}: Collecting domain xml files skipped" fi pr_log_stdout " " @@ -819,23 +853,23 @@ collect_docker() { # call docker inspect for all containers item_list=$(docker ps -qa) if test -n "${item_list}"; then - pr_syslog_stdout "10a of ${COLLECTION_COUNT}: Collecting docker container output" + pr_syslog_stdout "11a of ${COLLECTION_COUNT}: Collecting docker container output" for item in ${item_list}; do call_run_command "docker inspect ${item}" "${OUTPUT_FILE_DOCKER}" done else - pr_syslog_stdout "10a of ${COLLECTION_COUNT}: Collecting docker container output skipped" + pr_syslog_stdout "11a of ${COLLECTION_COUNT}: Collecting docker container output skipped" fi # call docker inspect for all networks item_list=$(docker network ls -q) if test -n "${item_list}"; then - pr_syslog_stdout "10b of ${COLLECTION_COUNT}: Collecting docker network output" + pr_syslog_stdout "11b of ${COLLECTION_COUNT}: Collecting docker network output" for item in ${item_list}; do call_run_command "docker network inspect ${item}" "${OUTPUT_FILE_DOCKER}" done else - pr_syslog_stdout "10b of ${COLLECTION_COUNT}: Collecting docker network output skipped" + pr_syslog_stdout "11b of ${COLLECTION_COUNT}: Collecting docker network output skipped" fi pr_log_stdout " " @@ -845,7 +879,7 @@ collect_docker() { collect_nvme() { local NVME - pr_syslog_stdout "11 of ${COLLECTION_COUNT}: Collecting nvme output" + pr_syslog_stdout "12 of ${COLLECTION_COUNT}: Collecting nvme output" call_run_command "nvme list" "${OUTPUT_FILE_NVME}" for NVME in /dev/nvme[0-9]*; do @@ -1152,6 +1186,8 @@ collect_configfiles collect_osaoat +collect_ethtool + collect_ovs collect_domain_xml diff --git a/scripts/dbginfo.sh.1 b/scripts/dbginfo.sh.1 index 47711925..892c049d 100644 --- a/scripts/dbginfo.sh.1 +++ b/scripts/dbginfo.sh.1 @@ -52,7 +52,7 @@ Sample invocation: .br dbginfo.sh: Debug information script version %S390_TOOLS_VERSION% .br -Copyright IBM Corp. 2002, 2017 +Copyright IBM Corp. 2002, 2019 .PP Hardware platform = s390x .br @@ -60,34 +60,40 @@ Kernel version = .br Runtime environment = z/VM .PP -1 of 11: Collecting command output +1 of 13: Collecting command output .PP -2 of 11: Collecting z/VM command output +2 of 13: Collecting z/VM command output .PP -3 of 11: Collecting procfs +3 of 13: Collecting procfs .PP -4 of 11: Collecting sysfs +4 of 13: Collecting sysfs .PP -5 of 11: Collecting log files +5 of 13: Collecting log files .PP -6 of 11: Collecting config files +6 of 13: Collecting config files .PP -7 of 11: Collecting osa oat output skipped \- not available +7 of 13: Collecting osa oat output skipped \- not available .PP -8 of 11: Collecting OpenVSwitch output +8 of 13: Collecting ethtool output .PP -9 of 11: Collecting domain xml files +9 of 13: Collecting OpenVSwitch output .PP -10a of 11: Collecting docker container output -10b of 11: Collecting docker network output +10 of 13: Collecting domain xml files .PP -11 of 11: Postprocessing +11a of 13: Collecting docker container output +11b of 13: Collecting docker network output +.PP +12 of 13: Collecting nvme output +.PP +13 of 13: Postprocessing .PP Finalizing: Creating archive with collected data .PP Collected data was saved to: .br - >> /data\-collection/DBGINFO\-2015\-02\-26\-21\-39\-16\-host\-012345.tgz << + >> /data\-collection/DBGINFO\-2019\-08\-19\-21\-39\-16\-host\-012345.tgz << +.br +Review the collected data before sending to your service organization. .SH HINTS Run the script with root authority. .br