]> sourceware.org Git - newlib-cygwin.git/commitdiff
Cygwin: net: Make if_nametoindex, etc. consistent with if_nameindex.
authorTakashi Yano <takashi.yano@nifty.ne.jp>
Sat, 3 Feb 2024 03:45:29 +0000 (12:45 +0900)
committerTakashi Yano <takashi.yano@nifty.ne.jp>
Sat, 3 Feb 2024 14:50:12 +0000 (23:50 +0900)
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>
winsup/cygwin/autoload.cc
winsup/cygwin/net.cc
winsup/cygwin/release/3.5.1

index c1a124c1d1207cb56ce3328e2658bedce75704f2..7e610bdd01e14bd7891366454b7e23f134740d74 100644 (file)
@@ -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)
index 8840d5ead32c6508fc31aa025d4757a61f52eec7..08c584fe53407fb696eac784e9bd9dc9563f23f9 100644 (file)
@@ -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 *
index 054988b90c59e917ce7dec7dee3d66f14a193a3f..7776d120fbc206b24c1e6a14a7502be367db1304 100644 (file)
@@ -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().
This page took 0.037829 seconds and 5 git commands to generate.