<p>pespin has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ggsn/+/15253">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">ggsn_vty.c: Avoid printing duplicates for pdp context with v4v6 EUAs<br><br>Fixes potential duplicates when calling following VTY cmd:<br>show pdp-context ggsn NAME<br>show pdp-context ggsn NAME apn APN<br><br>Related: OS#4154<br>Change-Id: I98db39a710a72a1438d71aabaf4f8227984643e3<br>---<br>M ggsn/ggsn_vty.c<br>1 file changed, 24 insertions(+), 10 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-ggsn refs/changes/53/15253/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/ggsn/ggsn_vty.c b/ggsn/ggsn_vty.c</span><br><span>index b85df77..a649173 100644</span><br><span>--- a/ggsn/ggsn_vty.c</span><br><span>+++ b/ggsn/ggsn_vty.c</span><br><span>@@ -734,13 +734,22 @@</span><br><span>         return in46a_ntoa(&in46);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static void show_one_pdp(struct vty *vty, struct pdp_t *pdp)</span><br><span style="color: hsl(120, 100%, 40%);">+/* Useful for v4v6 APNs, where we first iterate over v4 pool and then over v6</span><br><span style="color: hsl(120, 100%, 40%);">+   pool. param v4only can be used to avoid printing duplicates for pdp context</span><br><span style="color: hsl(120, 100%, 40%);">+   containing both IPv4 and IPv6 addresses. */</span><br><span style="color: hsl(120, 100%, 40%);">+static void show_one_pdp_v4only(struct vty *vty, struct pdp_t *pdp, bool v4only)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-        struct ippoolm_t *peer;</span><br><span style="color: hsl(120, 100%, 40%);">+       struct ippoolm_t *peer4, *peer6;</span><br><span>     char name_buf[256];</span><br><span>  char *apn_name;</span><br><span>      int rc;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+   peer4 = pdp_get_peer_ipv(pdp, false);</span><br><span style="color: hsl(120, 100%, 40%);">+ peer6 = pdp_get_peer_ipv(pdp, true);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        if (v4only && peer6)</span><br><span style="color: hsl(120, 100%, 40%);">+          return;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>    /* Attempt to decode MSISDN */</span><br><span>       rc = gsm48_decode_bcd_number2(name_buf, sizeof(name_buf),</span><br><span>                                  pdp->msisdn.v, pdp->msisdn.l, 0);</span><br><span>@@ -759,16 +768,21 @@</span><br><span>        apn_name = osmo_apn_to_str(name_buf, pdp->apn_use.v, pdp->apn_use.l);</span><br><span>  vty_out(vty, " APN in use: %s%s", apn_name ? name_buf : "(NONE)", VTY_NEWLINE);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- if ((peer = pdp_get_peer_ipv(pdp, false)))</span><br><span style="color: hsl(120, 100%, 40%);">+    if (peer4)</span><br><span>           vty_out(vty, " End-User Address (IPv4): %s%s",</span><br><span style="color: hsl(0, 100%, 40%);">-                        in46a_ntop(&peer->addr, name_buf, sizeof(name_buf)), VTY_NEWLINE);</span><br><span style="color: hsl(0, 100%, 40%);">-       if ((peer = pdp_get_peer_ipv(pdp, true)))</span><br><span style="color: hsl(120, 100%, 40%);">+                     in46a_ntop(&peer4->addr, name_buf, sizeof(name_buf)), VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+    if (peer6)</span><br><span>           vty_out(vty, " End-User Address (IPv6): %s%s",</span><br><span style="color: hsl(0, 100%, 40%);">-                        in46a_ntop(&peer->addr, name_buf, sizeof(name_buf)), VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+                     in46a_ntop(&peer6->addr, name_buf, sizeof(name_buf)), VTY_NEWLINE);</span><br><span>   vty_out(vty, " Transmit GTP Sequence Number for G-PDU: %s%s",</span><br><span>              pdp->tx_gpdu_seq ? "Yes" : "No", VTY_NEWLINE);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+static void show_one_pdp(struct vty *vty, struct pdp_t *pdp)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+       show_one_pdp_v4only(vty, pdp, false);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> DEFUN(show_pdpctx_imsi, show_pdpctx_imsi_cmd,</span><br><span>  "show pdp-context ggsn NAME imsi IMSI [<0-15>]",</span><br><span>     SHOW_STR "Display information on PDP Context\n"</span><br><span>@@ -853,7 +867,7 @@</span><br><span> }</span><br><span> </span><br><span> /* show all (active) PDP contexts within a pool */</span><br><span style="color: hsl(0, 100%, 40%);">-static void ippool_show_pdp_contexts(struct vty *vty, struct ippool_t *pool)</span><br><span style="color: hsl(120, 100%, 40%);">+static void ippool_show_pdp_contexts(struct vty *vty, struct ippool_t *pool, bool pdp_v4only)</span><br><span> {</span><br><span>       unsigned int i;</span><br><span> </span><br><span>@@ -864,15 +878,15 @@</span><br><span>          struct ippoolm_t *member = &pool->member[i];</span><br><span>          if (member->inuse == 0)</span><br><span>                   continue;</span><br><span style="color: hsl(0, 100%, 40%);">-               show_one_pdp(vty, member->peer);</span><br><span style="color: hsl(120, 100%, 40%);">+           show_one_pdp_v4only(vty, member->peer, pdp_v4only);</span><br><span>       }</span><br><span> }</span><br><span> </span><br><span> /* show all (active) PDP contexts within an APN */</span><br><span> static void apn_show_pdp_contexts(struct vty *vty, struct apn_ctx *apn)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-        ippool_show_pdp_contexts(vty, apn->v4.pool);</span><br><span style="color: hsl(0, 100%, 40%);">- ippool_show_pdp_contexts(vty, apn->v6.pool);</span><br><span style="color: hsl(120, 100%, 40%);">+       ippool_show_pdp_contexts(vty, apn->v4.pool, true);</span><br><span style="color: hsl(120, 100%, 40%);">+ ippool_show_pdp_contexts(vty, apn->v6.pool, false);</span><br><span> }</span><br><span> </span><br><span> DEFUN(show_pdpctx, show_pdpctx_cmd,</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ggsn/+/15253">change 15253</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-ggsn/+/15253"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-ggsn </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I98db39a710a72a1438d71aabaf4f8227984643e3 </div>
<div style="display:none"> Gerrit-Change-Number: 15253 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>