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 \
# 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"
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 ]
--- /dev/null
+#!/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 <http://www.gnu.org/licenses/>. #
+# #
+###############################################################################
+
+# 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}
+}
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}"
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}"