Jan Rafaj - Update patch to 2.4.21 Sebastian Strollo - Fix "Dead-loop on netdevice imq"-issue Marcel Sebek - Update to 2.6.2-rc1 2004/06/30 - New version of IMQ patch to kernels <=2.6.7 including the following changes: - Correction of ipv6 support "+"s issue (Hasso Tepper) - Correction of imq_init_devs() issue that resulted in kernel OOPS unloading IMQ as module (Norbert Buchmuller) - Addition of functionality to choose number of IMQ devices during kernel config (Andre Correa) - Addition of functionality to choose how IMQ hooks on PRE and POSTROUTING (after or before NAT) (Andre Correa) - Cosmetic corrections (Norbert Buchmuller) (Andre Correa) 2005/12/16 - IMQ versions between 2.6.7 and 2.6.13 were released with almost no problems. 2.6.14-x was released with some important changes: nfcache was removed. After some weeks of trouble we figured out that some IMQ fields in skb were missing in skbuff.c - skb_clone and copy_skb_header. These functions are correctly patched by this new patch version. Thanks for all who helped to figure out all the problems with 2.6.14.x: Patrick McHardy, Rune Kock, VeNoMouS, Max CtRiX, Kevin Shanahan, Richard Lucassen, Valery Dachev (hopefully I didn't forget anybody). I apologize again for my lack of time. 2008/06/17 - 2.6.25 - Changed imq.c to use qdisc_run() instead of qdisc_restart() and moved qdisc_run() to tasklet to avoid recursive locking. New initialization routines to fix 'rmmod' not working anymore. Used code from ifb.c. (Jussi Kivilinna) 2008/08/06 - 2.6.26 - (JK) - Replaced tasklet with 'netif_schedule()'. - Cleaned up and added comments for imq_nf_queue(). 2009/04/12 - Add skb_save_cb/skb_restore_cb helper functions for backuping control buffer. This is needed because qdisc-layer on kernels 2.6.27 and newer overwrite control buffer. (Jussi Kivilinna) - Add better locking for IMQ device. Hopefully this will solve SMP issues. (Jussi Kivilinna) - Port to 2.6.27 - Port to 2.6.28 - Port to 2.6.29 + fix rmmod not working 2009/04/20 - (Jussi Kivilinna) - Use netdevice feature flags to avoid extra packet handling by core networking layer and possibly increase performance. 2009/09/26 - (Jussi Kivilinna) - Add imq_nf_reinject_lockless to fix deadlock with imq_nf_queue/imq_nf_reinject. 2009/12/08 - (Jussi Kivilinna) - Port to 2.6.32 - Add check for skb->nf_queue_entry==NULL in imq_dev_xmit() - Also add better error checking for skb->nf_queue_entry usage 2010/02/25 - (Jussi Kivilinna) - Port to 2.6.33 2010/08/15 - (Jussi Kivilinna) - Port to 2.6.35 - Simplify hook registration by using nf_register_hooks. - nf_reinject doesn't need spinlock around it, therefore remove imq_nf_reinject function. Other nf_reinject users protect their own data with spinlock. With IMQ however all data is needed is stored per skbuff, so no locking is needed. - Changed IMQ to use 'separate' NF_IMQ_QUEUE instead of NF_QUEUE, this allows working coexistance of IMQ and other NF_QUEUE users. - Make IMQ multi-queue. Number of IMQ device queues can be increased with 'numqueues' module parameters. Default number of queues is 1, in other words by default IMQ works as single-queue device. Multi-queue selection is based on IFB multi-queue patch by Changli Gao . 2011/03/18 - (Jussi Kivilinna) - Port to 2.6.38 2011/07/12 - (syoder89@gmail.com) - Crash fix that happens when the receiving interface has more than one queue (add missing skb_set_queue_mapping in imq_select_queue). 2011/07/26 - (Jussi Kivilinna) - Add queue mapping checks for packets exiting IMQ. - Port to 3.0 2011/08/16 - (Jussi Kivilinna) - Clear IFF_TX_SKB_SHARING flag that was added for linux 3.0.2 2011/11/03 - Germano Michel - Fix IMQ for net namespaces 2011/11/04 - Jussi Kivilinna - Port to 3.1 - Clean-up, move 'get imq device pointer by imqX name' to separate function from imq_nf_queue(). 2012/01/05 - Jussi Kivilinna - Port to 3.2 2012/03/19 - Jussi Kivilinna - Port to 3.3 2012/12/12 - Jussi Kivilinna - Port to 3.7 - Fix checkpatch.pl warnings 2013/09/10 - Jussi Kivilinna - Fixed GSO handling for 3.10, see imq_nf_queue() for comments. - Don't copy skb->cb_next when copying or cloning skbuffs. 2013/09/16 - Jussi Kivilinna - Port to 3.11 2013/11/12 - Jussi Kivilinna - Port to 3.12 2015/06/15 - Feng Gao - Port to 3.14 - Pop and send one packet when push one packet into the IMQ queue. It could enhance the IMQ performance about 20%. 2015/06/18 - Feng Gao - Port to 3.18 2015/06/18 - Feng Gao - Fix the hang issue caused by the imq rule exists in the localout hook in process context - Fix the crash issue caused by that shutdown the interfaces before remove imq rules 2015/06/19 - Feng Gao - Port to 4.0 Also, many thanks to pablo Sebastian Greco for making the initial patch and to those who helped the testing.