<p>lynxis lazus <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-sgsn/+/20397">View Change</a></p><div style="white-space:pre-wrap">Approvals:
daniel: Looks good to me, approved
pespin: Looks good to me, but someone else must approve
Jenkins Builder: Verified
</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">sgsn: Use the new NS2 api<br><br>The new NS2 api supports NSE with multiple NS-VC and contains a NS-VC<br>fsm. FR/GRE support is not working.<br>The configuration is compatible except for FR/GRE.<br><br>Relates: OS#4629<br>Depends-on: Iaad7b53d44338e5dd81dc2202f23bdcb715af804 (libosmocore)<br>Depends-on: I6cef42749555e577d5573f2ed8b8bce4cf842a98 (libosmocore)<br>Change-Id: I92a3bcaf166b091a22d74c7c1586964d33d7cc9d<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_ranap.c<br>M src/sgsn/gprs_sgsn.c<br>M src/sgsn/sgsn_main.c<br>M src/sgsn/sgsn_vty.c<br>M tests/vty_test_runner.py<br>9 files changed, 114 insertions(+), 61 deletions(-)<br><br></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..c98dd34 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_gb_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..c7d5c28 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,83 @@</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_gb_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, 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-E %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-E %d became available\n", nsp->nsei);</span><br><span style="color: hsl(120, 100%, 40%);">+ /* workaround for broken BSS which doesn't respond correct to BSSGP status message.</span><br><span style="color: hsl(120, 100%, 40%);">+ * Sent a BSSGP Reset when a persistent NSVC comes up for the first time. */</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-E %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, "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), 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(DGPRS, 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(DGPRS, 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), 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_ranap.c b/src/sgsn/gprs_ranap.c</span><br><span>index 7a33491..1f8ed97 100644</span><br><span>--- a/src/sgsn/gprs_ranap.c</span><br><span>+++ b/src/sgsn/gprs_ranap.c</span><br><span>@@ -26,6 +26,7 @@</span><br><span> </span><br><span> #include <osmocom/core/rate_ctr.h></span><br><span> #include <osmocom/core/tdef.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/gprs/gprs_msgb.h></span><br><span> </span><br><span> #include <osmocom/ranap/ranap_common.h></span><br><span> </span><br><span>diff --git a/src/sgsn/gprs_sgsn.c b/src/sgsn/gprs_sgsn.c</span><br><span>index 0b7c21e..d4bc554 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 0277f6f..19039f6 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>@@ -181,23 +162,6 @@</span><br><span> /* NSI that BSSGP uses when transmitting on NS */</span><br><span> extern struct gprs_ns_inst *bssgp_nsi;</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>@@ -364,6 +328,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>@@ -418,27 +387,27 @@</span><br><span> </span><br><span> rate_ctr_init(tall_sgsn_ctx);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- gprs_ns_set_log_ss(DNS);</span><br><span> logging_vty_add_deprecated_subsys(tall_sgsn_ctx, "bssgp");</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_gb_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>@@ -480,18 +449,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>@@ -518,8 +482,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 fee328e..d7584bc 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>diff --git a/tests/vty_test_runner.py b/tests/vty_test_runner.py</span><br><span>index 4fb67cb..92466bb 100755</span><br><span>--- a/tests/vty_test_runner.py</span><br><span>+++ b/tests/vty_test_runner.py</span><br><span>@@ -141,7 +141,7 @@</span><br><span> </span><br><span> def testVtyShow(self):</span><br><span> res = self.vty.command("show ns")</span><br><span style="color: hsl(0, 100%, 40%);">- self.assertTrue(res.find('Encapsulation NS-UDP-IP') >= 0)</span><br><span style="color: hsl(120, 100%, 40%);">+ self.assertTrue(res.find('0 NS-VC:') >= 0)</span><br><span> self.assertTrue(self.vty.verify('show bssgp', ['']))</span><br><span> self.assertTrue(self.vty.verify('show bssgp stats', ['']))</span><br><span> self.assertTrue(self.vty.verify('show bssgp nsei 123', ['']))</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-sgsn/+/20397">change 20397</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/+/20397"/><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: I92a3bcaf166b091a22d74c7c1586964d33d7cc9d </div>
<div style="display:none"> Gerrit-Change-Number: 20397 </div>
<div style="display:none"> Gerrit-PatchSet: 14 </div>
<div style="display:none"> Gerrit-Owner: lynxis lazus <lynxis@fe80.eu> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: daniel <dwillmann@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: lynxis lazus <lynxis@fe80.eu> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>