Projects
osmocom:master
libosmo-sigtran
Log In
Username
Password
File not found: osmo-msc_1.14.0.16.c74d0.202511021800.dsc
×
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
Expand all
Collapse all
Changes of Revision 70
View file
commit_28438f1ba64f2d84bf7f17ff8fb2740f2e0804c9.txt
Added
View file
commit_6318ff83b45f089ab4592e59a5caf81755dc635e.txt
Deleted
View file
libosmo-sigtran_2.1.0.126.6318.dsc -> libosmo-sigtran_2.1.0.130.2843.dsc
Changed
@@ -2,7 +2,7 @@ Source: libosmo-sigtran Binary: libosmo-sigtran11, libosmo-sigtran-dbg, libosmo-sigtran-doc, libosmo-sigtran-dev, osmo-stp, osmo-stp-dbg, osmo-stp-doc Architecture: any all -Version: 2.1.0.126.6318 +Version: 2.1.0.130.2843 Maintainer: Osmocom team <openbsc@lists.osmocom.org> Homepage: https://projects.osmocom.org/projects/libosmo-sccp Standards-Version: 3.9.7 @@ -18,8 +18,8 @@ osmo-stp-dbg deb debug optional arch=any osmo-stp-doc deb doc optional arch=all Checksums-Sha1: - 5e408407c7fe52b8d3aeaf8c99a2879b08cb8f89 249196 libosmo-sigtran_2.1.0.126.6318.tar.xz + d657981a5169c3b025333f1d878e7a8e55ea202a 249904 libosmo-sigtran_2.1.0.130.2843.tar.xz Checksums-Sha256: - c902a46456e657b14cc6f259b47143af5518823659cd2daf0e57afd834c6c929 249196 libosmo-sigtran_2.1.0.126.6318.tar.xz + 77f798db4d5af952320e5782d7ca1d2a83396f2fcd5ea195bb6dd20d4ccdcb9f 249904 libosmo-sigtran_2.1.0.130.2843.tar.xz Files: - 53dbe536496f8185c31a5dd7eee41c4e 249196 libosmo-sigtran_2.1.0.126.6318.tar.xz + 46d23859c2838cc0657492f325dd4b76 249904 libosmo-sigtran_2.1.0.130.2843.tar.xz
View file
libosmo-sigtran_2.1.0.126.6318.tar.xz/.tarball-version -> libosmo-sigtran_2.1.0.130.2843.tar.xz/.tarball-version
Changed
@@ -1 +1 @@ -2.1.0.126-6318 +2.1.0.130-2843
View file
libosmo-sigtran_2.1.0.126.6318.tar.xz/debian/changelog -> libosmo-sigtran_2.1.0.130.2843.tar.xz/debian/changelog
Changed
@@ -1,8 +1,8 @@ -libosmo-sigtran (2.1.0.126.6318) unstable; urgency=medium +libosmo-sigtran (2.1.0.130.2843) unstable; urgency=medium * Automatically generated changelog entry for building the Osmocom master feed - -- Osmocom OBS scripts <info@osmocom.org> Thu, 03 Jul 2025 12:17:54 +0000 + -- Osmocom OBS scripts <info@osmocom.org> Thu, 03 Jul 2025 14:32:25 +0000 libosmo-sigtran (2.1.0) unstable; urgency=medium
View file
libosmo-sigtran_2.1.0.126.6318.tar.xz/src/ss7_as.c -> libosmo-sigtran_2.1.0.130.2843.tar.xz/src/ss7_as.c
Changed
@@ -169,6 +169,7 @@ } } + LOGPAS(as, DLSS7, LOGL_ERROR, "Failed adding ASP %s to AS, ASP table is full!\n", asp->cfg.name); return -ENOSPC; }
View file
libosmo-sigtran_2.1.0.126.6318.tar.xz/src/ss7_as_vty.c -> libosmo-sigtran_2.1.0.130.2843.tar.xz/src/ss7_as_vty.c
Changed
@@ -110,9 +110,15 @@ CMD_ATTR_IMMEDIATE) { struct osmo_ss7_as *as = vty->index; + int rc = osmo_ss7_as_add_asp(as, argv0); - if (osmo_ss7_as_add_asp(as, argv0)) { - vty_out(vty, "cannot find ASP '%s'%s", argv0, VTY_NEWLINE); + if (rc < 0) { + if (rc == -ENODEV) + vty_out(vty, "%% Cannot find ASP '%s'%s", argv0, VTY_NEWLINE); + else if (rc == -ENOSPC) + vty_out(vty, + "%% Cannot associate ASP '%s' to AS '%s': ASP table for the AS is full!%s", + argv0, as->cfg.name, VTY_NEWLINE); return CMD_WARNING; }
View file
libosmo-sigtran_2.1.0.126.6318.tar.xz/src/ss7_route_table.c -> libosmo-sigtran_2.1.0.130.2843.tar.xz/src/ss7_route_table.c
Changed
@@ -341,3 +341,49 @@ } return false; } + +/* Figure out whether a remote PC is accessible over a route via a specific AS + * Note: Unlike ss7_route_table_lookup_route(), this function is read-only and doesn't modify any state. */ +bool ss7_route_table_dpc_is_accessible_via_as(const struct osmo_ss7_route_table *rtbl, uint32_t dpc, const struct osmo_ss7_as *as) +{ + struct osmo_ss7_combined_linkset *clset; + struct osmo_ss7_route *rt; + /* we assume the combined_links are sorted by mask length, i.e. more + * specific combined links first, and less specific combined links with shorter + * mask later */ + llist_for_each_entry(clset, &rtbl->combined_linksets, list) { + if ((dpc & clset->cfg.mask) != clset->cfg.pc) + continue; + llist_for_each_entry(rt, &clset->routes, list) { + if (rt->dest.as != as) + continue; + if (!ss7_route_is_available(rt)) + continue; + return true; + } + } + return false; +} + +/* Figure out whether a remote PC is accessible over any route not going via a specific excluded AS + * Note: Unlike ss7_route_table_lookup_route(), this function is read-only and doesn't modify any state. */ +bool ss7_route_table_dpc_is_accessible_skip_as(const struct osmo_ss7_route_table *rtbl, uint32_t dpc, const struct osmo_ss7_as *as) +{ + struct osmo_ss7_combined_linkset *clset; + struct osmo_ss7_route *rt; + /* we assume the combined_links are sorted by mask length, i.e. more + * specific combined links first, and less specific combined links with shorter + * mask later */ + llist_for_each_entry(clset, &rtbl->combined_linksets, list) { + if ((dpc & clset->cfg.mask) != clset->cfg.pc) + continue; + llist_for_each_entry(rt, &clset->routes, list) { + if (rt->dest.as == as) + continue; + if (!ss7_route_is_available(rt)) + continue; + return true; + } + } + return false; +}
View file
libosmo-sigtran_2.1.0.126.6318.tar.xz/src/ss7_route_table.h -> libosmo-sigtran_2.1.0.130.2843.tar.xz/src/ss7_route_table.h
Changed
@@ -47,6 +47,8 @@ struct osmo_ss7_route * ss7_route_table_lookup_route(const struct osmo_ss7_route_table *rtbl, const struct osmo_ss7_route_label *rtlabel); bool ss7_route_table_dpc_is_accessible(const struct osmo_ss7_route_table *rtbl, uint32_t dpc); +bool ss7_route_table_dpc_is_accessible_via_as(const struct osmo_ss7_route_table *rtbl, uint32_t dpc, const struct osmo_ss7_as *as); +bool ss7_route_table_dpc_is_accessible_skip_as(const struct osmo_ss7_route_table *rtbl, uint32_t dpc, const struct osmo_ss7_as *as); struct osmo_ss7_combined_linkset * ss7_route_table_find_combined_linkset(const struct osmo_ss7_route_table *rtbl, uint32_t dpc, uint32_t mask, uint32_t prio);
View file
libosmo-sigtran_2.1.0.126.6318.tar.xz/src/xua_as_fsm.c -> libosmo-sigtran_2.1.0.130.2843.tar.xz/src/xua_as_fsm.c
Changed
@@ -12,6 +12,7 @@ #include <arpa/inet.h> #include <osmocom/core/fsm.h> +#include <osmocom/core/linuxlist.h> #include <osmocom/core/utils.h> #include <osmocom/core/timer.h> #include <osmocom/core/prim.h> @@ -24,6 +25,7 @@ #include <osmocom/sigtran/protocol/m3ua.h> #include <sys/types.h> +#include "sccp_internal.h" #include "ss7_as.h" #include "ss7_asp.h" #include "ss7_combined_linkset.h" @@ -63,6 +65,41 @@ osmo_ss7_asp_send(asp, msg); } +/* RFC 4666 4.5.1: "For the particular case that an ASP becomes active for an AS and + * destinations normally accessible to the AS are inaccessible, restricted, or congested, + * the SG MAY send DUNA, DRST, or SCON messages for the inaccessible, restricted, or + * congested destinations to the ASP newly active for the AS to prevent the ASP from + * sending traffic for destinations that it might not otherwise know that are inaccessible, + * restricted, or congested" */ +static void as_tx_duna_during_asp_act(struct osmo_ss7_as *as, struct osmo_ss7_asp *asp) +{ + struct osmo_ss7_instance *inst = as->inst; + struct osmo_ss7_route_table *rtbl = inst->rtable_system; + struct osmo_ss7_as *as_it; + uint32_t aff_pc32; + unsigned int num_aff_pc = 0; + uint32_t rctx_be = htonl(as->cfg.routing_key.context); + + /* Send up to 32 PC per DUNA: */ + llist_for_each_entry(as_it, &inst->as_list, list) { + if (as == as_it) + continue; + if (ss7_route_table_dpc_is_accessible_skip_as(rtbl, as_it->cfg.routing_key.pc, as)) + continue; + aff_pcnum_aff_pc++ = htonl(as_it->cfg.routing_key.pc); /* mask = 0 */ + if (num_aff_pc == ARRAY_SIZE(aff_pc)) { + xua_tx_snm_available(asp, &rctx_be, 1, + aff_pc, num_aff_pc, + "RFC4666 4.5.1", false); + num_aff_pc = 0; + } + } + if (num_aff_pc > 0) + xua_tx_snm_available(asp, &rctx_be, 1, + aff_pc, num_aff_pc, + "RFC4666 4.5.1", false); +} + static int as_notify_all_asp(struct osmo_ss7_as *as, struct osmo_xlm_prim_notify *npar) { struct msgb *msg; @@ -451,6 +488,28 @@ xua_snm_pc_available(as, &aff_pc, 1, NULL, false); } } + + /* Generate PC unavailability indications for PCs in the sccp address-book. + * These are generally PCs the user wants to get information about, and + * they may have no fully-qualified route because: + * - user may have not configured such fully qualified route, but a + * summary route (eg. 0.0.0/0 default route). + * - peer SG may have not announced them (DAVA/DUNA). + */ + struct osmo_sccp_addr_entry *entry; + llist_for_each_entry(entry, &s7i->cfg.sccp_address_book, list) { + if (!(entry->addr.presence & OSMO_SCCP_ADDR_T_PC)) + continue; + if (osmo_ss7_pc_is_local(s7i, entry->addr.pc)) + continue; + /* Still available: */ + if (ss7_route_table_dpc_is_accessible_skip_as(rtbl, entry->addr.pc, as)) + continue; + LOGPAS(as, DLSS7, LOGL_INFO, "AS became inactive => address-book pc=%u=%s is now unavailable\n", + entry->addr.pc, osmo_ss7_pointcode_print(s7i, entry->addr.pc)); + aff_pc = htonl(entry->addr.pc); + xua_snm_pc_available(as, &aff_pc, 1, NULL, false); + } } /* AS became active, trigger SNM PC availability for PCs it served: */ @@ -483,6 +542,31 @@ xua_snm_pc_available(as, &aff_pc, 1, NULL, true); } } + + /* Generate PC availability indications for PCs in the sccp address-book. + * These are generally PCs the user wants to get information about, and + * they may have no fully-qualified route because: + * - user may have not configured such fully qualified route, but a + * summary route (eg. 0.0.0/0 default route). + * - peer SG may have not announced them (DAVA/DUNA). + */ + struct osmo_sccp_addr_entry *entry; + llist_for_each_entry(entry, &s7i->cfg.sccp_address_book, list) { + if (!(entry->addr.presence & OSMO_SCCP_ADDR_T_PC)) + continue; + if (osmo_ss7_pc_is_local(s7i, entry->addr.pc)) + continue; + /* PC was already available: */ + if (ss7_route_table_dpc_is_accessible_skip_as(rtbl, entry->addr.pc, as)) + continue; + /* Try to find if there's an available route via the AS matching this PC. */ + if (!ss7_route_table_dpc_is_accessible_via_as(rtbl, entry->addr.pc, as)) + continue; + LOGPAS(as, DLSS7, LOGL_INFO, "AS became active => address-book pc=%u=%s is now available\n", + entry->addr.pc, osmo_ss7_pointcode_print(s7i, entry->addr.pc)); + aff_pc = htonl(entry->addr.pc); + xua_snm_pc_available(as, &aff_pc, 1, NULL, true); + } } /* onenter call-back responsible of transmitting NTFY to all ASPs in @@ -574,8 +658,11 @@ osmo_fsm_inst_state_chg(fi, XUA_AS_S_DOWN, 0, 0); break; case XUA_ASPAS_ASP_ACTIVE_IND: + asp = data; /* one ASP transitions into ASP-ACTIVE */ osmo_fsm_inst_state_chg(fi, XUA_AS_S_ACTIVE, 0, 0); + if (asp->cfg.role == OSMO_SS7_ASP_ROLE_SG) + as_tx_duna_during_asp_act(xafp->as, asp); break; case XUA_ASPAS_ASP_INACTIVE_IND: inact_ind_pars = data; @@ -618,6 +705,9 @@ /* RFC466 sec 4.3.4.3 ASP Active Procedures*/ if (xafp->as->cfg.mode == OSMO_SS7_AS_TMOD_OVERRIDE) notify_any_other_active_asp_as_inactive(xafp->as, asp); + /* SG role: No need to send DUNA for unknown destinations here + * (see as_tx_duna_during_asp_act()), since the AS was already + * active so the peer should know current status. */ break; case XUA_AS_E_TRANSFER_REQ: /* message for transmission */ @@ -630,15 +720,19 @@ static void xua_as_fsm_pending(struct osmo_fsm_inst *fi, uint32_t event, void *data) { struct xua_as_fsm_priv *xafp = (struct xua_as_fsm_priv *) fi->priv; + struct osmo_ss7_asp *asp; struct xua_as_event_asp_inactive_ind_pars *inact_ind_pars; struct xua_msg *xua; struct osmo_xlm_prim_notify npar; switch (event) { case XUA_ASPAS_ASP_ACTIVE_IND: + asp = data; /* one ASP transitions into ASP-ACTIVE */ osmo_timer_del(&xafp->recovery.t_r); osmo_fsm_inst_state_chg(fi, XUA_AS_S_ACTIVE, 0, 0); + if (asp->cfg.role == OSMO_SS7_ASP_ROLE_SG) + as_tx_duna_during_asp_act(xafp->as, asp); /* push out any pending queued messages */ while (!llist_empty(&xafp->recovery.queued_xua_msgs)) { struct xua_msg *xua;
View file
libosmo-sigtran_2.1.0.126.6318.tar.xz/src/xua_internal.h -> libosmo-sigtran_2.1.0.130.2843.tar.xz/src/xua_internal.h
Changed
@@ -45,6 +45,10 @@ void m3ua_tx_dupu(struct osmo_ss7_asp *asp, const uint32_t *rctx, unsigned int num_rctx, uint32_t dpc, uint16_t user, uint16_t cause, const char *info_str); +void xua_tx_snm_available(struct osmo_ss7_asp *asp, const uint32_t *rctx, unsigned int num_rctx, + const uint32_t *aff_pc, unsigned int num_aff_pc, + const char *info_str, bool available); + void xua_snm_rx_daud(struct osmo_ss7_asp *asp, struct xua_msg *xua); void xua_snm_rx_duna(struct osmo_ss7_asp *asp, struct osmo_ss7_as *as, struct xua_msg *xua); void xua_snm_rx_dava(struct osmo_ss7_asp *asp, struct osmo_ss7_as *as, struct xua_msg *xua);
View file
libosmo-sigtran_2.1.0.126.6318.tar.xz/src/xua_rkm.c -> libosmo-sigtran_2.1.0.130.2843.tar.xz/src/xua_rkm.c
Changed
@@ -219,6 +219,15 @@ /* check if there is already an AS for this routing key */ as = osmo_ss7_as_find_by_rctx(asp->inst, rctx); + + if (!as && !asp->inst->cfg.permit_dyn_rkm_alloc) { + /* not permitted to create dynamic RKM entries */ + LOGPASP(asp, DLSS7, LOGL_NOTICE, "RKM: RCTX %u not found in configuration, and " + "dynamic RKM allocation not permitted; permission denied\n", rctx); + msgb_append_reg_res(resp, rk_id, M3UA_RKM_REG_ERR_PERM_DENIED, 0); + return -1; + } + if (as) { LOGPASP(asp, DLSS7, LOGL_NOTICE, "RKM: Found existing AS for RCTX %u\n", rctx); /* Early return before allocating stuff if no space left: */ @@ -251,7 +260,7 @@ } as->cfg.mode_set_by_peer = true; } - } else if (asp->inst->cfg.permit_dyn_rkm_alloc) { + } else { /* Early return before allocating stuff if no space left: */ if (*nas_idx >= max_nas_idx) { LOGPASP(asp, DLSS7, LOGL_ERROR, "RKM: not enough room for newly assigned AS (max %u AS)\n", @@ -288,12 +297,6 @@ msgb_append_reg_res(resp, rk_id, M3UA_RKM_REG_ERR_CANT_SUPP_UNQ_RT, 0); return -1; } - } else { - /* not permitted to create dynamic RKM entries */ - LOGPASP(asp, DLSS7, LOGL_NOTICE, "RKM: RCTX %u not found in configuration, and " - "dynamic RKM allocation not permitted; permission denied\n", rctx); - msgb_append_reg_res(resp, rk_id, M3UA_RKM_REG_ERR_PERM_DENIED, 0); - return -1; } /* Success: Add just-create AS to connected ASP + report success */
View file
libosmo-sigtran_2.1.0.126.6318.tar.xz/src/xua_snm.c -> libosmo-sigtran_2.1.0.130.2843.tar.xz/src/xua_snm.c
Changed
@@ -67,9 +67,9 @@ return out; } -static void xua_tx_snm_available(struct osmo_ss7_asp *asp, const uint32_t *rctx, unsigned int num_rctx, - const uint32_t *aff_pc, unsigned int num_aff_pc, - const char *info_str, bool available) +void xua_tx_snm_available(struct osmo_ss7_asp *asp, const uint32_t *rctx, unsigned int num_rctx, + const uint32_t *aff_pc, unsigned int num_aff_pc, + const char *info_str, bool available) { switch (asp->cfg.proto) { case OSMO_SS7_ASP_PROT_M3UA:
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.