pespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/libosmo-sigtran/+/42072?usp=email )
Change subject: xua_rkm: Adapt RKM code to support IPSP ......................................................................
xua_rkm: Adapt RKM code to support IPSP
Related: OS#6474 Change-Id: I9c59d6fb43d4e7ceda552f156dd7761173545b11 --- M src/ss7_as_vty.c M src/xua_rkm.c 2 files changed, 12 insertions(+), 11 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/libosmo-sigtran refs/changes/72/42072/1
diff --git a/src/ss7_as_vty.c b/src/ss7_as_vty.c index 80359aa..f92b6d7 100644 --- a/src/ss7_as_vty.c +++ b/src/ss7_as_vty.c @@ -667,9 +667,9 @@ * then announce using RKM. * Still, allow STPs to have AS(P) configured in an ASP mode to talk to a * peer STP by announcing remote PCs. */ - if (as_role == OSMO_SS7_ASP_ROLE_ASP && + if ((as_role == OSMO_SS7_ASP_ROLE_ASP || as_role == OSMO_SS7_ASP_ROLE_IPSP) && !osmo_ss7_pc_is_local(as->inst, as->cfg.routing_key.pc)) - vty_out(vty, "%% AS '%s' with local role ASP should have a local PC configured in its " + vty_out(vty, "%% AS '%s' with local role ASP/IPSP should have a local PC configured in its " "routing-key. Fix your config!%s", as->cfg.name, VTY_NEWLINE);
if (as->cfg.proto == OSMO_SS7_ASP_PROT_IPA) { diff --git a/src/xua_rkm.c b/src/xua_rkm.c index 21591e9..22bcafe 100644 --- a/src/xua_rkm.c +++ b/src/xua_rkm.c @@ -219,16 +219,15 @@ rctx, osmo_ss7_pointcode_print(asp->inst, dpc));
/* We have two cases here: - * a) pre-configured routing context on both ASP and SG: We will - * find the AS based on the RCTX send by the client, check if - * the routing key matches, associated AS with ASP and return - * success. - * b) no routing context set on ASP, no pre-existing AS - * definition on SG. We have to create the AS, set the RK, + * a) pre-configured routing context on both ASP and SG (or IPSP peers): + * We will find the AS based on the RCTX send by the client, check if + * the routing key matches, associated AS with ASP and return success. + * b) no routing context set on peer (ASP/IPSP), no pre-existing local AS + * definition (SG/IPSP). We have to create the AS, set the RK, * allocate the RCTX and return that RCTX to the client. This * is a slightly non-standard interpretation of M3UA RKM - * which requires the SG to not have a-priori-knowledge of - * all AS/RK in situations where the ASP are trusted. + * which requires the SG/IPSP to not have a-priori-knowledge of + * all AS/RK in situations where the peers are trusted. */
/* check if there is already an AS for this routing key */ @@ -255,7 +254,9 @@ if (as) { LOGPASP(asp, DLSS7, LOGL_NOTICE, "RKM: Found existing AS for RCTX %u\n", rctx);
- if (as->cfg.routing_key.pc != dpc) { + /* In IPSP we expect in fact to have the local PC configured in routing-key. */ + if (asp->cfg.role == OSMO_SS7_ASP_ROLE_SG && + as->cfg.routing_key.pc != dpc) { LOGPASP(asp, DLSS7, LOGL_ERROR, "RKM: DPC doesn't match, rejecting AS (%u != %u)\n", as->cfg.routing_key.pc, dpc); msgb_append_reg_res(resp, rk_id, M3UA_RKM_REG_ERR_INVAL_RKEY, 0);