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

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

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

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:

.. code-block:: bash

update-initramfs -u

You should donate to foxhop.net here <https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=7HQMTG3JFPBNN>_

scottman1987 — Sep 05, 2011 12:23 pm

Thanks - Exactly what I needed!

scottman1987 — Sep 07, 2011 11:15 am

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 — Sep 07, 2011 05:49 pm

I have not experienced the problem you discribed.

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

scottman1987 — Sep 09, 2011 11:57 am

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

foxhop — Sep 09, 2011 06:17 pm

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 — Sep 11, 2011 08:06 pm

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 — Sep 11, 2011 08:12 pm

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 — Sep 12, 2011 01:37 pm

@scottman1987

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

.. code-block:: bash

update-initramfs -u

scottman1987 — Sep 13, 2011 04:02 pm

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 — Sep 13, 2011 04:03 pm

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

foxhop — Sep 14, 2011 03:32 pm

Welcome, glad I could help!

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

foxhop — Oct 15, 2011 06:33 am

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/1.[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 — Nov 27, 2011 12:35 pm

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

foxhop — Nov 27, 2011 03:12 pm

No problem @dreamkatana,

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

petervg — Dec 11, 2011 10:28 pm

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 — Jan 16, 2012 06:56 pm

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

mnek84 — Mar 25, 2012 11:46 am

Thank you! this post save my life!!!

lagasuarus — Apr 28, 2013 04:50 pm

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– /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 ’ /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

foxhop — May 02, 2013 05:50 pm

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