Our apologies. We don't expect this kind of renaming will be a common event.
To reiterate, the elements that measure bytes per second are now named BandwidthMeter and BandwidthShaper. The elements that measure packets per second have taken the names Meter and Shaper.
Removed the SaveIPFields and IPsec elements (they were rotting).
Incompatible C++ API changes
Reorganized Linux kernel polling patches. If you have a previous version of Click, you must unapply the old kernel patch and apply the new kernel patch before compiling.
Improved Packet copy-on-write behavior by reflecting it in the C++ class structure. Now there is a class for possibly-shared packets (named Packet), and a class for definitely-not-shared packets (named WritablePacket). WritablePacket is a subclass of Packet. Packet's data is always read-only (that is, the `data()' method returns a `const unsigned char *', and so forth). WritablePacket's data is read/write (the `data()' method returns an `unsigned char *'). `Packet::uniqueify()' and similar methods return a WritablePacket.
Made configuration argument parsing more uniform among elements. For example, every configuration argument is always a comma-separated string. This is enforced by passing a vector of strings to the `configure' method: `cp_argvec' is called before the `configure' method is called. Changed Element method `int configure(const String &, ErrorHandler *)' to `int configure(const Vector<String> &, ErrorHandler *)', and updated elements.
The `cp_DATATYPE' functions take pointers instead of references. This makes their use easier to read. * The `cp_DATATYPE' functions no longer take an optional `String *rest' argument. They always parse their argument string entirely.
Changed Element method `bool configure_first() const' to `int configure_phase() const'. Now element classes can specify their relative configuration and initialization order; for example, ToDevice specifies that it should be configured and initialized after any FromDevices.
Removed user-level Element method `select_fd()'. Replaced with `add_select(fd, mask)' and `remove_select(fd, mask)', so elements can listen to any number of file descriptors for reading, writing, or both. (`mask' is either `SELECT_READ', `SELECT_WRITE', or `SELECT_READ|SELECT_WRITE'.)
Other small changes and method renamings should have limited impact. For instance, renamed `Element::number()' to `Element::eindex()'; removed `Element::use()' and `Element::unuse()'; renamed `Element::change_configuration()' to `Element::set_configuration()' and `Element::set_configuration_argument()'.
Renamed Ethernet and ARP structures; what was `struct ether_header' is now `struct click_ether', and so forth, to avoid conflicts.
Removed `IPVERSION' constant from `click_ip.h' to support IPv6.
General
Added new `tickets' and `handlers' handlers, available by default on every element. Removed default `inputs' and `outputs' handlers, replacing them with `ports'.
Improved support for large numbers of handlers by reducing memory usage.
Click configurations can contain cpp(1)-style `#line LINENUMBER' or `# LINENUMBER' directives. The tools generate them, too, so you will get better error messages than before.
Improved element documentation by adding summaries. The generated elements(n) manual page now groups the elements by function. Also updated and documented the format for doc comments (see `doc/elementdoc.7').
Added low-level RPC capability. LLRPCs are low-level handlers designed for speed rather than ease of use or human-readable results. In the Linux kernel module, LLRPCs are called in response to ioctl(2) commands on handler files. (The user-level program doesn't support LLRPCs yet.) Unlike handlers, LLRPCs can both take arguments and return results. IPRateMonitor(n), for example, uses LLRPCs to report rate information.
Lexer changes: Now single and double quotes are interpreted in configuration arguments vaguely as in Perl. Configuration argument parsing is generally more regular.
Fixed bugs in real-number parsing and unparsing functions.
User-level driver
User-level Click will no longer stop by default when an InfiniteSource (or RatedSource or FromDump) runs out of packets to send. Supply the `-s' option to get the old behavior.
You can give shell globbing syntax to the user-level driver's `-h HANDLER' option; for example, `-h "*.config"'.
Fixed FromBPF and ToBPF, finally. The fixed versions are called FromDevice and ToDevice.
Added ControlSocket element so you can call handlers from other programs.
Kernel driver
Added patch for Linux kernel 2.2.16. This patch contains the latest changes to Linux. While Click will continue to work under 2.2.14 for the time being, it may not work in the future. If you have a previous version of Click, you must unapply the old kernel patch and apply the new kernel patch before compiling.
Improved /proc handling. It is now safe to keep open file descriptors to handler files even while uninstalling the kernel module or installing a new configuration. These files will become unusable after the (un)installation -- every operation will return EINVAL -- but the kernel will not crash and the Click module's reference count will not get screwed up.
Cleaned up polling interface in Linux.
Elements
Added QuitWatcher, FrontDropQueue, StripIPHeader, IPClassifier, IPFilter, IPPrint, FTPPortMapper, IPRewriterPatterns, Switch, PullSwitch, StaticSwitch, StaticPullSwitch, RoundRobinSwitch, StrideSwitch, RatedSplitter, BandwidthRatedSplitter, RatedUnqueue, and BandwidthRatedUnqueue, among others. Also mentioned above: user-level FromDevice, ToDevice, and ControlSocket; kernel module ToLinuxSniffers; generic SetIPAddress, StoreIPAddress.
Added AddressInfo element, which supports network address mnemonics. For example, you can now say `AddressInfo(butt 18.26.4.44); IPEncap(6, butt, 18.26.4.15)'. The `butt' in IPEncap's configuration string then means `18.26.4.44'.
Added experimental IPv6 elements; `./configure --enable-ip6' to compile them.
Fixed kernel alignment bug in IP header checking elements: can't use Linux's `fast_ip_csum' on unaligned data.
Fixed user-level FromDevice and ToDevice bugs. Now FromDevice will not starve other router processing, and ToDevice works on Linux.
Fixed FromLinux bug: now supports multiple instances of FromLinux for same device (this happens while installing a new configuration: initialize is called on the new FromLinux before the last FromLinux instance is uninitialized).
Fixed ToLinux: now calls ptype_dispatch inside start_bh_atomic() and end_bh_atomic().
Modified kernel ToDevice: ToDevice now sends Linux's packets when the device is idle. This prevents Click from starving out packets sent by other processes or Linux.
Shaper and BandwidthShaper work significantly better. They are less bursty and can correctly shape traffic to low rates.
Improved Classifier optimizations.
Radio elements are not compiled by default.
Added new `elements/local' directory for your own elements. They are not compiled by default.
Tools
Added new click-undead(1) tool.
Fixed click-uncombine(1) bugs and changed its order of arguments.
Added PollDevice and EtherEncap specifications to click-align(1).
click-fastclassifier(1) works on IPClassifier and IPFilter.
Added `--verbose' option to click-install(1).