summaryrefslogtreecommitdiffstats
path: root/linux
diff options
context:
space:
mode:
Diffstat (limited to 'linux')
-rw-r--r--linux/Makefile88
-rwxr-xr-xlinux/bin/linux-i40e159
-rw-r--r--linux/share/man/Makefile59
-rw-r--r--linux/share/man/linux-i40e.1.rst85
-rw-r--r--linux/share/man/man.in19
-rw-r--r--linux/share/systemd/linux-i40e.service17
6 files changed, 427 insertions, 0 deletions
diff --git a/linux/Makefile b/linux/Makefile
new file mode 100644
index 0000000..278e7e5
--- /dev/null
+++ b/linux/Makefile
@@ -0,0 +1,88 @@
+# Open Infrastructure: service-tools
+
+# Copyright (C) 2014-2022 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+#
+# 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 <https://www.gnu.org/licenses/>.
+
+SHELL := sh -e
+
+SCRIPTS = bin/*
+
+all: build
+
+test:
+ @echo -n "Checking for syntax errors with sh... "
+ @for SCRIPT in $(SCRIPTS); \
+ do \
+ sh -n $${SCRIPT}; \
+ echo -n "."; \
+ done
+ @echo " done."
+
+ @echo -n "Checking for bashisms... "
+ @if [ -x /usr/bin/checkbashisms ]; \
+ then \
+ for SCRIPT in $(SCRIPTS); \
+ do \
+ checkbashisms -f -x $${SCRIPT}; \
+ echo -n "."; \
+ done; \
+ else \
+ echo "Note: devscripts not installed, skipping checkbashisms."; \
+ fi
+ @echo " done."
+
+ @echo -n "Checking with shellcheck... "
+ @if [ -x /usr/bin/shellcheck ]; \
+ then \
+ for SCRIPT in $(SCRIPTS); \
+ do \
+ shellcheck -e SC2039 $${SCRIPT}; \
+ echo -n "."; \
+ done; \
+ else \
+ echo "Note: shellcheck not installed, skipping shellcheck."; \
+ fi
+ @echo " done."
+
+build:
+
+install: build
+ mkdir -p $(DESTDIR)/usr/bin
+ cp -r bin/* $(DESTDIR)/usr/bin
+
+ mkdir -p $(DESTDIR)/lib/systemd/system
+ cp -r share/systemd/* $(DESTDIR)/lib/systemd/system
+
+uninstall:
+ for FILE in share/systemd/*; \
+ do \
+ rm -f $(DESTDIR)/lib/systemd/system/$$(basename $${FILE}); \
+ done
+
+ for FILE in bin/*; \
+ do \
+ rm -f $(DESTDIR)/usr/bin/$$(basename $${FILE}); \
+ done
+ rmdir --ignore-fail-on-non-empty --parents $(DESTDIR)/usr/bin || true
+
+ rmdir --ignore-fail-on-non-empty --parents $(DESTDIR) || true
+
+clean:
+
+distclean:
+
+reinstall: uninstall install
diff --git a/linux/bin/linux-i40e b/linux/bin/linux-i40e
new file mode 100755
index 0000000..2c8f322
--- /dev/null
+++ b/linux/bin/linux-i40e
@@ -0,0 +1,159 @@
+#!/bin/sh
+
+# Open Infrastructure: service-tools
+
+# Copyright (C) 2014-2022 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+#
+# 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 <https://www.gnu.org/licenses/>.
+
+set -e
+
+PROGRAM="$(basename ${0})"
+
+RED="\033[1;33;31m"
+GREEN="\033[1;33;32m"
+YELLOW="\033[1;33;33m"
+BLUE="\033[1;33;34m"
+WHITE="\033[1;33;37m"
+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
diff --git a/linux/share/man/Makefile b/linux/share/man/Makefile
new file mode 100644
index 0000000..a6d6bf2
--- /dev/null
+++ b/linux/share/man/Makefile
@@ -0,0 +1,59 @@
+# Open Infrastructure: service-tools
+
+# Copyright (C) 2014-2022 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+#
+# 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 <https://www.gnu.org/licenses/>.
+
+# Depends: python3-docutils
+
+RST2MAN = rst2man \
+ --no-datestamp \
+ --no-generator \
+ --strict \
+ --strip-comments \
+ --tab-width=4 \
+ --verbose
+
+VERSION := $(shell cat ../../../VERSION.txt)
+
+SHELL := sh -e
+
+all: build
+
+build: man
+
+man: man.in *.rst
+ @echo -n "Creating manpages... "
+
+ @for FILE in *.rst; \
+ do \
+ cp man.in $$(basename $${FILE} .rst); \
+ $(RST2MAN) $${FILE} | \
+ sed -e '/^.\\" Man page generated/d' \
+ -e '/^.\\" Generated by/d' \
+ -e "s|^\(.TH .*\) \(\"\" \"\"\) |\1 $${VERSION} service-tools |" \
+ >> $$(basename $${FILE} .rst); \
+ echo -n "."; \
+ done
+
+ @echo " done."
+
+clean:
+ rm -f *.[0-9]
+
+distclean: clean
+
+rebuild: clean build
diff --git a/linux/share/man/linux-i40e.1.rst b/linux/share/man/linux-i40e.1.rst
new file mode 100644
index 0000000..f4c2eb7
--- /dev/null
+++ b/linux/share/man/linux-i40e.1.rst
@@ -0,0 +1,85 @@
+.. Open Infrastructure: service-tools
+
+.. Copyright (C) 2014-2022 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+..
+.. 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 <https://www.gnu.org/licenses/>.
+
+==========
+linux-i40e
+==========
+
+------------------------------------------------------------
+setting recommended options for the Linux i40e device driver
+------------------------------------------------------------
+
+:manual section: 1
+:manual group: Open Infrastructure
+
+Synopsis
+========
+
+| **linux-i40e** start|stop|status
+
+Description
+===========
+
+**linux-i40e** sets all recommended options for the Linux i40e device driver.
+
+Recommended options
+===================
+
+| **Enabling disable-fw-lldp**
+| Many Intel network cards such as the X700 Series drop LLDP pakets by default.
+| When using LACP (802.1ad) this has the effect that after a reboot of one switch,
+| the bond interfaces do not recover. Disabling the firewalling of LLDP pakets on
+| the network card allows the operating system (= Linux kernel) to actually recieve
+| the pakets and re-establish the bonded connection.
+
+| **Enabling link-down-on-close**
+| Many Intel network cards such as the X700 Series do not take down the link
+| when the corresponding interface is deconfigured. This is in contrast to the
+| consumer (Intel) network cards that usually do this. Therefore, without enabling
+| the link-down-on-close, most assumptions of HA stacks (e.g. pacemaker/corosync)
+| are not met and can lead to various unwanted effects. Enabling this options
+| restores the usual behaviour.
+
+See also
+========
+
+| ethtool(8),
+| https://www.kernel.org/doc/Documentation/networking/i40e.txt
+
+Homepage
+========
+
+More information about service-tools and the Open Infrastructure project can be
+found on the homepage (https://open-infrastructure.net).
+
+Contact
+=======
+
+Bug reports, feature requests, help, patches, support and everything else are
+welcome on the Open Infrastructure Software Mailing List
+<software@lists.open-infrastructure.net>.
+
+Debian specific bugs can also be reported in the Debian Bug Tracking System
+(https://bugs.debian.org).
+
+Authors
+=======
+
+service-tools were written by Daniel Baumann
+<daniel.baumann@open-infrastructure.net> and others.
diff --git a/linux/share/man/man.in b/linux/share/man/man.in
new file mode 100644
index 0000000..f95ca67
--- /dev/null
+++ b/linux/share/man/man.in
@@ -0,0 +1,19 @@
+.\" Open Infrastructure: service-tools
+.\"
+.\" Copyright (C) 2014-2022 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+.\"
+.\" 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 <https://www.gnu.org/licenses/>.
+.\"
diff --git a/linux/share/systemd/linux-i40e.service b/linux/share/systemd/linux-i40e.service
new file mode 100644
index 0000000..5d7f99f
--- /dev/null
+++ b/linux/share/systemd/linux-i40e.service
@@ -0,0 +1,17 @@
+# Open Infrastructure: service-tools
+
+[Unit]
+Description=setting recommended options for the Linux i40e device driver
+Documentation=man:linux-i40e
+Before=network.target
+
+[Service]
+Type=oneshot
+RemainAfterExit=yes
+ExecStart=/usr/bin/linux-i40e start
+ExecStop=/usr/bin/linux-i40e stop
+StandardOutput=journal
+StandardError=journal
+
+[Install]
+WantedBy=multi-user.target