IPMI是智慧平台管理(Intelligent Platform Management Interface),按照wiki的講法,原先是INTEL架構給企業系統的週邊設備用的一種工業標準,IPMI也是一個開放的免費標準,IPMI可以橫跨不同的作業系統、軔體和平台,可以監控和自動回報大量伺服器的運作狀況,用以降低伺服器系統成本。
實體上你在伺服器的主機板上有機會看如下圖兩種connector(怎麼看起都長一樣...)。
接腳的定義如下圖所示,TypeA與TypeB的差別就Pin4在不在而已。
這份文件是本人、在下、我對於IPMB通訊協定的筆記,人老了有些東西不靠外部記憶體很難都寫到腦袋裏面,尤其是這種人訂出來的協定,沒有所謂好壞的問題,只有所謂要不要遵守問題,所以就在雲端寫寫筆記。
這協定是架構在I2C之上,有幾個與I2C不一樣的特性:
- 只有Master Write可以用,也就是I2C R/W bit一直都是 0 (Write)
- 不支援10-bits的位址
- 每一個傳輸只能有一個slave address
- 不能使用re-start(repeated start)
- I2C ACK只表示該位元組收到確定而已,沒有其他意思
協定的外觀如下圖所示:
各個欄位意義如下表所示:
其中比較容易有疑問的是對於checksum的算法,它是zero-checksum,他阿哩阿雜講一堆,我是覺得舉例比較快。
checksum 是 zero-checksum算法是從rsSA/rqSA~dataEnd一個byte一個byte的加總在一起之後mod 0x100,再取 2'sc (2的補數),底下是我從wireshark取下來的資料。
0000
20 b4 2c 9c f8 00 00 00 32 03 00 37 .,..... 2..7
我們用顏色區分資料
0000
20 b4 2c
40 f8 00 00 00 32 03 00 93
.,..... 2...
紅色部份先是資料目的位址,再來是來源位址,黃色的部份是checksum,零會被忽略不加(國小問題吧)。
第一個checksum是0x2C = 2'sc((0x20+0xB4)%0x100)
第二個checksum是0x93 = 2'sc((0x40+0xF8+0x32+0x03)%0x100)
再來是Net Fn/LUN(net function)的擺法,一樣是舉個例子:
其中netFn是0x06,rqLun是0x00,則Get Device ID request就如下圖所示組合:
Get Device response就如下圖所示組合:
MSB先放netFn則是6-bits,接著才是LUN是2-bits。
Completion Code是在response才會有的回應,主要是功能就像是status word或是稱為response code,用來說明命令執行結果到底OK還是不OK,如果不OK那是什麼狀況。
Command及Response格式之類的就很無聊的查表、查表、再查表,沒什麼營養,IPM Device "Global" Command如下表,O/M=Optional/Mandatory。
參考一 http://download.intel.com/design/servers/ipmi/ipmb1010ltd.pdf
參考二 http://download.intel.com/design/servers/ipmi/IPMI2_0E4_Markup_061209.pdf
沒有留言:
張貼留言