<p>Harald Welte <strong>merged</strong> this change.</p><p><a href="https://gerrit.osmocom.org/11529">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Jenkins Builder: Verified
  Harald Welte: Looks good to me, approved

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Allocate sgsn_instance with talloc<br><br>Change-Id: I4a83c5799f0dbd5eb762039c6cfba671f6e465be<br>---<br>M include/osmocom/sgsn/gprs_sgsn.h<br>M src/gprs/gprs_sgsn.c<br>M src/gprs/sgsn_main.c<br>3 files changed, 28 insertions(+), 24 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmocom/sgsn/gprs_sgsn.h b/include/osmocom/sgsn/gprs_sgsn.h</span><br><span>index 1913591..cf78766 100644</span><br><span>--- a/include/osmocom/sgsn/gprs_sgsn.h</span><br><span>+++ b/include/osmocom/sgsn/gprs_sgsn.h</span><br><span>@@ -396,7 +396,8 @@</span><br><span> extern struct llist_head sgsn_pdp_ctxts;</span><br><span> </span><br><span> uint32_t sgsn_alloc_ptmsi(void);</span><br><span style="color: hsl(0, 100%, 40%);">-void sgsn_inst_init(void);</span><br><span style="color: hsl(120, 100%, 40%);">+struct sgsn_instance *sgsn_instance_alloc(void *talloc_ctx);</span><br><span style="color: hsl(120, 100%, 40%);">+void sgsn_inst_init(struct sgsn_instance *sgsn);</span><br><span> </span><br><span> char *gprs_pdpaddr2str(uint8_t *pdpa, uint8_t len);</span><br><span> </span><br><span>diff --git a/src/gprs/gprs_sgsn.c b/src/gprs/gprs_sgsn.c</span><br><span>index bac7325..01f039a 100644</span><br><span>--- a/src/gprs/gprs_sgsn.c</span><br><span>+++ b/src/gprs/gprs_sgsn.c</span><br><span>@@ -32,6 +32,7 @@</span><br><span> #include <osmocom/gsm/protocol/gsm_04_08_gprs.h></span><br><span> #include <osmocom/gsm/apn.h></span><br><span> #include <osmocom/gsm/gsm_utils.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/gsm/gsup.h></span><br><span> </span><br><span> #include <osmocom/sgsn/gprs_subscriber.h></span><br><span> #include <osmocom/sgsn/debug.h></span><br><span>@@ -978,7 +979,17 @@</span><br><span>    osmo_timer_schedule(&sgsn->llme_timer, GPRS_LLME_CHECK_TICK, 0);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-void sgsn_inst_init()</span><br><span style="color: hsl(120, 100%, 40%);">+struct sgsn_instance *sgsn_instance_alloc(void *talloc_ctx)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ struct sgsn_instance *inst;</span><br><span style="color: hsl(120, 100%, 40%);">+   inst = talloc_zero(talloc_ctx, struct sgsn_instance);</span><br><span style="color: hsl(120, 100%, 40%);">+ inst->cfg.gtp_statedir = talloc_strdup(inst, "./");</span><br><span style="color: hsl(120, 100%, 40%);">+      inst->cfg.auth_policy = SGSN_AUTH_POLICY_CLOSED;</span><br><span style="color: hsl(120, 100%, 40%);">+   inst->cfg.gsup_server_port = OSMO_GSUP_PORT;</span><br><span style="color: hsl(120, 100%, 40%);">+       return inst;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+void sgsn_inst_init(struct sgsn_instance *sgsn)</span><br><span> {</span><br><span>      osmo_timer_setup(&sgsn->llme_timer, sgsn_llme_check_cb, NULL);</span><br><span>        osmo_timer_schedule(&sgsn->llme_timer, GPRS_LLME_CHECK_TICK, 0);</span><br><span>diff --git a/src/gprs/sgsn_main.c b/src/gprs/sgsn_main.c</span><br><span>index a17d925..1c76d6f 100644</span><br><span>--- a/src/gprs/sgsn_main.c</span><br><span>+++ b/src/gprs/sgsn_main.c</span><br><span>@@ -40,8 +40,6 @@</span><br><span> #include <osmocom/core/logging.h></span><br><span> #include <osmocom/core/stats.h></span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-#include <osmocom/gsm/gsup.h></span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> #include <osmocom/gprs/gprs_ns.h></span><br><span> #include <osmocom/gprs/gprs_bssgp.h></span><br><span> </span><br><span>@@ -90,15 +88,8 @@</span><br><span> #define CONFIG_FILE_DEFAULT "osmo-sgsn.cfg"</span><br><span> #define CONFIG_FILE_LEGACY "osmo_sgsn.cfg"</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static struct sgsn_instance sgsn_inst = {</span><br><span style="color: hsl(0, 100%, 40%);">-     .config_file = NULL,</span><br><span style="color: hsl(0, 100%, 40%);">-    .cfg = {</span><br><span style="color: hsl(0, 100%, 40%);">-                .gtp_statedir = "./",</span><br><span style="color: hsl(0, 100%, 40%);">-         .auth_policy = SGSN_AUTH_POLICY_CLOSED,</span><br><span style="color: hsl(0, 100%, 40%);">-         .gsup_server_port = OSMO_GSUP_PORT,</span><br><span style="color: hsl(0, 100%, 40%);">-     },</span><br><span style="color: hsl(0, 100%, 40%);">-};</span><br><span style="color: hsl(0, 100%, 40%);">-struct sgsn_instance *sgsn = &sgsn_inst;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+struct sgsn_instance *sgsn;</span><br><span> </span><br><span> /* call-back function for the NS protocol */</span><br><span> static int sgsn_ns_cb(enum gprs_ns_evt event, struct gprs_nsvc *nsvc,</span><br><span>@@ -261,7 +252,7 @@</span><br><span>                   daemonize = 1;</span><br><span>                       break;</span><br><span>               case 'c':</span><br><span style="color: hsl(0, 100%, 40%);">-                       sgsn_inst.config_file = strdup(optarg);</span><br><span style="color: hsl(120, 100%, 40%);">+                       osmo_talloc_replace_string(sgsn, &sgsn->config_file, optarg);</span><br><span>                         break;</span><br><span>               case 'T':</span><br><span>                    log_set_print_timestamp(osmo_stderr_target, 1);</span><br><span>@@ -376,6 +367,7 @@</span><br><span> </span><br><span>    srand(time(NULL));</span><br><span>   tall_sgsn_ctx = talloc_named_const(NULL, 0, "osmo_sgsn");</span><br><span style="color: hsl(120, 100%, 40%);">+   sgsn = sgsn_instance_alloc(tall_sgsn_ctx);</span><br><span>   msgb_talloc_ctx_init(tall_sgsn_ctx, 0);</span><br><span>      vty_info.tall_ctx = tall_sgsn_ctx;</span><br><span> </span><br><span>@@ -394,7 +386,7 @@</span><br><span>         logging_vty_add_cmds(NULL);</span><br><span>  osmo_talloc_vty_add_cmds();</span><br><span>  osmo_stats_vty_add_cmds(&gprs_log_info);</span><br><span style="color: hsl(0, 100%, 40%);">-    sgsn_vty_init(&sgsn_inst.cfg);</span><br><span style="color: hsl(120, 100%, 40%);">+    sgsn_vty_init(&sgsn->cfg);</span><br><span>    ctrl_vty_init(tall_sgsn_ctx);</span><br><span> </span><br><span> #if BUILD_IU</span><br><span>@@ -411,13 +403,13 @@</span><br><span>     * previous setups that might rely on the legacy default config file</span><br><span>          * name, we need to look for the old config file if no -c option was</span><br><span>          * passed AND no file exists with the new default file name. */</span><br><span style="color: hsl(0, 100%, 40%);">- if (!sgsn_inst.config_file) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (!sgsn->config_file) {</span><br><span>                 /* No -c option was passed */</span><br><span>                if (file_exists(CONFIG_FILE_LEGACY)</span><br><span>              && !file_exists(CONFIG_FILE_DEFAULT))</span><br><span style="color: hsl(0, 100%, 40%);">-                       sgsn_inst.config_file = CONFIG_FILE_LEGACY;</span><br><span style="color: hsl(120, 100%, 40%);">+                   osmo_talloc_replace_string(sgsn, &sgsn->config_file, CONFIG_FILE_LEGACY);</span><br><span>             else</span><br><span style="color: hsl(0, 100%, 40%);">-                    sgsn_inst.config_file = CONFIG_FILE_DEFAULT;</span><br><span style="color: hsl(120, 100%, 40%);">+                  osmo_talloc_replace_string(sgsn, &sgsn->config_file, CONFIG_FILE_DEFAULT);</span><br><span>    }</span><br><span> </span><br><span>        rate_ctr_init(tall_sgsn_ctx);</span><br><span>@@ -430,21 +422,21 @@</span><br><span>                LOGP(DGPRS, LOGL_ERROR, "Unable to instantiate NS\n");</span><br><span>             exit(1);</span><br><span>     }</span><br><span style="color: hsl(0, 100%, 40%);">-       bssgp_nsi = sgsn_inst.cfg.nsi = sgsn_nsi;</span><br><span style="color: hsl(120, 100%, 40%);">+     bssgp_nsi = sgsn->cfg.nsi = sgsn_nsi;</span><br><span> </span><br><span>         gprs_llc_init("/usr/local/lib/osmocom/crypt/");</span><br><span>    sgsn_rate_ctr_init();</span><br><span style="color: hsl(0, 100%, 40%);">-   sgsn_inst_init();</span><br><span style="color: hsl(120, 100%, 40%);">+     sgsn_inst_init(sgsn);</span><br><span> </span><br><span>    gprs_ns_vty_init(bssgp_nsi);</span><br><span>         bssgp_vty_init();</span><br><span>    gprs_llc_vty_init();</span><br><span>         gprs_sndcp_vty_init();</span><br><span>       sgsn_auth_init();</span><br><span style="color: hsl(0, 100%, 40%);">-       sgsn_cdr_init(&sgsn_inst);</span><br><span style="color: hsl(120, 100%, 40%);">+        sgsn_cdr_init(sgsn);</span><br><span>         /* FIXME: register signal handler for SS_L_NS */</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    rc = sgsn_parse_config(sgsn_inst.config_file);</span><br><span style="color: hsl(120, 100%, 40%);">+        rc = sgsn_parse_config(sgsn->config_file);</span><br><span>        if (rc < 0) {</span><br><span>             LOGP(DGPRS, LOGL_FATAL, "Error in config file\n");</span><br><span>                 exit(2);</span><br><span>@@ -471,14 +463,14 @@</span><br><span>     }</span><br><span> </span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-       rc = sgsn_gtp_init(&sgsn_inst);</span><br><span style="color: hsl(120, 100%, 40%);">+   rc = sgsn_gtp_init(sgsn);</span><br><span>    if (rc) {</span><br><span>            LOGP(DGPRS, LOGL_FATAL, "Cannot bind/listen on GTP socket\n");</span><br><span>             exit(2);</span><br><span>     } else</span><br><span>               LOGP(DGPRS, LOGL_NOTICE, "libGTP v%s initialized\n", gtp_version());</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-      rc = gprs_subscr_init(&sgsn_inst);</span><br><span style="color: hsl(120, 100%, 40%);">+        rc = gprs_subscr_init(sgsn);</span><br><span>         if (rc < 0) {</span><br><span>             LOGP(DGPRS, LOGL_FATAL, "Cannot set up subscriber management\n");</span><br><span>          exit(2);</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/11529">change 11529</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/11529"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-sgsn </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: merged </div>
<div style="display:none"> Gerrit-Change-Id: I4a83c5799f0dbd5eb762039c6cfba671f6e465be </div>
<div style="display:none"> Gerrit-Change-Number: 11529 </div>
<div style="display:none"> Gerrit-PatchSet: 2 </div>
<div style="display:none"> Gerrit-Owner: Pau Espin Pedrol <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Harald Welte <laforge@gnumonks.org> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder (1000002) </div>