diff options
author | Holger Hans Peter Freyther <zecke@selfish.org> | 2010-07-29 02:27:27 +0800 |
---|---|---|
committer | Holger Hans Peter Freyther <zecke@selfish.org> | 2010-07-29 03:08:47 +0800 |
commit | b6dd348df2837f71a3c482b028e69995937d2693 (patch) | |
tree | 0ed4b6f324d40597241a47da4f8812131fadf188 | |
parent | b43e2afb3eb14107cb6a49231b223bbb8ea37f2e (diff) |
bsc_msc_rf: Add a grace command, send a signal
-rw-r--r-- | openbsc/include/openbsc/signal.h | 12 | ||||
-rw-r--r-- | openbsc/src/bsc_msc_rf.c | 15 |
2 files changed, 27 insertions, 0 deletions
diff --git a/openbsc/include/openbsc/signal.h b/openbsc/include/openbsc/signal.h index fcc69186d..dbf15d499 100644 --- a/openbsc/include/openbsc/signal.h +++ b/openbsc/include/openbsc/signal.h @@ -43,6 +43,7 @@ enum signal_subsystems { SS_SCALL, SS_GLOBAL, SS_CHALLOC, + SS_RF, }; /* SS_PAGING signals */ @@ -118,6 +119,13 @@ enum signal_global { S_GLOBAL_SHUTDOWN, }; +/* SS_RF signals */ +enum signal_rf { + S_RF_OFF, + S_RF_ON, + S_RF_GRACE, +}; + struct paging_signal_data { struct gsm_subscriber *subscr; struct gsm_bts *bts; @@ -143,4 +151,8 @@ struct challoc_signal_data { enum gsm_chan_t type; }; +struct rf_signal_data { + struct gsm_network *net; +}; + #endif diff --git a/openbsc/src/bsc_msc_rf.c b/openbsc/src/bsc_msc_rf.c index 9822ef73a..f85cc6567 100644 --- a/openbsc/src/bsc_msc_rf.c +++ b/openbsc/src/bsc_msc_rf.c @@ -24,6 +24,7 @@ #include <openbsc/bsc_msc_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 @@ static void handle_query(struct bsc_msc_rf_conn *conn) return; } +static void send_signal(struct bsc_msc_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 bsc_msc_rf_conn *conn = fd->data; @@ -112,9 +122,14 @@ static int rf_read_cmd(struct bsc_fd *fd) 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]); |