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
14 TDI_STATUS
InfoTdiQueryGetInterfaceMIB(TDIEntityID
*ID
,
15 PIP_INTERFACE Interface
,
18 TDI_STATUS Status
= TDI_INVALID_REQUEST
;
20 PLAN_ADAPTER IF
= (PLAN_ADAPTER
)Interface
->Context
;
24 UINT DescrLenMax
= MAX_IFDESCR_LEN
- 1;
26 TI_DbgPrint(MAX_TRACE
,
27 ("Getting IFEntry MIB (IF %08x LA %08x) (%04x:%d)\n",
28 Interface
, IF
, ID
->tei_entity
, ID
->tei_instance
));
31 (PIFENTRY
)ExAllocatePool( NonPagedPool
,
32 sizeof(IFENTRY
) + MAX_IFDESCR_LEN
);
34 if( !OutData
) return TDI_INVALID_REQUEST
; /* Out of memory */
36 RtlZeroMemory( OutData
, sizeof(IFENTRY
) + MAX_IFDESCR_LEN
);
38 OutData
->Index
= ID
->tei_instance
+ 1;
39 /* viz: tcpip keeps those indices */
40 OutData
->Type
= IF
? 1 : 0; /* XXX other -- for now ... */
41 OutData
->Mtu
= Interface
->MTU
;
42 TI_DbgPrint(MAX_TRACE
,
43 ("Getting interface speed\n"));
44 OutData
->PhysAddrLen
= Interface
->AddressLength
;
45 OutData
->AdminStatus
= 1; /* XXX Up -- How do I know? */
46 OutData
->OperStatus
= 1; /* XXX Up -- How do I know? */
48 IFDescr
= (PCHAR
)&OutData
[1];
51 GetInterfaceSpeed( Interface
, &OutData
->Speed
);
52 TI_DbgPrint(MAX_TRACE
,
53 ("IF Speed = %d * 100bps\n", OutData
->Speed
));
54 memcpy(OutData
->PhysAddr
,Interface
->Address
,Interface
->AddressLength
);
55 TI_DbgPrint(MAX_TRACE
, ("Got HWAddr\n"));
56 GetInterfaceName( Interface
, IFDescr
, MAX_IFDESCR_LEN
- 1 );
57 DescrLenMax
= strlen( IFDescr
) + 1;
60 IFDescr
[DescrLenMax
] = 0; /* Terminate ifdescr string */
62 TI_DbgPrint(MAX_TRACE
, ("Copied in name %s\n", IFDescr
));
63 OutData
->DescrLen
= DescrLenMax
;
64 IFDescr
+= DescrLenMax
;
65 Size
= IFDescr
- (PCHAR
)OutData
+ 1;
67 TI_DbgPrint(MAX_TRACE
, ("Finished IFEntry MIB (%04x:%d) size %d\n",
68 ID
->tei_entity
, ID
->tei_instance
, Size
));
70 Status
= InfoCopyOut( OutData
, Size
, Buffer
, BufferSize
);
71 ExFreePool( OutData
);
76 TDI_STATUS
InfoInterfaceTdiQueryEx( UINT InfoClass
,
83 if( InfoClass
== INFO_CLASS_GENERIC
&&
84 InfoType
== INFO_TYPE_PROVIDER
&&
85 InfoId
== ENTITY_TYPE_ID
) {
87 return InfoCopyOut( &Temp
, sizeof(Temp
), Buffer
, BufferSize
);
88 } else if( InfoClass
== INFO_CLASS_PROTOCOL
&&
89 InfoType
== INFO_TYPE_PROVIDER
&&
90 InfoId
== IF_MIB_STATS_ID
) {
91 return InfoTdiQueryGetInterfaceMIB( id
, Context
, Buffer
, BufferSize
);
93 return TDI_INVALID_REQUEST
;
96 TDI_STATUS
InfoInterfaceTdiSetEx( UINT InfoClass
,
103 return TDI_INVALID_REQUEST
;