]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
network-distance-server-prefs-20051113
authorJeffrey Altman <jaltman@secure-endpoints.com>
Mon, 14 Nov 2005 06:00:34 +0000 (06:00 +0000)
committerJeffrey Altman <jaltman@secure-endpoints.com>
Mon, 14 Nov 2005 06:00:34 +0000 (06:00 +0000)
Use network distance based server preferences for all server types
not just file servers.

src/WINNT/afsd/cm_server.c
src/afs/afs_server.c

index 8337e66737877c9cc455cef9ebf6af20f7ee89d7..b945c83a39ccc517a1dafc853e1bf1f29b921e7f 100644 (file)
@@ -159,62 +159,56 @@ void cm_SetServerPrefs(cm_server_t * serverp)
     unsigned long      netMask;
     int                i;
 
-    /* implement server prefs for fileservers only */
-    if ( serverp->type == CM_SERVER_FILE )
+    int cm_noIPAddr;         /* number of client network interfaces */
+    int cm_IPAddr[CM_MAXINTERFACE_ADDR];    /* client's IP address in host order */
+    int cm_SubnetMask[CM_MAXINTERFACE_ADDR];/* client's subnet mask in host order*/
+    int cm_NetMtu[CM_MAXINTERFACE_ADDR];    /* client's MTU sizes */
+    int cm_NetFlags[CM_MAXINTERFACE_ADDR];  /* network flags */
+    long code;
+
+    /* get network related info */
+    cm_noIPAddr = CM_MAXINTERFACE_ADDR;
+    code = syscfg_GetIFInfo(&cm_noIPAddr,
+                           cm_IPAddr, cm_SubnetMask,
+                           cm_NetMtu, cm_NetFlags);
+
+    serverAddr = ntohl(serverp->addr.sin_addr.s_addr);
+    serverp->ipRank  = CM_IPRANK_LOW;  /* default setings */
+
+    for ( i=0; i < cm_noIPAddr; i++)
     {
-        int cm_noIPAddr;         /* number of client network interfaces */
-        int cm_IPAddr[CM_MAXINTERFACE_ADDR];    /* client's IP address in host order */
-        int cm_SubnetMask[CM_MAXINTERFACE_ADDR];/* client's subnet mask in host order*/
-        int cm_NetMtu[CM_MAXINTERFACE_ADDR];    /* client's MTU sizes */
-        int cm_NetFlags[CM_MAXINTERFACE_ADDR];  /* network flags */
-        long code;
-
-        /* get network related info */
-        cm_noIPAddr = CM_MAXINTERFACE_ADDR;
-        code = syscfg_GetIFInfo(&cm_noIPAddr,
-                                 cm_IPAddr, cm_SubnetMask,
-                                 cm_NetMtu, cm_NetFlags);
-
-        serverAddr = ntohl(serverp->addr.sin_addr.s_addr);
-        serverp->ipRank  = CM_IPRANK_LOW;      /* default setings */
-
-        for ( i=0; i < cm_noIPAddr; i++)
-        {
-            /* loop through all the client's IP address and compare
-            ** each of them against the server's IP address */
-
-            myAddr = cm_IPAddr[i];
-            if ( IN_CLASSA(myAddr) )
-                netMask = IN_CLASSA_NET;
-            else if ( IN_CLASSB(myAddr) )
-                netMask = IN_CLASSB_NET;
-            else if ( IN_CLASSC(myAddr) )
-                netMask = IN_CLASSC_NET;
-            else
-                netMask = 0;
-
-            myNet    =  myAddr & netMask;
-            mySubnet =  myAddr & cm_SubnetMask[i];
-
-            if ( (serverAddr & netMask) == myNet ) 
-            {
-                if ( (serverAddr & cm_SubnetMask[i]) == mySubnet)
-                {
-                    if ( serverAddr == myAddr ) 
-                        serverp->ipRank = min(serverp->ipRank,
-                                               CM_IPRANK_TOP);/* same machine */
-                    else serverp->ipRank = min(serverp->ipRank,
-                                                CM_IPRANK_HI); /* same subnet */
-                }
-                else serverp->ipRank = min(serverp->ipRank,CM_IPRANK_MED);
-                /* same net */
-            }  
-            /* random between 0..15*/
-            serverp->ipRank += min(serverp->ipRank, rand() % 0x000f);
-        } /* and of for loop */
-    }
-    else 
-        serverp->ipRank = 10000 + (rand() % 0x00ff); /* VL server */
+       /* loop through all the client's IP address and compare
+       ** each of them against the server's IP address */
+
+       myAddr = cm_IPAddr[i];
+       if ( IN_CLASSA(myAddr) )
+           netMask = IN_CLASSA_NET;
+       else if ( IN_CLASSB(myAddr) )
+           netMask = IN_CLASSB_NET;
+       else if ( IN_CLASSC(myAddr) )
+           netMask = IN_CLASSC_NET;
+       else
+           netMask = 0;
+
+       myNet    =  myAddr & netMask;
+       mySubnet =  myAddr & cm_SubnetMask[i];
+
+       if ( (serverAddr & netMask) == myNet ) 
+       {
+           if ( (serverAddr & cm_SubnetMask[i]) == mySubnet)
+           {
+               if ( serverAddr == myAddr ) 
+                   serverp->ipRank = min(serverp->ipRank,
+                                          CM_IPRANK_TOP);/* same machine */
+               else serverp->ipRank = min(serverp->ipRank,
+                                           CM_IPRANK_HI); /* same subnet */
+           }
+           else serverp->ipRank = min(serverp->ipRank,CM_IPRANK_MED);
+           /* same net */
+       }       
+       /* random between 0..15*/
+       serverp->ipRank += min(serverp->ipRank, rand() % 0x000f);
+    } /* and of for loop */
 }
 
 cm_server_t *cm_NewServer(struct sockaddr_in *socketp, int type, cm_cell_t *cellp) {
index 6ba3e3efb4145aafe7c01b38bfe7acc5a78574e3..de863b44a61975f997f01cc67158fa1b8f64257b 100644 (file)
@@ -1654,11 +1654,7 @@ struct server *afs_GetServer(afs_uint32 * aserverp, afs_int32 nservers,
 
        /* Compute preference values and resort */
        if (!newsa->sa_iprank) {
-           if (aport == fsport) {
-               afs_SetServerPrefs(newsa);      /* new fileserver rank */
-           } else {
-               newsa->sa_iprank = 10000 + afs_randomMod127();  /* new vlserver rank */
-           }
+           afs_SetServerPrefs(newsa);  /* new server rank */
        }
     }
     afs_SortOneServer(newts);  /* Sort by rank */