<p>laforge <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/libosmocore/+/21245">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Jenkins Builder: Verified
  pespin: Looks good to me, but someone else must approve
  laforge: Looks good to me, approved

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">ns2: permit multiple nsvci in one nse in VTY<br><br>Change-Id: I4ad454320d0a03e81b399f55e8bd0ee57402dad0<br>---<br>M src/gb/gprs_ns2_vty.c<br>1 file changed, 54 insertions(+), 44 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/gb/gprs_ns2_vty.c b/src/gb/gprs_ns2_vty.c</span><br><span>index 4eb9d37..1759a12 100644</span><br><span>--- a/src/gb/gprs_ns2_vty.c</span><br><span>+++ b/src/gb/gprs_ns2_vty.c</span><br><span>@@ -126,12 +126,14 @@</span><br><span>      1,</span><br><span> };</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static struct ns2_vty_vc *vtyvc_alloc(uint16_t nsei) {</span><br><span style="color: hsl(120, 100%, 40%);">+static struct ns2_vty_vc *vtyvc_alloc(uint16_t nsei, uint16_t nsvci)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span>  struct ns2_vty_vc *vtyvc = talloc_zero(vty_nsi, struct ns2_vty_vc);</span><br><span>  if (!vtyvc)</span><br><span>          return vtyvc;</span><br><span> </span><br><span>    vtyvc->nsei = nsei;</span><br><span style="color: hsl(120, 100%, 40%);">+        vtyvc->nsvci = nsvci;</span><br><span> </span><br><span>         llist_add(&vtyvc->list, &priv.vtyvc);</span><br><span> </span><br><span>@@ -146,18 +148,19 @@</span><br><span>         talloc_free(vtyvc);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static struct ns2_vty_vc *vtyvc_by_nsei(uint16_t nsei, bool alloc_missing) {</span><br><span style="color: hsl(120, 100%, 40%);">+static struct ns2_vty_vc *vtyvc_by_nsei_nsvci(uint16_t nsei, uint16_t nsvci, bool alloc_missing)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span>        struct ns2_vty_vc *vtyvc;</span><br><span> </span><br><span>        llist_for_each_entry(vtyvc, &priv.vtyvc, list) {</span><br><span style="color: hsl(0, 100%, 40%);">-            if (vtyvc->nsei == nsei)</span><br><span style="color: hsl(120, 100%, 40%);">+           if (vtyvc->nsei == nsei && vtyvc->nsvci == nsvci)</span><br><span>                      return vtyvc;</span><br><span>        }</span><br><span> </span><br><span>        if (!alloc_missing)</span><br><span>          return NULL;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        vtyvc = vtyvc_alloc(nsei);</span><br><span style="color: hsl(120, 100%, 40%);">+    vtyvc = vtyvc_alloc(nsei, nsvci);</span><br><span>    if (!vtyvc)</span><br><span>          return vtyvc;</span><br><span> </span><br><span>@@ -206,36 +209,29 @@</span><br><span>            vty_out(vty, " nse %u nsvci %u%s",</span><br><span>                         vtyvc->nsei, vtyvc->nsvci, VTY_NEWLINE);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-              vty_out(vty, " nse %u remote-role %s%s",</span><br><span style="color: hsl(0, 100%, 40%);">-                      vtyvc->nsei, vtyvc->remote_end_is_sgsn ? "sgsn" : "bss",</span><br><span style="color: hsl(0, 100%, 40%);">-                      VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+         vty_out(vty, " nse %u nsvci %u remote-role %s%s", vtyvc->nsei, vtyvc->nsvci,</span><br><span style="color: hsl(120, 100%, 40%);">+                  vtyvc->remote_end_is_sgsn ? "sgsn" : "bss", VTY_NEWLINE);</span><br><span> </span><br><span>                 switch (vtyvc->ll) {</span><br><span>              case GPRS_NS_LL_UDP:</span><br><span style="color: hsl(0, 100%, 40%);">-                    vty_out(vty, " nse %u encapsulation udp%s", vtyvc->nsei, VTY_NEWLINE);</span><br><span style="color: hsl(0, 100%, 40%);">-                     vty_out(vty, " nse %u remote-ip %s%s",</span><br><span style="color: hsl(0, 100%, 40%);">-                                vtyvc->nsei,</span><br><span style="color: hsl(0, 100%, 40%);">-                         vtyvc->remote.ip,</span><br><span style="color: hsl(120, 100%, 40%);">+                  vty_out(vty, " nse %u nsvci %u encapsulation udp%s", vtyvc->nsei, vtyvc->nsvci,</span><br><span>                              VTY_NEWLINE);</span><br><span style="color: hsl(0, 100%, 40%);">-                   vty_out(vty, " nse %u remote-port %u%s",</span><br><span style="color: hsl(0, 100%, 40%);">-                              vtyvc->nsei, vtyvc->remote.port,</span><br><span style="color: hsl(0, 100%, 40%);">-                          VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+                 vty_out(vty, " nse %u nsvci %u remote-ip %s%s", vtyvc->nsei, vtyvc->nsvci,</span><br><span style="color: hsl(120, 100%, 40%);">+                            vtyvc->remote.ip, VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+                    vty_out(vty, " nse %u nsvci %u remote-port %u%s", vtyvc->nsei, vtyvc->nsvci,</span><br><span style="color: hsl(120, 100%, 40%);">+                          vtyvc->remote.port, VTY_NEWLINE);</span><br><span>                         break;</span><br><span>               case GPRS_NS_LL_FR_GRE:</span><br><span style="color: hsl(0, 100%, 40%);">-                 vty_out(vty, " nse %u encapsulation framerelay-gre%s",</span><br><span style="color: hsl(0, 100%, 40%);">-                                vtyvc->nsei, VTY_NEWLINE);</span><br><span style="color: hsl(0, 100%, 40%);">-                   vty_out(vty, " nse %u remote-ip %s%s",</span><br><span style="color: hsl(0, 100%, 40%);">-                                vtyvc->nsei,</span><br><span style="color: hsl(0, 100%, 40%);">-                         vtyvc->remote.ip,</span><br><span style="color: hsl(0, 100%, 40%);">-                            VTY_NEWLINE);</span><br><span style="color: hsl(0, 100%, 40%);">-                   vty_out(vty, " nse %u fr-dlci %u%s",</span><br><span style="color: hsl(0, 100%, 40%);">-                          vtyvc->nsei, vtyvc->frdlci,</span><br><span style="color: hsl(0, 100%, 40%);">-                               VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+                 vty_out(vty, " nse %u nsvci %u encapsulation framerelay-gre%s", vtyvc->nsei,</span><br><span style="color: hsl(120, 100%, 40%);">+                             vtyvc->nsvci, VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+                        vty_out(vty, " nse %u nsvci %u remote-ip %s%s", vtyvc->nsei, vtyvc->nsvci,</span><br><span style="color: hsl(120, 100%, 40%);">+                            vtyvc->remote.ip, VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+                    vty_out(vty, " nse %u nsvci %u fr-dlci %u%s", vtyvc->nsei, vtyvc->nsvci,</span><br><span style="color: hsl(120, 100%, 40%);">+                              vtyvc->frdlci, VTY_NEWLINE);</span><br><span>                      break;</span><br><span>               case GPRS_NS_LL_FR:</span><br><span style="color: hsl(0, 100%, 40%);">-                     vty_out(vty, " nse %u fr %s dlci %u%s",</span><br><span style="color: hsl(0, 100%, 40%);">-                               vtyvc->nsei, vtyvc->netif, vtyvc->frdlci,</span><br><span style="color: hsl(0, 100%, 40%);">-                              VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+                 vty_out(vty, " nse %u nsvci %u fr %s dlci %u%s", vtyvc->nsei, vtyvc->nsvci,</span><br><span style="color: hsl(120, 100%, 40%);">+                           vtyvc->netif, vtyvc->frdlci, VTY_NEWLINE);</span><br><span>                     break;</span><br><span>               default:</span><br><span>                     break;</span><br><span>@@ -420,7 +416,7 @@</span><br><span>         const char *name = argv[3];</span><br><span>  uint16_t dlci = atoi(argv[4]);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-      vtyvc = vtyvc_by_nsei(nsei, true);</span><br><span style="color: hsl(120, 100%, 40%);">+    vtyvc = vtyvc_by_nsei_nsvci(nsei, nsvci, true);</span><br><span>      if (!vtyvc) {</span><br><span>                vty_out(vty, "Can not allocate space %s", VTY_NEWLINE);</span><br><span>            return CMD_WARNING;</span><br><span>@@ -451,7 +447,7 @@</span><br><span>    uint16_t nsei = atoi(argv[0]);</span><br><span>       uint16_t nsvci = atoi(argv[1]);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-     vtyvc = vtyvc_by_nsei(nsei, true);</span><br><span style="color: hsl(120, 100%, 40%);">+    vtyvc = vtyvc_by_nsei_nsvci(nsei, nsvci, true);</span><br><span>      if (!vtyvc) {</span><br><span>                vty_out(vty, "Can not allocate space %s", VTY_NEWLINE);</span><br><span>            return CMD_WARNING;</span><br><span>@@ -463,37 +459,43 @@</span><br><span> }</span><br><span> </span><br><span> DEFUN(cfg_nse_remoteip, cfg_nse_remoteip_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-   "nse <0-65535> remote-ip " VTY_IPV46_CMD,</span><br><span style="color: hsl(120, 100%, 40%);">+     "nse <0-65535> nsvci <0-65535> remote-ip " VTY_IPV46_CMD,</span><br><span>      NSE_CMD_STR</span><br><span style="color: hsl(120, 100%, 40%);">+   "NS Virtual Connection\n"</span><br><span style="color: hsl(120, 100%, 40%);">+   "NS Virtual Connection ID (NSVCI)\n"</span><br><span>       "Remote IP Address\n"</span><br><span>      "Remote IPv4 Address\n"</span><br><span>    "Remote IPv6 Address\n")</span><br><span> {</span><br><span>      uint16_t nsei = atoi(argv[0]);</span><br><span style="color: hsl(120, 100%, 40%);">+        uint16_t nsvci = atoi(argv[1]);</span><br><span>      struct ns2_vty_vc *vtyvc;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   vtyvc = vtyvc_by_nsei(nsei, true);</span><br><span style="color: hsl(120, 100%, 40%);">+    vtyvc = vtyvc_by_nsei_nsvci(nsei, nsvci, true);</span><br><span>      if (!vtyvc) {</span><br><span>                vty_out(vty, "Can not allocate space %s", VTY_NEWLINE);</span><br><span>            return CMD_WARNING;</span><br><span>  }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   osmo_sockaddr_str_from_str2(&vtyvc->remote, argv[1]);</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo_sockaddr_str_from_str2(&vtyvc->remote, argv[2]);</span><br><span> </span><br><span>     return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span> DEFUN(cfg_nse_remoteport, cfg_nse_remoteport_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-       "nse <0-65535> remote-port <0-65535>",</span><br><span style="color: hsl(120, 100%, 40%);">+  "nse <0-65535> nsvci <0-65535> remote-port <0-65535>",</span><br><span>   NSE_CMD_STR</span><br><span style="color: hsl(120, 100%, 40%);">+   "NS Virtual Connection\n"</span><br><span style="color: hsl(120, 100%, 40%);">+   "NS Virtual Connection ID (NSVCI)\n"</span><br><span>       "Remote UDP Port\n"</span><br><span>        "Remote UDP Port Number\n")</span><br><span> {</span><br><span>   uint16_t nsei = atoi(argv[0]);</span><br><span style="color: hsl(0, 100%, 40%);">-  uint16_t port = atoi(argv[1]);</span><br><span style="color: hsl(120, 100%, 40%);">+        uint16_t nsvci = atoi(argv[1]);</span><br><span style="color: hsl(120, 100%, 40%);">+       uint16_t port = atoi(argv[2]);</span><br><span>       struct ns2_vty_vc *vtyvc;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   vtyvc = vtyvc_by_nsei(nsei, true);</span><br><span style="color: hsl(120, 100%, 40%);">+    vtyvc = vtyvc_by_nsei_nsvci(nsei, nsvci, true);</span><br><span>      if (!vtyvc) {</span><br><span>                vty_out(vty, "Can not allocate space %s", VTY_NEWLINE);</span><br><span>            return CMD_WARNING;</span><br><span>@@ -507,6 +509,8 @@</span><br><span> DEFUN(cfg_nse_fr_dlci, cfg_nse_fr_dlci_cmd,</span><br><span>     "nse <0-65535> nsvci <0-65535> fr-dlci <16-1007>",</span><br><span>       NSE_CMD_STR</span><br><span style="color: hsl(120, 100%, 40%);">+   "NS Virtual Connection\n"</span><br><span style="color: hsl(120, 100%, 40%);">+   "NS Virtual Connection ID (NSVCI)\n"</span><br><span>       "Frame Relay DLCI\n"</span><br><span>       "Frame Relay DLCI Number\n")</span><br><span> {</span><br><span>@@ -515,7 +519,7 @@</span><br><span>    uint16_t dlci = atoi(argv[2]);</span><br><span>       struct ns2_vty_vc *vtyvc;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   vtyvc = vtyvc_by_nsei(nsei, true);</span><br><span style="color: hsl(120, 100%, 40%);">+    vtyvc = vtyvc_by_nsei_nsvci(nsei, nsvci, true);</span><br><span>      if (!vtyvc) {</span><br><span>                vty_out(vty, "Can not allocate space %s", VTY_NEWLINE);</span><br><span>            return CMD_WARNING;</span><br><span>@@ -527,27 +531,29 @@</span><br><span>  }</span><br><span> </span><br><span>        vtyvc->frdlci = dlci;</span><br><span style="color: hsl(0, 100%, 40%);">-        vtyvc->nsvci = nsvci;</span><br><span> </span><br><span>         return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span> DEFUN(cfg_nse_encaps, cfg_nse_encaps_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-       "nse <0-65535> encapsulation (udp|framerelay-gre)",</span><br><span style="color: hsl(120, 100%, 40%);">+   "nse <0-65535> nsvci <0-65535> encapsulation (udp|framerelay-gre)",</span><br><span>    NSE_CMD_STR</span><br><span style="color: hsl(120, 100%, 40%);">+   "NS Virtual Connection\n"</span><br><span style="color: hsl(120, 100%, 40%);">+   "NS Virtual Connection ID (NSVCI)\n"</span><br><span>       "Encapsulation for NS\n"</span><br><span>   "UDP/IP Encapsulation\n" "Frame-Relay/GRE/IP Encapsulation\n")</span><br><span> {</span><br><span>      uint16_t nsei = atoi(argv[0]);</span><br><span style="color: hsl(120, 100%, 40%);">+        uint16_t nsvci = atoi(argv[1]);</span><br><span>      struct ns2_vty_vc *vtyvc;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   vtyvc = vtyvc_by_nsei(nsei, true);</span><br><span style="color: hsl(120, 100%, 40%);">+    vtyvc = vtyvc_by_nsei_nsvci(nsei, nsvci, true);</span><br><span>      if (!vtyvc) {</span><br><span>                vty_out(vty, "Can not allocate space %s", VTY_NEWLINE);</span><br><span>            return CMD_WARNING;</span><br><span>  }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   if (!strcmp(argv[1], "udp"))</span><br><span style="color: hsl(120, 100%, 40%);">+        if (!strcmp(argv[2], "udp"))</span><br><span>               vtyvc->ll = GPRS_NS_LL_UDP;</span><br><span>       else</span><br><span>                 vtyvc->ll = GPRS_NS_LL_FR_GRE;</span><br><span>@@ -556,22 +562,25 @@</span><br><span> }</span><br><span> </span><br><span> DEFUN(cfg_nse_remoterole, cfg_nse_remoterole_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">- "nse <0-65535> remote-role (sgsn|bss)",</span><br><span style="color: hsl(120, 100%, 40%);">+       "nse <0-65535> nsvci <0-65535> remote-role (sgsn|bss)",</span><br><span>        NSE_CMD_STR</span><br><span style="color: hsl(120, 100%, 40%);">+   "NS Virtual Connection\n"</span><br><span style="color: hsl(120, 100%, 40%);">+   "NS Virtual Connection ID (NSVCI)\n"</span><br><span>       "Remote NSE Role\n"</span><br><span>        "Remote Peer is SGSN\n"</span><br><span>    "Remote Peer is BSS\n")</span><br><span> {</span><br><span>       uint16_t nsei = atoi(argv[0]);</span><br><span style="color: hsl(120, 100%, 40%);">+        uint16_t nsvci = atoi(argv[1]);</span><br><span>      struct ns2_vty_vc *vtyvc;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   vtyvc = vtyvc_by_nsei(nsei, true);</span><br><span style="color: hsl(120, 100%, 40%);">+    vtyvc = vtyvc_by_nsei_nsvci(nsei, nsvci, true);</span><br><span>      if (!vtyvc) {</span><br><span>                vty_out(vty, "Can not allocate space %s", VTY_NEWLINE);</span><br><span>            return CMD_WARNING;</span><br><span>  }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   if (!strcmp(argv[1], "sgsn"))</span><br><span style="color: hsl(120, 100%, 40%);">+       if (!strcmp(argv[2], "sgsn"))</span><br><span>              vtyvc->remote_end_is_sgsn = 1;</span><br><span>    else</span><br><span>                 vtyvc->remote_end_is_sgsn = 0;</span><br><span>@@ -580,14 +589,15 @@</span><br><span> }</span><br><span> </span><br><span> DEFUN(cfg_no_nse, cfg_no_nse_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">- "no nse <0-65535>",</span><br><span style="color: hsl(120, 100%, 40%);">+   "no nse <0-65535> nsvci <0-65535>",</span><br><span>    "Delete Persistent NS Entity\n"</span><br><span>    "Delete " NSE_CMD_STR)</span><br><span> {</span><br><span>        uint16_t nsei = atoi(argv[0]);</span><br><span style="color: hsl(120, 100%, 40%);">+        uint16_t nsvci = atoi(argv[1]);</span><br><span>      struct ns2_vty_vc *vtyvc;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   vtyvc = vtyvc_by_nsei(nsei, false);</span><br><span style="color: hsl(120, 100%, 40%);">+   vtyvc = vtyvc_by_nsei_nsvci(nsei, nsvci, false);</span><br><span>     if (!vtyvc) {</span><br><span>                vty_out(vty, "The NSE %d does not exists.%s", nsei, VTY_NEWLINE);</span><br><span>          return CMD_WARNING;</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/libosmocore/+/21245">change 21245</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/libosmocore/+/21245"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: libosmocore </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I4ad454320d0a03e81b399f55e8bd0ee57402dad0 </div>
<div style="display:none"> Gerrit-Change-Number: 21245 </div>
<div style="display:none"> Gerrit-PatchSet: 2 </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: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>