Browse Source

1

nodeinfo-routing-update
jeka 4 weeks ago
parent
commit
220d23daf7
  1. 5
      src/control_server.c
  2. 2
      src/etcp.h
  3. 3
      src/etcp_connections.c
  4. 43
      tools/etcpmon/etcpmon_gui.c
  5. 10
      tools/etcpmon/etcpmon_gui.h
  6. 7
      tools/etcpmon/etcpmon_protocol.h

5
src/control_server.c

@ -760,6 +760,11 @@ static void send_metrics(struct control_server* server, struct control_client* c
rsp->etcp.last_delivered_id = conn->last_delivered_id;
rsp->etcp.rx_ack_till = conn->rx_ack_till;
/* input_wait_ack queue state */
rsp->etcp.wait_ack_cb_suspended = (uint8_t)conn->input_wait_ack->callback_suspended;
rsp->etcp.wait_ack_cb_set = (conn->input_wait_ack->callback != NULL) ? 1 : 0;
rsp->etcp.wait_ack_resume_timeout = (conn->input_wait_ack->resume_timeout_id != NULL) ? 1 : 0;
/* Fill TUN metrics */
if (instance->tun) {
rsp->tun.bytes_read = instance->tun->bytes_read;

2
src/etcp.h

@ -90,7 +90,7 @@ struct ETCP_CONN {
struct ll_queue* input_wait_ack; // очередь ожидающих подтверждение (inflight_pool -> struct INFLIGHT_PACKET)
struct ll_queue* ack_q; // неотправленные подтверждения приема пакетов (instance.ack_pool -> struct ACK_PACKET)
struct ll_queue* recv_q; // очередь на сборку (rx_pool -> struct ETCP_FRAGMENT)
struct ll_queue* recv_q; // очередь на сборку фрагментированных пакетов(rx_pool -> struct ETCP_FRAGMENT)
void (*link_ready_for_send_fn)(struct ETCP_CONN*);// функцию которую должен вызвать драйвер линка при готовности линка принимать данные

3
src/etcp_connections.c

@ -1011,6 +1011,9 @@ process_decrypted:
link->etcp->log_name, link, link->local_link_id);
}
// Count decrypted bytes
link->total_decrypted += pkt->data_len;
// Count received keepalive packets (empty packets with no payload)
if (pkt->data_len == 0) {
link->keepalive_recv_count++;

43
tools/etcpmon/etcpmon_gui.c

@ -255,7 +255,7 @@ static void CreateControls(struct etcpmon_app* app) {
y = 485;
CreateWindowExA(0, "BUTTON", "ETCP Metrics",
WS_CHILD | WS_VISIBLE | BS_GROUPBOX,
x, y, 430, 180, hWnd, (HMENU)IDC_STATIC, hInst, NULL);
x, y, 430, 210, hWnd, (HMENU)IDC_STATIC, hInst, NULL);
int mx = x + 10, my = y + 20;
@ -328,7 +328,7 @@ static void CreateControls(struct etcpmon_app* app) {
x = 460; y = 485;
CreateWindowExA(0, "BUTTON", "TUN/Routing Metrics",
WS_CHILD | WS_VISIBLE | BS_GROUPBOX,
x, y, 430, 180, hWnd, (HMENU)IDC_STATIC, hInst, NULL);
x, y, 430, 210, hWnd, (HMENU)IDC_STATIC, hInst, NULL);
mx = x + 10; my = y + 20;
@ -423,7 +423,7 @@ static void CreateControls(struct etcpmon_app* app) {
mx + 260, my - 2, 50, 18, hWnd, (HMENU)IDC_EDIT_RT_LEARNED, hInst, NULL);
/* Links list */
y = 715;
y = 725;
CreateWindowExA(0, "STATIC", "Links:",
WS_CHILD | WS_VISIBLE,
10, y, 100, 20, hWnd, (HMENU)IDC_STATIC, hInst, NULL);
@ -433,7 +433,7 @@ static void CreateControls(struct etcpmon_app* app) {
10, y + 20, 880, 160, hWnd, (HMENU)IDC_LIST_LINKS, hInst, NULL);
/* Queues & Errors group - below Links */
y = 905;
y = 915;
CreateWindowExA(0, "BUTTON", "Queues & Errors",
WS_CHILD | WS_VISIBLE | BS_GROUPBOX,
10, y, 880, 165, hWnd, (HMENU)IDC_STATIC_QUEUES, hInst, NULL);
@ -524,22 +524,36 @@ static void CreateControls(struct etcpmon_app* app) {
WS_CHILD | WS_VISIBLE | ES_READONLY | ES_CENTER,
q_col2 + 110, qy - 2, 50, 18, hWnd, (HMENU)IDC_EDIT_TIMER_ACK_RESP, hInst, NULL);
/* ID metrics - row 4 */
/* WaitAck queue state */
qy += 30;
CreateWindowExA(0, "STATIC", "WaitAck:",
WS_CHILD | WS_VISIBLE, q_col1, qy, 60, 16, hWnd, (HMENU)IDC_STATIC, hInst, NULL);
app->hEditWaitAckSuspend = CreateWindowExA(WS_EX_CLIENTEDGE, "EDIT", "",
WS_CHILD | WS_VISIBLE | ES_READONLY | ES_CENTER,
q_col1 + 65, qy - 2, 60, 18, hWnd, (HMENU)IDC_EDIT_WAITACK_SUSP, hInst, NULL);
app->hEditWaitAckCb = CreateWindowExA(WS_EX_CLIENTEDGE, "EDIT", "",
WS_CHILD | WS_VISIBLE | ES_READONLY | ES_CENTER,
q_col1 + 130, qy - 2, 60, 18, hWnd, (HMENU)IDC_EDIT_WAITACK_CB, hInst, NULL);
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);
/* ID metrics - row 4 */
// qy += 30;
CreateWindowExA(0, "STATIC", "IDs:",
WS_CHILD | WS_VISIBLE, q_col1, qy, 30, 16, hWnd, (HMENU)IDC_STATIC, hInst, NULL);
WS_CHILD | WS_VISIBLE, q_col2, qy, 30, 16, hWnd, (HMENU)IDC_STATIC, hInst, NULL);
app->hEditIdNextTx = CreateWindowExA(WS_EX_CLIENTEDGE, "EDIT", "",
WS_CHILD | WS_VISIBLE | ES_READONLY | ES_CENTER,
q_col1 + 35, qy - 2, 65, 18, hWnd, (HMENU)IDC_EDIT_ID_NEXT_TX, hInst, NULL);
q_col2 + 35, qy - 2, 65, 18, hWnd, (HMENU)IDC_EDIT_ID_NEXT_TX, hInst, NULL);
app->hEditIdLastRx = CreateWindowExA(WS_EX_CLIENTEDGE, "EDIT", "",
WS_CHILD | WS_VISIBLE | ES_READONLY | ES_CENTER,
q_col1 + 105, qy - 2, 65, 18, hWnd, (HMENU)IDC_EDIT_ID_LAST_RX, hInst, NULL);
q_col2 + 105, qy - 2, 65, 18, hWnd, (HMENU)IDC_EDIT_ID_LAST_RX, hInst, NULL);
app->hEditIdLastDel = CreateWindowExA(WS_EX_CLIENTEDGE, "EDIT", "",
WS_CHILD | WS_VISIBLE | ES_READONLY | ES_CENTER,
q_col1 + 175, qy - 2, 65, 18, hWnd, (HMENU)IDC_EDIT_ID_LAST_DEL, hInst, NULL);
q_col2 + 175, qy - 2, 65, 18, hWnd, (HMENU)IDC_EDIT_ID_LAST_DEL, hInst, NULL);
app->hEditIdRxAckTill = CreateWindowExA(WS_EX_CLIENTEDGE, "EDIT", "",
WS_CHILD | WS_VISIBLE | ES_READONLY | ES_CENTER,
q_col1 + 245, qy - 2, 65, 18, hWnd, (HMENU)IDC_EDIT_ID_RX_ACK_TILL, hInst, NULL);
q_col2 + 245, qy - 2, 65, 18, hWnd, (HMENU)IDC_EDIT_ID_RX_ACK_TILL, hInst, NULL);
}
static LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
struct etcpmon_app* app = NULL;
@ -851,6 +865,11 @@ void etcpmon_gui_update_metrics(struct etcpmon_app* app,
UpdateEditIfChanged(hMain, IDC_EDIT_TIMER_RETRANS, "%s", metrics->etcp.retrans_timer_active ? "ON" : "OFF");
UpdateEditIfChanged(hMain, IDC_EDIT_TIMER_ACK_RESP, "%s", metrics->etcp.ack_resp_timer_active ? "ON" : "OFF");
/* WaitAck queue state */
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");
/* ID Metrics */
UpdateEditIfChanged(hMain, IDC_EDIT_ID_NEXT_TX, "%u", metrics->etcp.next_tx_id);
UpdateEditIfChanged(hMain, IDC_EDIT_ID_LAST_RX, "%u", metrics->etcp.last_rx_id);
@ -950,6 +969,10 @@ void etcpmon_gui_clear_metrics(struct etcpmon_app* app) {
SetDlgItemTextA(app->hWndMain, IDC_EDIT_TIMER_RETRANS, "");
SetDlgItemTextA(app->hWndMain, IDC_EDIT_TIMER_ACK_RESP, "");
SetDlgItemTextA(app->hWndMain, IDC_EDIT_WAITACK_SUSP, "");
SetDlgItemTextA(app->hWndMain, IDC_EDIT_WAITACK_CB, "");
SetDlgItemTextA(app->hWndMain, IDC_EDIT_WAITACK_TIMER, "");
SetDlgItemTextA(app->hWndMain, IDC_EDIT_ID_NEXT_TX, "");
SetDlgItemTextA(app->hWndMain, IDC_EDIT_ID_LAST_RX, "");
SetDlgItemTextA(app->hWndMain, IDC_EDIT_ID_LAST_DEL, "");

10
tools/etcpmon/etcpmon_gui.h

@ -97,6 +97,11 @@ extern "C" {
#define IDC_EDIT_TIMER_RETRANS 631
#define IDC_EDIT_TIMER_ACK_RESP 632
/* WaitAck queue state IDs */
#define IDC_EDIT_WAITACK_SUSP 650
#define IDC_EDIT_WAITACK_CB 651
#define IDC_EDIT_WAITACK_TIMER 652
/* ID Metrics control IDs */
#define IDC_STATIC_IDS 640
#define IDC_EDIT_ID_NEXT_TX 641
@ -205,6 +210,11 @@ struct etcpmon_app {
HWND hEditTimerRetrans;
HWND hEditTimerAckResp;
/* WaitAck queue state */
HWND hEditWaitAckSuspend;
HWND hEditWaitAckCb;
HWND hEditWaitAckTimer;
/* ID metrics */
HWND hEditIdNextTx;
HWND hEditIdLastRx;

7
tools/etcpmon/etcpmon_protocol.h

@ -129,7 +129,12 @@ struct etcpmon_etcp_metrics {
/* Timer flags (1 = active, 0 = NULL) */
uint8_t retrans_timer_active;
uint8_t ack_resp_timer_active;
/* input_wait_ack queue state */
uint8_t wait_ack_cb_suspended;
uint8_t wait_ack_cb_set;
uint8_t wait_ack_resume_timeout;
/* Connection IDs */
uint32_t next_tx_id;
uint32_t last_rx_id;

Loading…
Cancel
Save