diff options
author | Holger Hans Peter Freyther <zecke@selfish.org> | 2011-01-22 15:52:07 +0100 |
---|---|---|
committer | Holger Hans Peter Freyther <zecke@selfish.org> | 2011-01-22 16:22:18 +0100 |
commit | 4c1eb0ee43259bae710b5685ed666210be9712f9 (patch) | |
tree | 301658340558a040a479164144d1a74a0f6005d9 /src | |
parent | c5d897e8474e99f2b42202b8ec323484225796ec (diff) |
stats: Count packets on a per link level
Diffstat (limited to 'src')
-rw-r--r-- | src/mtp_layer3.c | 7 | ||||
-rw-r--r-- | src/mtp_link.c | 14 | ||||
-rw-r--r-- | src/sctp_m2ua.c | 11 |
3 files changed, 27 insertions, 5 deletions
diff --git a/src/mtp_layer3.c b/src/mtp_layer3.c index 6dee90f..4cbf999 100644 --- a/src/mtp_layer3.c +++ b/src/mtp_layer3.c @@ -39,6 +39,7 @@ static int mtp_int_submit(struct mtp_link_set *link, int pc, int sls, int type, void mtp_link_set_submit(struct mtp_link *link, struct msgb *msg) { + rate_ctr_inc(&link->ctrg->ctr[MTP_LNK_OUT]); rate_ctr_inc(&link->set->ctrg->ctr[MTP_LSET_TOTA_OUT_MSG]); link->write(link, msg); } @@ -585,12 +586,14 @@ void mtp_link_set_init_slc(struct mtp_link_set *set) } } -void mtp_link_set_add_link(struct mtp_link_set *set, struct mtp_link *lnk) +int mtp_link_set_add_link(struct mtp_link_set *set, struct mtp_link *lnk) { lnk->set = set; lnk->link_no = set->nr_links++; - mtp_link_init(lnk); + if (mtp_link_init(lnk) != 0) + return -1; llist_add_tail(&lnk->entry, &set->links); mtp_link_set_init_slc(set); + return 0; } diff --git a/src/mtp_link.c b/src/mtp_link.c index 5e5f418..d885738 100644 --- a/src/mtp_link.c +++ b/src/mtp_link.c @@ -22,6 +22,7 @@ #include <mtp_data.h> #include <mtp_level3.h> #include <cellmgr_debug.h> +#include <counter.h> #include <string.h> @@ -71,6 +72,8 @@ static void mtp_sltm_t1_timeout(void *_link) { struct mtp_link *link = (struct mtp_link *) _link; + rate_ctr_inc(&link->ctrg->ctr[MTP_LNK_SLTM_TOUT]); + if (link->slta_misses == 0) { LOGP(DINP, LOGL_ERROR, "No SLTM response. Retrying. Link: %p\n", link); ++link->slta_misses; @@ -103,12 +106,20 @@ static void mtp_sltm_t2_timeout(void *_link) bsc_schedule_timer(&link->t2_timer, MTP_T2); } -void mtp_link_init(struct mtp_link *link) +int mtp_link_init(struct mtp_link *link) { + link->ctrg = rate_ctr_group_alloc(link, + mtp_link_rate_ctr_desc(), link->link_no); + if (!link->ctrg) { + LOGP(DINP, LOGL_ERROR, "Failed to allocate rate_ctr.\n"); + return -1; + } + link->t1_timer.data = link; link->t1_timer.cb = mtp_sltm_t1_timeout; link->t2_timer.data = link; link->t2_timer.cb = mtp_sltm_t2_timeout; + return 0; } void mtp_link_stop_link_test(struct mtp_link *link) @@ -153,5 +164,6 @@ int mtp_link_slta(struct mtp_link *link, uint16_t l3_len, void mtp_link_failure(struct mtp_link *link) { LOGP(DINP, LOGL_ERROR, "Link has failed. Resetting it: 0x%p\n", link); + rate_ctr_inc(&link->ctrg->ctr[MTP_LNK_ERROR]); link->reset(link); } diff --git a/src/sctp_m2ua.c b/src/sctp_m2ua.c index a4743fa..d3a64c9 100644 --- a/src/sctp_m2ua.c +++ b/src/sctp_m2ua.c @@ -18,6 +18,7 @@ #include <sctp_m2ua.h> #include <bsc_data.h> #include <cellmgr_debug.h> +#include <counter.h> #include <mtp_data.h> #include <mtp_pcap.h> @@ -31,6 +32,12 @@ extern struct bsc_data bsc; +static void link_down(struct mtp_link *link) +{ + rate_ctr_inc(&link->ctrg->ctr[MTP_LNK_ERROR]); + mtp_link_down(link); +} + static void m2ua_conn_destroy(struct sctp_m2ua_conn *conn) { close(conn->queue.bfd.fd); @@ -39,7 +46,7 @@ static void m2ua_conn_destroy(struct sctp_m2ua_conn *conn) llist_del(&conn->entry); if (conn->asp_up && conn->asp_active && conn->established) - mtp_link_down(&conn->trans->base); + link_down(&conn->trans->base); talloc_free(conn); #warning "Notify any other AS(P) for failover scenario" @@ -286,7 +293,7 @@ static int m2ua_handle_rel_req(struct sctp_m2ua_conn *conn, conn->established = 0; LOGP(DINP, LOGL_NOTICE, "M2UA/Link is released.\n"); - mtp_link_down(&conn->trans->base); + link_down(&conn->trans->base); m2ua_msg_free(conf); return 0; } |