Driver de rede some se reiniciar o linux - Resolvido

Boa noite, depois de uma frustrante jornada em tentar resolver um problema sozinho venho humildemente pedir a ajuda de vocês.

Nesse momento estou usando o Q4OS (Debian 11 Bullseye) e pra começar vou colocar as informações de lspci e tudo mais sobre o meu driver de rede.

[email protected]:~$ sudo lshw -C network
  *-network                 
       description: Ethernet interface
       product: RTL810xE PCI Express Fast Ethernet controller
       vendor: Realtek Semiconductor Co., Ltd.
       physical id: 0
       bus info: [email protected]:03:00.0
       logical name: enp3s0
       version: 05
       serial: bc:5f:f4:23:26:01
       size: 100Mbit/s
       capacity: 100Mbit/s
       width: 64 bits
       clock: 33MHz
       capabilities: pm msi pciexpress msix vpd bus_master cap_list ethernet physical tp mii 10bt 10bt-fd 100bt 100bt-fd autonegotiation
       configuration: autonegotiation=on broadcast=yes driver=r8169 driverversion=5.10.0-14-amd64 duplex=full firmware=rtl_nic/rtl8105e-1.fw ip=10.0.0.100 latency=0 link=yes multicast=yes port=twisted pair speed=100Mbit/s
       resources: irq:18 ioport:d000(size=256) memory:f2104000-f2104fff memory:f2100000-f2103fff
03:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL810xE PCI Express Fast Ethernet controller (rev 05)
        Subsystem: ASRock Incorporation RTL810xE PCI Express Fast Ethernet controller
        Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR+ FastB2B- DisINTx+
        Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
        Latency: 0, Cache Line Size: 64 bytes
        Interrupt: pin A routed to IRQ 18
        Region 0: I/O ports at d000 [size=256]
        Region 2: Memory at f2104000 (64-bit, prefetchable) [size=4K]
        Region 4: Memory at f2100000 (64-bit, prefetchable) [size=16K]
        Capabilities: [40] Power Management version 3
                Flags: PMEClk- DSI- D1+ D2+ AuxCurrent=375mA PME(D0+,D1+,D2+,D3hot+,D3cold+)
                Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=0 PME-
        Capabilities: [50] MSI: Enable- Count=1/1 Maskable- 64bit+
                Address: 0000000000000000  Data: 0000
        Capabilities: [70] Express (v2) Endpoint, MSI 01
                DevCap: MaxPayload 128 bytes, PhantFunc 0, Latency L0s <512ns, L1 <64us
                        ExtTag- AttnBtn- AttnInd- PwrInd- RBE+ FLReset- SlotPowerLimit 10.000W
                DevCtl: CorrErr- NonFatalErr- FatalErr- UnsupReq-
                        RlxdOrd- ExtTag- PhantFunc- AuxPwr- NoSnoop-
                        MaxPayload 128 bytes, MaxReadReq 512 bytes
                DevSta: CorrErr- NonFatalErr- FatalErr- UnsupReq- AuxPwr+ TransPend-
                LnkCap: Port #0, Speed 2.5GT/s, Width x1, ASPM L0s L1, Exit Latency L0s unlimited, L1 <64us
                        ClockPM+ Surprise- LLActRep- BwNot- ASPMOptComp-
                LnkCtl: ASPM Disabled; RCB 64 bytes, Disabled- CommClk+
                        ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
                LnkSta: Speed 2.5GT/s (ok), Width x1 (ok)
                        TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-
                DevCap2: Completion Timeout: Not Supported, TimeoutDis+ NROPrPrP- LTR-
                         10BitTagComp- 10BitTagReq- OBFF Not Supported, ExtFmt- EETLPPrefix-
                         EmergencyPowerReduction Not Supported, EmergencyPowerReductionInit-
                         FRS- TPHComp- ExtTPHComp-
                         AtomicOpsCap: 32bit- 64bit- 128bitCAS-
                DevCtl2: Completion Timeout: 50us to 50ms, TimeoutDis- LTR- OBFF Disabled,
                         AtomicOpsCtl: ReqEn-
                LnkCtl2: Target Link Speed: 2.5GT/s, EnterCompliance- SpeedDis-
                         Transmit Margin: Normal Operating Range, EnterModifiedCompliance- ComplianceSOS-
                         Compliance De-emphasis: -6dB
                LnkSta2: Current De-emphasis Level: -6dB, EqualizationComplete- EqualizationPhase1-
                         EqualizationPhase2- EqualizationPhase3- LinkEqualizationRequest-
                         Retimer- 2Retimers- CrosslinkRes: unsupported
        Capabilities: [b0] MSI-X: Enable+ Count=4 Masked-
                Vector table: BAR=4 offset=00000000
                PBA: BAR=4 offset=00000800
        Capabilities: [d0] Vital Product Data
pcilib: sysfs_read_vpd: read failed: Input/output error
                Not readable
        Capabilities: [100 v1] Advanced Error Reporting
                UESta:  DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
                UEMsk:  DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
                UESvrt: DLP+ SDES+ TLP- FCP+ CmpltTO- CmpltAbrt- UnxCmplt- RxOF+ MalfTLP+ ECRC- UnsupReq- ACSViol-
                CESta:  RxErr- BadTLP- BadDLLP- Rollover- Timeout- AdvNonFatalErr-
                CEMsk:  RxErr- BadTLP- BadDLLP- Rollover- Timeout- AdvNonFatalErr+
                AERCap: First Error Pointer: 00, ECRCGenCap+ ECRCGenEn- ECRCChkCap+ ECRCChkEn-
                        MultHdrRecCap- MultHdrRecEn- TLPPfxPres- HdrLogCap-
                HeaderLog: 00000000 00000000 00000000 00000000
        Capabilities: [140 v1] Virtual Channel
                Caps:   LPEVC=0 RefClk=100ns PATEntryBits=1
                Arb:    Fixed- WRR32- WRR64- WRR128-
                Ctrl:   ArbSelect=Fixed
                Status: InProgress-
                VC0:    Caps:   PATOffset=00 MaxTimeSlots=1 RejSnoopTrans-
                        Arb:    Fixed- WRR32- WRR64- WRR128- TWRR128- WRR256-
                        Ctrl:   Enable+ ID=0 ArbSelect=Fixed TC/VC=01
                        Status: NegoPending- InProgress-
        Capabilities: [160 v1] Device Serial Number 2c-00-00-00-36-4c-e0-00
        Kernel driver in use: r8169
        Kernel modules: r8169
[email protected]:~$ sudo hwinfo
64: None 00.0: 10701 Ethernet
  [Created at net.126]
  Unique ID: 92a1.ndpeucax6V1
  Parent ID: UOJ9.6V3aJk5fkz9
  SysFS ID: /class/net/enp3s0
  SysFS Device Link: /devices/pci0000:00/0000:00:1c.2/0000:03:00.0
  Hardware Class: network interface
  Model: "Ethernet network interface"
  Driver: "r8169"
  Driver Modules: "r8169"
  Device File: enp3s0
  HW Address: bc:5f:f4:23:26:01
  Permanent HW Address: bc:5f:f4:23:26:01
  Link detected: yes
  Config Status: cfg=new, avail=yes, need=no, active=unknown
  Attached to: #17 (Ethernet controller)

Enfim, o driver funciona normalmente até reiniciar o sistema, após o reboot o driver não é reconhecido e daí eu tenho que reiniciar outra vez que aí sim ele volta a funcionar, mas se eu reiniciar de novo, o ciclo se repete.

Eu também tinha esse problema no Windows mas eu fui testando driver até resolver o problema, no caso do Linux é mais complicado pois o modulo r8169 é “um pacote” com o meu modelo e mais alguns outros.

Dito isso, eu tenho certeza que é alguma função de driver que não tá dando certo no meu PC, agora eu não sei se o problema é no MSI/MSIX, do ASPM, etc.

Quando o driver para de funcionar até o endereço (0000:03:00.0) some.
`SysFS Device Link: /devices/pci0000:00/0000:00:1c.2/0000:03:00.0

Um detalhe importante é que o problema só acontece em reboot, se eu desligar e ligar o PC com o botão power ou até mesmo se eu fizer um reboot pelo botão de reset o driver de rede não some, ou seja, é só no reboot pelo próprio sistema que o driver deixa de funcionar.

Bom, eu tenho certeza que o problema é no módulo r8169 e possivelmente no kernel, nem o pacote r8168-dkms resolveu o problema. Obg desde já.

nesta página Realtek Ethernet connection stops working when I leave it plugged in o autor diz que usou o driver r8168, em vez do r8169. esse problema não é exclusivo seu.

Resolvido, obrigado pela ajuda.
Eu não sei como diabos eu não tinha encontrado esse post antes, até então eu só ouvia menções ao r8168-dkms e r8169.

Eu compilei o pacote e mesmo assim a rede não tinha voltado, depois decidir analisar o código fonte eu ví que o ID do meu driver não estava listado no arquivo, daí eu tive que entrar na pasta “r8168-8.050.00/src/” e editar o arquivo r8168_n.c

Eu adicionei o device id da minha placa de rede, que no caso é 0x8136, após adicionar isso no código ele ficou assim:

static struct pci_device_id rtl8168_pci_tbl[] = {
        { PCI_DEVICE(PCI_VENDOR_ID_REALTEK, 0x8168), },
        { PCI_DEVICE(PCI_VENDOR_ID_REALTEK, 0x8136), },
        { PCI_DEVICE(PCI_VENDOR_ID_REALTEK, 0x8161), },
        { PCI_DEVICE(PCI_VENDOR_ID_REALTEK, 0x2502), },
        { PCI_DEVICE(PCI_VENDOR_ID_REALTEK, 0x2600), },
        { PCI_VENDOR_ID_DLINK, 0x4300, 0x1186, 0x4b10,},
        {0,},
};

Salvei o arquivo, usei o ./autorun.sh pra recompilar o módulo e daí o driver de rede finalmente voltou a funcionar, reiniciei várias vezes meu PC e o problema não apareceu mais.

Obrigado

Edit: Pra quem quiser instalar o módulo r8168, ele está disponível no github:
https://github.com/mtorromeo/r8168/releases

1 curtida

Este tópico foi fechado automaticamente 3 dias depois da última resposta. Novas respostas não são mais permitidas.