Added simple dword OID query to lan.
Correct oper status, admin status and type settings in iinfo.
Small fixes in lan.c for adapter name.
Modified: trunk/reactos/drivers/lib/ip/network/interface.c
Modified: trunk/reactos/drivers/net/tcpip/datalink/lan.c
Modified: trunk/reactos/drivers/net/tcpip/include/interface.h
Modified: trunk/reactos/drivers/net/tcpip/include/lan.h
Modified: trunk/reactos/drivers/net/tcpip/include/precomp.h
Modified: trunk/reactos/drivers/net/tcpip/tcpip/iinfo.c
_____
Modified: trunk/reactos/drivers/lib/ip/network/interface.c
--- trunk/reactos/drivers/lib/ip/network/interface.c 2005-03-18
02:56:29 UTC (rev 14172)
+++ trunk/reactos/drivers/lib/ip/network/interface.c 2005-03-18
03:26:12 UTC (rev 14173)
@@ -209,3 +209,28 @@
return NULL;
}
+
+NTSTATUS GetInterfaceConnectionStatus
+( PIP_INTERFACE Interface, PDWORD Result ) {
+ NTSTATUS Status = TcpipLanGetDwordOid
+ ( Interface, OID_GEN_HARDWARE_STATUS, Result );
+ if( NT_SUCCESS(Status) ) switch( *Result ) {
+ case NdisHardwareStatusReady:
+ *Result = MIB_IF_OPER_STATUS_OPERATIONAL;
+ break;
+ case NdisHardwareStatusInitializing:
+ *Result = MIB_IF_OPER_STATUS_CONNECTING;
+ break;
+ case NdisHardwareStatusReset:
+ *Result = MIB_IF_OPER_STATUS_DISCONNECTED;
+ break;
+ case NdisHardwareStatusNotReady:
+ *Result = MIB_IF_OPER_STATUS_DISCONNECTED;
+ break;
+ case NdisHardwareStatusClosing:
+ default:
+ *Result = MIB_IF_OPER_STATUS_NON_OPERATIONAL;
+ break;
+ }
+ return Status;
+}
_____
Modified: trunk/reactos/drivers/net/tcpip/datalink/lan.c
--- trunk/reactos/drivers/net/tcpip/datalink/lan.c 2005-03-18
02:56:29 UTC (rev 14172)
+++ trunk/reactos/drivers/net/tcpip/datalink/lan.c 2005-03-18
03:26:12 UTC (rev 14173)
@@ -165,6 +165,28 @@
}
+NTSTATUS TcpipLanGetDwordOid
+( PIP_INTERFACE Interface,
+ NDIS_OID Oid,
+ PDWORD Result ) {
+ /* Get maximum frame size */
+ if( Interface->Context ) {
+ return NDISCall((PLAN_ADAPTER)Interface->Context,
+ NdisRequestQueryInformation,
+ Oid,
+ Result,
+ sizeof(DWORD));
+ } else switch( Oid ) { /* Loopback Case */
+ case OID_GEN_HARDWARE_STATUS:
+ *Result = NdisHardwareStatusReady;
+ return STATUS_SUCCESS;
+
+ default:
+ return STATUS_INVALID_PARAMETER;
+ }
+}
+
+
VOID STDCALL ProtocolOpenAdapterComplete(
NDIS_HANDLE BindingContext,
NDIS_STATUS Status,
@@ -916,11 +938,10 @@
TI_DbgPrint(MID_TRACE,("BCAST(IF) %s\n", A2S(&IF->Broadcast)));
if(NT_SUCCESS(Status)) {
+ RtlZeroMemory( &IF->Name, sizeof(IF->Name) );
Status = ReadStringFromRegistry( RegHandle, L"DeviceDesc",
&IF->Name );
- RtlZeroMemory( &IF->Name, sizeof( IF->Name ) );
-
/* I think that not getting a devicedesc is not a fatal error */
if( !NT_SUCCESS(Status) ) {
if( IF->Name.Buffer ) exFreePool( IF->Name.Buffer );
@@ -929,6 +950,8 @@
Status = STATUS_SUCCESS;
}
+ TI_DbgPrint(MID_TRACE,("Adapter Name: %wZ\n", &IF->Name));
+
if(!NT_SUCCESS(Status))
{
TI_DbgPrint(MIN_TRACE, ("Unable to open protocol-specific
registry key: 0x%x\n", Status));
_____
Modified: trunk/reactos/drivers/net/tcpip/include/interface.h
--- trunk/reactos/drivers/net/tcpip/include/interface.h 2005-03-18
02:56:29 UTC (rev 14172)
+++ trunk/reactos/drivers/net/tcpip/include/interface.h 2005-03-18
03:26:12 UTC (rev 14173)
@@ -13,6 +13,8 @@
NTSTATUS GetInterfaceSpeed( PIP_INTERFACE Interface, PUINT Speed );
NTSTATUS GetInterfaceName( PIP_INTERFACE Interface, PCHAR NameBuffer,
UINT NameMaxLen );
+NTSTATUS GetInterfaceConnectionStatus( PIP_INTERFACE Interface,
+ PDWORD OperStatus );
PIP_INTERFACE FindOnLinkInterface(PIP_ADDRESS Address);
#endif//_TCPIP_INTERFACE_H
_____
Modified: trunk/reactos/drivers/net/tcpip/include/lan.h
--- trunk/reactos/drivers/net/tcpip/include/lan.h 2005-03-18
02:56:29 UTC (rev 14172)
+++ trunk/reactos/drivers/net/tcpip/include/lan.h 2005-03-18
03:26:12 UTC (rev 14173)
@@ -98,6 +98,9 @@
VOID LANStartup();
VOID LANShutdown();
+NTSTATUS TcpipLanGetDwordOid( PIP_INTERFACE Interface, NDIS_OID Oid,
+ PDWORD Result );
+
NDIS_STATUS NDISCall(
PLAN_ADAPTER Adapter,
NDIS_REQUEST_TYPE Type,
_____
Modified: trunk/reactos/drivers/net/tcpip/include/precomp.h
--- trunk/reactos/drivers/net/tcpip/include/precomp.h 2005-03-18
02:56:29 UTC (rev 14172)
+++ trunk/reactos/drivers/net/tcpip/include/precomp.h 2005-03-18
03:26:12 UTC (rev 14173)
@@ -35,5 +35,6 @@
#include <oskittcp.h>
#include <interface.h>
#include <ports.h>
+#include <ipifcons.h>
#define NTOS_MODE_USER
#include <ntos.h>
_____
Modified: trunk/reactos/drivers/net/tcpip/tcpip/iinfo.c
--- trunk/reactos/drivers/net/tcpip/tcpip/iinfo.c 2005-03-18
02:56:29 UTC (rev 14172)
+++ trunk/reactos/drivers/net/tcpip/tcpip/iinfo.c 2005-03-18
03:26:12 UTC (rev 14173)
@@ -35,14 +35,20 @@
OutData->Index = ID->tei_instance + 1;
/* viz: tcpip keeps those indices */
- OutData->Type = Interface == Loopback ? IFENT_SOFTWARE_LOOPBACK :
0;
+ OutData->Type = Interface ==
+ Loopback ? MIB_IF_TYPE_LOOPBACK : MIB_IF_TYPE_ETHERNET;
OutData->Mtu = Interface->MTU;
TI_DbgPrint(MAX_TRACE,
("Getting interface speed\n"));
OutData->PhysAddrLen = Interface->AddressLength;
- OutData->AdminStatus = 1; /* XXX Up -- How do I know? */
- OutData->OperStatus = 1; /* XXX Up -- How do I know? */
+ OutData->AdminStatus = MIB_IF_ADMIN_STATUS_UP;
+ /* NDIS_HARDWARE_STATUS -> ROUTER_CONNECTION_STATE */
+ Status = GetInterfaceConnectionStatus( Interface,
&OutData->OperStatus );
+ /* Not sure what to do here, but not ready seems a safe bet on
failure */
+ if( !NT_SUCCESS(Status) )
+ OutData->OperStatus = NdisHardwareStatusNotReady;
+
IFDescr = (PCHAR)&OutData[1];
if( IF ) {