Add rate_ctr support to store/retrieve SDR errors through VTY

Introduce a unified implementation-agnostic interface for radioDevice to
signal SDR error counters to upper layers and manage them.
This patch only implements counters for osmo-trx-lms (other devices will
show all counters unchanged during time).

Sample use through VTY:
"""
OsmoTRX> show rate-counters
osmo-trx statistics 0:
   device:rx_underruns:          0 (0/s 0/m 0/h 0/d) Number of Rx underruns
    device:rx_overruns:          0 (0/s 0/m 0/h 0/d) Number of Rx overruns
   device:tx_underruns:          0 (0/s 0/m 0/h 0/d) Number of Tx underruns
 device:rx_drop_events:          4 (0/s 2/m 3/h 0/d) Number of times Rx samples were dropped by HW
device:rx_drop_samples:        513 (0/s 196/m 425/h 0/d) Number of Rx samples dropped by HW
"""

Change-Id: I78b158141697e5714d04db8b9ccc96f31f34f439
diff --git a/CommonLibs/osmo_signal.h b/CommonLibs/osmo_signal.h
index 00b8097..7299171 100644
--- a/CommonLibs/osmo_signal.h
+++ b/CommonLibs/osmo_signal.h
@@ -27,9 +27,28 @@
 /* Signalling subsystems */
 enum signal_subsystems {
 	SS_TRANSC,
+	SS_DEVICE,
 };
 
 /* SS_TRANSC signals */
 enum SS_TRANSC {
 	S_TRANSC_STOP_REQUIRED, /* Transceiver fatal error, it should be stopped */
 };
+
+/* SS_DEVICE signals */
+enum SS_DEVICE {
+	/* Device internal counters changed. Counters are provided as cb data
+	   (struct device_counters). Must be sent with PTHREAD_CANCEL_DISABLE
+	   to avoid deadlocks in case osmo-trx process is asked to exit. */
+	S_DEVICE_COUNTER_CHANGE,
+};
+
+/* signal cb for signal <SS_DEVICE,S_DEVICE_COUNTER_CHANGE> */
+struct device_counters {
+	size_t chan;
+	unsigned int rx_underruns;
+	unsigned int rx_overruns;
+	unsigned int tx_underruns;
+	unsigned int rx_dropped_events;
+	unsigned int rx_dropped_samples;
+};