Summary
Some Intel onboard NICs using the e1000e driver can intermittently lose network connectivity on Proxmox VE and repeatedly log errors like:
e1000e … Detected Hardware Unit Hang
This can cascade into Linux bridge ports being disabled (VM connectivity loss) and may trigger reboot/recovery automation if present.
A commonly used mitigation is to disable specific NIC offloads (especially TSO) and disable EEE (Energy Efficient Ethernet), then re-apply those settings on every boot using a systemd unit.
Symptoms
- Intermittent network loss on the Proxmox host
- VMs lose connectivity (bridge ports enter disabled state)
- Kernel logs show repeated hang messages
Example kernel log line:
e1000e 0000:00:1f.6 enp0s31f6: Detected Hardware Unit Hange1000e 0000:00:1f.6 enp0s31f6: Detected Hardware Unit HangAffected components
- Proxmox VE host
- Intel onboard NIC using the
e1000edriver - Example interface:
enp0s31f6
Solution overview
- Confirm the interface uses the
e1000edriver - Disable offloads (TSO/GSO/GRO)
- Disable EEE (if enabled/active)
- Persist both changes via a systemd
oneshotunit - Verify after reboot and monitor logs for recurrence
Step 1 — Confirm NIC driver and interface
# Show NIC + driver mapping
lspci -nnk | grep -A3 -i ethernet
# Driver details for the interface
ethtool -i enp0s31f6# Show NIC + driver mapping
lspci -nnk | grep -A3 -i ethernet
# Driver details for the interface
ethtool -i enp0s31f6Step 2 — Apply mitigations immediately (runtime)
2.1 Disable offloads (recommended)
Check current state:
ethtool -k enp0s31f6 | egrep 'tcp-segmentation-offload|generic-segmentation-offload|generic-receive-offload'ethtool -k enp0s31f6 | egrep 'tcp-segmentation-offload|generic-segmentation-offload|generic-receive-offload'Disable the common problematic features:
ethtool -K enp0s31f6 tso off gso off gro offethtool -K enp0s31f6 tso off gso off gro off2.2 Disable EEE (recommended if enabled/active)
Check:
ethtool --show-eee enp0s31f6ethtool --show-eee enp0s31f6Disable:
ethtool --set-eee enp0s31f6 eee offethtool --set-eee enp0s31f6 eee offNote:
ethtoolsettings are not persistent across reboot unless re-applied.
Step 3 — Persist across reboot with systemd
3.1 Create the service
Create /etc/systemd/system/nic-offloads.service:
[Unit]
Description=Disable problematic NIC offloads + EEE for e1000e stability
Wants=network-online.target
After=network-online.target
[Service]
Type=oneshot
# Offloads (common mitigation for e1000e hangs)
ExecStart=/usr/sbin/ethtool -K enp0s31f6 tso off gso off gro off
# EEE (recommended if active)
ExecStart=/usr/sbin/ethtool --set-eee enp0s31f6 eee off
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target[Unit]
Description=Disable problematic NIC offloads + EEE for e1000e stability
Wants=network-online.target
After=network-online.target
[Service]
Type=oneshot
# Offloads (common mitigation for e1000e hangs)
ExecStart=/usr/sbin/ethtool -K enp0s31f6 tso off gso off gro off
# EEE (recommended if active)
ExecStart=/usr/sbin/ethtool --set-eee enp0s31f6 eee off
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target3.2 Enable and run it now
systemctl daemon-reload
systemctl enable --now nic-offloads.service
systemctl restart nic-offloads.servicesystemctl daemon-reload
systemctl enable --now nic-offloads.service
systemctl restart nic-offloads.serviceStep 4 — Verification checklist
4.1 Verify EEE is disabled
ethtool --show-eee enp0s31f6ethtool --show-eee enp0s31f6Expected:
EEE status: disabled
4.2 Verify offloads are disabled
ethtool -k enp0s31f6 | egrep 'tcp-segmentation-offload|generic-segmentation-offload|generic-receive-offload'ethtool -k enp0s31f6 | egrep 'tcp-segmentation-offload|generic-segmentation-offload|generic-receive-offload'Expected:
tcp-segmentation-offload: offgeneric-segmentation-offload: offgeneric-receive-offload: off
4.3 Verify service ran successfully
systemctl status nic-offloads.service --no-pager
journalctl -u nic-offloads.service -b --no-pagersystemctl status nic-offloads.service --no-pager
journalctl -u nic-offloads.service -b --no-pagerStep 5 — Logging & monitoring
5.1 Persist journal logs across reboots (recommended)
mkdir -p /var/log/journal
systemctl restart systemd-journaldmkdir -p /var/log/journal
systemctl restart systemd-journald5.2 Monitor for recurrence
journalctl -k -f | egrep -i 'e1000e|Hardware Unit Hang|NETDEV WATCHDOG|timed out|reset'journalctl -k -f | egrep -i 'e1000e|Hardware Unit Hang|NETDEV WATCHDOG|timed out|reset'To review the previous boot if a reboot happens again:
journalctl -b -1 -k --no-pager | egrep -i 'e1000e|Hardware Unit Hang|NETDEV WATCHDOG|timed out|reset'journalctl -b -1 -k --no-pager | egrep -i 'e1000e|Hardware Unit Hang|NETDEV WATCHDOG|timed out|reset'Rollback
Re-enable offloads (choose what you want on):
ethtool -K enp0s31f6 tso on gso on gro onethtool -K enp0s31f6 tso on gso on gro onRe-enable EEE (if desired):
ethtool --set-eee enp0s31f6 eee onethtool --set-eee enp0s31f6 eee onDisable persistence:
systemctl disable --now nic-offloads.service
rm -f /etc/systemd/system/nic-offloads.service
systemctl daemon-reloadsystemctl disable --now nic-offloads.service
rm -f /etc/systemd/system/nic-offloads.service
systemctl daemon-reloadIf the issue persists
- Update BIOS/firmware (board + NIC)
- Test a different Proxmox kernel version (regression check)
- Consider e1000e tuning parameters (advanced)
- Long-term reliability: add a more robust NIC (e.g., Intel i210/i350 class)
Quick copy/paste: reapply + verify
# Apply now
ethtool -K enp0s31f6 tso off gso off gro off
ethtool --set-eee enp0s31f6 eee off
# Verify
ethtool --show-eee enp0s31f6
ethtool -k enp0s31f6 | egrep 'tcp-segmentation-offload|generic-segmentation-offload|generic-receive-offload'
# Service logs
systemctl status nic-offloads.service --no-pager
journalctl -u nic-offloads.service -b --no-pager# Apply now
ethtool -K enp0s31f6 tso off gso off gro off
ethtool --set-eee enp0s31f6 eee off
# Verify
ethtool --show-eee enp0s31f6
ethtool -k enp0s31f6 | egrep 'tcp-segmentation-offload|generic-segmentation-offload|generic-receive-offload'
# Service logs
systemctl status nic-offloads.service --no-pager
journalctl -u nic-offloads.service -b --no-pagerReferences
- Proxmox forum thread: Intel NIC e1000e hardware unit hang
- Garrett Laman: Fixing Intel e1000e NIC hangs on Proxmox nodes
- Kernel docs: Intel e1000e driver
- systemd: Running services after the network is up (
network-online.target) ethtooldocumentation (EEE / offloads)

