ReactOS  0.4.13-dev-1158-g658d5a3
ifenum_reactos.c File Reference
#include "iphlpapi_private.h"
Include dependency graph for ifenum_reactos.c:

Go to the source code of this file.

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (iphlpapi)
 
void interfaceMapInit (void)
 
void interfaceMapFree (void)
 
NTSTATUS tdiGetMibForIfEntity (HANDLE tcpFile, TDIEntityID *ent, IFEntrySafelySized *entry)
 
BOOL isInterface (TDIEntityID *if_maybe)
 
BOOL isLoopback (HANDLE tcpFile, TDIEntityID *loop_maybe)
 
BOOL hasArp (HANDLE tcpFile, TDIEntityID *arp_maybe)
 
static NTSTATUS getInterfaceInfoSet (HANDLE tcpFile, IFInfo **infoSet, PDWORD numInterfaces)
 
static DWORD getNumInterfacesInt (BOOL onlyNonLoopback)
 
DWORD getNumInterfaces (void)
 
DWORD getNumNonLoopbackInterfaces (void)
 
DWORD getNthInterfaceEntity (HANDLE tcpFile, DWORD index, TDIEntityID *ent)
 
NTSTATUS getInterfaceInfoByIndex (HANDLE tcpFile, DWORD index, IFInfo *info)
 
NTSTATUS getInterfaceInfoByName (HANDLE tcpFile, char *name, IFInfo *info)
 
const chargetInterfaceNameByIndex (DWORD index)
 
void consumeInterfaceName (const char *name)
 
DWORD getInterfaceIndexByName (const char *name, PDWORD index)
 
InterfaceIndexTablegetInterfaceIndexTableInt (BOOL nonLoopbackOnly)
 
InterfaceIndexTablegetInterfaceIndexTable (void)
 
InterfaceIndexTablegetNonLoopbackInterfaceIndexTable (void)
 
DWORD getInterfaceIPAddrByName (const char *name)
 
NTSTATUS getIPAddrEntryForIf (HANDLE tcpFile, char *name, DWORD index, IFInfo *ifInfo)
 
DWORD getAddrByIndexOrName (char *name, DWORD index, IPHLPAddrType addrType)
 
DWORD getInterfaceIPAddrByIndex (DWORD index)
 
DWORD getInterfaceBCastAddrByName (const char *name)
 
DWORD getInterfaceBCastAddrByIndex (DWORD index)
 
DWORD getInterfaceMaskByName (const char *name)
 
DWORD getInterfaceMaskByIndex (DWORD index)
 
void getInterfacePhysicalFromInfo (IFInfo *info, PDWORD len, PBYTE addr, PDWORD type)
 
DWORD getInterfacePhysicalByName (const char *name, PDWORD len, PBYTE addr, PDWORD type)
 
DWORD getInterfacePhysicalByIndex (DWORD index, PDWORD len, PBYTE addr, PDWORD type)
 
DWORD getInterfaceMtuByName (const char *name, PDWORD mtu)
 
DWORD getInterfaceMtuByIndex (DWORD index, PDWORD mtu)
 
DWORD getInterfaceStatusByName (const char *name, PDWORD status)
 
DWORD getInterfaceStatusByIndex (DWORD index, PDWORD status)
 
DWORD getInterfaceEntryByName (const char *name, PMIB_IFROW entry)
 
DWORD getInterfaceEntryByIndex (DWORD index, PMIB_IFROW entry)
 
chartoIPAddressString (unsigned int addr, char string[16])
 
NTSTATUS addIPAddress (IPAddr Address, IPMask Mask, DWORD IfIndex, PULONG NteContext, PULONG NteInstance)
 
NTSTATUS deleteIpAddress (ULONG NteContext)
 

Function Documentation

◆ addIPAddress()

NTSTATUS addIPAddress ( IPAddr  Address,
IPMask  Mask,
DWORD  IfIndex,
PULONG  NteContext,
PULONG  NteInstance 
)

Definition at line 643 of file ifenum_reactos.c.

645 {
646  HANDLE tcpFile;
650 
651  TRACE("Called.\n");
652 
653  if( !NT_SUCCESS(status) ) return status;
654 
655  Data.NteContext = IfIndex;
656  Data.NewAddress = Address;
657  Data.NewNetmask = Mask;
658 
659  status = NtDeviceIoControlFile( tcpFile,
660  NULL,
661  NULL,
662  NULL,
663  &Iosb,
665  &Data,
666  sizeof(Data),
667  &Data,
668  sizeof(Data) );
669 
670  closeTcpFile( tcpFile );
671 
672  if( NT_SUCCESS(status) ) {
673  *NteContext = Iosb.Information;
674  *NteInstance = Data.NewAddress;
675  }
676 
677  if (!NT_SUCCESS(status)) {
678  ERR("addIPAddress for if %d returning 0x%lx\n", IfIndex, status);
679  }
680 
681  return status;
682 
683 }
LONG NTSTATUS
Definition: precomp.h:26
NTSYSAPI NTSTATUS NTAPI NtDeviceIoControlFile(IN HANDLE hFile, IN HANDLE hEvent OPTIONAL, IN PIO_APC_ROUTINE IoApcRoutine OPTIONAL, IN PVOID IoApcContext OPTIONAL, OUT PIO_STATUS_BLOCK pIoStatusBlock, IN ULONG DeviceIoControlCode, IN PVOID InBuffer OPTIONAL, IN ULONG InBufferLength, OUT PVOID OutBuffer OPTIONAL, IN ULONG OutBufferLength)
#define FILE_READ_DATA
Definition: nt_native.h:628
smooth NULL
Definition: ftsmooth.c:416
static WCHAR Address[46]
Definition: ping.c:68
_In_ LPGUID _In_ PVOID Data
Definition: classpnp.h:778
#define FILE_WRITE_DATA
Definition: nt_native.h:631
#define TRACE(s)
Definition: solgame.cpp:4
return Iosb
Definition: create.c:4426
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
VOID closeTcpFile(HANDLE h)
Definition: handle.c:43
#define ERR(fmt,...)
Definition: debug.h:109
#define IOCTL_SET_IP_ADDRESS
Definition: ticonsts.h:48
NTSTATUS openTcpFile(PHANDLE tcpFile, ACCESS_MASK DesiredAccess)
Definition: handle.c:12
static SERVICE_STATUS status
Definition: service.c:31
Definition: ps.c:97

Referenced by AddIPAddress().

◆ consumeInterfaceName()

void consumeInterfaceName ( const char name)

Definition at line 377 of file ifenum_reactos.c.

377  {
378  HeapFree( GetProcessHeap(), 0, (char *)name );
379 }
#define GetProcessHeap()
Definition: compat.h:395
Definition: name.c:36
#define HeapFree(x, y, z)
Definition: compat.h:394

Referenced by GetAdaptersInfo(), GetIfEntry(), and GetInterfaceInfo().

◆ deleteIpAddress()

NTSTATUS deleteIpAddress ( ULONG  NteContext)

Definition at line 685 of file ifenum_reactos.c.

686 {
687  HANDLE tcpFile;
690 
691  TRACE("Called.\n");
692 
693  if( !NT_SUCCESS(status) ) return status;
694 
695  status = NtDeviceIoControlFile( tcpFile,
696  NULL,
697  NULL,
698  NULL,
699  &Iosb,
701  &NteContext,
702  sizeof(USHORT),
703  NULL,
704  0 );
705 
706  closeTcpFile( tcpFile );
707 
708  if (!NT_SUCCESS(status)) {
709  ERR("deleteIpAddress(%lu) returning 0x%lx\n", NteContext, status);
710  }
711 
712  return status;
713 }
LONG NTSTATUS
Definition: precomp.h:26
NTSYSAPI NTSTATUS NTAPI NtDeviceIoControlFile(IN HANDLE hFile, IN HANDLE hEvent OPTIONAL, IN PIO_APC_ROUTINE IoApcRoutine OPTIONAL, IN PVOID IoApcContext OPTIONAL, OUT PIO_STATUS_BLOCK pIoStatusBlock, IN ULONG DeviceIoControlCode, IN PVOID InBuffer OPTIONAL, IN ULONG InBufferLength, OUT PVOID OutBuffer OPTIONAL, IN ULONG OutBufferLength)
#define FILE_READ_DATA
Definition: nt_native.h:628
smooth NULL
Definition: ftsmooth.c:416
#define IOCTL_DELETE_IP_ADDRESS
Definition: ticonsts.h:51
#define FILE_WRITE_DATA
Definition: nt_native.h:631
#define TRACE(s)
Definition: solgame.cpp:4
return Iosb
Definition: create.c:4426
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
VOID closeTcpFile(HANDLE h)
Definition: handle.c:43
#define ERR(fmt,...)
Definition: debug.h:109
unsigned short USHORT
Definition: pedump.c:61
NTSTATUS openTcpFile(PHANDLE tcpFile, ACCESS_MASK DesiredAccess)
Definition: handle.c:12
static SERVICE_STATUS status
Definition: service.c:31
Definition: ps.c:97

Referenced by DeleteIPAddress().

◆ getAddrByIndexOrName()

DWORD getAddrByIndexOrName ( char name,
DWORD  index,
IPHLPAddrType  addrType 
)

Definition at line 476 of file ifenum_reactos.c.

476  {
477  IFInfo ifInfo;
478  HANDLE tcpFile;
480  DWORD addrOut = INADDR_ANY;
481 
482  status = openTcpFile( &tcpFile, FILE_READ_DATA );
483 
484  if( NT_SUCCESS(status) ) {
485  status = getIPAddrEntryForIf( tcpFile, name, index, &ifInfo );
486  if( NT_SUCCESS(status) ) {
487  switch( addrType ) {
488  case IPAAddr: addrOut = ifInfo.ip_addr.iae_addr; break;
489  case IPABcast: addrOut = ifInfo.ip_addr.iae_bcastaddr; break;
490  case IPAMask: addrOut = ifInfo.ip_addr.iae_mask; break;
491  case IFMtu: addrOut = ifInfo.if_info.ent.if_mtu; break;
492  case IFStatus: addrOut = ifInfo.if_info.ent.if_operstatus; break;
493  }
494  }
495  closeTcpFile( tcpFile );
496  }
497 
498  return addrOut;
499 }
LONG NTSTATUS
Definition: precomp.h:26
#define INADDR_ANY
Definition: StrAddr.c:4
ULONG if_operstatus
Definition: tcpioctl.h:112
ULONG iae_bcastaddr
Definition: tcpioctl.h:162
IPAddrEntry ip_addr
#define FILE_READ_DATA
Definition: nt_native.h:628
GLuint index
Definition: glext.h:6031
ULONG if_mtu
Definition: tcpioctl.h:107
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
unsigned long DWORD
Definition: ntddk_ex.h:95
VOID closeTcpFile(HANDLE h)
Definition: handle.c:43
ULONG iae_mask
Definition: tcpioctl.h:161
ULONG iae_addr
Definition: tcpioctl.h:159
NTSTATUS openTcpFile(PHANDLE tcpFile, ACCESS_MASK DesiredAccess)
Definition: handle.c:12
Definition: name.c:36
IFEntrySafelySized if_info
return STATUS_SUCCESS
Definition: btrfs.c:2966
NTSTATUS getIPAddrEntryForIf(HANDLE tcpFile, char *name, DWORD index, IFInfo *ifInfo)
Definition: ps.c:97

Referenced by getInterfaceBCastAddrByIndex(), getInterfaceBCastAddrByName(), getInterfaceIPAddrByIndex(), getInterfaceMaskByIndex(), getInterfaceMaskByName(), getInterfaceMtuByIndex(), getInterfaceMtuByName(), getInterfaceStatusByIndex(), and getInterfaceStatusByName().

◆ getInterfaceBCastAddrByIndex()

DWORD getInterfaceBCastAddrByIndex ( DWORD  index)

Definition at line 509 of file ifenum_reactos.c.

509  {
510  return getAddrByIndexOrName( 0, index, IPABcast );
511 }
GLuint index
Definition: glext.h:6031
DWORD getAddrByIndexOrName(char *name, DWORD index, IPHLPAddrType addrType)

Referenced by GetIpAddrTable().

◆ getInterfaceBCastAddrByName()

DWORD getInterfaceBCastAddrByName ( const char name)

Definition at line 505 of file ifenum_reactos.c.

505  {
506  return getAddrByIndexOrName( (char *)name, 0, IPABcast );
507 }
DWORD getAddrByIndexOrName(char *name, DWORD index, IPHLPAddrType addrType)
Definition: name.c:36

◆ getInterfaceEntryByIndex()

DWORD getInterfaceEntryByIndex ( DWORD  index,
PMIB_IFROW  entry 
)

Definition at line 608 of file ifenum_reactos.c.

609 {
610  HANDLE tcpFile;
611  IFInfo info;
612  NTSTATUS status = openTcpFile( &tcpFile, FILE_READ_DATA );
613 
614  TRACE("Called.\n");
615 
616  if( NT_SUCCESS(status) ) {
617  status = getInterfaceInfoByIndex( tcpFile, index, &info );
618 
619  if( NT_SUCCESS(status) ) {
620  memcpy( &entry->wszName[MAX_INTERFACE_NAME_LEN],
621  &info.if_info,
622  sizeof(info.if_info) );
623  }
624 
625  closeTcpFile( tcpFile );
626  }
627 
628  return status;
629 }
LONG NTSTATUS
Definition: precomp.h:26
struct _test_info info[]
Definition: SetCursorPos.c:19
#define FILE_READ_DATA
Definition: nt_native.h:628
GLuint index
Definition: glext.h:6031
#define TRACE(s)
Definition: solgame.cpp:4
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
VOID closeTcpFile(HANDLE h)
Definition: handle.c:43
#define MAX_INTERFACE_NAME_LEN
Definition: ifmib.h:31
uint32_t entry
Definition: isohybrid.c:63
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
NTSTATUS getInterfaceInfoByIndex(HANDLE tcpFile, DWORD index, IFInfo *info)
NTSTATUS openTcpFile(PHANDLE tcpFile, ACCESS_MASK DesiredAccess)
Definition: handle.c:12
static SERVICE_STATUS status
Definition: service.c:31
Definition: ps.c:97

Referenced by GetIfEntry().

◆ getInterfaceEntryByName()

DWORD getInterfaceEntryByName ( const char name,
PMIB_IFROW  entry 
)

Definition at line 583 of file ifenum_reactos.c.

584 {
585  HANDLE tcpFile;
586  IFInfo info;
587  NTSTATUS status = openTcpFile( &tcpFile, FILE_READ_DATA );
588 
589  TRACE("Called.\n");
590 
591  if( NT_SUCCESS(status) ) {
592  status = getInterfaceInfoByName( tcpFile, (char *)name, &info );
593 
594  if( NT_SUCCESS(status) ) {
595  memcpy( &entry->wszName[MAX_INTERFACE_NAME_LEN],
596  &info.if_info,
597  sizeof(info.if_info) );
598  }
599 
600  TRACE("entry->bDescr = %s\n", entry->bDescr);
601 
602  closeTcpFile( tcpFile );
603  }
604 
605  return status;
606 }
LONG NTSTATUS
Definition: precomp.h:26
struct _test_info info[]
Definition: SetCursorPos.c:19
NTSTATUS getInterfaceInfoByName(HANDLE tcpFile, char *name, IFInfo *info)
#define FILE_READ_DATA
Definition: nt_native.h:628
#define TRACE(s)
Definition: solgame.cpp:4
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
VOID closeTcpFile(HANDLE h)
Definition: handle.c:43
#define MAX_INTERFACE_NAME_LEN
Definition: ifmib.h:31
uint32_t entry
Definition: isohybrid.c:63
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
NTSTATUS openTcpFile(PHANDLE tcpFile, ACCESS_MASK DesiredAccess)
Definition: handle.c:12
Definition: name.c:36
static SERVICE_STATUS status
Definition: service.c:31
Definition: ps.c:97

◆ getInterfaceIndexByName()

DWORD getInterfaceIndexByName ( const char name,
PDWORD  index 
)

Definition at line 381 of file ifenum_reactos.c.

382 {
383  IFInfo ifInfo;
384  HANDLE tcpFile;
385  NTSTATUS status = openTcpFile( &tcpFile, FILE_READ_DATA );
386 
387  if( NT_SUCCESS(status) ) {
388  status = getInterfaceInfoByName( tcpFile, (char *)name, &ifInfo );
389 
390  if( NT_SUCCESS(status) ) {
391  *index = ifInfo.if_info.ent.if_index;
392  }
393 
394  closeTcpFile( tcpFile );
395  }
396 
397  return status;
398 }
LONG NTSTATUS
Definition: precomp.h:26
ULONG if_index
Definition: tcpioctl.h:105
NTSTATUS getInterfaceInfoByName(HANDLE tcpFile, char *name, IFInfo *info)
#define FILE_READ_DATA
Definition: nt_native.h:628
GLuint index
Definition: glext.h:6031
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
VOID closeTcpFile(HANDLE h)
Definition: handle.c:43
NTSTATUS openTcpFile(PHANDLE tcpFile, ACCESS_MASK DesiredAccess)
Definition: handle.c:12
Definition: name.c:36
IFEntrySafelySized if_info
static SERVICE_STATUS status
Definition: service.c:31
Definition: ps.c:97

◆ getInterfaceIndexTable()

InterfaceIndexTable* getInterfaceIndexTable ( void  )

Definition at line 447 of file ifenum_reactos.c.

447  {
449 }
InterfaceIndexTable * getInterfaceIndexTableInt(BOOL nonLoopbackOnly)

Referenced by GetIfTable(), and GetIpAddrTable().

◆ getInterfaceIndexTableInt()

InterfaceIndexTable* getInterfaceIndexTableInt ( BOOL  nonLoopbackOnly)

Definition at line 400 of file ifenum_reactos.c.

400  {
401  DWORD numInterfaces, curInterface = 0;
402  int i;
403  IFInfo *ifInfo;
405  HANDLE tcpFile;
406  NTSTATUS status = openTcpFile( &tcpFile, FILE_READ_DATA );
407 
408  if( NT_SUCCESS(status) ) {
409  status = getInterfaceInfoSet( tcpFile, &ifInfo, &numInterfaces );
410 
411  TRACE("InterfaceInfoSet: %08x, %04x:%08x\n",
412  status,
413  ifInfo->entity_id.tei_entity,
414  ifInfo->entity_id.tei_instance);
415 
416  if( NT_SUCCESS(status) ) {
418  calloc(1,
419  sizeof(InterfaceIndexTable) +
420  (numInterfaces - 1) * sizeof(DWORD));
421 
422  if (ret) {
423  ret->numAllocated = numInterfaces;
424  TRACE("NumInterfaces = %d\n", numInterfaces);
425 
426  for( i = 0; i < numInterfaces; i++ ) {
427  TRACE("Examining interface %d\n", i);
428  if( !nonLoopbackOnly ||
429  !isLoopback( tcpFile, &ifInfo[i].entity_id ) ) {
430  TRACE("Interface %d matches (%d)\n", i, curInterface);
431  ret->indexes[curInterface++] =
432  ifInfo[i].if_info.ent.if_index;
433  }
434  }
435 
436  ret->numIndexes = curInterface;
437  }
438 
439  tdiFreeThingSet( ifInfo );
440  }
441  closeTcpFile( tcpFile );
442  }
443 
444  return ret;
445 }
LONG NTSTATUS
Definition: precomp.h:26
TDIEntityID entity_id
ULONG if_index
Definition: tcpioctl.h:105
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define FILE_READ_DATA
Definition: nt_native.h:628
BOOL isLoopback(HANDLE tcpFile, TDIEntityID *loop_maybe)
VOID tdiFreeThingSet(PVOID things)
Definition: enum.c:118
ULONG tei_entity
Definition: tdiinfo.h:31
#define TRACE(s)
Definition: solgame.cpp:4
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
ULONG tei_instance
Definition: tdiinfo.h:32
unsigned long DWORD
Definition: ntddk_ex.h:95
static NTSTATUS getInterfaceInfoSet(HANDLE tcpFile, IFInfo **infoSet, PDWORD numInterfaces)
VOID closeTcpFile(HANDLE h)
Definition: handle.c:43
int ret
NTSTATUS openTcpFile(PHANDLE tcpFile, ACCESS_MASK DesiredAccess)
Definition: handle.c:12
#define calloc
Definition: rosglue.h:14
IFEntrySafelySized if_info
Definition: ps.c:97

Referenced by getInterfaceIndexTable(), and getNonLoopbackInterfaceIndexTable().

◆ getInterfaceInfoByIndex()

NTSTATUS getInterfaceInfoByIndex ( HANDLE  tcpFile,
DWORD  index,
IFInfo info 
)

Definition at line 304 of file ifenum_reactos.c.

304  {
305  IFInfo *ifInfo;
306  DWORD numInterfaces;
307  NTSTATUS status = getInterfaceInfoSet( tcpFile, &ifInfo, &numInterfaces );
308  int i;
309 
310  if( NT_SUCCESS(status) )
311  {
312  for( i = 0; i < numInterfaces; i++ ) {
313  if( ifInfo[i].if_info.ent.if_index == index ) {
314  memcpy( info, &ifInfo[i], sizeof(*info) );
315  break;
316  }
317  }
318 
319  HeapFree(GetProcessHeap(), 0, ifInfo);
320 
321  return i < numInterfaces ? STATUS_SUCCESS : STATUS_UNSUCCESSFUL;
322  }
323 
324  return status;
325 }
LONG NTSTATUS
Definition: precomp.h:26
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
GLuint index
Definition: glext.h:6031
#define GetProcessHeap()
Definition: compat.h:395
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
unsigned long DWORD
Definition: ntddk_ex.h:95
#define STATUS_UNSUCCESSFUL
Definition: udferr_usr.h:132
static NTSTATUS getInterfaceInfoSet(HANDLE tcpFile, IFInfo **infoSet, PDWORD numInterfaces)
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
return STATUS_SUCCESS
Definition: btrfs.c:2966
static SERVICE_STATUS status
Definition: service.c:31
#define HeapFree(x, y, z)
Definition: compat.h:394
Definition: ps.c:97

Referenced by getInterfaceEntryByIndex(), getInterfaceNameByIndex(), getInterfacePhysicalByIndex(), and getIPAddrEntryForIf().

◆ getInterfaceInfoByName()

NTSTATUS getInterfaceInfoByName ( HANDLE  tcpFile,
char name,
IFInfo info 
)

Definition at line 327 of file ifenum_reactos.c.

327  {
328  IFInfo *ifInfo;
329  DWORD numInterfaces;
330  int i;
331  NTSTATUS status = getInterfaceInfoSet( tcpFile, &ifInfo, &numInterfaces );
332 
333  if( NT_SUCCESS(status) )
334  {
335  for( i = 0; i < numInterfaces; i++ ) {
336  if( !strncmp((PCHAR)ifInfo[i].if_info.ent.if_descr, name, ifInfo[i].if_info.ent.if_descrlen) ) {
337  memcpy( info, &ifInfo[i], sizeof(*info) );
338  break;
339  }
340  }
341 
342  HeapFree(GetProcessHeap(), 0,ifInfo);
343 
344  return i < numInterfaces ? STATUS_SUCCESS : STATUS_UNSUCCESSFUL;
345  }
346 
347  return status;
348 }
signed char * PCHAR
Definition: retypes.h:7
LONG NTSTATUS
Definition: precomp.h:26
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define GetProcessHeap()
Definition: compat.h:395
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
int strncmp(const char *String1, const char *String2, ACPI_SIZE Count)
Definition: utclib.c:534
unsigned long DWORD
Definition: ntddk_ex.h:95
#define STATUS_UNSUCCESSFUL
Definition: udferr_usr.h:132
static NTSTATUS getInterfaceInfoSet(HANDLE tcpFile, IFInfo **infoSet, PDWORD numInterfaces)
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
Definition: name.c:36
return STATUS_SUCCESS
Definition: btrfs.c:2966
static SERVICE_STATUS status
Definition: service.c:31
#define HeapFree(x, y, z)
Definition: compat.h:394
Definition: ps.c:97

Referenced by getInterfaceEntryByName(), getInterfaceIndexByName(), getInterfacePhysicalByName(), and getIPAddrEntryForIf().

◆ getInterfaceInfoSet()

static NTSTATUS getInterfaceInfoSet ( HANDLE  tcpFile,
IFInfo **  infoSet,
PDWORD  numInterfaces 
)
static

Definition at line 155 of file ifenum_reactos.c.

157  {
158  DWORD numEntities;
159  TDIEntityID *entIDSet = NULL;
160  NTSTATUS status = tdiGetEntityIDSet( tcpFile, &entIDSet, &numEntities );
161  IFInfo *infoSetInt = 0;
162  int curInterf = 0, i;
163 
164  if (!NT_SUCCESS(status)) {
165  ERR("getInterfaceInfoSet: tdiGetEntityIDSet() failed: 0x%lx\n", status);
166  return status;
167  }
168 
169  infoSetInt = HeapAlloc( GetProcessHeap(), 0,
170  sizeof(IFInfo) * numEntities );
171 
172  if( infoSetInt ) {
173  for( i = 0; i < numEntities; i++ ) {
174  if( isInterface( &entIDSet[i] ) ) {
175  infoSetInt[curInterf].entity_id = entIDSet[i];
177  ( tcpFile,
178  &entIDSet[i],
179  &infoSetInt[curInterf].if_info );
180  TRACE("tdiGetMibForIfEntity: %08x\n", status);
181  if( NT_SUCCESS(status) ) {
182  DWORD numAddrs;
183  IPAddrEntry *addrs;
184  TDIEntityID ip_ent;
185  int j;
186 
187  status = getNthIpEntity( tcpFile, curInterf, &ip_ent );
188  if( NT_SUCCESS(status) )
190  ( tcpFile, &ip_ent, &addrs, &numAddrs );
191  for( j = 0; NT_SUCCESS(status) && j < numAddrs; j++ ) {
192  TRACE("ADDR %d: index %d (target %d)\n", j, addrs[j].iae_index, infoSetInt[curInterf].if_info.ent.if_index);
193  if( addrs[j].iae_index ==
194  infoSetInt[curInterf].if_info.ent.if_index ) {
195  memcpy( &infoSetInt[curInterf].ip_addr,
196  &addrs[j],
197  sizeof( addrs[j] ) );
198  curInterf++;
199  break;
200  }
201  }
202  if ( NT_SUCCESS(status) )
203  tdiFreeThingSet(addrs);
204  }
205  }
206  }
207 
208  tdiFreeThingSet(entIDSet);
209 
210  if (NT_SUCCESS(status)) {
211  *infoSet = infoSetInt;
212  *numInterfaces = curInterf;
213  } else {
214  HeapFree(GetProcessHeap(), 0, infoSetInt);
215  }
216 
217  return status;
218  } else {
219  tdiFreeThingSet(entIDSet);
221  }
222 }
#define STATUS_INSUFFICIENT_RESOURCES
Definition: udferr_usr.h:158
LONG NTSTATUS
Definition: precomp.h:26
TDIEntityID entity_id
NTSTATUS getNthIpEntity(HANDLE tcpFile, DWORD index, TDIEntityID *ent)
BOOL isInterface(TDIEntityID *if_maybe)
NTSTATUS tdiGetEntityIDSet(HANDLE tcpFile, TDIEntityID **entitySet, PDWORD numEntities)
Definition: enum.c:122
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
smooth NULL
Definition: ftsmooth.c:416
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
Definition: glfuncs.h:250
VOID tdiFreeThingSet(PVOID things)
Definition: enum.c:118
#define TRACE(s)
Definition: solgame.cpp:4
NTSTATUS tdiGetMibForIfEntity(HANDLE tcpFile, TDIEntityID *ent, IFEntrySafelySized *entry)
#define GetProcessHeap()
Definition: compat.h:395
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
unsigned long DWORD
Definition: ntddk_ex.h:95
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
#define ERR(fmt,...)
Definition: debug.h:109
NTSTATUS tdiGetIpAddrsForIpEntity(HANDLE tcpFile, TDIEntityID *ent, IPAddrEntry **addrs, PDWORD numAddrs)
static SERVICE_STATUS status
Definition: service.c:31
#define HeapFree(x, y, z)
Definition: compat.h:394
Definition: ps.c:97

Referenced by getInterfaceIndexTableInt(), getInterfaceInfoByIndex(), and getInterfaceInfoByName().

◆ getInterfaceIPAddrByIndex()

DWORD getInterfaceIPAddrByIndex ( DWORD  index)

Definition at line 501 of file ifenum_reactos.c.

501  {
502  return getAddrByIndexOrName( 0, index, IPAAddr );
503 }
GLuint index
Definition: glext.h:6031
DWORD getAddrByIndexOrName(char *name, DWORD index, IPHLPAddrType addrType)

Referenced by GetAdaptersInfo(), and GetIpAddrTable().

◆ getInterfaceIPAddrByName()

DWORD getInterfaceIPAddrByName ( const char name)

Definition at line 455 of file ifenum_reactos.c.

456 {
457  return INADDR_ANY;
458 }
#define INADDR_ANY
Definition: StrAddr.c:4

◆ getInterfaceMaskByIndex()

DWORD getInterfaceMaskByIndex ( DWORD  index)

Definition at line 517 of file ifenum_reactos.c.

517  {
518  return getAddrByIndexOrName( 0, index, IPAMask );
519 }
GLuint index
Definition: glext.h:6031
DWORD getAddrByIndexOrName(char *name, DWORD index, IPHLPAddrType addrType)

Referenced by GetAdaptersInfo(), and GetIpAddrTable().

◆ getInterfaceMaskByName()

DWORD getInterfaceMaskByName ( const char name)

Definition at line 513 of file ifenum_reactos.c.

513  {
514  return getAddrByIndexOrName( (char *)name, 0, IPAMask );
515 }
DWORD getAddrByIndexOrName(char *name, DWORD index, IPHLPAddrType addrType)
Definition: name.c:36

◆ getInterfaceMtuByIndex()

DWORD getInterfaceMtuByIndex ( DWORD  index,
PDWORD  mtu 
)

Definition at line 567 of file ifenum_reactos.c.

567  {
568  *mtu = getAddrByIndexOrName( 0, index, IFMtu );
569  return STATUS_SUCCESS;
570 }
GLuint index
Definition: glext.h:6031
DWORD getAddrByIndexOrName(char *name, DWORD index, IPHLPAddrType addrType)
return STATUS_SUCCESS
Definition: btrfs.c:2966

◆ getInterfaceMtuByName()

DWORD getInterfaceMtuByName ( const char name,
PDWORD  mtu 
)

Definition at line 562 of file ifenum_reactos.c.

562  {
563  *mtu = getAddrByIndexOrName( (char *)name, 0, IFMtu );
564  return STATUS_SUCCESS;
565 }
DWORD getAddrByIndexOrName(char *name, DWORD index, IPHLPAddrType addrType)
Definition: name.c:36
return STATUS_SUCCESS
Definition: btrfs.c:2966

◆ getInterfaceNameByIndex()

const char* getInterfaceNameByIndex ( DWORD  index)

Definition at line 352 of file ifenum_reactos.c.

353 {
354  IFInfo ifInfo;
355  HANDLE tcpFile;
356  char *interfaceName = NULL;
357  NTSTATUS status = openTcpFile( &tcpFile, FILE_READ_DATA );
358 
359  if( NT_SUCCESS(status) ) {
360  status = getInterfaceInfoByIndex( tcpFile, index, &ifInfo );
361 
362  if( NT_SUCCESS(status) ) {
363  interfaceName = HeapAlloc( GetProcessHeap(), 0,
364  ifInfo.if_info.ent.if_descrlen + 1 );
365  if( interfaceName ) {
366  memcpy(interfaceName, ifInfo.if_info.ent.if_descr, ifInfo.if_info.ent.if_descrlen);
367  interfaceName[ifInfo.if_info.ent.if_descrlen] = '\0';
368  }
369  }
370 
371  closeTcpFile( tcpFile );
372  }
373 
374  return interfaceName;
375 }
ULONG if_descrlen
Definition: tcpioctl.h:126
LONG NTSTATUS
Definition: precomp.h:26
#define FILE_READ_DATA
Definition: nt_native.h:628
smooth NULL
Definition: ftsmooth.c:416
GLuint index
Definition: glext.h:6031
#define GetProcessHeap()
Definition: compat.h:395
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
VOID closeTcpFile(HANDLE h)
Definition: handle.c:43
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
NTSTATUS getInterfaceInfoByIndex(HANDLE tcpFile, DWORD index, IFInfo *info)
NTSTATUS openTcpFile(PHANDLE tcpFile, ACCESS_MASK DesiredAccess)
Definition: handle.c:12
IFEntrySafelySized if_info
UCHAR if_descr[1]
Definition: tcpioctl.h:127
Definition: ps.c:97

Referenced by GetAdaptersInfo(), GetIfEntry(), GetInterfaceInfo(), and GetPerAdapterInfo().

◆ getInterfacePhysicalByIndex()

DWORD getInterfacePhysicalByIndex ( DWORD  index,
PDWORD  len,
PBYTE  addr,
PDWORD  type 
)

Definition at line 545 of file ifenum_reactos.c.

547 {
548  HANDLE tcpFile;
549  IFInfo info;
550  NTSTATUS status = openTcpFile( &tcpFile, FILE_READ_DATA );
551 
552  if( NT_SUCCESS(status) ) {
553  status = getInterfaceInfoByIndex( tcpFile, index, &info );
554  if( NT_SUCCESS(status) )
556  closeTcpFile( tcpFile );
557  }
558 
559  return status;
560 }
LONG NTSTATUS
Definition: precomp.h:26
void getInterfacePhysicalFromInfo(IFInfo *info, PDWORD len, PBYTE addr, PDWORD type)
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
struct _test_info info[]
Definition: SetCursorPos.c:19
#define FILE_READ_DATA
Definition: nt_native.h:628
GLuint index
Definition: glext.h:6031
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
VOID closeTcpFile(HANDLE h)
Definition: handle.c:43
GLenum const GLvoid * addr
Definition: glext.h:9621
GLenum GLsizei len
Definition: glext.h:6722
NTSTATUS getInterfaceInfoByIndex(HANDLE tcpFile, DWORD index, IFInfo *info)
NTSTATUS openTcpFile(PHANDLE tcpFile, ACCESS_MASK DesiredAccess)
Definition: handle.c:12
static SERVICE_STATUS status
Definition: service.c:31
Definition: ps.c:97

Referenced by GetAdaptersInfo().

◆ getInterfacePhysicalByName()

DWORD getInterfacePhysicalByName ( const char name,
PDWORD  len,
PBYTE  addr,
PDWORD  type 
)

Definition at line 528 of file ifenum_reactos.c.

530 {
531  HANDLE tcpFile;
532  IFInfo info;
533  NTSTATUS status = openTcpFile( &tcpFile, FILE_READ_DATA );
534 
535  if( NT_SUCCESS(status) ) {
536  status = getInterfaceInfoByName( tcpFile, (char *)name, &info );
537  if( NT_SUCCESS(status) )
539  closeTcpFile( tcpFile );
540  }
541 
542  return status;
543 }
LONG NTSTATUS
Definition: precomp.h:26
void getInterfacePhysicalFromInfo(IFInfo *info, PDWORD len, PBYTE addr, PDWORD type)
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
struct _test_info info[]
Definition: SetCursorPos.c:19
NTSTATUS getInterfaceInfoByName(HANDLE tcpFile, char *name, IFInfo *info)
#define FILE_READ_DATA
Definition: nt_native.h:628
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
VOID closeTcpFile(HANDLE h)
Definition: handle.c:43
GLenum const GLvoid * addr
Definition: glext.h:9621
GLenum GLsizei len
Definition: glext.h:6722
NTSTATUS openTcpFile(PHANDLE tcpFile, ACCESS_MASK DesiredAccess)
Definition: handle.c:12
Definition: name.c:36
static SERVICE_STATUS status
Definition: service.c:31
Definition: ps.c:97

◆ getInterfacePhysicalFromInfo()

void getInterfacePhysicalFromInfo ( IFInfo info,
PDWORD  len,
PBYTE  addr,
PDWORD  type 
)

Definition at line 521 of file ifenum_reactos.c.

522  {
523  *len = info->if_info.ent.if_physaddrlen;
524  memcpy( addr, info->if_info.ent.if_physaddr, *len );
525  *type = info->if_info.ent.if_type;
526 }
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
GLenum const GLvoid * addr
Definition: glext.h:9621
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
GLenum GLsizei len
Definition: glext.h:6722

Referenced by getInterfacePhysicalByIndex(), and getInterfacePhysicalByName().

◆ getInterfaceStatusByIndex()

DWORD getInterfaceStatusByIndex ( DWORD  index,
PDWORD  status 
)

Definition at line 577 of file ifenum_reactos.c.

578 {
580  return STATUS_SUCCESS;
581 }
GLuint index
Definition: glext.h:6031
DWORD getAddrByIndexOrName(char *name, DWORD index, IPHLPAddrType addrType)
return STATUS_SUCCESS
Definition: btrfs.c:2966
Definition: ps.c:97

◆ getInterfaceStatusByName()

DWORD getInterfaceStatusByName ( const char name,
PDWORD  status 
)

Definition at line 572 of file ifenum_reactos.c.

572  {
573  *status = getAddrByIndexOrName( (char *)name, 0, IFStatus );
574  return STATUS_SUCCESS;
575 }
DWORD getAddrByIndexOrName(char *name, DWORD index, IPHLPAddrType addrType)
Definition: name.c:36
return STATUS_SUCCESS
Definition: btrfs.c:2966
Definition: ps.c:97

◆ getIPAddrEntryForIf()

NTSTATUS getIPAddrEntryForIf ( HANDLE  tcpFile,
char name,
DWORD  index,
IFInfo ifInfo 
)

Definition at line 460 of file ifenum_reactos.c.

463  {
464  NTSTATUS status =
465  name ?
466  getInterfaceInfoByName( tcpFile, name, ifInfo ) :
467  getInterfaceInfoByIndex( tcpFile, index, ifInfo );
468 
469  if (!NT_SUCCESS(status)) {
470  ERR("getIPAddrEntryForIf returning %lx\n", status);
471  }
472 
473  return status;
474 }
LONG NTSTATUS
Definition: precomp.h:26
NTSTATUS getInterfaceInfoByName(HANDLE tcpFile, char *name, IFInfo *info)
GLuint index
Definition: glext.h:6031
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
#define ERR(fmt,...)
Definition: debug.h:109
NTSTATUS getInterfaceInfoByIndex(HANDLE tcpFile, DWORD index, IFInfo *info)
Definition: name.c:36
static SERVICE_STATUS status
Definition: service.c:31
Definition: ps.c:97

Referenced by getAddrByIndexOrName().

◆ getNonLoopbackInterfaceIndexTable()

InterfaceIndexTable* getNonLoopbackInterfaceIndexTable ( void  )

Definition at line 451 of file ifenum_reactos.c.

451  {
453 }
#define TRUE
Definition: types.h:120
InterfaceIndexTable * getInterfaceIndexTableInt(BOOL nonLoopbackOnly)

Referenced by GetAdaptersInfo(), and GetInterfaceInfo().

◆ getNthInterfaceEntity()

DWORD getNthInterfaceEntity ( HANDLE  tcpFile,
DWORD  index,
TDIEntityID ent 
)

Definition at line 274 of file ifenum_reactos.c.

274  {
275  DWORD numEntities = 0;
276  DWORD numInterfaces = 0;
277  TDIEntityID *entitySet = 0;
278  NTSTATUS status = tdiGetEntityIDSet( tcpFile, &entitySet, &numEntities );
279  int i;
280 
281  if( !NT_SUCCESS(status) )
282  return status;
283 
284  for( i = 0; i < numEntities; i++ ) {
285  if( isInterface( &entitySet[i] ) ) {
286  if( numInterfaces == index ) break;
287  else numInterfaces++;
288  }
289  }
290 
291  TRACE("Index %d is entity #%d - %04x:%08x\n", index, i,
292  entitySet[i].tei_entity, entitySet[i].tei_instance );
293 
294  if( numInterfaces == index && i < numEntities ) {
295  memcpy( ent, &entitySet[i], sizeof(*ent) );
296  tdiFreeThingSet( entitySet );
297  return STATUS_SUCCESS;
298  } else {
299  tdiFreeThingSet( entitySet );
300  return STATUS_UNSUCCESSFUL;
301  }
302 }
LONG NTSTATUS
Definition: precomp.h:26
BOOL isInterface(TDIEntityID *if_maybe)
NTSTATUS tdiGetEntityIDSet(HANDLE tcpFile, TDIEntityID **entitySet, PDWORD numEntities)
Definition: enum.c:122
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
GLuint index
Definition: glext.h:6031
VOID tdiFreeThingSet(PVOID things)
Definition: enum.c:118
#define TRACE(s)
Definition: solgame.cpp:4
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
unsigned long DWORD
Definition: ntddk_ex.h:95
#define STATUS_UNSUCCESSFUL
Definition: udferr_usr.h:132
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
return STATUS_SUCCESS
Definition: btrfs.c:2966
static SERVICE_STATUS status
Definition: service.c:31
Definition: ps.c:97

◆ getNumInterfaces()

DWORD getNumInterfaces ( void  )

Definition at line 264 of file ifenum_reactos.c.

265 {
266  return getNumInterfacesInt( FALSE );
267 }
static DWORD getNumInterfacesInt(BOOL onlyNonLoopback)

Referenced by GetIfTable(), GetIpAddrTable(), and GetNumberOfInterfaces().

◆ getNumInterfacesInt()

static DWORD getNumInterfacesInt ( BOOL  onlyNonLoopback)
static

Definition at line 224 of file ifenum_reactos.c.

225 {
226  DWORD numEntities, numInterfaces = 0;
227  TDIEntityID *entitySet;
228  HANDLE tcpFile;
230  int i;
231 
232  status = openTcpFile( &tcpFile, FILE_READ_DATA );
233 
234  if( !NT_SUCCESS(status) ) {
235  WARN("getNumInterfaces: failed %08x\n", status );
236  return 0;
237  }
238 
239  status = tdiGetEntityIDSet( tcpFile, &entitySet, &numEntities );
240 
241  if( !NT_SUCCESS(status) ) {
242  WARN("getNumInterfaces: failed %08x\n", status );
243  closeTcpFile( tcpFile );
244  return 0;
245  }
246 
247  for( i = 0; i < numEntities; i++ ) {
248  if( isInterface( &entitySet[i] ) &&
249  (!onlyNonLoopback ||
250  (onlyNonLoopback && !isLoopback( tcpFile, &entitySet[i] ))) )
251  numInterfaces++;
252  }
253 
254  TRACE("getNumInterfaces: success: %d %d %08x\n",
255  onlyNonLoopback, numInterfaces, status );
256 
257  closeTcpFile( tcpFile );
258 
259  tdiFreeThingSet( entitySet );
260 
261  return numInterfaces;
262 }
#define WARN(fmt,...)
Definition: debug.h:111
LONG NTSTATUS
Definition: precomp.h:26
BOOL isInterface(TDIEntityID *if_maybe)
NTSTATUS tdiGetEntityIDSet(HANDLE tcpFile, TDIEntityID **entitySet, PDWORD numEntities)
Definition: enum.c:122
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define FILE_READ_DATA
Definition: nt_native.h:628
BOOL isLoopback(HANDLE tcpFile, TDIEntityID *loop_maybe)
VOID tdiFreeThingSet(PVOID things)
Definition: enum.c:118
#define TRACE(s)
Definition: solgame.cpp:4
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
unsigned long DWORD
Definition: ntddk_ex.h:95
VOID closeTcpFile(HANDLE h)
Definition: handle.c:43
NTSTATUS openTcpFile(PHANDLE tcpFile, ACCESS_MASK DesiredAccess)
Definition: handle.c:12
static SERVICE_STATUS status
Definition: service.c:31
Definition: ps.c:97

Referenced by getNumInterfaces(), and getNumNonLoopbackInterfaces().

◆ getNumNonLoopbackInterfaces()

DWORD getNumNonLoopbackInterfaces ( void  )

Definition at line 269 of file ifenum_reactos.c.

270 {
271  return getNumInterfacesInt( TRUE );
272 }
#define TRUE
Definition: types.h:120
static DWORD getNumInterfacesInt(BOOL onlyNonLoopback)

Referenced by GetAdaptersInfo(), and GetInterfaceInfo().

◆ hasArp()

BOOL hasArp ( HANDLE  tcpFile,
TDIEntityID arp_maybe 
)

Definition at line 131 of file ifenum_reactos.c.

131  {
134  DWORD returnSize, type;
135 
138  req.ID.toi_id = ENTITY_TYPE_ID;
140  req.ID.toi_entity.tei_instance = arp_maybe->tei_instance;
141 
142  status = DeviceIoControl( tcpFile,
144  &req,
145  sizeof(req),
146  &type,
147  sizeof(type),
148  &returnSize,
149  NULL );
150  if( !NT_SUCCESS(status) ) return FALSE;
151 
152  return (type & AT_ARP);
153 }
TDIEntityID toi_entity
Definition: tdiinfo.h:74
#define AT_ENTITY
Definition: tdiinfo.h:41
#define TCP_REQUEST_QUERY_INFORMATION_INIT
ULONG toi_class
Definition: tdiinfo.h:75
LONG NTSTATUS
Definition: precomp.h:26
#define ENTITY_TYPE_ID
Definition: tdiinfo.h:39
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
#define IOCTL_TCP_QUERY_INFORMATION_EX
Definition: ticonsts.h:42
#define AT_ARP
Definition: tdiinfo.h:49
ULONG toi_id
Definition: tdiinfo.h:77
smooth NULL
Definition: ftsmooth.c:416
ULONG tei_entity
Definition: tdiinfo.h:31
#define INFO_CLASS_GENERIC
Definition: tdiinfo.h:64
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
ULONG tei_instance
Definition: tdiinfo.h:32
unsigned long DWORD
Definition: ntddk_ex.h:95
BOOL WINAPI DeviceIoControl(IN HANDLE hDevice, IN DWORD dwIoControlCode, IN LPVOID lpInBuffer OPTIONAL, IN DWORD nInBufferSize OPTIONAL, OUT LPVOID lpOutBuffer OPTIONAL, IN DWORD nOutBufferSize OPTIONAL, OUT LPDWORD lpBytesReturned OPTIONAL, IN LPOVERLAPPED lpOverlapped OPTIONAL)
Definition: deviceio.c:136
#define INFO_TYPE_PROVIDER
Definition: tdiinfo.h:69
return STATUS_SUCCESS
Definition: btrfs.c:2966
ULONG toi_type
Definition: tdiinfo.h:76
Definition: ps.c:97

Referenced by getArpTable(), getNumArpEntries(), getNumTcpEntries(), getNumUdpEntries(), getTcpTable(), and getUdpTable().

◆ interfaceMapFree()

void interfaceMapFree ( void  )

Definition at line 54 of file ifenum_reactos.c.

55 {
56  /* Ditto. */
57 }

Referenced by DllMain().

◆ interfaceMapInit()

void interfaceMapInit ( void  )

Definition at line 49 of file ifenum_reactos.c.

50 {
51  /* For now, nothing */
52 }

Referenced by DllMain().

◆ isInterface()

BOOL isInterface ( TDIEntityID if_maybe)

Definition at line 114 of file ifenum_reactos.c.

114  {
115  return
116  if_maybe->tei_entity == IF_ENTITY;
117 }
ULONG tei_entity
Definition: tdiinfo.h:31
#define IF_ENTITY
Definition: tdiinfo.h:47

Referenced by getArpTable(), getInterfaceInfoSet(), getNthInterfaceEntity(), getNumArpEntries(), and getNumInterfacesInt().

◆ isLoopback()

BOOL isLoopback ( HANDLE  tcpFile,
TDIEntityID loop_maybe 
)

Definition at line 119 of file ifenum_reactos.c.

119  {
120  IFEntrySafelySized entryInfo;
122 
123  status = tdiGetMibForIfEntity( tcpFile,
124  loop_maybe,
125  &entryInfo );
126 
127  return NT_SUCCESS(status) &&
128  (entryInfo.ent.if_type == IFENT_SOFTWARE_LOOPBACK);
129 }
LONG NTSTATUS
Definition: precomp.h:26
ULONG if_type
Definition: tcpioctl.h:106
#define IFENT_SOFTWARE_LOOPBACK
NTSTATUS tdiGetMibForIfEntity(HANDLE tcpFile, TDIEntityID *ent, IFEntrySafelySized *entry)
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
static SERVICE_STATUS status
Definition: service.c:31
Definition: ps.c:97

Referenced by getInterfaceIndexTableInt(), and getNumInterfacesInt().

◆ tdiGetMibForIfEntity()

NTSTATUS tdiGetMibForIfEntity ( HANDLE  tcpFile,
TDIEntityID ent,
IFEntrySafelySized entry 
)

Definition at line 60 of file ifenum_reactos.c.

60  {
63  DWORD returnSize;
64 
65  WARN("TdiGetMibForIfEntity(tcpFile %p,entityId %p)\n",
66  tcpFile, ent->tei_instance);
67 
71  req.ID.toi_entity = *ent;
72 
73  status = DeviceIoControl( tcpFile,
75  &req,
76  sizeof(req),
77  entry,
78  sizeof(*entry),
79  &returnSize,
80  NULL );
81 
82  if(!status)
83  {
84  WARN("IOCTL Failed\n");
85  return STATUS_UNSUCCESSFUL;
86  }
87 
88  TRACE("TdiGetMibForIfEntity() => {\n"
89  " if_index ....................... %x\n"
90  " if_type ........................ %x\n"
91  " if_mtu ......................... %d\n"
92  " if_speed ....................... %x\n"
93  " if_physaddrlen ................. %d\n",
94  entry->ent.if_index,
95  entry->ent.if_type,
96  entry->ent.if_mtu,
97  entry->ent.if_speed,
98  entry->ent.if_physaddrlen);
99  TRACE(" if_physaddr .................... %02x:%02x:%02x:%02x:%02x:%02x\n"
100  " if_descr ....................... %*s\n",
101  entry->ent.if_physaddr[0] & 0xff,
102  entry->ent.if_physaddr[1] & 0xff,
103  entry->ent.if_physaddr[2] & 0xff,
104  entry->ent.if_physaddr[3] & 0xff,
105  entry->ent.if_physaddr[4] & 0xff,
106  entry->ent.if_physaddr[5] & 0xff,
107  entry->ent.if_descrlen,
108  entry->ent.if_descr);
109  TRACE("} status %08x\n",status);
110 
111  return STATUS_SUCCESS;
112 }
TDIEntityID toi_entity
Definition: tdiinfo.h:74
#define TCP_REQUEST_QUERY_INFORMATION_INIT
ULONG toi_class
Definition: tdiinfo.h:75
#define WARN(fmt,...)
Definition: debug.h:111
LONG NTSTATUS
Definition: precomp.h:26
#define IOCTL_TCP_QUERY_INFORMATION_EX
Definition: ticonsts.h:42
ULONG toi_id
Definition: tdiinfo.h:77
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4
ULONG tei_instance
Definition: tdiinfo.h:32
unsigned long DWORD
Definition: ntddk_ex.h:95
#define STATUS_UNSUCCESSFUL
Definition: udferr_usr.h:132
uint32_t entry
Definition: isohybrid.c:63
#define IF_MIB_STATS_ID
Definition: tcpioctl.h:49
BOOL WINAPI DeviceIoControl(IN HANDLE hDevice, IN DWORD dwIoControlCode, IN LPVOID lpInBuffer OPTIONAL, IN DWORD nInBufferSize OPTIONAL, OUT LPVOID lpOutBuffer OPTIONAL, IN DWORD nOutBufferSize OPTIONAL, OUT LPDWORD lpBytesReturned OPTIONAL, IN LPOVERLAPPED lpOverlapped OPTIONAL)
Definition: deviceio.c:136
#define INFO_TYPE_PROVIDER
Definition: tdiinfo.h:69
return STATUS_SUCCESS
Definition: btrfs.c:2966
ULONG toi_type
Definition: tdiinfo.h:76
#define INFO_CLASS_PROTOCOL
Definition: tdiinfo.h:65
Definition: ps.c:97

Referenced by getInterfaceInfoSet(), and isLoopback().

◆ toIPAddressString()

char* toIPAddressString ( unsigned int  addr,
char  string[16] 
)

Definition at line 631 of file ifenum_reactos.c.

632 {
633  struct in_addr iAddr;
634 
635  iAddr.s_addr = addr;
636 
637  if (string)
638  strncpy(string, inet_ntoa(iAddr), 16);
639 
640  return inet_ntoa(iAddr);
641 }
char * strncpy(char *DstString, const char *SrcString, ACPI_SIZE Count)
Definition: utclib.c:427
u32_t s_addr
Definition: inet.h:45
#define inet_ntoa(addr)
Definition: inet.h:100
Definition: tcpip.h:125
GLenum const GLvoid * addr
Definition: glext.h:9621

Referenced by GetAdaptersInfo().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( iphlpapi  )