bts: Allow to exclude a BTS from the global RF lock handling

Some BTS might be in locations where they can run all the time,
allow to exclude them from the global lock handling.
diff --git a/openbsc/src/libbsc/bsc_vty.c b/openbsc/src/libbsc/bsc_vty.c
index e89317d..ec92c18 100644
--- a/openbsc/src/libbsc/bsc_vty.c
+++ b/openbsc/src/libbsc/bsc_vty.c
@@ -580,6 +580,9 @@
 
 	config_write_bts_gprs(vty, bts);
 
+	if (bts->excl_from_rf_lock)
+		vty_out(vty, "  rf-lock-exclude%s", VTY_NEWLINE);
+
 	if (bts->model->config_write_bts)
 		bts->model->config_write_bts(vty, bts);
 
@@ -2443,6 +2446,28 @@
 	return CMD_SUCCESS;
 }
 
+#define EXCL_RFLOCK_STR "Exclude this BTS from the global RF Lock\n"
+
+DEFUN(cfg_bts_excl_rf_lock,
+      cfg_bts_excl_rf_lock_cmd,
+      "rf-lock-exclude",
+      EXCL_RFLOCK_STR)
+{
+	struct gsm_bts *bts = vty->index;
+	bts->excl_from_rf_lock = 1;
+	return CMD_SUCCESS;
+}
+
+DEFUN(cfg_bts_no_excl_rf_lock,
+      cfg_bts_no_excl_rf_lock_cmd,
+      "no rf-lock-exclude",
+      NO_STR EXCL_RFLOCK_STR)
+{
+	struct gsm_bts *bts = vty->index;
+	bts->excl_from_rf_lock = 0;
+	return CMD_SUCCESS;
+}
+
 #define TRX_TEXT "Radio Transceiver\n"
 
 /* per TRX configuration */
@@ -3037,6 +3062,8 @@
 	install_element(BTS_NODE, &cfg_bts_neigh_mode_cmd);
 	install_element(BTS_NODE, &cfg_bts_neigh_cmd);
 	install_element(BTS_NODE, &cfg_bts_si5_neigh_cmd);
+	install_element(BTS_NODE, &cfg_bts_excl_rf_lock_cmd);
+	install_element(BTS_NODE, &cfg_bts_no_excl_rf_lock_cmd);
 
 	install_element(BTS_NODE, &cfg_trx_cmd);
 	install_node(&trx_node, dummy_config_write);