<p>lynxis lazus has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-sgsn/+/20396">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Use the new NS2 api<br><br>Change-Id: I811c5313819f71857723b7fa6bf7c102371982df<br>---<br>M include/osmocom/sgsn/gprs_gb.h<br>M include/osmocom/sgsn/sgsn.h<br>M src/gprs/gprs_utils.c<br>M src/sgsn/gprs_gb.c<br>M src/sgsn/gprs_sgsn.c<br>M src/sgsn/sgsn_main.c<br>M src/sgsn/sgsn_vty.c<br>7 files changed, 115 insertions(+), 61 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-sgsn refs/changes/96/20396/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmocom/sgsn/gprs_gb.h b/include/osmocom/sgsn/gprs_gb.h</span><br><span>index 461eee3..3be4659 100644</span><br><span>--- a/include/osmocom/sgsn/gprs_gb.h</span><br><span>+++ b/include/osmocom/sgsn/gprs_gb.h</span><br><span>@@ -12,3 +12,9 @@</span><br><span> </span><br><span> /* page a MS in its routing area */</span><br><span> int gprs_gb_page_ps_ra(struct sgsn_mm_ctx *mmctx);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* called by the bssgp layer to send NS PDUs */</span><br><span style="color: hsl(120, 100%, 40%);">+int gprs_gp_send_cb(void *ctx, struct msgb *msg);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* called by the ns layer */</span><br><span style="color: hsl(120, 100%, 40%);">+int gprs_ns_prim_cb(struct osmo_prim_hdr *oph, void *ctx);</span><br><span>diff --git a/include/osmocom/sgsn/sgsn.h b/include/osmocom/sgsn/sgsn.h</span><br><span>index f5ff524..d9ef938 100644</span><br><span>--- a/include/osmocom/sgsn/sgsn.h</span><br><span>+++ b/include/osmocom/sgsn/sgsn.h</span><br><span>@@ -3,8 +3,9 @@</span><br><span> </span><br><span> </span><br><span> #include <osmocom/core/msgb.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/core/select.h></span><br><span> #include <osmocom/crypt/gprs_cipher.h></span><br><span style="color: hsl(0, 100%, 40%);">-#include <osmocom/gprs/gprs_ns.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/gprs/gprs_ns2.h></span><br><span> #include <osmocom/sgsn/gprs_sgsn.h></span><br><span> #include <osmocom/gsm/oap_client.h></span><br><span> #include <osmocom/gsupclient/gsup_client.h></span><br><span>@@ -69,7 +70,7 @@</span><br><span>    struct sockaddr_in gtp_listenaddr;</span><br><span> </span><br><span>       /* misc */</span><br><span style="color: hsl(0, 100%, 40%);">-      struct gprs_ns_inst *nsi;</span><br><span style="color: hsl(120, 100%, 40%);">+     struct gprs_ns2_inst *nsi;</span><br><span> </span><br><span>       enum sgsn_auth_policy auth_policy;</span><br><span>   enum gprs_ciph_algo cipher;</span><br><span>@@ -157,7 +158,7 @@</span><br><span> /* sgsn.c */</span><br><span> </span><br><span> /* Main input function for Gb proxy */</span><br><span style="color: hsl(0, 100%, 40%);">-int sgsn_rcvmsg(struct msgb *msg, struct gprs_nsvc *nsvc, uint16_t ns_bvci);</span><br><span style="color: hsl(120, 100%, 40%);">+int sgsn_rcvmsg(struct msgb *msg, struct gprs_ns2_vc *nsvc, uint16_t ns_bvci);</span><br><span> </span><br><span> /* sgsn_libgtp.c */</span><br><span> struct sgsn_pdp_ctx *sgsn_create_pdp_ctx(struct sgsn_ggsn_ctx *ggsn,</span><br><span>diff --git a/src/gprs/gprs_utils.c b/src/gprs/gprs_utils.c</span><br><span>index 13641c1..632718a 100644</span><br><span>--- a/src/gprs/gprs_utils.c</span><br><span>+++ b/src/gprs/gprs_utils.c</span><br><span>@@ -22,7 +22,7 @@</span><br><span> #include <osmocom/sgsn/gprs_utils.h></span><br><span> </span><br><span> #include <osmocom/core/msgb.h></span><br><span style="color: hsl(0, 100%, 40%);">-#include <osmocom/gprs/gprs_ns.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/gprs/gprs_ns2.h></span><br><span> </span><br><span> #include <osmocom/gsm/protocol/gsm_04_08_gprs.h></span><br><span> #include <osmocom/gsm/protocol/gsm_04_08.h></span><br><span>diff --git a/src/sgsn/gprs_gb.c b/src/sgsn/gprs_gb.c</span><br><span>index d470cfa..2520b53 100644</span><br><span>--- a/src/sgsn/gprs_gb.c</span><br><span>+++ b/src/sgsn/gprs_gb.c</span><br><span>@@ -25,6 +25,9 @@</span><br><span> </span><br><span> #include <osmocom/gprs/gprs_msgb.h></span><br><span> #include <osmocom/gprs/gprs_bssgp.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/gprs/gprs_ns2.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/gprs/gprs_bssgp_bss.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/sgsn/gprs_llc.h></span><br><span> </span><br><span> #include "bscconfig.h"</span><br><span> </span><br><span>@@ -103,3 +106,86 @@</span><br><span> </span><br><span>         return rc;</span><br><span> }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* called by the bssgp layer to send NS PDUs */</span><br><span style="color: hsl(120, 100%, 40%);">+int gprs_gp_send_cb(void *ctx, struct msgb *msg)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+       struct gprs_ns2_inst *nsi = (struct gprs_ns2_inst *) ctx;</span><br><span style="color: hsl(120, 100%, 40%);">+     struct osmo_gprs_ns2_prim nsp = {};</span><br><span style="color: hsl(120, 100%, 40%);">+   nsp.nsei = msgb_nsei(msg);</span><br><span style="color: hsl(120, 100%, 40%);">+    nsp.bvci = msgb_bvci(msg);</span><br><span style="color: hsl(120, 100%, 40%);">+    osmo_prim_init(&nsp.oph, SAP_NS, PRIM_NS_UNIT_DATA,</span><br><span style="color: hsl(120, 100%, 40%);">+                       PRIM_OP_REQUEST, msg);</span><br><span style="color: hsl(120, 100%, 40%);">+        return gprs_ns2_recv_prim(nsi, &nsp.oph);</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 gprs_ns_prim_status_cb(struct osmo_gprs_ns2_prim *nsp)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+    switch (nsp->u.status.cause) {</span><br><span style="color: hsl(120, 100%, 40%);">+     case NS_AFF_CAUSE_SNS_CONFIGURED:</span><br><span style="color: hsl(120, 100%, 40%);">+             LOGP(DGPRS, LOGL_NOTICE, "NS-NSE %d SNS configured.\n", nsp->nsei);</span><br><span style="color: hsl(120, 100%, 40%);">+              break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case NS_AFF_CAUSE_RECOVERY:</span><br><span style="color: hsl(120, 100%, 40%);">+           LOGP(DGPRS, LOGL_NOTICE, "NS-NSE %d became available\n", nsp->nsei);</span><br><span style="color: hsl(120, 100%, 40%);">+             if (nsp->u.status.first && nsp->u.status.persistent) {</span><br><span style="color: hsl(120, 100%, 40%);">+                  struct bssgp_bvc_ctx bctx = {</span><br><span style="color: hsl(120, 100%, 40%);">+                         .nsei = nsp->nsei,</span><br><span style="color: hsl(120, 100%, 40%);">+                 };</span><br><span style="color: hsl(120, 100%, 40%);">+                    bssgp_tx_bvc_reset2(&bctx, BVCI_SIGNALLING, BSSGP_CAUSE_EQUIP_FAIL, false);</span><br><span style="color: hsl(120, 100%, 40%);">+               }</span><br><span style="color: hsl(120, 100%, 40%);">+             break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case NS_AFF_CAUSE_FAILURE:</span><br><span style="color: hsl(120, 100%, 40%);">+            LOGP(DGPRS, LOGL_NOTICE, "NS-NSE %d became unavailable\n", nsp->nsei);</span><br><span style="color: hsl(120, 100%, 40%);">+           break;</span><br><span style="color: hsl(120, 100%, 40%);">+        default:</span><br><span style="color: hsl(120, 100%, 40%);">+              LOGP(DGPRS, LOGL_NOTICE,</span><br><span style="color: hsl(120, 100%, 40%);">+                   "NS: %s Unknown prim %d from NS\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                 get_value_string(osmo_prim_op_names, nsp->oph.operation),</span><br><span style="color: hsl(120, 100%, 40%);">+                  nsp->oph.primitive);</span><br><span style="color: hsl(120, 100%, 40%);">+          break;</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%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* call-back function for the NS protocol */</span><br><span style="color: hsl(120, 100%, 40%);">+int gprs_ns_prim_cb(struct osmo_prim_hdr *oph, void *ctx)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+    struct osmo_gprs_ns2_prim *nsp;</span><br><span style="color: hsl(120, 100%, 40%);">+       int rc = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ if (oph->sap != SAP_NS)</span><br><span style="color: hsl(120, 100%, 40%);">+            return 0;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   nsp = container_of(oph, struct osmo_gprs_ns2_prim, oph);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    if (oph->operation != PRIM_OP_INDICATION) {</span><br><span style="color: hsl(120, 100%, 40%);">+                LOGP(DPCU, LOGL_NOTICE, "NS: %s Unknown prim %d from NS\n",</span><br><span style="color: hsl(120, 100%, 40%);">+              get_value_string(osmo_prim_op_names, oph->operation),</span><br><span style="color: hsl(120, 100%, 40%);">+              oph->operation);</span><br><span style="color: hsl(120, 100%, 40%);">+              return 0;</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%);">+   switch (oph->primitive) {</span><br><span style="color: hsl(120, 100%, 40%);">+  case PRIM_NS_UNIT_DATA:</span><br><span style="color: hsl(120, 100%, 40%);">+               /* hand the message into the BSSGP implementation */</span><br><span style="color: hsl(120, 100%, 40%);">+          /* add required msg fields for Gb layer */</span><br><span style="color: hsl(120, 100%, 40%);">+            msgb_bssgph(oph->msg) = oph->msg->l3h;</span><br><span style="color: hsl(120, 100%, 40%);">+               msgb_bvci(oph->msg) = nsp->bvci;</span><br><span style="color: hsl(120, 100%, 40%);">+                msgb_nsei(oph->msg) = nsp->nsei;</span><br><span style="color: hsl(120, 100%, 40%);">+                rc = bssgp_rcvmsg(oph->msg);</span><br><span style="color: hsl(120, 100%, 40%);">+               break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case PRIM_NS_STATUS:</span><br><span style="color: hsl(120, 100%, 40%);">+          gprs_ns_prim_status_cb(nsp);</span><br><span style="color: hsl(120, 100%, 40%);">+          break;</span><br><span style="color: hsl(120, 100%, 40%);">+        default:</span><br><span style="color: hsl(120, 100%, 40%);">+              LOGP(DPCU, LOGL_NOTICE,</span><br><span style="color: hsl(120, 100%, 40%);">+                    "NS: %s Unknown prim %d from NS\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                 get_value_string(osmo_prim_op_names, oph->operation),</span><br><span style="color: hsl(120, 100%, 40%);">+              oph->primitive);</span><br><span style="color: hsl(120, 100%, 40%);">+              break;</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%);">+   if (oph->msg)</span><br><span style="color: hsl(120, 100%, 40%);">+              msgb_free(oph->msg);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     return rc;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span>diff --git a/src/sgsn/gprs_sgsn.c b/src/sgsn/gprs_sgsn.c</span><br><span>index cb2c0fc..75bd9b1 100644</span><br><span>--- a/src/sgsn/gprs_sgsn.c</span><br><span>+++ b/src/sgsn/gprs_sgsn.c</span><br><span>@@ -27,7 +27,7 @@</span><br><span> #include <osmocom/core/rate_ctr.h></span><br><span> #include <osmocom/core/stats.h></span><br><span> #include <osmocom/core/backtrace.h></span><br><span style="color: hsl(0, 100%, 40%);">-#include <osmocom/gprs/gprs_ns.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/gprs/gprs_ns2.h></span><br><span> #include <osmocom/gprs/gprs_bssgp.h></span><br><span> #include <osmocom/gsm/protocol/gsm_04_08_gprs.h></span><br><span> #include <osmocom/gsm/apn.h></span><br><span>diff --git a/src/sgsn/sgsn_main.c b/src/sgsn/sgsn_main.c</span><br><span>index 3044f95..f708958 100644</span><br><span>--- a/src/sgsn/sgsn_main.c</span><br><span>+++ b/src/sgsn/sgsn_main.c</span><br><span>@@ -39,8 +39,9 @@</span><br><span> #include <osmocom/core/rate_ctr.h></span><br><span> #include <osmocom/core/logging.h></span><br><span> #include <osmocom/core/stats.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/core/sockaddr_str.h></span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-#include <osmocom/gprs/gprs_ns.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/gprs/gprs_ns2.h></span><br><span> #include <osmocom/gprs/gprs_bssgp.h></span><br><span> #include <osmocom/gprs/gprs_bssgp_bss.h></span><br><span> </span><br><span>@@ -60,6 +61,7 @@</span><br><span> #include <osmocom/sgsn/gprs_llc.h></span><br><span> #include <osmocom/sgsn/gprs_gmm.h></span><br><span> #include <osmocom/sgsn/gprs_ranap.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/sgsn/gprs_gb.h></span><br><span> </span><br><span> #include <osmocom/ctrl/control_if.h></span><br><span> #include <osmocom/ctrl/ports.h></span><br><span>@@ -80,7 +82,7 @@</span><br><span> void *tall_sgsn_ctx;</span><br><span> struct ctrl_handle *g_ctrlh;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-struct gprs_ns_inst *sgsn_nsi;</span><br><span style="color: hsl(120, 100%, 40%);">+struct gprs_ns2_inst *sgsn_nsi;</span><br><span> static int daemonize = 0;</span><br><span> const char *openbsc_copyright =</span><br><span>         "Copyright (C) 2010 Harald Welte and On-Waves\r\n"</span><br><span>@@ -94,27 +96,6 @@</span><br><span> </span><br><span> struct sgsn_instance *sgsn;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/* call-back function for the NS protocol */</span><br><span style="color: hsl(0, 100%, 40%);">-static int sgsn_ns_cb(enum gprs_ns_evt event, struct gprs_nsvc *nsvc,</span><br><span style="color: hsl(0, 100%, 40%);">-                     struct msgb *msg, uint16_t bvci)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">- int rc = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-     switch (event) {</span><br><span style="color: hsl(0, 100%, 40%);">-        case GPRS_NS_EVT_UNIT_DATA:</span><br><span style="color: hsl(0, 100%, 40%);">-             /* hand the message into the BSSGP implementation */</span><br><span style="color: hsl(0, 100%, 40%);">-            rc = bssgp_rcvmsg(msg);</span><br><span style="color: hsl(0, 100%, 40%);">-         break;</span><br><span style="color: hsl(0, 100%, 40%);">-  default:</span><br><span style="color: hsl(0, 100%, 40%);">-                LOGP(DGPRS, LOGL_ERROR, "SGSN: Unknown event %u from NS\n", event);</span><br><span style="color: hsl(0, 100%, 40%);">-           if (msg)</span><br><span style="color: hsl(0, 100%, 40%);">-                        msgb_free(msg);</span><br><span style="color: hsl(0, 100%, 40%);">-         rc = -EIO;</span><br><span style="color: hsl(0, 100%, 40%);">-              break;</span><br><span style="color: hsl(0, 100%, 40%);">-  }</span><br><span style="color: hsl(0, 100%, 40%);">-       return rc;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> /* call-back function for the BSSGP protocol */</span><br><span> int bssgp_prim_cb(struct osmo_prim_hdr *oph, void *ctx)</span><br><span> {</span><br><span>@@ -201,23 +182,6 @@</span><br><span> #endif</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static void bvc_reset_persistent_nsvcs(void)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-   /* Send BVC-RESET on all persistent NSVCs */</span><br><span style="color: hsl(0, 100%, 40%);">-    struct gprs_nsvc *nsvc;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- llist_for_each_entry(nsvc, &sgsn_nsi->gprs_nsvcs, list) {</span><br><span style="color: hsl(0, 100%, 40%);">-                struct bssgp_bvc_ctx bctx = {</span><br><span style="color: hsl(0, 100%, 40%);">-                   .nsei = nsvc->nsei,</span><br><span style="color: hsl(0, 100%, 40%);">-          };</span><br><span style="color: hsl(0, 100%, 40%);">-              if (!nsvc->persistent)</span><br><span style="color: hsl(0, 100%, 40%);">-                       continue;</span><br><span style="color: hsl(0, 100%, 40%);">-               /* if it is not marked ALIVE, we cannot send any data over it. */</span><br><span style="color: hsl(0, 100%, 40%);">-               nsvc->state |= NSE_S_ALIVE;</span><br><span style="color: hsl(0, 100%, 40%);">-          bssgp_tx_bvc_reset2(&bctx, BVCI_SIGNALLING, BSSGP_CAUSE_EQUIP_FAIL, false);</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%);">-</span><br><span> static struct vty_app_info vty_info = {</span><br><span>        .name           = "OsmoSGSN",</span><br><span>      .version        = PACKAGE_VERSION,</span><br><span>@@ -388,6 +352,11 @@</span><br><span> int main(int argc, char **argv)</span><br><span> {</span><br><span>    int rc;</span><br><span style="color: hsl(120, 100%, 40%);">+       struct osmo_sockaddr_str bind_address = {</span><br><span style="color: hsl(120, 100%, 40%);">+             .af = AF_INET,</span><br><span style="color: hsl(120, 100%, 40%);">+                .ip = "0.0.0.0",</span><br><span style="color: hsl(120, 100%, 40%);">+            .port = 23000,</span><br><span style="color: hsl(120, 100%, 40%);">+        };</span><br><span> #if BUILD_IU</span><br><span>   struct osmo_sccp_instance *sccp;</span><br><span> #endif</span><br><span>@@ -441,28 +410,27 @@</span><br><span>   }</span><br><span> </span><br><span>        rate_ctr_init(tall_sgsn_ctx);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-   gprs_ns_set_log_ss(DNS);</span><br><span>     bssgp_set_log_ss(DBSSGP);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   sgsn_nsi = gprs_ns_instantiate(&sgsn_ns_cb, tall_sgsn_ctx);</span><br><span style="color: hsl(120, 100%, 40%);">+       sgsn_nsi = gprs_ns2_instantiate(tall_sgsn_ctx, &gprs_ns_prim_cb, NULL);</span><br><span>  if (!sgsn_nsi) {</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->cfg.nsi = sgsn_nsi;</span><br><span style="color: hsl(120, 100%, 40%);">+      sgsn->cfg.nsi = sgsn_nsi;</span><br><span style="color: hsl(120, 100%, 40%);">+  bssgp_set_bssgp_callback(gprs_gp_send_cb, 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>        sgsn_inst_init(sgsn);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-       gprs_ns_vty_init(bssgp_nsi);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        gprs_ns2_vty_init(sgsn_nsi, &bind_address);</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(sgsn);</span><br><span>        sgsn_cdr_init(sgsn);</span><br><span style="color: hsl(0, 100%, 40%);">-    /* FIXME: register signal handler for SS_L_NS */</span><br><span> </span><br><span>         rc = sgsn_parse_config(sgsn->config_file);</span><br><span>        if (rc < 0) {</span><br><span>@@ -504,18 +472,13 @@</span><br><span>             exit(2);</span><br><span>     }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   rc = gprs_ns_nsip_listen(sgsn_nsi);</span><br><span style="color: hsl(120, 100%, 40%);">+   rc = gprs_ns2_vty_create();</span><br><span>  if (rc < 0) {</span><br><span>             LOGP(DGPRS, LOGL_FATAL, "Cannot bind/listen on NSIP socket\n");</span><br><span>            exit(2);</span><br><span>     }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   rc = gprs_ns_frgre_listen(sgsn_nsi);</span><br><span style="color: hsl(0, 100%, 40%);">-    if (rc < 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-                LOGP(DGPRS, LOGL_FATAL, "Cannot bind/listen GRE "</span><br><span style="color: hsl(0, 100%, 40%);">-                     "socket. Do you have CAP_NET_RAW?\n");</span><br><span style="color: hsl(0, 100%, 40%);">-                exit(2);</span><br><span style="color: hsl(0, 100%, 40%);">-        }</span><br><span style="color: hsl(120, 100%, 40%);">+     gprs_ns2_dynamic_create_nse(sgsn_nsi, true);</span><br><span> </span><br><span>     if (sgsn->cfg.dynamic_lookup) {</span><br><span>           if (sgsn_ares_init(sgsn) != 0) {</span><br><span>@@ -542,8 +505,6 @@</span><br><span>       ranap_iu_init(tall_sgsn_ctx, DRANAP, "OsmoSGSN-IuPS", sccp, gsm0408_gprs_rcvmsg_iu, sgsn_ranap_iu_event);</span><br><span> #endif</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-       bvc_reset_persistent_nsvcs();</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>        if (daemonize) {</span><br><span>             rc = osmo_daemonize();</span><br><span>               if (rc < 0) {</span><br><span>diff --git a/src/sgsn/sgsn_vty.c b/src/sgsn/sgsn_vty.c</span><br><span>index 14248d1..a9f7671 100644</span><br><span>--- a/src/sgsn/sgsn_vty.c</span><br><span>+++ b/src/sgsn/sgsn_vty.c</span><br><span>@@ -34,7 +34,7 @@</span><br><span> </span><br><span> #include <osmocom/sgsn/debug.h></span><br><span> #include <osmocom/sgsn/sgsn.h></span><br><span style="color: hsl(0, 100%, 40%);">-#include <osmocom/gprs/gprs_ns.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/gprs/gprs_ns2.h></span><br><span> #include <osmocom/sgsn/gprs_gmm.h></span><br><span> #include <osmocom/sgsn/gprs_sgsn.h></span><br><span> #include <osmocom/sgsn/vty.h></span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-sgsn/+/20396">change 20396</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/c/osmo-sgsn/+/20396"/><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-Change-Id: I811c5313819f71857723b7fa6bf7c102371982df </div>
<div style="display:none"> Gerrit-Change-Number: 20396 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: lynxis lazus <lynxis@fe80.eu> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>