Intel e1000e NIC Offloading Fix
Create systemd services that switch off hardware offloading on Intel e1000e and e1000 network interfaces at every boot.
nic-offloading-fix.sh turns the hardware offloading features of Intel e1000e and e1000 network interfaces off with ethtool and makes that permanent with one systemd service per interface. Use it when such an interface hangs or drops its link under load and disabling offloading is the fix you want to apply.
Website entry: nic-offloading-fix. Source: tools/pve/nic-offloading-fix.sh.
Run
In the Proxmox VE host shell, as root:
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/pve/nic-offloading-fix.sh)"Checks
| Check | Result if not met |
|---|---|
| Run as root | Exit 104 |
ethtool is installed | It is installed with apt-get; exit 237 if that fails |
At least one interface uses the driver e1000e or e1000 | "No Intel e1000e or e1000 network interfaces found!", exit 236 |
Interfaces named lo or starting with tap, fwbr, veth, vmbr or bonding_masters are ignored.
Prompts
| Dialog | Choices | Effect |
|---|---|---|
| "Network Interfaces" (checklist, all found interfaces preselected, shown with driver and MAC address) | Interfaces to change | Cancel or an empty selection exits without changes. |
| "Confirmation" (lists each interface with driver, MAC and speed) | Yes / No | No exits without changes. |
| "Success" | OK | Summary: per interface whether the service is active and enabled. |
What it changes
For each selected interface the script writes /etc/systemd/system/disable-nic-offload-<interface>.service. For an e1000e interface named eno1 (the name is an example) it looks like this:
[Unit]
Description=Disable NIC offloading for Intel e1000e interface eno1
After=network.target
[Service]
Type=oneshot
# Disable all offloading features for Intel e1000e
ExecStart=/sbin/ethtool -K eno1 gso off gro off tso off tx off rx off rxvlan off txvlan off sg off
RemainAfterExit=true
[Install]
WantedBy=multi-user.targetIt then runs systemctl daemon-reload, starts the service (the change is active immediately) and enables it for boot.
Verify:
ethtool -k eno1
systemctl status disable-nic-offload-eno1.serviceUndo
The script has no remove option. For each interface:
systemctl disable --now disable-nic-offload-eno1.service
rm /etc/systemd/system/disable-nic-offload-eno1.service
systemctl daemon-reloadStopping the service does not switch offloading back on. Reboot the host, or re-enable the features with ethtool -K eno1 gso on gro on tso on tx on rx on rxvlan on txvlan on sg on.
Environment variables
| Variable | Default | Purpose |
|---|---|---|
COMMUNITY_SCRIPTS_CORE_URL | https://raw.githubusercontent.com/community-scripts/core/main | Base URL the script loads api/api.func from. |
Limits
- With offloading off, the work the NIC did before is done by the CPU.
- The service is bound to the interface name. If the name changes, for example after a kernel or hardware change, run the script again and remove the old service.
- Only interfaces whose driver is
e1000eore1000are offered.