NEWS 79.9 KB
Newer Older
eddietwo's avatar
eddietwo committed
1 2
Click NEWS

Eddie Kohler's avatar
Eddie Kohler committed
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
Version 2.1

* Major Linux kernel module improvements. Click now runs patchlessly
  inside Linux kernels up to version 3.5. Thanks to Kevin Paul
  Herbert.

* Json: Add new JSON handling functions as an element library
  (--enable-json to get it).

* RadixIPLookup: Make it cache aware. Thanks to Madhuri Venkatesh.

* Native netmap support. Thanks to Luigi Rizzo.

* NS fixes and scheduling improvements. Thanks to Björn Lichtblau and
  Sascha Alexander Jopen.

* Internal library improvements to String, StringAccum, Vector, Deque,
  and others. Better performance, smaller code size.

* Start preparing for C++11.

* New elements include Bypass, NetmapInfo, JsonTest, NotifierTest, and
  BitvectorTest.

* New features to Script, FromDevice, ICMPPingSource, PullSwitch,
  RawSocket, ARPTable, FromHost, ARPQuerier, AnyDevice, SetIPAddress,
  AddressInfo, the IPsec elements, and others.

* Bug fixes to IPRewriter, SetIPChecksum, BandwidthRatedSplitter,
  InfiniteSource, FromHost, ToHost, ToDevice, FrontDropQueue, Print,
  Classifier (and IPClassifier, etc.), the multithreaded-Click packet
  pool, notifiers (particularly on multithreaded Click), Bitvector,
  and the configuration lexer.

* Thanks to Cliff Frey, and to Bart Braem, Beyers Cronje, Markku
  Savela, Derrick Pallas, Ruetee Chitpranee, Wim Vandenberghe, Matteo
  Croce, Justin Delegard, Raluca Musaloiu-E., Jim Roewe, Brian Kim,
  Patrick Verkaik, Lalith Suresh, Jimmy Kjällman, Asa Zernik, Robert
  Sombrutzki, Roman Chertov, Piotr Jurkiewicz, and others.


Eddie Kohler's avatar
Eddie Kohler committed
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
Version 2.0.1   24.Sep.2011

* ns-3 support, thanks to Lalith Suresh and Sascha Alexander Jopen.

* Important bug fixes for user-level ToDevice thanks to Jaeyong Yoo.

* Better handling for time: Timestamp knows about steady clocks (also known
  as monotonic clocks -- clocks that never go backwards) on most platforms,
  so Timers should go off at predictable intervals even when the system
  time is set backwards.

* IPRewriter and friends: TCP supports >2GB transfers and multiple sequence
  number transitions; UDP supports different timeouts for streaming
  connections and RPC-like connections.

* Configure with --enable-stats=2 for more precise cycle counting.

* Classifier and friends (IPFilter, etc.): Correct bugs and improve
  optimization.

* Bug fixes for AddressInfo, user-level packet pool (thanks to Seiichi
  Tetsukawa).

* Support packages on patchless Linux installs.

* Thanks to Cliff Frey, and to Felipe Chaulet, Sascha Alexander Jopen,
  Christian Kreibich, Meraki, Inc., Roberto Riggio, Jim Roewe, Robert
  Sombrutzki, Lalith Suresh, Dimitris Syrivelis, Seiichi Tetsukawa, Michael
  W.S. Yee, Jaeyong Yoo, and all other contributors.


Eddie Kohler's avatar
Eddie Kohler committed
75
Version 2.0   16.Jul.2011
Eddie Kohler's avatar
Eddie Kohler committed
76

Eddie Kohler's avatar
Eddie Kohler committed
77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
* New elements: AdjustTimestamp, BlockThread, ClickyInfo, EtherVLANEncap,
  HandlerTask, ICMPIPEncap, NullTask, SetVLANAnno, StoreUDPTimeSeqRecord,
  StripDSRHeader, StripEtherVLANHeader, TCPFragmenter, UDPIP6Encap,
  UnstripDSRHeader.

* Improved elements: ARPQuerier, AddressInfo, BandwidthRatedSplitter,
  BandwidthRatedUnqueue, CheckLength, DRRSched, FromDevice linuxmodule,
  FromDevice userlevel, FromHost userlevel, FromIPSummaryDump,
  FromSimDevice, FromUserDevice, GetIPAddress, HostEtherFilter, IPFilter
  ("ether" comparisons, faster initialization), InfiniteSource, KernelTun,
  LinkUnqueue, RandomSource, RatedSource, RatedSplitter, RatedUnqueue,
  Script, SetIPAddress, SetTimestamp, TCPIPSend, TimeSortedSched, ToDevice
  userlevel, ToUserDevice, Truncate, Unqueue2, and others.

* Element and tool bug fixes: CheckTCPHeader, CheckUDPHeader, DSRRouteTable
  DelayUnqueue, FastUDPSourceIP6, FromHost, FromUserDevice, IP6Encap,
  IPAddrRewriter, IPFilter and other classifiers, KernelFilter,
  RadiotapDecap, RadixIPLookup, SetIP6DSCP, Socket, ThreadSafeQueue,
  TimeSortedSched, ToUserDevice, UDPIPEncap, WifiDecap, click-align,
  click-undead, and others.
Eddie Kohler's avatar
Eddie Kohler committed
97

Eddie Kohler's avatar
Eddie Kohler committed
98
* Performance improvements
Eddie Kohler's avatar
Eddie Kohler committed
99

Eddie Kohler's avatar
Eddie Kohler committed
100 101 102
** Tasks: A simplified reschedule implementation and streamlined driver
   loop is both faster and less error prone (now calling fast_reschedule()
   outside of Element::run_task() is safe).
Eddie Kohler's avatar
Eddie Kohler committed
103

Eddie Kohler's avatar
Eddie Kohler committed
104 105 106
** Tasks: If a task does no work, delay re-running it.  This simple change
   improves performance on many configurations, particularly those mixing
   file descriptor or timer access and Tasks.
Eddie Kohler's avatar
Eddie Kohler committed
107

Eddie Kohler's avatar
Eddie Kohler committed
108
** Timers: A 4-heap improves performance with very large numbers of timers.
Eddie Kohler's avatar
Eddie Kohler committed
109

Eddie Kohler's avatar
Eddie Kohler committed
110 111 112 113
** User-level: Device elements default to libpcap even on Linux, offering
   improved performance depending on how libpcap was compiled (e.g. packet
   mmap support).  A packet memory pool suggested by Luigi Rizzo offers
   much better performance for packet allocation and freeing.
Eddie Kohler's avatar
Eddie Kohler committed
114

Eddie Kohler's avatar
Eddie Kohler committed
115
** The round-robin scheduler (--disable-stride) works again.
Eddie Kohler's avatar
Eddie Kohler committed
116

Eddie Kohler's avatar
Eddie Kohler committed
117 118
** New configure option --enable-bound-port-transfer slightly optimizes
   push() and pull() calls (Cliff Frey).
Eddie Kohler's avatar
Eddie Kohler committed
119

Eddie Kohler's avatar
Eddie Kohler committed
120
* Language changes
Eddie Kohler's avatar
Eddie Kohler committed
121

Eddie Kohler's avatar
Eddie Kohler committed
122 123
** New "require(library FILE)" allows one Click script to include another
   (Christian Kreibich).
Eddie Kohler's avatar
Eddie Kohler committed
124

Eddie Kohler's avatar
Eddie Kohler committed
125 126 127 128
** Many-to-one, one-to-many, and many-to-many connections cleanly express
   some connection patterns.  For example, "c :: Classifier => a1, a2, a3"
   means the same as "c :: Classifier; c [0] -> a1; c [1] -> a2; c [2] ->
   a3".
Eddie Kohler's avatar
Eddie Kohler committed
129

Eddie Kohler's avatar
Eddie Kohler committed
130 131
** Element groups cleanly express short detours from a connection path.
   For example, this:
Eddie Kohler's avatar
Eddie Kohler committed
132

Eddie Kohler's avatar
Eddie Kohler committed
133 134 135
	c :: Classifier(00/01);
	x -> c -> y;
	c [1] -> Paint(1) -> y;
Eddie Kohler's avatar
Eddie Kohler committed
136

Eddie Kohler's avatar
Eddie Kohler committed
137
   can be expressed like this:
Eddie Kohler's avatar
Eddie Kohler committed
138

Eddie Kohler's avatar
Eddie Kohler committed
139 140 141
	x -> c :: Classifier(00/01) => (
            [0] -> [0]; [1] -> Paint(1) -> [0]
        ) -> y;
Eddie Kohler's avatar
Eddie Kohler committed
142 143 144

* Multithreading

Eddie Kohler's avatar
Eddie Kohler committed
145 146 147 148
** Many performance and stability improvements to multithreaded
   configurations, particularly at userlevel.

** Lazy Task rescheduling reduces opportunities for bugs.
Eddie Kohler's avatar
Eddie Kohler committed
149

Eddie Kohler's avatar
Eddie Kohler committed
150 151 152 153
** Each thread gains its own sets of Timers (and, at user level, selector
   file descriptors).  An element's Timers are initially scheduled on the
   same thread as its Tasks.  This should simplify reasoning about
   Task/Timer conflicts, and can help improve performance.
Eddie Kohler's avatar
Eddie Kohler committed
154 155 156

* Linuxmodule

Eddie Kohler's avatar
Eddie Kohler committed
157 158
** Patchless installs are on by default.  Click installs and works without
   a patch on many versions of Linux up to 2.6.38.
Eddie Kohler's avatar
Eddie Kohler committed
159 160 161

* Clicky changes

Eddie Kohler's avatar
Eddie Kohler committed
162 163
** Per-router styles: ClickyInfo elements let a script specify how it
   should be drawn.
Eddie Kohler's avatar
Eddie Kohler committed
164

Eddie Kohler's avatar
Eddie Kohler committed
165
** "Run" and "Stop" buttons can execute a configuration.
Eddie Kohler's avatar
Eddie Kohler committed
166

Eddie Kohler's avatar
Eddie Kohler committed
167
* Internals
Eddie Kohler's avatar
Eddie Kohler committed
168

Eddie Kohler's avatar
Eddie Kohler committed
169 170 171
** Args: This new class and its helpers support concise, easy-to-use,
   type-safe argument parsing and are strongly preferred to cp_va_kparse in
   new code.
Eddie Kohler's avatar
Eddie Kohler committed
172

Eddie Kohler's avatar
Eddie Kohler committed
173 174
** TokenBucket: This new template class supports fast, flexible,
   integer-based token bucket rate management.
Eddie Kohler's avatar
Eddie Kohler committed
175

Eddie Kohler's avatar
Eddie Kohler committed
176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196
** Timestamps default to nanosecond precision on many platforms.

** Element::simple_action() can be used for multi-port elements.

** On some platforms, set environment variable CLICK_BACKTRACE to 1 and get
   a useful stack backtrace if Click crashes (Cliff Frey).

** Other improvements: more flexible handlers, simple_action, type traits,
   faster multi-precision arithmetic, better IPv6 address unparsing.

* Acknowledgements

** Thanks to Cliff Frey for extensive discussion, multithreaded debugging,
   802.1Q elements, TokenBucket, TCPFragmenter, bound port transfer, and
   others.

** Thanks to Joonwoo Park for Linux kernel module patches.

** Thanks to Jimmy Kjällman and Pekka Nikander for FreeBSD kernel module
   support.

Eddie Kohler's avatar
Eddie Kohler committed
197 198 199 200 201 202 203 204 205 206 207 208 209
** Thanks to Johan Bergs, Jesse Brown, Roman Chertov, Beyers Cronje, Jens
   De Wit, Kevin Paul Herbert, Sascha Alexander Jopen, Christian Kreibich,
   Bobby Longpocket, Ruben Merz, Derrick Pallas, Roberto Riggio, Luigi
   Rizzo, Jim Roewe, Ian Rose, Harald Schiöberg, Florian Sesser, Lalith
   Suresh, and Wim Vandenberghe for patches, bug fixes, and new elements.

** Thanks to Dan Aguayo, Mark Allman, Manel Bourguiba, Bart Braem, Lars
   Bro, Dmitriy Bubnov, Rémi Clavier, Jonathan Kirchhoff, Dan Levin, José
   Pedro Oliveira, Kostas Pelechrinis, Sami Ruponen, Robert Shanks, Robert
   Sombrutzki, Patrick Verkaik, Nicholas Weaver, Xianghua Xiao, and
   xuhui122000 gmail com for bug reports.

** Thanks to everyone else who supports and uses Click.
210 211


Eddie Kohler's avatar
Eddie Kohler committed
212
Version 1.8.0   28.Feb.2010
213 214 215 216 217

* Simulation time feature.  By default the Click driver runs in real time:
  Timestamp::now() returns the current time.  But a router-wide "timewarp"
  write handler is available.  Set the "timewarp" handler to 2, and Click
  time appears to move twice as fast as real time.
Eddie Kohler's avatar
Eddie Kohler committed
218

219 220 221 222 223 224 225 226 227 228 229 230 231
  Or run "click --simtime".  This runs Click in simulation time.  Time is
  completely divorced from real time.  Timers appear to expire immediately
  (in other words, Click time jumps to the closest timer expiration time).
  Every call to Timestamp::now() increments Click time by epsilon (one
  subsecond).  This turns Click into an event-driven simulator, makes time
  completely deterministic, and makes tests run fast.

* IPRewriter and associated elements rewrite.  This major refactoring adds
  new functionality, robustness, and speed, while reducing memory
  footprint.  A few features are lost, especially hotswapping support, and
  some syntax has changed, FTPPortMapper and ICMPPingRewriter in
  particular.  Thanks to Cliff Frey.

Eddie Kohler's avatar
Eddie Kohler committed
232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250
* Initial BETA support for running in UNPATCHED Linux kernels.  Give
  ./configure the --enable-fixincludes option to test this support.  (On
  later kernels, you may need to disable FromHost by adding
  ELEMENT_REQUIRES(false) to the bottom of
  elements/linuxmodule/fromhost.cc.)  Thanks to Harald Schiöberg for ideas.

  Note that Click packages (like etc/samplepackage) don't yet work on
  patchless installs.

* Patch for ns-2.34, thanks to Wim Vandenberghe.

* BETA support for FreeBSD 7.1 kernels, thanks to Nikola Knežević and Simon
  Schubert.

* Patch for Intel's e1000e driver from Joonwoo Park.  Thanks!

* Patch for Intel's e1000-7.6.15.5 driver from Joonwoo Park, work sponsored
  by NemeanNetworks.  Thanks!

251 252
* Clicky GUI bug fixes, visual improvements.

Eddie Kohler's avatar
Eddie Kohler committed
253 254 255 256 257 258 259 260
* New features: ARPPrint ACTIVE, ARPQuerier POLL_TIMEOUT, ARPResponder
  lookup, add, and remove handlers, Classifier and IPFilter live
  reconfiguration and optimization improvements, ControlSocket advanced TCP
  ports, DecIPTTL MULTICAST and ACTIVE, Discard ACTIVE, FromDevice
  ALIGNMENT, FromUserDevice HEADROOM, ICMPError live reconfiguration, IP
  summary dump ip_dscp and ip_ecn, MarkIPCE FORCE, PullSwitch notification,
  Queue memory barriers, RED has GENTLE false and STABILITY 0, Unqueue
  LIMIT and handlers, click-pretty diagram templates.
261 262 263 264 265

* New elements: IP6Encap, MarkMACHeader, QuickNoteQueue, Script, SetIPECN,
  SimpleIdle, SimplePullSwitch.

* Element bug fixes: ARPQuerier/ARPTable (memory corruption bug),
Eddie Kohler's avatar
Eddie Kohler committed
266 267 268 269 270
  AthDescEncap, Classifier, FromHost, FromIPSummaryDump, ICMPPingResponder,
  ICMPRewriter, IPClassifier, IPFilter, IPFlowRawSockets, IPNameInfo, IPsec
  elements, KernelTun, linuxmodule device and queue elements (memory
  corruption bugs), Print80211, RadioTapDecap, StaticThreadSched,
  StoreIPAddress, Unqueue, WEPEncap, WifiDefrag.
271 272 273 274 275 276 277 278 279 280 281 282 283 284

* Other bug fixes: Timer fairness, select handling in user-level
  multithreaded configurations.

* Internals: IP6Address improvements, String performance and memory-usage
  improvements, avoid strict-aliasing warnings, default to including
  analysis and test elements, new RouterVisitor class for analyzing
  configuration graphs, new algorithms for heap functions, set the random
  seed to a "truly random" value at router configure time, signal handlers
  become more robust, tool improvements to variable scope handling.

* Deprecated features: ElementFilter.

* Thanks to Mark Allman, Bart Braem, Andrew Brampton, Robert Buchholz,
Eddie Kohler's avatar
Eddie Kohler committed
285 286 287 288
  Roman Chertov, Jens De Wit, Xiaojun Feng, Cliff Frey, Raja Hayek, David
  Johnson, Nikola Knežević, NemeanNetworks, Joonwoo Park, Roberto Riggio,
  Nadi Sarrar, Harald Schiöberg, Simon Schubert, Robert Sombrutzki, Ashish
  Sharma, Seiichi Tetsukawa, Erwin Van de Velde, Wim Vandenberghe, Nick
289 290 291
  Weaver.


292
Version 1.7.0rc1   7.Mar.2009
Eddie Kohler's avatar
Eddie Kohler committed
293

294 295 296 297 298 299 300 301 302 303 304 305 306
* Clicky GUI

** Include clicky, a new Click GUI using the GTK+ toolkit.  To compile,
   install the GTK+ development package for your OS, then install Click.
   Finally, "cd apps/clicky; autoreconf -i; ./configure
   --prefix=CLICKPREFIX; make install".  Clicky is capable of interacting
   live with Click routers, either in the kernel or using the ControlSocket
   protocol for user-level configurations.  It displays a configuration as
   text, highlights configuration errors, and displays handlers.  It can
   also display an automatically-created configuration diagram.  A powerful
   Cascading Style Sheets-like language can be used to control the diagram.
   For instance, elements on the diagram can display live counter values.

Eddie Kohler's avatar
Eddie Kohler committed
307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422
* Drivers

** Support Linux 2.6.24.7.  Major thanks to Joonwoo Park and
   NemeanNetworks, and Adam Greenhalgh.

** Many soft lockup fixes to the kernel driver, for both multithreading and
   uniprocessor scenarios.  Problems reported especially by Joonwoo Park
   and Kevin Springborn.

** Add support for user-level multithreading.

** Improve atomic operations and multithreading support for notifiers.

** ThreadSafeQueue is a completely thread-safe queue, allowing multiple
   simultaneous pushers and/or pullers.

** Linux kernel device elements support carrier check.

** Major improvements in parsing and initialization time for large
   configurations.

** The Timestamp class supports any timestamp layout used by Linux,
   including various types of 64-bit scalar values.
 
** Linuxmodule Click file system: Prefer element names to handler names --
   "/click/ELEMENTNAME" always matches an element of that name.  To
   reliably find a handler, use "/click/ELEMENTNAME/.h/HANDLERNAME".
   Similarly for global handlers.

* Elements

** New AnnotationInfo element adds support for named packet annotations.
   Use this support in other elements, such as Paint, which now allows
   users to name which annotation to paint.  Required refactoring of Packet
   annotation area.

** ControlSocket: add READDATA, READUNTIL, and WRITEUNTIL commands, add
   LOCALHOST keyword argument, fix LLRPC support.

** Script: support "goto label CONDITION", add printn, error, returnq,
   setq, and initq commands, add PROXY and PACKET types, add many handlers.

** Queue: add second output for rejected packets.

** IPSummaryDump elements: support ICMP, FromIPSummaryDump supports more
   data types, fix MD5 checksums.

** Add handlers to Counter, TimedSink, others.

** New elements, including ARPTable, EtherPauseSource, FlowInfo,
   KernelFilter, StoreEtherAddress, TimedUnqueue, TruncateIPPayload.

** Bug fixes and other improvements to click-align, click-devirtualize,
   ARPFaker, ARPQuerier, ARPResponder, AddressInfo, AggregateIPFlows,
   AnyDevice, CheckIPHeader, DirectIPLookup, FromDevice, FromHost,
   FromUserDevice, IPFilter, IPPrint, IPReassembler, IPRouteTable,
   KernelTun, Print, ProgressBar, Queue, RadixIPLookup, SpinlockInfo,
   StoreIPAddress, StrideSched, StrideSwitch, Suppressor, TimeFilter,
   TimeRange, ToDevice, ToHost, ToUserDevice, and others.

* Internals

** New HashTable template is preferred over HashMap.  It is documented.

** Improve Timer scheduling precision by dynamically adjusting the expiry
   time.  Improve Timer fairness as well; a Timer cannot starve Task
   processing or other Timers.

** New cp_va_kparse functions replace cp_va_parse.  The cp_va_kparse
   functions assign a keyword to *every* argument, facilitating better
   error messages.

** Element::add_data_handlers() is an easy way to provide handler access to
   element data members.  Element::read/reconfigure_keyword_handler can
   handle optionaly-positional handlers.

** New Handler class features handler flags that act as hints to GUI
   displays.

** New List template for doubly-linked lists.

** New Bigint template for simple multiple-precision integer arithmetic.
   Code derived from GNU MP.

** Timestamp refactoring required by newer Linux drivers.

** The number of supported Notifiers is possibly infinite.  Additionally,
   Notifiers better support combinations of large numbers of basic signals,
   so a RoundRobinSched downstream of more than 32 Queues won't pin the
   CPU.

** testie regression test framework improvements.

** 64-bit platform fixes.

** Improved error message subsystem (documented in error.hh/error.cc).

** Improved sort function is faster and robust to bad comparators.

** Use click_random() for random numbers.

** UTF-8 support in command line arguments and ErrorHandler.

** "./configure --enable-valgrind" turns on extra support for memory
   debugging with Valgrind.

** Remove the "connectiontunnel" primitive.

** Much documentation, including to Task, Timer, NameDB, NameInfo,
   ErrorHandler, CLP.

** Other bug fixes, including to String and StringAccum.

* Special thanks to Joonwoo Park, Cliff Frey, Roman Chertov, Kevin
  Springborn, and Adam Greenhalgh for their extraordinary contributions.

423 424 425 426 427 428 429 430 431 432 433
* Thanks to Alexander Afanasyev, Damien Ancelin, Johan Bergs, Lorenzo
  Bianconi, Bart Braem, Lars Bro, Marco Canini, Remi Clavier, Beyers
  Cronje, Lionel Debroux, Giovanni Di Stasi, Norbert Egi, Megan Leigh
  Elmore, Ulf Hermann, Bob Keyes, Brian Kim, Klocwork for code analysis,
  Nikola Knežević, Hashimoto Kouki, John Russell Lane, Jinyang Li, Mustafa
  Mohammad, Jim Mott-Smith, Tom Parker, Vern Paxson, Matthias Petschick,
  Stephen Pink, Pavlin Radoslavov, Manuel Requena, Barret Rhoden, Roberto
  Riggio, Robert Ross, Javier Sánchez, Harald Schiöberg, Robert Sombrutzki,
  Seiichi Tatsukawa, Neil Viberg, Vivek Vijayan, Michael Voorhaen, Nicholas
  Weaver, Marco Wenzel, Christopher White, Pieter Wuytens, Xiao Yu, and
  anyone else we inadvertently left off the list.
Eddie Kohler's avatar
Eddie Kohler committed
434 435


436
Version 1.6.0   18.Sep.2007
eddietwo's avatar
eddietwo committed
437 438 439 440 441 442 443 444 445 446 447 448 449 450 451

* Drivers

** The Click drivers, language, and tools support named configuration
   parameters, which can be set in configuration files or on the command
   line.  See 'conf/test-ping.click' for an example.

** click-install provides a --cpu option, to force Click to run on a given
   CPU (Beyers Cronje).  Also, click-install provides a --user option,
   setting the uid/gid owning the Click file system.

** Linux 2.6.19 support.

** Improved support for recent FreeBSD kernels (Bruce Simpson).

Eddie Kohler's avatar
Eddie Kohler committed
452 453
** ns-2.30 support, and ns-2.29 support removed.  You will need to apply
   the ns-2.30-patch with this distribution; old patches are obsolete.
eddietwo's avatar
eddietwo committed
454 455

** Improved stability for e1000-5.x drivers (Kevin Lahey), e1000-6.x
Eddie Kohler's avatar
Eddie Kohler committed
456
   drivers (Beyers Cronje, Adam Greenhalgh, Joonwoo Park), and e1000-7.x
eddietwo's avatar
eddietwo committed
457 458 459 460
   drivers (Max Poletto, Roman Chertov).

** Improved stability for Linux kernel module.

Eddie Kohler's avatar
Eddie Kohler committed
461 462 463 464
** Improved SMP Click.  For instance, removed NotifierQueue race
   conditions.  Thanks very much to Joonwoo Park.

** click-viz is integrated into click-pretty.
eddietwo's avatar
eddietwo committed
465

Eddie Kohler's avatar
Eddie Kohler committed
466 467
** click-fastclassifier and click-devirtualize work.

Eddie Kohler's avatar
Eddie Kohler committed
468 469 470 471
** click-align's output is smaller; it generates output only for elements
   that require alignment information.  The need for alignment information
   is indicated by the character A in flags().

eddietwo's avatar
eddietwo committed
472 473
* Elements

Eddie Kohler's avatar
Eddie Kohler committed
474 475 476
** Linuxmodule elements FromDevice and PollDevice have a TIMESTAMP keyword
   argument, to force timestamps at device receive time.  Recent kernels
   don't timestamp received packets most of the time.
eddietwo's avatar
eddietwo committed
477

Eddie Kohler's avatar
Eddie Kohler committed
478 479 480 481 482 483 484
** Linuxmodule FromDevice, PollDevice, and ToDevice support the QUIET
   keyword argument.  Another change makes it easier to use these elements
   when there are many devices with the same Ethernet address.  Thanks to
   Cliff Frey.

** Greatly improved IPsec elements from Dimitris Syrivelis and Ioannis
   Avramopoulos.
eddietwo's avatar
eddietwo committed
485 486 487 488

** ToIPSummaryDump supports MD5 checksums (Vern Paxson request).

** Add support for PlanetLab Privileged Operations (proper) packet sending
eddietwo's avatar
eddietwo committed
489
   and receiving (thanks, Mark Huang).
eddietwo's avatar
eddietwo committed
490

Eddie Kohler's avatar
Eddie Kohler committed
491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506
** Script: The "run" handlers accepts arguments, which the script can refer
   to as $args, $1, $2, and so forth.  "goto exit" works.

** User-level FromDevice's SNIFFER argument now works.  SNIFFER false
   automatically installs a firewall rule that prevents the kernel from
   processing FromDevice's packets.  When Click stops, the rule is
   automatically removed.  Works only on Linux at the moment.

** More handlers for UDPIPEncap, ARPQuerier, ICMPPingSource, ICMPPingEncap,
   and others.

** Linuxmodule: Add experimental FromUserDevice and ToUserDevice elements,
   for communicating between kernel configurations and user level via /dev.
   Only available if --enable-experimental was supplied to configure.
   Thanks to Roman Chertov.

eddietwo's avatar
eddietwo committed
507 508 509 510
** Bug fixes, performance improvements, and extensions to many elements,
   including AddressTranslator, AverageCounter, BandwidthMeter,
   BeaconSource, ControlSocket, DSRRouteTable, DirectIPLookup, Discard,
   FromDevice, FromDump, FromNetFlowSummaryDump, FromSimDevice,
511 512 513 514
   HostEtherFilter, ICMPPingRewriter, ICMPRewriter, IP6Mirror,
   IPClassifier/IPFilter, IPEncap, IPMirror, IPNameInfo, InfiniteSource,
   KernelTap, KernelTun, LinuxIPLookup, RangeIPLookup, RawSocket, Reframe,
   Script, SetUDPChecksum, SimpleQueue, Socket, ToDevice, ToDump, ToHost,
eddietwo's avatar
eddietwo committed
515 516 517 518
   ToSimDevice, UDPIPEncap, UMLSwitch.

* Internals

Eddie Kohler's avatar
Eddie Kohler committed
519 520 521 522 523 524 525 526 527 528
** Initial and very preliminary support for multithreading at user level.
   If one of your elements plans to fork a new thread, compile Click with
   --enable-user-multithread.  Most of Click is still not thread safe, but
   this will fix some common problems, such as Packet reference counts.

** Introduce new cp_va_kparse() functions with a better interface than
   cp_va_parse().  Document confparse functions.

** Document and rewrite EWMA classes.

Eddie Kohler's avatar
Eddie Kohler committed
529
** Important bug fixes in Task will make notification more stable.
530

Eddie Kohler's avatar
Eddie Kohler committed
531 532
** Remove some deprecated member functions in String and Element
   (notify_ninputs() and notify_noutputs()).
eddietwo's avatar
eddietwo committed
533 534

** Fix bugs in lexing, notification, and Linux kernel module locking and
Eddie Kohler's avatar
Eddie Kohler committed
535 536
   SMP support.  Thanks especially to Joonwoo (Jason) Park for SMP patches
   and bug reports.
eddietwo's avatar
eddietwo committed
537 538 539 540 541

** String and StringAccum objects use specialized memory allocation
   functions, allowing very large Strings and StringAccums in kernel space.
   So do Queues.

Eddie Kohler's avatar
Eddie Kohler committed
542 543 544 545 546 547 548 549 550
** Compilation fixes for x86_64.  Thanks, Puneet Sood.

** A better hashcode() system uses templates and overloading, reducing the
   chance that an operator bool() will mistakenly be used as a hashcode().
   Thanks, Andrew Ratin.

** Use operator unspecified_bool_type() rather than operator bool() for
   similar reasons.

eddietwo's avatar
eddietwo committed
551 552
* Other bug fixes and improvements.

553 554
* Thanks to Nicola Arnoldi, Ioannis Avramopoulos, Salman Abdul Baset, Koen
  Beel, Kristian Beilke, Torquato Bertani, John Bicket, Bart Braem,
Eddie Kohler's avatar
Eddie Kohler committed
555 556 557 558 559 560 561 562 563
  Vladimir Bychkovsky, Marco Canini, Srivas Chennu, Szymon Chachulski,
  Roman Chertov, David Claffey, Beyers Cronje, Peter De Cleyn, Norbert Egi,
  Nick Feamster, Cliff Frey, Matt Gordon, Adam Greenhalgh, Mark Huang,
  Mathias Jeschke, Azeem Khan, Christian Kreibich, Mathias Kurth, Kevin
  Lahey, lastlijing yahoo com cn, Pierre-Emmanuel Le Roux, Nicolas Letor,
  Joe Maldonaldo, David Moore, Tim Morgan, Jim Mott-Smith, Jens Mueller,
  Arvid Nilsson, Joonwoo (Jason) Park, Vern Paxson, Max Poletto, Vivek
  Raghunathan, Roberto Riggio, Robert Ross, Bruce Simpson, Puneet Sood,
  Dimitris Syrivelis, Seiichi Tatsukawa, Andy Van Maele, Frederic Van
564 565
  Quickenborne, Wim Vandenberghe, Rob Wachol, and Mike Wilson, and anyone
  we inadvertently forgot to mention here.
eddietwo's avatar
eddietwo committed
566 567


568 569
Version 1.5.0   19.May.2006

eddietwo's avatar
eddietwo committed
570
* Linux 2.6.16.13 kernel module support, including support for packages.
571

eddietwo's avatar
eddietwo committed
572 573 574
* click-packages-1.5.0 supports SNMP and Netflow (donated by Mazu Networks)
  and multicast (preliminary).

575 576 577 578
* IP routing element improvements, including new, gloriously fast
  DirectIPLookup element (Marko Zec with kohler).

* Add new Script element, basically replacing PokeHandlers and
eddietwo's avatar
eddietwo committed
579 580
  DriverManager, with support for programmability and signal handling;
  check it out.
581

eddietwo's avatar
eddietwo committed
582
* New elements: ChangeUID, ListenEtherSwitch, RawSocket, Socket, Truncate,
583
  ARPPrint and CheckARPHeader (Jose Maria Gonzalez), many wifi elements.
584 585 586 587 588 589

* Deprecated elements: FromRawSocket, FromSocket, PokeHandlers, ToRawSocket,
  ToSocket.

* Polling version of Intel's e1000-5.7.6 driver.

eddietwo's avatar
eddietwo committed
590 591
* Bug fixes and extensions to many elements, including ARPQuerier,
  EtherSwitch, FromDAGDump, FromDevice (userlevel), ICMPPingSource,
592
  IPAddrRewriter, IPFilter/IPClassifier, IPPrint, LinkUnqueue,
593 594
  RandomBitErrors, RatedUnqueue, SetTimestamp, ToDevice (kernel and
  userlevel), ToIPSummaryDump.
595

eddietwo's avatar
eddietwo committed
596 597
* Integrated nsclick patch, and improved nsclick (Michael Voorhaen, Bart
  Braem, kohler).
598 599 600

* x86_64 support.

eddietwo's avatar
eddietwo committed
601 602
* Wifi (bicket)

603
** Most wifi elements have been removed from the repository.  They will be
eddietwo's avatar
eddietwo committed
604
   added back later as a separate package in click-packages.
605 606 607 608

* Internals

** Initiate Doxygen documentation for important base types, such as
eddietwo's avatar
eddietwo committed
609 610 611
   Element, String, Notifier, and so forth.  This project is not complete;
   as each class gets Doxygenated its interface tends to change, so be
   prepared.
612 613

** Add new port_count() method, allowing elements to declare how many ports
eddietwo's avatar
eddietwo committed
614 615 616
   they support.  This replaces Element::set_ninputs(), set_noutputs(),
   add_input(), add_output(), notify_ninputs(), and notify_noutputs(),
   which are all now deprecated.
617 618 619 620 621 622 623 624 625 626 627 628 629 630

** Add RAW handler flag, for handlers whose output should not be modified
   (for example, no adding a courtesy newline).

** Element::run_timer takes a Timer * argument.  The old version is
   deprecated.

** Add a new, general mechanism for named enumerations (such as IP
   protocols, TCP/UDP ports, addresses, and so forth), NameInfo/NameDB.

** Add ELEMENT_LIBS support, so an element can pull in a static library.

** Many bug fixes.

eddietwo's avatar
eddietwo committed
631 632
** Diagram library improvements.

633 634
* Thanks to Dan Aguayo, Mark Allman, Bart Braem, Kristof Cauwel, Spencer
  Chang, YenJung Chang, Jacky Cheng, Beyers Cronje, Weidong Cui, Anne
eddietwo's avatar
eddietwo committed
635
  Dudfield, Brian Gallaway, Michael Gellman, Chema Gonzalez, Andrew
636 637 638 639 640 641
  Gorelik, Adam Greenhalgh, Jason Haas, Trevor Harrison, Felipe Huici, Bart
  Jooris, Srikanth Kandula, Bob Keyes, Kevin Lahey, Dagang Li, Nikitas
  Liogkas, Yun Mao, Ross Mcilroy, Alastair McKinley, Indian Mogul, Thomas
  Paine, Ruoming Pang, Juncheol Park, Vern Paxson, Michael Voorhaen,
  Michael Walfish, Nick Weaver, Qinghua Ye, Marko Zec, and anyone else
  whose name was forgotten.
642 643


644
Version 1.4.3   5.Jan.2005
645 646 647 648

* Remove bonehead linuxmodule compile error.


eddietwo's avatar
eddietwo committed
649
Version 1.4.2   29.Dec.2004
eddietwo's avatar
eddietwo committed
650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681

* BSD kernel module support!  Implemented by Marko Zec, University of
  Zagreb.

* KernelTap is undeprecated.  (jbicket)

* User-level Click has FromHost and ToHost elements, at least on Linux!
  (jbicket)

* Add FullNoteQueue option.  FullNoteQueue informs upstream listeners when
  it's full.  Queue now invokes FullNoteQueue by default.  (kohler)

* New elements: Truncate, RandomSeed, IPAddrPairRewriter, SchedOrderTest.

* IPFilter/IPClassifier: Support "ip[POS:LEN]" and "transp[POS:LEN]"
  expressions.  (kohler)

* Add support for new-format DAG dumps, and more encapsulation types for
  FromDump, including 802.11 and PPP.  (kohler)

* ToIPSummaryDump will emit a dash for a field only if that field wasn't
  captured, rather than if the header wasn't captured.  For example, if the
  first 8 bytes of the TCP header were captured, ToIPSummaryDump will
  happily print the source and destination ports, but not anything further.
  (kohler)

* DriverManager: Add "loop" instruction, available at user level.  (kohler)

* Bug fixes, particularly to IPReassembler, click-fastclassifier,
  click-devirtualize (kohler), and fix the linuxmodule bug that led to
  errors like "wmem_alloc != 0" (jbicket).

jbicket's avatar
jbicket committed
682 683 684 685 686 687
* Fixes to wireless source routing elements (element/wifi/sr/) -
  gives each link a sequence number and age to prevent old linkstate
  from floating around in the network.  Also more documentation.
  (jbicket)

* Add header (click_wifi_extra) to replace prism header. Communicates
eddietwo's avatar
eddietwo committed
688
  with the device driver (things like transmission status, bitrate,
jbicket's avatar
jbicket committed
689 690 691
  retries, etc).  See ExtraEncap and ExtraDecap as well as FilterTX.
  (jbicket)

eddietwo's avatar
eddietwo committed
692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708
* Internal changes (kohler)

** Handler class rewritten. 

** Timers are stored in a heap; thanks to Jonathan K. Lee for an initial
   implementation.

** If you supply the --enable-task-heap option to ./configure, tasks will
   also be stored in a heap, rather than a linked list.

* Thanks to Peter De Cleyn, Holger Dreger, Thomer Gil, Jeff Gold, Bob
  Keyes, Peter Lippens, Nikitas Liogkas, Kevin Mitchell, Indian Mogul,
  Michele Mordenti, Vern Paxson, Marcel Poisot, Pavlin Radoslavov, Rick
  Stewart, Erik VandeKieft, Frederic Van Quickenborne, Erwin Van de Velde,
  Marko Zec.


eddietwo's avatar
eddietwo committed
709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725
Version 1.4.1   7.Jul.2004

* Added Element::static_initialize() and static_cleanup() methods.
  Elements use these methods to set up and tear down global state.  See the
  programming manual (doc/click.info*) for details.

* Fix click-mkmindriver (reported by Harvey Jones).

* Fix IPInputCombo (reported by Jerry Parente).

* Grid/Wifi updates (John Bicket).

* Add /click/messages handler.

* Updates so that Click may be compiled by gcc-3.4.1.


eddietwo's avatar
eddietwo committed
726
Version 1.4   29.Jun.2004
eddietwo's avatar
eddietwo committed
727

eddietwo's avatar
eddietwo committed
728
* Elements
eddietwo's avatar
eddietwo committed
729

jbicket's avatar
jbicket committed
730
** Major rearrangement of Grid/Wifi elements (John Bicket).  Add
eddietwo's avatar
eddietwo committed
731
   "--enable-wifi" configuration option, to select the wifi elements.
jbicket's avatar
jbicket committed
732 733 734 735 736 737 738 739 740 741
   There are elements in the elements/wifi/ap directory that will allow you
   to build an access point. Also, There is a driver available at 
   http://www.pdos.lcs.mit.edu/~jbicket/madwifi.stripped 
   that works with Atheros-based 802.11a/b/g cars which sends/receives
   802.11 packets.  To compile with that driver, download the driver and 
   then point configure at it using "--with-wifi=DIR".  The elements 
   WifiEncap and WifiDecap to encapsulate/decapsulate 802.3 packets 
   into 802.11 before they go to FromDev and after they come from ToDev.  
   Elements such as SetTXPower and SetTXRate allow per-packet transmit 
   control and bit-rate control, respectively.
eddietwo's avatar
eddietwo committed
742 743 744 745 746 747 748 749 750 751 752

** Add FromSocket, ToSocket, IPFlowRawSockets, FromRawSocket, and
   ToRawSocket elements from Mark Huang.  These elements let user-level
   configurations talk to the network over raw sockets.

** Add FromCapDump element, to support trace files generated by Mark
   Allman's cap tool.

** Add AggregatePacketCounter, EraseIPPayload, StoreData, ComparePackets,
   Message elements.

eddietwo's avatar
eddietwo committed
753 754 755 756
** Rename SortedTaskSched to BalancedThreadSched (the old name still works
   for now).  Its implementation also changed; rather than sort *all*
   tasks, it repeatedly moves tasks from the most-oversubscribed thread to
   the most-undersubscribed thread (in sorted order).
eddietwo's avatar
eddietwo committed
757

eddietwo's avatar
eddietwo committed
758
** DriverManager adds "save" and "append" instructions.
eddietwo's avatar
eddietwo committed
759

eddietwo's avatar
eddietwo committed
760
** ICMPSendPings can keep ping statistics, like a standalone ping program.
eddietwo's avatar
eddietwo committed
761 762 763 764

** AnonymizeIPAddr handles IP addresses in headers embedded within ICMP
   packets.

eddietwo's avatar
eddietwo committed
765 766 767 768 769 770 771 772
** IPSummaryDump elements change the format for TCP SACK options; the new
   format is "sack:N1-N2".

** Add syntax for bandwidths with units, such as "kb/s".

** Other improvements to DriverManager, RatedUnqueue, DelayShaper,
   CycleCountAccum, From/ToIPSummaryDump, ControlSocket.

eddietwo's avatar
eddietwo committed
773 774
** Bug fixes to StrideSched and others.

eddietwo's avatar
eddietwo committed
775 776 777 778 779 780 781
* Drivers

** The user-level driver will quit immediately if given a configuration
   with no elements.  It also supports the "--exit-handler" option.

* Bug fixes

eddietwo's avatar
eddietwo committed
782
** Fix compound element parsing.
eddietwo's avatar
eddietwo committed
783 784

** Fix race conditions on the task list.
eddietwo's avatar
eddietwo committed
785 786

** Fix bugs with "atomic_uint32_t::operator{&=,|=}", and fix their
eddietwo's avatar
eddietwo committed
787 788 789
   definitions on ARM.

** Fix user-level hotswapping.
eddietwo's avatar
eddietwo committed
790

eddietwo's avatar
eddietwo committed
791 792 793
** Fix TCP/UDP checksum calculation in the presence of IP source routing
   options.

eddietwo's avatar
eddietwo committed
794 795
** Support Click SMP again.

eddietwo's avatar
eddietwo committed
796 797
** Improve Linux patches (to correct bugs in AX25 and similar headers), and
   add a linux-2.4.26 patch.
eddietwo's avatar
eddietwo committed
798

eddietwo's avatar
eddietwo committed
799
* Internal changes
eddietwo's avatar
eddietwo committed
800

eddietwo's avatar
eddietwo committed
801 802 803 804 805 806 807 808 809
** Allow for multiple kinds of Notifiers, defined by name.

** Renamed the uatomic32_t type to atomic_uint32_t.

** Generate click-buildtool from click-buildtool.in.

** Remove Element::clone() function.

** Add more regression tests, improve 'testie'.
eddietwo's avatar
eddietwo committed
810 811


eddietwo's avatar
eddietwo committed
812
Version 1.4pre1   18.Mar.2004
813

eddietwo's avatar
eddietwo committed
814
* Major changes
815

eddietwo's avatar
eddietwo committed
816 817
** Huge Grid changes, bug fixes, new functionality, and restructuring into
   multiple directories.
818

eddietwo's avatar
eddietwo committed
819 820 821 822 823
** Scheduling rewrite. Previously, each Router object had its own set of
   "threads". In the kernel, this meant many Click kernel threads might be
   active during a configuration change, limiting how fast you could change
   configurations. Now all Routers share a single set of "threads", so
   configuration changes are faster and hopefully more reliable.
824

eddietwo's avatar
eddietwo committed
825
   Bugs remain. We would so appreciate testing help it's not funny.
826

eddietwo's avatar
eddietwo committed
827 828
** Userlevel driver: Support hotswapping. Hotswappable elements include
   ControlSocket, ChatterSocket, FromDump.
829

eddietwo's avatar
eddietwo committed
830
* New elements
831

eddietwo's avatar
eddietwo committed
832
** Add many Grid elements.
833

eddietwo's avatar
eddietwo committed
834 835 836
** Add FromNLANRDump (read directly from NLANR traces), FromTcpdump (read
   from ASCII tcpdump(1) output), LinkUnqueue (model a link including
   delay), SetTimestampDelta.
837

eddietwo's avatar
eddietwo committed
838
** Add SourceIPHashMapper element (Max Krohn).
839

eddietwo's avatar
eddietwo committed
840 841
** Add PortInfo and cp_tcpudp_port(): now you can refer to TCP/UDP ports by
   name in elements like UDPIPEncap.
842

eddietwo's avatar
eddietwo committed
843
* Element changes
844

eddietwo's avatar
eddietwo committed
845
** ControlSocket supports LLRPCs.
846

eddietwo's avatar
eddietwo committed
847 848
** IPClassifier and IPFilter support "ip hl", "ip id", and "ip vers";
   arbitrary >, >=, <, and <= comparisons; and ?: expressions.
849 850 851 852

** CheckIPHeader and friends accept packets with bad source addresses, as
   long as they are destined for the router. Added keyword arguments.

eddietwo's avatar
eddietwo committed
853 854 855 856 857 858 859 860 861
** SetTCPChecksum implements the correct checksum.

** ICMPError handles source-routed packets appropriately.

** FromIPSummaryDump supports ip_opt, ip_ttl, ip_tos, and tcp_ntopt types.

** Scheduler elements (such as StrideSched), packet dump elements (such as
   FromDump), and KernelTun use notification, reducing CPU overhead.

862 863 864 865 866
** Updates to AggregateCounter, AggregateIP, AggregateIPFlows, DelayShaper,
   ICMPPingSource, InfiniteSource, KernelTun, StoreIPAddress, TCPRewriter.

** SimpleQueue supports the (C++-only) yank() operation.

eddietwo's avatar
eddietwo committed
867
** Linuxmodule: Fix race condition in FromHost.
868

eddietwo's avatar
eddietwo committed
869 870 871 872 873 874 875 876 877 878 879 880 881 882 883
** Linuxmodule: ToHost watches for device up/down events.

* Language, configuration, and driver changes

** Compound elements support keyword arguments and __REST__ arguments.

** Add 'conf/click-mkclgw.pl', a script that reads a simple configuration
   file ('conf/example.clgw' for the format) and generates a NAT cluster
   gateway, supporting firewalls, reverse NAT mappings through the
   firewalls, and load-balanced clusters (Max Krohn).

** Userlevel: Remove --stop option.

** Userlevel: Use poll() instead of select() when available; supports more
   file descriptors.
884 885 886 887

** Linuxmodule: Add --enable-kassert configure option to enable kernel
   assertion checking.

eddietwo's avatar
eddietwo committed
888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919
** Support recursive element directories.

** Tool cleanups.

** Diagram macro updates.

* Internal changes

** Standardize on a single HashMap template class, called HashMap.

** String::c_str() is const.

** Add String functionality based on 'const char *' iterators (STL-like).

** Configuration fixes for Mac OS X.

** DeQueues can grow arbitrarily large in the kernel.

** Adjust startup sequence. Add click_static_initialize() to take care of
   common initialization steps.

** Handlers: Change the way global handlers are called.

** Add click_ether_vlan structure in <clicknet/ether.h>.

** Add tests and bug fixes (including Packet::shrink_data, IPMapper).

** ErrorHandler supports verbosity settings; other updates.

** Timers that stop the router prevent later timers from running.

** 'tickets' handlers are often writable.
920 921 922 923 924 925

** Remove compatibility functions.

** Add click_in_cksum_pseudohdr() function.


eddietwo's avatar
eddietwo committed
926
Version 1.3pre1   5.Mar.2003
927 928 929 930 931 932 933 934 935 936 937 938

* Incompatible changes

** The 'Queue' element is now a NotifierQueue. To access a queue without
   notification, use 'SimpleQueue'.

** The semantics of IPFilter 'deny' arguments have changed. Now, 'deny'
   means the same thing as 'drop'. The old behavior was inappropriately
   surprising.

** Deprecated KernelTap element in favor of KernelTun.

939 940
** Renamed MergeByTimestamp to TimeSortedSched.

941 942 943 944 945 946 947
** '--enable-clickfs' is the default. (Clickfs provides a symlink from
   /proc/click to /click to make upgrading easier.)

** Removed elements deprecated in 1.2.4. This includes LookupIPRoute,
   LookupIPRouteLinux, FromLinux, ToLinux, ToLinuxSniffers, PeekHandlers,
   ProbSplitter, and RandomLossage.

eddietwo's avatar
eddietwo committed
948 949
** Removed user-level Click driver's '--stop' option.

950 951 952 953 954 955 956 957 958
** The 'void Element::run_scheduled()' method has been deprecated; use
   'bool Element::run_task()' or 'void Element::run_timer()' instead.
   'run_task()'s bool return value should be true iff the task managed to
   do some useful work. (This helps the adaptive scheduler.)

** HandlerCall's interface has changed. So have the raw functions for
   accessing handlers from a Router object.

** Element map files now use an XML format, and are called 'elementmap.xml'
eddietwo's avatar
eddietwo committed
959
   and 'elementmap-PACKAGE.xml', not 'elementmap' and 'elementmap.PACKAGE'.
960 961

** LLRPCs now explicitly encode the amount of data they transfer to and
eddietwo's avatar
eddietwo committed
962 963
   from the caller, using the same mechanism as ioctl(). The local_llrpc()
   virtual method has been removed.
964

eddietwo's avatar
eddietwo committed
965 966
** Removed deprecated header files like <click/click_ip.h> (use
   <clicknet/ip.h> and similar).
967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989

** Changed ICMP structure and macro names in <clicknet/icmp.h>.

** Removed deprecated Element methods and method signatures, including
   'Element::uninitialize()', 'Element::configure(const Vector<String> &)',
   and 'Element::live_reconfigure(const Vector<String> &)'.

** Click declarations and definitions are now surrounded with CLICK_DECLS
   and CLICK_ENDDECLS macros (see any source file for an example). These
   macros normally do nothing. In the 'ns' driver, though, they drop all
   Click declarations into a separate namespace.

** Removed 'String::operator const char *()', which caused problems with
   newer GCCs.

* Drivers

** Add an optional adaptive task scheduler, written initially by Petros
   Zerfos <pzerfos@cs.ucla.edu>. Give 'configure' the '--enable-adaptive'
   option to turn it on. The adaptive scheduler takes less CPU time when
   Click isn't busy, and lets you control the minimum and maximum shares
   that Click will take of the CPU. This is particularly useful for the
   Linux kernel module, on a uniprocessor, for running user-level programs
eddietwo's avatar
eddietwo committed
990 991 992
   (tcpdump, for instance) as well as Click. The adaptive scheduler
   provides access to its parameters via handlers; see click.o(8) for more
   information.
993

eddietwo's avatar
eddietwo committed
994 995 996 997 998 999
** Integrated the 'nsclick' driver from the University of Colorado, and
   particularly by Michael Neufeld. This driver lets you integrate a Click
   router with an ns simulation; Click can accept ns packets and return
   packets to ns. See configure's '--enable-ns' option and the 'ns'
   subdirectory.

1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019
** Add support for Linux 2.4.20 and a newer Intel E1000 driver (4.3.15).

** Linux kernel module driver notices when other processes are waiting to
   access the task list (to unschedule a task, for example), and explicitly
   waits to give them a chance.

** Various Linux kernel module bug fixes, including a serious one in the
   SKB manager (mismeasured packet sizes could cause a kernel crash
   eventually).

** Add 'Task::strong_unschedule()', which moves tasks to the quiescent
   thread; that way, tasks will not run even if they are rescheduled.
   Useful in the presence of notification.

** Improve performance of add_select() and remove_select() at user level.

* Elements

** Add SetUDPChecksum, TimestampAccum, PaintSwitch, KernelTun, MixedQueue.

eddietwo's avatar
eddietwo committed
1020 1021 1022 1023 1024
** Add a set of elements for trace analysis via a new packet annotation,
   the aggregate annotation. Elements include AggregateIPFlows,
   ToIPFlowDumps, AggregateIP, AggregateLength, AggregateCounter,
   AggregateFilter, AggregateFirst, AggregateLast.

1025 1026 1027 1028 1029
** Added notification support to ToDevice, DelayUnqueue, Unqueue,
   ToIPSummaryDump, ToDump.

** FromIPSummaryDump and ToIPSummaryDump: Add optional binary format to
   save space and speed processing. Add 'aggregate', 'tcp_opt', 'tcp_sack',
eddietwo's avatar
eddietwo committed
1030 1031
   'tcp_window', 'first_timestamp', and 'ip_opt' content types.
   FromIPSummaryDump understands '!flowid' and '!aggregate' lines.
1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048

** FromDump and friends support 802.11 link types and the IPv6 Ethernet type.

** Extended or changed functionality for ToDump (optional output port),
   Counter (different keyword argument names), CycleCountAccum and
   PerfCountAccum (different handler names), ControlSocket (different
   select() plan for writes reduces needless spinning; READONLY is a
   keyword argument), DelayUnqueue (supports combination of long delays and
   fast rates), IPFragmenter (HONOR_DF is a keyword argument), SetIPAddress
   (supports live reconfiguration), UDPIPEncap (supports live
   reconfiguration), IPGWOptions (lazy packet copying and better behavior
   on bad options), ICMPError (accept mnemonic names for ICMP error types
   and codes), IPReassembler (optionally emit dead fragments to output 1).

** Bug fixes to FromIPSummaryDump, ToIPSummaryDump, IPReassembler,
   FromDump, ICMPRewriter, ICMPPingRewriter, ProgressBar, TCPRewriter,
   AddressInfo, ARPResponder, ToHost, ToHostSniffers, Classifier,
eddietwo's avatar
eddietwo committed
1049
   InfiniteSource, IPGWOptions, ICMPError, IPOutputCombo, SetTCPChecksum.
eddietwo's avatar
eddietwo committed
1050 1051 1052

* Tools

1053 1054 1055 1056
** Add click2xml tool, for translating a Click configuration into an XML
   format, and a preliminary version of xml2click, which goes the other
   way.

eddietwo's avatar
eddietwo committed
1057 1058 1059
** Changed meaning of click-mkmindriver's `-e' option. Now `-e' means
   `--expression' for consistency. `-E' means `--elements'.

1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075
** click-install supports the BSD kernel module.

** Bug fixes to click-devirtualize, click-install, click-xform,
   click-buildtool.

* Internals

** Add 'typename' where required to support newer GCCs.

** Add Packet::shrink_data(), Packet::icmp_header(), and some others.

** Change interface to BigHashMap iterators and BigHashMap_Arenas.

** At user-level, ErrorHandler supports '%[efgEFG]' conversions for
   doubles. To print an element declaration, say '%{element}' (not '%e').

eddietwo's avatar
eddietwo committed
1076
** Bug fixes to CLP, BigHashMap, ...
1077 1078 1079 1080 1081 1082 1083 1084 1085 1086

** Compiles cleanly on machines with 64-bit longs.

* Acknowledgements

** Thanks to AUTHORS, and (in no particular order) to YongKang Zhu, Filip
   Henderieckx, Vlemincx Koen, David Scott Page, Wang Po-Cheng, Adam Smith,
   Ryan Menezes, Gordon Lee, Chip Coldwell, Xiao Phong, Jose Vasconcellos,
   Tomasz Jaskolski, Bart Samwel, and anyone we've missed.

eddietwo's avatar
eddietwo committed
1087

eddietwo's avatar
eddietwo committed
1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154
Version 1.2.4   21.May.2002

* Drivers

** FreeBSD module updates from Luigi Rizzo.

** The Linux kernel module can support its own /proc-like file system,
   "clickfs". This file system is faster and takes less memory than the
   default /proc/click filesystem, and it is not subject to arbitrary
   limits on the number of files. Generally you will mount it under /click.
   (Click-install takes care of file system mounting and unmounting.) Give
   ./configure the --enable-clickfs option to enable clickfs (and disable
   /proc/click). Currently, clickfs only works under Linux 2.2. In the next
   release, it will also work under Linux 2.4, and --enable-clickfs will be
   the default.

** Fix several race conditions in the Linux kernel module.

** The user-level driver works on Solaris. Thanks to David Scott Page
   <page@cs.utexas.edu> for patches and suggestions.

* Elements

** Add notifier support. The NotifierQueue element acts like a Queue, but
   can reschedule downstream Tasks when packets arrive on a previously
   empty Queue. This can greatly reduce CPU usage. Several other elements
   listen for notification, including DelayUnqueue, Discard, and ToDevice.

** Rename FromLinux, ToLinux, and ToLinuxSniffers to FromHost, ToHost, and
   ToHostSniffers. The old names are still available.

** Classifier optimization algorithm changed. The new algorithm, based on
   dominators, is much faster for medium-to-large Classifiers.

** Add FromDAGDump element in the analysis package. This element reads DAG
   dumps (see http://dag.cs.waikato.ac.nz/).

** Add LinearIPLookup element, a version of StaticIPLookup that supports
   dynamically adding and removing routes.

** Add SortedIPLookup element, a version of LinearIPLookup that sorts its
   routes.

** Bug fixes and enhancements in AddressInfo, CheckIPHeader, DelayUnqueue,
   DriverManager, Linux FromDevice, FromDump, FromIPSummaryDump,
   FrontDropQueue, Grid elements, ICMPPingResponder, ICMPSendPings,
   IPAddrRewriter, IPFragmenter, IPPrint, IPReassembler, IPRewriter,
   IPRouteTable, RadixIPLookup, TCPRewriter, TimeFilter, ToIPSummaryDump,
   etc.

** Add RandomSwitch element.

** Add preliminary elements that support regression testing, in
   elements/test.

* Tools

** Add click-pretty tool, which pretty-prints Click configuration files as
   HTML.

** Click-install works for the FreeBSD kernel module.

** Click-install exits with nonzero exit status if the configuration could
   not be initialized.

* Internals

1155 1156 1157 1158
** The signatures for the `Element::configure()' and
   `Element::live_reconfigure()' methods have changed. Formerly, these
   methods took a `const Vector<String> &conf'. Now, they take a
   `Vector<String> &conf', and the methods may alter the `conf' argument
eddietwo's avatar
eddietwo committed
1159 1160 1161 1162
   however they'd like. The old signatures still work for backward
   compatibility, but they are deprecated, and will be removed in a future
   release.

1163 1164
** Deprecated `Element::uninitialize()' in favor of a new method,
   `Element::cleanup(CleanupStage stage)'. The `stage' argument, an
eddietwo's avatar
eddietwo committed
1165 1166 1167 1168 1169 1170
   enumerated value, says how far the element was initialized: not at all
   (CLEANUP_NO_ROUTER), configure() failed (CLEANUP_CONFIGURE_FAILED),
   configure() succeeded but initialize() was not called
   (CLEANUP_CONFIGURED), initialize() failed (CLEANUP_INITIALIZE_FAILED),
   initialize() succeeded but the router as a whole failed
   (CLEANUP_INITIALIZED), and the router initialized successfully,
1171 1172 1173 1174
   including this element (CLEANUP_ROUTER_INITIALIZED). So `uninitialize()'
   corresponded to `stage >= CLEANUP_INITIALIZED'.
   `Element::uninitialize()' works for now, but it will be removed in a
   future release.
eddietwo's avatar
eddietwo committed
1175

1176 1177
** The signature for the `Element::configuration()' method has also changed.
   It no longer takes a `bool *' argument.
eddietwo's avatar
eddietwo committed
1178 1179 1180

** Add cp_va_parse_remove_keywords() function, which removes keywords from
   an argument list.
1181

1182 1183 1184 1185 1186 1187 1188
** Moved network-header-structure #include files to include/clicknet. For
   instance, `#include <click/click_ip.h>' should now be written `#include
   <clicknet/ip.h>'. The old names still work, but will be removed in a
   future release.

** Renamed `IPAddress::mask_more_specific()' method to
   `IPAddress::mask_as_specific()', to emphasize that it allows equality.
1189

eddietwo's avatar
eddietwo committed
1190 1191 1192 1193 1194 1195 1196
** Changed click_ip6 header structure.

** Tools substantially rewritten. The tool library is now much easier to
   deal with, so tools should be easier to write, debug, and understand.

** Better handling of out-of-memory events.

1197
** Improved `Packet::uniqueify()' implementation: it now copies only the
eddietwo's avatar
eddietwo committed
1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208
   packet data, not both header and data.

** Click identifiers can no longer end with a slash.

* Acknowledgements

** Thanks to the usual suspects (AUTHORS), and to David Scott Page
   <page@cs.utexas.edu>, Luigi Rizzo <rizzo@aciri.org>, Eric Freudenthal
   <eric.freudenthal@nyu.edu> and Tao Zhao <taozhao@cs.nyu.edu>, and Jose
   Vasconcellos <jvasco@bellatlantic.net>.

1209

eddietwo's avatar
eddietwo committed
1210
Version 1.2.3   4.Dec.2001
1211

eddietwo's avatar
eddietwo committed
1212
* Drivers
1213

eddietwo's avatar
eddietwo committed
1214
** Linux kernel module: Rename Click kernel threads to "kclick".
1215

eddietwo's avatar
eddietwo committed
1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230
** User-level driver: Add `-e' option.

** Various Linux 2.4 improvements.

** FreeBSD driver is coming along nicely. You should compile this version
   of the driver against an *unmodified* FreeBSD kernel (RELENG_4 branch,
   version 440002 or later). Thanks to Luigi Rizzo, some of the
   improvements in the Click kernel patch have been checked in to the
   latest FreeBSD source! Bug fixes: can handle chained mbufs, etc.

** Better support for cross-compiling tools, via the `--enable-tools'
   configuration switch.

** Linux kernel module: Bug fixes, from Mazu, for dynamic installation and
   removal of devices, and for receiving large packets.
1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287

* Elements

** Added a collection of analysis-related elements; give
   `--enable-analysis' to ./configure. Elements include FromIPSummaryDump
   and ToIPSummaryDump (read and write ASCII summary files; see
   http://www.aciri.org/kohler/ipsumdump/), FromNetFlowSummaryDump (read
   ASCII NetFlow summary files), AnonymizeIPAddr (anonymize IP addresses
   while preserving prefixes), MergeByTimestamp (merge multiple time-sorted
   packet streams into a single time-sorted stream), TimeFilter (select
   packets by timestamp), and TimeRange (monitors packet timestamps).

** New elements: StripToNetworkHeader, ProgressBar (prints an ultra-cool
   progress bar to standard error), etc.

** CheckIPHeader and friends set the destination IP address annotation from
   the IP header's destination address.

** IPClassifier/IPFilter supports more >/>=/</<= comparisons, and gives
   better error messages on comparisons it does not support.

** RED handles long quiescent periods better. As a result, Queue and
   friends could remove their annoying _empty_jiffies member. Also, RED
   uses the Gentle variant recommended by the RED gods.

** Added AdaptiveRED element, by Jitendra Padhye <padhye@aciri.org>.

** FromDump can read from gzipped or bzipped tcpdump files.

** Deprecate RandomLossage and ProbSplitter elements in favor of new
   RandomSample element.

** Deprecate PeekHandlers in favor of PokeHandlers, whose syntax has been
   extended. The new PokeHandlers is incompatible with old PokeHandlers
   configuration strings.

** Bug fixes in ARPQuerier, FromDevice, ToDevice, FromDump,
   ICMPPingResponder, ControlSocket, DriverManager, IPRewriter and friends,
   Grid elements, Classifier.

** Added functionality to FromDevice, FromDump, Shaper, BandwidthShaper,
   PokeHandlers, DriverManager, Grid elements, Counter.

* Configuration parsing

** Configuration arguments that represent time can take suffixes like "h"
   for hours and "m" for minutes, as well as "s" for seconds, "ms" for
   milliseconds, and so forth.

** Bug fixes in cp_real unparsing.

** Add cp_double() and cpDouble, available only at user level.

** Fix static binding errors in configuration language. Also, configuration
   language supports `${VAR-DEFAULT}' variable reference syntax, which uses
   the text `DEFAULT' if `$VAR' is not set.

eddietwo's avatar
eddietwo committed
1288
* General
1289

eddietwo's avatar
eddietwo committed
1290 1291
** General configuration cleanup: Split config.h into multiple files to
   reduce needless recompilation; regularize symbols.
1292

eddietwo's avatar
eddietwo committed
1293 1294 1295
** Task improvements should make everything a bit more robust. For example,
   Task::unschedule() always unschedules the task right away; it grabs a
   lock.
1296 1297 1298

* Grid

eddietwo's avatar
eddietwo committed
1299 1300 1301 1302 1303 1304
** New startup scripts for generating Grid configurations.

** New elements implement Grid-level route tracing and statistics:
   GridProbeSender, GridProbeHandler, and GridProbeReplyReceiver.

** Extended logging code in old Grid elements.
1305 1306 1307 1308 1309 1310 1311

* Acknowledgements

** Thanks to the usual suspects (AUTHORS), and to Geir <kp13@gmx.co.uk>,
   Luigi Rizzo <rizzo@aciri.org>, and Atanu Ghosh <atanu@aciri.org>.


1312
Version 1.2.2   1.Sep.2001
eddietwo's avatar
eddietwo committed
1313

1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324
* General

** Added `etc/diagrams' directory, containing source code we use to
   generate Click diagrams.

** Added `etc/samplellrpc' directory, a simple program demonstrating how to
   poke a Linux kernel Click's LLRPC handlers with ioctl() calls.

** Added `etc/libclick' directory, which contains a self-sufficient
   distribution for building the Click user-level library.

eddietwo's avatar
eddietwo committed
1325
** Add `--enable-warp9' configuration option, which loosens element
1326 1327 1328 1329
   specifications to enable high-speed tests. For example, with
   `--enable-warp9' on, PollDevice does not set timestamps on packets it
   receives.

eddietwo's avatar
eddietwo committed
1330 1331
** Add `--enable-greedy' configuration option, which prevents the Linux
   kernel driver from giving up the CPU. Use only if you have multiple
1332
   CPUs. (Benjie Chen)
1333 1334 1335 1336 1337

** Many bug fixes.

* Drivers

1338 1339 1340
** Add preliminary support for a polling FreeBSD kernel driver!! (Nickolai
   B. Zeldovich)

1341 1342 1343
** Add polling support for EEpro 100 devices (Nickolai B. Zeldovich), and
   improve polling support for Tulip and Acenic (Benjie Chen, Nickolai).

1344 1345 1346
** Significantly more stable support for Linux 2.4, and update the kernel
   patch to Linux 2.4.9.

eddietwo's avatar
eddietwo committed
1347 1348 1349 1350 1351 1352 1353 1354
* Parsing

** Time arguments understand suffixes like "ms", for milliseconds, and
   "us", for microseconds. So you can say `1ms' or `2sec' or `5000usec'.

** Support IP prefix syntax like `192.111/16'. Requested by Vern Paxson
   <vern@aciri.org>.

1355 1356 1357
* Elements

** FromDump is significantly faster, supports new keyword arguments, and
eddietwo's avatar
eddietwo committed
1358 1359
   can read Linux tcpdump files. Also, FromDump supports FDDI
   encapsulation.
1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370

** ToDump can write to standard output.

** Removed deprecated elements HashDemux, PullToPush, FromBPF, and ToBPF.

** Fix bugs in Linux kernel module device elements: avoid dereferencing
   null devices, and be careful about device reference counts for Linux
   2.4.

** Bug fixes to IPRewriter, TCPRewriter, Switch, PullSwitch, ....

eddietwo's avatar
eddietwo committed
1371 1372
** Added functionality to ControlSocket, RED, FromLinux, FromDump, ....

1373
** Added SetPacketType, IPLookupRadix, ....
1374

1375 1376 1377 1378
** Renamed LookupIPRoute to StaticIPLookup, LookupIPRoute2 to
   RadixIPLookup, and LookupIPRouteLinux to LinuxIPLookup. The old names
   are still available.

1379 1380 1381 1382 1383
* Internal

** The format of `elements.conf' files has changed.

** The header files for ScheduleInfo, AddressInfo, AlignmentInfo, Error,
eddietwo's avatar
eddietwo committed
1384
   and DriverManager are stored in `<include/click/standard>'. This makes
1385 1386
   it simpler to distribute a self-contained Click library.

eddietwo's avatar
eddietwo committed
1387 1388 1389 1390
** Bug fix: Elements are uninitialized and destroyed in the reverse order
   from which they were initialized. Reported by Kyle Jamieson
   <jamieson@mit.edu>.

1391 1392
** Made most Click configuration tests into Autoconf macros in
   `acclick.m4'. This file may be shared among "Click-like" packages.
eddietwo's avatar
eddietwo committed
1393 1394 1395 1396 1397 1398

** Check for byte order, and provide CLICK_BYTE_ORDER configuration
   constant.

** Add Packet::tcp_header() and Packet::udp_header() convenience functions.

eddietwo's avatar
eddietwo committed
1399

1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459
Version 1.2.1   26.Jun.2001

* General

** Added preliminary support for Linux 2.4! The patch is in
   etc/linux-2.4.4-patch; it also applies to Linux 2.4.5. Click can receive
   and send packets, and there is preliminary support for polling, as well.
   We will be improving Linux 2.4's stability with time. Thanks to Nickolai
   B. Zeldovich.

** Many bug fixes, particularly to ARPResponder, ToLinux, LookupIPRoute,
   cp_unparse_real2, cpArguments.

** Updated etc/samplepackage to bring it up to date. It is a good starting
   point for building your own package.

* Elements

** In the kernel, FromDevice, PollDevice, and ToDevice watch for
   notifications when devices go up or down. Now you can remove a device
   that the Click configuration refers to; the relevant element will simply
   stop pushing or pulling packets. If you add the device back again, the
   relevant element will seamlessly attach to it. Also added the
   `ALLOW_NONEXISTENT' keyword argument to these elements.

** In the kernel, AddressInfo supports device names as Ethernet address
   shorthand. So you can say `EtherEncap(..., eth0, ...)' and it will use
   eth0's Ethernet address.

** Added KernelHandlerProxy element, and added the `PROXY' keyword argument
   to ControlSocket. Now you can use a ControlSocket to talk to a kernel
   configuration -- for example, with ClickController. Element donated by
   Mazu Networks, Inc.

** FromDump can read modified tcpdump files generated by Linux tcpdump.

** ICMPSendPings has more keyword arguments. ICMPPingResponder now sets the
   destination IP address annotation. ICMPRewriter can rewrite ping
   responses as well as TCP and UDP responses.

** Added DelayUnqueue, DelayShaper, and IP6Print elements.

* Tools

** Added click-flatten tool.

* C++ API changes

** Renamed `u_intXX_t' types to `uintXX_t'.

** Elements no longer need to `#include <click/package.hh>'.

** Added cpFilename confparse type at user level, which includes tilde
   expansion.

** `hashcode()', the function used by BigHashMap and HashMap to calculate
   hash values, is now an overloaded function, not a member function. See
   include/click/ipflowid.hh for an example.


1460
Version 1.2.0   3.May.2001
benjie's avatar
benjie committed
1461

eddietwo's avatar
eddietwo committed
1462
* General
benjie's avatar
benjie committed
1463

eddietwo's avatar
eddietwo committed
1464 1465 1466 1467
** Added support for Click multithreading: multiple processors processing
   packets through the Click configuration simultaneously. This required
   extensive source code changes and adding optional locks to several
   elements. Turn multithreading on at configure time with
1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486
   `--enable-multithread=[NTHREADS]'. Most elements in ip, standard, and
   linuxmodule are synchronized. SMP safe elements are marked with 
   ELEMENT_MT_SAFE(elementname) at the end of the .cc file. See
   http://www.pdos.lcs.mit.edu/papers/click:usenix01/ for a paper on SMP
   Click.
   
** Multithreading: User can use StaticThreadSched or SortedTaskSched elements
   to assign schedulable elements such as PollDevice and ToDevice to different
   threads. 
   
** Multithreading: Queue is not synchronized, but MSQueue and CPUQueue
   elements are SMP safe queue implementations. LookupIPRoute is not
   synchronized. Should use LookupIPRouteMP instead.

** Multithreading: ARPQuerier and IPRewriter have been synchronzied using
   spinlocks and readwrite locks.

** Added FastTCPFlows, FastUDPSrc, and FastUDPFlows elements. These elements
   can be used to generate test traffic.
benjie's avatar
benjie committed
1487

eddietwo's avatar
eddietwo committed
1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502
** Added preliminary support for cross-compilation. Everyone loves Doug!!

** Many bug fixes, and being careful about out-of-memory situations.

** Added support for special Intel-only assembly instructions, which make
   things faster. Turn it on at configure time with `--enable-intel-cpu'.

* Kernel driver

** Changed device polling interface: sk_buff recycling moved out of
   individual device drivers and into Click (linuxmodule/skbmgr.cc). This
   requires a different 2.2.18 patch. You will need to apply the patch in
   this distribution and recompile.

** Added a polling Intel EEPro 1000 gigabit driver, which can receive or
benjie's avatar
benjie committed
1503
   send up to 1.3 million 64 byte packets per second.
eddietwo's avatar
eddietwo committed
1504 1505 1506

** Added `accessible' and `priority' module parameters (see
   click-install(1)'s `--private' and `--priority' options).
benjie's avatar
benjie committed
1507 1508 1509

* Elements

eddietwo's avatar
eddietwo committed
1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523
** Kernel module device elements changed to use the new polling interface.
   See above.

** Added MarkIPCE element for ECN support.

** Added ECN syntax (`ip ect' and `ip ce') and `ip ttl' to IPFilter and
   IPClassifier.

** Added DriverManager element that says how to handle please_stop_driver()
   events.

** Added keyword arguments to Print, IPPrint, InfiniteSource, RatedSource,
   RED, TimedSource, ....

eddietwo's avatar
eddietwo committed
1524 1525
** Added ChatterSocket, DRRSched, PrintOld, PushNull, PullNull, and
   SetTimestamp elements.
eddietwo's avatar
eddietwo committed
1526 1527 1528 1529 1530

** Real number parsing functions handle overflow and rounding better.

** IPRewriter garbage collection optimizations from Benjie.

eddietwo's avatar
eddietwo committed
1531 1532 1533
** Added AddressTranslator, ProtocolTranslator46, ProtocolTranslator64
   elements that can translate between IPv6 networks and IPv4
   networks.
peilei's avatar
peilei committed
1534

eddietwo's avatar
eddietwo committed
1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556
* Tools

** Added click-mkmindriver(1).

** click-align(1) and click-devirtualize(1) bug fixes.

** Add `-C CLICKPATH' argument to all relevant tools.

* C++ API changes

** Added preliminary programmer documentation in Texinfo format
   (doc/click.texi). Removed old Element and Connection man pages, which
   were obsolete.

** The Element class no longer inherents from `ElementLink'. Elements that
   wish to be scheduled must include and initialize a `Task' object.

** Changed TimerHook type to `void (*)(Timer *, void *)'.

** Added Element methods `flow_code' and `configuration'.

** Renamed `Element::Connection' class to `Element::Port'.
benjie's avatar
benjie committed
1557

eddietwo's avatar
eddietwo committed
1558 1559
** Other changes.

benjie's avatar
benjie committed
1560

1561
Version 1.1   15.Dec.2000
1562

1563 1564 1565 1566 1567 1568 1569 1570 1571 1572
* Element packages

** Added support for element packages. An element package is a group of
   elements that can be dynamically loaded into a driver. Required several
   changes described below.

** Rearranged include files. All include files formerly in `lib/' are now
   stored in `include/click/' instead. Do not say `#include "element.hh"'
   any more; say `#include <click/element.hh>' instead. Similar statements
   hold for `<click/packet.hh>', `<click/confparse.hh>', and many others.
eddietwo's avatar
eddietwo committed
1573 1574
   Check under include/click for a full list. Required for element package
   support.
1575 1576 1577 1578 1579 1580 1581 1582 1583

** Every element should say `MOD_INC_USE_COUNT;' in its constructor and
   `MOD_DEC_USE_COUNT;' in its destructor. Required for element package
   support.

** Added a new directory, `etc/samplepackage', that demonstrates a simple
   element package. In particular, this shows how to write a Makefile for
   an element package.

1584 1585
* General

1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605
** Compound element semantics: Connecting to a compound element port whose
   corresponding `input' or `output' was not mentioned inside the compound
   element is now an error. Leaving a compound element input or output port
   unused is also an error.

** Compound element semantics: Added overloaded compound elements. A single
   compound element can have multiple definitions; Click uses the
   definition with matching numbers of arguments, input ports, and output
   ports. See click(5) for details.

** Restructured build tools: created `click-buildtool' and
   `click-mkelemmap'.

** Changed element documentation format: list of keywords follows `=s'. See
   elementdoc(7) for details.

** The `cp_va_parse' family of functions supports keyword arguments. Use
   cpKeywords, and see `elements/ip/ipprint.cc' for an example. Also
   supported: adding and removing argument types dynamically.

1606 1607 1608 1609 1610
** Added support for generic annotations, such as "a one-byte annotation
   stored in generic annotation byte 13". Transitioned many existing packet
   annotations to macro wrappers for generic annotations; see
   `include/click/packet_anno.hh'. New structure is more easily extensible.

1611 1612 1613 1614
** Many other bug fixes and configuration fixes.

* Elements

1615 1616 1617 1618 1619 1620 1621
** Added ICMPRewriter and ICMPPingRewriter for rewriting ICMP errors and
   ICMP pings, respectively.

** Reorganized ICMP elements into `elements/icmp' directory, and TCP/UDP
   elements into `elements/tcpudp' directory.

** IPRewriter and TCPRewriter quickly release completed TCP connections.
1622 1623 1624 1625 1626 1627 1628

** Improved IPFilter parsing functions and added some new protocols.

** CheckIPHeader, CheckIPHeader2, CheckICMPHeader, CheckTCPHeader, and
   CheckUDPHeader can print more detailed information about why they are
   dropping packets.

1629
** Fixed bugs in many elements, including ToDump and FromLinux.
1630

1631 1632 1633 1634 1635 1636
** Classifier optimization is now iterative, not recursive, which gets
   around problems with small kernel stacks.

** Removed 'PACKETS' or 'BYTES' argument to Counter. Now it always keeps
   track of both number of packets and number of bytes. Also added several
   LLRPCs.
1637 1638 1639

* Kernel driver

1640 1641
** Added patch for 2.2.18 kernel.

1642 1643 1644 1645
** Changed /proc/click file handling: Now closing a write handler file may
   report an error back to the user through the return value of close().
   Also, can remove Click kernel module even while someone has a file in
   /proc/click open.
eddietwo's avatar
eddietwo committed
1646

1647 1648
** Added TulipStats element for collecting information about Tulip
   performance.
1649

1650 1651 1652 1653
** Replaced old cycle-counting elements with SetCycleCount and
   CycleCountAccum, and similarly for performance counter elements (new
   elements are SetPerfCount and PerfCountAccum).

1654 1655
** Fixed crash when Linux and Click both sent packets out the same
   interface on an SMP machine.
1656

1657

eddietwo's avatar
eddietwo committed
1658
Version 1.1b1   4.Oct.2000
benjie's avatar
benjie committed
1659

1660 1661 1662 1663 1664
* Incompatible element changes

** Added support for parsing CIDR-style [Classless Inter-Domain Routing]
   netmasks in element configuration strings. Old-style netmasks are still
   supported, but you must use a slash, not a space. So for the 18.26.7
eddietwo's avatar
eddietwo committed
1665
   IP prefix, you can write either `18.26.7.0/255.255.255.0' or
1666 1667 1668 1669 1670 1671 1672 1673
   `18.26.7.0/24'. You will need to change the arguments to any
   ARPResponder, FromLinux, LookupIPRoute, LookupIPRoute2, and RIPSend
   elements in your configuration files.

** Deprecated FromBPF and ToBPF in favor of FromDevice and ToDevice. (But
   the arguments to FromDevice and ToDevice are the same as FromBPF and
   ToBPF.)

eddietwo's avatar
eddietwo committed
1674 1675 1676 1677
** The KernelTap element (formerly Tun) no longer takes a device name as
   the first argument; it chooses between /dev/tun and /dev/tap
   automatically. KernelTap also expects and produces ethernet-encapsulated
   packets (rather than IP), as the Ethernet type field lets it handle IPv6
1678 1679
   packets as well as IPv4.

eddietwo's avatar
eddietwo committed
1680 1681 1682
** Changed the third argument to RatedSource. Used to be a duration to send
   packets; now it is the number of packets to send.

eddietwo's avatar
eddietwo committed
1683
** The following elements have been renamed.
1684 1685

	OLD			NEW
eddietwo's avatar
eddietwo committed
1686
	------------------	------------------
1687
	CheckPaint*		PaintTee
eddietwo's avatar
eddietwo committed
1688
	FromBPF			FromDevice
1689 1690 1691 1692 1693 1694 1695
	HashDemux*		HashSwitch
	Meter			BandwidthMeter
	PacketMeter		Meter
	PacketShaper		Shaper
	PullToPush*		Unqueue
	SetIPAddress+		StoreIPAddress
	Shaper			BandwidthShaper
eddietwo's avatar
eddietwo committed
1696 1697
	ToBPF			ToDevice
	Tun			KernelTap
1698

eddietwo's avatar
eddietwo committed
1699 1700 1701
   * Old element name may still be used for this release, but is
     deprecated.
   + A new element has taken the name SetIPAddress.
1702

eddietwo's avatar
eddietwo committed
1703 1704
   Our apologies. We don't expect this kind of renaming will be a common
   event.
1705

eddietwo's avatar
eddietwo committed
1706 1707 1708
** 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.
1709

1710 1711
** Removed the SaveIPFields and IPsec elements (they were rotting).

1712
* Incompatible C++ API changes
1713

1714 1715 1716 1717
** 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.

1718 1719 1720 1721 1722 1723 1724 1725 1726
** 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.

1727 1728 1729 1730 1731 1732 1733 1734
** 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.

eddietwo's avatar
eddietwo committed
1735
** The `cp_DATATYPE' functions take pointers instead of references. This
eddietwo's avatar
eddietwo committed
1736
   makes their use easier to read.
1737

eddietwo's avatar
eddietwo committed
1738 1739 1740
** The `cp_DATATYPE' functions no longer take an optional `String *rest'
   argument. They always parse their argument string entirely.

1741 1742
** Changed Element method `bool configure_first() const' to `int
   configure_phase() const'. Now element classes can specify their relative
1743 1744 1745 1746 1747 1748 1749 1750 1751
   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'.)

eddietwo's avatar
x  
eddietwo committed
1752
** Other small changes and method renamings should have limited impact. For
1753
   instance, renamed `Element::number()' to `Element::eindex()'; removed
eddietwo's avatar
x  
eddietwo committed
1754 1755
   `Element::use()' and `Element::unuse()'; renamed
   `Element::change_configuration()' to `Element::set_configuration()' and
1756
   `Element::set_configuration_argument()'.
1757

eddietwo's avatar
eddietwo committed
1758 1759 1760 1761 1762
** 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.

eddietwo's avatar
eddietwo committed
1763 1764
* General

eddietwo's avatar
eddietwo committed
1765 1766 1767
** Added new `tickets' and `handlers' handlers, available by default on
   every element. Removed default `inputs' and `outputs' handlers,
   replacing them with `ports'.
eddietwo's avatar
eddietwo committed
1768

eddietwo's avatar
eddietwo committed
1769 1770
** Improved support for large numbers of handlers by reducing memory usage.

eddietwo's avatar
eddietwo committed
1771 1772
** Click configurations can contain cpp(1)-style `#line LINENUMBER' or `#
   LINENUMBER' directives. The tools generate them, too, so you will get
eddietwo's avatar
eddietwo committed
1773
   better error messages than before.
eddietwo's avatar
eddietwo committed
1774 1775 1776 1777 1778

** 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').
eddietwo's avatar
eddietwo committed
1779

1780 1781 1782 1783 1784 1785 1786
** 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.

1787 1788 1789 1790
** Lexer changes: Now single and double quotes are interpreted in
   configuration arguments vaguely as in Perl. Configuration argument
   parsing is generally more regular.

1791 1792
** Fixed bugs in real-number parsing and unparsing functions.

benjie's avatar
benjie committed
1793 1794
* User-level driver

1795 1796 1797 1798
** 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.

1799 1800 1801
** You can give shell globbing syntax to the user-level driver's `-h
   HANDLER' option; for example, `-h "*.config"'.
 
1802 1803
** Fixed FromBPF and ToBPF, finally. The fixed versions are called
   FromDevice and ToDevice.
eddietwo's avatar
eddietwo committed
1804

eddietwo's avatar
eddietwo committed
1805 1806 1807
** Added ControlSocket element so you can call handlers from other
   programs.

eddietwo's avatar
eddietwo committed
1808 1809
* Kernel driver

eddietwo's avatar
eddietwo committed
1810 1811 1812 1813 1814
** Added patch for Linux kernel 2.2.16. This patch contains the latest
   changes to Linux. While