ipa: Fix client setting unit_id with ASP name instead of AS
This was broken since ever. The client was submitting the ASP name
in the unit_id field during IPA handshake, and the server was
expecting it to contain the AS, so it failed with message:
"Cannot find any definition for IPA Unit Name '%s'" in
ipa_asp_fsm_wait_id_resp().
Fixes: 5f0a8df34c
Change-Id: I249964e171f578726439c40e01ae85aa447afada
This commit is contained in:
parent
04ca01eaeb
commit
65741dca05
|
@ -131,7 +131,7 @@ static int ipa_rx_msg_ccm(struct osmo_ss7_asp *asp, struct msgb *msg)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct osmo_ss7_as *find_as_for_asp(struct osmo_ss7_asp *asp)
|
struct osmo_ss7_as *ipa_find_as_for_asp(struct osmo_ss7_asp *asp)
|
||||||
{
|
{
|
||||||
struct osmo_ss7_as *as;
|
struct osmo_ss7_as *as;
|
||||||
|
|
||||||
|
@ -216,7 +216,7 @@ static int ipa_rx_msg_sccp(struct osmo_ss7_asp *asp, struct msgb *msg, uint8_t s
|
||||||
int rc;
|
int rc;
|
||||||
struct m3ua_data_hdr data_hdr;
|
struct m3ua_data_hdr data_hdr;
|
||||||
struct xua_msg *xua;
|
struct xua_msg *xua;
|
||||||
struct osmo_ss7_as *as = find_as_for_asp(asp);
|
struct osmo_ss7_as *as = ipa_find_as_for_asp(asp);
|
||||||
uint32_t opc, dpc;
|
uint32_t opc, dpc;
|
||||||
|
|
||||||
if (!as) {
|
if (!as) {
|
||||||
|
|
|
@ -1190,10 +1190,16 @@ static struct osmo_fsm_inst *ipa_asp_fsm_start(struct osmo_ss7_asp *asp,
|
||||||
{
|
{
|
||||||
struct osmo_fsm_inst *fi;
|
struct osmo_fsm_inst *fi;
|
||||||
struct ipa_asp_fsm_priv *iafp;
|
struct ipa_asp_fsm_priv *iafp;
|
||||||
|
struct osmo_ss7_as *as = ipa_find_as_for_asp(asp);
|
||||||
|
|
||||||
/* allocate as child of AS? */
|
/* allocate as child of AS? */
|
||||||
fi = osmo_fsm_inst_alloc(&ipa_asp_fsm, asp, NULL, log_level, asp->cfg.name);
|
fi = osmo_fsm_inst_alloc(&ipa_asp_fsm, asp, NULL, log_level, asp->cfg.name);
|
||||||
|
|
||||||
|
if (!as) {
|
||||||
|
osmo_fsm_inst_term(fi, OSMO_FSM_TERM_ERROR, NULL);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
iafp = talloc_zero(fi, struct ipa_asp_fsm_priv);
|
iafp = talloc_zero(fi, struct ipa_asp_fsm_priv);
|
||||||
if (!iafp) {
|
if (!iafp) {
|
||||||
osmo_fsm_inst_term(fi, OSMO_FSM_TERM_ERROR, NULL);
|
osmo_fsm_inst_term(fi, OSMO_FSM_TERM_ERROR, NULL);
|
||||||
|
@ -1202,7 +1208,7 @@ static struct osmo_fsm_inst *ipa_asp_fsm_start(struct osmo_ss7_asp *asp,
|
||||||
iafp->role = role;
|
iafp->role = role;
|
||||||
iafp->asp = asp;
|
iafp->asp = asp;
|
||||||
iafp->ipa_unit = talloc_zero(iafp, struct ipaccess_unit);
|
iafp->ipa_unit = talloc_zero(iafp, struct ipaccess_unit);
|
||||||
iafp->ipa_unit->unit_name = talloc_strdup(iafp->ipa_unit, asp->cfg.name);
|
iafp->ipa_unit->unit_name = talloc_strdup(iafp->ipa_unit, as->cfg.name);
|
||||||
iafp->pong_timer.cb = ipa_pong_timer_cb;
|
iafp->pong_timer.cb = ipa_pong_timer_cb;
|
||||||
iafp->pong_timer.data = fi;
|
iafp->pong_timer.data = fi;
|
||||||
|
|
||||||
|
|
|
@ -117,6 +117,7 @@ int xua_find_as_for_asp(struct osmo_ss7_as **as, const struct osmo_ss7_asp *asp,
|
||||||
|
|
||||||
int ipa_tx_xua_as(struct osmo_ss7_as *as, struct xua_msg *xua);
|
int ipa_tx_xua_as(struct osmo_ss7_as *as, struct xua_msg *xua);
|
||||||
int ipa_rx_msg(struct osmo_ss7_asp *asp, struct msgb *msg, uint8_t sls);
|
int ipa_rx_msg(struct osmo_ss7_asp *asp, struct msgb *msg, uint8_t sls);
|
||||||
|
struct osmo_ss7_as *ipa_find_as_for_asp(struct osmo_ss7_asp *asp);
|
||||||
|
|
||||||
int osmo_isup_party_parse(char *out_digits, const uint8_t *in,
|
int osmo_isup_party_parse(char *out_digits, const uint8_t *in,
|
||||||
unsigned int in_num_bytes, bool odd);
|
unsigned int in_num_bytes, bool odd);
|
||||||
|
|
Loading…
Reference in New Issue