v1.2.3 Date: 14th July 2010 Development of SIFTR v1.2.3 was sponsored by The FreeBSD Foundation (http://www.freebsdfoundation.org/) - Refactor lots of duplicate code out of the IPv4 and IPv6 hook functions into separate inline functions. Lots of additional cleanup throughout the code. - Fix a bug in the setting of the SACK enabled data field. It would previously always report 0 on FreeBSD versions >= 7. - Fix a bug whereby statistics variables were not being zeroed between enable/disable cycles so the values would accumulate rather than reset for each cycle. - Utilise the DPCPU (dynamic, per-CPU) KPI for statistics counters on FreeBSD 8+ to reduce cache contention in SMP environments, thereby improving performance. - Add a new "net.inet.siftr.genhashes" sysctl variable to dynamically control whether packet hashes are generated and logged or not. The default is disabled. - Add the siftr(4) man page to the distribution. -------------------------------------------------------------------------------- v1.2.2 Date: 15th July 2009 Development of SIFTR v1.2.2 was sponsored by The FreeBSD Foundation (http://www.freebsdfoundation.org/) - Fix a bug in ALQ that caused a message which wrapped the underlying circular buffer being partially written and then partially repeated again in the log file. The bug caused the occasional log message to look like two messages had been run together. - Fix compilation of ALQ and SIFTR after recent changes in 8-CURRENT. -------------------------------------------------------------------------------- v1.2.1 Date: 30 April 2009 Development of SIFTR v1.2.1 was sponsored by The FreeBSD Foundation (http://www.freebsdfoundation.org/) - Unconditionally remove the VOP_LEASE(9) call from ALQ. VOP_LEASE(9) was axed from 8-CURRENT recently and ALQ's use of the VOP is unnecessary even on older branches as well. - The inpcb in6p_lport/in6p_fport fields were recently removed, and were simply aliases for inp_lport/inp_fport anyway. Unconditionally make the switch. - Recent changes to the way inpcb's flag the TIMEWAIT state required some CPP checks to ensure the correct code is used to check the state. This change mitigates a potential kernel panic. - Fix locking in siftr_pkt_manager_thread() to avoid a panic caused by ALQ sleeping while the siftr_pkt_mgr_mtx is held. - Optimise siftr_pkt_manager_thread() to vastly reduce siftr_pkt_queue_mtx lock contention. -------------------------------------------------------------------------------- v1.2.0 Date: 8th April 2009 Development of SIFTR v1.2.0 was sponsored by The FreeBSD Foundation (http://www.freebsdfoundation.org/) - Added support for FreeBSD 8. - Dropped support for FreeBSD 5. - Added experimental IPv6 support. - Should now work safely on both i386 and amd64 FreeBSD architectures. - Enabling/disabling SIFTR via the net.inet.siftr.enabled sysctl now does what loading/unloading the module previously achieved i.e. the load/unload message gets written on enable/disable, and all pending log messages get flushed to disk on disable. - The time fields in the load/unload log messages have been renamed to align with the new enable/disable behaviour. "module_load_time_{secs|usecs}" is now named "enable_time_{secs|usecs}". Similarly, "module_unload_time_{secs|usecs}" is now named "disable_time_{secs|usecs}". - A new "ipmode" field has been added to the enable log message which can be used to determine how the addresses in the subsequent log messages have been formatted. - The IP address and port number in the disable log message's "flow_list" field are now separated by a semi colon instead of a colon. This is required because the new IPv6 logging capabilities use colons in the IP address representation. - The logging vnode is now created/opened at module enable time instead of at module load time. SIFTR can now safely be loaded via the boot loader without panicing the kernel. - SIFTR now registers itself with the kernel EVENTHANDLER(9) system to receive notification of the system shutting down. This allows SIFTR to terminate gracefully and ensures all pending log messages get flushed to disk. - Moved to using ALQ(9) for log message handling. ALQ is now bundled with the SIFTR distribution for simplicity. - Many improvements to the locking, particularly in the PFIL hook which fix a kernel panic that was being triggered frequently with recent improvements in network stack parallelism. - Lots of general cleanup and FreeBSD style(9) changes. -------------------------------------------------------------------------------- v1.1.5 Development of SIFTR to December 2007 was supported in part by a grant from the Cisco University Research Program Fund at Community Foundation Silicon Valley. Date: 18th December 2007 - Added a new variable to the log output: the length of the retransmission timer - Added 4 new variables relating to socket buffers - Added a new variable capturing the number of sent inflight bytes - Tweaked one of the message buffering parameters to make it more realistic in light of the new variables that have been added -------------------------------------------------------------------------------- v1.1.4 Date: 9 October 2007 - Fixed a bug that caused outbound packets to fail to trigger a log message on FreeBSD 7.0 - Fixed a bug that caused some packets to be processed more than once if they were reinjected back into the stack (eg. via dummynet) -------------------------------------------------------------------------------- v1.1.3 Date: 6 September 2007 - Fixed a documentation bug regarding calculation of the RTT from a SIFTR log file - Added an extra value to the SIFTR load log message to help with converting RTT to real time -------------------------------------------------------------------------------- v1.1.2 Date: 6 September 2007 - Made a minor fix so that SIFTR compiles and works on FreeBSD 5. -------------------------------------------------------------------------------- v1.1.1 Date: 29 August 2007 - Made a minor fix so that SIFTR compiles and works on FreeBSD 7. - Removed some unnecessary debugging code. -------------------------------------------------------------------------------- v1.1.0 Date: 24 August 2007 - SIFTR now defaults to using microtime() instead of getmicrotime() for obtaining timestamps for log messages. This has a dramatic increase in the accuracy of the log message timestamps, at the expense of a moderate negative impact on the raw packets per second processing performance of SIFTR. See comments in source regarding the differences between the two functions so you can decide which one is best for you. - SIFTR now writes an additional key-value pair in the module unload log message. The key is named flow_list, and lists the flows seen during the run of SIFTR. This does not impact SIFTR performance at all, and provides a useful way of quickly ascertaining the identity of flows present in the log file. - Moved SIFTR specific detail that was going to be published in the technical report into the README instead. Most of the detail is likely to be version specific, and therefore doesn't belong in the archived report. More useful/accessible in README as plain text anyway. - Changed the data logged by SIFTR. Removed the "in fast recovery", "was in fast recovery" and "in slow start" fields. Added the "bandwidth controlled window", "send window scaling factor", "receive window scaling factor" and "flags" fields. The three fields that were removed can be calculated from the new and existing fields by post processing the log data. - Moved the hash function code into a separate file to make it very clear that we did not write that code, and that it was taken from existing FreeBSD sources. - Added some additional descriptive text to the README. - Changed all references to the term "lost packets" to "skipped packets" to avoid confusion. "Skipped" gives a better mental picture of what we mean anyway, and avoids confusion relating to whether SIFTR actually loses the packets it is processing (which is not the case!). - Added a new "siftrver" key-value pair to the module load log message. -------------------------------------------------------------------------------- v1.0.1 Date: 27 June 2007 - Updated README in SIFTR distribution to include a description of the log message formats. - Added this CHANGELOG to the SIFTR distribution. -------------------------------------------------------------------------------- v1.0.0 Date: 22 June 2007 - First public release of SIFTR. --------------------------------------------------------------------------------