* net.cc: Run indent.
* autoload.cc (GetIfEntry): Add symbol. * net.cc (get_2k_ifconf): Get the interface entries with the GetIfEntry call intead of the GetIfTable call. Clean-up multiple IP address naming.
This commit is contained in:
parent
5d7bffe927
commit
7922485391
@ -1,3 +1,13 @@
|
|||||||
|
2002-11-10 Corinna Vinschen <corinna@vinschen.de>
|
||||||
|
|
||||||
|
* net.cc: Run indent.
|
||||||
|
|
||||||
|
2002-11-10 Alexander Gottwald <Alexander.Gottwald@s1999.tu-chemnitz.de>
|
||||||
|
|
||||||
|
* autoload.cc (GetIfEntry): Add symbol.
|
||||||
|
* net.cc (get_2k_ifconf): Get the interface entries with the GetIfEntry
|
||||||
|
call intead of the GetIfTable call. Clean-up multiple IP address naming.
|
||||||
|
|
||||||
2002-11-09 Sergey Okhapkin <sos@prospect.com.ru>
|
2002-11-09 Sergey Okhapkin <sos@prospect.com.ru>
|
||||||
|
|
||||||
* fhandler.h (class fhandler_pipe): New ioctl() method.
|
* fhandler.h (class fhandler_pipe): New ioctl() method.
|
||||||
|
@ -485,6 +485,7 @@ LoadDLLfuncEx (WSAEventSelect, 12, ws2_32, 1)
|
|||||||
LoadDLLfuncEx (WSAEnumNetworkEvents, 12, ws2_32, 1)
|
LoadDLLfuncEx (WSAEnumNetworkEvents, 12, ws2_32, 1)
|
||||||
|
|
||||||
LoadDLLfuncEx (GetIfTable, 12, iphlpapi, 1)
|
LoadDLLfuncEx (GetIfTable, 12, iphlpapi, 1)
|
||||||
|
LoadDLLfuncEx (GetIfEntry, 4, iphlpapi, 1)
|
||||||
LoadDLLfuncEx (GetIpAddrTable, 12, iphlpapi, 1)
|
LoadDLLfuncEx (GetIpAddrTable, 12, iphlpapi, 1)
|
||||||
|
|
||||||
LoadDLLfunc (CoInitialize, 4, ole32)
|
LoadDLLfunc (CoInitialize, 4, ole32)
|
||||||
|
@ -34,7 +34,8 @@ details. */
|
|||||||
#include "registry.h"
|
#include "registry.h"
|
||||||
#include "wsock_event.h"
|
#include "wsock_event.h"
|
||||||
|
|
||||||
extern "C" {
|
extern "C"
|
||||||
|
{
|
||||||
int h_errno;
|
int h_errno;
|
||||||
|
|
||||||
int __stdcall rcmd (char **ahost, unsigned short inport, char *locuser,
|
int __stdcall rcmd (char **ahost, unsigned short inport, char *locuser,
|
||||||
@ -104,10 +105,12 @@ static fhandler_socket *
|
|||||||
get (const int fd)
|
get (const int fd)
|
||||||
{
|
{
|
||||||
cygheap_fdget cfd (fd);
|
cygheap_fdget cfd (fd);
|
||||||
|
|
||||||
if (cfd < 0)
|
if (cfd < 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
fhandler_socket *const fh = cfd->is_socket ();
|
fhandler_socket *const fh = cfd->is_socket ();
|
||||||
|
|
||||||
if (!fh)
|
if (!fh)
|
||||||
set_errno (ENOTSOCK);
|
set_errno (ENOTSOCK);
|
||||||
|
|
||||||
@ -119,6 +122,7 @@ static SOCKET __stdcall
|
|||||||
set_socket_inheritance (SOCKET sock)
|
set_socket_inheritance (SOCKET sock)
|
||||||
{
|
{
|
||||||
SOCKET osock = sock;
|
SOCKET osock = sock;
|
||||||
|
|
||||||
if (!DuplicateHandle (hMainProc, (HANDLE) sock, hMainProc, (HANDLE *) &sock,
|
if (!DuplicateHandle (hMainProc, (HANDLE) sock, hMainProc, (HANDLE *) &sock,
|
||||||
0, TRUE, DUPLICATE_SAME_ACCESS | DUPLICATE_CLOSE_SOURCE))
|
0, TRUE, DUPLICATE_SAME_ACCESS | DUPLICATE_CLOSE_SOURCE))
|
||||||
system_printf ("DuplicateHandle failed %E");
|
system_printf ("DuplicateHandle failed %E");
|
||||||
@ -178,6 +182,7 @@ cygwin_inet_ntoa (struct in_addr in)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
char *res = inet_ntoa (in);
|
char *res = inet_ntoa (in);
|
||||||
|
|
||||||
if (ntoa_buf)
|
if (ntoa_buf)
|
||||||
{
|
{
|
||||||
free (ntoa_buf);
|
free (ntoa_buf);
|
||||||
@ -195,6 +200,7 @@ cygwin_inet_addr (const char *cp)
|
|||||||
if (check_null_str_errno (cp))
|
if (check_null_str_errno (cp))
|
||||||
return INADDR_NONE;
|
return INADDR_NONE;
|
||||||
unsigned long res = inet_addr (cp);
|
unsigned long res = inet_addr (cp);
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -208,6 +214,7 @@ cygwin_inet_aton (const char *cp, struct in_addr *inp)
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
unsigned long res = inet_addr (cp);
|
unsigned long res = inet_addr (cp);
|
||||||
|
|
||||||
if (res == INADDR_NONE && strcmp (cp, "255.255.255.255"))
|
if (res == INADDR_NONE && strcmp (cp, "255.255.255.255"))
|
||||||
return 0;
|
return 0;
|
||||||
if (inp)
|
if (inp)
|
||||||
@ -224,6 +231,7 @@ cygwin_inet_network (const char *cp)
|
|||||||
if (check_null_str_errno (cp))
|
if (check_null_str_errno (cp))
|
||||||
return INADDR_NONE;
|
return INADDR_NONE;
|
||||||
unsigned int res = inet_network (cp);
|
unsigned int res = inet_network (cp);
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -280,8 +288,7 @@ struct tl
|
|||||||
int e;
|
int e;
|
||||||
};
|
};
|
||||||
|
|
||||||
static NO_COPY struct tl errmap[] =
|
static NO_COPY struct tl errmap[] = {
|
||||||
{
|
|
||||||
{WSAEINTR, "WSAEINTR", EINTR},
|
{WSAEINTR, "WSAEINTR", EINTR},
|
||||||
{WSAEWOULDBLOCK, "WSAEWOULDBLOCK", EWOULDBLOCK},
|
{WSAEWOULDBLOCK, "WSAEWOULDBLOCK", EWOULDBLOCK},
|
||||||
{WSAEINPROGRESS, "WSAEINPROGRESS", EINPROGRESS},
|
{WSAEINPROGRESS, "WSAEINPROGRESS", EINPROGRESS},
|
||||||
@ -342,6 +349,7 @@ __set_winsock_errno (const char *fn, int ln)
|
|||||||
{
|
{
|
||||||
DWORD werr = WSAGetLastError ();
|
DWORD werr = WSAGetLastError ();
|
||||||
int err = find_winsock_errno (werr);
|
int err = find_winsock_errno (werr);
|
||||||
|
|
||||||
set_errno (err);
|
set_errno (err);
|
||||||
syscall_printf ("%s:%d - winsock error %d -> errno %d", fn, ln, werr, err);
|
syscall_printf ("%s:%d - winsock error %d -> errno %d", fn, ln, werr, err);
|
||||||
}
|
}
|
||||||
@ -350,8 +358,7 @@ __set_winsock_errno (const char *fn, int ln)
|
|||||||
* Since the member `s' isn't used for debug output we can use it
|
* Since the member `s' isn't used for debug output we can use it
|
||||||
* for the error text returned by herror and hstrerror.
|
* for the error text returned by herror and hstrerror.
|
||||||
*/
|
*/
|
||||||
static NO_COPY struct tl host_errmap[] =
|
static NO_COPY struct tl host_errmap[] = {
|
||||||
{
|
|
||||||
{WSAHOST_NOT_FOUND, "Unknown host", HOST_NOT_FOUND},
|
{WSAHOST_NOT_FOUND, "Unknown host", HOST_NOT_FOUND},
|
||||||
{WSATRY_AGAIN, "Host name lookup failure", TRY_AGAIN},
|
{WSATRY_AGAIN, "Host name lookup failure", TRY_AGAIN},
|
||||||
{WSANO_RECOVERY, "Unknown server error", NO_RECOVERY},
|
{WSANO_RECOVERY, "Unknown server error", NO_RECOVERY},
|
||||||
@ -366,6 +373,7 @@ set_host_errno ()
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
int why = WSAGetLastError ();
|
int why = WSAGetLastError ();
|
||||||
|
|
||||||
for (i = 0; host_errmap[i].w != 0; ++i)
|
for (i = 0; host_errmap[i].w != 0; ++i)
|
||||||
if (why == host_errmap[i].w)
|
if (why == host_errmap[i].w)
|
||||||
break;
|
break;
|
||||||
@ -445,6 +453,7 @@ dup_protoent_ptr (struct protoent *src)
|
|||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
struct protoent *dst = (struct protoent *) calloc (1, sizeof *dst);
|
struct protoent *dst = (struct protoent *) calloc (1, sizeof *dst);
|
||||||
|
|
||||||
if (!dst)
|
if (!dst)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
@ -508,11 +517,14 @@ fdsock (int& fd, const char *name, SOCKET soc)
|
|||||||
{
|
{
|
||||||
/* NT systems apparently set sockets to inheritable by default */
|
/* NT systems apparently set sockets to inheritable by default */
|
||||||
SetHandleInformation ((HANDLE) soc, HANDLE_FLAG_INHERIT, 0);
|
SetHandleInformation ((HANDLE) soc, HANDLE_FLAG_INHERIT, 0);
|
||||||
debug_printf ("reset socket inheritance since winsock2_active %d", winsock2_active);
|
debug_printf ("reset socket inheritance since winsock2_active %d",
|
||||||
|
winsock2_active);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
debug_printf ("not setting socket inheritance since winsock2_active %d", winsock2_active);
|
debug_printf ("not setting socket inheritance since winsock2_active %d",
|
||||||
fhandler_socket *fh = (fhandler_socket *) cygheap->fdtab.build_fhandler (fd, FH_SOCKET, name);
|
winsock2_active);
|
||||||
|
fhandler_socket *fh =
|
||||||
|
(fhandler_socket *) cygheap->fdtab.build_fhandler (fd, FH_SOCKET, name);
|
||||||
fh->set_io_handle ((HANDLE) soc);
|
fh->set_io_handle ((HANDLE) soc);
|
||||||
fh->set_flags (O_RDWR | O_BINARY);
|
fh->set_flags (O_RDWR | O_BINARY);
|
||||||
fh->set_r_no_interrupt (winsock2_active);
|
fh->set_r_no_interrupt (winsock2_active);
|
||||||
@ -543,6 +555,7 @@ cygwin_socket (int af, int type, int protocol)
|
|||||||
}
|
}
|
||||||
|
|
||||||
const char *name;
|
const char *name;
|
||||||
|
|
||||||
if (af == AF_INET)
|
if (af == AF_INET)
|
||||||
name = (type == SOCK_STREAM ? "/dev/tcp" : "/dev/udp");
|
name = (type == SOCK_STREAM ? "/dev/tcp" : "/dev/udp");
|
||||||
else
|
else
|
||||||
@ -729,6 +742,7 @@ cygwin_getsockopt (int fd, int level, int optname, void *optval, int *optlen)
|
|||||||
if (optname == SO_ERROR)
|
if (optname == SO_ERROR)
|
||||||
{
|
{
|
||||||
int *e = (int *) optval;
|
int *e = (int *) optval;
|
||||||
|
|
||||||
*e = find_winsock_errno (*e);
|
*e = find_winsock_errno (*e);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -784,6 +798,7 @@ struct pservent
|
|||||||
short s_port;
|
short s_port;
|
||||||
char *s_proto;
|
char *s_proto;
|
||||||
};
|
};
|
||||||
|
|
||||||
#pragma pack(pop)
|
#pragma pack(pop)
|
||||||
static struct servent *
|
static struct servent *
|
||||||
dup_servent_ptr (struct servent *src)
|
dup_servent_ptr (struct servent *src)
|
||||||
@ -792,6 +807,7 @@ dup_servent_ptr (struct servent *src)
|
|||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
struct servent *dst = (struct servent *) calloc (1, sizeof *dst);
|
struct servent *dst = (struct servent *) calloc (1, sizeof *dst);
|
||||||
|
|
||||||
if (!dst)
|
if (!dst)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
@ -803,6 +819,7 @@ dup_servent_ptr (struct servent *src)
|
|||||||
if (src->s_aliases && !(dst->s_aliases = dup_char_list (src->s_aliases)))
|
if (src->s_aliases && !(dst->s_aliases = dup_char_list (src->s_aliases)))
|
||||||
goto out;
|
goto out;
|
||||||
char *s_proto;
|
char *s_proto;
|
||||||
|
|
||||||
if (IsBadReadPtr (src->s_proto, sizeof (src->s_proto))
|
if (IsBadReadPtr (src->s_proto, sizeof (src->s_proto))
|
||||||
&& !IsBadReadPtr (((pservent *) src)->s_proto, sizeof (src->s_proto)))
|
&& !IsBadReadPtr (((pservent *) src)->s_proto, sizeof (src->s_proto)))
|
||||||
s_proto = ((pservent *) src)->s_proto;
|
s_proto = ((pservent *) src)->s_proto;
|
||||||
@ -868,8 +885,7 @@ cygwin_gethostname (char *name, size_t len)
|
|||||||
if (__check_null_invalid_struct_errno (name, len))
|
if (__check_null_invalid_struct_errno (name, len))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if (wsock32_handle == NULL ||
|
if (wsock32_handle == NULL || win32_gethostname (name, len) == SOCKET_ERROR)
|
||||||
win32_gethostname (name, len) == SOCKET_ERROR)
|
|
||||||
{
|
{
|
||||||
DWORD local_len = len;
|
DWORD local_len = len;
|
||||||
|
|
||||||
@ -906,6 +922,7 @@ dup_hostent_ptr (struct hostent *src)
|
|||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
struct hostent *dst = (struct hostent *) calloc (1, sizeof *dst);
|
struct hostent *dst = (struct hostent *) calloc (1, sizeof *dst);
|
||||||
|
|
||||||
if (!dst)
|
if (!dst)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
@ -1192,8 +1209,7 @@ getdomainname (char *domain, size_t len)
|
|||||||
(!wincap.is_winnt ()) ? "System" : "SYSTEM",
|
(!wincap.is_winnt ()) ? "System" : "SYSTEM",
|
||||||
"CurrentControlSet", "Services",
|
"CurrentControlSet", "Services",
|
||||||
(!wincap.is_winnt ()) ? "VxD" : "Tcpip",
|
(!wincap.is_winnt ()) ? "VxD" : "Tcpip",
|
||||||
(!wincap.is_winnt ()) ? "MSTCP" : "Parameters",
|
(!wincap.is_winnt ()) ? "MSTCP" : "Parameters", NULL);
|
||||||
NULL);
|
|
||||||
|
|
||||||
/* FIXME: Are registry keys case sensitive? */
|
/* FIXME: Are registry keys case sensitive? */
|
||||||
if (r.error () || r.get_string ("Domain", domain, len, "") != ERROR_SUCCESS)
|
if (r.error () || r.get_string ("Domain", domain, len, "") != ERROR_SUCCESS)
|
||||||
@ -1216,59 +1232,139 @@ static void
|
|||||||
get_2k_ifconf (struct ifconf *ifc, int what)
|
get_2k_ifconf (struct ifconf *ifc, int what)
|
||||||
{
|
{
|
||||||
int cnt = 0;
|
int cnt = 0;
|
||||||
char eth[2] = "/", ppp[2] = "/", slp[2] = "/", sub[2] = "0", tok[2] = "/";
|
int ethId = 0, pppId = 0, slpId = 0, tokId = 0;
|
||||||
|
|
||||||
/* Union maps buffer to correct struct */
|
/* Union maps buffer to correct struct */
|
||||||
struct ifreq *ifr = ifc->ifc_req;
|
struct ifreq *ifr = ifc->ifc_req;
|
||||||
|
|
||||||
DWORD if_cnt, ip_cnt, lip, lnp;
|
DWORD ip_cnt, lip, lnp;
|
||||||
DWORD siz_if_table = 0;
|
|
||||||
DWORD siz_ip_table = 0;
|
DWORD siz_ip_table = 0;
|
||||||
PMIB_IFTABLE ift;
|
|
||||||
PMIB_IPADDRTABLE ipt;
|
PMIB_IPADDRTABLE ipt;
|
||||||
|
PMIB_IFROW ifrow;
|
||||||
struct sockaddr_in *sa = NULL;
|
struct sockaddr_in *sa = NULL;
|
||||||
struct sockaddr *so = NULL;
|
struct sockaddr *so = NULL;
|
||||||
|
|
||||||
if (GetIfTable (NULL, &siz_if_table, TRUE) == ERROR_INSUFFICIENT_BUFFER &&
|
typedef struct ifcount_t
|
||||||
GetIpAddrTable (NULL, &siz_ip_table, TRUE) == ERROR_INSUFFICIENT_BUFFER &&
|
|
||||||
(ift = (PMIB_IFTABLE) alloca (siz_if_table)) &&
|
|
||||||
(ipt = (PMIB_IPADDRTABLE) alloca (siz_ip_table)) &&
|
|
||||||
!GetIfTable (ift, &siz_if_table, TRUE) &&
|
|
||||||
!GetIpAddrTable (ipt, &siz_ip_table, TRUE))
|
|
||||||
{
|
{
|
||||||
/* Iterate over all known interfaces */
|
DWORD ifIndex;
|
||||||
for (if_cnt = 0; if_cnt < ift->dwNumEntries; ++if_cnt)
|
size_t count;
|
||||||
|
unsigned int enumerated; // for eth0:1
|
||||||
|
unsigned int classId; // for eth0, tok0 ...
|
||||||
|
|
||||||
|
};
|
||||||
|
ifcount_t *iflist, *ifEntry;
|
||||||
|
|
||||||
|
if (GetIpAddrTable (NULL, &siz_ip_table, TRUE) == ERROR_INSUFFICIENT_BUFFER
|
||||||
|
&& (ifrow = (PMIB_IFROW) alloca (sizeof (MIB_IFROW)))
|
||||||
|
&& (ipt = (PMIB_IPADDRTABLE) alloca (siz_ip_table))
|
||||||
|
&& !GetIpAddrTable (ipt, &siz_ip_table, TRUE))
|
||||||
{
|
{
|
||||||
*sub = '0';
|
iflist =
|
||||||
|
(ifcount_t *) alloca (sizeof (ifcount_t) * (ipt->dwNumEntries + 1));
|
||||||
|
memset (iflist, 0, sizeof (ifcount_t) * (ipt->dwNumEntries + 1));
|
||||||
|
for (ip_cnt = 0; ip_cnt < ipt->dwNumEntries; ++ip_cnt)
|
||||||
|
{
|
||||||
|
ifEntry = iflist;
|
||||||
|
/* search for matching entry (and stop at first free entry) */
|
||||||
|
while (ifEntry->count != 0)
|
||||||
|
{
|
||||||
|
if (ifEntry->ifIndex == ipt->table[ip_cnt].dwIndex)
|
||||||
|
break;
|
||||||
|
ifEntry++;
|
||||||
|
}
|
||||||
|
if (ifEntry->count == 0)
|
||||||
|
{
|
||||||
|
ifEntry->count = 1;
|
||||||
|
ifEntry->ifIndex = ipt->table[ip_cnt].dwIndex;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ifEntry->count++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// reset the last element. This is just the stopper for the loop.
|
||||||
|
iflist[ipt->dwNumEntries].count = 0;
|
||||||
|
|
||||||
/* Iterate over all configured IP-addresses */
|
/* Iterate over all configured IP-addresses */
|
||||||
for (ip_cnt = 0; ip_cnt < ipt->dwNumEntries; ++ip_cnt)
|
for (ip_cnt = 0; ip_cnt < ipt->dwNumEntries; ++ip_cnt)
|
||||||
{
|
{
|
||||||
/* Does the IP address belong to the interface? */
|
memset (ifrow, 0, sizeof (MIB_IFROW));
|
||||||
if (ipt->table[ip_cnt].dwIndex == ift->table[if_cnt].dwIndex)
|
ifrow->dwIndex = ipt->table[ip_cnt].dwIndex;
|
||||||
|
if (GetIfEntry (ifrow) != NO_ERROR)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
ifcount_t *ifEntry = iflist;
|
||||||
|
|
||||||
|
/* search for matching entry (and stop at first free entry) */
|
||||||
|
while (ifEntry->count != 0)
|
||||||
{
|
{
|
||||||
|
if (ifEntry->ifIndex == ipt->table[ip_cnt].dwIndex)
|
||||||
|
break;
|
||||||
|
ifEntry++;
|
||||||
|
}
|
||||||
|
|
||||||
/* Setup the interface name */
|
/* Setup the interface name */
|
||||||
switch (ift->table[if_cnt].dwType)
|
switch (ifrow->dwType)
|
||||||
{
|
{
|
||||||
case MIB_IF_TYPE_TOKENRING:
|
case MIB_IF_TYPE_TOKENRING:
|
||||||
++*tok;
|
if (ifEntry->enumerated == 0)
|
||||||
strcpy (ifr->ifr_name, "tok");
|
{
|
||||||
strcat (ifr->ifr_name, tok);
|
ifEntry->classId = tokId++;
|
||||||
|
__small_sprintf (ifr->ifr_name, "tok%u",
|
||||||
|
ifEntry->classId);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
__small_sprintf (ifr->ifr_name, "tok%u:%u",
|
||||||
|
ifEntry->classId,
|
||||||
|
ifEntry->enumerated - 1);
|
||||||
|
}
|
||||||
|
ifEntry->enumerated++;
|
||||||
break;
|
break;
|
||||||
case MIB_IF_TYPE_ETHERNET:
|
case MIB_IF_TYPE_ETHERNET:
|
||||||
if (*sub == '0')
|
if (ifEntry->enumerated == 0)
|
||||||
++*eth;
|
{
|
||||||
strcpy (ifr->ifr_name, "eth");
|
ifEntry->classId = ethId++;
|
||||||
strcat (ifr->ifr_name, eth);
|
__small_sprintf (ifr->ifr_name, "eth%u",
|
||||||
|
ifEntry->classId);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
__small_sprintf (ifr->ifr_name, "eth%u:%u",
|
||||||
|
ifEntry->classId,
|
||||||
|
ifEntry->enumerated - 1);
|
||||||
|
}
|
||||||
|
ifEntry->enumerated++;
|
||||||
break;
|
break;
|
||||||
case MIB_IF_TYPE_PPP:
|
case MIB_IF_TYPE_PPP:
|
||||||
++*ppp;
|
if (ifEntry->enumerated == 0)
|
||||||
strcpy (ifr->ifr_name, "ppp");
|
{
|
||||||
strcat (ifr->ifr_name, ppp);
|
ifEntry->classId = pppId++;
|
||||||
|
__small_sprintf (ifr->ifr_name, "ppp%u",
|
||||||
|
ifEntry->classId);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
__small_sprintf (ifr->ifr_name, "ppp%u:%u",
|
||||||
|
ifEntry->classId,
|
||||||
|
ifEntry->enumerated - 1);
|
||||||
|
}
|
||||||
|
ifEntry->enumerated++;
|
||||||
break;
|
break;
|
||||||
case MIB_IF_TYPE_SLIP:
|
case MIB_IF_TYPE_SLIP:
|
||||||
++*slp;
|
if (ifEntry->enumerated == 0)
|
||||||
strcpy (ifr->ifr_name, "slp");
|
{
|
||||||
strcat (ifr->ifr_name, slp);
|
ifEntry->classId = slpId++;
|
||||||
|
__small_sprintf (ifr->ifr_name, "slp%u",
|
||||||
|
ifEntry->classId);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
__small_sprintf (ifr->ifr_name, "slp%u:%u",
|
||||||
|
ifEntry->classId,
|
||||||
|
ifEntry->enumerated - 1);
|
||||||
|
}
|
||||||
|
ifEntry->enumerated++;
|
||||||
break;
|
break;
|
||||||
case MIB_IF_TYPE_LOOPBACK:
|
case MIB_IF_TYPE_LOOPBACK:
|
||||||
strcpy (ifr->ifr_name, "lo");
|
strcpy (ifr->ifr_name, "lo");
|
||||||
@ -1276,12 +1372,6 @@ get_2k_ifconf (struct ifconf *ifc, int what)
|
|||||||
default:
|
default:
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (*sub > '0')
|
|
||||||
{
|
|
||||||
strcat (ifr->ifr_name, ":");
|
|
||||||
strcat (ifr->ifr_name, sub);
|
|
||||||
}
|
|
||||||
++*sub;
|
|
||||||
/* setup sockaddr struct */
|
/* setup sockaddr struct */
|
||||||
switch (what)
|
switch (what)
|
||||||
{
|
{
|
||||||
@ -1314,17 +1404,17 @@ get_2k_ifconf (struct ifconf *ifc, int what)
|
|||||||
case SIOCGIFHWADDR:
|
case SIOCGIFHWADDR:
|
||||||
so = &ifr->ifr_hwaddr;
|
so = &ifr->ifr_hwaddr;
|
||||||
for (UINT i = 0; i < IFHWADDRLEN; ++i)
|
for (UINT i = 0; i < IFHWADDRLEN; ++i)
|
||||||
if (i >= ift->table[if_cnt].dwPhysAddrLen)
|
if (i >= ifrow->dwPhysAddrLen)
|
||||||
so->sa_data[i] = '\0';
|
so->sa_data[i] = '\0';
|
||||||
else
|
else
|
||||||
so->sa_data[i] = ift->table[if_cnt].bPhysAddr[i];
|
so->sa_data[i] = ifrow->bPhysAddr[i];
|
||||||
so->sa_family = AF_INET;
|
so->sa_family = AF_INET;
|
||||||
break;
|
break;
|
||||||
case SIOCGIFMETRIC:
|
case SIOCGIFMETRIC:
|
||||||
ifr->ifr_metric = 1;
|
ifr->ifr_metric = 1;
|
||||||
break;
|
break;
|
||||||
case SIOCGIFMTU:
|
case SIOCGIFMTU:
|
||||||
ifr->ifr_mtu = ift->table[if_cnt].dwMtu;
|
ifr->ifr_mtu = ifrow->dwMtu;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
++cnt;
|
++cnt;
|
||||||
@ -1333,8 +1423,7 @@ get_2k_ifconf (struct ifconf *ifc, int what)
|
|||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
done:
|
done:
|
||||||
/* Set the correct length */
|
/* Set the correct length */
|
||||||
ifc->ifc_len = cnt * sizeof (struct ifreq);
|
ifc->ifc_len = cnt * sizeof (struct ifreq);
|
||||||
@ -1370,8 +1459,7 @@ get_nt_ifconf (struct ifconf *ifc, int what)
|
|||||||
"SYSTEM\\"
|
"SYSTEM\\"
|
||||||
"CurrentControlSet\\"
|
"CurrentControlSet\\"
|
||||||
"Services\\"
|
"Services\\"
|
||||||
"Tcpip\\"
|
"Tcpip\\" "Linkage",
|
||||||
"Linkage",
|
|
||||||
0, KEY_READ, &key) == ERROR_SUCCESS)
|
0, KEY_READ, &key) == ERROR_SUCCESS)
|
||||||
{
|
{
|
||||||
if (RegQueryValueEx (key, "Bind",
|
if (RegQueryValueEx (key, "Bind",
|
||||||
@ -1423,8 +1511,7 @@ get_nt_ifconf (struct ifconf *ifc, int what)
|
|||||||
ip += strlen (ip) + 1, np += strlen (np) + 1)
|
ip += strlen (ip) + 1, np += strlen (np) + 1)
|
||||||
{
|
{
|
||||||
if ((caddr_t)++ ifr > ifc->ifc_buf
|
if ((caddr_t)++ ifr > ifc->ifc_buf
|
||||||
+ ifc->ifc_len
|
+ ifc->ifc_len - sizeof (struct ifreq))
|
||||||
- sizeof (struct ifreq))
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if (!strncmp (bp, "NdisWan", 7))
|
if (!strncmp (bp, "NdisWan", 7))
|
||||||
@ -1456,7 +1543,8 @@ get_nt_ifconf (struct ifconf *ifc, int what)
|
|||||||
case SIOCGIFCONF:
|
case SIOCGIFCONF:
|
||||||
case SIOCGIFADDR:
|
case SIOCGIFADDR:
|
||||||
sa = (struct sockaddr_in *) &ifr->ifr_addr;
|
sa = (struct sockaddr_in *) &ifr->ifr_addr;
|
||||||
sa->sin_addr.s_addr = cygwin_inet_addr (dhcpaddress);
|
sa->sin_addr.s_addr =
|
||||||
|
cygwin_inet_addr (dhcpaddress);
|
||||||
sa->sin_family = AF_INET;
|
sa->sin_family = AF_INET;
|
||||||
sa->sin_port = 0;
|
sa->sin_port = 0;
|
||||||
break;
|
break;
|
||||||
@ -1591,8 +1679,7 @@ get_95_ifconf (struct ifconf *ifc, int what)
|
|||||||
char adapter[256], ip[256], np[256];
|
char adapter[256], ip[256], np[256];
|
||||||
|
|
||||||
if (res != ERROR_SUCCESS
|
if (res != ERROR_SUCCESS
|
||||||
|| RegOpenKeyEx (key, ifname, 0,
|
|| RegOpenKeyEx (key, ifname, 0, KEY_READ, &ifkey) != ERROR_SUCCESS)
|
||||||
KEY_READ, &ifkey) != ERROR_SUCCESS)
|
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (RegQueryValueEx (ifkey, "Driver", 0,
|
if (RegQueryValueEx (ifkey, "Driver", 0,
|
||||||
@ -1620,8 +1707,7 @@ get_95_ifconf (struct ifconf *ifc, int what)
|
|||||||
(size = sizeof np, &size)) == ERROR_SUCCESS)
|
(size = sizeof np, &size)) == ERROR_SUCCESS)
|
||||||
{
|
{
|
||||||
if ((caddr_t)++ ifr > ifc->ifc_buf
|
if ((caddr_t)++ ifr > ifc->ifc_buf
|
||||||
+ ifc->ifc_len
|
+ ifc->ifc_len - sizeof (struct ifreq))
|
||||||
- sizeof (struct ifreq))
|
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
switch (what)
|
switch (what)
|
||||||
@ -1766,6 +1852,7 @@ get_ifconf (struct ifconf *ifc, int what)
|
|||||||
}
|
}
|
||||||
|
|
||||||
OSVERSIONINFO os_version_info;
|
OSVERSIONINFO os_version_info;
|
||||||
|
|
||||||
memset (&os_version_info, 0, sizeof os_version_info);
|
memset (&os_version_info, 0, sizeof os_version_info);
|
||||||
os_version_info.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
|
os_version_info.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
|
||||||
GetVersionEx (&os_version_info);
|
GetVersionEx (&os_version_info);
|
||||||
@ -1794,12 +1881,14 @@ cygwin_rcmd (char **ahost, unsigned short inport, char *locuser,
|
|||||||
return (int) INVALID_SOCKET;
|
return (int) INVALID_SOCKET;
|
||||||
|
|
||||||
cygheap_fdnew res_fd;
|
cygheap_fdnew res_fd;
|
||||||
|
|
||||||
if (res_fd < 0)
|
if (res_fd < 0)
|
||||||
goto done;
|
goto done;
|
||||||
|
|
||||||
if (fd2p)
|
if (fd2p)
|
||||||
{
|
{
|
||||||
cygheap_fdnew newfd (res_fd, false);
|
cygheap_fdnew newfd (res_fd, false);
|
||||||
|
|
||||||
if (*fd2p < 0)
|
if (*fd2p < 0)
|
||||||
goto done;
|
goto done;
|
||||||
*fd2p = newfd;
|
*fd2p = newfd;
|
||||||
@ -1833,6 +1922,7 @@ cygwin_rresvport (int *port)
|
|||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
cygheap_fdnew res_fd;
|
cygheap_fdnew res_fd;
|
||||||
|
|
||||||
if (res_fd < 0)
|
if (res_fd < 0)
|
||||||
res = -1;
|
res = -1;
|
||||||
else
|
else
|
||||||
@ -1866,11 +1956,13 @@ cygwin_rexec (char **ahost, unsigned short inport, char *locuser,
|
|||||||
return (int) INVALID_SOCKET;
|
return (int) INVALID_SOCKET;
|
||||||
|
|
||||||
cygheap_fdnew res_fd;
|
cygheap_fdnew res_fd;
|
||||||
|
|
||||||
if (res_fd < 0)
|
if (res_fd < 0)
|
||||||
goto done;
|
goto done;
|
||||||
if (fd2p)
|
if (fd2p)
|
||||||
{
|
{
|
||||||
cygheap_fdnew newfd (res_fd);
|
cygheap_fdnew newfd (res_fd);
|
||||||
|
|
||||||
if (newfd < 0)
|
if (newfd < 0)
|
||||||
goto done;
|
goto done;
|
||||||
*fd2p = newfd;
|
*fd2p = newfd;
|
||||||
@ -1929,6 +2021,7 @@ socketpair (int family, int type, int protocol, int *sb)
|
|||||||
{
|
{
|
||||||
sb[0] = sb0;
|
sb[0] = sb0;
|
||||||
cygheap_fdnew sb1 (sb0, false);
|
cygheap_fdnew sb1 (sb0, false);
|
||||||
|
|
||||||
if (sb1 < 0)
|
if (sb1 < 0)
|
||||||
goto done;
|
goto done;
|
||||||
|
|
||||||
@ -2009,8 +2102,7 @@ socketpair (int family, int type, int protocol, int *sb)
|
|||||||
sock_out.sin_addr.s_addr = htonl (INADDR_LOOPBACK);
|
sock_out.sin_addr.s_addr = htonl (INADDR_LOOPBACK);
|
||||||
|
|
||||||
/* Do a connect */
|
/* Do a connect */
|
||||||
if (connect (outsock, (struct sockaddr *) &sock_in,
|
if (connect (outsock, (struct sockaddr *) &sock_in, sizeof (sock_in)) < 0)
|
||||||
sizeof (sock_in)) < 0)
|
|
||||||
{
|
{
|
||||||
debug_printf ("connect error");
|
debug_printf ("connect error");
|
||||||
set_winsock_errno ();
|
set_winsock_errno ();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user