jeka 11 hours ago
parent
commit
cec2ffe2eb
  1. 2
      lib/ll_queue.h
  2. 3
      src/etcp.c
  3. 28
      tools/etcpmon/etcpmon_gui.c
  4. 2
      tools/etcpmon/etcpmon_gui.h

2
lib/ll_queue.h

@ -336,7 +336,7 @@ int queue_remove_data(struct ll_queue* q, struct ll_entry* entry);
* @return количество байт * @return количество байт
*/ */
static inline size_t queue_total_bytes(struct ll_queue* q) { static inline size_t queue_total_bytes(struct ll_queue* q) {
return q ? q->total_bytes : 0; return q->total_bytes;
} }
#endif // LL_QUEUE_H #endif // LL_QUEUE_H

3
src/etcp.c

@ -448,7 +448,8 @@ static void input_queue_try_push(struct ETCP_CONN* etcp) {// пробуем пр
size_t wait_ack_bytes = queue_total_bytes(etcp->input_wait_ack); size_t wait_ack_bytes = queue_total_bytes(etcp->input_wait_ack);
if (wait_ack_bytes <= etcp->optimal_inflight) { if (wait_ack_bytes <= etcp->optimal_inflight) {
DEBUG_TRACE(DEBUG_CATEGORY_ETCP, "[%s] resume input queue: inflight_bytes=%d, input_len=%d", etcp->log_name, wait_ack_bytes, etcp->input_queue->total_bytes); DEBUG_TRACE(DEBUG_CATEGORY_ETCP, "[%s] resume input queue: inflight_bytes=%d, input_len=%d", etcp->log_name, wait_ack_bytes, etcp->input_queue->total_bytes);
queue_resume_callback(etcp->input_queue);// и только когда больше нечего отправлять - забираем новый пакет if (etcp->input_queue->count > 0) input_queue_cb(etcp->input_queue, etcp);
else queue_resume_callback(etcp->input_queue);// и только когда больше нечего отправлять - забираем новый пакет
} }
} }

28
tools/etcpmon/etcpmon_gui.c

@ -19,7 +19,7 @@
//#pragma comment(lib, "comctl32.lib") //#pragma comment(lib, "comctl32.lib")
//#pragma comment(lib, "user32.lib") //#pragma comment(lib, "user32.lib")
//#pragma comment(lib, "gdi32.lib") //#pragma comment(lib, "gdi32.lib")
#define WINDOW_WIDTH 900 #define WINDOW_WIDTH 1000
#define WINDOW_HEIGHT 1250 #define WINDOW_HEIGHT 1250
#define UPDATE_INTERVAL 10 /* 50ms → 20 samples per second */ #define UPDATE_INTERVAL 10 /* 50ms → 20 samples per second */
/* Global app pointer for callbacks */ /* Global app pointer for callbacks */
@ -144,8 +144,8 @@ HWND etcpmon_gui_create_window(struct etcpmon_app* app) {
} }
/* Set default values */ /* Set default values */
SetDlgItemTextA(app->hWndMain, IDC_EDIT_ADDR, "127.0.0.1"); SetDlgItemTextA(app->hWndMain, IDC_EDIT_ADDR, "192.168.40.1");
SetDlgItemTextA(app->hWndMain, IDC_EDIT_PORT, "9090"); SetDlgItemTextA(app->hWndMain, IDC_EDIT_PORT, "9091");
UpdateUIState(app); UpdateUIState(app);
OnConnect(app); OnConnect(app);
@ -159,7 +159,7 @@ static void CreateControls(struct etcpmon_app* app) {
/* Connection group */ /* Connection group */
CreateWindowExA(0, "BUTTON", "Connection", CreateWindowExA(0, "BUTTON", "Connection",
WS_CHILD | WS_VISIBLE | BS_GROUPBOX, WS_CHILD | WS_VISIBLE | BS_GROUPBOX,
x, y, 880, 60, hWnd, (HMENU)IDC_STATIC, hInst, NULL); x, y, WINDOW_WIDTH - 20, 60, hWnd, (HMENU)IDC_STATIC, hInst, NULL);
/* Address label and edit */ /* Address label and edit */
CreateWindowExA(0, "STATIC", "Server:", CreateWindowExA(0, "STATIC", "Server:",
@ -253,7 +253,7 @@ static void CreateControls(struct etcpmon_app* app) {
y = 485; y = 485;
CreateWindowExA(0, "BUTTON", "ETCP Metrics", CreateWindowExA(0, "BUTTON", "ETCP Metrics",
WS_CHILD | WS_VISIBLE | BS_GROUPBOX, WS_CHILD | WS_VISIBLE | BS_GROUPBOX,
x, y, 430, 210, hWnd, (HMENU)IDC_STATIC, hInst, NULL); x, y, (WINDOW_WIDTH - 40) / 2, 210, hWnd, (HMENU)IDC_STATIC, hInst, NULL);
int mx = x + 10, my = y + 20; int mx = x + 10, my = y + 20;
@ -323,10 +323,11 @@ static void CreateControls(struct etcpmon_app* app) {
mx + 85, my, 100, 20, hWnd, (HMENU)IDC_EDIT_ETCP_LINKS, hInst, NULL); mx + 85, my, 100, 20, hWnd, (HMENU)IDC_EDIT_ETCP_LINKS, hInst, NULL);
/* TUN/Routing Metrics group - right of ETCP Metrics */ /* TUN/Routing Metrics group - right of ETCP Metrics */
x = 460; y = 485; int group_w = (WINDOW_WIDTH - 40) / 2;
x = 10 + group_w + 20; y = 485;
CreateWindowExA(0, "BUTTON", "TUN/Routing Metrics", CreateWindowExA(0, "BUTTON", "TUN/Routing Metrics",
WS_CHILD | WS_VISIBLE | BS_GROUPBOX, WS_CHILD | WS_VISIBLE | BS_GROUPBOX,
x, y, 430, 210, hWnd, (HMENU)IDC_STATIC, hInst, NULL); x, y, group_w, 210, hWnd, (HMENU)IDC_STATIC, hInst, NULL);
mx = x + 10; my = y + 20; mx = x + 10; my = y + 20;
@ -441,13 +442,13 @@ static void CreateControls(struct etcpmon_app* app) {
app->hListLinks = CreateWindowExA(WS_EX_CLIENTEDGE, "LISTBOX", "", app->hListLinks = CreateWindowExA(WS_EX_CLIENTEDGE, "LISTBOX", "",
WS_CHILD | WS_VISIBLE | LBS_NOTIFY | WS_VSCROLL | LBS_NOINTEGRALHEIGHT, WS_CHILD | WS_VISIBLE | LBS_NOTIFY | WS_VSCROLL | LBS_NOINTEGRALHEIGHT,
10, y + 20, 880, 160, hWnd, (HMENU)IDC_LIST_LINKS, hInst, NULL); 10, y + 20, WINDOW_WIDTH - 20, 160, hWnd, (HMENU)IDC_LIST_LINKS, hInst, NULL);
/* Queues & Errors group - below Links */ /* Queues & Errors group - below Links */
y = 915; y = 915;
CreateWindowExA(0, "BUTTON", "Queues & Errors", CreateWindowExA(0, "BUTTON", "Queues & Errors",
WS_CHILD | WS_VISIBLE | BS_GROUPBOX, WS_CHILD | WS_VISIBLE | BS_GROUPBOX,
10, y, 880, 335, hWnd, (HMENU)IDC_STATIC_QUEUES, hInst, NULL); 10, y, WINDOW_WIDTH - 20, 335, hWnd, (HMENU)IDC_STATIC_QUEUES, hInst, NULL);
int qy = y + 22; int qy = y + 22;
int q_col1 = 20; int q_col1 = 20;
@ -481,6 +482,9 @@ static void CreateControls(struct etcpmon_app* app) {
app->hEditQWaitAckPkts = CreateWindowExA(WS_EX_CLIENTEDGE, "EDIT", "", app->hEditQWaitAckPkts = CreateWindowExA(WS_EX_CLIENTEDGE, "EDIT", "",
WS_CHILD | WS_VISIBLE | ES_READONLY | ES_CENTER, WS_CHILD | WS_VISIBLE | ES_READONLY | ES_CENTER,
q_col3 + 135, qy - 2, 50, 18, hWnd, (HMENU)IDC_EDIT_Q_WAIT_ACK_PKTS, hInst, NULL); q_col3 + 135, qy - 2, 50, 18, hWnd, (HMENU)IDC_EDIT_Q_WAIT_ACK_PKTS, hInst, NULL);
app->hEditQWaitAckOptInfl = CreateWindowExA(WS_EX_CLIENTEDGE, "EDIT", "",
WS_CHILD | WS_VISIBLE | ES_READONLY | ES_CENTER,
q_col3 + 190, qy - 2, 60, 18, hWnd, (HMENU)IDC_EDIT_WAITACK_OPT_INFL, hInst, NULL);
/* Queue metrics - row 2 */ /* Queue metrics - row 2 */
qy += 28; qy += 28;
@ -548,9 +552,6 @@ static void CreateControls(struct etcpmon_app* app) {
app->hEditWaitAckTimer = CreateWindowExA(WS_EX_CLIENTEDGE, "EDIT", "", app->hEditWaitAckTimer = CreateWindowExA(WS_EX_CLIENTEDGE, "EDIT", "",
WS_CHILD | WS_VISIBLE | ES_READONLY | ES_CENTER, WS_CHILD | WS_VISIBLE | ES_READONLY | ES_CENTER,
q_col1 + 195, qy - 2, 60, 18, hWnd, (HMENU)IDC_EDIT_WAITACK_TIMER, hInst, NULL); q_col1 + 195, qy - 2, 60, 18, hWnd, (HMENU)IDC_EDIT_WAITACK_TIMER, hInst, NULL);
app->hEditWaitAckOptInfl = CreateWindowExA(WS_EX_CLIENTEDGE, "EDIT", "",
WS_CHILD | WS_VISIBLE | ES_READONLY | ES_CENTER,
q_col1 + 260, qy - 2, 60, 18, hWnd, (HMENU)IDC_EDIT_WAITACK_OPT_INFL, hInst, NULL);
/* ID metrics - row 4 */ /* ID metrics - row 4 */
// qy += 30; // qy += 30;
@ -984,6 +985,7 @@ void etcpmon_gui_update_metrics(struct etcpmon_app* app,
UpdateEditIfChanged(hMain, IDC_EDIT_Q_IN_SEND_PKTS, "%u", metrics->etcp.input_send_q_packets); UpdateEditIfChanged(hMain, IDC_EDIT_Q_IN_SEND_PKTS, "%u", metrics->etcp.input_send_q_packets);
UpdateEditIfChanged(hMain, IDC_EDIT_Q_WAIT_ACK_BYTES, "%u", metrics->etcp.input_wait_ack_bytes); UpdateEditIfChanged(hMain, IDC_EDIT_Q_WAIT_ACK_BYTES, "%u", metrics->etcp.input_wait_ack_bytes);
UpdateEditIfChanged(hMain, IDC_EDIT_Q_WAIT_ACK_PKTS, "%u", metrics->etcp.input_wait_ack_packets); UpdateEditIfChanged(hMain, IDC_EDIT_Q_WAIT_ACK_PKTS, "%u", metrics->etcp.input_wait_ack_packets);
UpdateEditIfChanged(hMain, IDC_EDIT_WAITACK_OPT_INFL, "%u", metrics->etcp.optimal_inflight);
UpdateEditIfChanged(hMain, IDC_EDIT_Q_ACK_BYTES, "%u", metrics->etcp.ack_q_bytes); UpdateEditIfChanged(hMain, IDC_EDIT_Q_ACK_BYTES, "%u", metrics->etcp.ack_q_bytes);
UpdateEditIfChanged(hMain, IDC_EDIT_Q_ACK_PKTS, "%u", metrics->etcp.ack_q_packets); UpdateEditIfChanged(hMain, IDC_EDIT_Q_ACK_PKTS, "%u", metrics->etcp.ack_q_packets);
UpdateEditIfChanged(hMain, IDC_EDIT_Q_RECV_BYTES, "%u", metrics->etcp.recv_q_bytes); UpdateEditIfChanged(hMain, IDC_EDIT_Q_RECV_BYTES, "%u", metrics->etcp.recv_q_bytes);
@ -1004,7 +1006,6 @@ void etcpmon_gui_update_metrics(struct etcpmon_app* app,
UpdateEditIfChanged(hMain, IDC_EDIT_WAITACK_SUSP, "%s", metrics->etcp.wait_ack_cb_suspended ? "ON" : "OFF"); UpdateEditIfChanged(hMain, IDC_EDIT_WAITACK_SUSP, "%s", metrics->etcp.wait_ack_cb_suspended ? "ON" : "OFF");
UpdateEditIfChanged(hMain, IDC_EDIT_WAITACK_CB, "%s", metrics->etcp.wait_ack_cb_set ? "ON" : "OFF"); UpdateEditIfChanged(hMain, IDC_EDIT_WAITACK_CB, "%s", metrics->etcp.wait_ack_cb_set ? "ON" : "OFF");
UpdateEditIfChanged(hMain, IDC_EDIT_WAITACK_TIMER, "%s", metrics->etcp.wait_ack_resume_timeout ? "ON" : "OFF"); UpdateEditIfChanged(hMain, IDC_EDIT_WAITACK_TIMER, "%s", metrics->etcp.wait_ack_resume_timeout ? "ON" : "OFF");
UpdateEditIfChanged(hMain, IDC_EDIT_WAITACK_OPT_INFL, "%u", metrics->etcp.optimal_inflight);
/* ID Metrics */ /* ID Metrics */
UpdateEditIfChanged(hMain, IDC_EDIT_ID_NEXT_TX, "%u", metrics->etcp.next_tx_id); UpdateEditIfChanged(hMain, IDC_EDIT_ID_NEXT_TX, "%u", metrics->etcp.next_tx_id);
@ -1125,6 +1126,7 @@ void etcpmon_gui_clear_metrics(struct etcpmon_app* app) {
SetDlgItemTextA(app->hWndMain, IDC_EDIT_Q_IN_SEND_PKTS, ""); SetDlgItemTextA(app->hWndMain, IDC_EDIT_Q_IN_SEND_PKTS, "");
SetDlgItemTextA(app->hWndMain, IDC_EDIT_Q_WAIT_ACK_BYTES, ""); SetDlgItemTextA(app->hWndMain, IDC_EDIT_Q_WAIT_ACK_BYTES, "");
SetDlgItemTextA(app->hWndMain, IDC_EDIT_Q_WAIT_ACK_PKTS, ""); SetDlgItemTextA(app->hWndMain, IDC_EDIT_Q_WAIT_ACK_PKTS, "");
SetDlgItemTextA(app->hWndMain, IDC_EDIT_WAITACK_OPT_INFL, "");
SetDlgItemTextA(app->hWndMain, IDC_EDIT_Q_ACK_BYTES, ""); SetDlgItemTextA(app->hWndMain, IDC_EDIT_Q_ACK_BYTES, "");
SetDlgItemTextA(app->hWndMain, IDC_EDIT_Q_ACK_PKTS, ""); SetDlgItemTextA(app->hWndMain, IDC_EDIT_Q_ACK_PKTS, "");
SetDlgItemTextA(app->hWndMain, IDC_EDIT_Q_RECV_BYTES, ""); SetDlgItemTextA(app->hWndMain, IDC_EDIT_Q_RECV_BYTES, "");

2
tools/etcpmon/etcpmon_gui.h

@ -231,6 +231,7 @@ struct etcpmon_app {
HWND hEditQInSendPkts; HWND hEditQInSendPkts;
HWND hEditQWaitAckBytes; HWND hEditQWaitAckBytes;
HWND hEditQWaitAckPkts; HWND hEditQWaitAckPkts;
HWND hEditQWaitAckOptInfl;
HWND hEditQAckBytes; HWND hEditQAckBytes;
HWND hEditQAckPkts; HWND hEditQAckPkts;
HWND hEditQRecvBytes; HWND hEditQRecvBytes;
@ -251,7 +252,6 @@ struct etcpmon_app {
HWND hEditWaitAckSuspend; HWND hEditWaitAckSuspend;
HWND hEditWaitAckCb; HWND hEditWaitAckCb;
HWND hEditWaitAckTimer; HWND hEditWaitAckTimer;
HWND hEditWaitAckOptInfl;
/* ID metrics */ /* ID metrics */
HWND hEditIdNextTx; HWND hEditIdNextTx;

Loading…
Cancel
Save