From 3608f641cd2668e2ff8fd8c0cedfb6ab70db7ea2 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Fri, 21 Sep 2018 14:50:12 +0200 Subject: [PATCH] Move offloading code into an own file Signed-off-by: Michael Tremer --- Makefile.am | 1 + src/functions/functions.constants | 24 --------- src/functions/functions.device | 41 -------------- src/functions/functions.offloading | 85 ++++++++++++++++++++++++++++++ src/hooks/ports/bonding | 4 +- src/hooks/ports/ethernet | 4 +- 6 files changed, 90 insertions(+), 69 deletions(-) create mode 100644 src/functions/functions.offloading diff --git a/Makefile.am b/Makefile.am index 612c0bd5..05877438 100644 --- a/Makefile.am +++ b/Makefile.am @@ -167,6 +167,7 @@ dist_network_DATA = \ src/functions/functions.logging \ src/functions/functions.macros \ src/functions/functions.modem \ + src/functions/functions.offloading \ src/functions/functions.phy \ src/functions/functions.ports \ src/functions/functions.ppp \ diff --git a/src/functions/functions.constants b/src/functions/functions.constants index 63c5cad2..0d6cdd2f 100644 --- a/src/functions/functions.constants +++ b/src/functions/functions.constants @@ -94,30 +94,6 @@ DISCOVER_NOT_SUPPORTED=2 # Default MTU DEFAULT_MTU=1500 -# A list of supported device offloading mechanisms -# that are being mapped to the ethtool command -declare -A DEVICE_SUPPORTED_OFFLOADINGS=( - [generic-receive-offload]="gro" - [generic-segmentation-offload]="gso" - [large-receive-offload]="lro" - [rx-checksumming]="rx" - [scatter-gather]="sg" - [tcp-segmentation-offload]="tso" - [tx-checksumming]="tx" - [udp-fragmentation-offload]="ufo" -) - -# These offloadings will automatically be enabled (if supported) -DEVICE_AUTO_OFFLOADINGS=( - generic-receive-offload - generic-segmentation-offload - rx-checksumming - scatter-gather - tcp-segmentation-offload - tx-checksumming - udp-fragmentation-offload -) - # The user is able to create zones that begin # with these names followed by a number. ZONE_LOCAL="net" diff --git a/src/functions/functions.device b/src/functions/functions.device index e8fdc826..8384273d 100644 --- a/src/functions/functions.device +++ b/src/functions/functions.device @@ -974,47 +974,6 @@ device_get_link_string() { print "${s}" } -device_auto_offloading() { - local device="${1}" - assert isset device - - # Enable all offloadings that we consider a good default - local offloading - for offloading in ${DEVICE_AUTO_OFFLOADINGS[@]}; do - device_set_offloading "${device}" "${offloading}" "on" - done - - return ${EXIT_OK} -} - -device_set_offloading() { - local device="${1}" - assert isset device - - local offloading="${2}" - assert isoneof offloading ${!DEVICE_SUPPORTED_OFFLOADINGS[@]} - - local value="${3}" - assert isoneof value on off - - # Translate to ethool option - local mode="${DEVICE_SUPPORTED_OFFLOADINGS[${offloading}]}" - if ! isset mode; then - error "Unsupported offloading mode: ${offloading}" - return ${EXIT_ERROR} - fi - - # Run ethtool - if ! cmd_quiet ethtool --offload "${device}" "${mode}" "${value}"; then - log DEBUG "Could not set ${offloading} on ${device} to ${value}" - return ${EXIT_ERROR} - fi - - log DEBUG "Set ${offloading} on ${device} to ${value}" - - return ${EXIT_OK} -} - device_auto_configure_smp_affinity() { assert [ $# -eq 1 ] diff --git a/src/functions/functions.offloading b/src/functions/functions.offloading new file mode 100644 index 00000000..d59b83af --- /dev/null +++ b/src/functions/functions.offloading @@ -0,0 +1,85 @@ +#!/bin/bash +############################################################################### +# # +# IPFire.org - A linux based firewall # +# Copyright (C) 2018 IPFire Network Development Team # +# # +# 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 . # +# # +############################################################################### + +# A list of supported device offloading mechanisms +# that are being mapped to the ethtool command +declare -A SUPPORTED_OFFLOADINGS=( + [generic-receive-offload]="gro" + [generic-segmentation-offload]="gso" + [large-receive-offload]="lro" + [rx-checksumming]="rx" + [scatter-gather]="sg" + [tcp-segmentation-offload]="tso" + [tx-checksumming]="tx" + [udp-fragmentation-offload]="ufo" +) + +# These offloadings will automatically be enabled (if supported) +AUTO_OFFLOADINGS=( + generic-receive-offload + generic-segmentation-offload + rx-checksumming + scatter-gather + tcp-segmentation-offload + tx-checksumming + udp-fragmentation-offload +) + +offloading_auto() { + local device="${1}" + assert isset device + + # Enable all offloadings that we consider a good default + local offloading + for offloading in ${AUTO_OFFLOADINGS[@]}; do + offloading_set "${device}" "${offloading}" "on" + done + + return ${EXIT_OK} +} + +offloading_set() { + local device="${1}" + assert isset device + + local offloading="${2}" + assert isoneof offloading ${!SUPPORTED_OFFLOADINGS[@]} + + local value="${3}" + assert isoneof value on off + + # Translate to ethool option + local mode="${SUPPORTED_OFFLOADINGS[${offloading}]}" + if ! isset mode; then + error "Unsupported offloading mode: ${offloading}" + return ${EXIT_ERROR} + fi + + # Run ethtool + if ! cmd_quiet ethtool --offload "${device}" "${mode}" "${value}"; then + log DEBUG "Could not set ${offloading} on ${device} to ${value}" + return ${EXIT_ERROR} + fi + + log DEBUG "Set ${offloading} on ${device} to ${value}" + + return ${EXIT_OK} +} diff --git a/src/hooks/ports/bonding b/src/hooks/ports/bonding index d8bc5839..e93c6117 100644 --- a/src/hooks/ports/bonding +++ b/src/hooks/ports/bonding @@ -175,8 +175,8 @@ hook_up() { port_settings_read "${port}" ${HOOK_SETTINGS} - # Enable hardware offloading - device_auto_offloading "${port}" + # Auto-enable hardware offloading + offloading_auto "${port}" # Execute the default action hook_default_up "${port}" diff --git a/src/hooks/ports/ethernet b/src/hooks/ports/ethernet index c7750f9d..823090d7 100644 --- a/src/hooks/ports/ethernet +++ b/src/hooks/ports/ethernet @@ -117,8 +117,8 @@ hook_up() { device_advertise_link_speeds "${port}" ${ADVERTISED_LINK_SPEEDS} fi - # Enable hardware offloading - device_auto_offloading "${port}" + # Auto-enable hardware offloading + offloading_auto "${port}" # Bring up the device device_set_up "${port}" -- 2.39.2