. /usr/lib/network/header-port
-# Default MTU
-DEFAULT_MTU=1500
-
# DEVICE equals the actual MAC address of the device.
# If ADDRESS is set, the device will get ADDRESS set for its MAC address.
-HOOK_SETTINGS="HOOK ADDRESS DEVICE MTU"
+HOOK_SETTINGS="ADDRESS ADVERTISED_LINK_SPEEDS DEVICE OFFLOADING MTU"
hook_check_settings() {
assert ismac DEVICE
if isset MTU; then
assert mtu_is_valid "ethernet" "${MTU}"
fi
+
+ if isset MODES; then
+ local mode
+ for mode in ${MODES}; do
+ assert [ -n "${DEVICE_LINK_SPEEDS[${mode}]}" ]
+ done
+ fi
}
hook_parse_cmdline() {
fi
;;
+ --advertised-link-speeds=*)
+ ADVERTISED_LINK_SPEEDS="$(cli_get_val "${1}")"
+
+ local speed
+ for speed in ${ADVERTISED_LINK_SPEEDS}; do
+ if [ -z "${DEVICE_LINK_SPEEDS[${speed}]}" ]; then
+ error "Unsupported link speed: ${speed}"
+ return ${EXIT_ERROR}
+ fi
+ done
+ ;;
+
--mtu=*)
MTU="$(cli_get_val "${1}")"
return ${EXIT_ERROR}
fi
;;
+
+ --offloading=*)
+ OFFLOADING="$(cli_get_val "${1}")"
+
+ if enabled OFFLOADING; then
+ OFFLOADING="on"
+ elif disabled OFFLOADING; then
+ OFFLOADING="off"
+ else
+ error "Invalid value for offloading: ${OFFLOADING}"
+ return ${EXIT_ERROR}
+ fi
+ ;;
+
*)
error "Unknown argument: ${1}"
return ${EXIT_ERROR}
done
}
+# This function is only called automatically by hotplug to create
+# a new ethernet port.
+hook_new() {
+ local port="${1}"
+ assert isset port
+
+ local device="${2}"
+ assert isset device
+
+ local DEVICE="$(device_get_address "${device}")"
+
+ if ! port_settings_write "${port}" ${HOOK_SETTINGS}; then
+ log ERROR "Could not write settings for port ${port}"
+ return ${EXIT_ERROR}
+ fi
+
+ return ${EXIT_OK}
+}
+
hook_create() {
return ${EXIT_OK}
}
device_set_mtu "${port}" "${DEFAULT_MTU}"
fi
+ # Set link speeds
+ if isset ADVERTISED_LINK_SPEEDS; then
+ device_advertise_link_speeds "${port}" ${ADVERTISED_LINK_SPEEDS}
+ fi
+
+ # Auto-enable or disable hardware offloading
+ if ! isset OFFLOADING || enabled OFFLOADING; then
+ offloading_auto "${port}"
+ else
+ offloading_disable_all "${port}"
+ fi
+
# Bring up the device
device_set_up "${port}"