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(DEBUG_INFO
,
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
= Interface
->Index
;
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(DEBUG_INFO
,
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(DEBUG_INFO
,
57 ("IF Speed = %d * 100bps\n", OutData
->Speed
));
58 memcpy(OutData
->PhysAddr
,Interface
->Address
,Interface
->AddressLength
);
59 TI_DbgPrint(DEBUG_INFO
, ("Got HWAddr\n"));
62 GetInterfaceName( Interface
, IFDescr
, MAX_IFDESCR_LEN
- 1 );
63 DescrLenMax
= strlen( IFDescr
) + 1;
65 TI_DbgPrint(DEBUG_INFO
, ("Copied in name %s\n", IFDescr
));
66 OutData
->DescrLen
= DescrLenMax
;
67 IFDescr
+= DescrLenMax
;
68 Size
= IFDescr
- (PCHAR
)OutData
+ 1;
70 TI_DbgPrint(DEBUG_INFO
, ("Finished IFEntry MIB (%04x:%d) size %d\n",
71 ID
->tei_entity
, ID
->tei_instance
, Size
));
73 Status
= InfoCopyOut( (PCHAR
)OutData
, Size
, Buffer
, BufferSize
);
74 ExFreePool( OutData
);
76 TI_DbgPrint(DEBUG_INFO
,("Returning %x\n", Status
));
81 TDI_STATUS
InfoInterfaceTdiQueryEx( UINT InfoClass
,
88 if( InfoClass
== INFO_CLASS_GENERIC
&&
89 InfoType
== INFO_TYPE_PROVIDER
&&
90 InfoId
== ENTITY_TYPE_ID
) {
92 return InfoCopyOut( (PCHAR
)&Temp
, sizeof(Temp
), Buffer
, BufferSize
);
93 } else if( InfoClass
== INFO_CLASS_PROTOCOL
&&
94 InfoType
== INFO_TYPE_PROVIDER
&&
95 InfoId
== IF_MIB_STATS_ID
) {
96 return InfoTdiQueryGetInterfaceMIB( id
, Context
, Buffer
, BufferSize
);
98 return TDI_INVALID_REQUEST
;
101 TDI_STATUS
InfoInterfaceTdiSetEx( UINT InfoClass
,
108 TI_DbgPrint(DEBUG_INFO
, ("Got Request: Class %x Type %x Id %x, EntityID %x:%x\n",
109 InfoClass
, InfoId
, id
->tei_entity
, id
->tei_instance
));
110 return TDI_INVALID_REQUEST
;