forked from tbarbette/fastclick
-
Notifications
You must be signed in to change notification settings - Fork 0
/
NEWS
2139 lines (1446 loc) · 79.9 KB
/
NEWS
1
2
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
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
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
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
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
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
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
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
Click NEWS
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.
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.
Version 2.0 16.Jul.2011
* 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.
* Performance improvements
** 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).
** 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.
** Timers: A 4-heap improves performance with very large numbers of timers.
** 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.
** The round-robin scheduler (--disable-stride) works again.
** New configure option --enable-bound-port-transfer slightly optimizes
push() and pull() calls (Cliff Frey).
* Language changes
** New "require(library FILE)" allows one Click script to include another
(Christian Kreibich).
** 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".
** Element groups cleanly express short detours from a connection path.
For example, this:
c :: Classifier(00/01);
x -> c -> y;
c [1] -> Paint(1) -> y;
can be expressed like this:
x -> c :: Classifier(00/01) => (
[0] -> [0]; [1] -> Paint(1) -> [0]
) -> y;
* Multithreading
** Many performance and stability improvements to multithreaded
configurations, particularly at userlevel.
** Lazy Task rescheduling reduces opportunities for bugs.
** 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.
* Linuxmodule
** Patchless installs are on by default. Click installs and works without
a patch on many versions of Linux up to 2.6.38.
* Clicky changes
** Per-router styles: ClickyInfo elements let a script specify how it
should be drawn.
** "Run" and "Stop" buttons can execute a configuration.
* Internals
** 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.
** TokenBucket: This new template class supports fast, flexible,
integer-based token bucket rate management.
** 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.
** 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.
Version 1.8.0 28.Feb.2010
* 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.
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.
* 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!
* Clicky GUI bug fixes, visual improvements.
* 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.
* New elements: IP6Encap, MarkMACHeader, QuickNoteQueue, Script, SetIPECN,
SimpleIdle, SimplePullSwitch.
* Element bug fixes: ARPQuerier/ARPTable (memory corruption bug),
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.
* 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,
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
Weaver.
Version 1.7.0rc1 7.Mar.2009
* 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.
* 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.
* 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.
Version 1.6.0 18.Sep.2007
* 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).
** 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.
** Improved stability for e1000-5.x drivers (Kevin Lahey), e1000-6.x
drivers (Beyers Cronje, Adam Greenhalgh, Joonwoo Park), and e1000-7.x
drivers (Max Poletto, Roman Chertov).
** Improved stability for Linux kernel module.
** Improved SMP Click. For instance, removed NotifierQueue race
conditions. Thanks very much to Joonwoo Park.
** click-viz is integrated into click-pretty.
** click-fastclassifier and click-devirtualize work.
** 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().
* Elements
** 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.
** 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.
** ToIPSummaryDump supports MD5 checksums (Vern Paxson request).
** Add support for PlanetLab Privileged Operations (proper) packet sending
and receiving (thanks, Mark Huang).
** 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.
** Bug fixes, performance improvements, and extensions to many elements,
including AddressTranslator, AverageCounter, BandwidthMeter,
BeaconSource, ControlSocket, DSRRouteTable, DirectIPLookup, Discard,
FromDevice, FromDump, FromNetFlowSummaryDump, FromSimDevice,
HostEtherFilter, ICMPPingRewriter, ICMPRewriter, IP6Mirror,
IPClassifier/IPFilter, IPEncap, IPMirror, IPNameInfo, InfiniteSource,
KernelTap, KernelTun, LinuxIPLookup, RangeIPLookup, RawSocket, Reframe,
Script, SetUDPChecksum, SimpleQueue, Socket, ToDevice, ToDump, ToHost,
ToSimDevice, UDPIPEncap, UMLSwitch.
* Internals
** 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.
** Important bug fixes in Task will make notification more stable.
** Remove some deprecated member functions in String and Element
(notify_ninputs() and notify_noutputs()).
** Fix bugs in lexing, notification, and Linux kernel module locking and
SMP support. Thanks especially to Joonwoo (Jason) Park for SMP patches
and bug reports.
** String and StringAccum objects use specialized memory allocation
functions, allowing very large Strings and StringAccums in kernel space.
So do Queues.
** 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.
* Other bug fixes and improvements.
* Thanks to Nicola Arnoldi, Ioannis Avramopoulos, Salman Abdul Baset, Koen
Beel, Kristian Beilke, Torquato Bertani, John Bicket, Bart Braem,
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
Quickenborne, Wim Vandenberghe, Rob Wachol, and Mike Wilson, and anyone
we inadvertently forgot to mention here.
Version 1.5.0 19.May.2006
* Linux 2.6.16.13 kernel module support, including support for packages.
* click-packages-1.5.0 supports SNMP and Netflow (donated by Mazu Networks)
and multicast (preliminary).
* IP routing element improvements, including new, gloriously fast
DirectIPLookup element (Marko Zec with kohler).
* Add new Script element, basically replacing PokeHandlers and
DriverManager, with support for programmability and signal handling;
check it out.
* New elements: ChangeUID, ListenEtherSwitch, RawSocket, Socket, Truncate,
ARPPrint and CheckARPHeader (Jose Maria Gonzalez), many wifi elements.
* Deprecated elements: FromRawSocket, FromSocket, PokeHandlers, ToRawSocket,
ToSocket.
* Polling version of Intel's e1000-5.7.6 driver.
* Bug fixes and extensions to many elements, including ARPQuerier,
EtherSwitch, FromDAGDump, FromDevice (userlevel), ICMPPingSource,
IPAddrRewriter, IPFilter/IPClassifier, IPPrint, LinkUnqueue,
RandomBitErrors, RatedUnqueue, SetTimestamp, ToDevice (kernel and
userlevel), ToIPSummaryDump.
* Integrated nsclick patch, and improved nsclick (Michael Voorhaen, Bart
Braem, kohler).
* x86_64 support.
* Wifi (bicket)
** Most wifi elements have been removed from the repository. They will be
added back later as a separate package in click-packages.
* Internals
** Initiate Doxygen documentation for important base types, such as
Element, String, Notifier, and so forth. This project is not complete;
as each class gets Doxygenated its interface tends to change, so be
prepared.
** Add new port_count() method, allowing elements to declare how many ports
they support. This replaces Element::set_ninputs(), set_noutputs(),
add_input(), add_output(), notify_ninputs(), and notify_noutputs(),
which are all now deprecated.
** 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.
** Diagram library improvements.
* Thanks to Dan Aguayo, Mark Allman, Bart Braem, Kristof Cauwel, Spencer
Chang, YenJung Chang, Jacky Cheng, Beyers Cronje, Weidong Cui, Anne
Dudfield, Brian Gallaway, Michael Gellman, Chema Gonzalez, Andrew
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.
Version 1.4.3 5.Jan.2005
* Remove bonehead linuxmodule compile error.
Version 1.4.2 29.Dec.2004
* 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).
* 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
with the device driver (things like transmission status, bitrate,
retries, etc). See ExtraEncap and ExtraDecap as well as FilterTX.
(jbicket)
* 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.
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.
Version 1.4 29.Jun.2004
* Elements
** Major rearrangement of Grid/Wifi elements (John Bicket). Add
"--enable-wifi" configuration option, to select the wifi elements.
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.
** 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.
** 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).
** DriverManager adds "save" and "append" instructions.
** ICMPSendPings can keep ping statistics, like a standalone ping program.
** AnonymizeIPAddr handles IP addresses in headers embedded within ICMP
packets.
** 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.
** Bug fixes to StrideSched and others.
* Drivers
** The user-level driver will quit immediately if given a configuration
with no elements. It also supports the "--exit-handler" option.
* Bug fixes
** Fix compound element parsing.
** Fix race conditions on the task list.
** Fix bugs with "atomic_uint32_t::operator{&=,|=}", and fix their
definitions on ARM.
** Fix user-level hotswapping.
** Fix TCP/UDP checksum calculation in the presence of IP source routing
options.
** Support Click SMP again.
** Improve Linux patches (to correct bugs in AX25 and similar headers), and
add a linux-2.4.26 patch.
* Internal changes
** 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'.
Version 1.4pre1 18.Mar.2004
* Major changes
** Huge Grid changes, bug fixes, new functionality, and restructuring into
multiple directories.
** 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.
Bugs remain. We would so appreciate testing help it's not funny.
** Userlevel driver: Support hotswapping. Hotswappable elements include
ControlSocket, ChatterSocket, FromDump.
* New elements
** Add many Grid elements.
** Add FromNLANRDump (read directly from NLANR traces), FromTcpdump (read
from ASCII tcpdump(1) output), LinkUnqueue (model a link including
delay), SetTimestampDelta.
** Add SourceIPHashMapper element (Max Krohn).
** Add PortInfo and cp_tcpudp_port(): now you can refer to TCP/UDP ports by
name in elements like UDPIPEncap.
* Element changes
** ControlSocket supports LLRPCs.
** IPClassifier and IPFilter support "ip hl", "ip id", and "ip vers";
arbitrary >, >=, <, and <= comparisons; and ?: expressions.
** CheckIPHeader and friends accept packets with bad source addresses, as
long as they are destined for the router. Added keyword arguments.
** 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.
** Updates to AggregateCounter, AggregateIP, AggregateIPFlows, DelayShaper,
ICMPPingSource, InfiniteSource, KernelTun, StoreIPAddress, TCPRewriter.
** SimpleQueue supports the (C++-only) yank() operation.
** Linuxmodule: Fix race condition in FromHost.
** 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.
** Linuxmodule: Add --enable-kassert configure option to enable kernel
assertion checking.
** 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.
** Remove compatibility functions.
** Add click_in_cksum_pseudohdr() function.
Version 1.3pre1 5.Mar.2003
* 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.
** Renamed MergeByTimestamp to TimeSortedSched.
** '--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.
** Removed user-level Click driver's '--stop' option.
** 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'
and 'elementmap-PACKAGE.xml', not 'elementmap' and 'elementmap.PACKAGE'.
** LLRPCs now explicitly encode the amount of data they transfer to and
from the caller, using the same mechanism as ioctl(). The local_llrpc()
virtual method has been removed.
** Removed deprecated header files like <click/click_ip.h> (use
<clicknet/ip.h> and similar).
** 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 <[email protected]>. 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
(tcpdump, for instance) as well as Click. The adaptive scheduler
provides access to its parameters via handlers; see click.o(8) for more
information.
** 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.
** Add support for Linux 2.4.20 and a newer Intel E1000 driver (4.3.15).