[osmo-bts PATCH 3/3] main: Added support for changing the max_power_red in sbts2050

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/OpenBSC@lists.osmocom.org/.

Alvaro Neira Ayuso anayuso at sysmocom.de
Tue Apr 8 12:40:35 UTC 2014


From: Álvaro Neira Ayuso <anayuso at sysmocom.de>

Added functions for changing the max_power_red in case of we receive a Failure
Event report from the manager. The sbts2050 change the max_power_red to the value
that we have configured in the manager and the sbts2050 restore this value to the
initial value if the bts don't receive another Failure Event report in the same time
that we check the temperature in the manager.

Signed-off-by: Alvaro Neira Ayuso <anayuso at sysmocom.de>
---
 src/osmo-bts-sysmo/main.c |   67 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 67 insertions(+)

diff --git a/src/osmo-bts-sysmo/main.c b/src/osmo-bts-sysmo/main.c
index 61a5716..b492327 100644
--- a/src/osmo-bts-sysmo/main.c
+++ b/src/osmo-bts-sysmo/main.c
@@ -39,6 +39,7 @@
 #include <osmocom/vty/telnet_interface.h>
 #include <osmocom/vty/logging.h>
 #include <osmocom/gsm/protocol/ipaccess.h>
+#include <osmocom/gsm/abis_nm.h>
 
 #include <osmo-bts/gsm_data.h>
 #include <osmo-bts/logging.h>
@@ -55,11 +56,14 @@
 #define IPA_HEADER_SIZE		3
 #define IPA_OML_PROTO		0xFF
 
+#define TEMP_TIMER_SECS		(6 * 3600) + 1
+
 #include "utils.h"
 #include "eeprom.h"
 #include "l1_if.h"
 #include "hw_misc.h"
 #include "btsconfig.h"
+#include <misc/sysmobts_misc.h>
 
 /* FIXME: read from real hardware */
 const uint8_t abis_mac[6] = { 0,1,2,3,4,5 };
@@ -297,6 +301,60 @@ static int write_pid_file(char *procname)
 	return 0;
 }
 #ifdef BUILD_SBTS2050
+static int init_max_power_red;
+static int new_max_power_red;
+static int status_change_power_red = 0;
+
+enum {
+	SBTS2050_DISABLE_CHANGE_POWER = 0,
+	SBTS2050_ENABLE_CHANGE_POWER,
+};
+
+#define oml_tlv_parse(dec, buf, len)	\
+			tlv_parse(dec, &abis_nm_att_tlvdef, buf, len, 0, 0)
+
+/* Size of the struct plus 1 Bytes of tag and 2 Bytes for the length */
+#define tlv_add_info_len()     (sizeof(struct sbts2050_config_info) + 3)
+
+static struct osmo_timer_list power_timer;
+static void change_max_power_red_cb(void *data)
+{
+	struct gsm_bts *bts = data;
+
+	if (status_change_power_red == SBTS2050_ENABLE_CHANGE_POWER) {
+		if (bts->c0->max_power_red != new_max_power_red) {
+			init_max_power_red = bts->c0->max_power_red;
+			bts->c0->max_power_red = new_max_power_red;
+		}
+		status_change_power_red = SBTS2050_DISABLE_CHANGE_POWER;
+		osmo_timer_schedule(&power_timer, TEMP_TIMER_SECS, 0);
+	} else if (status_change_power_red == SBTS2050_DISABLE_CHANGE_POWER)
+		bts->c0->max_power_red = init_max_power_red;
+}
+
+static int take_max_power_red(struct msgb *msg)
+{
+	struct sbts2050_config_info *config_info;
+	struct tlv_parsed tlv_out;
+	int rc;
+
+	rc = oml_tlv_parse(&tlv_out, msg->tail - tlv_add_info_len(),
+			   tlv_add_info_len());
+
+	if (rc < 0)
+		return -1;
+
+	config_info =
+	    (struct sbts2050_config_info *) TLVP_VAL(&tlv_out, NM_ATT_ADD_INFO);
+
+	new_max_power_red = config_info->max_power_red;
+
+	status_change_power_red = SBTS2050_ENABLE_CHANGE_POWER;
+	change_max_power_red_cb(bts);
+
+	return 0;
+}
+
 static int test_recv_msg(struct msgb *msg)
 {
 	struct ipaccess_head *hh = (struct ipaccess_head *)msg->data;
@@ -355,6 +413,11 @@ static int read_sock(struct osmo_fd *fd, unsigned int what)
 		return -1;
 	}
 
+	if (take_max_power_red(msg) < 0) {
+		LOGP(DL1C, LOGL_NOTICE, "Failed Add_info: Malformed message");
+		return -1;
+	}
+
 	mo = &bts->mo;
 	msg->trx = mo->bts->c0;
 
@@ -478,6 +541,10 @@ int main(int argc, char **argv)
 	read_fd.fd = -1;
 	accept_fd.data = &read_fd;
 
+	init_max_power_red = bts->c0->max_power_red;
+	power_timer.cb = change_max_power_red_cb;
+	power_timer.data = bts;
+
 	rc = osmo_sock_unix_init_ofd(&accept_fd, SOCK_SEQPACKET, 0, SOCKET_PATH,
 				     OSMO_SOCK_F_BIND | OSMO_SOCK_F_NONBLOCK);
 	if (rc < 0) {
-- 
1.7.10.4





More information about the OpenBSC mailing list