windows-loopback-adapter-support-20021126
[openafs.git] / src / WINNT / afsd / smb.c
index e32a57d..b2a95af 100644 (file)
@@ -6087,11 +6087,34 @@ void smb_NetbiosInit()
            sprintf(s, "Netbios NCBRESET lana %d error code %d", lana_list.lana[i], code);
            afsi_log(s);
            lana_list.lana[i] = 255;  /* invalid lana */
-        }
-        else {
+        } else {
             sprintf(s, "Netbios NCBRESET lana %d succeeded", lana_list.lana[i]);
             afsi_log(s);
-        }
+           /* check to see if this is the "Microsoft Loopback Adapter"        */
+           memset( ncbp, 0, sizeof (*ncbp) );
+           ncbp->ncb_command = NCBASTAT;
+           ncbp->ncb_lana_num = lana_list.lana[i];
+           strcpy( ncbp->ncb_callname,  "*               " );
+           ncbp->ncb_buffer = (char *) &Adapter;
+           ncbp->ncb_length = sizeof(Adapter);
+           code = Netbios( ncbp );
+           
+           if ( code == 0 ) {
+               wla_found = TRUE;
+               for (j=0; wla_found && (j<6); j++)
+                   wla_found = ( Adapter.status.adapter_address[j] == kWLA_MAC[j] );
+               
+               if ( wla_found ) {
+                   sprintf(s, "Windows Loopback Adapter detected lana %d", lana_list.lana[i]);
+                   afsi_log(s);
+                   
+                   /* select this lana; no need to continue */
+                   lana_list.length = 1;
+                   lana_list.lana[0] = lana_list.lana[i];
+                   break;
+               }
+           }
+       }
     }
 #else
     /* for DJGPP, there is no NCBENUM and NCBRESET is a real reset.  so