[Openvpn-devel] [S] Change in openvpn[master]: Extract multi_get_instance_udp_real method

"plaisthos \(Code Review\) via Openvpn-devel" <[email protected]> Thu, 30 Jul 2026 12:03:44 +0000
Newsgroups net.sourceforge.lists.openvpn-devel
Message-ID <a409f8209872278fb5d90471d3f59e86c215e53e-EmailReplacePatchSet-HTML@gerrit.openvpn.net>
--===============0320761490492325123==
Content-Transfer-Encoding: 8bit
Content-Disposition: inline
Content-Type: multipart/alternative; boundary="ov2EaacHJpM="; charset=UTF-8

--ov2EaacHJpM=
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

Attention is currently required from: plaisthos=2E

Hello flichtenheld, 

I=
'd like you to reexamine a change=2E Please visit

    http://gerrit=2Eopen=
vpn=2Enet/c/openvpn/+/1725?usp=3Demail

to look at the new patch set (#15)=
=2E

The change is no longer submittable: checks~ChecksSubmitRule is unsati=
sfied now=2E


Change subject: Extract multi_get_instance_udp_real method
=
=2E=2E=2E=2E=2E=2E=2E=2E=2E=2E=2E=2E=2E=2E=2E=2E=2E=2E=2E=2E=2E=2E=2E=2E=2E=
=2E=2E=2E=2E=2E=2E=2E=2E=2E=2E=2E=2E=2E=2E=2E=2E=2E=2E=2E=2E=2E=2E=2E=2E=2E=
=2E=2E=2E=2E=2E=2E=2E=2E=2E=2E=2E=2E=2E=2E=2E=2E=2E=2E=2E=2E

Extract multi=
_get_instance_udp_real method

This is just a small refactoring to make the=
 code a little bit
better organised=2E

Change-Id: I37ade55d7674c68dd98cf4d=
fde35c4ad42e20d39
Signed-off-by: Arne Schwabe <arne@rfc2549=2Eorg>
---
M sr=
c/openvpn/mudp=2Ec
1 file changed, 25 insertions(+), 8 deletions(-)


  git=
 pull ssh://gerrit=2Eopenvpn=2Enet:29418/openvpn refs/changes/25/1725/15

d=
iff --git a/src/openvpn/mudp=2Ec b/src/openvpn/mudp=2Ec
index b64cdd7=2E=2E=
596a458 100644
--- a/src/openvpn/mudp=2Ec
+++ b/src/openvpn/mudp=2Ec
@@ -20=
5,7 +205,6 @@
 handle_connection_attempt(struct multi_context *m,
         =
                  struct link_socket *sock,
                           stru=
ct mroute_addr *real,
-                          const uint64_t hv,
       =
                    struct hash_bucket *bucket)
 {
     struct hash *hash =
=3D m->hash;
@@ -236,6 +235,7 @@
             mi =3D multi_create_instance(=
m, real, sock);
             if (mi)
             {
+                const =
uint64_t hv =3D hash_value(hash, real);
                 hash_add_fast(hash=
, bucket, &mi->real, hv, mi);
                 mi->did_real_hash =3D true;
=
                 multi_assign_peer_id(m, mi);
@@ -265,6 +265,28 @@
 }
 
 /*=
*
+ * Looks up an multi instance by its real address (IP and port)
+ * @par=
am m     multi context
+ * @param real  Address to look up
+ * @return     =
 instance matching the address, NULL otherwise
+ */
+static struct multi_in=
stance *
+multi_get_instance_udp_real(struct multi_context *m, struct mrout=
e_addr *real)
+{
+    struct hash *hash =3D m->hash;
+    struct hash_eleme=
nt *he;
+    const uint64_t hv =3D hash_value(hash, real);
+    struct hash=
_bucket *bucket =3D hash_bucket(hash, hv);
+    he =3D hash_lookup_fast(has=
h, bucket, real, hv);
+    if (he)
+    {
+        return he->value;
+    }=

+    return NULL;
+}
+
+
+/**
  * Get a client instance based on real addr=
ess=2E  If
  * the instance doesn't exist, create it while
  * maintaining =
real address hash table atomicity=2E
@@ -280,7 +302,6 @@
 
     if (mroute_=
extract_openvpn_sockaddr(&real, &m->top=2Ec2=2Efrom=2Edest, true) && m->top=
=2Ec2=2Ebuf=2Elen > 0)
     {
-        struct hash_element *he;
         co=
nst uint64_t hv =3D hash_value(hash, &real);
         struct hash_bucket *b=
ucket =3D hash_bucket(hash, hv);
         uint8_t *ptr =3D BPTR(&m->top=2Ec=
2=2Ebuf);
@@ -317,17 +338,13 @@
         }
         if (!v2 || peer_id_disa=
bled)
         {
-            he =3D hash_lookup_fast(hash, bucket, &real, =
hv);
-            if (he)
-            {
-                mi =3D (struct mu=
lti_instance *)he->value;
-            }
+            mi =3D multi_get_inst=
ance_udp_real(m, &real);
         }
 
         /* we have no existing multi=
 instance for this connection */
         if (!mi)
         {
-            =
mi =3D handle_connection_attempt(m, sock, &real, hv, bucket);
+            =
mi =3D handle_connection_attempt(m, sock, &real, bucket);
         }
 
 #if=
def ENABLE_DEBUG

-- 
To view, visit http://gerrit=2Eopenvpn=2Enet/c/openvp=
n/+/1725?usp=3Demail
To unsubscribe, or for help writing mail filters, visi=
t http://gerrit=2Eopenvpn=2Enet/settings?usp=3Demail

Gerrit-MessageType: n=
ewpatchset
Gerrit-Project: openvpn
Gerrit-Branch: master
Gerrit-Change-Id: =
I37ade55d7674c68dd98cf4dfde35c4ad42e20d39
Gerrit-Change-Number: 1725
Gerrit=
-PatchSet: 15
Gerrit-Owner: plaisthos <arne-openvpn@rfc2549=2Eorg>
Gerrit-R=
eviewer: flichtenheld <frank@lichtenheld=2Ecom>
Gerrit-CC: openvpn-devel <o=
penvpn-devel@lists=2Esourceforge=2Enet>
Gerrit-Attention: plaisthos <arne-o=
penvpn@rfc2549=2Eorg>

--ov2EaacHJpM=
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<!DOCTYPE html><html><head><style></style></head><body><p> Attention is cur=
rently required from: plaisthos=2E </p>
<p>plaisthos <strong>uploaded patch=
 set #15</strong> to this change=2E</p><p><a href=3D"http://gerrit=2Eopenvp=
n=2Enet/c/openvpn/+/1725?usp=3Demail">View Change</a></p><p>The change is n=
o longer submittable: checks~ChecksSubmitRule is unsatisfied now=2E</p><pre=
 class=3D"blocks" style=3D"font-family: monospace,monospace; white-space: p=
re-wrap;">Extract multi_get_instance_udp_real method<br><br>This is just a =
small refactoring to make the code a little bit<br>better organised=2E<br><=
br>Change-Id: I37ade55d7674c68dd98cf4dfde35c4ad42e20d39<br>Signed-off-by: A=
rne Schwabe &lt;arne@rfc2549=2Eorg&gt;<br>---<br>M src/openvpn/mudp=2Ec<br>=
1 file changed, 25 insertions(+), 8 deletions(-)<br><br></pre><pre class=3D=
"blocks" style=3D"font-family: monospace,monospace; white-space: pre-wrap;"=
>git pull ssh://gerrit=2Eopenvpn=2Enet:29418/openvpn refs/changes/25/1725/1=
5</pre><pre style=3D"font-family: monospace,monospace; white-space: pre-wra=
p;"><span>diff --git a/src/openvpn/mudp=2Ec b/src/openvpn/mudp=2Ec</span><b=
r><span>index b64cdd7=2E=2E596a458 100644</span><br><span>--- a/src/openvpn=
/mudp=2Ec</span><br><span>+++ b/src/openvpn/mudp=2Ec</span><br><span>@@ -20=
5,7 +205,6 @@</span><br><span> handle_connection_attempt(struct multi_conte=
xt *m,</span><br><span>                           struct link_socket *sock,=
</span><br><span>                           struct mroute_addr *real,</span=
><br><span style=3D"color: hsl(0, 100%, 40%);">-                          c=
onst uint64_t hv,</span><br><span>                           struct hash_bu=
cket *bucket)</span><br><span> {</span><br><span>     struct hash *hash =3D=
 m-&gt;hash;</span><br><span>@@ -236,6 +235,7 @@</span><br><span>          =
   mi =3D multi_create_instance(m, real, sock);</span><br><span>           =
  if (mi)</span><br><span>             {</span><br><span style=3D"color: hs=
l(120, 100%, 40%);">+                const uint64_t hv =3D hash_value(hash,=
 real);</span><br><span>                 hash_add_fast(hash, bucket, &amp;m=
i-&gt;real, hv, mi);</span><br><span>                 mi-&gt;did_real_hash =
=3D true;</span><br><span>                 multi_assign_peer_id(m, mi);</sp=
an><br><span>@@ -265,6 +265,28 @@</span><br><span> }</span><br><span> </spa=
n><br><span> /**</span><br><span style=3D"color: hsl(120, 100%, 40%);">+ * =
Looks up an multi instance by its real address (IP and port)</span><br><spa=
n style=3D"color: hsl(120, 100%, 40%);">+ * @param m     multi context</spa=
n><br><span style=3D"color: hsl(120, 100%, 40%);">+ * @param real  Address =
to look up</span><br><span style=3D"color: hsl(120, 100%, 40%);">+ * @retur=
n      instance matching the address, NULL otherwise</span><br><span style=
=3D"color: hsl(120, 100%, 40%);">+ */</span><br><span style=3D"color: hsl(1=
20, 100%, 40%);">+static struct multi_instance *</span><br><span style=3D"c=
olor: hsl(120, 100%, 40%);">+multi_get_instance_udp_real(struct multi_conte=
xt *m, struct mroute_addr *real)</span><br><span style=3D"color: hsl(120, 1=
00%, 40%);">+{</span><br><span style=3D"color: hsl(120, 100%, 40%);">+    s=
truct hash *hash =3D m-&gt;hash;</span><br><span style=3D"color: hsl(120, 1=
00%, 40%);">+    struct hash_element *he;</span><br><span style=3D"color: h=
sl(120, 100%, 40%);">+    const uint64_t hv =3D hash_value(hash, real);</sp=
an><br><span style=3D"color: hsl(120, 100%, 40%);">+    struct hash_bucket =
*bucket =3D hash_bucket(hash, hv);</span><br><span style=3D"color: hsl(120,=
 100%, 40%);">+    he =3D hash_lookup_fast(hash, bucket, real, hv);</span><=
br><span style=3D"color: hsl(120, 100%, 40%);">+    if (he)</span><br><span=
 style=3D"color: hsl(120, 100%, 40%);">+    {</span><br><span style=3D"colo=
r: hsl(120, 100%, 40%);">+        return he-&gt;value;</span><br><span styl=
e=3D"color: hsl(120, 100%, 40%);">+    }</span><br><span style=3D"color: hs=
l(120, 100%, 40%);">+    return NULL;</span><br><span style=3D"color: hsl(1=
20, 100%, 40%);">+}</span><br><span style=3D"color: hsl(120, 100%, 40%);">+=
</span><br><span style=3D"color: hsl(120, 100%, 40%);">+</span><br><span st=
yle=3D"color: hsl(120, 100%, 40%);">+/**</span><br><span>  * Get a client i=
nstance based on real address=2E  If</span><br><span>  * the instance doesn=
&#39;t exist, create it while</span><br><span>  * maintaining real address =
hash table atomicity=2E</span><br><span>@@ -280,7 +302,6 @@</span><br><span=
> </span><br><span>     if (mroute_extract_openvpn_sockaddr(&amp;real, &amp=
;m-&gt;top=2Ec2=2Efrom=2Edest, true) &amp;&amp; m-&gt;top=2Ec2=2Ebuf=2Elen =
&gt; 0)</span><br><span>     {</span><br><span style=3D"color: hsl(0, 100%,=
 40%);">-        struct hash_element *he;</span><br><span>         const ui=
nt64_t hv =3D hash_value(hash, &amp;real);</span><br><span>         struct =
hash_bucket *bucket =3D hash_bucket(hash, hv);</span><br><span>         uin=
t8_t *ptr =3D BPTR(&amp;m-&gt;top=2Ec2=2Ebuf);</span><br><span>@@ -317,17 +=
338,13 @@</span><br><span>         }</span><br><span>         if (!v2 || pe=
er_id_disabled)</span><br><span>         {</span><br><span style=3D"color: =
hsl(0, 100%, 40%);">-            he =3D hash_lookup_fast(hash, bucket, &amp=
;real, hv);</span><br><span style=3D"color: hsl(0, 100%, 40%);">-          =
  if (he)</span><br><span style=3D"color: hsl(0, 100%, 40%);">-            =
{</span><br><span style=3D"color: hsl(0, 100%, 40%);">-                mi =
=3D (struct multi_instance *)he-&gt;value;</span><br><span style=3D"color: =
hsl(0, 100%, 40%);">-            }</span><br><span style=3D"color: hsl(120,=
 100%, 40%);">+            mi =3D multi_get_instance_udp_real(m, &amp;real)=
;</span><br><span>         }</span><br><span> </span><br><span>         /* =
we have no existing multi instance for this connection */</span><br><span> =
        if (!mi)</span><br><span>         {</span><br><span style=3D"color:=
 hsl(0, 100%, 40%);">-            mi =3D handle_connection_attempt(m, sock,=
 &amp;real, hv, bucket);</span><br><span style=3D"color: hsl(120, 100%, 40%=
);">+            mi =3D handle_connection_attempt(m, sock, &amp;real, bucke=
t);</span><br><span>         }</span><br><span> </span><br><span> #ifdef EN=
ABLE_DEBUG</span><br><span></span><br></pre><p>To view, visit <a href=3D"ht=
tp://gerrit=2Eopenvpn=2Enet/c/openvpn/+/1725?usp=3Demail">change 1725</a>=
=2E To unsubscribe, or for help writing mail filters, visit <a href=3D"http=
://gerrit=2Eopenvpn=2Enet/settings?usp=3Demail">settings</a>=2E</p><div ite=
mscope itemtype=3D"http://schema=2Eorg/EmailMessage"><div itemscope itempro=
p=3D"action" itemtype=3D"http://schema=2Eorg/ViewAction"><link itemprop=3D"=
url" href=3D"http://gerrit=2Eopenvpn=2Enet/c/openvpn/+/1725?usp=3Demail"/><=
meta itemprop=3D"name" content=3D"View Change"/></div></div>

<div style=3D=
"display:none"> Gerrit-MessageType: newpatchset </div>
<div style=3D"displa=
y:none"> Gerrit-Project: openvpn </div>
<div style=3D"display:none"> Gerrit=
-Branch: master </div>
<div style=3D"display:none"> Gerrit-Change-Id: I37ad=
e55d7674c68dd98cf4dfde35c4ad42e20d39 </div>
<div style=3D"display:none"> Ge=
rrit-Change-Number: 1725 </div>
<div style=3D"display:none"> Gerrit-PatchSe=
t: 15 </div>
<div style=3D"display:none"> Gerrit-Owner: plaisthos &lt;arne-=
openvpn@rfc2549=2Eorg&gt; </div>
<div style=3D"display:none"> Gerrit-Review=
er: flichtenheld &lt;frank@lichtenheld=2Ecom&gt; </div>
<div style=3D"displ=
ay:none"> Gerrit-CC: openvpn-devel &lt;openvpn-devel@lists=2Esourceforge=2E=
net&gt; </div>
<div style=3D"display:none"> Gerrit-Attention: plaisthos &lt=
;arne-openvpn@rfc2549=2Eorg&gt; </div>

</body></html>
--ov2EaacHJpM=--


--===============0320761490492325123==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline


--===============0320761490492325123==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
Openvpn-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openvpn-devel

--===============0320761490492325123==--