• 沒有找到結果。

第七章 結論與未來工作

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 通知哪個網路界面沒有傳送資料封包的能力。