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