#!/bin/sh # Open Infrastructure: service-tools # Copyright (C) 2014-2022 Daniel Baumann # # SPDX-License-Identifier: GPL-3.0+ # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . set -e PROGRAM="$(basename "${0}")" RED="\033[1;33;31m" GREEN="\033[1;33;32m" NORMAL="\033[0m" Ethtool_get () { DEVICE="${1}" FLAG="${2}" TARGET_VALUE="${3}" if ethtool --show-priv-flags "${DEVICE}" | awk '{ print $1 }' | grep -qs "^${FLAG}$" then CURRENT_VALUE="$(ethtool --show-priv-flags "${DEVICE}" | awk "/^${FLAG} / { print \$3 }")" if [ "${CURRENT_VALUE}" = "${TARGET_VALUE}" ] then echo -n " ${FLAG}=${GREEN}${CURRENT_VALUE}${NORMAL}" else echo -n " ${FLAG}=${RED}${CURRENT_VALUE}${NORMAL}" fi fi } Ethtool_set () { DEVICE="${1}" FLAG="${2}" VALUE="${3}" if ethtool --show-priv-flags "${DEVICE}" | awk '{ print $1 }' | grep -qs "^${FLAG}$" then echo -n " ${FLAG}" ethtool --set-priv-flags "${DEVICE}" "${FLAG}" "${VALUE}" echo -n "=${VALUE}" fi } Test_root () { case "$(id -u)" in 0) ;; *) echo "'${PROGRAM}': must be run as root (or use sudo)" >&2 exit 1 ;; esac } Start () { Test_root for DEVICE in ${DEVICES} do echo -n "Configuring ${DEVICE}:" Ethtool_set "${DEVICE}" disable-fw-lldp on Ethtool_set "${DEVICE}" link-down-on-close on echo done } Stop () { Test_root for DEVICE in ${DEVICES} do echo -n "Deconfiguring ${DEVICE}:" Ethtool_set "${DEVICE}" disable-fw-lldp off Ethtool_set "${DEVICE}" link-down-on-close off echo done } Status () { for DEVICE in ${DEVICES} do echo -n "${DEVICE}:" Ethtool_get "${DEVICE}" disable-fw-lldp on Ethtool_get "${DEVICE}" link-down-on-close on echo done } Usage () { echo "Usage: ${PROGRAM} {start|stop|status}" >&2 echo >&2 echo "See ${PROGRAM}(1) for more information." >&2 exit 1 } if [ -z "${1}" ] then Usage fi if [ ! -x /usr/sbin/ethtool ] then echo "'${PROGRAM}': /usr/sbin/ethtool - no such file." >&2 exit 1 fi DEVICES="$(grep -s '^DRIVER=i40e' /sys/class/net/*/device/uevent | awk -F/ '{ print $5 }' | sort -V)" if [ -z "${DEVICES}" ] then echo "'${PROGRAM}': no network devices available with i40e driver" >&2 fi case "${1}" in start) Start ;; stop) Stop ;; status) Status ;; *) Usage ;; esac