Pull to refresh

Установка драйвера для NIC Realtek RTL8101E в Linux

Может кому пригодится решение проблемы с низкой производительностью сетевой карты Realtek RTL8101E.
Установил Fedora 19 на ноутбук Samsung X120. В ноутбуке установлена сетевая карта
04:00.0 Ethernet controller [0200]: Realtek Semiconductor Co., Ltd. RTL8101E/RTL8102E PCI Express Fast Ethernet controller [10ec:8136] (rev 02).
Драйвер для нее встал вот такой:
Kernel driver in use: [b]r8169[/b]
Имя файла: /lib/modules/3.11.3-201.fc19.x86_64/kernel/drivers/net/ethernet/realtek/r8169.ko
kernel-3.11.3-201.fc19.x86_64: The Linux kernel
Источник: updates
iperf показывает трансфер порядка полутора мегабит:
[ 3] 0.0-11.9 sec 2.38 MBytes 1.68 Mbits/sec

На сайте производителя ( http://www.realtek.com )
есть исходники родного драйвера ( r8101-1.024.00.tar.bz2 ), который не собирается в новых ядрах из-за двух проблем:
1) константа
NETIF_F_HW_VLAN_RX

теперь называется
NETIF_F_HW_VLAN_CTAG_RX

2) в функцию
__vlan_hwaccel_put_tag(skb, swab16(opts2 & 0xffff))

добавлен новый (средний) параметр
__vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), swab16(opts2 & 0xffff))

решение было найдено в патчах для модуля r8169.ko
после установки нового модуля iperf показывает трансфер почти 100 Мбит/сек
0.0-10.0 sec 113 MBytes 94.1 Mbits/sec
ну и сформируем новый initramfs ( в fedor'е )
# dracut -f

К сожалению модуль приходится пересобирать после каждого апдейта пакета с ядром.
patch прилагаю:
--- r8101-1.024.00.not-patched/src/r8101_n.c	2013-06-14 10:45:47.000000000 +0400
+++ r8101-1.024.00/src/r8101_n.c	2013-09-25 15:52:22.000000000 +0400
@@ -1906,7 +1906,7 @@
     }
 #else
     if (opts2 & RxVlanTag)
-        __vlan_hwaccel_put_tag(skb, swab16(opts2 & 0xffff));
+        __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), swab16(opts2 & 0xffff));
 #endif
 
     desc->opts2 = 0;
@@ -1967,7 +1967,7 @@
     else
         tp->cp_cmd &= ~RxChkSum;
 
-    if (dev->features & NETIF_F_HW_VLAN_RX)
+    if (dev->features & NETIF_F_HW_VLAN_CTAG_RX)
         tp->cp_cmd |= RxVlan;
     else
         tp->cp_cmd &= ~RxVlan;
@@ -7292,7 +7292,7 @@
 #endif
 
 #ifdef CONFIG_R8101_VLAN
-    dev->features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX;
+    dev->features |= NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_HW_VLAN_CTAG_RX;
 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,22)
     dev->vlan_rx_kill_vid = rtl8101_vlan_rx_kill_vid;
 #endif//LINUX_VERSION_CODE < KERNEL_VERSION(2,6,22)
@@ -7305,7 +7305,7 @@
 #else
     dev->features |= NETIF_F_RXCSUM | NETIF_F_SG;
     dev->hw_features = NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_TSO |
-                       NETIF_F_RXCSUM | NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX;
+                       NETIF_F_RXCSUM | NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_HW_VLAN_CTAG_RX;
     dev->vlan_features = NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_TSO |
                          NETIF_F_HIGHDMA;
 #endif

Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.