第七章 結論與未來工作
A.1. 命令
A.1.3. 網路層命令
A.1.3.4. SET_NETMASK
設定指定網路界面卡的子網路遮罩。
Table A-22 SET_NETMASK 的 win_cmd 欄位
i8_cmd SET_NETMASK
pv_param 設定指定網路界面卡的子網路遮罩。
訊息格式如下:
Figure A-12 SET_NETMASK 的 pv_param 格式
名稱 長度 型別 說明
Link ID 1 byte UINT8 指定網路界面卡。
Netmask 4 bytes UINT32 設定子網路遮罩。 0 表示不 更動原本設定。
pv_value 無作用 A.1.3.5. GET_NETMASK
取得指定網路界面卡的子網路遮罩。
Table A-23 GET_NETMASK 的 win_cmd 欄位
i8_cmd GET_NETMASK pv_param 為 UINT8 型別。
表示 Link ID,用來指定網路界面。
pv_value 為 UINT32 型別。
表示子網路遮罩。
A.1.3.6. SET_BROADCAST
設定廣播位址 (Broadcast) 的值,Broadcast 的算法會按照 IP 位址與 Netmask 的不同,會有不同的值。一般來說,未設定 broadcast,但 IP 位址與 Netmask 設 定正確的話,網路還是可以正常動作,所以習慣上,常不會做 Broadcast 的設定。:
Table A-24 SET_BROADCAST 的 win_cmd 欄位
i8_cmd SET_BROADCAST
pv_param 設定指定網路界面卡的廣播位址。
訊息格式如下:
Figure A-13 SET_BROADCAST 的 pv_param 格式
名稱 長度 型別 說明
Link ID 1 byte UINT8 指定網路界面卡。
Broadcast 4 bytes UINT32 設定廣播位址 pv_value 無作用
A.1.3.7. GET_BROADCAST
取得指定網路界面卡的廣播位址。
Table A-25 GET_BROADCAST 的 win_cmd 欄位
i8_cmd GET_BROADCAST pv_param 為 UINT8 型別。
表示 Link ID,用來指定網路界面。
pv_value 為 UINT32 型別。
表示廣播位址。
A.1.3.8. SET_DEFAULT_GATEWAY
設定預設閘道,這也可以使用 SET_ROUTING_TABLE 的命令達成,不過預 設閘道算是一個比較特別的路由表資料,所以獨立出一個命令。
Table A-26 SET_DEFAULT_GATEWAY 的 win_cmd 欄位
i8_cmd SET_DEFAULT_GATEWAY pv_param 為 UINT32 型別。
表示閘道位址,為一 IPv4 位址。
pv_value 無作用
A.1.3.9. GET_DEFAULT_GATEWAY
取得目前系統上所設定的預設閘道。
Table A-27 GET_DEFAULT_GATEWAY 的 win_cmd 欄位
i8_cmd GET_DEFAULT_GATEWAY pv_param 無作用
pv_value 傳回目前系統上的預設閘道設定。
訊息格式如下:
Figure A-14 GET_DEFAULT_GATEWAY 的 pv_value 格式
名稱 長度 型別 說明
Num 1 byte UINT8 表示有多少 Gateway 資料。
Gateway 4 bytes UINT32 系統內設定的 Default Gateway 的 IPv4 位址。
A.1.3.10. SET_ ROUTING_TABLE
設定路由表資料。
Table A-28 SET_ROUTING_TABLE 的 win_cmd 欄位
i8_cmd SET_ROUTING_TABLE pv_param 更改路由表資料。
訊息格式如下:
Figure A-15 SET_ROUTING_TABLE 的 win_cmd 欄位
名稱 長度 型別 說明
Action 1 byte UINT8 表示處理的動作。
0: 刪除 (Delete) 1: 增加 (Add)
Destination 4 bytes UINT32 目標,可以是 IPv4 位址也可 以是網域.。
填 0 的話表示為 Default。
Gateway 4 bytes UINT32 該目標要經由哪一個閘道傳 送。為一 IPv4 位址。
Netmask 4 bytes UINT32 該 Destination 的 Netmask。
為一 IPv4 位址。
Link ID 1 byte UINT8 表示此設定所使用的網路界 面卡。 0 表示不指定。
pv_value 無作用
A.1.3.11. GET_ROUTING_TABLE
取得路由表資料。
Table A-29 GET_ROUTING_TABLE 的 win_cmd 欄位
i8_cmd GET_ROUTING_TABLE pv_param 無作用
pv_value 傳回目前系統上的路由表設定。
訊息格式如下:
Figure A-16 GET_ROUTING_TABLE 的 pv_value 格式
名稱 長度 型別 說明
Num 1 byte UINT8 表示路由表有多少資料。
Destination 4 bytes UINT32 目標位址,可能為 IPv4 位址 或是網域.。
Gateway 4 bytes UINT32 該目標要經由哪一個閘道傳 送。為一 IPv4 位址。
Netmask 4 bytes UINT32 該 Destination 的 Netmask。
為一 IPv4 位址。
Link ID 1 byte UINT8 表示此設定所使用的網路界 面卡。
A.1.4. 傳輸層命令
A.1.4.1. REGISTER_TCP_TX_STATE_EVENT
當 TCP 的傳送狀態改變時通知,這裡的狀態不是 Figure A-17 所顯示的TCP 的內部實作狀態。而是TCP在避免擁塞時所處的狀態。
Figure A-17 TCP State Machine
Table A-30 REGISTER_TCP_STATE_EVENT 的 win_cmd 欄位
i8_cmd REGISTER_TCP_TX_STATE_EVENT pv_param 為 INT32 型別。
表示 TCP 連線的 ID。在 Linux 下就是開 TCP 連線的 socket 傳回 的值。
pv_value 無作用
A.1.4.2. GET_TCP_TX_STATE
取得 TCP 連線目前的傳送狀態。
Table A-31 GET_TCP_TX_STATE 的 win_cmd 欄位
i8_cmd GET_TCP_TX_STATE pv_param 為 INT32 型別。
表示 TCP 連線的 ID。在 Linux 下就是開 TCP 連線 socket 傳回的值。
pv_value 為 INT32 型別。
傳回目前的傳送狀態。
A.1.4.3. SET_TCP_TX_STATE
設定 TCP 連線的傳送狀態。
Table A-32 SET_TCP_TX_STATE 的 win_cmd 欄位
i8_cmd SET_TCP_TX_STATE
pv_param 設定指定 TCP 連線的傳送狀態。
訊息格式如下:
Figure A-18 SET_TCP_TX_STATE 的 pv_param 格式
名稱 長度 型別 說明
TCP ID 4 byte INT32 表示 TCP 連線的 ID。在 Linux 下就是開 TCP 連線 socket 傳 回的值
TX STATE 4 bytes INT32 設定傳送狀態。
pv_value 無作用
A.1.4.4. GET_TCP_RETX_TIMEOUT
取得目前 TCP 連線多久沒收到 Ack 就重送封包。
Table A-33 GET_TCP_RETX_TIMEOUT 的 win_cmd 欄位
i8_cmd GET_TCP_RETX_TIMEOUT pv_param 為 INT32 型別。
表示 TCP 連線的 ID。在 Linux 下就是開 TCP 連線 socket 傳回的值。
pv_value 為 UINT32 型別。
傳回目前的重送封包 Timeout 值,單位為 ms。
A.1.4.5. SET_TCP_RETX_TIMEOUT
設定目前 TCP 連線的重送封包的 Timeout 值。
Table A-34 SET_TCP_RETX_TIMEOUT 的 win_cmd 欄位
i8_cmd SET_TCP_RETX_TIMEOUT
pv_param 設定指定 TCP 連線的重送封包的 Timeout 值。
訊息格式如下:
Figure A-19 SET_TCP_RETX_TIMEOUT 的 pv_param 格式
名稱 長度 型別 說明
TCP ID 4 byte INT32 表示 TCP 連線的 ID。在 Linux 下就是開 TCP 連線 socket 傳 回的值
RETX TIME OUT
4 bytes UINT32 設定重送封包 Timeout 值,單 位為 ms。
pv_value 無作用 A.1.4.6. GET_TCP_RTT
取得指定 TCP 連線在系統核心中的 Round Trip Time (RTT)。
Table A-35 GET_TCP_RTT 的 win_cmd 欄位
i8_cmd GET_TCP_RTT pv_param 為 INT32 型別。
表示 TCP 連線的 ID。在 Linux 下就是開 TCP 連線 socket 傳回的值。
pv_value 為 UINT32 型別。
傳回目前的 Round Trip Time (RTT),單位為 ms。
A.1.4.7. SET_TCP_RTT
設定目前 TCP 連線在系統核心中的 Round Trip Time (RTT) 值。
Table A-36 SET_TCP_RTT 的 win_cmd 欄位
i8_cmd SET_TCP_RTT
pv_param 設定指定 TCP 連線的 RTT 值。
訊息格式如下:
Figure A-20 SET_TCP_RETX_TIMEOUT 的 pv_param 格式
名稱 長度 型別 說明
TCP ID 4 byte INT32 表示 TCP 連線的 ID。在 Linux 下就是開 TCP 連線 socket 傳 回的值
pv_value 無作用
A.1.4.8. GET_TCP_RECV_WIN
查詢目前 TCP 連線在核心內的 Receive Window 大小。
Table A-37 GET_TCP_RECV_WIN 的 win_cmd 欄位
i8_cmd GET_TCP_RECV_WIN pv_param 為 INT32 型別。
表示 TCP 連線的 ID。在 Linux 下就是開 TCP 連線 socket 傳回的值。
pv_value 為 UINT32 型別。
傳回目前的 Receive Window 大小,單位為 byte。
A.1.4.9. SET_TCP_RECV_WIN
設定目前 TCP 連線在核心內的 Receive Window 大小。
Table A-38 SET_TCP_RECV_WIN 的 win_cmd 欄位
i8_cmd SET_TCP_RECV_WIN
pv_param 設定指定 TCP 連線的 Receive Window 的大小。
訊息格式如下:
Figure A-21 SET_TCP_RECV_WIN 的 pv_param 格式
名稱 長度 型別 說明
TCP ID 4 byte INT32 表示 TCP 連線的 ID。在 Linux 下就是開 TCP 連線 socket 傳 回的值
RECV WIN 4 bytes UINT32 設 Receive Window 值,單位 為 byte。
pv_value 無作用
A.1.4.10. GET_TCP_CONG_WIN
查詢目前 TCP 連線在核心內的 Congestion Window 大小。
Table A-39 GET_TCP_CONG_WIN 的 win_cmd 欄位
i8_cmd GET_TCP_CONG_WIN pv_param 為 INT32 型別。
表示 TCP 連線的 ID。在 Linux 下就是開 TCP 連線 socket 傳回的值。
pv_value 為 UINT32 型別。
傳回目前的 Congestion Window 大小,單位為 byte。
A.1.4.11. SET_TCP_CONG_WIN
設定目前 TCP 連線在核心內的 Congestion Window 大小。
Table A-40 SET_TCP_CONG_WIN 的 win_cmd 欄位
i8_cmd SET_TCP_CONG_WIN
pv_param 設定指定 TCP 連線的 Receive Window 的大小。
訊息格式如下:
Figure A-22 SET_TCP_CONG_WIN 的 pv_param 格式
名稱 長度 型別 說明
TCP ID 4 byte INT32 表示 TCP 連線的 ID。在 Linux 下就是開 TCP 連線 socket 傳 回的值
CONG WIN 4 bytes UINT32 設 Congestion Window 值,單 位為 byte。
pv_value 無作用 A.2.
事件
A.2.1. 系統事件
A.2.1.1. NETDEV_REGISTER
網路界面被新增到系統中。
Table A-41 NETDEV_REGISTER 的 win_event 欄位
i8_event NETDEV_REGISTER
pv_value 通知哪個網路界面被新增到系統中。
訊息格式如下:
Figure A-23 NETDEV_REGISTER 的 pv_value 格式
名稱 長度 型別 說明
Link ID 1 byte INT8 網路界面的 ID,用來分辨不同 的界面。
Link Name
9 bytes CHAR[] 以 NULL 結尾的字串,為系統 內網路界面的名稱。在 Linux 系 統可能為 eth0、wlan0。
A.2.1.2. NETDEV_UNREGISTER
網路界面卡從系統中移除。
Table A-42 NETDEV_UNREGISTER 的 win_event 欄位
i8_event NETDEV_UNREGISTER
pv_value 通知哪個網路界面被從系統中移除。
訊息格式如下:
Figure A-24 NETDEV_REGISTER 的 pv_value 格式
名稱 長度 型別 說明
Link ID 1 byte INT8 網路界面的 ID,用來分辨不同的 界面。
Link Name 9 bytes CHAR[] 以 NULL 結尾的字串,為系統內
A.2.1.3. NETDEV_CHANGENAME
網路界面卡在系統內部的名稱改變。
Table A-43 NETDEV_CHANGENAME 的 win_event 欄位
i8_event NETDEV_CHANGENAME pv_value 通知哪個網路界面的名稱改變了。
訊息格式如下:
Figure A-25 NETDEV_CHANGENAME 的 pv_value 格式
名稱 長度 型別 說明
Link ID 1 byte INT8 網路界面的 ID,用來分辨不同 的界面。
New Link Name
9 bytes CHAR[] 以 NULL 結尾的字串,為改變 過後的網路界面名稱。
A.2.2. 硬體驅動程式事件
A.2.2.1. NETDEV_UP
某個網路界面被啟動了。
Table A-44 NETDEV_UP 的 win_event 欄位
i8_event NETDEV_UP
pv_value 通知哪個網路界面被啟動了。
訊息格式如下:
Figure A-26 NETDEV_REGISTER 的 pv_value 格式
名稱 長度 型別 說明
Link ID 1 byte INT8 網路界面的 ID,用來分辨不同的 界面。
Link Name 9 bytes CHAR[] 以 NULL 結尾的字串,為系統內 網路界面的名稱。
A.2.2.2. NETDEV_DOWN
某個網路界面被關閉了。
Table A-45 NETDEV_DOWN 的 win_event 欄位
i8_event NETDEV_DOWN
pv_value 通知哪個網路界面被關閉了。
訊息格式如下:
Figure A-27 NETDEV_DOWN 的 pv_value 格式
名稱 長度 型別 說明
Link ID 1 byte INT8 網路界面的 ID,用來分辨不同的 界面。
Link Name 9 bytes CHAR[] 以 NULL 結尾的字串,為系統內 網路界面的名稱。
A.2.2.3. NETDEV_REBOOT
當網路介面偵測到硬體錯誤且需要重新啟動。
Table A-46 NETDEV_REBOOT 的 win_event 欄
i8_event NETDEV_REBOOT
pv_value 通知哪個網路界面被偵測到硬體錯誤且需重新啟動。
訊息格式如下:
Figure A-28 NETDEV_REGISTER 的 pv_value 格式
名稱 長度 型別 說明
A.2.2.4. NETDEV_CHANGEMTU
網路介面更改 MTU (Maximum Transfer Unit)。
Table A-47 NETDEV_CHANGEMTU 的 win_event 欄位
i8_event NETDEV_CHANGEMTU
pv_param 傳回哪個網路介面改更改的 MTU。
訊息格式如下:
Figure A-29 NETDEV_CHANGEMTU 的 pv_param 格式
欄位名稱 長度 型別 說明
Link ID 1byte INT8 表示網路界面卡。
MTU 2bytes UINT16 更改過後的 MTU 值。
A.2.2.5. NETDEV_CHANGEADDR
網路介面之硬體位址改變。
Table A-48 NETDEV_CHANGEADDR 的 win_event 欄位
i8_event NETDEV_CHANGEADDR pv_param 傳回哪個網路介面改更改的 MTU。
訊息格式如下:
Figure A-30 NETDEV_CHANGEADDR 的 pv_value 格式
欄位名稱 長度 型別 說明
Link ID 1byte INT8 表示網路界面卡。
MAC Address 6bytes char[] 更改過後的 MAC Address。
A.2.2.6. LINK_UP
某張網路界面卡可以開始傳送資料封包了。通常為網路界面卡和接取點 (POA) 有了連接。關於各種不同類型的網路界面卡在何時會產生 Link UP 的事 件,可參考 IETF 的” Link-layer Event Notifications for Detecting Network
Attachments”,目前還在 Draft 階段。這份文件有定義 ppp 界面、802.11 界面及 Etnernet 界面的 Link UP 情況。
Table A-49 LINK_UP 的 win_event 欄位
i8_event LINK_UP
pv_value 通知哪個網路界面可以開始傳送資料封包。
訊息格式如下:
Figure A-31 LINK_UP 的 pv_value 格式
名稱 長度 型別 說明
Link ID 1 byte INT8 網路界面的 ID,用來分辨不同 的界面。
A.2.2.7. LINK_DOWN
某張網路界面卡無法傳送資料封包了。通常為網路界面卡和接取點(POA)的 連接斷掉了。關於各種不同類型的網路界面卡在何時會產生 Link DOWN 的事 件,可參考 IETF 的” Link-layer Event Notifications for Detecting Network
Attachments”,目前還在 Draft 階段。這份文件有定義 ppp 界面、802.11 界面及 Etnernet 界面的 Link Down 情況。
Table A-50 LINK_DOWN 的 win_event 欄位
Table A-51 LINK_DOWN 的 win_event 欄位
i8_event LINK_DOWN
pv_value 通知哪個網路界面沒有傳送資料封包的能力。
pv_value 通知哪個網路界面沒有傳送資料封包的能力。