[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openvpn-devel
Subject:    Re: [Openvpn-devel] [PATCH v2 1/7] tun.c: make Windows device lookup functions more general
From:       Lev Stipakov <lstipakov () gmail ! com>
Date:       2019-12-20 18:20:42
Message-ID: CAGyAFMUHovmoecn16qZ5iDte5KJ=X5y69m-fiDzK2xdtDO-o9w () mail ! gmail ! com
[Download RAW message or body]

[Attachment #2 (multipart/alternative)]


Compared with v1, only changes are (suggested) function names.

Compiled with MSVC.

Acked-by: Lev Stipakov <lstipakov@gmail.com>

pe 20. jouluk. 2019 klo 18.14 Simon Rozman (simon@rozman.si) kirjoitti:

> Since the introduction of Wintun, not all network devices in Windows are
> TAP-Windows6. Rather than returning a simple true/false answer, a couple
> of functions were reworked to return a corresponding struct tap_reg *
> or NULL instead.
>
> As it would make the code `tr = is_tap_win(...)` a bit awkward those
> functions (both static) were renamed to better reflect their nature.
>
> Signed-off-by: Simon Rozman <simon@rozman.si>
> ---
>  src/openvpn/tun.c | 39 ++++++++++++++++++++++-----------------
>  1 file changed, 22 insertions(+), 17 deletions(-)
>
> diff --git a/src/openvpn/tun.c b/src/openvpn/tun.c
> index ad497a71..0d6f40fe 100644
> --- a/src/openvpn/tun.c
> +++ b/src/openvpn/tun.c
> @@ -3976,10 +3976,10 @@ show_tap_win_adapters(int msglev, int warnlev)
>  }
>
>  /*
> - * Confirm that GUID is a TAP-Windows adapter.
> + * Lookup a TAP-Windows or Wintun adapter by GUID.
>   */
> -static bool
> -is_tap_win(const char *guid, const struct tap_reg *tap_reg)
> +static const struct tap_reg *
> +get_adapter_by_guid(const char *guid, const struct tap_reg *tap_reg)
>  {
>      const struct tap_reg *tr;
>
> @@ -3987,11 +3987,11 @@ is_tap_win(const char *guid, const struct tap_reg
> *tap_reg)
>      {
>          if (guid && !strcmp(tr->guid, guid))
>          {
> -            return true;
> +            return tr;
>          }
>      }
>
> -    return false;
> +    return NULL;
>  }
>
>  static const char *
> @@ -4010,16 +4010,16 @@ guid_to_name(const char *guid, const struct
> panel_reg *panel_reg)
>      return NULL;
>  }
>
> -static const char *
> -name_to_guid(const char *name, const struct tap_reg *tap_reg, const
> struct panel_reg *panel_reg)
> +static const struct tap_reg *
> +get_adapter_by_name(const char *name, const struct tap_reg *tap_reg,
> const struct panel_reg *panel_reg)
>  {
>      const struct panel_reg *pr;
>
>      for (pr = panel_reg; pr != NULL; pr = pr->next)
>      {
> -        if (name && !strcmp(pr->name, name) && is_tap_win(pr->guid,
> tap_reg))
> +        if (name && !strcmp(pr->name, name))
>          {
> -            return pr->guid;
> +            return get_adapter_by_guid(pr->guid, tap_reg);
>          }
>      }
>
> @@ -4116,6 +4116,7 @@ get_device_guid(const char *name,
>  {
>      struct buffer ret = alloc_buf_gc(256, gc);
>      struct buffer actual = clear_buf();
> +    const struct tap_reg *tr;
>
>      /* Make sure we have at least one TAP adapter */
>      if (!tap_reg)
> @@ -4131,7 +4132,8 @@ get_device_guid(const char *name,
>      }
>
>      /* Check if GUID was explicitly specified as --dev-node parameter */
> -    if (is_tap_win(name, tap_reg))
> +    tr = get_adapter_by_guid(name, tap_reg);
> +    if (tr)
>      {
>          const char *act = guid_to_name(name, panel_reg);
>          buf_printf(&ret, "%s", name);
> @@ -4148,11 +4150,11 @@ get_device_guid(const char *name,
>
>      /* Lookup TAP adapter in network connections list */
>      {
> -        const char *guid = name_to_guid(name, tap_reg, panel_reg);
> -        if (guid)
> +        tr = get_adapter_by_name(name, tap_reg, panel_reg);
> +        if (tr)
>          {
>              buf_printf(&actual, "%s", name);
> -            buf_printf(&ret, "%s", guid);
> +            buf_printf(&ret, "%s", tr->guid);
>              return BSTR(&ret);
>          }
>      }
> @@ -4696,11 +4698,14 @@ get_adapter_index_flexible(const char *name)  /*
> actual name or GUID */
>      {
>          const struct tap_reg *tap_reg = get_tap_reg(&gc);
>          const struct panel_reg *panel_reg = get_panel_reg(&gc);
> -        const char *guid = name_to_guid(name, tap_reg, panel_reg);
> -        index = get_adapter_index_method_1(guid);
> -        if (index == TUN_ADAPTER_INDEX_INVALID)
> +        const struct tap_reg *tr = get_adapter_by_name(name, tap_reg,
> panel_reg);
> +        if (tr)
>          {
> -            index = get_adapter_index_method_2(guid);
> +            index = get_adapter_index_method_1(tr->guid);
> +            if (index == TUN_ADAPTER_INDEX_INVALID)
> +            {
> +                index = get_adapter_index_method_2(tr->guid);
> +            }
>          }
>      }
>      if (index == TUN_ADAPTER_INDEX_INVALID)
> --
> 2.24.1.windows.2
>
>
>
> _______________________________________________
> Openvpn-devel mailing list
> Openvpn-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/openvpn-devel
>


-- 
-Lev

[Attachment #5 (text/html)]

<div dir="ltr">Compared with v1, only changes are (suggested) function \
names.<div><br></div><div>Compiled with MSVC.</div><div><br></div><div>Acked-by: Lev \
Stipakov &lt;<a href="mailto:lstipakov@gmail.com">lstipakov@gmail.com</a>&gt;</div></div><br><div \
class="gmail_quote"><div dir="ltr" class="gmail_attr">pe 20. jouluk. 2019 klo 18.14 \
Simon Rozman (<a href="mailto:simon@rozman.si">simon@rozman.si</a>) \
kirjoitti:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px \
0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Since the introduction \
of Wintun, not all network devices in Windows are<br> TAP-Windows6. Rather than \
returning a simple true/false answer, a couple<br> of functions were reworked to \
return a corresponding struct tap_reg *<br> or NULL instead.<br>
<br>
As it would make the code `tr = is_tap_win(...)` a bit awkward those<br>
functions (both static) were renamed to better reflect their nature.<br>
<br>
Signed-off-by: Simon Rozman &lt;<a href="mailto:simon@rozman.si" \
                target="_blank">simon@rozman.si</a>&gt;<br>
---<br>
  src/openvpn/tun.c | 39 ++++++++++++++++++++++-----------------<br>
  1 file changed, 22 insertions(+), 17 deletions(-)<br>
<br>
diff --git a/src/openvpn/tun.c b/src/openvpn/tun.c<br>
index ad497a71..0d6f40fe 100644<br>
--- a/src/openvpn/tun.c<br>
+++ b/src/openvpn/tun.c<br>
@@ -3976,10 +3976,10 @@ show_tap_win_adapters(int msglev, int warnlev)<br>
  }<br>
<br>
  /*<br>
- * Confirm that GUID is a TAP-Windows adapter.<br>
+ * Lookup a TAP-Windows or Wintun adapter by GUID.<br>
   */<br>
-static bool<br>
-is_tap_win(const char *guid, const struct tap_reg *tap_reg)<br>
+static const struct tap_reg *<br>
+get_adapter_by_guid(const char *guid, const struct tap_reg *tap_reg)<br>
  {<br>
        const struct tap_reg *tr;<br>
<br>
@@ -3987,11 +3987,11 @@ is_tap_win(const char *guid, const struct tap_reg \
*tap_reg)<br>  {<br>
              if (guid &amp;&amp; !strcmp(tr-&gt;guid, guid))<br>
              {<br>
-                  return true;<br>
+                  return tr;<br>
              }<br>
        }<br>
<br>
-      return false;<br>
+      return NULL;<br>
  }<br>
<br>
  static const char *<br>
@@ -4010,16 +4010,16 @@ guid_to_name(const char *guid, const struct panel_reg \
*panel_reg)<br>  return NULL;<br>
  }<br>
<br>
-static const char *<br>
-name_to_guid(const char *name, const struct tap_reg *tap_reg, const struct panel_reg \
*panel_reg)<br> +static const struct tap_reg *<br>
+get_adapter_by_name(const char *name, const struct tap_reg *tap_reg, const struct \
panel_reg *panel_reg)<br>  {<br>
        const struct panel_reg *pr;<br>
<br>
        for (pr = panel_reg; pr != NULL; pr = pr-&gt;next)<br>
        {<br>
-            if (name &amp;&amp; !strcmp(pr-&gt;name, name) &amp;&amp; \
is_tap_win(pr-&gt;guid, tap_reg))<br> +            if (name &amp;&amp; \
!strcmp(pr-&gt;name, name))<br>  {<br>
-                  return pr-&gt;guid;<br>
+                  return get_adapter_by_guid(pr-&gt;guid, tap_reg);<br>
              }<br>
        }<br>
<br>
@@ -4116,6 +4116,7 @@ get_device_guid(const char *name,<br>
  {<br>
        struct buffer ret = alloc_buf_gc(256, gc);<br>
        struct buffer actual = clear_buf();<br>
+      const struct tap_reg *tr;<br>
<br>
        /* Make sure we have at least one TAP adapter */<br>
        if (!tap_reg)<br>
@@ -4131,7 +4132,8 @@ get_device_guid(const char *name,<br>
        }<br>
<br>
        /* Check if GUID was explicitly specified as --dev-node parameter */<br>
-      if (is_tap_win(name, tap_reg))<br>
+      tr = get_adapter_by_guid(name, tap_reg);<br>
+      if (tr)<br>
        {<br>
              const char *act = guid_to_name(name, panel_reg);<br>
              buf_printf(&amp;ret, &quot;%s&quot;, name);<br>
@@ -4148,11 +4150,11 @@ get_device_guid(const char *name,<br>
<br>
        /* Lookup TAP adapter in network connections list */<br>
        {<br>
-            const char *guid = name_to_guid(name, tap_reg, panel_reg);<br>
-            if (guid)<br>
+            tr = get_adapter_by_name(name, tap_reg, panel_reg);<br>
+            if (tr)<br>
              {<br>
                    buf_printf(&amp;actual, &quot;%s&quot;, name);<br>
-                  buf_printf(&amp;ret, &quot;%s&quot;, guid);<br>
+                  buf_printf(&amp;ret, &quot;%s&quot;, tr-&gt;guid);<br>
                    return BSTR(&amp;ret);<br>
              }<br>
        }<br>
@@ -4696,11 +4698,14 @@ get_adapter_index_flexible(const char *name)   /* actual name \
or GUID */<br>  {<br>
              const struct tap_reg *tap_reg = get_tap_reg(&amp;gc);<br>
              const struct panel_reg *panel_reg = get_panel_reg(&amp;gc);<br>
-            const char *guid = name_to_guid(name, tap_reg, panel_reg);<br>
-            index = get_adapter_index_method_1(guid);<br>
-            if (index == TUN_ADAPTER_INDEX_INVALID)<br>
+            const struct tap_reg *tr = get_adapter_by_name(name, tap_reg, \
panel_reg);<br> +            if (tr)<br>
              {<br>
-                  index = get_adapter_index_method_2(guid);<br>
+                  index = get_adapter_index_method_1(tr-&gt;guid);<br>
+                  if (index == TUN_ADAPTER_INDEX_INVALID)<br>
+                  {<br>
+                        index = get_adapter_index_method_2(tr-&gt;guid);<br>
+                  }<br>
              }<br>
        }<br>
        if (index == TUN_ADAPTER_INDEX_INVALID)<br>
-- <br>
2.24.1.windows.2<br>
<br>
<br>
<br>
_______________________________________________<br>
Openvpn-devel mailing list<br>
<a href="mailto:Openvpn-devel@lists.sourceforge.net" \
target="_blank">Openvpn-devel@lists.sourceforge.net</a><br> <a \
href="https://lists.sourceforge.net/lists/listinfo/openvpn-devel" rel="noreferrer" \
target="_blank">https://lists.sourceforge.net/lists/listinfo/openvpn-devel</a><br> \
</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" \
class="gmail_signature">-Lev</div>





_______________________________________________
Openvpn-devel mailing list
Openvpn-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openvpn-devel


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic