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.shprevent 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
Thanks - Exactly what I needed!
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?
I have not experienced the problem you discribed.
Update: I must reinstall the driver each time ubuntu updates the kernel.
I'm running 64-bit ubuntu (release 11.04). Would this possibly have anything to do with the problems I am having?
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.
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.
I found a fix.
You have to update driver cache after blacklisting.
Code:
update-initramfs -u
From http://ubuntuforums.org/showthread.php?t=1767781
@scottman1987
Could you please attempt to try tonyyoungblood's drive cache work around?
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.
And, I should also say, thatnk you very much!
Welcome, glad I could help!
I should really build functionality to allow users to edit their comments...
This driver supports linux 3.0 however we need to make a change to the src/Makefile
Adjust the sed regex to include linux version 3.x
This correction was found in the code.google.com realtek issue tracker
Thank's everybody, that worked for me. It really helped me, IF you need a paypal donation just ask me.
No problem @dreamkatana,
I sent you an email with my contact information. Thanks for the kind comment!
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
I have a system with both this:
and this:
... 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):
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.)
Thank you! this post save my life!!!
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'
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,
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
@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