ipmi和bmc通訊可以從try_get_dev_id中看出
static int try_get_dev_id(struct smi_info *smi_info)
smi_info->handlers有三種實現,這裡以bt為例,bt是block transfer的意思
const struct si_sm_handlers bt_smi_handlers = ;
先看bt_start_transaction
static int bt_start_transaction(struct si_sm_data *bt,
unsigned char *data,
unsigned int size)
bt->write_data[0] = size + 1; /* all data plus seq byte */
bt->write_data[1] = *data; /* netfn/lun */
bt->write_data[2] = bt->seq++;
memcpy(bt->write_data + 3, data + 1, size - 1);
bt->write_count = size + 2;
bt->error_retries = 0;
bt->nonzero_status = 0;
bt->truncated = 0;
bt->state = bt_state_xaction_start;
bt->timeout = bt->bt_cap_req2rsp;
force_result(bt, ipmi_err_unspecified);
return 0;
}基本就是對si_sm_data *bt 賦值的過程。
static int wait_for_msg_done(struct smi_info *smi_info)
else if (smi_result == si_sm_call_without_delay) else
break;
}if (smi_result == si_sm_hosed)
/** we couldn't get the state machine to run, so whatever's at
* the port is probably not an ipmi smi inte***ce.
*/return -enodev;
return 0;
}原來wait_for_msg_done 中是通過event 來啟動傳送和接受bmc發回的結果啊,在bt_event中主要是處理各種命令。注意在bt_start_transaction中傳送的是bt_state_xaction_start命令
static enum si_sm_result bt_event(struct si_sm_data *bt, long time)
最終在bt_event中是通過bt_control來傳送命令
#define bt_control(x) bt->io->outputb(bt->io, 0, x)
這裡的io是在port_setup中賦值
static int port_setup(struct smi_info *info)
}這裡以port_outb為例
static void port_outb(const struct si_sm_io *io, unsigned int offset,
unsigned char b)
static inline void outb(u8 value, unsigned long addr)
原來就是直接寫暫存器
最後通過bt_get_result 得到bmc返回的數值,可以看到主要是從si_sm_data *bt中的read_data的到其返回的值.
static int bt_get_result(struct si_sm_data *bt,
unsigned char *data,
unsigned int length)
data[0] = bt->read_data[1];
data[1] = bt->read_data[3];
if (length < msg_len || bt->truncated) else
memcpy(data + 2, bt->read_data + 4, msg_len - 2);
if (bt_debug & bt_debug_msg)
return msg_len;
}
HTTPS的基礎原理和通訊過程
二 https 當中的 s 代表的是 安全 secure 在登入銀行或電郵賬號時,你會常常看到它出現在瀏覽器位址列。不過,移動應用在網路連線安全性上面沒有那麼透明,使用者很難知道應用連線網路時使用的是 http 還是 https。ats 由此登場,它在 ios 9 當中是預設開啟的。然而,開發者仍然...
DDNS的通訊過程
ddns client和server之間的乙個互動過程是什麼樣的呢 是不是所有的server都遵循乙個協議還是有不同的實現?ddns3執行的時候需要輸入乙個handle,這個handle是什麼內容 是我們申請到的網域名稱嗎?主要是不明白傳送的命令和返回的結果 後來發現網上有這些內容,無非就是傳送ht...
socket 的通訊過程
1.建立套接字 linux在利用socket 系統呼叫建立新的套接字時,需要傳遞套接字的位址族識別符號 套接字型別以及協議,其函式定義於net socket.c中 asmlinkage long sys socket int family,int type,int protocol 實際上,套接字對...