jeka 9 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 количество байт
*/
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

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);
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);
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, "user32.lib")
//#pragma comment(lib, "gdi32.lib")
#define WINDOW_WIDTH 900
#define WINDOW_WIDTH 1000
#define WINDOW_HEIGHT 1250
#define UPDATE_INTERVAL 10 /* 50ms → 20 samples per second */
/* Global app pointer for callbacks */
@ -144,8 +144,8 @@ HWND etcpmon_gui_create_window(struct etcpmon_app* app) {
}
/* Set default values */
SetDlgItemTextA(app->hWndMain, IDC_EDIT_ADDR, "127.0.0.1");
SetDlgItemTextA(app->hWndMain, IDC_EDIT_PORT, "9090");
SetDlgItemTextA(app->hWndMain, IDC_EDIT_ADDR, "192.168.40.1");
SetDlgItemTextA(app->hWndMain, IDC_EDIT_PORT, "9091");
UpdateUIState(app);
OnConnect(app);
@ -159,7 +159,7 @@ static void CreateControls(struct etcpmon_app* app) {
/* Connection group */
CreateWindowExA(0, "BUTTON", "Connection",
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 */
CreateWindowExA(0, "STATIC", "Server:",
@ -253,7 +253,7 @@ static void CreateControls(struct etcpmon_app* app) {
y = 485;
CreateWindowExA(0, "BUTTON", "ETCP Metrics",
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;
@ -323,10 +323,11 @@ static void CreateControls(struct etcpmon_app* app) {
mx + 85, my, 100, 20, hWnd, (HMENU)IDC_EDIT_ETCP_LINKS, hInst, NULL);
/* 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",
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;
@ -441,13 +442,13 @@ static void CreateControls(struct etcpmon_app* app) {
app->hListLinks = CreateWindowExA(WS_EX_CLIENTEDGE, "LISTBOX", "",
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 */
y = 915;
CreateWindowExA(0, "BUTTON", "Queues & Errors",
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 q_col1 = 20;
@ -481,6 +482,9 @@ static void CreateControls(struct etcpmon_app* app) {
app->hEditQWaitAckPkts = CreateWindowExA(WS_EX_CLIENTEDGE, "EDIT", "",
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);
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 */
qy += 28;
@ -548,9 +552,6 @@ static void CreateControls(struct etcpmon_app* app) {
app->hEditWaitAckTimer = CreateWindowExA(WS_EX_CLIENTEDGE, "EDIT", "",
WS_CHILD | WS_VISIBLE | ES_READONLY | ES_CENTER,
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 */
// 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_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_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_PKTS, "%u", metrics->etcp.ack_q_packets);
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_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_OPT_INFL, "%u", metrics->etcp.optimal_inflight);
/* ID Metrics */
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_WAIT_ACK_BYTES, "");
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_PKTS, "");
SetDlgItemTextA(app->hWndMain, IDC_EDIT_Q_RECV_BYTES, "");

2
tools/etcpmon/etcpmon_gui.h

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

Loading…
Cancel
Save