1
This commit is contained in:
1 parent
4903ac9e64
commit
14a9fffa87
2 files changed
+20
-10
No files matched your search
@@ -723,8 +723,8 @@ static void link_stats_timer_cb(void* arg) {
|
|||||||
link->stat_win[link->win_ptr].pkt_loss = (uint16_t)link->window_retransmissions;
|
link->stat_win[link->win_ptr].pkt_loss = (uint16_t)link->window_retransmissions;
|
||||||
link->stat_win[link->win_ptr].pkt_transmitted = link->window_pkt_transmitted;
|
link->stat_win[link->win_ptr].pkt_transmitted = link->window_pkt_transmitted;
|
||||||
|
|
||||||
DEBUG_DEBUG(DEBUG_CATEGORY_ETCP, "[%s] stats window updated (win_timebase=%u us, rtt=%u, retrans=%u, transmitted=%u)",
|
// DEBUG_DEBUG(DEBUG_CATEGORY_ETCP, "[%s] stats window updated (win_timebase=%u us, rtt=%u, retrans=%u, transmitted=%u)",
|
||||||
link->etcp->log_name, link->win_timebase, link->rtt_avg10, link->window_retransmissions, link->window_pkt_transmitted);
|
// link->etcp->log_name, link->win_timebase, link->rtt_avg10, link->window_retransmissions, link->window_pkt_transmitted);
|
||||||
|
|
||||||
// 2. Переходим к следующему слоту
|
// 2. Переходим к следующему слоту
|
||||||
link->win_ptr = (link->win_ptr + 1) % 32;
|
link->win_ptr = (link->win_ptr + 1) % 32;
|
||||||
|
|||||||
+18
-8
@@ -27,6 +27,8 @@ typedef struct {
|
|||||||
socket_t listen_sock;
|
socket_t listen_sock;
|
||||||
void* listen_id;
|
void* listen_id;
|
||||||
struct sockaddr_in target_addr;
|
struct sockaddr_in target_addr;
|
||||||
|
char listen_ip[64];
|
||||||
|
int listen_port;
|
||||||
int loss_forward;
|
int loss_forward;
|
||||||
int loss_back;
|
int loss_back;
|
||||||
int delay_min_fwd;
|
int delay_min_fwd;
|
||||||
@@ -146,9 +148,9 @@ static void backend_read_cb(socket_t sock, void* arg) {
|
|||||||
|
|
||||||
static void print_usage(const char* prog) {
|
static void print_usage(const char* prog) {
|
||||||
printf("UDP Proxy - network loss/delay emulator\n\n");
|
printf("UDP Proxy - network loss/delay emulator\n\n");
|
||||||
printf("Usage: %s --listen PORT --target IP:PORT [options]\n\n", prog);
|
printf("Usage: %s --listen [IP:]PORT --target IP:PORT [options]\n\n", prog);
|
||||||
printf("Required:\n");
|
printf("Required:\n");
|
||||||
printf(" --listen PORT Listen UDP port\n");
|
printf(" --listen [IP:]PORT Listen IP:port (default 0.0.0.0)\n");
|
||||||
printf(" --target IP:PORT Destination IP:port\n\n");
|
printf(" --target IP:PORT Destination IP:port\n\n");
|
||||||
printf("Options:\n");
|
printf("Options:\n");
|
||||||
printf(" --loss-forward N Forward loss %% (0-100, default 0)\n");
|
printf(" --loss-forward N Forward loss %% (0-100, default 0)\n");
|
||||||
@@ -156,7 +158,7 @@ static void print_usage(const char* prog) {
|
|||||||
printf(" --delay-forward A:B Forward delay ms range (default 0:0)\n");
|
printf(" --delay-forward A:B Forward delay ms range (default 0:0)\n");
|
||||||
printf(" --delay-back A:B Backward delay ms range (default 0:0)\n");
|
printf(" --delay-back A:B Backward delay ms range (default 0:0)\n");
|
||||||
printf(" --help Show this help\n\n");
|
printf(" --help Show this help\n\n");
|
||||||
printf("Example: %s --listen 12345 --target 8.8.8.8:53 --loss-forward 5 --delay-forward 10:50\n", prog);
|
printf("Example: %s --listen 0.0.0.0:12345 --target 8.8.8.8:53 --loss-forward 5 --delay-forward 10:50\n", prog);
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -180,16 +182,24 @@ int main(int argc, char* argv[]) {
|
|||||||
for (int i = 1; i < argc; i++) {
|
for (int i = 1; i < argc; i++) {
|
||||||
if (strcmp(argv[i], "--help") == 0) print_usage(argv[0]);
|
if (strcmp(argv[i], "--help") == 0) print_usage(argv[0]);
|
||||||
if (strcmp(argv[i], "--listen") == 0 && i+1 < argc) {
|
if (strcmp(argv[i], "--listen") == 0 && i+1 < argc) {
|
||||||
int p = atoi(argv[++i]);
|
char ip[64] = "0.0.0.0"; int p = 0;
|
||||||
|
const char* val = argv[++i];
|
||||||
|
if (strchr(val, ':')) {
|
||||||
|
sscanf(val, "%63[^:]:%d", ip, &p);
|
||||||
|
} else {
|
||||||
|
p = atoi(val);
|
||||||
|
}
|
||||||
struct sockaddr_in addr = {0};
|
struct sockaddr_in addr = {0};
|
||||||
addr.sin_family = AF_INET;
|
addr.sin_family = AF_INET;
|
||||||
addr.sin_port = htons(p);
|
addr.sin_port = htons(p);
|
||||||
addr.sin_addr.s_addr = INADDR_ANY;
|
inet_aton(ip, &addr.sin_addr);
|
||||||
|
strncpy(ctx.listen_ip, ip, sizeof(ctx.listen_ip)-1);
|
||||||
|
ctx.listen_port = p;
|
||||||
ctx.listen_sock = socket_create_udp(AF_INET);
|
ctx.listen_sock = socket_create_udp(AF_INET);
|
||||||
socket_set_nonblocking(ctx.listen_sock);
|
socket_set_nonblocking(ctx.listen_sock);
|
||||||
socket_set_reuseaddr(ctx.listen_sock, 1);
|
socket_set_reuseaddr(ctx.listen_sock, 1);
|
||||||
if (bind((int)ctx.listen_sock, (struct sockaddr*)&addr, sizeof(addr)) < 0) {
|
if (bind((int)ctx.listen_sock, (struct sockaddr*)&addr, sizeof(addr)) < 0) {
|
||||||
DEBUG_ERROR(DEBUG_CATEGORY_SOCKET, "bind failed");
|
DEBUG_ERROR(DEBUG_CATEGORY_SOCKET, "bind listen failed on %s:%d", ip, p);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
ctx.listen_id = uasync_add_socket_t(ctx.ua, ctx.listen_sock, client_read_cb, NULL, NULL, &ctx);
|
ctx.listen_id = uasync_add_socket_t(ctx.ua, ctx.listen_sock, client_read_cb, NULL, NULL, &ctx);
|
||||||
@@ -218,8 +228,8 @@ int main(int argc, char* argv[]) {
|
|||||||
print_usage(argv[0]);
|
print_usage(argv[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("UDP Proxy: listen :%d → %s:%d | loss %d%%/%d%% | delay %d-%d/%d-%d ms\n",
|
printf("UDP Proxy: listen %s:%d → %s:%d | loss %d%%/%d%% | delay %d-%d/%d-%d ms\n",
|
||||||
ntohs(((struct sockaddr_in){0}).sin_port), // fix later
|
ctx.listen_ip, ctx.listen_port,
|
||||||
inet_ntoa(ctx.target_addr.sin_addr), ntohs(ctx.target_addr.sin_port),
|
inet_ntoa(ctx.target_addr.sin_addr), ntohs(ctx.target_addr.sin_port),
|
||||||
ctx.loss_forward, ctx.loss_back,
|
ctx.loss_forward, ctx.loss_back,
|
||||||
ctx.delay_min_fwd, ctx.delay_max_fwd, ctx.delay_min_back, ctx.delay_max_back);
|
ctx.delay_min_fwd, ctx.delay_max_fwd, ctx.delay_min_back, ctx.delay_max_back);
|
||||||
|
|||||||
Reference in new issue
Block a user