diff options
Diffstat (limited to 'src/protocol')
| -rw-r--r-- | src/protocol/pair1/pair.c | 141 | ||||
| -rw-r--r-- | src/protocol/pair1/pair1_poly.c | 121 |
2 files changed, 177 insertions, 85 deletions
diff --git a/src/protocol/pair1/pair.c b/src/protocol/pair1/pair.c index 0492119a..cc726306 100644 --- a/src/protocol/pair1/pair.c +++ b/src/protocol/pair1/pair.c @@ -15,7 +15,11 @@ // Pair protocol. The PAIRv1 protocol is a simple 1:1 messaging pattern. -#define BUMP_STAT(x) nni_stat_inc_atomic(x, 1) +#ifdef NNG_ENABLE_STATS +#define BUMP_STAT(x) nni_stat_inc(x, 1) +#else +#define BUMP_STAT(x) +#endif typedef struct pair1_pipe pair1_pipe; typedef struct pair1_sock pair1_sock; @@ -37,14 +41,16 @@ struct pair1_sock { nni_id_map pipes; nni_list plist; bool started; - nni_stat_item stat_poly; - nni_stat_item stat_raw; - nni_stat_item stat_reject_mismatch; - nni_stat_item stat_reject_already; - nni_stat_item stat_ttl_drop; - nni_stat_item stat_rx_malformed; - nni_stat_item stat_tx_malformed; - nni_stat_item stat_tx_drop; +#ifdef NNG_ENABLE_STATS + nni_stat_item stat_poly; + nni_stat_item stat_raw; + nni_stat_item stat_reject_mismatch; + nni_stat_item stat_reject_already; + nni_stat_item stat_ttl_drop; + nni_stat_item stat_rx_malformed; + nni_stat_item stat_tx_malformed; + nni_stat_item stat_tx_drop; +#endif #ifdef NNG_TEST_LIB bool inject_header; #endif @@ -70,6 +76,16 @@ pair1_sock_fini(void *arg) nni_mtx_fini(&s->mtx); } +#ifdef NNG_ENABLE_STATS +static void +pair1_add_sock_stat( + pair1_sock *s, nni_stat_item *item, const nni_stat_info *info) +{ + nni_stat_init(item, info); + nni_sock_add_stat(s->sock, item); +} +#endif + static int pair1_sock_init_impl(void *arg, nni_sock *sock, bool raw) { @@ -80,50 +96,81 @@ pair1_sock_init_impl(void *arg, nni_sock *sock, bool raw) // Raw mode uses this. nni_mtx_init(&s->mtx); + s->sock = sock; - nni_stat_init_bool( - &s->stat_poly, "polyamorous", "polyamorous mode?", false); - nni_sock_add_stat(sock, &s->stat_poly); - - nni_stat_init_bool(&s->stat_raw, "raw", "raw mode?", raw); - nni_sock_add_stat(sock, &s->stat_raw); - - nni_stat_init_atomic(&s->stat_reject_mismatch, "mismatch", - "pipes rejected (protocol mismatch)"); - nni_sock_add_stat(sock, &s->stat_reject_mismatch); - - nni_stat_init_atomic(&s->stat_reject_already, "already", - "pipes rejected (already connected)"); - nni_sock_add_stat(sock, &s->stat_reject_already); - - nni_stat_init_atomic(&s->stat_ttl_drop, "ttl_drop", - "messages dropped due to too many hops"); - nni_stat_set_unit(&s->stat_ttl_drop, NNG_UNIT_MESSAGES); - nni_sock_add_stat(sock, &s->stat_ttl_drop); - - // This can only increment in polyamorous mode. - nni_stat_init_atomic( - &s->stat_tx_drop, "tx_drop", "messages dropped undeliverable"); - nni_stat_set_unit(&s->stat_tx_drop, NNG_UNIT_MESSAGES); - nni_sock_add_stat(sock, &s->stat_tx_drop); - - nni_stat_init_atomic(&s->stat_rx_malformed, "rx_malformed", - "malformed messages received"); - nni_stat_set_unit(&s->stat_rx_malformed, NNG_UNIT_MESSAGES); - nni_sock_add_stat(sock, &s->stat_rx_malformed); +#ifdef NNG_ENABLE_STATS + static const nni_stat_info poly_info = { + .si_name = "poly", + .si_desc = "polyamorous mode?", + .si_type = NNG_STAT_BOOLEAN, + }; + static const nni_stat_info raw_info = { + .si_name = "raw", + .si_desc = "raw mode?", + .si_type = NNG_STAT_BOOLEAN, + }; + static const nni_stat_info mismatch_info = { + .si_name = "mismatch", + .si_desc = "pipes rejected (protocol mismatch)", + .si_type = NNG_STAT_COUNTER, + .si_atomic = true, + }; + static const nni_stat_info already_info = { + .si_name = "already", + .si_desc = "pipes rejected (already connected)", + .si_type = NNG_STAT_COUNTER, + .si_atomic = true, + }; + static const nni_stat_info ttl_drop_info = { + .si_name = "ttl_drop", + .si_desc = "messages dropped due to too many hops", + .si_type = NNG_STAT_COUNTER, + .si_unit = NNG_UNIT_MESSAGES, + .si_atomic = true, + }; + static const nni_stat_info tx_drop_info = { + .si_name = "tx_drop", + .si_desc = "messages dropped undeliverable", + .si_type = NNG_STAT_COUNTER, + .si_unit = NNG_UNIT_MESSAGES, + .si_atomic = true, + }; + static const nni_stat_info rx_malformed_info = { + .si_name = "rx_malformed", + .si_desc = "malformed messages received", + .si_type = NNG_STAT_COUNTER, + .si_unit = NNG_UNIT_MESSAGES, + .si_atomic = true, + }; + static const nni_stat_info tx_malformed_info = { + .si_name = "tx_malformed", + .si_desc = "malformed messages not sent", + .si_type = NNG_STAT_COUNTER, + .si_unit = NNG_UNIT_MESSAGES, + .si_atomic = true, + }; + + pair1_add_sock_stat(s, &s->stat_poly, &poly_info); + pair1_add_sock_stat(s, &s->stat_raw, &raw_info); + pair1_add_sock_stat(s, &s->stat_reject_mismatch, &mismatch_info); + pair1_add_sock_stat(s, &s->stat_reject_already, &already_info); + pair1_add_sock_stat(s, &s->stat_ttl_drop, &ttl_drop_info); + pair1_add_sock_stat(s, &s->stat_tx_drop, &tx_drop_info); + pair1_add_sock_stat(s, &s->stat_rx_malformed, &rx_malformed_info); - nni_stat_init_atomic(&s->stat_tx_malformed, "tx_malformed", - "malformed messages not sent"); - nni_stat_set_unit(&s->stat_tx_malformed, NNG_UNIT_MESSAGES); if (raw) { // This stat only makes sense in raw mode. - nni_sock_add_stat(sock, &s->stat_tx_malformed); + pair1_add_sock_stat( + s, &s->stat_tx_malformed, &tx_malformed_info); } - s->sock = sock; - s->raw = raw; - s->uwq = nni_sock_sendq(sock); - s->urq = nni_sock_recvq(sock); + nni_stat_set_bool(&s->stat_raw, raw); + nni_stat_set_bool(&s->stat_poly, false); +#endif + + s->raw = raw; + s->uwq = nni_sock_sendq(sock); + s->urq = nni_sock_recvq(sock); nni_atomic_init(&s->ttl); nni_atomic_set(&s->ttl, 8); diff --git a/src/protocol/pair1/pair1_poly.c b/src/protocol/pair1/pair1_poly.c index fc1bbf6a..6c16745c 100644 --- a/src/protocol/pair1/pair1_poly.c +++ b/src/protocol/pair1/pair1_poly.c @@ -21,7 +21,11 @@ // THIS FEATURE IS DEPRECATED. We discourage use in new applications. -#define BUMP_STAT(x) nni_stat_inc_atomic(x, 1) +#ifdef NNG_ENABLE_STATS +#define BUMP_STAT(x) nni_stat_inc(x, 1) +#else +#define BUMP_STAT(x) +#endif typedef struct pair1poly_pipe pair1poly_pipe; typedef struct pair1poly_sock pair1poly_sock; @@ -76,6 +80,16 @@ pair1poly_sock_fini(void *arg) nni_mtx_fini(&s->mtx); } +#ifdef NNG_ENABLE_STATS +static void +pair1_add_sock_stat( + pair1poly_sock *s, nni_stat_item *item, const nni_stat_info *info) +{ + nni_stat_init(item, info); + nni_sock_add_stat(s->sock, item); +} +#endif + static int pair1poly_sock_init(void *arg, nni_sock *sock) { @@ -83,49 +97,80 @@ pair1poly_sock_init(void *arg, nni_sock *sock) nni_id_map_init(&s->pipes, 0, 0, false); NNI_LIST_INIT(&s->plist, pair1poly_pipe, node); + s->sock = sock; // Raw mode uses this. nni_mtx_init(&s->mtx); nni_aio_init(&s->aio_get, pair1poly_sock_get_cb, s); - nni_stat_init_bool( - &s->stat_poly, "polyamorous", "polyamorous mode?", true); - nni_sock_add_stat(sock, &s->stat_poly); - - nni_stat_init_bool(&s->stat_raw, "raw", "raw mode?", false); - - nni_stat_init_atomic(&s->stat_reject_mismatch, "mismatch", - "pipes rejected (protocol mismatch)"); - nni_sock_add_stat(sock, &s->stat_reject_mismatch); - - nni_stat_init_atomic(&s->stat_reject_already, "already", - "pipes rejected (already connected)"); - nni_sock_add_stat(sock, &s->stat_reject_already); - - nni_stat_init_atomic(&s->stat_ttl_drop, "ttl_drop", - "messages dropped due to too many hops"); - nni_stat_set_unit(&s->stat_ttl_drop, NNG_UNIT_MESSAGES); - nni_sock_add_stat(sock, &s->stat_ttl_drop); - - // This can only increment in polyamorous mode. - nni_stat_init_atomic( - &s->stat_tx_drop, "tx_drop", "messages dropped undeliverable"); - nni_stat_set_unit(&s->stat_tx_drop, NNG_UNIT_MESSAGES); - nni_sock_add_stat(sock, &s->stat_tx_drop); - - nni_stat_init_atomic(&s->stat_rx_malformed, "rx_malformed", - "malformed messages received"); - nni_stat_set_unit(&s->stat_rx_malformed, NNG_UNIT_MESSAGES); - nni_sock_add_stat(sock, &s->stat_rx_malformed); - - nni_stat_init_atomic(&s->stat_tx_malformed, "tx_malformed", - "malformed messages not sent"); - nni_stat_set_unit(&s->stat_tx_malformed, NNG_UNIT_MESSAGES); - - s->sock = sock; - s->uwq = nni_sock_sendq(sock); - s->urq = nni_sock_recvq(sock); +#ifdef NNG_ENABLE_STATS + static const nni_stat_info poly_info = { + .si_name = "poly", + .si_desc = "polyamorous mode?", + .si_type = NNG_STAT_BOOLEAN, + }; + static const nni_stat_info raw_info = { + .si_name = "raw", + .si_desc = "raw mode?", + .si_type = NNG_STAT_BOOLEAN, + }; + static const nni_stat_info mismatch_info = { + .si_name = "mismatch", + .si_desc = "pipes rejected (protocol mismatch)", + .si_type = NNG_STAT_COUNTER, + .si_atomic = true, + }; + static const nni_stat_info already_info = { + .si_name = "already", + .si_desc = "pipes rejected (already connected)", + .si_type = NNG_STAT_COUNTER, + .si_atomic = true, + }; + static const nni_stat_info ttl_drop_info = { + .si_name = "ttl_drop", + .si_desc = "messages dropped due to too many hops", + .si_type = NNG_STAT_COUNTER, + .si_unit = NNG_UNIT_MESSAGES, + .si_atomic = true, + }; + static const nni_stat_info tx_drop_info = { + .si_name = "tx_drop", + .si_desc = "messages dropped undeliverable", + .si_type = NNG_STAT_COUNTER, + .si_unit = NNG_UNIT_MESSAGES, + .si_atomic = true, + }; + static const nni_stat_info rx_malformed_info = { + .si_name = "rx_malformed", + .si_desc = "malformed messages received", + .si_type = NNG_STAT_COUNTER, + .si_unit = NNG_UNIT_MESSAGES, + .si_atomic = true, + }; + static const nni_stat_info tx_malformed_info = { + .si_name = "tx_malformed", + .si_desc = "malformed messages not sent", + .si_type = NNG_STAT_COUNTER, + .si_unit = NNG_UNIT_MESSAGES, + .si_atomic = true, + }; + + pair1_add_sock_stat(s, &s->stat_poly, &poly_info); + pair1_add_sock_stat(s, &s->stat_raw, &raw_info); + pair1_add_sock_stat(s, &s->stat_reject_mismatch, &mismatch_info); + pair1_add_sock_stat(s, &s->stat_reject_already, &already_info); + pair1_add_sock_stat(s, &s->stat_ttl_drop, &ttl_drop_info); + pair1_add_sock_stat(s, &s->stat_tx_drop, &tx_drop_info); + pair1_add_sock_stat(s, &s->stat_rx_malformed, &rx_malformed_info); + pair1_add_sock_stat(s, &s->stat_tx_malformed, &tx_malformed_info); + + nni_stat_set_bool(&s->stat_raw, false); + nni_stat_set_bool(&s->stat_poly, true); +#endif + + s->uwq = nni_sock_sendq(sock); + s->urq = nni_sock_recvq(sock); nni_atomic_init(&s->ttl); nni_atomic_set(&s->ttl, 8); |
