FreeBSD : Chelsio N320E 10G Ethernet

Bonjour à tous,

Aujourd'hui un petit article rapide sur l'utilisation d'une carte Chelsio CC2-N320E-SR soit une carte 10G Ethernet dual port. Leur avantage? le prix! Moins de 40€ par carte!
Si vous cherchez une carte qui fait uniquement du réseau et pas de connecteur iSCSI ou autres fonctions avancées, elles feront très bien l'affaire!

Pour pouvoir configurer et utiliser cette carte, il est nécessaire d'ajouter le chargement du driver au boot (ce dernier est intégré à FreeBSD).
Pour cela, il est nécessaire d'ajouter le driver if_cxgb dans /boot/loader.conf :

if_cxgb_load="YES"

Lors d'un reboot, dans le dmesg j'ai constaté un message me demandant de mettre à jour le firmware de la carte.

D'origine, il était en 5.0 et le dernier disponible en 7.11.
Pour réaliser cette upgrade rien de très compliqué : il faut en premier lieu récupérer le binaire du firmware sur le site de Chelsio :

https://service.chelsio.com/legacy.html

Les binaires sont disponible en fin de page.

Pour pouvoir ensuite appliquer cette mise à jour, il faut utiliser l'outil cxgbtool qui est disponible dans les sources du kernel FreeBSD.
Une fois les sources installées, il faut aller dans /usr/src/tools/tools/cxgbtool et compiler l'outil :

root@freebsd1:~ # make
root@freebsd1:~ # make install

Une fois la compilation terminée, nous avons bien l'outil disponible dans ce dossier :

root@freebsd1:/usr/src/tools/tools/cxgbtool # cxgbtool
Usage: cxgbtool <interface> [operation]
	clearstats                          clear MAC statistics
	context <type> <id>                 show an SGE context
	desc <qset> <queue> <idx> [<cnt>]   dump SGE descriptors
	filter <idx> [<param> <val>] ...    set a filter
	filter <idx> delete|clear           delete a filter
	filter list                         list all filters
	ioqs                                dump uP IOQs
	la                                  dump uP logic analyzer info
	loadboot <boot image>               download boot image
	loadfw <FW image>                   download firmware
	mdio <phy_addr> <mmd_addr>
	     <reg_addr> [<val>]             read/write MDIO register
	memdump cm|tx|rx <addr> <len>       dump a mem range
	meminfo                             show memory info
	mtus [<mtu0>...<mtuN>]              read/write MTU table
	pktsched port <idx> <min> <max>     set TX port scheduler params
	pktsched tunnelq <idx> <max>
	         <binding>                  set TX tunnelq scheduler params
	pktsched tx <idx>
	         [<param> <val>] ...        set Tx HW scheduler
	pm [<TX page spec> <RX page spec>]  read/write PM config
	proto                               read proto SRAM
	qset                                read qset parameters
	qsets                               read # of qsets
	reg <address>[=<val>]               read/write register
	regdump [<module>]                  dump registers
	tcamdump <address> <count>          show TCAM contents
	tcb <index>                         read TCB
	trace tx|rx|all on|off [not]
	      [<param> <val>[:<mask>]] ...  write trace parameters

Avec les drivers pour les Chelsio suivantes il existe le même type d'outil : cxgbetool mais qui ne supporte pas ces cartes.

Il est possible de charger le driver sans devoir redémarrer :

root@freebsd1:~ # kldload if_cxgb

Nous voyons bien le firmware de chargé :

root@freebsd1:~ # kldstat 
Id Refs Address            Size     Name
 1   15 0xffffffff80200000 1f6e480  kernel
 2    1 0xffffffff82170000 48440    if_cxgb.ko
 3    1 0xffffffff821b9000 33608    mthca.ko
 4    2 0xffffffff821ed000 a1010    ibcore.ko
 5    3 0xffffffff8228f000 1c960    linuxkpi.ko
 6    1 0xffffffff82421000 2986     uhid.ko

Il est donc maintenant possible de passer à l'upgrade de firmware :

root@freebsd1:~ # gzip -d t3fw-7.11.0.bin.gz
root@freebsd1:~ # cxgbtool cxgb0 loadfw t3fw-7.11.0.bin

Une fois l'upgrade fait, il faut décharger et recharger le driver :

root@freebsd1:~ # kldunload if_cxgb
root@freebsd1:~ # kldload if_cxgb 

Pour confirmer la mise à jour, il est possible d'utiliser dmesg :

cxgbc0: <Chelsio T320, 2 ports> mem 0xdf3fe000-0xdf3fefff,0xdf3ff000-0xdf3fffff irq 40 at device 0.0 on pci4
cxgbc0: PCIe x4 Link, expect reduced performance
cxgbc0: using MSI-X interrupts (9 vectors)
cxgbc0: Firmware Version 7.11.0
cxgb0: <Port 0 10GBASE-R> on cxgbc0
cxgb0: Using defaults for TSO: 65518/35/2048
cxgb0: Ethernet address: 00:07:43:0c:11:80
cxgb1: <Port 1 10GBASE-R> on cxgbc0
cxgb1: Using defaults for TSO: 65518/35/2048
cxgb1: Ethernet address: 00:07:43:0c:11:81

Le firmware est bien en version 7.11.

Avec ifconfig, nous voyons bien que les interfaces sont disponibles :

root@freebsd1:~ # ifconfig cxgb0
cxgb0: flags=8802<BROADCAST,SIMPLEX,MULTICAST> metric 0 mtu 9000
	options=6c07bb<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU,VLAN_HWCSUM,TSO4,TSO6,LRO,VLAN_HWTSO,LINKSTATE,RXCSUM_IPV6,TXCSUM_IPV6>
	ether 00:07:43:0c:11:80
	hwaddr 00:07:43:0c:11:80
	nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
	media: Ethernet 10Gbase-Twinax <full-duplex>
	status: no carrier

De base, les Chelsio ne passent pas up si aucune adresse IP n'est configurée dessus.

Il ne vous reste qu'à faire la configuration que vous souhaitez et profiter de ces cartes à petit prix!

Have a nice day.