diff --git a/include/openbsc/abis_rsl.h b/include/openbsc/abis_rsl.h index f983fceec..c419bb78a 100644 --- a/include/openbsc/abis_rsl.h +++ b/include/openbsc/abis_rsl.h @@ -34,6 +34,14 @@ struct gsm_bts_trx_ts; #define GSM48_LEN2PLEN(a) (((a) << 2) | 1) +#define LCHAN_SET_ST(lch_, st_) \ + do { \ + if ((lch_)->state != st_) \ + DEBUGP(DRSL, "%s state %s -> %s\n", \ + gsm_lchan_name(lch_), gsm_lchans_name((lch_)->state), gsm_lchans_name(st_)); \ + (lch_)->state = st_; \ + } while (0) + int rsl_bcch_info(const struct gsm_bts_trx *trx, enum osmo_sysinfo_type si_type, const uint8_t *data, int len); int rsl_sacch_filling(struct gsm_bts_trx *trx, uint8_t type, const uint8_t *data, int len); @@ -74,7 +82,6 @@ uint64_t str_to_imsi(const char *imsi_str); int rsl_release_request(struct gsm_lchan *lchan, uint8_t link_id, enum rsl_rel_mode release_mode); -int rsl_lchan_set_state(struct gsm_lchan *lchan, int); int rsl_lchan_mark_broken(struct gsm_lchan *lchan, const char *broken); /* to be provided by external code */ diff --git a/src/libbsc/abis_rsl.c b/src/libbsc/abis_rsl.c index 75229a55f..fabb47a1b 100644 --- a/src/libbsc/abis_rsl.c +++ b/src/libbsc/abis_rsl.c @@ -79,7 +79,7 @@ static void do_lchan_free(struct gsm_lchan *lchan) osmo_timer_schedule(&lchan->error_timer, lchan->ts->trx->bts->network->T3111 + 2, 0); } else { - rsl_lchan_set_state(lchan, LCHAN_S_NONE); + LCHAN_SET_ST(lchan, LCHAN_S_NONE); } lchan_free(lchan); } @@ -509,7 +509,7 @@ static int rsl_chan_activate_lchan_as_pdch(struct gsm_lchan *lchan) * the calling code passes the correct lchan. */ OSMO_ASSERT(lchan == lchan->ts->lchan); - rsl_lchan_set_state(lchan, LCHAN_S_ACT_REQ); + LCHAN_SET_ST(lchan, LCHAN_S_ACT_REQ); msg = rsl_msgb_alloc(); dh = (struct abis_rsl_dchan_hdr *) msgb_put(msg, sizeof(*dh)); @@ -622,7 +622,7 @@ int rsl_chan_activate_lchan(struct gsm_lchan *lchan, uint8_t act_type, return rc; } - rsl_lchan_set_state(lchan, LCHAN_S_ACT_REQ); + LCHAN_SET_ST(lchan, LCHAN_S_ACT_REQ); ta = lchan->rqd_ta; @@ -825,7 +825,7 @@ static void error_timeout_cb(void *data) /* go back to the none state */ LOGP(DRSL, LOGL_INFO, "%s is back in operation.\n", gsm_lchan_name(lchan)); - rsl_lchan_set_state(lchan, LCHAN_S_NONE); + LCHAN_SET_ST(lchan, LCHAN_S_NONE); /* Put PDCH channel back into PDCH mode, if GPRS is enabled */ if (lchan->ts->pchan == GSM_PCHAN_TCH_F_PDCH @@ -896,7 +896,7 @@ static int rsl_rf_chan_release(struct gsm_lchan *lchan, int error, /* * TODO: start T3109 now. */ - rsl_lchan_set_state(lchan, LCHAN_S_REL_ERR); + LCHAN_SET_ST(lchan, LCHAN_S_REL_ERR); } /* Start another timer or assume the BTS sends a ACK/NACK? */ @@ -1220,20 +1220,11 @@ int rsl_lchan_mark_broken(struct gsm_lchan *lchan, const char *reason) { LOGP(DRSL, LOGL_ERROR, "%s %s lchan broken: %s\n", gsm_lchan_name(lchan), gsm_lchant_name(lchan->type), reason); - rsl_lchan_set_state(lchan, LCHAN_S_BROKEN); + LCHAN_SET_ST(lchan, LCHAN_S_BROKEN); lchan->broken_reason = reason; return 0; } -int rsl_lchan_set_state(struct gsm_lchan *lchan, int state) -{ - DEBUGP(DRSL, "%s state %s -> %s\n", - gsm_lchan_name(lchan), gsm_lchans_name(lchan->state), - gsm_lchans_name(state)); - lchan->state = state; - return 0; -} - /* Chapter 8.4.2: Channel Activate Acknowledge */ static int rsl_rx_chan_act_ack(struct msgb *msg) { @@ -1257,7 +1248,7 @@ static int rsl_rx_chan_act_ack(struct msgb *msg) talloc_free(lchan->rqd_ref); lchan->rqd_ref = NULL; lchan->rqd_ta = 0; - rsl_lchan_set_state(msg->lchan, LCHAN_S_ACTIVE); + LCHAN_SET_ST(msg->lchan, LCHAN_S_ACTIVE); if (ts->pchan == GSM_PCHAN_TCH_F_TCH_H_PDCH) { /* * lchan_act_tmr_cb() already called @@ -1282,7 +1273,7 @@ static int rsl_rx_chan_act_ack(struct msgb *msg) LOGP(DRSL, LOGL_NOTICE, "%s CHAN ACT ACK, but state %s\n", gsm_lchan_name(lchan), gsm_lchans_name(lchan->state)); - rsl_lchan_set_state(lchan, LCHAN_S_ACTIVE); + LCHAN_SET_ST(lchan, LCHAN_S_ACTIVE); if (ts->pchan == GSM_PCHAN_TCH_F_TCH_H_PDCH) dyn_ts_switchover_complete(lchan); @@ -2614,7 +2605,7 @@ int dyn_ts_switchover_start(struct gsm_bts_trx_ts *ts, * rsl_rx_rf_chan_rel_ack(). PDCH is always on lchan[0]. */ if (ts->dyn.pchan_is == GSM_PCHAN_PDCH) { - rsl_lchan_set_state(ts->lchan, LCHAN_S_REL_REQ); + LCHAN_SET_ST(ts->lchan, LCHAN_S_REL_REQ); rc = rsl_rf_chan_release(ts->lchan, 0, SACCH_NONE); if (rc) { LOGP(DRSL, LOGL_ERROR, diff --git a/src/libbsc/bsc_api.c b/src/libbsc/bsc_api.c index a0ba69a91..2c64dde5e 100644 --- a/src/libbsc/bsc_api.c +++ b/src/libbsc/bsc_api.c @@ -246,7 +246,7 @@ static int handle_new_assignment(struct gsm_subscriber_connection *conn, int cha conn->secondary_lchan = new_lchan; new_lchan->conn = conn; - rsl_lchan_set_state(new_lchan, LCHAN_S_ACT_REQ); + LCHAN_SET_ST(new_lchan, LCHAN_S_ACT_REQ); return 0; } diff --git a/src/libbsc/chan_alloc.c b/src/libbsc/chan_alloc.c index 4192d65f7..8d31dcfdb 100644 --- a/src/libbsc/chan_alloc.c +++ b/src/libbsc/chan_alloc.c @@ -448,7 +448,7 @@ void lchan_reset(struct gsm_lchan *lchan) osmo_timer_del(&lchan->error_timer); lchan->type = GSM_LCHAN_NONE; - lchan->state = LCHAN_S_NONE; + LCHAN_SET_ST(lchan, LCHAN_S_NONE); if (lchan->abis_ip.rtp_socket) { rtp_socket_free(lchan->abis_ip.rtp_socket); @@ -485,7 +485,7 @@ static void _lchan_handle_release(struct gsm_lchan *lchan, int lchan_release(struct gsm_lchan *lchan, int sacch_deact, enum rsl_rel_mode mode) { DEBUGP(DRLL, "%s starting release sequence\n", gsm_lchan_name(lchan)); - rsl_lchan_set_state(lchan, LCHAN_S_REL_REQ); + LCHAN_SET_ST(lchan, LCHAN_S_REL_REQ); lchan->conn = NULL; _lchan_handle_release(lchan, sacch_deact, mode); diff --git a/src/libbsc/handover_logic.c b/src/libbsc/handover_logic.c index 8ced74fd5..5202cc9d3 100644 --- a/src/libbsc/handover_logic.c +++ b/src/libbsc/handover_logic.c @@ -152,7 +152,7 @@ int bsc_handover_start(struct gsm_lchan *old_lchan, struct gsm_bts *bts) return rc; } - rsl_lchan_set_state(new_lchan, LCHAN_S_ACT_REQ); + LCHAN_SET_ST(new_lchan, LCHAN_S_ACT_REQ); llist_add(&ho->list, &bsc_handovers); /* we continue in the SS_LCHAN handler / ho_chan_activ_ack */