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.orgOn 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
>
>