Skip to content

Commit

Permalink
Count packets received when there was no ICE ping
Browse files Browse the repository at this point in the history
  • Loading branch information
richard-signal authored Feb 27, 2024
1 parent 40043d1 commit ed86f80
Show file tree
Hide file tree
Showing 5 changed files with 50 additions and 21 deletions.
11 changes: 7 additions & 4 deletions src/apps/relay/ns_ioalib_engine_impl.c
Original file line number Diff line number Diff line change
Expand Up @@ -3631,25 +3631,28 @@ void turn_report_allocation_delete(void *a, SOCKET_TYPE socket_type, int family)
}
#endif
{
// Signal change to add metrics
if (ss->realm_options.name[0]) {

// Set prometheus traffic metrics
prom_set_finished_traffic(ss->realm_options.name, (const char *)ss->username,
(unsigned long)(ss->t_received_packets), (unsigned long)(ss->t_received_bytes),
(unsigned long)(ss->t_sent_packets), (unsigned long)(ss->t_sent_bytes), false);
(unsigned long)(ss->t_sent_packets), (unsigned long)(ss->t_sent_bytes),
(unsigned long)ss->t_before_ping_packets, false);
prom_set_finished_traffic(
ss->realm_options.name, (const char *)ss->username, (unsigned long)(ss->t_peer_received_packets),
(unsigned long)(ss->t_peer_received_bytes), (unsigned long)(ss->t_peer_sent_packets),
(unsigned long)(ss->t_peer_sent_bytes), true);
(unsigned long)(ss->t_peer_sent_bytes), 0, true);
} else {
// Set prometheus traffic metrics
prom_set_finished_traffic(NULL, (const char *)ss->username, (unsigned long)(ss->t_received_packets),
(unsigned long)(ss->t_received_bytes), (unsigned long)(ss->t_sent_packets),
(unsigned long)(ss->t_sent_bytes), false);
(unsigned long)(ss->t_sent_bytes), (unsigned long)ss->t_before_ping_packets,
false);
prom_set_finished_traffic(NULL, (const char *)ss->username, (unsigned long)(ss->t_peer_received_packets),
(unsigned long)(ss->t_peer_received_bytes),
(unsigned long)(ss->t_peer_sent_packets), (unsigned long)(ss->t_peer_sent_bytes),
true);
0, true);
}
turn_time_t ct = get_turn_server_time(server) - ss->start_time;
const uint32_t byte_to_kilobit = 125;
Expand Down
20 changes: 15 additions & 5 deletions src/apps/relay/prom_server.c
Original file line number Diff line number Diff line change
Expand Up @@ -37,10 +37,11 @@ prom_counter_t *turn_total_sessions;

prom_gauge_t *turn_total_allocations;

// Signal change to add rtt metrics
// Signal change to add metrics
prom_counter_t *turn_rtt_client[8];
prom_counter_t *turn_rtt_peer[8];
prom_counter_t *turn_rtt_combined[8];
prom_counter_t *turn_with_no_ping_rcvp;

void start_prometheus_server(void) {
if (turn_params.prometheus == 0) {
Expand Down Expand Up @@ -115,7 +116,7 @@ void start_prometheus_server(void) {
turn_total_allocations = prom_collector_registry_must_register_metric(
prom_gauge_new("turn_total_allocations", "Represents current allocations number", 2, total_allocations_labels));

// Signal change to add rtt metrics
// Signal change to add metrics
// Create round trip time pseudo-histogram metrics
// values must be kept in sync with observation function below

Expand Down Expand Up @@ -170,6 +171,9 @@ void start_prometheus_server(void) {
turn_rtt_combined[7] = prom_collector_registry_must_register_metric(
prom_counter_new("turn_rtt_combined_more", "Represents combined round trip time of channel", 0, NULL));

turn_with_no_ping_rcvp = prom_collector_registry_must_register_metric(prom_counter_new(
"turn_with_no_ping_rcvp", "Count of packets received for TURN where no ICE ping has been observed", 0, NULL));

promhttp_set_active_collector_registry(NULL);

// some flags appeared first in microhttpd v0.9.53
Expand Down Expand Up @@ -205,8 +209,9 @@ void start_prometheus_server(void) {
return;
}

// Signal change to add metrics
void prom_set_finished_traffic(const char *realm, const char *user, unsigned long rsvp, unsigned long rsvb,
unsigned long sentp, unsigned long sentb, bool peer) {
unsigned long sentp, unsigned long sentb, unsigned long without_pingp, bool peer) {
if (turn_params.prometheus == 1) {

const char *label[] = {realm, NULL};
Expand Down Expand Up @@ -235,6 +240,10 @@ void prom_set_finished_traffic(const char *realm, const char *user, unsigned lon
prom_counter_add(turn_total_traffic_sentp, sentp, NULL);
prom_counter_add(turn_total_traffic_sentb, sentb, NULL);
}
// Signal change to add metrics
if (without_pingp) {
prom_counter_add(turn_with_no_ping_rcvp, without_pingp, NULL);
}
}
}

Expand Down Expand Up @@ -288,7 +297,7 @@ int is_ipv6_enabled(void) {
return ret;
}

// Signal change to add rtt metrics
// Signal change to add metrics
void prom_observe_rtt(prom_counter_t *counter[8], int microseconds) {
if (microseconds <= 25000) {
prom_counter_add(counter[0], 1, NULL);
Expand Down Expand Up @@ -340,13 +349,14 @@ void start_prometheus_server(void) {
}

void prom_set_finished_traffic(const char *realm, const char *user, unsigned long rsvp, unsigned long rsvb,
unsigned long sentp, unsigned long sentb, bool peer) {
unsigned long sentp, unsigned long sentb, unsigned long without_pingp, bool peer) {
UNUSED_ARG(realm);
UNUSED_ARG(user);
UNUSED_ARG(rsvp);
UNUSED_ARG(rsvb);
UNUSED_ARG(sentp);
UNUSED_ARG(sentb);
UNUSED_ARG(without_pingp);
UNUSED_ARG(peer);
}

Expand Down
11 changes: 7 additions & 4 deletions src/apps/relay/prom_server.h
Original file line number Diff line number Diff line change
Expand Up @@ -53,10 +53,11 @@ extern prom_counter_t *turn_total_traffic_peer_sentb;

extern prom_gauge_t *turn_total_allocations_number;

// Signal change to add rtt metrics
// Signal change to add metrics
extern prom_counter_t *turn_rtt_client[8];
extern prom_counter_t *turn_rtt_peer[8];
extern prom_counter_t *turn_rtt_combined[8];
extern prom_counter_t *turn_with_no_ping_rcvp;

#define TURN_ALLOC_STR_MAX_SIZE (20)

Expand All @@ -66,8 +67,9 @@ extern "C" {

void start_prometheus_server(void);

// Signal change to add metrics
void prom_set_finished_traffic(const char *realm, const char *user, unsigned long rsvp, unsigned long rsvb,
unsigned long sentp, unsigned long sentb, bool peer);
unsigned long sentp, unsigned long sentb, unsigned long without_pingp, bool peer);

void prom_inc_allocation(SOCKET_TYPE type, int addr_family);
void prom_dec_allocation(SOCKET_TYPE type, int addr_family, unsigned long duration, unsigned long sent_rate_kbps);
Expand All @@ -78,7 +80,7 @@ void prom_inc_stun_binding_request(void);
void prom_inc_stun_binding_response(void);
void prom_inc_stun_binding_error(void);

// Signal change to add rtt metrics
// Signal change to add metrics
void prom_observe_rtt(prom_counter_t *counter[8], int microseconds);
void prom_observe_rtt_client(int microseconds);
void prom_observe_rtt_peer(int microseconds);
Expand All @@ -88,8 +90,9 @@ void prom_observe_rtt_combined(int microseconds);

void start_prometheus_server(void);

// Signal change to add metrics
void prom_set_finished_traffic(const char *realm, const char *user, unsigned long rsvp, unsigned long rsvb,
unsigned long sentp, unsigned long sentb, bool peer);
unsigned long sentp, unsigned long sentb, unsigned long without_pingp, bool peer);

void prom_inc_allocation(SOCKET_TYPE type);
void prom_dec_allocation(SOCKET_TYPE type);
Expand Down
27 changes: 19 additions & 8 deletions src/server/ns_turn_server.c
Original file line number Diff line number Diff line change
Expand Up @@ -2881,13 +2881,13 @@ static int handle_turn_binding(turn_turnserver *server, ts_ur_super_session *ss,
return 0;
}

// Signal change to add rtt metrics
// Signal change to add metrics
/////////////// inspect relayed packets, they might be ICE binds ///////////////

static void inspect_binds(turn_turnserver *server, ioa_net_data *in_buffer, turn_permission_info *tinfo, int from_peer,
int is_channel) {
static int inspect_binds(turn_turnserver *server, ioa_net_data *in_buffer, turn_permission_info *tinfo, int from_peer,
int is_channel) {
if (!in_buffer || !tinfo || !(from_peer == 0 || from_peer == 1)) {
return;
return 0;
}
size_t len = ioa_network_buffer_get_size(in_buffer->nbh);
uint8_t *buf = ioa_network_buffer_data(in_buffer->nbh);
Expand All @@ -2911,7 +2911,7 @@ static void inspect_binds(turn_turnserver *server, ioa_net_data *in_buffer, turn
}

if (tinfo->pings[from_client].ts.tv_sec == 0) {
return;
return 0;
}

stun_tid tid;
Expand Down Expand Up @@ -2973,7 +2973,12 @@ static void inspect_binds(turn_turnserver *server, ioa_net_data *in_buffer, turn
tinfo->pings[from_client].ts.tv_sec = 0;
}
}
} else {
if (tinfo->pings[0].lastrttus == 0 && tinfo->pings[1].lastrttus == 0) {
return 1;
}
}
return 0;
}

static int handle_turn_send(turn_turnserver *server, ts_ur_super_session *ss, int *err_code, const uint8_t **reason,
Expand Down Expand Up @@ -3059,7 +3064,9 @@ static int handle_turn_send(turn_turnserver *server, ts_ur_super_session *ss, in
ioa_network_buffer_set_size(nbh, len);
}
// Signal change to add rtt metrics
inspect_binds(server, in_buffer, tinfo, 0, 0);
if (inspect_binds(server, in_buffer, tinfo, 0, 0)) {
++(ss->t_before_ping_packets);
}

ioa_network_buffer_header_init(nbh);
int skip = 0;
Expand Down Expand Up @@ -4122,7 +4129,9 @@ static int write_to_peerchannel(ts_ur_super_session *ss, uint16_t chnum, ioa_net
// Signal change to add rtt metrics
turn_turnserver *server = (turn_turnserver *)ss->server;
turn_permission_info *tinfo = (turn_permission_info *)(chn->owner);
inspect_binds(server, in_buffer, tinfo, 0, 1);
if (inspect_binds(server, in_buffer, tinfo, 0, 1)) {
++(ss->t_before_ping_packets);
}

ioa_network_buffer_header_init(nbh);

Expand Down Expand Up @@ -4818,7 +4827,9 @@ static void peer_input_handler(ioa_socket_handle s, int event_type, ioa_net_data
if (tinfo) {
chnum = get_turn_channel_number(tinfo, &(in_buffer->src_addr));
// Signal change to add rtt metrics
inspect_binds(server, in_buffer, tinfo, 1, chnum != 0);
if (inspect_binds(server, in_buffer, tinfo, 1, chnum != 0)) {
++(ss->t_before_ping_packets);
}
} else if (!(server->server_relay)) {
return;
}
Expand Down
2 changes: 2 additions & 0 deletions src/server/ns_turn_session.h
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,8 @@ struct _ts_ur_super_session {
char s_mobile_id[33];
/* Bandwidth */
band_limit_t bps;
// Signal change to add metrics
uint64_t t_before_ping_packets;
};

////// Session info for statistics //////
Expand Down

0 comments on commit ed86f80

Please sign in to comment.