public inbox for cygwin-cvs@sourceware.org
help / color / mirror / Atom feed
From: Takashi Yano <tyan0@sourceware.org>
To: cygwin-cvs@sourceware.org
Subject: [newlib-cygwin] Cygwin: net: Make if_nametoindex, etc. consistent with if_nameindex.
Date: Sat,  3 Feb 2024 14:51:22 +0000 (GMT)	[thread overview]
Message-ID: <20240203145122.4BA2F3858289@sourceware.org> (raw)

https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=b91d38db37d8088901e47d73a65dadac51e227fb

commit b91d38db37d8088901e47d73a65dadac51e227fb
Author: Takashi Yano <takashi.yano@nifty.ne.jp>
Date:   Sat Feb 3 12:45:29 2024 +0900

    Cygwin: net: Make if_nametoindex, etc. consistent with if_nameindex.
    
    Currently, if_nametoindex() and if_indextoname() handle interface names
    such as "ethernet_32777", while if_nameindex() returns the names such
    as "{5AF7ACD0-D52E-4DFC-A4D0-54D3E6D6B2AC}". This patch unifies the
    interface names to the latter.
    
    Fixes: c356901f0d69 ("Rename if_indextoname to cygwin_if_indextoname (analag for if_nametoindex)")
    Reviewed-by: Corinna Vinschen <corinna@vinschen.de>
    Signed-off-by: Takashi Yano <takashi.yano@nifty.ne.jp>

Diff:
---
 winsup/cygwin/autoload.cc   |  2 --
 winsup/cygwin/net.cc        | 31 +++++++++++++++++++++++++++++--
 winsup/cygwin/release/3.5.1 |  3 +++
 3 files changed, 32 insertions(+), 4 deletions(-)

diff --git a/winsup/cygwin/autoload.cc b/winsup/cygwin/autoload.cc
index c1a124c1d..7e610bdd0 100644
--- a/winsup/cygwin/autoload.cc
+++ b/winsup/cygwin/autoload.cc
@@ -462,8 +462,6 @@ LoadDLLfunc (GetNetworkParams, iphlpapi)
 LoadDLLfunc (GetTcpTable, iphlpapi)
 LoadDLLfunc (GetTcp6Table, iphlpapi)
 LoadDLLfunc (GetUdpTable, iphlpapi)
-LoadDLLfunc (if_indextoname, iphlpapi)
-LoadDLLfunc (if_nametoindex, iphlpapi)
 
 LoadDLLfuncEx2 (DiscardVirtualMemory, kernel32, 1, 127)
 LoadDLLfuncEx (ClosePseudoConsole, kernel32, 1)
diff --git a/winsup/cygwin/net.cc b/winsup/cygwin/net.cc
index 8840d5ead..08c584fe5 100644
--- a/winsup/cygwin/net.cc
+++ b/winsup/cygwin/net.cc
@@ -2001,13 +2001,40 @@ get_ifconf (struct ifconf *ifc, int what)
 extern "C" unsigned
 cygwin_if_nametoindex (const char *name)
 {
-  return (unsigned) ::if_nametoindex (name);
+  PIP_ADAPTER_ADDRESSES pa0 = NULL, pap;
+  if (get_adapters_addresses (&pa0, AF_UNSPEC))
+    for (pap = pa0; pap; pap = pap->Next)
+      if (strcmp (name, pap->AdapterName) == 0)
+	{
+	  free (pa0);
+	  return pap->IfIndex;
+	}
+  if (pa0)
+    free (pa0);
+  return 0;
 }
 
 extern "C" char *
 cygwin_if_indextoname (unsigned ifindex, char *ifname)
 {
-  return ::if_indextoname (ifindex, ifname);
+  if (ifindex == 0 || ifname == NULL)
+    {
+      set_errno (ENXIO);
+      return NULL;
+    }
+  PIP_ADAPTER_ADDRESSES pa0 = NULL, pap;
+  if (get_adapters_addresses (&pa0, AF_UNSPEC))
+    for (pap = pa0; pap; pap = pap->Next)
+      if (ifindex == pap->IfIndex)
+	{
+	  strcpy (ifname, pap->AdapterName);
+	  free (pa0);
+	  return ifname;
+	}
+  if (pa0)
+    free (pa0);
+  set_errno (ENXIO);
+  return NULL;
 }
 
 extern "C" struct if_nameindex *
diff --git a/winsup/cygwin/release/3.5.1 b/winsup/cygwin/release/3.5.1
index 054988b90..7776d120f 100644
--- a/winsup/cygwin/release/3.5.1
+++ b/winsup/cygwin/release/3.5.1
@@ -3,3 +3,6 @@ Bug Fixes
 
 - Fix exit code for non-cygwin process running in console. The bug
   was introduced in 3.5.0.
+
+- Make the interface names handled by if_nametoindex() and if_indextoname()
+  consistent with that of if_nameindex().

                 reply	other threads:[~2024-02-03 14:51 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240203145122.4BA2F3858289@sourceware.org \
    --to=tyan0@sourceware.org \
    --cc=cygwin-cvs@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).