Login or register    
Website screenshot service | LinkPeek.com

Realtek NIC driver r8169 dropping packets on linux ubuntu and fedora

Many motherboards nowadays have integrated gigabit ethernet that use the Realtek NIC chipset.

The Realtek r8168B network card does not work out of the box in Redhat, Centos, Fedora, or Ubuntu: instead of loading the r8168 driver, modprobe loads the r8169 driver, which is broken as can be seen with ifconfig which shows large amounts of dropped packets.

One solution found by Barry Mavin is to remove the r8169 driver and install the latest r8168 driver.

Steps to install Realtek r8168 driver

  • Download the R8168B linux driver:

    wget http://www.foxhop.net/attachment/r8168-8.023.00.tar.bz2
    tar vjxf r8168-8.023.00.tar.bz2
    
  • Check whether the built-in driver, r8169.ko (or r8169.o for kernel 2.4.x), is installed:

    lsmod | grep r8169
    
  • r8169 seems installed if the lsmod command returns output, so remove r8169 with:

    sudo rmmod r8169
    
  • install the Realtec r8168b nic driver:

    cd r8168-8.023.00
    sudo ./autorun.sh
    
  • prevent the r8169 driver from loading again:

    echo "blacklist r8169" >> /etc/modprobe.d/blacklist.conf
    
  • you may now verify that r8168b has been installed and loaded by running:

    lsmod | grep r8168
    

The dropped packets problem should appear fixed!

Some people notice r8169 driver returning after reboots. To prevent this you might need to clean the cache using the following command:

update-initramfs -u

You should donate to foxhop.net here

Comments

scottman1987 04:23 PM 09-05-2011

Thanks - Exactly what I needed!

scottman1987 03:15 PM 09-07-2011

Sorry - I spoke too soon. This worked the first time that I tried it. However, the next day when I booted up the machine again, r8169 was again loaded. I double checked the blacklist line in blacklist.conf, and verified that it was correctly inserted into the file. I found the location of r8169.ko and removed it from the file system. No luck - each time ubuntu boots, r8169 is right back there, like a bad penny.

Here is the pertinent portion of the blacklist.conf file: # don't let the realtek r8169 driver load blacklist r8169

Output of the lsmod command (portion): hid 91020 1 usbhid r8169 48022 0 xhci_hcd 77643 0

Not to mention... It seems that running the autorun.sh command before attempting to use the network will cause the system to hang hard, so that I have to manually reset it.

Hers is the folder contents for the kennel drivers scottman@CWK04:/lib/modules/2.6.38-11-generic/kernel/drivers/net$ ls r* r8168.ko rrunner.ko

Any thoughts? Am I missing something? Where is the system getting the r8169 driver from?

foxhop 09:49 PM 09-07-2011

I have not experienced the problem you discribed.

Update: I must reinstall the driver each time ubuntu updates the kernel.

scottman1987 03:57 PM 09-09-2011

I'm running 64-bit ubuntu (release 11.04). Would this possibly have anything to do with the problems I am having?

foxhop 10:17 PM 09-09-2011

I'm running the same operating system as you. (Ubuntu 11.04)

It sounds like the "Blacklist" isn't working. Maybe do some research about that.

tonyyoungblood 12:06 AM 09-12-2011

I am experiencing the exact same problem as Scottman1987 on Mythbuntu 11.04 64 bit. Even after blacklisting, r8169 reloads upon startup and causes poor or no network connection. I also experience system lockups while running the above instructions.

tonyyoungblood 12:12 AM 09-12-2011

I found a fix.

You have to update driver cache after blacklisting.

Code:

update-initramfs -u

From http://ubuntuforums.org/showthread.php?t=1767781

foxhop 05:37 PM 09-12-2011

@scottman1987

Could you please attempt to try tonyyoungblood's drive cache work around?

update-initramfs -u
scottman1987 08:02 PM 09-13-2011

Yes - I tried tonyyoungblood's drive cache workaround, and it appears to have solved my issue.

I had to run the autorun.sh file first (which I always had to do, because of the fact that it was not retaining the driver), and after that command was successful, I ran the update-initramfs -u command (specifically sudo update-initramfs -u), restarted the machine, opened a terminal session, ran lsmod, and got the r8168 driver in the list instead of r8169. From what I can tell with initial testing of large downloads and going to Internet web sites, it is functioning well.

scottman1987 08:03 PM 09-13-2011

And, I should also say, thatnk you very much!

foxhop 07:32 PM 09-14-2011

Welcome, glad I could help!

I should really build functionality to allow users to edit their comments...

foxhop 10:33 AM 10-15-2011

This driver supports linux 3.0 however we need to make a change to the src/Makefile

# comment out original line
#KEXT           := $(shell echo $(KVER) | sed -ne 's/^2\.[567]\..*/k/p')o
# replace with this line
KEXT            := $(shell echo $(KVER) | sed -ne 's/^[23]\.[0123456789]\..*/k/p')o

Adjust the sed regex to include linux version 3.x

This correction was found in the code.google.com realtek issue tracker

dreamkatana 05:35 PM 11-27-2011

Thank's everybody, that worked for me. It really helped me, IF you need a paypal donation just ask me.

foxhop 08:12 PM 11-27-2011

No problem @dreamkatana,

I sent you an email with my contact information. Thanks for the kind comment!

petervg 03:28 AM 12-12-2011

Thanks for detailed directions dude. Was experiencing same problem with Ubuntu 11.10 on a Dell Vostro which uses the Realtek network card

FYI for others, use the following command to find out what network card your machine is using:

sudo lshw -class network

max 11:56 PM 01-16-2012

I have a system with both this:

04:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 06)

and this:

06:01.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8169 Gigabit Ethernet (rev 10)

... so I couldn't blacklist the r8169 driver without disabling the second LAN port. However, I found that I could specify which driver to load for which device by editing /etc/udev/rules.d/70-persistent-net.rules like so (MAC addresses redacted):

# PCI device 0x10ec:0x8168 (r8168)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="r8168", ATTR{address}=="xx:xx:xx:xx:xx:xx", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

# PCI device 0x10ec:0x8169 (r8169)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="r8169", ATTR{address}=="xx:xx:xx:xx:xx:xx", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"

This seems to load both the r8168 driver and the r1869 driver and use the correct one for each, with no need for blacklisting.

(I also needed to edit the driver Makefile for linux 3.0 as per comment above.)

mnek84 03:46 PM 03-25-2012

Thank you! this post save my life!!!

lagasuarus 08:50 PM 04-28-2013

please tell me what I am doing wrong

i do steps 1 and 4

and these are my outputs

--2013-04-28 17:48:21-- http://www.foxhop.net/attachment/r8168-8.023.00.tar.bz2 Resolving www.foxhop.net (www.foxhop.net)... 76.231.160.38 Connecting to www.foxhop.net (www.foxhop.net)|76.231.160.38|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 59857 (58K) [application/x-tar] Saving to: `r8168-8.023.00.tar.bz2.3'

System Message: WARNING/2 (<string>, line 8); backlink

Inline interpreted text or phrase reference start-string without end-string.

r8168-8.023.00/ r8168-8.023.00/Makefile r8168-8.023.00/src/ r8168-8.023.00/src/Makefile r8168-8.023.00/src/r8168_asf.h r8168-8.023.00/src/rtl_eeprom.c r8168-8.023.00/src/r8168.h r8168-8.023.00/src/r8168_n.c r8168-8.023.00/src/r8168_asf.c r8168-8.023.00/src/rtl_eeprom.h r8168-8.023.00/src/rtltool.h r8168-8.023.00/src/rtltool.c r8168-8.023.00/src/Makefile_linux24x r8168-8.023.00/README r8168-8.023.00/autorun.sh

Check old driver and unload it. Build the module and install /home/adam/r8168-8.023.00/src/r8168_n.c: In function ‘rtl8168_rx_vlan_skb’: /home/adam/r8168-8.023.00/src/r8168_n.c:1702:3: error: implicit declaration of function ‘vlan_hwaccel_receive_skb’ [-Werror=implicit-function-declaration] /home/adam/r8168-8.023.00/src/r8168_n.c: At top level: /home/adam/r8168-8.023.00/src/r8168_n.c:2076:2: error: unknown field ‘get_rx_csum’ specified in initializer /home/adam/r8168-8.023.00/src/r8168_n.c:2076:2: warning: initialization from incompatible pointer type [enabled by default] /home/adam/r8168-8.023.00/src/r8168_n.c:2076:2: warning: (near initialization for ‘rtl8168_ethtool_ops.nway_reset’) [enabled by default] /home/adam/r8168-8.023.00/src/r8168_n.c:2077:2: error: unknown field ‘set_rx_csum’ specified in initializer /home/adam/r8168-8.023.00/src/r8168_n.c:2077:2: warning: initialization from incompatible pointer type [enabled by default] /home/adam/r8168-8.023.00/src/r8168_n.c:2077:2: warning: (near initialization for ‘rtl8168_ethtool_ops.get_link’) [enabled by default] /home/adam/r8168-8.023.00/src/r8168_n.c:2078:2: error: unknown field ‘get_tx_csum’ specified in initializer /home/adam/r8168-8.023.00/src/r8168_n.c:2078:2: warning: initialization from incompatible pointer type [enabled by default] /home/adam/r8168-8.023.00/src/r8168_n.c:2078:2: warning: (near initialization for ‘rtl8168_ethtool_ops.get_eeprom_len’) [enabled by default] /home/adam/r8168-8.023.00/src/r8168_n.c:2079:2: error: unknown field ‘set_tx_csum’ specified in initializer /home/adam/r8168-8.023.00/src/r8168_n.c:2079:2: warning: initialization from incompatible pointer type [enabled by default] /home/adam/r8168-8.023.00/src/r8168_n.c:2079:2: warning: (near initialization for ‘rtl8168_ethtool_ops.get_eeprom’) [enabled by default] /home/adam/r8168-8.023.00/src/r8168_n.c:2080:2: error: unknown field ‘get_sg’ specified in initializer /home/adam/r8168-8.023.00/src/r8168_n.c:2080:2: warning: initialization from incompatible pointer type [enabled by default] /home/adam/r8168-8.023.00/src/r8168_n.c:2080:2: warning: (near initialization for ‘rtl8168_ethtool_ops.set_eeprom’) [enabled by default] /home/adam/r8168-8.023.00/src/r8168_n.c:2081:2: error: unknown field ‘set_sg’ specified in initializer /home/adam/r8168-8.023.00/src/r8168_n.c:2081:2: warning: initialization from incompatible pointer type [enabled by default] /home/adam/r8168-8.023.00/src/r8168_n.c:2081:2: warning: (near initialization for ‘rtl8168_ethtool_ops.get_coalesce’) [enabled by default] /home/adam/r8168-8.023.00/src/r8168_n.c:2083:2: error: unknown field ‘get_tso’ specified in initializer /home/adam/r8168-8.023.00/src/r8168_n.c:2083:14: error: ‘ethtool_op_get_tso’ undeclared here (not in a function) /home/adam/r8168-8.023.00/src/r8168_n.c:2084:2: error: unknown field ‘set_tso’ specified in initializer /home/adam/r8168-8.023.00/src/r8168_n.c:2084:14: error: ‘ethtool_op_set_tso’ undeclared here (not in a function) /home/adam/r8168-8.023.00/src/r8168_n.c: In function ‘rtl8168_netpoll’: /home/adam/r8168-8.023.00/src/r8168_n.c:9610:2: error: implicit declaration of function ‘disable_irq’ [-Werror=implicit-function-declaration] /home/adam/r8168-8.023.00/src/r8168_n.c:9616:2: error: implicit declaration of function ‘enable_irq’ [-Werror=implicit-function-declaration] /home/adam/r8168-8.023.00/src/r8168_n.c: In function ‘rtl8168_init_one’: /home/adam/r8168-8.023.00/src/r8168_n.c:10858:2: error: ‘struct net_device’ has no member named ‘open’ /home/adam/r8168-8.023.00/src/r8168_n.c:10858:2: error: ‘struct net_device’ has no member named ‘hard_start_xmit’ /home/adam/r8168-8.023.00/src/r8168_n.c:10858:2: error: ‘struct net_device’ has no member named ‘get_stats’ /home/adam/r8168-8.023.00/src/r8168_n.c:10858:2: error: ‘struct net_device’ has no member named ‘stop’ /home/adam/r8168-8.023.00/src/r8168_n.c:10858:2: error: ‘struct net_device’ has no member named ‘tx_timeout’ /home/adam/r8168-8.023.00/src/r8168_n.c:10858:2: error: ‘struct net_device’ has no member named ‘set_multicast_list’ /home/adam/r8168-8.023.00/src/r8168_n.c:10858:2: error: ‘struct net_device’ has no member named ‘change_mtu’ /home/adam/r8168-8.023.00/src/r8168_n.c:10858:2: error: ‘struct net_device’ has no member named ‘set_mac_address’ /home/adam/r8168-8.023.00/src/r8168_n.c:10858:2: error: ‘struct net_device’ has no member named ‘do_ioctl’ /home/adam/r8168-8.023.00/src/r8168_n.c:10858:2: error: ‘struct net_device’ has no member named ‘poll_controller’ /home/adam/r8168-8.023.00/src/r8168_n.c:10858:2: error: ‘struct net_device’ has no member named ‘vlan_rx_register’ /home/adam/r8168-8.023.00/src/r8168_n.c: In function ‘rtl8168_open’: /home/adam/r8168-8.023.00/src/r8168_n.c:11020:2: error: implicit declaration of function ‘request_irq’ [-Werror=implicit-function-declaration] /home/adam/r8168-8.023.00/src/r8168_n.c:11020:91: error: ‘IRQF_SHARED’ undeclared (first use in this function) /home/adam/r8168-8.023.00/src/r8168_n.c:11020:91: note: each undeclared identifier is reported only once for each function it appears in /home/adam/r8168-8.023.00/src/r8168_n.c: In function ‘rtl8168_xmit_frags’: /home/adam/r8168-8.023.00/src/r8168_n.c:12284:3: error: incompatible type for argument 1 of ‘lowmem_page_address’ In file included from /usr/src/linux-headers-3.5.0-17-generic/arch/x86/include/asm/pci.h:4:0,

System Message: ERROR/3 (<string>, line 84)

Unexpected indentation.
from include/linux/pci.h:1342, from /home/adam/r8168-8.023.00/src/r8168_n.c:41:

System Message: WARNING/2 (<string>, line 86)

Block quote ends without a blank line; unexpected unindent.

include/linux/mm.h:739:30: note: expected ‘const struct page ’ but argument is of type ‘struct <anonymous>’ /home/adam/r8168-8.023.00/src/r8168_n.c: In function ‘rtl8168_close’: /home/adam/r8168-8.023.00/src/r8168_n.c:12934:3: error: implicit declaration of function ‘free_irq’ [-Werror=implicit-function-declaration] cc1: some warnings being treated as errors make[3]: ** [/home/adam/r8168-8.023.00/src/r8168_n.o] Error 1 make[2]: * [_module_/home/adam/r8168-8.023.00/src] Error 2 make[1]: * [modules] Error 2 make: *** [modules] Error 2

System Message: WARNING/2 (<string>, line 86); backlink

Inline strong start-string without end-string.
foxhop 09:50 PM 05-02-2013

@lagasuarus I don't believe I need this work around any more for Ubuntu 12.10+ What operation system are you running?

Leave a comment

Please login or register to leave a comment!