realtek-dropping-packets-on-linux-ubuntu-and-fedora

14y, 334d ago [edited]

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 https://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

hide preview ▲show preview ▼

What's next? verify your email address for reply notifications!

scottman1987 14y, 220d ago

Thanks - Exactly what I needed!

hide preview ▲show preview ▼

What's next? verify your email address for reply notifications!

scottman1987 14y, 218d ago

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?

hide preview ▲show preview ▼

What's next? verify your email address for reply notifications!

foxhop 14y, 217d ago

I have not experienced the problem you discribed.

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

hide preview ▲show preview ▼

What's next? verify your email address for reply notifications!

scottman1987 14y, 216d ago

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

hide preview ▲show preview ▼

What's next? verify your email address for reply notifications!

foxhop 14y, 215d ago

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.

hide preview ▲show preview ▼

What's next? verify your email address for reply notifications!

tonyyoungblood 14y, 213d ago

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.

hide preview ▲show preview ▼

What's next? verify your email address for reply notifications!

tonyyoungblood 14y, 213d ago

I found a fix.

You have to update driver cache after blacklisting.

Code:

update-initramfs -u

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

hide preview ▲show preview ▼

What's next? verify your email address for reply notifications!

foxhop 14y, 213d ago

@scottman1987

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

.. code-block:: bash

update-initramfs -u

hide preview ▲show preview ▼

What's next? verify your email address for reply notifications!

scottman1987 14y, 212d ago

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.

hide preview ▲show preview ▼

What's next? verify your email address for reply notifications!

scottman1987 14y, 212d ago

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

hide preview ▲show preview ▼

What's next? verify your email address for reply notifications!

foxhop 14y, 211d ago

Welcome, glad I could help!

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

hide preview ▲show preview ▼

What's next? verify your email address for reply notifications!

foxhop 14y, 180d ago

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

.. code-block:: 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

hide preview ▲show preview ▼

What's next? verify your email address for reply notifications!

dreamkatana 14y, 137d ago

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

hide preview ▲show preview ▼

What's next? verify your email address for reply notifications!

foxhop 14y, 137d ago

No problem @dreamkatana,

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

hide preview ▲show preview ▼

What's next? verify your email address for reply notifications!

petervg 14y, 122d ago

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

hide preview ▲show preview ▼

What's next? verify your email address for reply notifications!

max 14y, 86d ago

I have a system with both this:

.. code-block:: bash

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

and this:

.. code-block:: bash

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):

.. code-block:: bash

# 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.)

hide preview ▲show preview ▼

What's next? verify your email address for reply notifications!

mnek84 14y, 18d ago

Thank you! this post save my life!!!

hide preview ▲show preview ▼

What's next? verify your email address for reply notifications!

lagasuarus 12y, 349d ago

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-- https://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'

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, from include/linux/pci.h:1342, from /home/adam/r8168-8.023.00/src/r8168_n.c:41: 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

hide preview ▲show preview ▼

What's next? verify your email address for reply notifications!

foxhop 12y, 344d ago

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

hide preview ▲show preview ▼

What's next? verify your email address for reply notifications!