[TCPIP]
[reactos.git] / reactos / lib / drivers / ip / network / interface.c
index 5bc5fb3..108e961 100644 (file)
@@ -166,10 +166,12 @@ PIP_INTERFACE GetDefaultInterface(VOID)
    ForEachInterface(CurrentIF) {
       if (CurrentIF->Context && AddrIsUnspecified(&CurrentIF->Unicast)) {
           TcpipReleaseSpinLock(&InterfaceListLock, OldIrql);
-          if (NT_SUCCESS(GetInterfaceConnectionStatus(CurrentIF, &IfStatus)) &&
-                (IfStatus == MIB_IF_OPER_STATUS_OPERATIONAL)) {
+
+          GetInterfaceConnectionStatus(CurrentIF, &IfStatus);
+          if (IfStatus == MIB_IF_OPER_STATUS_OPERATIONAL) {
               return CurrentIF;
           }
+
           TcpipAcquireSpinLock(&InterfaceListLock, &OldIrql);
       }
    } EndFor(CurrentIF);   
@@ -178,11 +180,13 @@ PIP_INTERFACE GetDefaultInterface(VOID)
    ForEachInterface(CurrentIF) {
       if (CurrentIF->Context && (Index++ == NextDefaultAdapter)) {
           TcpipReleaseSpinLock(&InterfaceListLock, OldIrql);
-          if (NT_SUCCESS(GetInterfaceConnectionStatus(CurrentIF, &IfStatus)) &&
-                (IfStatus == MIB_IF_OPER_STATUS_OPERATIONAL)) {
+
+          GetInterfaceConnectionStatus(CurrentIF, &IfStatus);
+          if (IfStatus == MIB_IF_OPER_STATUS_OPERATIONAL) {
               NextDefaultAdapter++;
               return CurrentIF;
           }
+
           TcpipAcquireSpinLock(&InterfaceListLock, &OldIrql);
       }
    } EndFor(CurrentIF);
@@ -193,11 +197,13 @@ PIP_INTERFACE GetDefaultInterface(VOID)
       if (CurrentIF->Context) {
           Index++;
           TcpipReleaseSpinLock(&InterfaceListLock, OldIrql);
-          if (NT_SUCCESS(GetInterfaceConnectionStatus(CurrentIF, &IfStatus)) &&
-                (IfStatus == MIB_IF_OPER_STATUS_OPERATIONAL)) {
+
+          GetInterfaceConnectionStatus(CurrentIF, &IfStatus);
+          if (IfStatus == MIB_IF_OPER_STATUS_OPERATIONAL) {
               NextDefaultAdapter = Index;
               return CurrentIF;
           }
+
           TcpipAcquireSpinLock(&InterfaceListLock, &OldIrql);
       }
    } EndFor(CurrentIF);
@@ -245,26 +251,15 @@ PIP_INTERFACE FindOnLinkInterface(PIP_ADDRESS Address)
     return NULL;
 }
 
-NTSTATUS GetInterfaceConnectionStatus(PIP_INTERFACE Interface, PULONG Result)
+VOID GetInterfaceConnectionStatus(PIP_INTERFACE Interface, PULONG Result)
 {
-    NTSTATUS Status;
-
-    /* Query OID_GEN_MEDIA_CONNECT_STATUS for connection status information */
-    Status = TcpipLanGetDwordOid(Interface, OID_GEN_MEDIA_CONNECT_STATUS, Result);
-    if (!NT_SUCCESS(Status))
-        return Status;
+    PLAN_ADAPTER Adapter = Interface->Context;
 
-    /* Translate the result into MIB_IF_OPER_STATUS_XXX */
-    if (*Result == NdisMediaStateConnected)
-    {
-        /* Up and running */
+    /* Loopback has no adapter context */
+    if (Adapter == NULL || Adapter->State == LAN_STATE_STARTED) {
         *Result = MIB_IF_OPER_STATUS_OPERATIONAL;
     }
-    else
-    {
-        /* Down */
+    else {
         *Result = MIB_IF_OPER_STATUS_DISCONNECTED;
     }
-
-    return STATUS_SUCCESS;
 }