While the XCP code release has proven stable and interesting in the lab, there are certainly some untested code paths and undetected bugs still lurking around. If you download it, please be advised that it is beta quality. If you find a bug, please tell us how to replicate it so we can fix it. Even better would be a patch and a description of the problem. The current version has addtional fields in the xcphdr like queue_length, te_timer value, positive_feedback and negative_feedback. These parameters have been added for debugging purposes only and would be removed as we progress with our tests. Differences between the previous XCP release and current. 1. The previous release dealt in terms of congestion window i.e. the sender put the cwnd in the packet header and the router calculates the throughput using cwnd/rtt. In the current release the cwnd/rtt calculation is moved to the end host to avoid the division in the router. The header contains throughput (Kbytes/s) 2. The current release configures the "capacity" variable used by XCP router per interface. It has been integrated with ifconfig. In the previous release this was hard coded. 3. The current release is compliant to xcp-spec-XX (See webpage) Additional Information: Inducing delays: To test XCP in an environment with delays we use DUMMYNET option in the Kernel config. A sample list of commands is provided below. Here we are delaying all packets to host 10.10.0.2 by 100ms. $) ipfw add 2000 pipe 1 ip from any to 10.10.0.2 out $) ipfw pipe 1 config delay 100ms Setting up the xcp capacity: XCP determines the unused bandwith by subtracting the current usage by the CAPACITY. This variable is tied to the interface. To set it: $) ifconfig em1 xcp 12207 where capacity = 12207 KB/s (100Mb/s) To view the xcp statistics $) ifconfig em1 xcpstats XCP SYSCTLS: 1) net.inet.xcp.do_xcp_feedback: Whether xcp feedback calculations are to be done or not. If using XCP the value should be 1. 2) net.inet.xcp.aggressive: A sysctl to control how aggressive XCP requests are if true, each packet contains a request to fill the window, if false that number is divided by the number of full sized packets in the window. 3) net.inet.xcp.xcp_metered_output: To avoid sending bursts of packets. (Not tested) 4) Trace sysctls: net.inet.xcp.trace_fwd_toggle net.inet.xcp.trace_teo_toggle net.inet.xcp.trace_tqo_toggle net.inet.xcp.trace_rcv_toggle net.inet.xcp.trace_snd_toggle TCP SYSCTLS: Currently to avoid drops we make the buffers large (b/w * delay) The sysctls to modified are At the end points: sysctl -w net.inet.tcp.sendspace= sysctl -w net.inet.tcp.recvspace= sysctl -w kern.ipc.maxsockbuf= At the router: sysctl -w kern.ipc.maxsockbuf=