ReactOS 0.4.15-dev-7924-g5949c20
info.h File Reference
#include <tcpioctl.h>
#include <in6addr.h>
#include <tcpmib.h>
#include <udpmib.h>
Include dependency graph for info.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  IPADDR_ENTRY
 
struct  IPARP_ENTRY
 
struct  IPROUTE_ENTRY
 
struct  ADDRESS_INFO
 
union  TDI_INFO
 

Macros

#define DWORD   ULONG
 
#define MAX_PHYSADDR_LEN   8
 
#define MAX_IFDESCR_LEN   256
 
#define ARP_ENTRY_STATIC   4
 
#define ARP_ENTRY_DYNAMIC   3
 
#define ARP_ENTRY_INVALID   2
 
#define ARP_ENTRY_OTHER   1
 
#define TDI_SERVICE_FLAGS
 
#define TCP_MIB_STAT_ID   1
 
#define UDP_MIB_STAT_ID   1
 
#define TCP_MIB_TABLE_ID   0x101
 
#define UDP_MIB_TABLE_ID   0x101
 
#define TL_INSTANCE   0
 

Typedefs

typedef struct IPADDR_ENTRY IPADDR_ENTRY
 
typedef struct IPADDR_ENTRYPIPADDR_ENTRY
 
typedef struct IPARP_ENTRY IPARP_ENTRY
 
typedef struct IPARP_ENTRYPIPARP_ENTRY
 
typedef struct IPROUTE_ENTRY IPROUTE_ENTRY
 
typedef struct IPROUTE_ENTRYPIPROUTE_ENTRY
 
typedef struct ADDRESS_INFO ADDRESS_INFO
 
typedef struct ADDRESS_INFOPADDRESS_INFO
 
typedef union TDI_INFO TDI_INFO
 
typedef union TDI_INFOPTDI_INFO
 
typedef enum TDI_TCPUDP_CLASS_INFO TDI_TCPUDP_CLASS_INFO
 
typedef enum TDI_TCPUDP_CLASS_INFOPTDI_TCPUDP_CLASS_INFO
 

Enumerations

enum  TDI_TCPUDP_CLASS_INFO { TcpUdpClassBasic , TcpUdpClassOwnerPid , TcpUdpClassOwner }
 

Functions

TDI_STATUS InfoCopyOut (PCHAR DataOut, UINT SizeOut, PNDIS_BUFFER ClientBuf, PUINT ClientBufSize)
 
TDI_STATUS InfoTdiQueryInformationEx (PTDI_REQUEST Request, TDIObjectID *ID, PNDIS_BUFFER Buffer, PUINT BufferSize, PVOID Context)
 
TDI_STATUS InfoTdiSetInformationEx (PTDI_REQUEST Request, TDIObjectID *ID, PVOID Buffer, UINT BufferSize)
 
TDI_STATUS InfoTdiQueryGetAddrTable (TDIEntityID ID, PNDIS_BUFFER Buffer, PUINT BufferSize)
 
TDI_STATUS InfoTdiQueryGetInterfaceMIB (TDIEntityID ID, PIP_INTERFACE Interface, PNDIS_BUFFER Buffer, PUINT BufferSize)
 
TDI_STATUS InfoTdiQueryGetIPSnmpInfo (TDIEntityID ID, PIP_INTERFACE IF, PNDIS_BUFFER Buffer, PUINT BufferSize)
 
TDI_STATUS InfoTdiQueryGetRouteTable (PIP_INTERFACE IF, PNDIS_BUFFER Buffer, PUINT BufferSize)
 
TDI_STATUS InfoTdiQueryGetConnectionTcpTable (PADDRESS_FILE AddrFile, PNDIS_BUFFER Buffer, PUINT BufferSize, TDI_TCPUDP_CLASS_INFO Class)
 
TDI_STATUS InfoTdiQueryGetConnectionUdpTable (PADDRESS_FILE AddrFile, PNDIS_BUFFER Buffer, PUINT BufferSize, TDI_TCPUDP_CLASS_INFO Class)
 
TDI_STATUS InfoTdiSetRoute (PIP_INTERFACE IF, PVOID Buffer, UINT BufferSize)
 
TDI_STATUS InfoTdiSetArptableMIB (PIP_INTERFACE IF, PVOID Buffer, UINT BufferSize)
 
TDI_STATUS InfoTdiQueryGetArptableMIB (TDIEntityID ID, PIP_INTERFACE Interface, PNDIS_BUFFER Buffer, PUINT BufferSize)
 
TDI_STATUS SetAddressFileInfo (TDIObjectID *ID, PADDRESS_FILE AddrFile, PVOID Buffer, UINT BufferSize)
 
TDI_STATUS GetAddressFileInfo (TDIObjectID *ID, PADDRESS_FILE AddrFile, PVOID Buffer, PUINT BufferSize)
 
TDI_STATUS SetConnectionInfo (TDIObjectID *ID, PCONNECTION_ENDPOINT Connection, PVOID Buffer, UINT BufferSize)
 
VOID InsertTDIInterfaceEntity (PIP_INTERFACE Interface)
 
VOID RemoveTDIInterfaceEntity (PIP_INTERFACE Interface)
 
VOID AddEntity (ULONG EntityType, PVOID Context, ULONG Flags)
 
VOID RemoveEntityByContext (PVOID Context)
 

Macro Definition Documentation

◆ ARP_ENTRY_DYNAMIC

#define ARP_ENTRY_DYNAMIC   3

Definition at line 31 of file info.h.

◆ ARP_ENTRY_INVALID

#define ARP_ENTRY_INVALID   2

Definition at line 32 of file info.h.

◆ ARP_ENTRY_OTHER

#define ARP_ENTRY_OTHER   1

Definition at line 33 of file info.h.

◆ ARP_ENTRY_STATIC

#define ARP_ENTRY_STATIC   4

Definition at line 30 of file info.h.

◆ DWORD

Definition at line 12 of file info.h.

◆ MAX_IFDESCR_LEN

#define MAX_IFDESCR_LEN   256

Definition at line 18 of file info.h.

◆ MAX_PHYSADDR_LEN

#define MAX_PHYSADDR_LEN   8

Definition at line 17 of file info.h.

◆ TCP_MIB_STAT_ID

#define TCP_MIB_STAT_ID   1

Definition at line 63 of file info.h.

◆ TCP_MIB_TABLE_ID

#define TCP_MIB_TABLE_ID   0x101

Definition at line 65 of file info.h.

◆ TDI_SERVICE_FLAGS

#define TDI_SERVICE_FLAGS
Value:
#define TDI_SERVICE_CONNECTIONLESS_MODE
Definition: tdi.h:247
#define TDI_SERVICE_BROADCAST_SUPPORTED
Definition: tdi.h:250

Definition at line 60 of file info.h.

◆ TL_INSTANCE

#define TL_INSTANCE   0

Definition at line 68 of file info.h.

◆ UDP_MIB_STAT_ID

#define UDP_MIB_STAT_ID   1

Definition at line 64 of file info.h.

◆ UDP_MIB_TABLE_ID

#define UDP_MIB_TABLE_ID   0x101

Definition at line 66 of file info.h.

Typedef Documentation

◆ ADDRESS_INFO

◆ IPADDR_ENTRY

◆ IPARP_ENTRY

◆ IPROUTE_ENTRY

◆ PADDRESS_INFO

◆ PIPADDR_ENTRY

◆ PIPARP_ENTRY

◆ PIPROUTE_ENTRY

◆ PTDI_INFO

typedef union TDI_INFO * PTDI_INFO

◆ PTDI_TCPUDP_CLASS_INFO

◆ TDI_INFO

typedef union TDI_INFO TDI_INFO

◆ TDI_TCPUDP_CLASS_INFO

Enumeration Type Documentation

◆ TDI_TCPUDP_CLASS_INFO

Enumerator
TcpUdpClassBasic 
TcpUdpClassOwnerPid 
TcpUdpClassOwner 

Definition at line 83 of file info.h.

83 {
TDI_TCPUDP_CLASS_INFO
Definition: info.h:83
@ TcpUdpClassOwnerPid
Definition: info.h:85
@ TcpUdpClassOwner
Definition: info.h:86
@ TcpUdpClassBasic
Definition: info.h:84
enum TDI_TCPUDP_CLASS_INFO * PTDI_TCPUDP_CLASS_INFO

Function Documentation

◆ AddEntity()

VOID AddEntity ( ULONG  EntityType,
PVOID  Context,
ULONG  Flags 
)

Definition at line 15 of file info.c.

16{
18 ULONG i, Instance = 0;
19 BOOLEAN ChoseIndex = FALSE;
20
22
23 while (!ChoseIndex)
24 {
25 ChoseIndex = TRUE;
26 for (i = 0; i < EntityCount; i++)
27 {
28 if (EntityList[i].tei_entity == EntityType &&
29 EntityList[i].tei_instance == Instance)
30 {
31 Instance++;
32 ChoseIndex = FALSE;
33 }
34 }
35 }
36
37 EntityList[EntityCount].tei_entity = EntityType;
42
44}
unsigned char BOOLEAN
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
VOID TcpipReleaseSpinLock(PKSPIN_LOCK SpinLock, KIRQL Irql)
Definition: lock.c:26
VOID TcpipAcquireSpinLock(PKSPIN_LOCK SpinLock, PKIRQL Irql)
Definition: lock.c:18
ULONG EntityCount
Definition: main.c:28
TDIEntityInfo * EntityList
Definition: main.c:27
KSPIN_LOCK EntityListLock
Definition: main.c:26
UCHAR KIRQL
Definition: env_spec_w32.h:591
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
UINT tei_instance
Definition: tcpip.h:147
PVOID context
Definition: tcpip.h:148
UINT flags
Definition: tcpip.h:149
UINT tei_entity
Definition: tcpip.h:146
uint32_t ULONG
Definition: typedefs.h:59
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_WMI_INSTANCE_CONFIG _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_opt_ WDFWMIINSTANCE * Instance
Definition: wdfwmi.h:481
_Must_inspect_result_ _In_ ULONG Flags
Definition: wsk.h:170
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql
Definition: kefuncs.h:778

Referenced by FileOpenAddress(), and InsertTDIInterfaceEntity().

◆ GetAddressFileInfo()

TDI_STATUS GetAddressFileInfo ( TDIObjectID ID,
PADDRESS_FILE  AddrFile,
PVOID  Buffer,
PUINT  BufferSize 
)

Definition at line 65 of file ainfo.c.

69{
71
73}
#define UNIMPLEMENTED
Definition: debug.h:115
#define TDI_INVALID_REQUEST
Definition: tdistat.h:63

Referenced by InfoTdiQueryInformationEx().

◆ InfoCopyOut()

TDI_STATUS InfoCopyOut ( PCHAR  DataOut,
UINT  SizeOut,
PNDIS_BUFFER  ClientBuf,
PUINT  ClientBufSize 
)

Definition at line 97 of file info.c.

98 {
99 UINT RememberedCBSize = *ClientBufSize;
100 *ClientBufSize = SizeOut;
101
102 /* The driver returns success even when it couldn't fit every available
103 * byte. */
104 if( RememberedCBSize < SizeOut || !ClientBuf )
105 return TDI_SUCCESS;
106 else {
107 CopyBufferToBufferChain( ClientBuf, 0, (PCHAR)DataOut, SizeOut );
108 return TDI_SUCCESS;
109 }
110}
UINT CopyBufferToBufferChain(PNDIS_BUFFER DstBuffer, UINT DstOffset, PUCHAR SrcData, UINT Length)
Definition: buffer.c:56
unsigned int UINT
Definition: ndis.h:50
#define TDI_SUCCESS
Definition: tdistat.h:30
char * PCHAR
Definition: typedefs.h:51

Referenced by InfoTdiQueryEntityType(), InfoTdiQueryGetAddrTable(), InfoTdiQueryGetArptableMIB(), InfoTdiQueryGetATInfo(), InfoTdiQueryGetConnectionTcpTable(), InfoTdiQueryGetConnectionUdpTable(), InfoTdiQueryGetInterfaceMIB(), InfoTdiQueryGetIPSnmpInfo(), InfoTdiQueryGetRouteTable(), and InfoTransportLayerTdiQueryEx().

◆ InfoTdiQueryGetAddrTable()

TDI_STATUS InfoTdiQueryGetAddrTable ( TDIEntityID  ID,
PNDIS_BUFFER  Buffer,
PUINT  BufferSize 
)

Definition at line 98 of file ninfo.c.

101{
103 PIPADDR_ENTRY IPEntry;
104 PIP_INTERFACE CurrentIF;
105 UINT i;
106
107 TI_DbgPrint(DEBUG_INFO, ("Called.\n"));
108
109
111
112 for (i = 0; i < EntityCount; i++)
113 {
114 if (EntityList[i].tei_entity == ID.tei_entity &&
115 EntityList[i].tei_instance == ID.tei_instance)
116 break;
117 }
118
119 if (i == EntityCount)
120 {
123 }
124
126 if (!IPEntry)
127 {
129 return TDI_NO_RESOURCES;
130 }
131
132 CurrentIF = EntityList[i].context;
133
134 IPEntry->Index = CurrentIF->Index;
135 GetInterfaceIPv4Address(CurrentIF,
137 &IPEntry->Addr);
138 GetInterfaceIPv4Address(CurrentIF,
140 &IPEntry->Mask);
141 GetInterfaceIPv4Address(CurrentIF,
143 &IPEntry->BcastAddr);
144
146
147 InfoCopyOut((PCHAR)IPEntry, sizeof(IPADDR_ENTRY),
149
151
152 return TDI_SUCCESS;
153}
Definition: bufpool.h:45
#define DEBUG_INFO
Definition: debug.h:33
#define TI_DbgPrint(_t_, _x_)
Definition: debug.h:45
#define ADE_BROADCAST
Definition: ip.h:111
#define ADE_UNICAST
Definition: ip.h:110
#define ADE_ADDRMASK
Definition: ip.h:112
#define IP_ADDRESS_TAG
Definition: tags.h:18
#define ExAllocatePoolWithTag(hernya, size, tag)
Definition: env_spec_w32.h:350
#define NonPagedPool
Definition: env_spec_w32.h:307
TDI_STATUS InfoCopyOut(PCHAR DataOut, UINT SizeOut, PNDIS_BUFFER ClientBuf, PUINT ClientBufSize)
Definition: info.c:97
#define ExFreePoolWithTag(_P, _T)
Definition: module.h:1109
NTSTATUS GetInterfaceIPv4Address(PIP_INTERFACE Interface, ULONG Type, PULONG Address)
Definition: interface.c:19
#define ID
Definition: ruserpass.c:36
Definition: afd.h:56
ULONG BcastAddr
Definition: afd.h:60
ULONG Mask
Definition: afd.h:59
ULONG Addr
Definition: afd.h:57
ULONG Index
Definition: afd.h:58
UINT Index
Definition: ip.h:167
#define TDI_NO_RESOURCES
Definition: tdistat.h:31
#define TDI_INVALID_PARAMETER
Definition: tdistat.h:52
_In_ WDFMEMORY _Out_opt_ size_t * BufferSize
Definition: wdfmemory.h:254

Referenced by InfoTdiQueryInformationEx().

◆ InfoTdiQueryGetArptableMIB()

TDI_STATUS InfoTdiQueryGetArptableMIB ( TDIEntityID  ID,
PIP_INTERFACE  Interface,
PNDIS_BUFFER  Buffer,
PUINT  BufferSize 
)

Definition at line 105 of file iinfo.c.

108 {
110 ULONG NumNeighbors = NBCopyNeighbors( Interface, NULL );
111 ULONG MemSize = NumNeighbors * sizeof(IPARP_ENTRY);
112 PIPARP_ENTRY ArpEntries;
113
114 if (MemSize != 0)
115 {
116 ArpEntries = ExAllocatePoolWithTag( NonPagedPool, MemSize, ARP_ENTRY_TAG );
117 if( !ArpEntries ) return STATUS_NO_MEMORY;
118
119 NBCopyNeighbors( Interface, ArpEntries );
120
121 Status = InfoCopyOut( (PVOID)ArpEntries, MemSize, Buffer, BufferSize );
122
123 ExFreePoolWithTag( ArpEntries, ARP_ENTRY_TAG );
124 }
125 else
126 {
128 }
129
130 return Status;
131}
LONG NTSTATUS
Definition: precomp.h:26
#define NULL
Definition: types.h:112
#define ARP_ENTRY_TAG
Definition: tags.h:40
Status
Definition: gdiplustypes.h:25
ULONG NBCopyNeighbors(PIP_INTERFACE Interface, PIPARP_ENTRY ArpTable)
Definition: neighbor.c:636
#define STATUS_NO_MEMORY
Definition: ntstatus.h:260
Definition: info.h:35
_Must_inspect_result_ _In_ WDFDEVICE _In_ LPCGUID _Out_ PINTERFACE Interface
Definition: wdffdo.h:465

Referenced by InfoTdiQueryInformationEx().

◆ InfoTdiQueryGetConnectionTcpTable()

TDI_STATUS InfoTdiQueryGetConnectionTcpTable ( PADDRESS_FILE  AddrFile,
PNDIS_BUFFER  Buffer,
PUINT  BufferSize,
TDI_TCPUDP_CLASS_INFO  Class 
)

Definition at line 182 of file ninfo.c.

186{
187 SIZE_T Size;
190
191 TI_DbgPrint(DEBUG_INFO, ("Called.\n"));
192
194 {
195 Size = sizeof(MIB_TCPROW_OWNER_PID);
196 }
197 else if (Class == TcpUdpClassOwner)
198 {
200 }
201 else
202 {
203 Size = sizeof(MIB_TCPROW);
204 }
205
206 TcpRow.dwOwningPid = HandleToUlong(AddrFile->ProcessId);
207 TcpRow.liCreateTimestamp = AddrFile->CreationTime;
208
209 if (AddrFile->Listener != NULL)
210 {
211 PADDRESS_FILE EndPoint;
212
213 EndPoint = AddrFile->Listener->AddressFile;
214
216 TcpRow.dwLocalAddr = AddrFile->Address.Address.IPv4Address;
217 TcpRow.dwLocalPort = AddrFile->Port;
218 TcpRow.dwRemoteAddr = EndPoint->Address.Address.IPv4Address;
219 TcpRow.dwRemotePort = EndPoint->Port;
220
222 }
223 else if (AddrFile->Connection != NULL &&
224 AddrFile->Connection->SocketContext != NULL)
225 {
226 TA_IP_ADDRESS EndPoint;
227
229 if (NT_SUCCESS(Status))
230 {
231 ASSERT(EndPoint.TAAddressCount >= 1);
232 ASSERT(EndPoint.Address[0].AddressLength == TDI_ADDRESS_LENGTH_IP);
233 TcpRow.dwLocalAddr = EndPoint.Address[0].Address[0].in_addr;
234 TcpRow.dwLocalPort = ntohs(EndPoint.Address[0].Address[0].sin_port);
235
237 if (NT_SUCCESS(Status))
238 {
239 ASSERT(EndPoint.TAAddressCount >= 1);
240 ASSERT(EndPoint.Address[0].AddressLength == TDI_ADDRESS_LENGTH_IP);
241 TcpRow.dwRemoteAddr = EndPoint.Address[0].Address[0].in_addr;
242 TcpRow.dwRemotePort = ntohs(EndPoint.Address[0].Address[0].sin_port);
243
244 Status = TCPGetSocketStatus(AddrFile->Connection, &TcpRow.dwState);
246 }
247 }
248 }
249
250 if (NT_SUCCESS(Status))
251 {
252 if (Class == TcpUdpClassOwner)
253 {
254 RtlZeroMemory(&TcpRow.OwningModuleInfo[0], sizeof(TcpRow.OwningModuleInfo));
255 TcpRow.OwningModuleInfo[0] = (ULONG_PTR)AddrFile->SubProcessTag;
256 }
257
258 Status = InfoCopyOut( (PCHAR)&TcpRow, Size,
260 }
261
262 TI_DbgPrint(DEBUG_INFO, ("Returning %08x\n", Status));
263
264 return Status;
265}
#define HandleToUlong(h)
Definition: basetsd.h:79
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
#define ULONG_PTR
Definition: config.h:101
NTSTATUS TCPGetSocketStatus(PCONNECTION_ENDPOINT Connection, PULONG State)
Definition: tcp.c:749
NTSTATUS TCPGetSockAddress(PCONNECTION_ENDPOINT Connection, PTRANSPORT_ADDRESS TransportAddress, BOOLEAN RemoteAddress)
Definition: tcp.c:658
#define ASSERT(a)
Definition: mode.c:44
#define ntohs(n)
Definition: ninfo.c:180
union IP_ADDRESS::@1005 Address
IPv4_RAW_ADDRESS IPv4Address
Definition: ip.h:26
struct _CONNECTION_ENDPOINT * Connection
Definition: titypes.h:131
HANDLE ProcessId
Definition: titypes.h:137
USHORT Port
Definition: titypes.h:120
IP_ADDRESS Address
Definition: titypes.h:117
LARGE_INTEGER CreationTime
Definition: titypes.h:139
struct _CONNECTION_ENDPOINT * Listener
Definition: titypes.h:133
PVOID SubProcessTag
Definition: titypes.h:138
LARGE_INTEGER liCreateTimestamp
Definition: tcpmib.h:126
ULONGLONG OwningModuleInfo[TCPIP_OWNING_MODULE_SIZE]
Definition: tcpmib.h:127
struct _TA_ADDRESS_IP::_AddrIp Address[1]
LONG TAAddressCount
Definition: tdi.h:523
struct _MIB_TCPROW MIB_TCPROW
struct _MIB_TCPROW_OWNER_PID MIB_TCPROW_OWNER_PID
@ MIB_TCP_STATE_LISTEN
Definition: tcpmib.h:29
struct _MIB_TCPROW_OWNER_MODULE MIB_TCPROW_OWNER_MODULE
#define TDI_ADDRESS_LENGTH_IP
Definition: tdi.h:413
LONG TDI_STATUS
Definition: tdi.h:36
ULONG_PTR SIZE_T
Definition: typedefs.h:80
#define RtlZeroMemory(Destination, Length)
Definition: typedefs.h:262
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
Definition: wdfdevice.h:4533

Referenced by InfoTdiQueryInformationEx().

◆ InfoTdiQueryGetConnectionUdpTable()

TDI_STATUS InfoTdiQueryGetConnectionUdpTable ( PADDRESS_FILE  AddrFile,
PNDIS_BUFFER  Buffer,
PUINT  BufferSize,
TDI_TCPUDP_CLASS_INFO  Class 
)

Definition at line 267 of file ninfo.c.

271{
272 SIZE_T Size;
275
276 TI_DbgPrint(DEBUG_INFO, ("Called.\n"));
277
279 {
280 Size = sizeof(MIB_UDPROW_OWNER_PID);
281 }
282 else if (Class == TcpUdpClassOwner)
283 {
285 }
286 else
287 {
288 Size = sizeof(MIB_UDPROW);
289 }
290
291 UdpRow.dwLocalAddr = AddrFile->Address.Address.IPv4Address;
292 UdpRow.dwLocalPort = AddrFile->Port;
293 UdpRow.dwOwningPid = HandleToUlong(AddrFile->ProcessId);
294 UdpRow.liCreateTimestamp = AddrFile->CreationTime;
295 UdpRow.dwFlags = 0; /* FIXME */
296 if (Class == TcpUdpClassOwner)
297 {
298 RtlZeroMemory(&UdpRow.OwningModuleInfo[0], sizeof(UdpRow.OwningModuleInfo));
299 UdpRow.OwningModuleInfo[0] = (ULONG_PTR)AddrFile->SubProcessTag;
300 }
301
302 Status = InfoCopyOut( (PCHAR)&UdpRow,
304
305 TI_DbgPrint(DEBUG_INFO, ("Returning %08x\n", Status));
306
307 return Status;
308}
LARGE_INTEGER liCreateTimestamp
Definition: udpmib.h:56
ULONGLONG OwningModuleInfo[TCPIP_OWNING_MODULE_SIZE]
Definition: udpmib.h:65
struct _MIB_UDPROW_OWNER_MODULE MIB_UDPROW_OWNER_MODULE
struct _MIB_UDPROW_OWNER_PID MIB_UDPROW_OWNER_PID
struct _MIB_UDPROW MIB_UDPROW

Referenced by InfoTdiQueryInformationEx().

◆ InfoTdiQueryGetInterfaceMIB()

TDI_STATUS InfoTdiQueryGetInterfaceMIB ( TDIEntityID  ID,
PIP_INTERFACE  Interface,
PNDIS_BUFFER  Buffer,
PUINT  BufferSize 
)

Definition at line 18 of file iinfo.c.

21 {
23 IFEntry* OutData;
24 PLAN_ADAPTER IF;
25 PCHAR IFDescr;
26 ULONG Size;
27 NDIS_STATUS NdisStatus;
28
29 if (!Interface)
31
33
35 ("Getting IFEntry MIB (IF %08x LA %08x) (%04x:%d)\n",
36 Interface, IF, ID.tei_entity, ID.tei_instance));
37
39
40 if( !OutData ) return TDI_NO_RESOURCES; /* Out of memory */
41
43
44 OutData->if_index = Interface->Index;
45 /* viz: tcpip keeps those indices */
46 OutData->if_type = Interface ==
48 OutData->if_mtu = Interface->MTU;
50 ("Getting interface speed\n"));
51 OutData->if_physaddrlen = Interface->AddressLength;
53 /* NDIS_HARDWARE_STATUS -> ROUTER_CONNECTION_STATE */
55
56 IFDescr = (PCHAR)&OutData->if_descr[0];
57
58 if( IF ) {
61 ("IF Speed = %d * 100bps\n", OutData->if_speed));
62 memcpy(OutData->if_physaddr, Interface->Address, Interface->AddressLength);
63 TI_DbgPrint(DEBUG_INFO, ("Got HWAddr\n"));
64
65 memcpy(&OutData->if_inoctets, &Interface->Stats, sizeof(SEND_RECV_STATS));
66
67 NdisStatus = NDISCall(IF,
70 &OutData->if_outerrors,
71 sizeof(ULONG));
72 if (NdisStatus != NDIS_STATUS_SUCCESS)
73 OutData->if_outerrors = 0;
74
75 TI_DbgPrint(DEBUG_INFO, ("OutErrors = %d\n", OutData->if_outerrors));
76
77 NdisStatus = NDISCall(IF,
80 &OutData->if_inerrors,
81 sizeof(ULONG));
82 if (NdisStatus != NDIS_STATUS_SUCCESS)
83 OutData->if_inerrors = 0;
84
85 TI_DbgPrint(DEBUG_INFO, ("InErrors = %d\n", OutData->if_inerrors));
86 }
87
89
90 TI_DbgPrint(DEBUG_INFO, ("Copied in name %s\n", IFDescr));
91 OutData->if_descrlen = strlen(IFDescr);
92 Size = FIELD_OFFSET(IFEntry, if_descr[OutData->if_descrlen + 1]);
93
94 TI_DbgPrint(DEBUG_INFO, ("Finished IFEntry MIB (%04x:%d) size %d\n",
95 ID.tei_entity, ID.tei_instance, Size));
96
99
100 TI_DbgPrint(DEBUG_INFO,("Returning %x\n", Status));
101
102 return Status;
103}
bool GetInterfaceName(const WCHAR *InterfaceString, WCHAR *buf, size_t size)
Definition: CFontExt.cpp:46
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
#define OUT_DATA_TAG
Definition: tags.h:39
#define MAX_ADAPTER_DESCRIPTION_LENGTH
Definition: iinfo.c:16
#define MIB_IF_TYPE_ETHERNET
Definition: ipifcons.h:223
#define MIB_IF_TYPE_LOOPBACK
Definition: ipifcons.h:227
#define MIB_IF_ADMIN_STATUS_UP
Definition: ipifcons.h:232
struct LAN_ADAPTER * PLAN_ADAPTER
NDIS_STATUS NDISCall(PLAN_ADAPTER Adapter, NDIS_REQUEST_TYPE Type, NDIS_OID OID, PVOID Buffer, UINT Length)
Send a request to NDIS.
Definition: lan.c:29
PIP_INTERFACE Loopback
Definition: loopback.c:13
#define PCHAR
Definition: match.c:90
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
unsigned int * PUINT
Definition: ndis.h:50
#define NDIS_STATUS_SUCCESS
Definition: ndis.h:346
@ NdisRequestQueryInformation
Definition: ndis.h:790
NTSTATUS GetInterfaceSpeed(PIP_INTERFACE Interface, PUINT Speed)
Definition: interface.c:62
VOID GetInterfaceConnectionStatus(PIP_INTERFACE Interface, PULONG OperStatus)
Definition: interface.c:254
#define OID_GEN_XMIT_ERROR
Definition: ntddndis.h:269
int NDIS_STATUS
Definition: ntddndis.h:475
#define OID_GEN_RCV_ERROR
Definition: ntddndis.h:270
ULONG if_operstatus
Definition: tcpioctl.h:115
UCHAR if_descr[1]
Definition: tcpioctl.h:130
ULONG if_inerrors
Definition: tcpioctl.h:121
ULONG if_index
Definition: tcpioctl.h:108
ULONG if_descrlen
Definition: tcpioctl.h:129
ULONG if_physaddrlen
Definition: tcpioctl.h:112
ULONG if_inoctets
Definition: tcpioctl.h:117
ULONG if_type
Definition: tcpioctl.h:109
ULONG if_speed
Definition: tcpioctl.h:111
ULONG if_mtu
Definition: tcpioctl.h:110
ULONG if_outerrors
Definition: tcpioctl.h:127
UCHAR if_physaddr[MAX_PHYSADDR_SIZE]
Definition: tcpioctl.h:113
ULONG if_adminstatus
Definition: tcpioctl.h:114
PVOID Context
Definition: lan.h:64
#define FIELD_OFFSET(t, f)
Definition: typedefs.h:255

Referenced by InfoTdiQueryInformationEx().

◆ InfoTdiQueryGetIPSnmpInfo()

TDI_STATUS InfoTdiQueryGetIPSnmpInfo ( TDIEntityID  ID,
PIP_INTERFACE  IF,
PNDIS_BUFFER  Buffer,
PUINT  BufferSize 
)

Definition at line 155 of file ninfo.c.

158 {
159 IPSNMPInfo SnmpInfo;
160 UINT IfCount = CountInterfaces();
161 UINT RouteCount = CountFIBs(IF);
163
164 TI_DbgPrint(DEBUG_INFO, ("Called.\n"));
165
166 RtlZeroMemory(&SnmpInfo, sizeof(SnmpInfo));
167
168 SnmpInfo.ipsi_numif = IfCount;
169 SnmpInfo.ipsi_numaddr = 1;
170 SnmpInfo.ipsi_numroutes = RouteCount;
171
172 Status = InfoCopyOut( (PCHAR)&SnmpInfo, sizeof(SnmpInfo),
174
175 TI_DbgPrint(DEBUG_INFO, ("Returning %08x\n", Status));
176
177 return Status;
178}
UINT CountInterfaces()
Definition: interface.c:46
UINT CountFIBs(PIP_INTERFACE IF)
Definition: router.c:101
ULONG ipsi_numif
Definition: tcpioctl.h:155
ULONG ipsi_numroutes
Definition: tcpioctl.h:157
ULONG ipsi_numaddr
Definition: tcpioctl.h:156

Referenced by InfoTdiQueryInformationEx().

◆ InfoTdiQueryGetRouteTable()

TDI_STATUS InfoTdiQueryGetRouteTable ( PIP_INTERFACE  IF,
PNDIS_BUFFER  Buffer,
PUINT  BufferSize 
)

Definition at line 17 of file ninfo.c.

17 {
20 UINT RtCount = CountFIBs(IF);
21 UINT Size = sizeof( IPROUTE_ENTRY ) * RtCount;
22 PFIB_ENTRY RCache, RCacheCur;
23 PIPROUTE_ENTRY RouteEntries, RtCurrent;
24 UINT i;
25
26 TI_DbgPrint(DEBUG_INFO, ("Called, routes = %d\n",
27 RtCount));
28
29 if (RtCount == 0)
30 return InfoCopyOut(NULL, 0, NULL, BufferSize);
31
33 RtCurrent = RouteEntries;
34
35 RCache = ExAllocatePoolWithTag( NonPagedPool, sizeof( FIB_ENTRY ) * RtCount, FIB_TAG );
36 RCacheCur = RCache;
37
38 if( !RCache || !RouteEntries ) {
39 if( RCache ) ExFreePoolWithTag( RCache, FIB_TAG );
40 if( RouteEntries ) ExFreePoolWithTag( RouteEntries, ROUTE_ENTRY_TAG );
41 return TDI_NO_RESOURCES;
42 }
43
44 RtlZeroMemory( RouteEntries, Size );
45
46 RtCount = CopyFIBs( IF, RCache );
47
48 while( RtCurrent < RouteEntries + RtCount ) {
49 ASSERT(RCacheCur->Router);
50
51 RtlCopyMemory( &RtCurrent->Dest,
52 &RCacheCur->NetworkAddress.Address,
53 sizeof(RtCurrent->Dest) );
54 RtlCopyMemory( &RtCurrent->Mask,
55 &RCacheCur->Netmask.Address,
56 sizeof(RtCurrent->Mask) );
57 RtlCopyMemory( &RtCurrent->Gw,
58 &RCacheCur->Router->Address.Address,
59 sizeof(RtCurrent->Gw) );
60
61 RtCurrent->Metric1 = RCacheCur->Metric;
62 RtCurrent->Type = TDI_ADDRESS_TYPE_IP;
63
66 ("%d: NA %08x NM %08x GW %08x MT %x\n",
67 RtCurrent - RouteEntries,
68 RtCurrent->Dest,
69 RtCurrent->Mask,
70 RtCurrent->Gw,
71 RtCurrent->Metric1 ));
72
74 for (i = 0; i < EntityCount; i++)
75 if (EntityList[i].context == IF)
76 break;
77
78 if (i < EntityCount)
79 RtCurrent->Index = EntityList[i].tei_instance;
80 else
81 RtCurrent->Index = 0;
82
84
85 RtCurrent++; RCacheCur++;
86 }
87
88 Status = InfoCopyOut( (PCHAR)RouteEntries, Size, Buffer, BufferSize );
89
90 ExFreePoolWithTag( RouteEntries, ROUTE_ENTRY_TAG );
91 ExFreePoolWithTag( RCache, FIB_TAG );
92
93 TI_DbgPrint(DEBUG_INFO, ("Returning %08x\n", Status));
94
95 return Status;
96}
#define FIB_TAG
Definition: tags.h:29
#define ROUTE_ENTRY_TAG
Definition: tags.h:38
UINT CopyFIBs(PIP_INTERFACE IF, PFIB_ENTRY Target)
Definition: router.c:120
Definition: info.h:43
ULONG Dest
Definition: info.h:44
ULONG Index
Definition: info.h:45
ULONG Metric1
Definition: info.h:46
ULONG Gw
Definition: info.h:50
ULONG Type
Definition: info.h:51
ULONG Mask
Definition: info.h:54
IP_ADDRESS Address
Definition: neighbor.h:36
Definition: router.h:14
PNEIGHBOR_CACHE_ENTRY Router
Definition: router.h:19
UINT Metric
Definition: router.h:20
IP_ADDRESS Netmask
Definition: router.h:18
IP_ADDRESS NetworkAddress
Definition: router.h:17
Definition: http.c:7252
#define TDI_ADDRESS_TYPE_IP
Definition: tdi.h:345
#define RtlCopyMemory(Destination, Source, Length)
Definition: typedefs.h:263

Referenced by InfoTdiQueryInformationEx().

◆ InfoTdiQueryInformationEx()

TDI_STATUS InfoTdiQueryInformationEx ( PTDI_REQUEST  Request,
TDIObjectID ID,
PNDIS_BUFFER  Buffer,
PUINT  BufferSize,
PVOID  Context 
)

Definition at line 215 of file info.c.

233{
234 PVOID EntityListContext;
235
237 ("InfoEx Req: %x %x %x!%04x:%d\n",
238 ID->toi_class,
239 ID->toi_type,
240 ID->toi_id,
241 ID->toi_entity.tei_entity,
242 ID->toi_entity.tei_instance));
243
244 switch (ID->toi_class)
245 {
247 switch (ID->toi_id)
248 {
249 case ENTITY_LIST_ID:
250 if (ID->toi_type != INFO_TYPE_PROVIDER)
252
254
255 case ENTITY_TYPE_ID:
256 if (ID->toi_type != INFO_TYPE_PROVIDER)
258
259 return InfoTdiQueryEntityType(ID->toi_entity, Buffer, BufferSize);
260
261 default:
262 return TDI_INVALID_REQUEST;
263 }
264
266 if (ID->toi_type == INFO_TYPE_ADDRESS_OBJECT)
267 {
268 if ((EntityListContext = GetContext(ID->toi_entity)))
269 return GetAddressFileInfo(ID, EntityListContext, Buffer, BufferSize);
270 else
272 }
273
274 switch (ID->toi_id)
275 {
276 case IF_MIB_STATS_ID:
277 if (ID->toi_type != INFO_TYPE_PROVIDER)
279
280 if (ID->toi_entity.tei_entity == IF_ENTITY)
281 if ((EntityListContext = GetContext(ID->toi_entity)))
282 return InfoTdiQueryGetInterfaceMIB(ID->toi_entity, EntityListContext, Buffer, BufferSize);
283 else
285 else if (ID->toi_entity.tei_entity == CL_NL_ENTITY ||
286 ID->toi_entity.tei_entity == CO_NL_ENTITY)
287 if ((EntityListContext = GetContext(ID->toi_entity)))
288 return InfoTdiQueryGetIPSnmpInfo(ID->toi_entity, EntityListContext, Buffer, BufferSize);
289 else
291 else if (ID->toi_entity.tei_entity == AT_ENTITY)
292 if ((EntityListContext = GetContext(ID->toi_entity)))
293 return InfoTdiQueryGetATInfo(ID->toi_entity, EntityListContext, Buffer, BufferSize);
294 else
296 else
298
300 if (ID->toi_type != INFO_TYPE_PROVIDER)
302
303 if (ID->toi_entity.tei_entity == CL_NL_ENTITY ||
304 ID->toi_entity.tei_entity == CO_NL_ENTITY)
305 return InfoTdiQueryGetAddrTable(ID->toi_entity, Buffer, BufferSize);
306 else if (ID->toi_entity.tei_entity == CO_TL_ENTITY)
307 if ((EntityListContext = GetContext(ID->toi_entity)))
309 else
311 else if (ID->toi_entity.tei_entity == CL_TL_ENTITY)
312 if ((EntityListContext = GetContext(ID->toi_entity)))
314 else
316 else
318
320 if (ID->toi_type != INFO_TYPE_PROVIDER)
322
323 if (ID->toi_entity.tei_entity == AT_ENTITY)
324 if ((EntityListContext = GetContext(ID->toi_entity)))
325 return InfoTdiQueryGetArptableMIB(ID->toi_entity, EntityListContext,
327 else
329 else if (ID->toi_entity.tei_entity == CO_NL_ENTITY ||
330 ID->toi_entity.tei_entity == CL_NL_ENTITY)
331 if ((EntityListContext = GetContext(ID->toi_entity)))
332 return InfoTdiQueryGetRouteTable(EntityListContext, Buffer, BufferSize);
333 else
335 else if (ID->toi_entity.tei_entity == CO_TL_ENTITY)
336 if ((EntityListContext = GetContext(ID->toi_entity)))
338 else
340 else if (ID->toi_entity.tei_entity == CL_TL_ENTITY)
341 if ((EntityListContext = GetContext(ID->toi_entity)))
343 else
345 else
347
348 case IP_SPECIFIC_MODULE_ENTRY_ID:
349 if (ID->toi_type != INFO_TYPE_PROVIDER)
351
352 if (ID->toi_entity.tei_entity == CO_TL_ENTITY)
353 if ((EntityListContext = GetContext(ID->toi_entity)))
355 else
357 else if (ID->toi_entity.tei_entity == CL_TL_ENTITY)
358 if ((EntityListContext = GetContext(ID->toi_entity)))
360 else
362 else
364
365#if 0
366 case IP_INTFC_INFO_ID:
367 if (ID->toi_type != INFO_TYPE_PROVIDER)
369
370 return InfoTdiQueryGetIFInfo(Context, Buffer, BufferSize);
371#endif
372
373 default:
374 return TDI_INVALID_REQUEST;
375 }
376
377 default:
378 return TDI_INVALID_REQUEST;
379 }
380}
#define IP_MIB_ADDRTABLE_ENTRY_ID
Definition: afd.h:36
TDI_STATUS InfoTdiQueryGetATInfo(TDIEntityID ID, PIP_INTERFACE Interface, PNDIS_BUFFER Buffer, PUINT BufferSize)
Definition: info.c:184
TDI_STATUS InfoTdiQueryListEntities(PNDIS_BUFFER Buffer, PUINT BufferSize)
Definition: info.c:146
PVOID GetContext(TDIEntityID ID)
Definition: info.c:68
TDI_STATUS InfoTdiQueryEntityType(TDIEntityID ID, PNDIS_BUFFER Buffer, PUINT BufferSize)
Definition: info.c:112
TDI_STATUS InfoTdiQueryGetAddrTable(TDIEntityID ID, PNDIS_BUFFER Buffer, PUINT BufferSize)
Definition: ninfo.c:98
TDI_STATUS InfoTdiQueryGetInterfaceMIB(TDIEntityID ID, PIP_INTERFACE Interface, PNDIS_BUFFER Buffer, PUINT BufferSize)
Definition: iinfo.c:18
TDI_STATUS GetAddressFileInfo(TDIObjectID *ID, PADDRESS_FILE AddrFile, PVOID Buffer, PUINT BufferSize)
Definition: ainfo.c:65
TDI_STATUS InfoTdiQueryGetRouteTable(PIP_INTERFACE IF, PNDIS_BUFFER Buffer, PUINT BufferSize)
Definition: ninfo.c:17
TDI_STATUS InfoTdiQueryGetConnectionUdpTable(PADDRESS_FILE AddrFile, PNDIS_BUFFER Buffer, PUINT BufferSize, TDI_TCPUDP_CLASS_INFO Class)
Definition: ninfo.c:267
TDI_STATUS InfoTdiQueryGetIPSnmpInfo(TDIEntityID ID, PIP_INTERFACE IF, PNDIS_BUFFER Buffer, PUINT BufferSize)
Definition: ninfo.c:155
TDI_STATUS InfoTdiQueryGetConnectionTcpTable(PADDRESS_FILE AddrFile, PNDIS_BUFFER Buffer, PUINT BufferSize, TDI_TCPUDP_CLASS_INFO Class)
Definition: ninfo.c:182
TDI_STATUS InfoTdiQueryGetArptableMIB(TDIEntityID ID, PIP_INTERFACE Interface, PNDIS_BUFFER Buffer, PUINT BufferSize)
Definition: iinfo.c:105
#define IP_MIB_ARPTABLE_ENTRY_ID
Definition: tcpioctl.h:54
#define IF_MIB_STATS_ID
Definition: tcpioctl.h:52
#define IP_INTFC_INFO_ID
Definition: tcpioctl.h:56
#define IF_ENTITY
Definition: tdiinfo.h:47
#define INFO_TYPE_ADDRESS_OBJECT
Definition: tdiinfo.h:70
#define ENTITY_LIST_ID
Definition: tdiinfo.h:38
#define CO_NL_ENTITY
Definition: tdiinfo.h:44
#define CL_TL_ENTITY
Definition: tdiinfo.h:43
#define INFO_CLASS_PROTOCOL
Definition: tdiinfo.h:65
#define ENTITY_TYPE_ID
Definition: tdiinfo.h:39
#define INFO_CLASS_GENERIC
Definition: tdiinfo.h:64
#define CO_TL_ENTITY
Definition: tdiinfo.h:45
#define AT_ENTITY
Definition: tdiinfo.h:41
#define INFO_TYPE_PROVIDER
Definition: tdiinfo.h:69
#define CL_NL_ENTITY
Definition: tdiinfo.h:42

Referenced by DispTdiQueryInformationEx().

◆ InfoTdiSetArptableMIB()

TDI_STATUS InfoTdiSetArptableMIB ( PIP_INTERFACE  IF,
PVOID  Buffer,
UINT  BufferSize 
)

Definition at line 133 of file iinfo.c.

134{
135 PIPARP_ENTRY ArpEntry = Buffer;
138
139 if (!Buffer || BufferSize < sizeof(IPARP_ENTRY))
141
142 AddrInitIPv4(&Address, ArpEntry->LogAddr);
143
144 if ((NCE = NBLocateNeighbor(&Address, IF)))
145 NBRemoveNeighbor(NCE);
146
147 if (NBAddNeighbor(IF,
148 &Address,
149 ArpEntry->PhysAddr,
150 ArpEntry->AddrSize,
152 0))
153 return TDI_SUCCESS;
154 else
156}
#define AddrInitIPv4(IPAddress, RawAddress)
Definition: address.h:16
PNEIGHBOR_CACHE_ENTRY NBLocateNeighbor(PIP_ADDRESS Address, PIP_INTERFACE Interface)
Definition: neighbor.c:417
PNEIGHBOR_CACHE_ENTRY NBAddNeighbor(PIP_INTERFACE Interface, PIP_ADDRESS Address, PVOID LinkAddress, UINT LinkAddressLength, UCHAR Type, UINT EventTimer)
Definition: neighbor.c:273
#define NUD_PERMANENT
Definition: neighbor.h:42
VOID NBRemoveNeighbor(PNEIGHBOR_CACHE_ENTRY NCE)
Definition: neighbor.c:590
static WCHAR Address[46]
Definition: ping.c:68
ULONG LogAddr
Definition: info.h:39
UCHAR PhysAddr[8]
Definition: info.h:38
ULONG AddrSize
Definition: info.h:37
Definition: ip.h:23
Definition: neighbor.h:28

Referenced by InfoTdiSetInformationEx().

◆ InfoTdiSetInformationEx()

TDI_STATUS InfoTdiSetInformationEx ( PTDI_REQUEST  Request,
TDIObjectID ID,
PVOID  Buffer,
UINT  BufferSize 
)

Definition at line 382 of file info.c.

397{
398 PVOID EntityListContext;
399
400 switch (ID->toi_class)
401 {
403 {
404 switch (ID->toi_type)
405 {
407 {
408 if ((EntityListContext = GetContext(ID->toi_entity)))
409 return SetAddressFileInfo(ID, EntityListContext, Buffer, BufferSize);
410 else
412 }
414 {
415 PADDRESS_FILE AddressFile = GetContext(ID->toi_entity);
416 if (AddressFile == NULL)
418 return SetConnectionInfo(ID, AddressFile->Connection, Buffer, BufferSize);
419 }
421 {
422 switch (ID->toi_id)
423 {
425 if (ID->toi_type != INFO_TYPE_PROVIDER)
427
428 if (ID->toi_entity.tei_entity == AT_ENTITY)
429 if ((EntityListContext = GetContext(ID->toi_entity)))
430 return InfoTdiSetArptableMIB(EntityListContext, Buffer,
431 BufferSize);
432 else
434 else if (ID->toi_entity.tei_entity == CL_NL_ENTITY
435 || ID->toi_entity.tei_entity == CO_NL_ENTITY)
436 if ((EntityListContext = GetContext(ID->toi_entity)))
437 return InfoTdiSetRoute(EntityListContext, Buffer, BufferSize);
438 else
440 else
442
443 default:
444 return TDI_INVALID_REQUEST;
445 }
446 }
447 default:
448 DbgPrint("TCPIP: IOCTL_TCP_SET_INFORMATION_EX - Unrecognized information type for INFO_CLASS_PROTOCOL: %#x.\n", ID->toi_type);
450 }
451 break;
452 }
453 default:
454 DbgPrint("TCPIP: IOCTL_TCP_SET_INFORMATION_EX - Unrecognized information class %#x.\n", ID->toi_class);
455 return TDI_INVALID_REQUEST;
456 }
457}
#define DbgPrint
Definition: hal.h:12
TDI_STATUS InfoTdiSetRoute(PIP_INTERFACE IF, PVOID Buffer, UINT BufferSize)
Definition: ninfo.c:310
TDI_STATUS SetConnectionInfo(TDIObjectID *ID, PCONNECTION_ENDPOINT Connection, PVOID Buffer, UINT BufferSize)
Definition: cinfo.c:11
TDI_STATUS SetAddressFileInfo(TDIObjectID *ID, PADDRESS_FILE AddrFile, PVOID Buffer, UINT BufferSize)
Definition: ainfo.c:11
TDI_STATUS InfoTdiSetArptableMIB(PIP_INTERFACE IF, PVOID Buffer, UINT BufferSize)
Definition: iinfo.c:133
#define INFO_TYPE_CONNECTION
Definition: tdiinfo.h:71

Referenced by DispTdiSetInformationEx().

◆ InfoTdiSetRoute()

TDI_STATUS InfoTdiSetRoute ( PIP_INTERFACE  IF,
PVOID  Buffer,
UINT  BufferSize 
)

Definition at line 310 of file ninfo.c.

311{
312 IP_ADDRESS Address, Netmask, Router;
313 PIPROUTE_ENTRY Route = Buffer;
314
315 if (!Buffer || BufferSize < sizeof(IPROUTE_ENTRY))
317
318 AddrInitIPv4( &Address, Route->Dest );
319 AddrInitIPv4( &Netmask, Route->Mask );
320 AddrInitIPv4( &Router, Route->Gw );
321
322 if (IF == Loopback)
323 {
324 DbgPrint("Failing attempt to add route to loopback adapter\n");
326 }
327
328 if( Route->Type == IP_ROUTE_TYPE_ADD ) { /* Add the route */
329 TI_DbgPrint(DEBUG_INFO,("Adding route (%s)\n", A2S(&Address)));
330 if (!RouterCreateRoute( &Address, &Netmask, &Router,
331 IF, Route->Metric1))
332 return TDI_NO_RESOURCES;
333
334 return TDI_SUCCESS;
335 } else if( Route->Type == IP_ROUTE_TYPE_DEL ) {
336 TI_DbgPrint(DEBUG_INFO,("Removing route (%s)\n", A2S(&Address)));
337 if (NT_SUCCESS(RouterRemoveRoute( &Address, &Router )))
338 return TDI_SUCCESS;
339 else
341 }
342
343 return TDI_INVALID_REQUEST;
344}
PCHAR A2S(PIP_ADDRESS Address)
Definition: address.c:17
#define IP_ROUTE_TYPE_DEL
Definition: ninfo.c:14
#define IP_ROUTE_TYPE_ADD
Definition: ninfo.c:13
PFIB_ENTRY RouterCreateRoute(PIP_ADDRESS NetworkAddress, PIP_ADDRESS Netmask, PIP_ADDRESS RouterAddress, PIP_INTERFACE Interface, UINT Metric)
Definition: router.c:421
NTSTATUS RouterRemoveRoute(PIP_ADDRESS Target, PIP_ADDRESS Router)
Definition: router.c:364

Referenced by InfoTdiSetInformationEx().

◆ InsertTDIInterfaceEntity()

VOID InsertTDIInterfaceEntity ( PIP_INTERFACE  Interface)

Definition at line 158 of file iinfo.c.

158 {
160
163
164 /* FIXME: This is probably wrong */
166}
VOID AddEntity(ULONG EntityType, PVOID Context, ULONG Flags)
Definition: info.c:15
#define CL_NL_IP
Definition: tdiinfo.h:54
#define AT_NULL
Definition: tdiinfo.h:50
#define AT_ARP
Definition: tdiinfo.h:49
#define IF_MIB
Definition: tdiinfo.h:61

Referenced by IPCreateInterface().

◆ RemoveEntityByContext()

VOID RemoveEntityByContext ( PVOID  Context)

Definition at line 46 of file info.c.

47{
48 ULONG i;
50
52
53 for (i = 0; i < EntityCount; i++) {
54 if( EntityList[i].context == Context ) {
55 if( i != EntityCount - 1 ) {
58 sizeof(EntityList[i]) );
59 } else {
61 }
62 }
63 }
64
66}

Referenced by AddrFileFree(), and RemoveTDIInterfaceEntity().

◆ RemoveTDIInterfaceEntity()

VOID RemoveTDIInterfaceEntity ( PIP_INTERFACE  Interface)

Definition at line 168 of file iinfo.c.

168 {
169 /* This removes all of them */
171}
VOID RemoveEntityByContext(PVOID Context)
Definition: info.c:46

Referenced by IPDestroyInterface().

◆ SetAddressFileInfo()

TDI_STATUS SetAddressFileInfo ( TDIObjectID ID,
PADDRESS_FILE  AddrFile,
PVOID  Buffer,
UINT  BufferSize 
)

Definition at line 11 of file ainfo.c.

15{
16 switch (ID->toi_id)
17 {
18 case AO_OPTION_TTL:
19 if (BufferSize < sizeof(UINT))
21
22 LockObject(AddrFile);
23 AddrFile->TTL = *((PUCHAR)Buffer);
24 UnlockObject(AddrFile);
25
26 return TDI_SUCCESS;
27
29 if (BufferSize < sizeof(UINT))
31
32 LockObject(AddrFile);
33 AddrFile->DF = *((PUINT)Buffer);
34 UnlockObject(AddrFile);
35
36 return TDI_SUCCESS;
37
39 if (BufferSize < sizeof(UINT))
41
42 LockObject(AddrFile);
43 AddrFile->BCast = *((PUINT)Buffer);
44 UnlockObject(AddrFile);
45
46 return TDI_SUCCESS;
47
49 if (BufferSize < sizeof(UINT))
51
52 LockObject(AddrFile);
53 AddrFile->HeaderIncl = *((PUINT)Buffer);
54 UnlockObject(AddrFile);
55
56 return TDI_SUCCESS;
57
58 default:
59 DbgPrint("Unimplemented option %x\n", ID->toi_id);
60
62 }
63}
UINT HeaderIncl
Definition: titypes.h:125
UCHAR TTL
Definition: titypes.h:122
UINT BCast
Definition: titypes.h:124
#define AO_OPTION_BROADCAST
Definition: tcpioctl.h:74
#define AO_OPTION_IP_DONTFRAGMENT
Definition: tcpioctl.h:72
#define AO_OPTION_TTL
Definition: tcpioctl.h:64
#define AO_OPTION_IP_HDRINCL
Definition: tcpioctl.h:75
#define UnlockObject(Object)
Definition: titypes.h:44
#define LockObject(Object)
Definition: titypes.h:34
unsigned char * PUCHAR
Definition: typedefs.h:53

Referenced by InfoTdiSetInformationEx().

◆ SetConnectionInfo()

TDI_STATUS SetConnectionInfo ( TDIObjectID ID,
PCONNECTION_ENDPOINT  Connection,
PVOID  Buffer,
UINT  BufferSize 
)

Definition at line 11 of file cinfo.c.

15{
16 ASSERT(ID->toi_type == INFO_TYPE_CONNECTION);
17 switch (ID->toi_id)
18 {
20 {
22 if (BufferSize < sizeof(BOOLEAN))
24 Set = *(BOOLEAN*)Buffer;
25 return TCPSetNoDelay(Connection, Set);
26 }
27 default:
28 DbgPrint("TCPIP: Unknown connection info ID: %u.\n", ID->toi_id);
29 }
30
32}
NTSTATUS TCPSetNoDelay(PCONNECTION_ENDPOINT Connection, BOOLEAN Set)
Definition: tcp.c:734
static BOOL Set
Definition: pageheap.c:10
#define TCP_SOCKET_NODELAY
Definition: tcpioctl.h:104

Referenced by InfoTdiSetInformationEx().