pespin has uploaded this change for review. ( 
https://gerrit.osmocom.org/c/osmo-sgsn/+/40984?usp=email )


Change subject: Store scu_iups in iu_rnc instead of ue_ctx
......................................................................

Store scu_iups in iu_rnc instead of ue_ctx

All the ue_ctx belong to a given peer RNC, which holds the SCCP User to
talk to it.

Change-Id: I3969af765b7b0d1375b5e6ad8f3f2e9845f939ef
---
M include/osmocom/sgsn/iu_client.h
M include/osmocom/sgsn/iu_rnc.h
M src/sgsn/gprs_ranap.c
M src/sgsn/iu_client.c
M src/sgsn/iu_rnc.c
M src/sgsn/sccp.c
6 files changed, 21 insertions(+), 17 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/osmo-sgsn refs/changes/84/40984/1

diff --git a/include/osmocom/sgsn/iu_client.h b/include/osmocom/sgsn/iu_client.h
index 4e44f03..e32084b 100644
--- a/include/osmocom/sgsn/iu_client.h
+++ b/include/osmocom/sgsn/iu_client.h
@@ -20,7 +20,6 @@
 struct ranap_ue_conn_ctx {
        struct llist_head list; /* item in sgsn_sccp->ue_conn_ctx_list */
        struct ranap_iu_rnc *rnc;
-       struct sgsn_sccp_user_iups *scu_iups;
        uint32_t conn_id;
        int integrity_active;
        struct gprs_ra_id ra_id;
@@ -87,7 +86,7 @@
 int ranap_iu_page_ps2(const char *imsi, const uint32_t *ptmsi, const struct 
osmo_routing_area_id *rai);


-struct ranap_ue_conn_ctx *ue_conn_ctx_alloc(struct ranap_iu_rnc *rnc, struct 
sgsn_sccp_user_iups *scu_iups, uint32_t conn_id);
+struct ranap_ue_conn_ctx *ue_conn_ctx_alloc(struct ranap_iu_rnc *rnc, uint32_t 
conn_id);

 /* freeing the UE will release all resources
  * This will close the SCCP connection connected to the UE */
diff --git a/include/osmocom/sgsn/iu_rnc.h b/include/osmocom/sgsn/iu_rnc.h
index 344337d..55f716b 100644
--- a/include/osmocom/sgsn/iu_rnc.h
+++ b/include/osmocom/sgsn/iu_rnc.h
@@ -24,6 +24,7 @@
        struct llist_head entry;

        struct osmo_rnc_id rnc_id;
+       struct sgsn_sccp_user_iups *scu_iups;
        struct osmo_sccp_addr sccp_addr;

        /* A list of struct iu_lac_rac_entry */
@@ -31,5 +32,6 @@
 };

 struct ranap_iu_rnc *iu_rnc_find_or_create(const struct osmo_rnc_id *rnc_id,
+                                          struct sgsn_sccp_user_iups *scu_iups,
                                           const struct osmo_sccp_addr *addr);
 void iu_rnc_update_rai_seen(struct ranap_iu_rnc *rnc, const struct 
osmo_routing_area_id *rai);
diff --git a/src/sgsn/gprs_ranap.c b/src/sgsn/gprs_ranap.c
index d101a3e..d05cc7b 100644
--- a/src/sgsn/gprs_ranap.c
+++ b/src/sgsn/gprs_ranap.c
@@ -268,7 +268,7 @@
             rab_id, gtp_ip, gtp_tei, use_x213_nsap);

        msg = ranap_new_msg_rab_assign_data(rab_id, gtp_ip, gtp_tei, 
use_x213_nsap);
-       return sgsn_scu_iups_tx_data_req(ue_ctx->scu_iups, ue_ctx->conn_id, 
msg);
+       return sgsn_scu_iups_tx_data_req(ue_ctx->rnc->scu_iups, 
ue_ctx->conn_id, msg);
 }

 int sgsn_ranap_iu_tx_sec_mode_cmd(struct ranap_ue_conn_ctx *uectx, struct 
osmo_auth_vector *vec,
@@ -279,7 +279,7 @@
        /* create RANAP message */
        msg = ranap_new_msg_sec_mod_cmd(vec->ik, send_ck ? vec->ck : NULL,
                        new_key ? RANAP_KeyStatus_new : RANAP_KeyStatus_old);
-       return sgsn_scu_iups_tx_data_req(uectx->scu_iups, uectx->conn_id, msg);
+       return sgsn_scu_iups_tx_data_req(uectx->rnc->scu_iups, uectx->conn_id, 
msg);
 }

 int sgsn_ranap_iu_tx_common_id(struct ranap_ue_conn_ctx *uectx, const char 
*imsi)
@@ -290,7 +290,7 @@
             uectx->conn_id);

        msg = ranap_new_msg_common_id(imsi);
-       return sgsn_scu_iups_tx_data_req(uectx->scu_iups, uectx->conn_id, msg);
+       return sgsn_scu_iups_tx_data_req(uectx->rnc->scu_iups, uectx->conn_id, 
msg);
 }

 /* Send a paging command down a given SCCP User. tmsi and paging_cause are
@@ -326,7 +326,7 @@
        msg = ranap_new_msg_dt(sapi, msg_nas->data, msgb_length(msg_nas));
        msgb_free(msg_nas);

-       return sgsn_scu_iups_tx_data_req(uectx->scu_iups, uectx->conn_id, msg);
+       return sgsn_scu_iups_tx_data_req(uectx->rnc->scu_iups, uectx->conn_id, 
msg);
 }

 /* Send CL RANAP message over SCCP: */
@@ -368,7 +368,7 @@
                cause = &default_cause;

        msg = ranap_new_msg_iu_rel_cmd(cause);
-       return sgsn_scu_iups_tx_data_req(uectx->scu_iups, uectx->conn_id, msg);
+       return sgsn_scu_iups_tx_data_req(uectx->rnc->scu_iups, uectx->conn_id, 
msg);
 }

 void sgsn_ranap_iu_tx_release_free(struct ranap_ue_conn_ctx *ctx,
@@ -428,11 +428,11 @@
        gprs_rai_to_osmo(&ra_id2, &ra_id);

        /* Make sure we know the RNC Id and LAC+RAC coming in on this 
connection. */
-       rnc = iu_rnc_find_or_create(&rnc_id, rem_sccp_addr);
+       rnc = iu_rnc_find_or_create(&rnc_id, scu_iups, rem_sccp_addr);
        OSMO_ASSERT(rnc);
        iu_rnc_update_rai_seen(rnc, &ra_id2);

-       ue = ue_conn_ctx_alloc(rnc, scu_iups, conn_id);
+       ue = ue_conn_ctx_alloc(rnc, conn_id);
        OSMO_ASSERT(ue);
        ue->ra_id = ra_id;

@@ -711,7 +711,7 @@
                return sgsn_ranap_iu_tx_error_ind(scu_iups, 
&ud_prim->calling_addr, &cause);
        }

-       rnc = iu_rnc_find_or_create(&rnc_id, &ud_prim->calling_addr);
+       rnc = iu_rnc_find_or_create(&rnc_id, scu_iups, &ud_prim->calling_addr);
        OSMO_ASSERT(rnc);

        /* send reset response */
diff --git a/src/sgsn/iu_client.c b/src/sgsn/iu_client.c
index d392152..21c0470 100644
--- a/src/sgsn/iu_client.c
+++ b/src/sgsn/iu_client.c
@@ -78,19 +78,18 @@
        global_iu_event(ctx, RANAP_IU_EVENT_IU_RELEASE, NULL);
 }

-struct ranap_ue_conn_ctx *ue_conn_ctx_alloc(struct ranap_iu_rnc *rnc, struct 
sgsn_sccp_user_iups *scu_iups, uint32_t conn_id)
+struct ranap_ue_conn_ctx *ue_conn_ctx_alloc(struct ranap_iu_rnc *rnc, uint32_t 
conn_id)
 {
        struct ranap_ue_conn_ctx *ctx = talloc_zero(sgsn, struct 
ranap_ue_conn_ctx);
 
        ctx->rnc = rnc;
-       ctx->scu_iups = scu_iups;
        ctx->conn_id = conn_id;
        ctx->notification = true;
        ctx->free_on_release = false;
        osmo_timer_setup(&ctx->release_timeout,
                         ue_conn_ctx_release_timeout_cb,
                         ctx);
-       llist_add(&ctx->list, &scu_iups->ue_conn_ctx_list);
+       llist_add(&ctx->list, &rnc->scu_iups->ue_conn_ctx_list);

        return ctx;
 }
@@ -101,7 +100,7 @@
                return;

        osmo_timer_del(&ue_ctx->release_timeout);
-       osmo_sccp_tx_disconn(ue_ctx->scu_iups->scu, ue_ctx->conn_id, NULL, 0);
+       osmo_sccp_tx_disconn(ue_ctx->rnc->scu_iups->scu, ue_ctx->conn_id, NULL, 
0);
        llist_del(&ue_ctx->list);
        talloc_free(ue_ctx);
 }
diff --git a/src/sgsn/iu_rnc.c b/src/sgsn/iu_rnc.c
index 8bb5bc1..36350ff 100644
--- a/src/sgsn/iu_rnc.c
+++ b/src/sgsn/iu_rnc.c
@@ -43,7 +43,9 @@
 #include <osmocom/sgsn/sccp.h>
 #include <osmocom/sgsn/sgsn.h>

-static struct ranap_iu_rnc *iu_rnc_alloc(const struct osmo_rnc_id *rnc_id, 
const struct osmo_sccp_addr *addr)
+static struct ranap_iu_rnc *iu_rnc_alloc(const struct osmo_rnc_id *rnc_id,
+                                        struct sgsn_sccp_user_iups *scu_iups,
+                                        const struct osmo_sccp_addr *addr)
 {
        struct ranap_iu_rnc *rnc = talloc_zero(sgsn, struct ranap_iu_rnc);
        OSMO_ASSERT(rnc);
@@ -51,6 +53,7 @@
        INIT_LLIST_HEAD(&rnc->lac_rac_list);

        rnc->rnc_id = *rnc_id;
+       rnc->scu_iups = scu_iups;
        rnc->sccp_addr = *addr;
        llist_add(&rnc->entry, &sgsn->rnc_list);

@@ -71,6 +74,7 @@
 }

 struct ranap_iu_rnc *iu_rnc_find_or_create(const struct osmo_rnc_id *rnc_id,
+                                          struct sgsn_sccp_user_iups *scu_iups,
                                           const struct osmo_sccp_addr *addr)
 {
        struct ranap_iu_rnc *rnc;
@@ -84,7 +88,7 @@
                        rnc->sccp_addr = *addr;
                }
        } else {
-               rnc = iu_rnc_alloc(rnc_id, addr);
+               rnc = iu_rnc_alloc(rnc_id, scu_iups, addr);
        }
        return rnc;
 }
diff --git a/src/sgsn/sccp.c b/src/sgsn/sccp.c
index b1291a3..1eed08a 100644
--- a/src/sgsn/sccp.c
+++ b/src/sgsn/sccp.c
@@ -150,7 +150,7 @@
        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(ue->scu_iups, conn_id);
+       ue = ue_conn_ctx_find(ue->rnc->scu_iups, conn_id);
        if (!ue)
                return;
        if (ue->free_on_release)

--
To view, visit https://gerrit.osmocom.org/c/osmo-sgsn/+/40984?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: I3969af765b7b0d1375b5e6ad8f3f2e9845f939ef
Gerrit-Change-Number: 40984
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <[email protected]>

Reply via email to