lynxis lazus has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-sgsn/+/40691?usp=email )
Change subject: routing area: on alloc, check if RA already exists
......................................................................
routing area: on alloc, check if RA already exists
If the RA is the same, return the RA, but if the ran type is different,
return NULL.
Change-Id: I6955a09d9d8f3ba4dc3a14d7ed5cd9798d929c61
---
M src/sgsn/gprs_routing_area.c
1 file changed, 15 insertions(+), 1 deletion(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-sgsn refs/changes/91/40691/1
diff --git a/src/sgsn/gprs_routing_area.c b/src/sgsn/gprs_routing_area.c
index 3c84008..5c465d9 100644
--- a/src/sgsn/gprs_routing_area.c
+++ b/src/sgsn/gprs_routing_area.c
@@ -80,7 +80,21 @@
struct sgsn_ra *sgsn_ra_alloc(const struct osmo_routing_area_id *rai, enum sgsn_ra_ran_type ran_type)
{
- struct sgsn_ra *ra;
+ struct sgsn_ra *ra = sgsn_ra_get_ra(rai);
+
+ if (ra) {
+ if (ra->ran_type == ran_type) {
+ LOGP(DRA, LOGL_ERROR, "Trying to create an already existing RA %s with the same ran type %s. Using old RA.\n",
+ osmo_rai_name2(rai), get_value_string(sgsn_ra_ran_type_names, ra->ran_type));
+
+ return ra;
+ }
+
+ LOGP(DRA, LOGL_ERROR, "Failed to create an already existing RA %s with a different ran type %s.\n",
+ osmo_rai_name2(rai), get_value_string(sgsn_ra_ran_type_names, ra->ran_type));
+ return NULL;
+ }
+
ra = talloc_zero(sgsn->routing_area, struct sgsn_ra);
if (!ra)
return NULL;
--
To view, visit https://gerrit.osmocom.org/c/osmo-sgsn/+/40691?usp=email
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: newchange
Gerrit-Project: osmo-sgsn
Gerrit-Branch: master
Gerrit-Change-Id: I6955a09d9d8f3ba4dc3a14d7ed5cd9798d929c61
Gerrit-Change-Number: 40691
Gerrit-PatchSet: 1
Gerrit-Owner: lynxis lazus <lynxis(a)fe80.eu>
lynxis lazus has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-sgsn/+/40688?usp=email )
Change subject: routing area: introduce ran_type on the RA
......................................................................
routing area: introduce ran_type on the RA
A Routing Area should be unique identified by the RAI.
Following this, it is forbidden to have a RAI which is valid
in both, GERAN and UTRAN.
Change-Id: I59c35f1a4912ff11574bb31e4fe424816993548c
---
M include/osmocom/sgsn/gprs_routing_area.h
M src/sgsn/gprs_routing_area.c
M tests/gprs_routing_area/gprs_routing_area_test.c
3 files changed, 73 insertions(+), 20 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-sgsn refs/changes/88/40688/1
diff --git a/include/osmocom/sgsn/gprs_routing_area.h b/include/osmocom/sgsn/gprs_routing_area.h
index caaed47..6629169 100644
--- a/include/osmocom/sgsn/gprs_routing_area.h
+++ b/include/osmocom/sgsn/gprs_routing_area.h
@@ -6,6 +6,7 @@
#include <stdint.h>
#include <osmocom/core/linuxlist.h>
+#include <osmocom/core/utils.h>
#include <osmocom/gsm/gsm23003.h>
struct sgsn_instance;
@@ -16,18 +17,35 @@
struct llist_head ra_list;
};
+enum sgsn_ra_ran_type {
+ RA_TYPE_GERAN_Gb,
+ RA_TYPE_UTRAN_Iu,
+};
+
+extern const struct value_string sgsn_ra_ran_type_names[];
+
struct sgsn_ra {
/* Entry in sgsn_ra_global->ra_list */
struct llist_head list;
struct osmo_routing_area_id rai;
- /* cells contains a list of sgsn_ra_cells which are alive */
- struct llist_head cells;
-};
-enum sgsn_ra_ran_type {
- RA_TYPE_GERAN_Gb,
- RA_TYPE_UTRAN_Iu,
+ /* For GERAN: every PCU is connected to the SGSN. It allows the SGSN to know every single cell
+ * and for routing, the SGSN must know to which PCU a given cell is connected.
+ * It is possible that 2x PCU serves the same Routing Area
+ *
+ * For UTRAN: only the RNC (HNB via HNBGW) is communicating with the SGSN.
+ * The SGSN doesn't know every cell, because they aren't accepted individual by the SGSN.
+ * The SGSN only "knows" RAI/SAI if they has been used. In the future it would be a good idea to
+ * allow configuring RA in the vty/config as well.
+ * Similar to the GERAN Cell, but iu_client doesn't notify us for every given SAI, only for RAC.
+ * Further the SGSN doesn't get informed about Service Area and can't relate the SAI to a given UE.
+ * For UTRAN only do a LAC/RAC <> RNC relation and don't have a specific cell relation.
+ */
+ enum sgsn_ra_ran_type ran_type;
+
+ /* GERAN/UTRAN: cells contains a list of sgsn_ra_cells which are alive */
+ struct llist_head cells;
};
struct sgsn_ra_cell {
@@ -55,7 +73,7 @@
void sgsn_ra_init(struct sgsn_instance *inst);
-struct sgsn_ra *sgsn_ra_alloc(const struct osmo_routing_area_id *rai);
+struct sgsn_ra *sgsn_ra_alloc(const struct osmo_routing_area_id *rai, enum sgsn_ra_ran_type ran_type);
void sgsn_ra_free(struct sgsn_ra *ra);
struct sgsn_ra_cell *sgsn_ra_cell_alloc_geran(struct sgsn_ra *ra, uint16_t cell_id, uint16_t nsei, uint16_t bvci);
void sgsn_ra_cell_free(struct sgsn_ra_cell *cell);
@@ -72,6 +90,7 @@
struct sgsn_ra_cell *sgsn_ra_get_cell_by_ra(const struct sgsn_ra *ra, uint16_t cell_id);
struct sgsn_ra_cell *sgsn_ra_get_cell_by_gb(uint16_t nsei, uint16_t bvci);
struct sgsn_ra *sgsn_ra_get_ra(const struct osmo_routing_area_id *ra_id);
+struct sgsn_ra *sgsn_ra_get_ra_geran(const struct osmo_routing_area_id *ra_id);
/*
diff --git a/src/sgsn/gprs_routing_area.c b/src/sgsn/gprs_routing_area.c
index 67b15ae..23847f2 100644
--- a/src/sgsn/gprs_routing_area.c
+++ b/src/sgsn/gprs_routing_area.c
@@ -23,6 +23,7 @@
#include <osmocom/core/linuxlist.h>
#include <osmocom/core/logging.h>
#include <osmocom/core/rate_ctr.h>
+#include <osmocom/core/utils.h>
#include <osmocom/gsm/gsm48.h>
#include <osmocom/sgsn/debug.h>
#include <osmocom/sgsn/gprs_bssgp.h>
@@ -31,6 +32,11 @@
#include <osmocom/sgsn/gprs_routing_area.h>
+const struct value_string sgsn_ra_ran_type_names[] = {
+ { RA_TYPE_GERAN_Gb, "GERAN_Gb"},
+ { RA_TYPE_UTRAN_Iu, "UTRAN_Iu"},
+};
+
static void _sgsn_ra_cell_free(struct sgsn_ra_cell *cell, bool drop_empty_ra)
{
struct sgsn_ra *ra;
@@ -72,7 +78,7 @@
talloc_free(ra);
}
-struct sgsn_ra *sgsn_ra_alloc(const struct osmo_routing_area_id *rai)
+struct sgsn_ra *sgsn_ra_alloc(const struct osmo_routing_area_id *rai, enum sgsn_ra_ran_type ran_type)
{
struct sgsn_ra *ra;
ra = talloc_zero(sgsn->routing_area, struct sgsn_ra);
@@ -81,6 +87,7 @@
INIT_LLIST_HEAD(&ra->cells);
ra->rai = *rai;
+ ra->ran_type = ran_type;
llist_add(&ra->list, &sgsn->routing_area->ra_list);
return ra;
}
@@ -115,6 +122,19 @@
return NULL;
}
+struct sgsn_ra *sgsn_ra_get_ra_geran(const struct osmo_routing_area_id *ra_id)
+{
+ struct sgsn_ra *ra = sgsn_ra_get_ra(ra_id);
+
+ if (!ra)
+ return ra;
+
+ if (ra->ran_type == RA_TYPE_GERAN_Gb)
+ return ra;
+
+ return NULL;
+}
+
struct sgsn_ra_cell *sgsn_ra_get_cell_by_gb(uint16_t nsei, uint16_t bvci)
{
struct sgsn_ra *ra;
@@ -125,6 +145,9 @@
return NULL;
llist_for_each_entry(ra, &sgsn->routing_area->ra_list, list) {
+ if (ra->ran_type != RA_TYPE_GERAN_Gb)
+ continue;
+
llist_for_each_entry(cell, &ra->cells, list) {
if (cell->ran_type != RA_TYPE_GERAN_Gb)
continue;
@@ -174,10 +197,14 @@
return sgsn_ra_foreach_cell(ra, cb, cb_data);
}
+/* valid for GERAN */
struct sgsn_ra_cell *sgsn_ra_get_cell_by_ra(const struct sgsn_ra *ra, uint16_t cell_id)
{
struct sgsn_ra_cell *cell;
+ if (ra->ran_type != RA_TYPE_GERAN_Gb)
+ return NULL;
+
llist_for_each_entry(cell, &ra->cells, list) {
if (cell->cell_id == cell_id)
return cell;
@@ -186,6 +213,7 @@
return NULL;
}
+/* valid for GERAN */
struct sgsn_ra_cell *sgsn_ra_get_cell_by_lai(const struct osmo_location_area_id *lai, uint16_t cell_id)
{
struct sgsn_ra *ra;
@@ -194,6 +222,9 @@
/* This is a little bit in-efficient. A more performance way, but more complex would
* adding a llist for LAC on top of the routing areas */
llist_for_each_entry(ra, &sgsn->routing_area->ra_list, list) {
+ if (ra->ran_type != RA_TYPE_GERAN_Gb)
+ continue;
+
if (osmo_lai_cmp(&ra->rai.lac, lai) != 0)
continue;
@@ -206,7 +237,7 @@
return NULL;
}
-/*! Return the cell by searching for the RA, when found, search the cell within the RA
+/*! Return the GERAN cell by searching for the RA, when found, search the cell within the RA
*
* \param cgi_ps
* \return the cell or NULL if not found
@@ -217,7 +248,7 @@
OSMO_ASSERT(cgi_ps);
- ra = sgsn_ra_get_ra(&cgi_ps->rai);
+ ra = sgsn_ra_get_ra_geran(&cgi_ps->rai);
if (!ra)
return NULL;
@@ -246,9 +277,10 @@
OSMO_ASSERT(cgi_ps);
/* TODO: do we have to move all MS to GMM IDLE state when this happens for a alive cell which got reseted? */
- ra = sgsn_ra_get_ra(&cgi_ps->rai);
+ ra = sgsn_ra_get_ra_geran(&cgi_ps->rai);
if (!ra) {
- ra = sgsn_ra_alloc(&cgi_ps->rai);
+ /* TODO: check for UTRAN rai when introducing UTRAN support */
+ ra = sgsn_ra_alloc(&cgi_ps->rai, RA_TYPE_GERAN_Gb);
if (!ra)
return -ENOMEM;
ra_created = true;
@@ -312,6 +344,9 @@
bool found = false;
llist_for_each_entry_safe(ra, ra2, &sgsn->routing_area->ra_list, list) {
+ if (ra->ran_type != RA_TYPE_GERAN_Gb)
+ continue;
+
llist_for_each_entry_safe(cell, cell2, &ra->cells, list) {
if (cell->ran_type != RA_TYPE_GERAN_Gb)
continue;
@@ -324,7 +359,6 @@
if (llist_empty(&ra->cells))
sgsn_ra_free(ra);
-
}
return found ? 0 : -ENOENT;
@@ -338,7 +372,7 @@
rate_ctr_inc(rate_ctr_group_get_ctr(mmctx->ctrg, GMM_CTR_PAGING_PS));
- ra = sgsn_ra_get_ra(ra_id);
+ ra = sgsn_ra_get_ra_geran(ra_id);
if (!ra)
return -ENOENT;
diff --git a/tests/gprs_routing_area/gprs_routing_area_test.c b/tests/gprs_routing_area/gprs_routing_area_test.c
index e1aec0f..6021d81 100644
--- a/tests/gprs_routing_area/gprs_routing_area_test.c
+++ b/tests/gprs_routing_area/gprs_routing_area_test.c
@@ -75,7 +75,7 @@
printf("Testing Routing Area create/free\n");
sgsn = sgsn_instance_alloc(tall_sgsn_ctx);
- ra = sgsn_ra_alloc(&raid);
+ ra = sgsn_ra_alloc(&raid, RA_TYPE_GERAN_Gb);
OSMO_ASSERT(ra);
OSMO_ASSERT(llist_count(&sgsn->routing_area->ra_list) == 1);
@@ -105,7 +105,7 @@
printf("Testing Routing Area create/free\n");
sgsn = sgsn_instance_alloc(tall_sgsn_ctx);
- ra = sgsn_ra_alloc(&raid);
+ ra = sgsn_ra_alloc(&raid, RA_TYPE_GERAN_Gb);
OSMO_ASSERT(ra);
OSMO_ASSERT(llist_count(&sgsn->routing_area->ra_list) == 1);
@@ -117,7 +117,7 @@
sgsn_ra_free(ra);
OSMO_ASSERT(llist_empty(&sgsn->routing_area->ra_list));
- ra = sgsn_ra_alloc(&raid);
+ ra = sgsn_ra_alloc(&raid, RA_TYPE_GERAN_Gb);
OSMO_ASSERT(ra);
OSMO_ASSERT(llist_count(&sgsn->routing_area->ra_list) == 1);
@@ -160,7 +160,7 @@
printf("Testing Routing Area find\n");
sgsn = sgsn_instance_alloc(tall_sgsn_ctx);
- ra_a = sgsn_ra_alloc(&ra_id);
+ ra_a = sgsn_ra_alloc(&ra_id, RA_TYPE_GERAN_Gb);
OSMO_ASSERT(ra_a);
OSMO_ASSERT(llist_count(&sgsn->routing_area->ra_list) == 1);
@@ -194,7 +194,7 @@
cgi.cell_identity = cell_id_not_found;
cgi_ps.cell_identity = cell_id_not_found;
- ra_a = sgsn_ra_alloc(&ra_id);
+ ra_a = sgsn_ra_alloc(&ra_id, RA_TYPE_GERAN_Gb);
OSMO_ASSERT(ra_a);
OSMO_ASSERT(llist_count(&sgsn->routing_area->ra_list) == 1);
@@ -263,7 +263,7 @@
printf("Testing Routing Area BSSGP BVC RESET IND\n");
sgsn = sgsn_instance_alloc(tall_sgsn_ctx);
- ra_a = sgsn_ra_alloc(&ra_id);
+ ra_a = sgsn_ra_alloc(&ra_id, RA_TYPE_GERAN_Gb);
OSMO_ASSERT(ra_a);
OSMO_ASSERT(llist_count(&sgsn->routing_area->ra_list) == 1);
OSMO_ASSERT(llist_count(&ra_a->cells) == 0);
--
To view, visit https://gerrit.osmocom.org/c/osmo-sgsn/+/40688?usp=email
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: newchange
Gerrit-Project: osmo-sgsn
Gerrit-Branch: master
Gerrit-Change-Id: I59c35f1a4912ff11574bb31e4fe424816993548c
Gerrit-Change-Number: 40688
Gerrit-PatchSet: 1
Gerrit-Owner: lynxis lazus <lynxis(a)fe80.eu>
pespin has submitted this change. ( https://gerrit.osmocom.org/c/osmo-iuh/+/40643?usp=email )
Change subject: iu_client: Initial N-PCSTATE.ind support
......................................................................
iu_client: Initial N-PCSTATE.ind support
N-PCSTATE.ind is sent by SCCP layer to the SCCP-User (eg. RANAP/Iu) to
indicate an update of an availability status of a remote SS7 Point Code.
Upper layer should take into account that information to figure out
that the peer becamse available (eg. start RESET procedure) or
unavailable (eg. tear down upper layer connections/state).
There's currently no way to submit the indication to upper layers (app).
It's not worth changing the API now since anyway sole user of this API
(osmo-sgsn) will actually merged the implementation directly and get rid
of this layer at some point.
Related: OS#5487
Related: OS#3403
Change-Id: I36818ca9d2ef42a68698e5c3b66367207d177b67
---
M src/iu_client.c
1 file changed, 126 insertions(+), 9 deletions(-)
Approvals:
pespin: Looks good to me, approved
Jenkins Builder: Verified
diff --git a/src/iu_client.c b/src/iu_client.c
index 90fd1dc..75be457 100644
--- a/src/iu_client.c
+++ b/src/iu_client.c
@@ -1004,10 +1004,127 @@
return &prim->oph;
}
+static void ue_ctx_link_invalidated_free(struct ranap_ue_conn_ctx *ue)
+{
+ uint32_t conn_id = ue->conn_id;
+ global_iu_event(ue, RANAP_IU_EVENT_LINK_INVALIDATED, NULL);
+
+ /* A RANAP_IU_EVENT_LINK_INVALIDATED, can lead to a free */
+ ue = ue_conn_ctx_find(conn_id);
+ if (!ue)
+ return;
+ if (ue->free_on_release)
+ ranap_iu_free_ue(ue);
+}
+
+static void handle_pcstate_ind(struct osmo_ss7_instance *cs7, const struct osmo_scu_pcstate_param *pcst)
+{
+ struct osmo_sccp_addr rem_addr;
+ struct ranap_iu_rnc *rnc;
+ bool connected;
+ bool disconnected;
+
+ LOGPIU(LOGL_DEBUG, "N-PCSTATE ind: affected_pc=%u=%s sp_status=%s remote_sccp_status=%s\n",
+ pcst->affected_pc, osmo_ss7_pointcode_print(cs7, pcst->affected_pc),
+ osmo_sccp_sp_status_name(pcst->sp_status),
+ osmo_sccp_rem_sccp_status_name(pcst->remote_sccp_status));
+
+ osmo_sccp_make_addr_pc_ssn(&rem_addr, pcst->affected_pc, OSMO_SCCP_SSN_RANAP);
+
+ /* See if this marks the point code to have become available, or to have been lost.
+ *
+ * I want to detect two events:
+ * - connection event (both indicators say PC is reachable).
+ * - disconnection event (at least one indicator says the PC is not reachable).
+ *
+ * There are two separate incoming indicators with various possible values -- the incoming events can be:
+ *
+ * - neither connection nor disconnection indicated -- just indicating congestion
+ * connected == false, disconnected == false --> do nothing.
+ * - both incoming values indicate that we are connected
+ * --> trigger connected
+ * - both indicate we are disconnected
+ * --> trigger disconnected
+ * - one value indicates 'connected', the other indicates 'disconnected'
+ * --> trigger disconnected
+ *
+ * Congestion could imply that we're connected, but it does not indicate
+ * that a PC's reachability changed, so no need to trigger on that.
+ */
+ connected = false;
+ disconnected = false;
+
+ switch (pcst->sp_status) {
+ case OSMO_SCCP_SP_S_ACCESSIBLE:
+ connected = true;
+ break;
+ case OSMO_SCCP_SP_S_INACCESSIBLE:
+ disconnected = true;
+ break;
+ default:
+ case OSMO_SCCP_SP_S_CONGESTED:
+ /* Neither connecting nor disconnecting */
+ break;
+ }
+
+ switch (pcst->remote_sccp_status) {
+ case OSMO_SCCP_REM_SCCP_S_AVAILABLE:
+ if (!disconnected)
+ connected = true;
+ break;
+ case OSMO_SCCP_REM_SCCP_S_UNAVAILABLE_UNKNOWN:
+ case OSMO_SCCP_REM_SCCP_S_UNEQUIPPED:
+ case OSMO_SCCP_REM_SCCP_S_INACCESSIBLE:
+ disconnected = true;
+ connected = false;
+ break;
+ default:
+ case OSMO_SCCP_REM_SCCP_S_CONGESTED:
+ /* Neither connecting nor disconnecting */
+ break;
+ }
+
+ if (disconnected) {
+ /* A previously usable RNC has disconnected. Signal to user that all related ue_ctx are invalid. */
+ llist_for_each_entry(rnc, &rnc_list, entry) {
+ struct ranap_ue_conn_ctx *ue_ctx, *ue_ctx_tmp;
+ if (osmo_sccp_addr_cmp(&rnc->sccp_addr, &rem_addr, OSMO_SCCP_ADDR_T_SSN | OSMO_SCCP_ADDR_T_PC))
+ continue;
+ LOGPIU(LOGL_NOTICE,
+ "RNC %s now unreachable: N-PCSTATE ind: pc=%u=%s sp_status=%s remote_sccp_status=%s\n",
+ osmo_rnc_id_name(&rnc->rnc_id),
+ pcst->affected_pc, osmo_ss7_pointcode_print(cs7, pcst->affected_pc),
+ osmo_sccp_sp_status_name(pcst->sp_status),
+ osmo_sccp_rem_sccp_status_name(pcst->remote_sccp_status));
+ llist_for_each_entry_safe(ue_ctx, ue_ctx_tmp, &ue_conn_ctx_list, list) {
+ if (ue_ctx->rnc != rnc)
+ continue;
+ ue_ctx_link_invalidated_free(ue_ctx);
+ }
+ /* TODO: ideally we'd have some event to submit to upper
+ * layer to inform about peer availability change... */
+ }
+ } else if (connected) {
+ llist_for_each_entry(rnc, &rnc_list, entry) {
+ if (osmo_sccp_addr_cmp(&rnc->sccp_addr, &rem_addr, OSMO_SCCP_ADDR_T_SSN | OSMO_SCCP_ADDR_T_PC))
+ continue;
+ LOGPIU(LOGL_NOTICE,
+ "RNC %s now available: N-PCSTATE ind: pc=%u=%s sp_status=%s remote_sccp_status=%s\n",
+ osmo_rnc_id_name(&rnc->rnc_id),
+ pcst->affected_pc, osmo_ss7_pointcode_print(cs7, pcst->affected_pc),
+ osmo_sccp_sp_status_name(pcst->sp_status),
+ osmo_sccp_rem_sccp_status_name(pcst->remote_sccp_status));
+ /* TODO: ideally we'd have some event to submit to upper
+ * layer to inform about peer availability change... */
+ }
+ }
+}
+
static int sccp_sap_up(struct osmo_prim_hdr *oph, void *_scu)
{
struct osmo_sccp_user *scu = _scu;
struct osmo_scu_prim *prim = (struct osmo_scu_prim *) oph;
+ struct osmo_sccp_instance *sccp = osmo_sccp_get_sccp(scu);
struct osmo_prim_hdr *resp = NULL;
int rc = -1;
struct ranap_ue_conn_ctx *ue;
@@ -1059,15 +1176,7 @@
ue = ue_conn_ctx_find(conn_id);
if (!ue)
break;
-
- global_iu_event(ue, RANAP_IU_EVENT_LINK_INVALIDATED, NULL);
-
- /* A RANAP_IU_EVENT_LINK_INVALIDATED, can lead to a free */
- ue = ue_conn_ctx_find(conn_id);
- if (!ue)
- break;
- if (ue->free_on_release)
- ranap_iu_free_ue(ue);
+ ue_ctx_link_invalidated_free(ue);
break;
case OSMO_PRIM(OSMO_SCU_PRIM_N_DATA, PRIM_OP_INDICATION):
/* connection-oriented data received */
@@ -1100,6 +1209,14 @@
osmo_hexdump(msgb_l2(oph->msg), msgb_l2len(oph->msg)));
rc = ranap_cn_rx_cl(cn_ranap_handle_cl, prim, msgb_l2(oph->msg), msgb_l2len(oph->msg));
break;
+ case OSMO_PRIM(OSMO_SCU_PRIM_N_PCSTATE, PRIM_OP_INDICATION):
+ handle_pcstate_ind(osmo_sccp_get_ss7(sccp), &prim->u.pcstate);
+ break;
+ case OSMO_PRIM(OSMO_SCU_PRIM_N_STATE, PRIM_OP_INDICATION):
+ LOGPIU(LOGL_DEBUG, "SCCP-User-SAP: Ignoring %s.%s\n",
+ osmo_scu_prim_type_name(oph->primitive),
+ get_value_string(osmo_prim_op_names, oph->operation));
+ break;
default:
break;
}
--
To view, visit https://gerrit.osmocom.org/c/osmo-iuh/+/40643?usp=email
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: merged
Gerrit-Project: osmo-iuh
Gerrit-Branch: master
Gerrit-Change-Id: I36818ca9d2ef42a68698e5c3b66367207d177b67
Gerrit-Change-Number: 40643
Gerrit-PatchSet: 5
Gerrit-Owner: pespin <pespin(a)sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: fixeria <vyanitskiy(a)sysmocom.de>
Gerrit-Reviewer: lynxis lazus <lynxis(a)fe80.eu>
Gerrit-Reviewer: pespin <pespin(a)sysmocom.de>
Attention is currently required from: fixeria, lynxis lazus, pespin.
Hello Jenkins Builder, fixeria, lynxis lazus,
I'd like you to reexamine a change. Please visit
https://gerrit.osmocom.org/c/osmo-iuh/+/40643?usp=email
to look at the new patch set (#5).
The following approvals got outdated and were removed:
Code-Review+2 by lynxis lazus
The change is no longer submittable: Code-Review is unsatisfied now.
Change subject: iu_client: Initial N-PCSTATE.ind support
......................................................................
iu_client: Initial N-PCSTATE.ind support
N-PCSTATE.ind is sent by SCCP layer to the SCCP-User (eg. RANAP/Iu) to
indicate an update of an availability status of a remote SS7 Point Code.
Upper layer should take into account that information to figure out
that the peer becamse available (eg. start RESET procedure) or
unavailable (eg. tear down upper layer connections/state).
There's currently no way to submit the indication to upper layers (app).
It's not worth changing the API now since anyway sole user of this API
(osmo-sgsn) will actually merged the implementation directly and get rid
of this layer at some point.
Related: OS#5487
Related: OS#3403
Change-Id: I36818ca9d2ef42a68698e5c3b66367207d177b67
---
M src/iu_client.c
1 file changed, 126 insertions(+), 9 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-iuh refs/changes/43/40643/5
--
To view, visit https://gerrit.osmocom.org/c/osmo-iuh/+/40643?usp=email
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: newpatchset
Gerrit-Project: osmo-iuh
Gerrit-Branch: master
Gerrit-Change-Id: I36818ca9d2ef42a68698e5c3b66367207d177b67
Gerrit-Change-Number: 40643
Gerrit-PatchSet: 5
Gerrit-Owner: pespin <pespin(a)sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: fixeria <vyanitskiy(a)sysmocom.de>
Gerrit-Reviewer: lynxis lazus <lynxis(a)fe80.eu>
Gerrit-Attention: pespin <pespin(a)sysmocom.de>
Gerrit-Attention: fixeria <vyanitskiy(a)sysmocom.de>
Gerrit-Attention: lynxis lazus <lynxis(a)fe80.eu>