第七章 結論與未來工作
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
某個網路界面被啟動了。