Mellanox connectX-3のファームアップデート手順

ヤフオクやebayで安価に買える高速なNIC、Mellanox connectXシリーズ。
SFP+(10Gbps）やQSFP+(40Gbps)が4000円弱で購入できる。すごい。
さらに一般的な10GbpsのRJ45よりも省電力（6W弱、15W前後が多いRJ45の約半分）。

今回は正規品のファームウェアアップデートに加え、更新の止まったOEM用ファームウェア（Dell、HP、IBM）のアップデート法をメモ。

#1. 正規品のアップデート（一般的な方法）
##1.1 ファームウェア用ソフトの入手とインストール
https://jp.mellanox.com/page/management_tools

OS等を選んでファームウェアの書き込みソフトをダウンロードする。
![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377965/b26e147a-c09a-dd5c-e99c-a82a91e97feb.png)

windowsの場合は.exeファイルの実行し、✕のついている項目も含め、全項目をインストールする。Linuxの場合は解凍したフォルダで下記を実行。

```
./install
```
##1.2 ファームウェアの入手
NICに合わせて選択する必要がある。
https://jp.mellanox.com/page/firmware_download
OEM版のアーカイブ（IBM）
https://jp.mellanox.com/page/firmware_table_IBM_archive?ssn=ricrc9ac56alf8lpf6c3ab1551

今回はConnectx3 Proの最新版にした。
mt4099_pci_cr0 -i fw-ConnectX3Pro-rel-2_42_5000-MCX353A-FCC_Ax-FlexBoot-3.4.752.bin
![無題3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377965/afbc2b0e-fc3b-2fd6-ff29-beb7004ec2d9.png)

解凍して生成先のフォルダに移動。

##3. NICの名称確認とファームウェアの更新
管理者権限でコマンドプロンプトやbashなどCLI環境で下記を入力する。
(mst startはwindowsだと不要）

```
mst start
mst status
```
例
![無題2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377965/80226a01-0b44-7940-1a3b-8ba113c25cdf.png)
この場合、NICの名前は下記になる。尚、WindowsでLinux形式のフルパス表記でも問題なく動く。

```
Windows： mt4099_pci_cr0
Linux：　/dev/mst/mt4099_pci_cr0
```
ファームウェアを解凍したフォルダへ移動して下記コマンドでファームウェアのアップデートを実施する。

```
flint -d NICの名前 -i ファームウェアのファイル burn
```

例

```
flint -d mt4099_pci_cr0 -i fw-ConnectX3Pro-rel-2_42_5000-MCX353A-FCC_Ax-FlexBoot-3.4.752.bin burn
```

ファームウェアの種類が間違っている場合はPSIDのエラーが出る。
この場合、ファームウェアを適切な物に変更する必要がある。

##参考
https://jp.mellanox.com/page/firmware_NIC_FW_update

- ※ ただし、中古安価にで流れているConnectXのOEM版（Dell、HP、IBM等）はこの方式で適用可能なファームウェアの更新が途中で止まっている。そこで、別な方法でファームの書き換えを行う。


#2. OEM製品のアップデート（Dell、HP、IBM等）
##2.1 ファームウェア書き込みソフトの入手
https://jp.mellanox.com/page/management_tools
OS等を選んでファームウェアの書き込みソフトをダウンロードする。
![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377965/b26e147a-c09a-dd5c-e99c-a82a91e97feb.png)

windowsの場合は.exeファイルの実行、Linuxの場合は解凍したフォルダで下記を実行。

```
./install
```

##2.2 共通ファームの入手(2.40.5030)
通常版（直リンク）
http://content.mellanox.com/firmware/ConnectX3-rel-2_40_5030.tgz
Pro版（直リンク）
http://content.mellanox.com/firmware/ConnectX3Pro-rel-2_40_5030.tgz

ボードの種類（通常版またはPro版）に相当する方を選択、ダウンロードして解凍後、解凍先へ移動する。

##2.3 バックアップと書き込み
###2.3.1 デバイス名の取得

```
mst status
```
例
![無題2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377965/80226a01-0b44-7940-1a3b-8ba113c25cdf.png)
この場合、NICの名前は下記になる。尚、WindowsでLinux形式のフルパス表記でも問題なく動く。

```
Windows： mt4099_pci_cr0
Linux：　/dev/mst/mt4099_pci_cr0
```
以下、適宜NICの名前は書き換えて使用すること。

###2.3.2 ファームウェアと設定のバックアップ

```
flint -d mt4099_pci_cr0 ri orig_firmware.bin
flint -d mt4099_pci_cr0 dc orig_firmware.ini
```

###2.3.3 修正ファームウェアの作成と修正ファームのチェック

通常版 fw-ConnectX3-rel.mlx
Pro版 fw-ConnectX3-relPro.mlx  

```
mlxburn -fw fw-ConnectX3-rel.mlx -conf orig_firmware.ini -wrimage newFW.bin
flint -i newFW.bin verify
```

###2.3.4 ファームウェアの書き込み

```
flint -d mt4099_pci_cr0 -i newFW.bin -allow_psid_change burn
```
終わったら再起動。

###2.3.4 現在のセッティングや状況の確認

```
mlxconfig -d mt4099_pci_cr0 query
mlxburn -d mt4099_pci_cr0 -vpd
```

これで、2.40.5030までバージョンが上がる。
修正ファームウェアを作る際、orig_firmware.iniのPSIDを相当する製品のPSIDに書き換えれば、最新版へのファーム書き換えも可能になる（確認済み）。

```
#例 IBMのOEM製品でPSIDを変更
#修正前
[ADAPTER]
PSID = IBM1100110019
#修正後
[ADAPTER]
PSID = MT_1100120019
```

#####カードの対応表
Mellanox版の名称
http://www.vgi.co.jp/prod/Mellanox/connectx.html
PSIDは下記で調べる
https://jp.mellanox.com/page/firmware_table_ConnectX3IB
##参考
https://forums.servethehome.com/index.php?threads/dell-mellanox-connectx-3-to-arista-7050-no-link.18369/#post-178015