• 沒有找到結果。

第七章 結論與未來工作

A.1. 命令

A.1.2. 硬體驅動程式命令

A.1.2.9. SET_MTU

設定指定網路界面卡的最大傳輸單位 (Maximum Transmission Unit, MTU)。

Table A-13 為一般常見網路界面的MTU:

i8_cmd SET_SIGNAL_AVOID_PINGPONG_VALUE pv_param 設定指定網路界面卡的最大傳輸單位。

訊息格式如下:

Figure A-9 SET_MTU 的 pv_param 格式

MTU 2bytes UINT16 指定 MTU 值。

pv_value 無作用 A.1.2.10. GET_MTU

取得指定網路界面卡上所設定的最大傳輸單位 (Maximum Transmission Unit, MTU)。

Table A-15 GET_MTU 的 win_cmd 欄位說明

i8_cmd GET_MTU pv_param 為 INT8 型別。

表示 Link ID,用來指定網路界面。

pv_value 為 UINT16 型別。

傳回最大傳輸單位 (MTU)。

A.1.2.11. GET_MAC_ADDRESS

取得指定網路界面卡的 MAC Address。

Table A-16 GET_MAC_ADDRESS 的 win_cmd 欄位

i8_cmd GET_MAC_ADDRESS pv_param 為 INT8 型別。

表示 Link ID,用來指定網路界面。

pv_value 為 CHAR[6] 陣列型別。

傳回 MAC Address。

A.1.2.12. GET_BANDWIDTH

取得指定網路界面卡目前所連線網路的頻寬。目前沒有實作該命令。

Table A-17 GET_BANDWIDTH 的 win_cmd 欄位

i8_cmd GET_BANDWIDTH pv_param 為 INT8 型別。

表示 Link ID,用來指定網路界面。

pv_value 為 UINT32 型別。

傳回中介軟體所測量的頻寬,單位為 bytes。

A.1.2.13. GET_STATISTICS

取得指定網路界面卡的統計值。

Table A-18 GET_STATISTICS 的 win_cmd 欄位

i8_cmd GET_STATISTICS pv_param 為 INT8 型別。

表示 Link ID,用來指定網路界面。

pv_value 傳回統計資料。

訊息格式如下:

Figure A-10 GET_STATISTICS 的 pv_value 格式

名稱 長度 型別 說明

rx_packets 4 bytes UINT32 收到的封包總數 tx_packets 4 bytes UINT32 傳送的封包總數 rx_bytes 4 bytes UINT32 收到的 bytes 總數 tx_bytes 4 bytes UINT32 傳送的 bytes 總數 rx_errors 4 bytes UINT32 收到的壞掉封包總數 tx_errors 4 bytes UINT32 傳送封包失敗的次數

rx_dropped 4 bytes UINT32 丟掉收到封包的次數,通常是 系統內沒有記憶體可用了。

tx_dropped 4 bytes UINT32 丟掉要傳送封包的次數,通常 是系統內沒有記憶體可用了。

collisions 4 bytes UINT32 產生碰撞的次數

A.1.3. 網路層命令

A.1.3.1. SET_STATIC_IP

設定指定網路界面的網路位址 (IP ADDRESS)。

Table A-19 SET_STATIC_IP 的 win_cmd_ 欄位說明

i8_cmd SET_STATIC_IP

pv_param 設定指定網路界面卡的網路位址。

訊息格式如下:

Figure A-11 SET_STATIC_IP 的 pv_param 格式

名稱 長度 型別 說明

Link ID 1 byte UINT8 指定網路界面卡。

IPv4 Address

4 bytes UINT32 所要設定的網路位址。

Netmask 4 bytes UINT32 設定子網路遮罩。 0 表示不 更動原本設定。

pv_value 無作用

A.1.3.2. SET_IP_BY_DHCP

使用 DHCP 為指定的網路界面卡取得網路位址。

Table A-20 SET_IP_BY_DHCP 的 win_cmd 欄位

i8_cmd SET_IP_BY_DHCP pv_param 為 INT8 型別。

表示 Link ID,用來指定網路界面。

pv_value 無作用

A.1.3.3. GET_IP

取得指定網路界面卡上目前所設定的網路位址。

Table A-21 GET_IP 的 win_cmd 欄位

i8_cmd GET_IP pv_param 為 UINT8 型別。

表示 Link ID,用來指定網路界面。

pv_value 為 UINT32 型別。

表示網路位址。

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

某個網路界面被啟動了。