Kernel TCP Virtual Server - Version 0.0.16 - October 31, 2004 2004-10-31 Wensong Zhang * integrate the hhttp scheduler patch from Philipp Klaus , which is to send requests to server based on the hash value of matched request * userspace/tcpvsadm.c: added the --listen option to specify the ip address (and port number) that a TCP virtual service listens to. * EXAMPLES: added. Kernel TCP Virtual Server - Version 0.0.15 - July 8, 2003 2003-07-08 Wensong Zhang * tcp_vs_phttp.c: a little bit code tidy up. 2003-06-15 Wensong Zhang * tcp_vs_http_trans.h: splitted from tcp_vs.h. * tcp_vs_http_parser.h: splitted from tcp_vs.h. Kernel TCP Virtual Server - Version 0.0.14 - June 14, 2003 2003-06-14 Wensong Zhang * Merged the patch from Hai Long split the code for HTTP transport from tcp_vs_http_parser.c into tcp_vs_http_trans.c. Some tunings in the tcp_vs_chttp.c and tcp_vs_phttp.c. * Some code tidy up. 2003-06-07 Wensong Zhang * Merged the patch from Hai Long A large part of the HTTP parsing engine has been rewritten. some code tidy up in the tcp_vs_phttp.c and tcp_vs_chttp.c. 2003-05-28 Wensong Zhang * tcp_vs_chttp.c: fixed the wrong way of calling spin_lock and spin_unlock. Kernel TCP Virtual Server - Version 0.0.13 - May 28, 2003 2003-05-28 Wensong Zhang * Merged the minor patch from Hai Long to fix up the function strdup. 2003-05-23 Wensong Zhang * tcp_vs_ctl.c (tcp_vs_edit_service, tcp_vs_add_service): fixed to return -ENOENT when the scheduler is not found. * Merged the patch from Hai Long Added a new scheduler ktcpvs_chttp to do cookie-injection load balancing for web servers. Split the code into a stand-alone HTTP parsing engine. Included the AVL code from GNU libavl and adapted it to use inside the kernel. 2003-05-21 Wensong Zhang * tcp_vs_timer.c (tcp_vs_slowtimer_init): removed the buggy line of assigning slowtimer_jiffies with the system jiffies. 2003-04-27 Wensong Zhang * some code tidy up. Kernel TCP Virtual Server - Version 0.0.12 - April 7, 2003 2003-04-07 Wensong Zhang * tcp_vs_phttp.c (http_read_line): merged the patch from Hai Long , to remove the max_line_size limit in the persistent http scheduler. 2003-04-05 Wensong Zhang * tcp_vs_phttp.c (relay_multiparts): added the missing continue statement, and changed the schedule_timeout(HZ) to schedule(), because the thread only needs to wait for socket data. 2003-02-27 Wensong Zhang * userspace/tcpvsadm.c (modprobe_ktcpvs): added to load the ktcpvs module automatically by modprobe. 2003-02-25 Wensong Zhang * userspace/Makefile (MANDIR): applied the patch from Alejandro Mery Pellegrini to add the $(MANDIR) variable, so that it can be overloaded by the generic build-system of rocklinux. * Makefile (modules_install, modules_uninstall): added those targets to install the modules into /lib/module/$(KERNELRELEASE)\ /net/ktcpvs/ directory. 2003-02-24 Wensong Zhang * tcp_vs_phttp.c: applied the patch from Hai Long (parse_http_request_line): changed the way to compare http version. (parse_http_status_line): changed the way to compare http version. (http_mime_parse): changed the architecture of parse mime header. (http_get_response): comment out the call to http_line_unescape(). * tcp_vs_phttp.c (http_read_line, relay_http_data) (relay_multiparts): replaced interruptible_sleep_on_timeout with sleep on socket plus schedule_timeout(), so that the child can be waken up immediately if there is data available. 2003-02-23 Wensong Zhang * tcp_vs_srvconn.c (tcp_vs_srvconn_flush): fixed the bug of forgetting to remove the srvconn entry from its list. Kernel TCP Virtual Server - Version 0.0.11 - February 22, 2003 2003-02-22 Wensong Zhang * tcp_vs_sched.c (tcp_vs_scheduler_get): changed name of the scheduing modules to the prefix "ktcpvs_*", instead of "tcp_vs_*". * tcp_vs_phttp.c (data_available): added the checking if the connection is closed and removed the socket peeking. * tcp_vs_srvconn.c: changed to use the slow timer to collect stale server connections, instead of using the system timer. Note that do not use bottom half or softirq to handle socket directly, such as closing a socket, it is fatal. * tcp_vs_timer.c: added the slow timer for collecting stale connections. The collection procedure is activated by the ktcpvs main thread periodically. 2003-02-20 Wensong Zhang * tcp_vs_ctl.c: added the sysctl variable /proc/net/ktcpvs/keepalive_timeout to set the keepalive timeout value. * tcp_vs_phttp.c (tcp_vs_phttp_schedule): changed to use the new server connection pool, so that the server connection pool can be shared by different clients. * tcp_vs_srvconn.c : added the implementation of server connection pool. 2003-02-15 Wensong Zhang * tcp_vs_phttp.c (tcp_vs_phttp_schedule): replaced the interruptible_sleep_on_timeout call with sleep on socket plus schedule_timeout() too. * tcp_vs.c (tcp_vs_child): replaced interruptible_sleep_on_timeout with sleep on socket plus schedule_timeout(), so that the child can be waken up immediately if there is data available. It is more efficient. Kernel TCP Virtual Server - Version 0.0.10 - February 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 terminate the scheduling 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. 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.