[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/.

Pablo Neira Ayuso pablo at gnumonks.org
Wed Apr 9 08:41:26 UTC 2014


On Tue, Apr 08, 2014 at 02:40:35PM +0200, Alvaro Neira Ayuso wrote:
> 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)
                           ^^

Better?

#define TLV_INFO_LEN    (sizeof(struct sbts2050_config_info) + 3)

The remaning part looks good to me.

Thanks Alvaro.

> +
> +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