AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / computer / Perguntas / 1857994
Accepted
比尔盖子
比尔盖子
Asked: 2024-10-07 18:04:55 +0800 CST2024-10-07 18:04:55 +0800 CST 2024-10-07 18:04:55 +0800 CST

Não é possível vincular dois adaptadores Ethernet Realtek RTL8156 de 2,5 Gbps via LACP no Linux

  • 772
A recompensa expira em 6 dias . Respostas a esta pergunta são elegíveis para uma recompensa de reputação de +50 . Aibobot quer recompensar uma resposta existente .

Estou no processo de atualizar minha Ethernet para 10 Gbps para acelerar a conectividade da minha rede local. Infelizmente, uma máquina na minha rede ficou sem slots PCIe, então um adaptador PCIe nativo de 10 GbE não é uma opção. Um adaptador USB é a única alternativa viável - como switches Ethernet de 5 Gbps e adaptadores USB são difíceis de encontrar e caros, a decisão foi tomada para executar o servidor com dois adaptadores Ethernet de 2,5 Gbps para USB 3 baseados no chipset Realtek RTL8156, que está prontamente disponível. Então, eles estão juntos no nível Ethernet usando agregação de link em um LAG/LACP e conectados a um switch de 2,5/10 Gbps.

Esses adaptadores USB podem ser reconhecidos pelo Linux como os seguintes. Eu também determinei de antemão que ambos os adaptadores podem operar independentemente a 2,5 Gbps atribuindo um endereço IP a cada NIC e executando um teste iperf3.

$ dmesg
[    5.118103] usb 4-4: new SuperSpeed USB device number 2 using xhci_hcd
[    5.138434] usb 4-4: New USB device found, idVendor=0bda, idProduct=8156, bcdDevice=31.04
[    5.138436] usb 4-4: New USB device strings: Mfr=1, Product=2, SerialNumber=6
[    5.138438] usb 4-4: Product: USB 10/100/1G/2.5G LAN
[    5.138439] usb 4-4: Manufacturer: Realtek
[    5.138440] usb 4-4: SerialNumber: 401300ÿÿÿÿ
[    6.970319] cdc_ncm 4-4:2.0: MAC-Address: 00:e0:4c:68:10:e6
[    6.970325] cdc_ncm 4-4:2.0: setting rx_max = 16384
[    6.970356] cdc_ncm 4-4:2.0: setting tx_max = 16384
[    6.984099] cdc_ncm 4-4:2.0 eth0: register 'cdc_ncm' at usb-0000:0a:00.3-4, CDC NCM (NO ZLP), 00:e0:4c:68:10:e6

# lsusb
Bus 004 Device 002: ID 0bda:8156 Realtek Semiconductor Corp. USB 10/100/1G/2.5G LAN
Bus 002 Device 002: ID 0bda:8156 Realtek Semiconductor Corp. USB 10/100/1G/2.5G LAN

A máquina em questão está executando um hipervisor Linux (Proxmox), e duas interfaces de rede são reconhecidas como enx00e04c680152 e enx00e04c6810e6 (acredito que udev/systemd gerou os nomes com base em seus endereços MAC). Para unir duas interfaces, no Proxmox usei as seguintes configurações:

Linux Bond
* Name: bond0
* Autostart: Yes
* Slaves: enx00e04c680152 enx00e04c6810e6
* Mode: LACP (802.3ad)
* Hash policy: layer3+4

No switch, criei um Port Channel Group com LACP habilitado no modo Ativo e selecionei duas portas de 2,5 Gbps que estavam conectadas ao servidor. O Linux também relata que ambas as placas são detectadas e vinculadas de sua própria perspectiva:

# ip link | grep enx
3: enx00e04c6810e6: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond0 state UP mode DEFAULT group default qlen 1000
4: enx00e04c680152: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond0 state UP mode DEFAULT group default qlen 1000

Infelizmente, por algum motivo, o Linux não consegue estabelecer um link LACP com o switch, não importa o que aconteça. O kernel do Linux continua me dizendo que "Nenhuma resposta 802.3ad do parceiro de link para nenhum adaptador no vínculo".

# dmesg
[ 1004.491253] bond0: Warning: No 802.3ad response from the link partner for any adapters in the bond
[ 1034.527234] bond0: Warning: No 802.3ad response from the link partner for any adapters in the bond
[ 1064.547217] bond0: Warning: No 802.3ad response from the link partner for any adapters in the bond

O arquivo de status /proc/net/bonding/bond0mostra que o IEEE 802.3ad está ativo, mas um link não foi estabelecido com sucesso. Isso pode ser visto pelo fato de que o "ID do agregador" para ambas as NICs são diferentes, e que ambas entraram no estado "churned", o que significa essencialmente que o link falhou,

# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v6.1.15-1-pve

Bonding Mode: IEEE 802.3ad Dynamic link aggregation
Transmit Hash Policy: layer3+4 (1)
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Peer Notification Delay (ms): 0

802.3ad info
LACP active: on
LACP rate: slow
Min links: 0
Aggregator selection policy (ad_select): stable
System priority: 65535
System MAC address: 8a:f5:1c:f4:8b:70
Active Aggregator Info:
    Aggregator ID: 1
    Number of ports: 1
    Actor Key: 10
    Partner Key: 1
    Partner Mac Address: 00:00:00:00:00:00

Slave Interface: enx00e04c680152
MII Status: up
Speed: 2500 Mbps
Duplex: half
Link Failure Count: 0
Permanent HW addr: 00:e0:4c:68:01:52
Slave queue ID: 0
Aggregator ID: 1
Actor Churn State: none
Partner Churn State: churned
Actor Churned Count: 0
Partner Churned Count: 1
details actor lacp pdu:
    system priority: 65535
    system mac address: 8a:f5:1c:f4:8b:70
    port key: 10
    port priority: 255
    port number: 1
    port state: 77
details partner lacp pdu:
    system priority: 65535
    system mac address: 00:00:00:00:00:00
    oper key: 1
    port priority: 255
    port number: 1
    port state: 1

Slave Interface: enx00e04c6810e6
MII Status: up
Speed: 2500 Mbps
Duplex: half
Link Failure Count: 0
Permanent HW addr: 00:e0:4c:68:10:e6
Slave queue ID: 0
Aggregator ID: 2
Actor Churn State: churned
Partner Churn State: churned
Actor Churned Count: 1
Partner Churned Count: 1
details actor lacp pdu:
    system priority: 65535
    system mac address: 8a:f5:1c:f4:8b:70
    port key: 10
    port priority: 255
    port number: 2
    port state: 69
details partner lacp pdu:
    system priority: 65535
    system mac address: 00:00:00:00:00:00
    oper key: 1
    port priority: 255
    port number: 1
    port state: 1
networking
  • 1 1 respostas
  • 49 Views

1 respostas

  • Voted
  1. Best Answer
    比尔盖子
    2024-10-07T18:04:55+08:002024-10-07T18:04:55+08:00

    Resumo

    Esses adaptadores de rede devem ser alternados para o modo específico do fornecedor (bConfigurationValue: 1) e controlados pelo driver Linux r8152. O modo padrão (bConfigurationValue: 2) com o cdc_ncm driver genérico tem funcionalidade limitada, então nem todos os recursos funcionarão corretamente.

    Análise

    Após vários dias de solução de problemas, finalmente determinei a causa raiz. A pista é a informação de hardware relatada por ethtool:

    # ethtool enx00e04c6810e6
    Settings for enx00e04c6810e6:
        Supported ports: [  ]
        Supported link modes:   Not reported
        Supported pause frame use: No
        Supports auto-negotiation: No
        Supported FEC modes: Not reported
        Advertised link modes:  Not reported
        Advertised pause frame use: No
        Advertised auto-negotiation: No
        Advertised FEC modes: Not reported
        Speed: 2500Mb/s
        Duplex: Half
        Auto-negotiation: off
        Port: Twisted Pair
        PHYAD: 0
        Transceiver: internal
        MDI-X: Unknown
            Current message level: 0x00000007 (7)
                                   drv probe link
        Link detected: yes
    

    Observe como informações importantes de hardware, como autonegociação ou modos de link suportados, não estão disponíveis no driver do dispositivo. Observe também como o driver afirma que o adaptador está sendo executado em half-duplex de 2,5 Gbps, o que é incomum. Suspeito que bondingo módulo do Linux não funcione devido a informações de hardware incompletas ou suporte a recursos.

    Após investigação mais aprofundada, descobri que, por padrão, esses adaptadores USB Realtek de 2,5 Gbps estavam sendo executados no modo genérico USB CDC-NCM. Este é um modo padrão definido pelo USB, mas apenas funcionalidade limitada está disponível. Para habilitar todos os recursos de hardware desses adaptadores, é preciso alterná-los do modo padrão (bConfigurationValue: 2) para o modo específico do fornecedor (bConfigurationValue: 1). O modo atual pode ser verificado examinando o arquivo bConfigurationValueem /sys/bus/usb/devices/.

    Primeiro, examine o hardware USB via lsusbe lsusb -t:

    # lsusb
    Bus 004 Device 002: ID 0bda:8156 Realtek Semiconductor Corp. USB 10/100/1G/2.5G LAN
    Bus 002 Device 002: ID 0bda:8156 Realtek Semiconductor Corp. USB 10/100/1G/2.5G LAN
    
    # lsusb -t
    /:  Bus 04.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 10000M
        |__ Port 4: Dev 2, If 0, Class=Communications, Driver=cdc_ncm, 5000M
        |__ Port 4: Dev 2, If 1, Class=CDC Data, Driver=cdc_ncm, 5000M
    /:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/3p, 10000M
        |__ Port 2: Dev 2, If 0, Class=Communications, Driver=cdc_ncm, 5000M
        |__ Port 2: Dev 2, If 1, Class=CDC Data, Driver=cdc_ncm, 5000M
    

    Pode-se ver que o driver cdc_ncmé usado.

    Em seguida, certifique-se de que está olhando para o dispositivo correto em /sys/bus/usb/devices(você precisa ajustar /2-2/e 4-4de acordo com a saída de lsusb -t) verificando o conteúdo de manufacturerprimeiro, deve ser Realtek. Em seguida, examine o bConfigurationValueno mesmo diretório.

    # cat /sys/bus/usb/devices/2-2/manufacturer 
    Realtek
    # cat /sys/bus/usb/devices/2-2/bConfigurationValue 
    2
    
    # cat /sys/bus/usb/devices/4-4/manufacturer 
    Realtek
    # cat /sys/bus/usb/devices/4-4/bConfigurationValue 
    2
    

    O bConfigurationValueis 2, que significa que está no modo CDC_NCM. Para alternar manualmente o modo para depuração, execute:

    # echo 1 > /sys/bus/usb/devices/2-2/bConfigurationValue 
    # echo 1 > /sys/bus/usb/devices/4-4/bConfigurationValue 
    

    Após a troca, o Linux começará a controlá-los usando o r8152driver, em vez do cdc_ncm driver genérico. Em dmesg, pode-se ver:

    [ 8439.270745] r8152 2-2:1.0: load rtl8156b-2 v1 04/15/21 successfully
    [ 8439.397031] r8152 2-2:1.0 (unnamed net_device) (uninitialized): netif_napi_add_weight() called with weight 256
    [ 8439.397202] r8152 2-2:1.0 eth0: v1.12.13
    [ 8439.397220] usbcore: registered new interface driver r8152
    [ 8439.399436] r8152 2-2:1.0 enx00e04c680152: renamed from eth0
    [ 8505.003557] r8152 4-4:1.0: load rtl8156b-2 v1 04/15/21 successfully
    [ 8505.044832] r8152 4-4:1.0 eth0: v1.12.13
    [ 8505.047901] r8152 4-4:1.0 enx00e04c6810e6: renamed from eth0
    

    lsusb -ttambém informará que r8152agora está encarregado dos adaptadores de rede.

    # lsusb -t
    /:  Bus 04.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 10000M
        |__ Port 4: Dev 2, If 0, Class=Vendor Specific Class, Driver=r8152, 5000M
    /:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/3p, 10000M
        |__ Port 2: Dev 2, If 0, Class=Vendor Specific Class, Driver=r8152, 5000M
    

    Se os adaptadores puderem ser reconhecidos pelo r8152, crie uma regra udev para aplicá-la automaticamente (observe que, neste ponto, todos os adaptadores foram desconectados do modo de vinculação, portanto, a vinculação não funcionará a menos que você a recrie manualmente, então é mais fácil apenas adicionar uma regra udev e reinicializar).

    Solução

    Primeiro, encontre o VID e o PID do adaptador de rede, que podem variar dependendo da marca.

    # lsusb
    Bus 004 Device 002: ID 0bda:8156 Realtek Semiconductor Corp. USB 10/100/1G/2.5G LAN
    Bus 002 Device 002: ID 0bda:8156 Realtek Semiconductor Corp. USB 10/100/1G/2.5G LAN
    

    Em seguida, crie a seguinte regra udev:

    ACTION=="add", SUBSYSTEMS=="usb", ATTR{idVendor}=="0bda", ATTR{idProduct}=="8156", ATTR{bConfigurationValue}="1"
    

    Salve a regra como um arquivo como /etc/udev/rules.d/90-usb-r8152-ethernet.rules, e reinicia o sistema. Note que deve-se ajustar o idVendore idProductaqui para corresponder ao VID e PID listados por lsusb.

    Após a troca, ethtoolé possível obter informações de hardware sobre o adaptador:

    # ethtool enx00e04c680152 
    Settings for enx00e04c680152:
        Supported ports: [ TP    MII ]
        Supported link modes:   10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Half 1000baseT/Full
                                2500baseT/Full
        Supported pause frame use: No
        Supports auto-negotiation: Yes
        Supported FEC modes: Not reported
        Advertised link modes:  10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
                                2500baseT/Full
        Advertised pause frame use: No
        Advertised auto-negotiation: Yes
        Advertised FEC modes: Not reported
        Link partner advertised link modes:  10baseT/Half 10baseT/Full
                                             100baseT/Half 100baseT/Full
                                             1000baseT/Full
                                             2500baseT/Full
        Link partner advertised pause frame use: No
        Link partner advertised auto-negotiation: Yes
        Link partner advertised FEC modes: Not reported
        Speed: 2500Mb/s
        Duplex: Full
        Auto-negotiation: on
        Port: MII
        PHYAD: 32
        Transceiver: internal
        Supports Wake-on: pumbg
        Wake-on: g
            Current message level: 0x00007fff (32767)
                                   drv probe link timer ifdown ifup rx_err tx_err tx_queued intr tx_done rx_status pktdata hw wol
        Link detected: yes
    

    O LACP também pode ser estabelecido:

    # cat /proc/net/bonding/bond0
    Ethernet Channel Bonding Driver: v6.1.15-1-pve
    
    Bonding Mode: IEEE 802.3ad Dynamic link aggregation
    Transmit Hash Policy: layer3+4 (1)
    MII Status: up
    MII Polling Interval (ms): 100
    Up Delay (ms): 0
    Down Delay (ms): 0
    Peer Notification Delay (ms): 0
    
    802.3ad info
    LACP active: on
    LACP rate: slow
    Min links: 0
    Aggregator selection policy (ad_select): stable
    System priority: 65535
    System MAC address: 8a:f5:1c:f4:8b:70
    Active Aggregator Info:
        Aggregator ID: 1
        Number of ports: 2
        Actor Key: 11
        Partner Key: 1
        Partner Mac Address: 8c:1f:64:9a:c2:5f
    
    Slave Interface: enx00e04c680152
    MII Status: up
    Speed: 2500 Mbps
    Duplex: full
    Link Failure Count: 0
    Permanent HW addr: 00:e0:4c:68:01:52
    Slave queue ID: 0
    Aggregator ID: 1
    Actor Churn State: monitoring
    Partner Churn State: monitoring
    Actor Churned Count: 0
    Partner Churned Count: 1
    details actor lacp pdu:
        system priority: 65535
        system mac address: 8a:f5:1c:f4:8b:70
        port key: 11
        port priority: 255
        port number: 1
        port state: 61
    details partner lacp pdu:
        system priority: 65535
        system mac address: 8c:1f:64:9a:c2:5f
        oper key: 1
        port priority: 32768
        port number: 2
        port state: 61
    
    Slave Interface: enx00e04c6810e6
    MII Status: up
    Speed: 2500 Mbps
    Duplex: full
    Link Failure Count: 0
    Permanent HW addr: 00:e0:4c:68:10:e6
    Slave queue ID: 0
    Aggregator ID: 1
    Actor Churn State: monitoring
    Partner Churn State: monitoring
    Actor Churned Count: 1
    Partner Churned Count: 1
    details actor lacp pdu:
        system priority: 65535
        system mac address: 8a:f5:1c:f4:8b:70
        port key: 11
        port priority: 255
        port number: 2
        port state: 61
    details partner lacp pdu:
        system priority: 65535
        system mac address: 8c:1f:64:9a:c2:5f
        oper key: 1
        port priority: 32768
        port number: 3
        port state: 61
    
    • 35

relate perguntas

  • Três computadores, como configurar a rede sem roteador/switch?

  • A conexão do usuário ao servidor SFTP usando o FileZilla se recusa a conectar

  • Como funciona um NAT atrás de um NAT (NAT do roteador e NAT do ISP)?

  • Win10 1803: Como tornar o ponto de acesso móvel uma rede privada?

  • Como o nc identifica nomes de serviço

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como posso reduzir o consumo do processo `vmmem`?

    • 11 respostas
  • Marko Smith

    Baixar vídeo do Microsoft Stream

    • 4 respostas
  • Marko Smith

    O Google Chrome DevTools falhou ao analisar o SourceMap: chrome-extension

    • 6 respostas
  • Marko Smith

    O visualizador de fotos do Windows não pode ser executado porque não há memória suficiente?

    • 5 respostas
  • Marko Smith

    Como faço para ativar o WindowsXP agora que o suporte acabou?

    • 6 respostas
  • Marko Smith

    Área de trabalho remota congelando intermitentemente

    • 7 respostas
  • Marko Smith

    O que significa ter uma máscara de sub-rede /32?

    • 6 respostas
  • Marko Smith

    Ponteiro do mouse movendo-se nas teclas de seta pressionadas no Windows?

    • 1 respostas
  • Marko Smith

    O VirtualBox falha ao iniciar com VERR_NEM_VM_CREATE_FAILED

    • 8 respostas
  • Marko Smith

    Os aplicativos não aparecem nas configurações de privacidade da câmera e do microfone no MacBook

    • 5 respostas
  • Martin Hope
    Vickel O Firefox não permite mais colar no WhatsApp web? 2023-08-18 05:04:35 +0800 CST
  • Martin Hope
    Saaru Lindestøkke Por que os arquivos tar.xz são 15x menores ao usar a biblioteca tar do Python em comparação com o tar do macOS? 2021-03-14 09:37:48 +0800 CST
  • Martin Hope
    CiaranWelsh Como posso reduzir o consumo do processo `vmmem`? 2020-06-10 02:06:58 +0800 CST
  • Martin Hope
    Jim Pesquisa do Windows 10 não está carregando, mostrando janela em branco 2020-02-06 03:28:26 +0800 CST
  • Martin Hope
    andre_ss6 Área de trabalho remota congelando intermitentemente 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney Por que colocar um ponto após o URL remove as informações de login? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension Ponteiro do mouse movendo-se nas teclas de seta pressionadas no Windows? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    jonsca Todos os meus complementos do Firefox foram desativados repentinamente, como posso reativá-los? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK É possível criar um código QR usando texto? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 Altere o nome da ramificação padrão do git init 2019-04-01 06:16:56 +0800 CST

Hot tag

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve