diff options
author | Harald Welte <laforge@gnumonks.org> | 2018-02-08 23:59:19 +0100 |
---|---|---|
committer | Harald Welte <laforge@gnumonks.org> | 2018-02-09 02:20:51 +0100 |
commit | b6777fb055d94991971d4df0438ad18911e0b000 (patch) | |
tree | 15427546ff81894020debdff8c6b016a560d46d5 | |
parent | 66a301e65d6d1379de1e7ab0963b94ab335e3668 (diff) |
a_reset: Add additional "a_reset_alloc" argument
Using this argument we can create the state machine in the
"already connected" state, i.e. without starting an outbound
RESET procedure.
Change-Id: Ibf569d57300965cd47084fa0bff54aa67679e2a1
-rw-r--r-- | include/osmocom/msc/a_reset.h | 3 | ||||
-rw-r--r-- | src/libcommon-cs/a_reset.c | 12 | ||||
-rw-r--r-- | src/libmsc/a_iface.c | 2 |
3 files changed, 12 insertions, 5 deletions
diff --git a/include/osmocom/msc/a_reset.h b/include/osmocom/msc/a_reset.h index 7aaab0620..cdb17c288 100644 --- a/include/osmocom/msc/a_reset.h +++ b/include/osmocom/msc/a_reset.h @@ -45,7 +45,8 @@ struct a_reset_ctx { }; /* Create and start state machine which handles the reset/reset-ack procedure */ -struct a_reset_ctx *a_reset_alloc(const void *ctx, const char *name, void *cb, void *priv); +struct a_reset_ctx *a_reset_alloc(const void *ctx, const char *name, void *cb, void *priv, + bool already_connected); /* Tear down state machine */ void a_reset_free(struct a_reset_ctx *reset); diff --git a/src/libcommon-cs/a_reset.c b/src/libcommon-cs/a_reset.c index 072181d78..25192c314 100644 --- a/src/libcommon-cs/a_reset.c +++ b/src/libcommon-cs/a_reset.c @@ -114,7 +114,8 @@ static struct osmo_fsm fsm = { }; /* Create and start state machine which handles the reset/reset-ack procedure */ -struct a_reset_ctx *a_reset_alloc(const void *ctx, const char *name, void *cb, void *priv) +struct a_reset_ctx *a_reset_alloc(const void *ctx, const char *name, void *cb, void *priv, + bool already_connected) { OSMO_ASSERT(name); @@ -134,8 +135,13 @@ struct a_reset_ctx *a_reset_alloc(const void *ctx, const char *name, void *cb, v OSMO_ASSERT(reset->fsm); reset->fsm->priv = reset; - /* kick off reset-ack sending mechanism */ - osmo_fsm_inst_state_chg(reset->fsm, ST_DISC, RESET_RESEND_INTERVAL, RESET_RESEND_TIMER_NO); + if (already_connected) + osmo_fsm_inst_state_chg(reset->fsm, ST_CONN, 0, 0); + else { + /* kick off reset-ack sending mechanism */ + osmo_fsm_inst_state_chg(reset->fsm, ST_DISC, RESET_RESEND_INTERVAL, + RESET_RESEND_TIMER_NO); + } return reset; } diff --git a/src/libmsc/a_iface.c b/src/libmsc/a_iface.c index 11e1542d4..16df46da2 100644 --- a/src/libmsc/a_iface.c +++ b/src/libmsc/a_iface.c @@ -481,7 +481,7 @@ static void add_bsc(const struct osmo_sccp_addr *msc_addr, const struct osmo_scc /* Start reset procedure to make the new connection active */ snprintf(bsc_name, sizeof(bsc_name), "bsc-%i", bsc_addr->pc); - bsc_ctx->reset = a_reset_alloc(bsc_ctx, bsc_name, a_reset_cb, bsc_ctx); + bsc_ctx->reset = a_reset_alloc(bsc_ctx, bsc_name, a_reset_cb, bsc_ctx, false); } /* Callback function, called by the SSCP stack when data arrives */ |