BSC Call Control: Actually implement call statistics

The existing call realated statistics counters apparently were
never used.  This introduces a new set of counters, two for the
MO and MT case.
diff --git a/openbsc/include/openbsc/gsm_data.h b/openbsc/include/openbsc/gsm_data.h
index b5f17ac..b9ec94c 100644
--- a/openbsc/include/openbsc/gsm_data.h
+++ b/openbsc/include/openbsc/gsm_data.h
@@ -637,9 +637,10 @@
 		struct counter *rp_err_other;
 	} sms;
 	struct {
-		struct counter *dialled;	/* total number of dialled calls */
-		struct counter *alerted;	/* we alerted the other end */
-		struct counter *connected;/* how many calls were accepted */
+		struct counter *mo_setup;
+		struct counter *mo_connect_ack;
+		struct counter *mt_setup;
+		struct counter *mt_connect;
 	} call;
 	struct {
 		struct counter *rf_fail;
diff --git a/openbsc/src/gsm_04_08.c b/openbsc/src/gsm_04_08.c
index 02854b6..42dd1b7 100644
--- a/openbsc/src/gsm_04_08.c
+++ b/openbsc/src/gsm_04_08.c
@@ -1759,6 +1759,8 @@
 	     subscr_name(trans->subscr), trans->subscr->extension,
 	     setup.called.number);
 
+	counter_inc(trans->subscr->net->stats.call.mo_setup);
+
 	/* indicate setup to MNCC */
 	mncc_recvmsg(trans->subscr->net, trans, MNCC_SETUP_IND, &setup);
 
@@ -1834,6 +1836,8 @@
 	
 	new_cc_state(trans, GSM_CSTATE_CALL_PRESENT);
 
+	counter_inc(trans->subscr->net->stats.call.mt_setup);
+
 	return gsm48_conn_sendmsg(msg, trans->conn, trans);
 }
 
@@ -2053,6 +2057,7 @@
 	}
 
 	new_cc_state(trans, GSM_CSTATE_CONNECT_REQUEST);
+	counter_inc(trans->subscr->net->stats.call.mt_connect);
 
 	return mncc_recvmsg(trans->subscr->net, trans, MNCC_SETUP_CNF, &connect);
 }
@@ -2065,9 +2070,11 @@
 	gsm48_stop_cc_timer(trans);
 
 	new_cc_state(trans, GSM_CSTATE_ACTIVE);
+	counter_inc(trans->subscr->net->stats.call.mo_connect_ack);
 	
 	memset(&connect_ack, 0, sizeof(struct gsm_mncc));
 	connect_ack.callref = trans->callref;
+
 	return mncc_recvmsg(trans->subscr->net, trans, MNCC_SETUP_COMPL_IND,
 			    &connect_ack);
 }
diff --git a/openbsc/src/gsm_data.c b/openbsc/src/gsm_data.c
index 1d07cbf..f692048 100644
--- a/openbsc/src/gsm_data.c
+++ b/openbsc/src/gsm_data.c
@@ -305,9 +305,10 @@
 	net->stats.sms.delivered = counter_alloc("net.sms.delivered");
 	net->stats.sms.rp_err_mem = counter_alloc("net.sms.rp_err_mem");
 	net->stats.sms.rp_err_other = counter_alloc("net.sms.rp_err_other");
-	net->stats.call.dialled = counter_alloc("net.call.dialled");
-	net->stats.call.alerted = counter_alloc("net.call.alerted");
-	net->stats.call.connected = counter_alloc("net.call.connected");
+	net->stats.call.mo_setup = counter_alloc("net.call.mo_setup");
+	net->stats.call.mo_connect_ack = counter_alloc("net.call.mo_connect_ack");
+	net->stats.call.mt_setup = counter_alloc("net.call.mt_setup");
+	net->stats.call.mt_connect = counter_alloc("net.call.mt_connect");
 	net->stats.chan.rf_fail = counter_alloc("net.chan.rf_fail");
 	net->stats.chan.rll_err = counter_alloc("net.chan.rll_err");
 	net->stats.bts.oml_fail = counter_alloc("net.bts.oml_fail");
diff --git a/openbsc/src/vty_interface_layer3.c b/openbsc/src/vty_interface_layer3.c
index 0697c7d..cc6bd94 100644
--- a/openbsc/src/vty_interface_layer3.c
+++ b/openbsc/src/vty_interface_layer3.c
@@ -589,10 +589,12 @@
 		counter_get(net->stats.sms.delivered),
 		counter_get(net->stats.sms.rp_err_mem),
 		counter_get(net->stats.sms.rp_err_other), VTY_NEWLINE);
-	vty_out(vty, "Calls                   : %lu dialled, %lu alerted, %lu connected%s",
-		counter_get(net->stats.call.dialled),
-		counter_get(net->stats.call.alerted),
-		counter_get(net->stats.call.connected), VTY_NEWLINE);
+	vty_out(vty, "MO Calls                : %lu setup, %lu connect ack%s",
+		counter_get(net->stats.call.mo_setup),
+		counter_get(net->stats.call.mo_connect_ack), VTY_NEWLINE);
+	vty_out(vty, "MT Calls                : %lu setup, %lu connect%s",
+		counter_get(net->stats.call.mt_setup),
+		counter_get(net->stats.call.mt_connect), VTY_NEWLINE);
 	return CMD_SUCCESS;
 }