ipaccess: Clean up keepalive FSM properly
Fixes: OS#5828 Change-Id: I0a54c1056e43161edc86c570e80be51d7517f411
This commit is contained in:
parent
ce70074476
commit
8e38094664
|
@ -51,6 +51,7 @@
|
||||||
#include <osmocom/core/backtrace.h>
|
#include <osmocom/core/backtrace.h>
|
||||||
#include <osmocom/gsm/ipa.h>
|
#include <osmocom/gsm/ipa.h>
|
||||||
#include <osmocom/core/stats_tcp.h>
|
#include <osmocom/core/stats_tcp.h>
|
||||||
|
#include <osmocom/core/fsm.h>
|
||||||
|
|
||||||
/* global parameters of IPA input driver */
|
/* global parameters of IPA input driver */
|
||||||
struct ipa_pars g_e1inp_ipaccess_pars;
|
struct ipa_pars g_e1inp_ipaccess_pars;
|
||||||
|
@ -77,7 +78,7 @@ static inline void ipaccess_keepalive_fsm_cleanup(struct e1inp_ts *e1i_ts)
|
||||||
|
|
||||||
ka_fsm = e1i_ts->driver.ipaccess.ka_fsm;
|
ka_fsm = e1i_ts->driver.ipaccess.ka_fsm;
|
||||||
if (ka_fsm) {
|
if (ka_fsm) {
|
||||||
ipa_keepalive_fsm_stop(ka_fsm);
|
osmo_fsm_inst_term(ka_fsm, OSMO_FSM_TERM_REQUEST, NULL);
|
||||||
e1i_ts->driver.ipaccess.ka_fsm = NULL;
|
e1i_ts->driver.ipaccess.ka_fsm = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -863,9 +864,10 @@ static struct msgb *ipa_bts_id_ack(void)
|
||||||
static void ipaccess_bts_updown_cb(struct ipa_client_conn *link, int up)
|
static void ipaccess_bts_updown_cb(struct ipa_client_conn *link, int up)
|
||||||
{
|
{
|
||||||
struct e1inp_line *line = link->line;
|
struct e1inp_line *line = link->line;
|
||||||
|
struct e1inp_ts *e1i_ts = ipaccess_line_ts(link->ofd, line);
|
||||||
|
|
||||||
if (up) {
|
if (up) {
|
||||||
struct osmo_fsm_inst *ka_fsm = ipaccess_line_ts(link->ofd, line)->driver.ipaccess.ka_fsm;
|
struct osmo_fsm_inst *ka_fsm = e1i_ts->driver.ipaccess.ka_fsm;
|
||||||
|
|
||||||
update_fd_settings(line, link->ofd->fd);
|
update_fd_settings(line, link->ofd->fd);
|
||||||
if (ka_fsm && line->ipa_kap)
|
if (ka_fsm && line->ipa_kap)
|
||||||
|
@ -873,6 +875,7 @@ static void ipaccess_bts_updown_cb(struct ipa_client_conn *link, int up)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ipaccess_keepalive_fsm_cleanup(e1i_ts);
|
||||||
if (line->ops->sign_link_down)
|
if (line->ops->sign_link_down)
|
||||||
line->ops->sign_link_down(line);
|
line->ops->sign_link_down(line);
|
||||||
}
|
}
|
||||||
|
@ -1090,7 +1093,7 @@ static int ipaccess_line_update(struct e1inp_line *line)
|
||||||
}
|
}
|
||||||
case E1INP_LINE_R_BTS: {
|
case E1INP_LINE_R_BTS: {
|
||||||
struct ipa_client_conn *link;
|
struct ipa_client_conn *link;
|
||||||
struct e1inp_ts *e1i_ts;
|
struct e1inp_ts *e1i_ts = e1inp_line_ipa_oml_ts(line);
|
||||||
|
|
||||||
LOGP(DLINP, LOGL_NOTICE, "enabling ipaccess BTS mode, "
|
LOGP(DLINP, LOGL_NOTICE, "enabling ipaccess BTS mode, "
|
||||||
"OML connecting to %s:%u\n", line->ops->cfg.ipa.addr,
|
"OML connecting to %s:%u\n", line->ops->cfg.ipa.addr,
|
||||||
|
@ -1099,6 +1102,7 @@ static int ipaccess_line_update(struct e1inp_line *line)
|
||||||
/* Drop previous line */
|
/* Drop previous line */
|
||||||
if (il->ipa_cli[0]) {
|
if (il->ipa_cli[0]) {
|
||||||
ipa_client_conn_close(il->ipa_cli[0]);
|
ipa_client_conn_close(il->ipa_cli[0]);
|
||||||
|
ipaccess_keepalive_fsm_cleanup(e1i_ts);
|
||||||
ipa_client_conn_destroy(il->ipa_cli[0]);
|
ipa_client_conn_destroy(il->ipa_cli[0]);
|
||||||
il->ipa_cli[0] = NULL;
|
il->ipa_cli[0] = NULL;
|
||||||
}
|
}
|
||||||
|
@ -1128,7 +1132,6 @@ static int ipaccess_line_update(struct e1inp_line *line)
|
||||||
return -EIO;
|
return -EIO;
|
||||||
}
|
}
|
||||||
|
|
||||||
e1i_ts = e1inp_line_ipa_oml_ts(line);
|
|
||||||
ipaccess_bts_keepalive_fsm_alloc(e1i_ts, link, "oml_bts_to_bsc");
|
ipaccess_bts_keepalive_fsm_alloc(e1i_ts, link, "oml_bts_to_bsc");
|
||||||
il->ipa_cli[0] = link;
|
il->ipa_cli[0] = link;
|
||||||
ret = 0;
|
ret = 0;
|
||||||
|
|
Loading…
Reference in New Issue