Kernel TCP Virtual Server - Version 0.0.10 - Febuary 14, 2003 2003-02-14 Wensong Zhang * tcp_vs_phttp.c: merged Hai Long's persistent HTTP scheduling extension into a separate scheduling module called "phttp". Thanks must go to Hai Long for making this externsion. (http_read_line): added the detection if the connection is closed, which can avoid infinite loop. (tcp_vs_phttp_schedule): changed to terminute the sheduling loop if the service is down or the system is unloaded. (tcp_vs_phttp_schedule): fixed the NULL pointer dereferencing in releasing the server list. * userspace/tcpvsadm.c (usage_exit): fixed some typos there. 2003-01-07 Wensong Zhang * userspace/tcpvsadm.c (usage_exit): fixed the help information. * tcp_vs.c (tcp_vs_relay_socket, skb_send_datagram_socket): added sanity checking of the result of tcp_vs_sendbuffer. 2002-06-17 Wensong Zhang * tcp_vs.c (tcp_vs_daemon): added the missing vfree(child_table) when the daemon ends. Kernel TCP Virtual Server - Version 0.0.9 - May 26, 2002 2002-05-26 Wensong Zhang * tcp_vs.c (tcp_vs_relay_socket): two changes in the zero-copy sending and non zero-copying respectively. - In the zero-copying sending, added the code of destructing the skb from the source sock and set its owner to the dest sock. It seems that the sock parameters have been tuned correctly. - Added the code of continue sending the left data, if the skb_send_datagram_socket cannot send all the data as expected. * tcp_vs.h, tcp_vs_http.c (tcp_vs_http_schedule), tcp_vs_wlc.c (tcp_vs_wlc_schedule) and tcp_vs.c (tcp_vs_conn_handle): changed return type of the schedule method in the struct tcp_vs_scheduler from socket pointer to int, so that the return code can return more error codes. * tcp_vs.c (tcp_vs_child): changed to use NONBLOCK accept call. Kernel TCP Virtual Server - Version 0.0.8 - May 11, 2002 2002-05-11 Wensong Zhang * tcp_vs.c (tcp_vs_relay_socket): rewrote most code of this function. Added the experimental code of attaching the skb from the source socket to the destination socket. Some tcp parameters still need tuning. This function is controlled by /proc/sys/net/ktcpvs/zerocopy_send, it is disabled by default. Added more code to handle nonlinear skb in sending socket data. Thank Julian for many discussions on this issue. 2002-05-05 Wensong Zhang * tcp_vs_http.c (parse_http_header): was changed to parse more METHODS, such as GET/HEAD/PUT/POST. * redirect.c : was added with a function of redirecting request to local socket, most code was taken from TUX. * tcp_vs.c (tcp_vs_conn_handle): was changed to redirect the request to the specified local socket when no destination server is found. * userspace/tcpvs_config.c: was changed to parse the "redirect" option from a config file. * userspace/tcpvsadm.c (print_service): was changed to print the "redirect" option. 2002-05-01 Wensong Zhang * regex/kernel.c (realloc): fixed the memmove bug in the realloc(). We should check whehter the new size is smaller than the old size, because it is possible that new size is smaller. The correct memmove call should be "memmove(new, old, min(new_size, old_size), otherwise the memmove will override some data, which would lead to some abnormal behavior. * regex/kernel.h (assert): added a preprocesor macro of assert. * userspace/tcpvsadm.c (main): fixed up the bug of deleting a real server. 2002-04-30 Wensong Zhang * tcp_vs_ctl.c (__tcp_vs_del_service): remove the rules first. * tcp_vs_ctl.c (tcp_vs_del_dest): return busy if it is referenced by a rule. * tcp_vs_ctl.c (tcp_vs_add_service): added checking of the result of tcp_vs_bind_scheduler(). Kernel TCP Virtual Server - Version 0.0.7 - April 20, 2002 2002-04-20 Wensong Zhang * tcp_vs.c (tcp_vs_relay_socket): Added to implement zero-copying in receiving and sending data from one socket to the other. Although I don't benchmark the performance, I think it should greatly improve the performance. :) * userspace/tcpvsadm.8: added the description about the matching pattern in regular expression. Kernel TCP Virtual Server - Version 0.0.6 - April 12, 2002 2002-04-12 Wensong Zhang * Ported Henry Spencer's regular expression library into the kernel. It is used to replace the original simple expression in rule matching of KTCPVS. So, users can now specify flexible rules in content-base scheduling. * tcp_vs_ctl.c (tcp_vs_add_rule): was changed to use regcomp to compile pattern in the rule. The pattern ".*" or "^/.*" is used to specify the default server. When no other server is matched, this default server will be used. * tcp_vs_http.c (tcp_vs_http_matchrule): was changed to use regexec to match content against the precompiled pattern. * userspace/tcpvs_config.c (get_next_token): was modified to parse quoted string as a token. * userspace/tcpvsadm.c (print_service): was changed to print quoted pattern. 2002-03-16 Wensong Zhang * tcp_vs_ctl.c (tcp_vs_flush_rule): removed unnecessary write lock, otherwise it would hang up on SMP system. Kernel TCP Virtual Server - Version 0.0.5 - December 21, 2001 2001-12-21 Wensong Zhang * tcp_vs_ctl.c: Added the rule of pattern "*" or "/*" at the tail of the rule list, so that the associated server can be used as the default server. When no other rules are matched, this rule will be matched finally. * Add a simple tcpvsadm man page * Some code tidy up. 2001-12-20 Wensong Zhang * Change --start|--stop command. Start/Stop all the services in the TCP virtual server table if no argument is specified. * Add the --load-configfile command, which is to load the TCP virtual server table from the config file. 2001-11-14 Wensong Zhang * Split various conversion and parsing function from tcpvsadm.c to helper.c. * Create the tcpvs_config.h and tcpvs_config.c, which can parse very basic tcpvs configuration file. 2001-10-29 Wensong Zhang * Add the macro TCP_VS_ERR_RL that calls net_ratelimit() to limit error information. Kernel TCP Virtual Server - Version 0.0.4 - October 16, 2001 2001-10-16 Wensong Zhang * Revisited the locking facility of TCPVS service list access and service member access (such as the destination list and the rule list). * tcp_vs.c: use net_ratelimit() to guard TCP_VS_ERR outputs in the connection processing. 2001-10-15 Wensong Zhang * Added the function of server pool maintenance, which is to dynamically keep enough server thread to handle the current load. It does this by periodically check the number of spare servers (waiting for a request). If there are fewer than MinSpareServers, it creates more spare servers. If there are more than MaxSpareServers, some of the spares die off. * tcpvsadm updates Output more TCPVS config information. Change some default values of TCPVS config. Kernel TCP Virtual Server - Version 0.0.3 - October 11, 2001 2001-10-10 Wensong Zhang * Changed to use [gs]etsockopt to manipulate TCPVS inside the kernel (through netfilter sockopt register), so that it is possible to merge IPVS and TCPVS code together in the future. * Code tide up, such as removing the code of reading and writing proc files, and adding/refining data structures. * tcpvsadm is updated to a new version. Added the libtcpvs library to manipulate TCPVS. Rewrote most code of tcpvsadm.c to use libtcpvs to interact with TCPVS inside the kernel. 2001-09-22 Wensong Zhang * tcp_vs_sched.c: add the including of head file to avoid the compiling error that `do_softirq' is undeclared. * tcp_vs_http.c (parse_http_header): add type into min marco call, so that it can be compiled in kernel 2.4.9. 2001-05-18 Wensong Zhang * replace sched->refcnt with sched->module use count for tcpvs scheduler references. Kernel TCP Virtual Server - Version 0.0.2 - May 17, 2001 2001-05-17 Wensong Zhang * make the tcp_vs_conn_handle function work more correctly. * add new debug-level facility * rewrite a lot code of tcp_vs_ctl.c and tcpvsadm.c, so that most ktcpvs configuration is done by the tcpvsadm utility. and, add the add-rule/del-rule of content-based scheduling rule. * rewrite most code of the tcp_vs_http.c * Although the code is still ugly, it is a little bit better than the last release. :) Kernel TCP Virtual Server - Version 0.0.1 - May 8, 2001 * initial release. It is very very draft version, it is just used to prove the concept that application-level load balancing can work inside the kernel.