If you want to compile it in kernel, say Y. To compile it as a
          module, choose M here. If unsure, say N.
 
+comment 'IPVS SH scheduler'
+
+config IP_VS_SH_TAB_BITS
+       int "IPVS source hashing table size (the Nth power of 2)"
+       range 4 20
+       default 8
+       ---help---
+         The source hashing scheduler maps source IPs to destinations
+         stored in a hash table. This table is tiled by each destination
+         until all slots in the table are filled. When using weights to
+         allow destinations to receive more connections, the table is
+         tiled an amount proportional to the weights specified. The table
+         needs to be large enough to effectively fit all the destinations
+         multiplied by their respective weights.
+
 comment 'IPVS application helper'
 
 config IP_VS_FTP
 
  * server is dead or overloaded, the load balancer can bypass the cache
  * server and send requests to the original server directly.
  *
+ * The weight destination attribute can be used to control the
+ * distribution of connections to the destinations in servernode. The
+ * greater the weight, the more connections the destination
+ * will receive.
+ *
  */
 
 #define KMSG_COMPONENT "IPVS"
        struct ip_vs_sh_bucket *b;
        struct list_head *p;
        struct ip_vs_dest *dest;
+       int d_count;
 
        b = tbl;
        p = &svc->destinations;
+       d_count = 0;
        for (i=0; i<IP_VS_SH_TAB_SIZE; i++) {
                if (list_empty(p)) {
                        b->dest = NULL;
                        atomic_inc(&dest->refcnt);
                        b->dest = dest;
 
-                       p = p->next;
+                       IP_VS_DBG_BUF(6, "assigned i: %d dest: %s weight: %d\n",
+                                     i, IP_VS_DBG_ADDR(svc->af, &dest->addr),
+                                     atomic_read(&dest->weight));
+
+                       /* Don't move to next dest until filling weight */
+                       if (++d_count >= atomic_read(&dest->weight)) {
+                               p = p->next;
+                               d_count = 0;
+                       }
+
                }
                b++;
        }