No network on resume in OpenSuse

I noticed that my network connection was not active after a resume from sleep mode in OpenSuse 12.2

The symptom was that when I resumed, the network connection would not be active and ifconfig showed only the lo connection, not eth0. I could manually solve this each time by running the following commands but this was a pain and hardly a seamless user experience.

$ sudo dhclient eth0
$ sudo mount -all

Then I stumbled across a solution on the OpenSuse forums which gave the clues to fix the problem. First, use lspci to find the name of the kernel module for the ethernet controller concerned (mine is highlighted in bold):

$sudo /sbin/lspci -v
03:00.0 Ethernet controller: Intel Corporation 82574L Gigabit Network Connection
        Subsystem: Intel Corporation Gigabit CT Desktop Adapter
        Flags: bus master, fast devsel, latency 0, IRQ 16
        Memory at f7dc0000 (32-bit, non-prefetchable) [size=128K]
        Memory at f7d00000 (32-bit, non-prefetchable) [size=512K]
        I/O ports at d000 [size=32]
        Memory at f7de0000 (32-bit, non-prefetchable) [size=16K]
        Expansion ROM at f7d80000 [disabled] [size=256K]
        Capabilities: [c8] Power Management version 2
        Capabilities: [d0] MSI: Enable- Count=1/1 Maskable- 64bit+
        Capabilities: [e0] Express Endpoint, MSI 00
        Capabilities: [a0] MSI-X: Enable+ Count=5 Masked-
        Capabilities: [100] Advanced Error Reporting
        Capabilities: [140] Device Serial Number 68-05-ca-ff-ff-11-53-51
        Kernel driver in use: e1000e

Then edit /etc/pm/config.d/unload_modules (or create it if it doesn't exist) and add the following line substituting the module name for your own:

SUSPEND_MODULES="$SUSPEND_MODULES e1000e"

That's it. From now on, when you resume from sleep the network should be up and waiting for you.

First published on 21st August 2013 and last modified on 27th December 2013.