2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS TCP/IP protocol driver
5 * PURPOSE: Per-interface information.
6 * PROGRAMMERS: Art Yerkes
8 * CSH 01/08-2000 Created
13 TDI_STATUS
InfoTdiQueryGetInterfaceMIB(TDIEntityID
*ID
,
14 PIP_INTERFACE Interface
,
17 TDI_STATUS Status
= TDI_INVALID_REQUEST
;
19 PLAN_ADAPTER IF
= (PLAN_ADAPTER
)Interface
->Context
;
22 UINT DescrLenMax
= MAX_IFDESCR_LEN
- 1;
24 TI_DbgPrint(MAX_TRACE
,
25 ("Getting IFEntry MIB (IF %08x LA %08x) (%04x:%d)\n",
26 Interface
, IF
, ID
->tei_entity
, ID
->tei_instance
));
29 (PIFENTRY
)ExAllocatePool( NonPagedPool
,
30 sizeof(IFENTRY
) + MAX_IFDESCR_LEN
);
32 if( !OutData
) return TDI_INVALID_REQUEST
; /* Out of memory */
34 RtlZeroMemory( OutData
, sizeof(IFENTRY
) + MAX_IFDESCR_LEN
);
36 OutData
->Index
= ID
->tei_instance
+ 1;
37 /* viz: tcpip keeps those indices */
38 OutData
->Type
= Interface
==
39 Loopback
? MIB_IF_TYPE_LOOPBACK
: MIB_IF_TYPE_ETHERNET
;
40 OutData
->Mtu
= Interface
->MTU
;
41 TI_DbgPrint(MAX_TRACE
,
42 ("Getting interface speed\n"));
43 OutData
->PhysAddrLen
= Interface
->AddressLength
;
44 OutData
->AdminStatus
= MIB_IF_ADMIN_STATUS_UP
;
45 /* NDIS_HARDWARE_STATUS -> ROUTER_CONNECTION_STATE */
46 Status
= GetInterfaceConnectionStatus( Interface
, &OutData
->OperStatus
);
48 /* Not sure what to do here, but not ready seems a safe bet on failure */
49 if( !NT_SUCCESS(Status
) )
50 OutData
->OperStatus
= NdisHardwareStatusNotReady
;
52 IFDescr
= (PCHAR
)&OutData
[1];
55 GetInterfaceSpeed( Interface
, (PUINT
)&OutData
->Speed
);
56 TI_DbgPrint(MAX_TRACE
,
57 ("IF Speed = %d * 100bps\n", OutData
->Speed
));
58 memcpy(OutData
->PhysAddr
,Interface
->Address
,Interface
->AddressLength
);
59 TI_DbgPrint(MAX_TRACE
, ("Got HWAddr\n"));
60 GetInterfaceName( Interface
, IFDescr
, MAX_IFDESCR_LEN
- 1 );
61 DescrLenMax
= strlen( IFDescr
) + 1;
64 IFDescr
[DescrLenMax
] = 0; /* Terminate ifdescr string */
66 TI_DbgPrint(MAX_TRACE
, ("Copied in name %s\n", IFDescr
));
67 OutData
->DescrLen
= DescrLenMax
;
68 IFDescr
+= DescrLenMax
;
69 Size
= IFDescr
- (PCHAR
)OutData
+ 1;
71 TI_DbgPrint(MAX_TRACE
, ("Finished IFEntry MIB (%04x:%d) size %d\n",
72 ID
->tei_entity
, ID
->tei_instance
, Size
));
74 Status
= InfoCopyOut( (PCHAR
)OutData
, Size
, Buffer
, BufferSize
);
75 ExFreePool( OutData
);
80 TDI_STATUS
InfoInterfaceTdiQueryEx( UINT InfoClass
,
87 if( InfoClass
== INFO_CLASS_GENERIC
&&
88 InfoType
== INFO_TYPE_PROVIDER
&&
89 InfoId
== ENTITY_TYPE_ID
) {
91 return InfoCopyOut( (PCHAR
)&Temp
, sizeof(Temp
), Buffer
, BufferSize
);
92 } else if( InfoClass
== INFO_CLASS_PROTOCOL
&&
93 InfoType
== INFO_TYPE_PROVIDER
&&
94 InfoId
== IF_MIB_STATS_ID
) {
95 return InfoTdiQueryGetInterfaceMIB( id
, Context
, Buffer
, BufferSize
);
97 return TDI_INVALID_REQUEST
;
100 TDI_STATUS
InfoInterfaceTdiSetEx( UINT InfoClass
,
107 return TDI_INVALID_REQUEST
;