--------------------------------------------------------------------

Virtual Server Patch for Linux - Version 0.9pre1 - April 19, 1999

Differences with virtual server patch version 0.8:

-  Add Virtual Server via Direct Routing
   This approach was first implemented in IBM's NetDispatcher. All real
   servers have their loopback alias interface configured with the virtual
   IP address, the load balancer and the real servers must have one of
   their interfaces physically linked by a HUB/Switch. When the packets
   destined for the virtual IP address arrives, the load balnacer directly
   route them to the real servers, the real servers processing the requests
   and return the reply packets directly to the clients. Compared to the
   virtual server via IP tunneling approach, this approach doesn't have
   tunneling overhead(In fact, this overhead is minimal in most situations),
   but requires that one of the load balancer's interfaces and the real
   servers' interfaces must be in physical segment.
	
-  Add more satistics information
   The active connection counter and the total connection counter of
   each real server were added for all the scheduling algorithms.

-  Add resetting(zeroing) counters
   The total connection counters of all real servers can be reset to zero.

-  Change some statements in the masq_expire function and the 
   ip_fw_demasquerade function

-  Many functions of virtual server patch was splitted into the
   linux/net/ipv4/ip_masq_pfvs.c.

-  Upgrade ippfvsadm 1.0.2 to ippfvsadm 1.0.3
   Zeroing counters is supported in the new version. The ippfvsadm 1.0.3
   can be used for all kernel with different virtual server options
   without rebuilding the program.

--------------------------------------------------------------------

Virtual Server Patch for Linux - Version 0.8 - March 6, 1999

Differences with virtual server patch version 0.7:

-  Add virtual FTP server support
   The original ippfvs via IP tunneling could not be used to
   build a virtual FTP server, because the real servers could
   not establish data connections to clients. The code was
   added to parse the port number in the ftp control data
   and create the corresponding masquerading entry for the
   coming data connection.
   Although the original ippfvs via NAT could be used to build
   a virtual server, the data connection was established in
   this way.
     Real Server port:20  ----> ippfvs: allocate a free masq port
	----->  the client port
   It is not elegent but time-consuming. Now it was changed
   as follows:
     Real Server port:20  ----> ippfvs port: 20 
	----> the client port

-  Change the port checking order in the ip_fw_demasquerade()
   If the size of masquerade hash table is well chosen, checking
   a masquerading entry in the hash table will just require one
   hit. It is much efficient than checking port for  virtual
   services, and there are at least 3 incoming packets for each
   connection, which require port checking. So, it is efficient
   to check the masquerading hash table first and then check
   port for virtual services.

-  Remove a useless statement in the ip_masq_new_pfvs()
   The useless statement in the ip_masq_new_pfvs function is
	ip_masq_free_ports[masq_proto_num(proto)]++;
   which may disturb system.

-  Change the header printing of the ip_pfvs_procinfo()
  	
--------------------------------------------------------------------

Virtual Server Patch for Linux - Version 0.7 - Febuary 10, 1999

Differences with virtual server patch version 0.6:

-  Fix a bug in detect the finish of connection for tunneling
   or NATing to the local node.
   Since the server reply the client directly in tunneling or
   NATing to the local node, the load balancer (LinuxDirector)
   can only detect a FIN segment. It is mistake that the masq
   entry is removed only if both-side FIN segments are detected,
   and then the masq entry expires in 15 minutes. For the
   situation above, the code was changed to set the masq entry
   expire in TCP_FIN_TIMEOUT (2min) when an incoming FIN segment
   is detecting.
-  Add the patch version printing in the ip_pfvs_procinfo()
   It would be easy for users and hackers to know which
   virtual server patch version they are running. Thank
   Peter Kese <peter.kese@ijs.si> for the suggestion.

--------------------------------------------------------------------

Virtual Server Patch for Linux - Version 0.6 - Febuary 2, 1999

Differences with virtual server patch version 0.5:

-  Add the local node feature in virtual server.
   If the local node feature is enabled, the load balancer can 
   not only redirect the packets of the specified port to the 
   other servers (remote nodes) to process it, but also can process 
   the packets locally (local node). Which node is chosen depends on
   the scheduling algorithms.
   This local node feature can be used to build a virtual server of
   a few nodes, for example, 2, 3 or more sites, in which it is a 
   resource waste if the load balancer is only used to redirect
   packets. It is wise to direct some packets to the local node to
   process. This feature can also be used to build distributed
   identical servers, in which one is too busy to handle requests
   locally, then it can seamlessly forward requests to other servers
   to process them.
   This feature can be applied to both virtual server via NAT and
   virtual server via IP tunneling.
   Thank Peter Kese <peter.kese@ijs.si> for idea of "Two node Virtual
   Server" and his single line patch for virtual server via IP
   tunneling.
-  Remove a useless function call ip_send_check in the virtual
   server via IP tunneling code. 

--------------------------------------------------------------------

Virtual Server Patch for Linux - Version 0.5 - November 25, 1998

Differences with virtual server patch version 0.4:

-  Add the feature of virtual server via IP tunneling.
   If the ippfvs is enabled using IP tunneling, the load balancer
   chooses a real server from a cluster based on a scheduling algorithm,
   encapsules the packet and forwards it to the chosen server. All real
   servers are configured with "ifconfig tunl0 <Virtual IP Address> up".
   When the chosen server receives the encapsuled packet, it decapsules
   the packet, processes the request and returns the reply packets 
   directly to the client without passing the load balancer. This can 
   greatly increase the scalability of virtual server.
-  Fix a bug in the ip_portfw_del() for the weighted RR scheduling.
   The bug in version 0.4 is when the weighted round-robin scheduling
   is used, deleting the last rule for a virtual server will report
   "setsockopt failed: Invalid argument" warning, in fact the last
   rule is deleted but the gen_scheduling_seq() works on a null list
   and causes that warning.
-  Add and modify some description for virtual server options in
   the Linux kernel configuration help texts.

--------------------------------------------------------------------

Virtual Server Patch for Linux - Version 0.4 - November 12, 1998

Differences with virtual server patch version 0.3:

-  Fix a memory access error bug.
   The set_serverpointer_null() function is added to scan all the existing
   ip masquerading records for its server pointer which points to the 
   server specified and set it null. It is useful when administrators 
   delete a real server or all real servers, those pointers pointing to 
   the server must be set null.  Otherwise, decreasing the connection 
   counter of the server may cause memory access error when the connection
   terminates or timeout.

--------------------------------------------------------------------

Virtual Server Patch for Linux - Version 0.3 - November 10, 1998

Differences with virtual server patch version 0.2:

-  Change the simple round-robin scheduling to the weighted round-robin
   scheduling. Simple is a special instance of the weighted round-robin
   scheduling when the weights of the servers are the same.
-  The scheduling algorithm, originally called the weighted round-robin
   scheduling in version 0.2, actually is the weighted least-connection
   scheduling. So the concept is clarified here.
-  Add the least-connection scheduling algorithm. Although it is a 
   special instance of the weighted least-connection scheduling algorithm,
   it is used to avoid dividing the weight in looking up servers when
   the weights of the servers are the same, so the overhead of scheduling
   can be minimized in this case.
-  Change the type of the server load variables, curr_load and least_load,
   from integer to float in the weighted least-connection scheduling.
   It can make a better load-balancing when the weights specified are high.
-  Merge the original two patches into one. Users have to specify which
   scheduling algorithm is used, the weighted round-robin scheduling,
   the least-connection scheduling, or the weighted least-connection
   scheduling, before rebuild the kernel.
-  Change the ip_pfvs_proc function to make the output of the port 
   forwarding & virtual server table more beautiful.

--------------------------------------------------------------------

Virtual Server Patch for Linux - Version 0.2 - May 28, 1998

Differences with virtual server patch version 0.1:

-  Add the weighted round-robin scheduling patch.

--------------------------------------------------------------------

Virtual Server Patch for Linux - Version 0.1 - May 26, 1998

-  Implement the infrastructure of virtual server.
-  Implement the simple round-robin scheduling algorithm.

--------------------------------------------------------------------
	
