<p>laforge has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/libosmocore/+/23480">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">gprs_ns2_sns: remove code duplication in create_missing_nsvcs()<br><br>Change-Id: I78d79c3bc92f0c0bebbbbe639b8406c4b188582f<br>---<br>M src/gb/gprs_ns2_sns.c<br>1 file changed, 26 insertions(+), 22 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/80/23480/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/gb/gprs_ns2_sns.c b/src/gb/gprs_ns2_sns.c</span><br><span>index 7268809..5470e43 100644</span><br><span>--- a/src/gb/gprs_ns2_sns.c</span><br><span>+++ b/src/gb/gprs_ns2_sns.c</span><br><span>@@ -367,6 +367,20 @@</span><br><span>    ns2_vc_create_ip(fi, nse, &remote, ip6->sig_weight, ip6->data_weight);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+static bool do_we_have_nsvc_for_bind_and_remote(struct gprs_ns2_nse *nse, struct gprs_ns2_vc_bind *bind,</span><br><span style="color: hsl(120, 100%, 40%);">+                                           const struct osmo_sockaddr *remote)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+        struct gprs_ns2_vc *nsvc;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   llist_for_each_entry(nsvc, &nse->nsvc, list) {</span><br><span style="color: hsl(120, 100%, 40%);">+         if (nsvc->bind != bind)</span><br><span style="color: hsl(120, 100%, 40%);">+                    continue;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+           if (!osmo_sockaddr_cmp(remote, gprs_ns2_ip_vc_remote(nsvc)))</span><br><span style="color: hsl(120, 100%, 40%);">+                  return true;</span><br><span style="color: hsl(120, 100%, 40%);">+  }</span><br><span style="color: hsl(120, 100%, 40%);">+     return false;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span> </span><br><span> static int create_missing_nsvcs(struct osmo_fsm_inst *fi)</span><br><span> {</span><br><span>@@ -377,6 +391,7 @@</span><br><span>         struct osmo_sockaddr remote = { };</span><br><span>   unsigned int i;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+   /* iterate over all remote IPv4 endpoints */</span><br><span>         for (i = 0; i < gss->num_ip4_remote; i++) {</span><br><span>            const struct gprs_ns_ie_ip4_elem *ip4 = &gss->ip4_remote[i];</span><br><span> </span><br><span>@@ -384,21 +399,15 @@</span><br><span>              remote.u.sin.sin_addr.s_addr = ip4->ip_addr;</span><br><span>              remote.u.sin.sin_port = ip4->udp_port;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+         /* iterate over all local binds */</span><br><span>           llist_for_each_entry(bind, &nse->nsi->binding, list) {</span><br><span style="color: hsl(0, 100%, 40%);">-                        bool found = false;</span><br><span style="color: hsl(120, 100%, 40%);">+                   bool found;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+                 /* we only care about UDP binds */</span><br><span>                   if (bind->ll != GPRS_NS2_LL_UDP)</span><br><span>                          continue;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-                   llist_for_each_entry(nsvc, &nse->nsvc, list) {</span><br><span style="color: hsl(0, 100%, 40%);">-                           if (nsvc->bind != bind)</span><br><span style="color: hsl(0, 100%, 40%);">-                                      continue;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-                               if (!osmo_sockaddr_cmp(&remote, gprs_ns2_ip_vc_remote(nsvc))) {</span><br><span style="color: hsl(0, 100%, 40%);">-                                     found = true;</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%);">-                       }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(120, 100%, 40%);">+                     found = do_we_have_nsvc_for_bind_and_remote(nse, bind, &remote);</span><br><span>                         if (!found) {</span><br><span>                                nsvc = gprs_ns2_ip_connect_inactive(bind, &remote, nse, 0);</span><br><span>                              if (!nsvc) {</span><br><span>@@ -414,6 +423,7 @@</span><br><span>           }</span><br><span>    }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ /* iterate over all remote IPv4 endpoints */</span><br><span>         for (i = 0; i < gss->num_ip6_remote; i++) {</span><br><span>            const struct gprs_ns_ie_ip6_elem *ip6 = &gss->ip6_remote[i];</span><br><span> </span><br><span>@@ -421,21 +431,15 @@</span><br><span>              remote.u.sin6.sin6_addr = ip6->ip_addr;</span><br><span>           remote.u.sin6.sin6_port = ip6->udp_port;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+               /* iterate over all local binds */</span><br><span>           llist_for_each_entry(bind, &nse->nsi->binding, list) {</span><br><span style="color: hsl(0, 100%, 40%);">-                        bool found = false;</span><br><span style="color: hsl(120, 100%, 40%);">+                   bool found;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>                        if (bind->ll != GPRS_NS2_LL_UDP)</span><br><span>                          continue;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-                   llist_for_each_entry(nsvc, &nse->nsvc, list) {</span><br><span style="color: hsl(0, 100%, 40%);">-                           if (nsvc->bind != bind)</span><br><span style="color: hsl(0, 100%, 40%);">-                                      continue;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-                               if (!osmo_sockaddr_cmp(&remote, gprs_ns2_ip_vc_remote(nsvc))) {</span><br><span style="color: hsl(0, 100%, 40%);">-                                     found = true;</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%);">-                       }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(120, 100%, 40%);">+                     /* we only care about UDP binds */</span><br><span style="color: hsl(120, 100%, 40%);">+                    found = do_we_have_nsvc_for_bind_and_remote(nse, bind, &remote);</span><br><span>                         if (!found) {</span><br><span>                                nsvc = gprs_ns2_ip_connect_inactive(bind, &remote, nse, 0);</span><br><span>                              if (!nsvc) {</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/libosmocore/+/23480">change 23480</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/+/23480"/><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: I78d79c3bc92f0c0bebbbbe639b8406c4b188582f </div>
<div style="display:none"> Gerrit-Change-Number: 23480 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>