Skip to content

ConnectX-3 Set Port Mode to ETH/IB

I just swapped my TrueNAS from a Dell R720XD over to a Dell r730XD. During this migration, I moved over my NVMe drives, NICs, and everything else relevant.

However, after firing up TrueNAS on the new hardware, I noticed my 40G NIC was not listed in the list of devices!

After once again googling how to change the mode over, I figured I would just quickly write some documentation incase this happens again in the future.

Why would you change this?

Mellonax NICs can support traffic in either Ethernet mode, or Infiniband Mode.

In ethernet mode, they function exactly like you would expect a NIC to work. However, in Infiniband mode, they work quite a bit different, and may require special drivers and software to perform correctly.

For most homelab uses, you will generally want to ensure they are configured to ethernet mode.

How to change port mode of ConnectX-3 NIC

Step 1. Determine the PCI ID.

You can do this using lspci

root@truenas:~# lspci | grep Mell
09:00.0 Network controller: Mellanox Technologies MT27500 Family [ConnectX-3]

In the above case, 09:00.0 is the information we are looking for.

Step 2. Determine current port mode.

root@truenas:~# cat /sys/bus/pci/devices/0000\:09\:00.0/mlx4_port1
ib
root@truenas:~# cat /sys/bus/pci/devices/0000\:09\:00.0/mlx4_port2
eth

Using the above command, we can determine port1 is in infiniband mode, and port2 is in ethernet mode.

Step 3. How to change port mode.

There are two ways you can change the port mode. You can either.... use a simple echo command, or, you can use mstflint.

Method 1. Using echo.

root@truenas:~# echo eth > /sys/bus/pci/devices/0000\:09\:00.0/mlx4_port1
-bash: echo: write error: Operation not supported

root@truenas:~# echo ib > /sys/bus/pci/devices/0000\:09\:00.0/mlx4_port1

# Works fine?

IF, this option does not work for you, then try using mstflint. If it does work (no error), reboot for it to take effect.

Method 2. Using mstflint.

apt-get install mstflint

Note- if you use TrueNAS like me... you may need to Re-enable apt-get

Then use mstflint -d {your pci id} q to query info

root@truenas:~# mstconfig -d 09:00.0 q

Device #1:
----------

Device type:    ConnectX3
Device:         09:00.0

Configurations:                              Next Boot
         SRIOV_EN                            True(1)
         NUM_OF_VFS                          8
         LINK_TYPE_P1                        IB(1)
         LINK_TYPE_P2                        ETH(2)
         LOG_BAR_SIZE                        3
         BOOT_PKEY_P1                        0
         BOOT_PKEY_P2                        0
         BOOT_OPTION_ROM_EN_P1               False(0)
         BOOT_VLAN_EN_P1                     False(0)
         BOOT_RETRY_CNT_P1                   0
         LEGACY_BOOT_PROTOCOL_P1             PXE(1)
         BOOT_VLAN_P1                        1
         BOOT_OPTION_ROM_EN_P2               False(0)
         BOOT_VLAN_EN_P2                     False(0)
         BOOT_RETRY_CNT_P2                   0
         LEGACY_BOOT_PROTOCOL_P2             PXE(1)
         BOOT_VLAN_P2                        1
         IP_VER_P1                           IPv4(0)
         IP_VER_P2                           IPv4(0)
         CQ_TIMESTAMP                        True(1)

For the LINK_TYPE fields, IB/1 = infiniband, ETH/2 = ethernet

To change the mode, we can use mstconfig -d 09:00.0 set LINK_TYPE_P1=2, Just make sure to replace with your PCI device id.

root@truenas:~# mstconfig -d 09:00.0 set LINK_TYPE_P1=2

Device #1:
----------

Device type:    ConnectX3
Device:         09:00.0

Configurations:                              Next Boot       New
         LINK_TYPE_P1                        IB(1)           ETH(2)

 Apply new Configuration? (y/n) [n] : y
Applying... Done!
-I- Please reboot machine to load new configurations.

Per the note- you will need to reboot before this takes effect.

Summary

Just a quick guide on how to change the port mode of your ConnectX-3 NICs. This works for both the 10G and 40G variants.

Also- the port-mode wasn't the issue as to why it wasn't being displayed- Instead- the NIC was at a differnet PCI address location. I just needed to move over the config. :-/