osmo_bsc_rf: Add a grace command, send a signal
diff --git a/openbsc/src/bsc/osmo_bsc_rf.c b/openbsc/src/bsc/osmo_bsc_rf.c
index 8cfbb7c..e45474c 100644
--- a/openbsc/src/bsc/osmo_bsc_rf.c
+++ b/openbsc/src/bsc/osmo_bsc_rf.c
@@ -24,6 +24,7 @@
 #include <openbsc/osmo_bsc_rf.h>
 #include <openbsc/debug.h>
 #include <openbsc/gsm_data.h>
+#include <openbsc/signal.h>
 
 #include <osmocore/talloc.h>
 #include <osmocore/protocol/gsm_12_21.h>
@@ -37,6 +38,7 @@
 #define RF_CMD_QUERY '?'
 #define RF_CMD_OFF   '0'
 #define RF_CMD_ON    '1'
+#define RF_CMD_GRACE 'g'
 
 static int lock_each_trx(struct gsm_network *net, int lock)
 {
@@ -90,6 +92,14 @@
 	return;
 }
 
+static void send_signal(struct osmo_bsc_rf_conn *conn, int val)
+{
+	struct rf_signal_data sig;
+	sig.net = conn->gsm_network;
+
+	dispatch_signal(SS_RF, val, &sig);
+}
+
 static int rf_read_cmd(struct bsc_fd *fd)
 {
 	struct osmo_bsc_rf_conn *conn = fd->data;
@@ -112,9 +122,14 @@
 		break;
 	case RF_CMD_OFF:
 		lock_each_trx(conn->gsm_network, 1);
+		send_signal(conn, S_RF_OFF);
 		break;
 	case RF_CMD_ON:
 		lock_each_trx(conn->gsm_network, 0);
+		send_signal(conn, S_RF_ON);
+		break;
+	case RF_CMD_GRACE:
+		send_signal(conn, S_RF_GRACE);
 		break;
 	default:
 		LOGP(DINP, LOGL_ERROR, "Unknown command %d\n", buf[0]);