Cleanup: Removed unused patches
authorArne Fitzenreiter <arne_f@ipfire.org>
Fri, 1 May 2009 11:49:52 +0000 (13:49 +0200)
committerArne Fitzenreiter <arne_f@ipfire.org>
Fri, 1 May 2009 11:49:52 +0000 (13:49 +0200)
52 files changed:
lfs/cdrtools
lfs/gcc
lfs/linux
lfs/openswan
src/patches/binutils-uclibc-conf.patch [deleted file]
src/patches/binutils-uclibc-libtool-conf.patch [deleted file]
src/patches/bzip2-1.0.3-bzgrep_security-1.patch [deleted file]
src/patches/cdrtools-2.01-ascii-2.patch [deleted file]
src/patches/cdrtools-2.01-mkisofs_iconv-1.patch [deleted file]
src/patches/gcc-pr28045.patch [deleted file]
src/patches/iptables-1.3.0-imq1.diff [deleted file]
src/patches/iptables-1.3.6-imq.diff [deleted file]
src/patches/iptables-1.4.1-imq.diff [deleted file]
src/patches/libdlna-0.2.3-ffmpeg_not_found.patch [deleted file]
src/patches/libpcap-0.8.3-ppp.patch [deleted file]
src/patches/libpcap-0.8.3-shared.patch [deleted file]
src/patches/linux-2.6.20-hwmon-coretemp.patch [deleted file]
src/patches/linux-2.6.20-imq.diff [deleted file]
src/patches/linux-2.6.20.21-additional_check_on_BER_decoding.patch [deleted file]
src/patches/linux-2.6.20.21-zd1211-usrobotics-usbid.patch [deleted file]
src/patches/linux-2.6.23-imq.diff [deleted file]
src/patches/linux-2.6.23-ueagle-atm-devolo_usb_id.patch [deleted file]
src/patches/linux-2.6.23.17-ipp2p-0.8.2-pomng.patch [deleted file]
src/patches/linux-2.6.25-imq5.diff [deleted file]
src/patches/linux-2.6.25.17-ipp2p-0.8.2-pomng.patch [deleted file]
src/patches/linux-2.6.27-disable_mISDNv2.patch [deleted file]
src/patches/mISDN-avmfritz.patch [deleted file]
src/patches/mISDN-remove2.6.27-dsp-features.diff [deleted file]
src/patches/module-init-tools-3.2.2-modprobe-1.patch [deleted file]
src/patches/mpg123-0.59r-makefile.patch [deleted file]
src/patches/mpg123-0.59r-security-1.patch [deleted file]
src/patches/openswan-2.4.12-startklips-1.patch [deleted file]
src/patches/openswan-2.4.9-clear-1.patch [deleted file]
src/patches/openswan-2.4.9-updown-1.patch [deleted file]
src/patches/openswan-2.4.9-updown_x509-1.patch [deleted file]
src/patches/openswan-2.4.x.kernel-2.6.23-natt.patch [deleted file]
src/patches/qemu-0.9.1-enforce-16byte-stack-boundary.patch [deleted file]
src/patches/qemu-0.9.1-gcc4-hacks.patch [deleted file]
src/patches/qemu-0.9.1-gcc4-opts.patch [deleted file]
src/patches/qemu-0.9.1-gcc4.patch [deleted file]
src/patches/r8169-dlink_linksys.patch [deleted file]
src/patches/reiser4-for-2.6.23.patch [deleted file]
src/patches/squidGuard-1.3-20071117.patch [deleted file]
src/patches/tar-1.15.1-gcc4_fix_tests-1.patch [deleted file]
src/patches/tar-1.15.1-security_fixes-1.patch [deleted file]
src/patches/tar-1.15.1-sparse_fix-1.patch [deleted file]
src/patches/tcpdump-3.8.2-bgp-dos-2.patch [deleted file]
src/patches/tcpdump-3.8.2-bgp-dos.patch [deleted file]
src/patches/tcpdump-3.8.2-isis-dos.patch [deleted file]
src/patches/tcpdump-3.8.2-ldp-dos.patch [deleted file]
src/patches/tcpdump-3.8.2-rsvp-dos.patch [deleted file]
src/patches/xen_skbuff.diff [deleted file]

index e36d1fabdf58c35bf513c3ffaf4482ff37fe8cfd..2d191bb6503c048668e742197204d2e79b97e7bf 100644 (file)
@@ -70,8 +70,6 @@ $(subst %,%_MD5,$(objects)) :
 $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
        @$(PREBUILD)
        @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE)
-       #cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/cdrtools-2.01-mkisofs_iconv-1.patch
-       #cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/cdrtools-2.01-ascii-2.patch
        cd $(DIR_APP) && make INS_BASE=/usr DEFINSUSR=root DEFINSGRP=root $(MAKETUNING)
        cd $(DIR_APP) && make INS_BASE=/usr DEFINSUSR=root DEFINSGRP=root install
        @rm -rf $(DIR_APP)
diff --git a/lfs/gcc b/lfs/gcc
index 1f9021c05be0c208a3ef389641fd096a5048657b..c56fc7361077aec0b99d838fe2de57b8c6228e4c 100644 (file)
--- a/lfs/gcc
+++ b/lfs/gcc
@@ -148,7 +148,6 @@ $(subst %,%_MD5,$(objects)) :
 $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
        @$(PREBUILD)
        @rm -rf $(DIR_APP) $(DIR_SRC)/gcc-build && cd $(DIR_SRC) && tar jxf $(DIR_DL)/$(DL_FILE)
-#      cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/gcc-pr28045.patch
        @mkdir $(DIR_SRC)/gcc-build
 ifeq "$(ROOT)" ""
 ifeq "$(INST)" "1"
index fcd74562e6dd811271504e30aa5cb16c05dc532a..12275354bcdfbccc0b218ee6dda1070d16d02ccc 100644 (file)
--- a/lfs/linux
+++ b/lfs/linux
@@ -183,9 +183,6 @@ endif
        # Not report deprecated syscall 1.23 (for kudzu)
        cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-2.6.25.18-not_report_sysctl_1.23.patch
     
-       # Openswan
-       #cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/openswan-2.4.x.kernel-2.6.23-natt.patch
-
        # Reiser4
        cd $(DIR_APP) && bzip2 -d -c $(DIR_DL)/reiser4-for-2.6.27.19.patch.bz2 | patch -Np1
        
index cab7c8d204e9d27e6754abafbb58caa4061c50b9..dbb18856e5aea1f666ca5b9b1229af650c73bd95 100644 (file)
@@ -118,7 +118,6 @@ else
        
        cd /usr/lib/ipsec && patch -Np0 < $(DIR_SRC)/src/patches/openswan-2.6.16-startklips-1.patch
        cd /usr/lib/ipsec && patch -Np0 < $(DIR_SRC)/src/patches/openswan-2.6.16-updown.klips-1.patch
-#      cd /usr/lib/ipsec && patch -Np0 < $(DIR_SRC)/src/patches/openswan-2.4.9-updown_x509-1.patch
        cd /etc/ipsec.d/policies && patch -Np0 < $(DIR_SRC)/src/patches/openswan-2.6.16-clear-1.patch
 endif  
        #@rm -rf $(DIR_APP)
diff --git a/src/patches/binutils-uclibc-conf.patch b/src/patches/binutils-uclibc-conf.patch
deleted file mode 100644 (file)
index 7c0a726..0000000
+++ /dev/null
@@ -1,586 +0,0 @@
-diff -ur binutils-2.15.97.orig/bfd/config.bfd binutils-2.15.97/bfd/config.bfd
---- binutils-2.15.97.orig/bfd/config.bfd       2005-04-29 20:48:14.000000000 -0400
-+++ binutils-2.15.97/bfd/config.bfd    2005-04-29 20:53:50.000000000 -0400
-@@ -140,7 +140,7 @@
-     targ_defvec=ecoffalpha_little_vec
-     targ_selvecs=bfd_elf64_alpha_vec
-     ;;
--  alpha*-*-linux-gnu* | alpha*-*-elf*)
-+  alpha*-*-linux-* | alpha*-*-elf*)
-     targ_defvec=bfd_elf64_alpha_vec
-     targ_selvecs=ecoffalpha_little_vec
-     ;;
-@@ -150,7 +150,7 @@
-   alpha*-*-*)
-     targ_defvec=ecoffalpha_little_vec
-     ;;
--  ia64*-*-freebsd* | ia64*-*-netbsd* | ia64*-*-linux-gnu* | ia64*-*-elf* | ia64*-*-kfreebsd*-gnu)
-+  ia64*-*-freebsd* | ia64*-*-netbsd* | ia64*-*-linux-* | ia64*-*-elf* | ia64*-*-kfreebsd*-gnu)
-     targ_defvec=bfd_elf64_ia64_little_vec
-     targ_selvecs="bfd_elf64_ia64_big_vec bfd_efi_app_ia64_vec"
-     ;;
-@@ -227,7 +227,7 @@
-     targ_defvec=bfd_elf32_littlearm_vec
-     targ_selvecs=bfd_elf32_bigarm_vec
-     ;;
--  armeb-*-elf | arm*b-*-linux-gnu*)
-+  armeb-*-elf | arm*b-*-linux-*)
-     targ_defvec=bfd_elf32_bigarm_vec
-     targ_selvecs=bfd_elf32_littlearm_vec
-     ;;
-@@ -235,7 +235,7 @@
-     targ_defvec=bfd_elf32_littlearm_vec
-     targ_selvecs=bfd_elf32_bigarm_vec
-     ;;
--  arm-*-elf | arm-*-freebsd* | arm*-*-linux-gnu* | arm*-*-conix* | \
-+  arm-*-elf | arm-*-freebsd* | arm*-*-linux-* | arm*-*-conix* | \
-   arm*-*-uclinux* | arm-*-kfreebsd*-gnu | \
-   arm*-*-eabi* )
-     targ_defvec=bfd_elf32_littlearm_vec
-@@ -385,7 +385,7 @@
-     ;;
- #ifdef BFD64
--  hppa*64*-*-linux-gnu*)
-+  hppa*64*-*-linux-*)
-     targ_defvec=bfd_elf64_hppa_linux_vec
-     targ_selvecs=bfd_elf64_hppa_vec
-     ;;
-@@ -396,7 +396,7 @@
-     ;;
- #endif
--  hppa*-*-linux-gnu*)
-+  hppa*-*-linux-*)
-     targ_defvec=bfd_elf32_hppa_linux_vec
-     targ_selvecs=bfd_elf32_hppa_vec
-     ;;
-@@ -529,7 +529,7 @@
-     targ_selvecs=bfd_elf32_i386_vec
-     targ_underscore=yes
-     ;;
--  i[3-7]86-*-linux-gnu*)
-+  i[3-7]86-*-linux-*)
-     targ_defvec=bfd_elf32_i386_vec
-     targ_selvecs="i386linux_vec bfd_efi_app_ia32_vec"
-     targ64_selvecs=bfd_elf64_x86_64_vec
-@@ -543,7 +543,7 @@
-     targ_defvec=bfd_elf64_x86_64_vec
-     targ_selvecs="bfd_elf32_i386_vec i386netbsd_vec i386coff_vec bfd_efi_app_ia32_vec"
-     ;;
--  x86_64-*-linux-gnu*)
-+  x86_64-*-linux-*)
-     targ_defvec=bfd_elf64_x86_64_vec
-     targ_selvecs="bfd_elf32_i386_vec i386linux_vec bfd_efi_app_ia32_vec"
-     ;;
-@@ -719,7 +719,7 @@
-     targ_selvecs=bfd_elf32_m68k_vec
-     targ_underscore=yes
-     ;;
--  m68*-*-linux-gnu*)
-+  m68*-*-linux-*)
-     targ_defvec=bfd_elf32_m68k_vec
-     targ_selvecs=m68klinux_vec
-     ;;
-@@ -1005,7 +1005,7 @@
-     ;;
- #endif
-   powerpc-*-*bsd* | powerpc-*-elf* | powerpc-*-sysv4* | powerpc-*-eabi* | \
--  powerpc-*-solaris2* | powerpc-*-linux-gnu* | powerpc-*-rtems* | \
-+  powerpc-*-solaris2* | powerpc-*-linux-* | powerpc-*-rtems* | \
-   powerpc-*-chorus* | powerpc-*-vxworks* | powerpc-*-windiss*)
-     targ_defvec=bfd_elf32_powerpc_vec
-     targ_selvecs="rs6000coff_vec bfd_elf32_powerpcle_vec ppcboot_vec"
-@@ -1042,7 +1042,7 @@
-     targ_selvecs="rs6000coff_vec bfd_elf32_powerpc_vec ppcboot_vec"
-     ;;
-   powerpcle-*-elf* | powerpcle-*-sysv4* | powerpcle-*-eabi* | \
--  powerpcle-*-solaris2* | powerpcle-*-linux-gnu* | powerpcle-*-vxworks* |\
-+  powerpcle-*-solaris2* | powerpcle-*-linux-* | powerpcle-*-vxworks* |\
-   powerpcle-*-rtems*)
-     targ_defvec=bfd_elf32_powerpcle_vec
-     targ_selvecs="rs6000coff_vec bfd_elf32_powerpc_vec ppcboot_vec"
-@@ -1213,7 +1213,7 @@
-     targ_selvecs="bfd_elf32_sparc_vec sunos_big_vec"
-     targ_underscore=yes
-     ;;
--  sparc-*-linux-gnu*)
-+  sparc-*-linux-*)
-     targ_defvec=bfd_elf32_sparc_vec
-     targ_selvecs="sparclinux_vec bfd_elf64_sparc_vec sunos_big_vec"
-     ;;
-@@ -1260,7 +1260,7 @@
-     targ_defvec=sunos_big_vec
-     targ_underscore=yes
-     ;;
--  sparc64-*-linux-gnu*)
-+  sparc64-*-linux-*)
-     targ_defvec=bfd_elf64_sparc_vec
-     targ_selvecs="bfd_elf32_sparc_vec sparclinux_vec sunos_big_vec"
-     ;;
-@@ -1329,7 +1329,7 @@
-     targ_underscore=yes
-     ;;
--  vax-*-linux-gnu*)
-+  vax-*-linux-*)
-     targ_defvec=bfd_elf32_vax_vec
-     ;;
-diff -ur binutils-2.15.97.orig/bfd/configure binutils-2.15.97/bfd/configure
---- binutils-2.15.97.orig/bfd/configure        2005-04-29 20:48:14.000000000 -0400
-+++ binutils-2.15.97/bfd/configure     2005-04-29 20:53:50.000000000 -0400
-@@ -9918,7 +9918,7 @@
-   alpha*-*-freebsd* | alpha*-*-kfreebsd*-gnu)
-       COREFILE=''
-       ;;
--  alpha*-*-linux-gnu*)
-+  alpha*-*-linux-*)
-       COREFILE=trad-core.lo
-       TRAD_HEADER='"hosts/alphalinux.h"'
-       ;;
-@@ -9982,7 +9982,7 @@
-       COREFILE=trad-core.lo
-       TRAD_HEADER='"hosts/i386mach3.h"'
-       ;;
--  i[3-7]86-*-linux-gnu*)
-+  i[3-7]86-*-linux-*)
-       COREFILE=trad-core.lo
-       TRAD_HEADER='"hosts/i386linux.h"'
-       ;;
-@@ -10020,7 +10020,7 @@
-       COREFILE=trad-core.lo
-       TRAD_HEADER='"hosts/hp300bsd.h"'
-       ;;
--  m68*-*-linux-gnu*)
-+  m68*-*-linux-*)
-       COREFILE=trad-core.lo
-       TRAD_HEADER='"hosts/m68klinux.h"'
-       ;;
-@@ -10154,7 +10154,7 @@
-       COREFILE=trad-core.lo
-       TRAD_HEADER='"hosts/vaxult2.h"'
-       ;;
--  vax-*-linux-gnu*)
-+  vax-*-linux-*)
-       COREFILE=trad-core.lo
-       TRAD_HEADER='"hosts/vaxlinux.h"'
-       ;;
-diff -ur binutils-2.15.97.orig/bfd/configure.in binutils-2.15.97/bfd/configure.in
---- binutils-2.15.97.orig/bfd/configure.in     2005-04-29 20:48:14.000000000 -0400
-+++ binutils-2.15.97/bfd/configure.in  2005-04-29 20:53:50.000000000 -0400
-@@ -163,7 +163,7 @@
-   alpha*-*-freebsd* | alpha*-*-kfreebsd*-gnu)
-       COREFILE=''
-       ;;
--  alpha*-*-linux-gnu*)
-+  alpha*-*-linux-*)
-       COREFILE=trad-core.lo
-       TRAD_HEADER='"hosts/alphalinux.h"'
-       ;;
-@@ -248,7 +248,7 @@
-       TRAD_HEADER='"hosts/i386mach3.h"'
-       ;;
- changequote(,)dnl
--  i[3-7]86-*-linux-gnu*)
-+  i[3-7]86-*-linux-*)
- changequote([,])dnl
-       COREFILE=trad-core.lo
-       TRAD_HEADER='"hosts/i386linux.h"'
-@@ -289,7 +289,7 @@
-       COREFILE=trad-core.lo
-       TRAD_HEADER='"hosts/hp300bsd.h"'
-       ;;
--  m68*-*-linux-gnu*)
-+  m68*-*-linux-*)
-       COREFILE=trad-core.lo
-       TRAD_HEADER='"hosts/m68klinux.h"'
-       ;;
-@@ -375,7 +375,7 @@
-       COREFILE=trad-core.lo
-       TRAD_HEADER='"hosts/vaxult2.h"'
-       ;;
--  vax-*-linux-gnu*)
-+  vax-*-linux-*)
-       COREFILE=trad-core.lo
-       TRAD_HEADER='"hosts/vaxlinux.h"'
-       ;;
-diff -ur binutils-2.15.97.orig/gas/configure binutils-2.15.97/gas/configure
---- binutils-2.15.97.orig/gas/configure        2005-04-29 20:48:14.000000000 -0400
-+++ binutils-2.15.97/gas/configure     2005-04-29 20:53:50.000000000 -0400
-@@ -4462,7 +4462,7 @@
- _ACEOF
-       ;;
--      ppc-*-linux-gnu*)
-+      ppc-*-linux-*)
-       case "$endian" in
-         big)  ;;
-         *)    { { echo "$as_me:$LINENO: error: GNU/Linux must be configured big endian" >&5
-diff -ur binutils-2.15.97.orig/gas/configure.in binutils-2.15.97/gas/configure.in
---- binutils-2.15.97.orig/gas/configure.in     2005-04-29 20:48:14.000000000 -0400
-+++ binutils-2.15.97/gas/configure.in  2005-04-29 20:53:50.000000000 -0400
-@@ -161,7 +161,7 @@
-       AC_DEFINE(AIX_WEAK_SUPPORT, 1,
-                 [Define if using AIX 5.2 value for C_WEAKEXT.])
-       ;;
--      ppc-*-linux-gnu*)
-+      ppc-*-linux-*)
-       case "$endian" in
-         big)  ;;
-         *)    AC_MSG_ERROR(GNU/Linux must be configured big endian) ;;
-diff -ur binutils-2.15.97.orig/gas/configure.tgt binutils-2.15.97/gas/configure.tgt
---- binutils-2.15.97.orig/gas/configure.tgt    2005-04-29 20:48:14.000000000 -0400
-+++ binutils-2.15.97/gas/configure.tgt 2005-04-29 20:53:50.000000000 -0400
-@@ -100,7 +100,7 @@
-   alpha-*-*vms*)                      fmt=evax ;;
-   alpha-*-osf*)                               fmt=ecoff ;;
-   alpha-*-linuxecoff*)                        fmt=ecoff ;;
--  alpha-*-linux-gnu*)                 fmt=elf em=linux ;;
-+  alpha-*-linux-*)                    fmt=elf em=linux ;;
-   alpha-*-netbsd*)                    fmt=elf em=nbsd ;;
-   alpha-*-openbsd*)                   fmt=elf em=obsd ;;
-@@ -116,7 +116,7 @@
-   arm-*-conix*)                               fmt=elf ;;
-   arm-*-linux*aout*)                  fmt=aout em=linux ;;
-   arm-*-linux-gnueabi*)                       fmt=elf  em=armlinuxeabi ;;      
--  arm-*-linux-gnu*)                   fmt=elf  em=linux ;;
-+  arm-*-linux-*)                      fmt=elf  em=linux ;;
-   arm-*-uclinux*)                     fmt=elf  em=linux ;;
-   arm-*-netbsdelf*)                   fmt=elf  em=nbsd ;;
-   arm-*-*n*bsd*)                      fmt=aout em=nbsd ;;
-@@ -128,7 +128,7 @@
-   avr-*-*)                            fmt=elf ;;
--  cris-*-linux-gnu* | crisv32-*-linux-gnu*)
-+  cris-*-linux-* | crisv32-*-linux-*)
-                                       fmt=multi bfd_gas=yes em=linux ;;
-   cris-*-* | crisv32-*-*)             fmt=multi bfd_gas=yes ;;
-@@ -192,7 +192,7 @@
-   i386-*-linux*aout*)                 fmt=aout em=linux ;;
-   i386-*-linux*oldld)                 fmt=aout em=linux ;;
-   i386-*-linux*coff*)                 fmt=coff em=linux ;;
--  i386-*-linux-gnu*)                  fmt=elf em=linux ;;
-+  i386-*-linux-*)                     fmt=elf em=linux ;;
-   i386-*-lynxos*)                     fmt=elf em=lynx bfd_gas=yes ;;
-   i386-*-sysv[45]*)                   fmt=elf ;;
-   i386-*-solaris*)                    fmt=elf ;;
-@@ -238,7 +238,7 @@
-   ia64-*-elf*)                                fmt=elf ;;
-   ia64-*-aix*)                                fmt=elf em=ia64aix ;;
--  ia64-*-linux-gnu*)                  fmt=elf em=linux ;;
-+  ia64-*-linux-*)                     fmt=elf em=linux ;;
-   ia64-*-hpux*)                               fmt=elf em=hpux ;;
-   ia64-*-netbsd*)                     fmt=elf em=nbsd ;;
-@@ -265,7 +265,7 @@
-   m68k-*-rtems*)                      fmt=elf ;;
-   m68k-*-hpux*)                               fmt=hp300 em=hp300 ;;
-   m68k-*-linux*aout*)                 fmt=aout em=linux ;;
--  m68k-*-linux-gnu*)                  fmt=elf em=linux ;;
-+  m68k-*-linux-*)                     fmt=elf em=linux ;;
-   m68k-*-uclinux*)                    fmt=elf ;;
-   m68k-*-gnu*)                                fmt=elf ;;
-   m68k-*-netbsdelf*)                  fmt=elf em=nbsd ;;
-@@ -332,7 +332,7 @@
-   ppc-*-beos*)                                fmt=coff ;;
-   ppc-*-*n*bsd* | ppc-*-elf*)         fmt=elf ;;
-   ppc-*-eabi* | ppc-*-sysv4*)         fmt=elf ;;
--  ppc-*-linux-gnu*)                   fmt=elf em=linux ;;
-+  ppc-*-linux-*)                      fmt=elf em=linux ;;
-   ppc-*-solaris*)                     fmt=elf ;;
-   ppc-*-rtems*)                               fmt=elf ;;
-   ppc-*-macos*)                               fmt=coff em=macos ;;
-@@ -340,7 +340,7 @@
-   ppc-*-kaos*)                                fmt=elf ;;
-   ppc-*-lynxos*)                      fmt=elf em=lynx bfd_gas=yes ;;
--  s390-*-linux-gnu*)                  fmt=elf em=linux ;;
-+  s390-*-linux-*)                     fmt=elf em=linux ;;
-   s390-*-tpf*)                                fmt=elf ;;
-   sh*-*-linux*)                               fmt=elf em=linux
-@@ -369,7 +369,7 @@
-   sparc-*-aout | sparc*-*-vxworks*)   fmt=aout em=sparcaout ;;
-   sparc-*-coff)                               fmt=coff ;;
-   sparc-*-linux*aout*)                        fmt=aout em=linux ;;
--  sparc-*-linux-gnu*)                 fmt=elf em=linux ;;
-+  sparc-*-linux-*)                    fmt=elf em=linux ;;
-   sparc-fujitsu-none)                 fmt=aout ;;
-   sparc-*-elf)                                fmt=elf ;;
-   sparc-*-sysv4*)                     fmt=elf ;;
-@@ -398,7 +398,7 @@
-   vax-*-netbsdelf*)                   fmt=elf em=nbsd ;;
-   vax-*-netbsd*)                      fmt=aout em=nbsd ;;
-   vax-*-bsd* | vax-*-ultrix*)         fmt=aout ;;
--  vax-*-linux-gnu*)                   fmt=elf em=linux bfd_gas=yes ;;
-+  vax-*-linux-*)                      fmt=elf em=linux bfd_gas=yes ;;
-   w65-*-*)                            fmt=coff ;;
-diff -ur binutils-2.15.97.orig/ld/configure.host binutils-2.15.97/ld/configure.host
---- binutils-2.15.97.orig/ld/configure.host    2005-04-29 20:48:15.000000000 -0400
-+++ binutils-2.15.97/ld/configure.host 2005-04-29 20:53:50.000000000 -0400
-@@ -83,7 +83,7 @@
-   HOSTING_CRT0=`echo "$HOSTING_CRT0" | sed -e "s,ld\[^ \]\*,ld-linux,g"`
-   ;;
--arm*-*-linux-gnu*)
-+arm*-*-linux-*)
-   HOSTING_CRT0='-p '`echo "$HOSTING_CRT0" | sed -e "s,ld\[^ \]\*,ld-linux,g"`
-   ;;
-@@ -141,7 +141,7 @@
-   HOSTING_LIBS="$HOSTING_LIBS"' -lcygwin -L/usr/lib/w32api -luser32 -lkernel32 -ladvapi32 -lshell32 `if [ -f ../gcc/libgcc.a ] ; then echo ../gcc/libgcc.a ; else ${CC} -print-libgcc-file-name; fi`'
-   ;;
--ia64-*-linux-gnu*)
-+ia64-*-linux-*)
-   HOSTING_CRT0=`echo "$HOSTING_CRT0" | sed -e "s,ld\[^ \]*\*,ld-linux-ia64,g"`
-   ;;
-@@ -155,11 +155,11 @@
-   HOSTING_LIBS='-L/usr/lib32 '"$HOSTING_LIBS"' `if [ -f ../gcc/crtend.o ]; then echo ../gcc/crtend.o ; else ${CC} -print-file-name=crtend.o; fi` /usr/lib32/crtn.o -init __do_global_ctors -fini __do_global_dtors'
-   ;;
--mips*-*-linux-gnu*)
-+mips*-*-linux-*)
-   HOSTING_CRT0=`echo "$HOSTING_CRT0" | sed -e "s,\\\`specs.*\"\\\`,/lib/ld.so.1,"`
-   ;;
--m68*-*-linux-gnu*)
-+m68*-*-linux-*)
-   HOSTING_CRT0=`echo "$HOSTING_CRT0" | sed -e "s,\\\`specs.*\"\\\`,/lib/ld.so.1,"`
-   ;;
-@@ -183,19 +183,19 @@
-   HOSTING_LIBS="$HOSTING_LIBS"' `if [ -f ../gcc/crtend.o ]; then echo ../gcc/crtend.o; else ${CC} -print-file-name=crtend.o; fi`'
-   ;;
--powerpc64*-*-linux-gnu*)
-+powerpc64*-*-linux-*)
-   HOSTING_CRT0=`echo "$HOSTING_CRT0" | sed -e "s,\\\`specs.*\"\\\`,/lib64/ld64.so.1,"`
-   ;;
--powerpc*-*-linux-gnu*)
-+powerpc*-*-linux-*)
-   HOSTING_CRT0=`echo "$HOSTING_CRT0" | sed -e "s,\\\`specs.*\"\\\`,/lib/ld.so.1,"`
-   ;;
--s390x-*-linux-gnu*)
-+s390x-*-linux-*)
-   HOSTING_CRT0=`echo "$HOSTING_CRT0" | sed -e "s,\\\`specs.*\"\\\`,/lib/ld64.so.1,"`
-   ;;
--s390-*-linux-gnu*)
-+s390-*-linux-*)
-   HOSTING_CRT0=`echo "$HOSTING_CRT0" | sed -e "s,\\\`specs.*\"\\\`,/lib/ld.so.1,"`
-   ;;
-@@ -209,15 +209,15 @@
-   HOSTING_LIBS="$HOSTING_LIBS"' `if [ -f ../gcc/crtend.o ]; then echo ../gcc/crtend.o; else ${CC} -print-file-name=crtend.o; fi` `if [ -f ../gcc/crtn.o ]; then echo ../gcc/crtn.o; else ${CC} -print-file-name=crtn.o; fi`'
-   ;;
--sparc-*-linux-gnu*)
-+sparc-*-linux-*)
-   HOSTING_CRT0=`echo "$HOSTING_CRT0" | sed -e "s,\\\`specs.*\"\\\`,/lib/ld-linux.so.2,"`
-   ;;
--sparc64-*-linux-gnu*)
-+sparc64-*-linux-*)
-   HOSTING_CRT0=`echo "$HOSTING_CRT0" | sed -e "s,\\\`specs.*\"\\\`,/lib64/ld-linux.so.2,"`
-   ;;
--x86_64-*-linux-gnu*)
-+x86_64-*-linux-*)
-   HOSTING_CRT0=`echo "$HOSTING_CRT0" | sed -e "s,\\\`specs.*\"\\\`,/lib64/ld-linux-x86-64.so.2,"`
-   ;;
-diff -ur binutils-2.15.97.orig/ld/configure.tgt binutils-2.15.97/ld/configure.tgt
---- binutils-2.15.97.orig/ld/configure.tgt     2005-04-29 20:48:15.000000000 -0400
-+++ binutils-2.15.97/ld/configure.tgt  2005-04-29 20:53:50.000000000 -0400
-@@ -30,7 +30,7 @@
- cris-*-*aout*)                targ_emul=crisaout
-                       targ_extra_emuls="criself crislinux"
-                       targ_extra_libpath=$targ_extra_emuls ;;
--cris-*-linux-gnu* | cris-*-linux-gnu*)
-+cris-*-linux-* | crisv32-*-linux-*)
-                       targ_emul=crislinux ;;
- cris-*-* | crisv32-*-*)       targ_emul=criself
-                       targ_extra_emuls="crisaout crislinux"
-@@ -62,14 +62,14 @@
-                       tdir_elf32_sparc=`echo ${targ_alias} | sed -e 's/aout//'`
-                       tdir_sun4=sparc-sun-sunos4
-                       ;;
--sparc64-*-linux-gnu*) targ_emul=elf64_sparc
-+sparc64-*-linux-*)    targ_emul=elf64_sparc
-                       targ_extra_emuls="elf32_sparc sparclinux sun4"
-                       targ_extra_libpath=elf32_sparc
-                       tdir_elf32_sparc=`echo ${targ_alias} | sed -e 's/64//'`
-                       tdir_sparclinux=${tdir_elf32_sparc}aout
-                       tdir_sun4=sparc-sun-sunos4
-                       ;;
--sparc*-*-linux-gnu*)  targ_emul=elf32_sparc
-+sparc*-*-linux-*)     targ_emul=elf32_sparc
-                       targ_extra_emuls="sparclinux elf64_sparc sun4"
-                       targ_extra_libpath=elf64_sparc
-                       tdir_sparclinux=${targ_alias}aout
-@@ -119,8 +119,8 @@
- ia64-*-aix*)          targ_emul=elf64_aix ;;
- m32r*le-*-elf*)         targ_emul=m32rlelf ;;
- m32r*-*-elf*)           targ_emul=m32relf ;;
--m32r*le-*-linux-gnu*)   targ_emul=m32rlelf_linux ;;
--m32r*-*-linux-gnu*)     targ_emul=m32relf_linux ;;
-+m32r*le-*-linux-*)      targ_emul=m32rlelf_linux ;;
-+m32r*-*-linux-*)        targ_emul=m32relf_linux ;;
- m68hc11-*-*|m6811-*-*)        targ_emul=m68hc11elf 
-                       targ_extra_emuls="m68hc11elfb m68hc12elf m68hc12elfb" ;;
- m68hc12-*-*|m6812-*-*)        targ_emul=m68hc12elf 
-@@ -131,7 +131,7 @@
- m68*-apple-aux*)      targ_emul=m68kaux ;;
- maxq-*-coff)            targ_emul=maxqcoff;;
- *-tandem-none)                targ_emul=st2000 ;;
--i370-*-elf* | i370-*-linux-gnu*) targ_emul=elf32i370 ;;
-+i370-*-elf* | i370-*-linux-*) targ_emul=elf32i370 ;;
- i[3-7]86-*-nto-qnx*)  targ_emul=i386nto ;;
- i[3-7]86-*-vsta)      targ_emul=vsta ;;
- i[3-7]86-go32-rtems*) targ_emul=i386go32 ;;
-@@ -155,14 +155,14 @@
-                       tdir_elf_i386=`echo ${targ_alias} | sed -e 's/aout//'`
-                       ;;
- i[3-7]86-*-linux*oldld)       targ_emul=i386linux; targ_extra_emuls=elf_i386 ;;
--i[3-7]86-*-linux-gnu*)        targ_emul=elf_i386
-+i[3-7]86-*-linux-*)   targ_emul=elf_i386
-                       targ_extra_emuls=i386linux
-                       if test x${want64} = xtrue; then
-                         targ_extra_emuls="$targ_extra_emuls elf_x86_64"
-                       fi
-                       tdir_i386linux=${targ_alias}aout
-                       ;;
--x86_64-*-linux-gnu*)  targ_emul=elf_x86_64
-+x86_64-*-linux-*)     targ_emul=elf_x86_64
-                       targ_extra_emuls="elf_i386 i386linux"
-                       targ_extra_libpath=elf_i386
-                       tdir_i386linux=`echo ${targ_alias}aout | sed -e 's/x86_64/i386/'`
-@@ -262,13 +262,13 @@
- arm-*-kaos*)          targ_emul=armelf ;;
- arm9e-*-elf)          targ_emul=armelf ;;
- arm*b-*-linux-gnueabi)        targ_emul=armelfb_linux_eabi ;;
--arm*b-*-linux-gnu*)   targ_emul=armelfb_linux; targ_extra_emuls=armelfb ;;
-+arm*b-*-linux-*)      targ_emul=armelfb_linux; targ_extra_emuls=armelfb ;;
- arm*-*-linux-gnueabi) targ_emul=armelf_linux_eabi ;;
--arm*-*-linux-gnu*)    targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
-+arm*-*-linux-*)               targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
- arm*-*-uclinux*)      targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
- arm-*-vxworks)                targ_emul=armelf_vxworks ;;
- arm*-*-conix*)                targ_emul=armelf ;;
--thumb-*-linux-gnu* | thumb-*-uclinux*)        targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
-+thumb-*-linux-* | thumb-*-uclinux*)   targ_emul=armelf_linux; targ_extra_emuls=armelf ;;
- strongarm-*-coff)     targ_emul=armcoff ;;
- strongarm-*-elf)      targ_emul=armelf ;;
- strongarm-*-kaos*)    targ_emul=armelf ;;
-@@ -372,7 +372,7 @@
-                       targ_extra_emuls=m68kelf
-                       tdir_m68kelf=`echo ${targ_alias} | sed -e 's/aout//'`
-                       ;;
--m68k-*-linux-gnu*)    targ_emul=m68kelf
-+m68k-*-linux-*)       targ_emul=m68kelf
-                       targ_extra_emuls=m68klinux
-                       tdir_m68klinux=`echo ${targ_alias} | sed -e 's/linux/linuxaout/'`
-                       ;;
-@@ -388,9 +388,9 @@
- m68*-*-psos*)         targ_emul=m68kpsos ;;
- m68*-*-rtemscoff*)    targ_emul=m68kcoff ;;
- m68*-*-rtems*)                targ_emul=m68kelf ;;
--hppa*64*-*-linux-gnu*)        targ_emul=hppa64linux ;;
-+hppa*64*-*-linux-*)   targ_emul=hppa64linux ;;
- hppa*64*-*)           targ_emul=elf64hppa ;;
--hppa*-*-linux-gnu*)   targ_emul=hppalinux ;;
-+hppa*-*-linux-*)      targ_emul=hppalinux ;;
- hppa*-*-*elf*)                targ_emul=hppaelf ;;
- hppa*-*-lites*)               targ_emul=hppaelf ;;
- hppa*-*-netbsd*)      targ_emul=hppanbsd ;;
-@@ -402,7 +402,7 @@
- vax-*-netbsdaout* | vax-*-netbsd*)
-                       targ_emul=vaxnbsd
-                       targ_extra_emuls=elf32vax ;;
--vax-*-linux-gnu*)     targ_emul=elf32vax ;;
-+vax-*-linux-*)        targ_emul=elf32vax ;;
- mips*-*-pe)           targ_emul=mipspe ;
-                       targ_extra_ofiles="deffilep.o pe-dll.o" ;;
- mips*-dec-ultrix*)    targ_emul=mipslit ;;
-@@ -436,18 +436,18 @@
- mips*-*-vxworks*)     targ_emul=elf32ebmip
-                       targ_extra_emuls="elf32elmip" ;;
- mips*-*-windiss)      targ_emul=elf32mipswindiss ;;
--mips64*el-*-linux-gnu*)       targ_emul=elf32ltsmipn32
-+mips64*el-*-linux-*)  targ_emul=elf32ltsmipn32
-                       targ_extra_emuls="elf32btsmipn32 elf32ltsmip elf32btsmip elf64ltsmip elf64btsmip"
-                       targ_extra_libpath="elf32ltsmip elf64ltsmip"
-                       ;;
--mips64*-*-linux-gnu*) targ_emul=elf32btsmipn32
-+mips64*-*-linux-*)    targ_emul=elf32btsmipn32
-                       targ_extra_emuls="elf32ltsmipn32 elf32btsmip elf32ltsmip elf64btsmip elf64ltsmip"
-                       targ_extra_libpath="elf32btsmip elf64btsmip"
-                       ;;
--mips*el-*-linux-gnu*) targ_emul=elf32ltsmip
-+mips*el-*-linux-*)    targ_emul=elf32ltsmip
-                       targ_extra_emuls="elf32btsmip elf32ltsmipn32 elf64ltsmip elf32btsmipn32 elf64btsmip"
-                       ;;
--mips*-*-linux-gnu*)   targ_emul=elf32btsmip
-+mips*-*-linux-*)      targ_emul=elf32btsmip
-                       targ_extra_emuls="elf32ltsmip elf32btsmipn32 elf64btsmip elf32ltsmipn32 elf64ltsmip"
-                       ;;
- mips*-*-lnews*)               targ_emul=mipslnews ;;
-@@ -467,7 +467,7 @@
- alpha*-*-linuxecoff*) targ_emul=alpha targ_extra_emuls=elf64alpha
-                       tdir_elf64alpha=`echo ${targ_alias} | sed -e 's/ecoff//'`
-                       ;;
--alpha*-*-linux-gnu*)  targ_emul=elf64alpha targ_extra_emuls=alpha
-+alpha*-*-linux-*)     targ_emul=elf64alpha targ_extra_emuls=alpha
-                       tdir_alpha=`echo ${targ_alias} | sed -e 's/linux/linuxecoff/'`
-                       ;;
- alpha*-*-osf*)                targ_emul=alpha ;;
-diff -ur binutils-2.15.97.orig/ld/emultempl/elf32.em binutils-2.15.97/ld/emultempl/elf32.em
---- binutils-2.15.97.orig/ld/emultempl/elf32.em        2005-04-29 20:48:15.000000000 -0400
-+++ binutils-2.15.97/ld/emultempl/elf32.em     2005-04-29 20:53:50.000000000 -0400
-@@ -65,7 +65,7 @@
- if [ "x${USE_LIBPATH}" = xyes ] ; then
-   case ${target} in
--    *-*-linux-gnu*)
-+    *-*-linux-*)
-   cat >>e${EMULATION_NAME}.c <<EOF
- #ifdef HAVE_GLOB
- #include <glob.h>
-@@ -350,7 +350,7 @@
- EOF
- case ${target} in
--  *-*-linux-gnu*)
-+  *-*-linux-*)
-     cat >>e${EMULATION_NAME}.c <<EOF
-         {
-           struct bfd_link_needed_list *l;
-@@ -522,7 +522,7 @@
- EOF
-   case ${target} in
--    *-*-linux-gnu*)
-+    *-*-linux-*)
-       cat >>e${EMULATION_NAME}.c <<EOF
- /* For a native linker, check the file /etc/ld.so.conf for directories
-    in which we may find shared libraries.  /etc/ld.so.conf is really
-@@ -932,7 +932,7 @@
- EOF
- if [ "x${USE_LIBPATH}" = xyes ] ; then
-   case ${target} in
--    *-*-linux-gnu*)
-+    *-*-linux-*)
-       cat >>e${EMULATION_NAME}.c <<EOF
-         if (gld${EMULATION_NAME}_check_ld_so_conf (l->name, force))
-           break;
diff --git a/src/patches/binutils-uclibc-libtool-conf.patch b/src/patches/binutils-uclibc-libtool-conf.patch
deleted file mode 100644 (file)
index ec38caa..0000000
+++ /dev/null
@@ -1,218 +0,0 @@
-diff -urN binutils-2.16.90.0.2-dist/bfd/configure binutils-2.16.90.0.2/bfd/configure
---- binutils-2.16.90.0.2-dist/bfd/configure    2005-04-29 12:50:24.000000000 -0500
-+++ binutils-2.16.90.0.2/bfd/configure 2005-04-30 11:34:59.246377032 -0500
-@@ -3584,6 +3584,11 @@
-   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
-   ;;
-+linux-uclibc*)
-+  lt_cv_deplibs_check_method=pass_all
-+  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
-+  ;;
-+
- netbsd* | knetbsd*-gnu)
-   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
-     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
-diff -urN binutils-2.16.90.0.2-dist/binutils/configure binutils-2.16.90.0.2/binutils/configure
---- binutils-2.16.90.0.2-dist/binutils/configure       2005-04-29 12:50:26.000000000 -0500
-+++ binutils-2.16.90.0.2/binutils/configure    2005-04-30 11:35:28.900868864 -0500
-@@ -1577,6 +1577,11 @@
-   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
-   ;;
-+linux-uclibc*)
-+  lt_cv_deplibs_check_method=pass_all
-+  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
-+  ;;
-+
- netbsd* | knetbsd*-gnu)
-   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
-     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
-diff -urN binutils-2.16.90.0.2-dist/configure binutils-2.16.90.0.2/configure
---- binutils-2.16.90.0.2-dist/configure        2005-04-29 12:50:23.000000000 -0500
-+++ binutils-2.16.90.0.2/configure     2005-04-30 11:31:12.525843792 -0500
-@@ -1111,7 +1111,7 @@
-     ;;
- "")
-     case "${target}" in
--    *-*-linux*-gnu | *-*-gnu* | *-*-k*bsd*-gnu)
-+    *-*-linux*-gnu | *-*-gnu* | *-*-k*bsd*-gnu | *-*-linux-uclibc*)
-         # Enable libmudflap by default in GNU and friends.
-       ;;
-     *-*-freebsd*)
-diff -urN binutils-2.16.90.0.2-dist/configure.in binutils-2.16.90.0.2/configure.in
---- binutils-2.16.90.0.2-dist/configure.in     2005-04-29 12:50:23.000000000 -0500
-+++ binutils-2.16.90.0.2/configure.in  2005-04-30 11:29:51.643139832 -0500
-@@ -328,7 +328,7 @@
-     ;;
- "")
-     case "${target}" in
--    *-*-linux*-gnu | *-*-gnu* | *-*-k*bsd*-gnu)
-+    *-*-linux*-gnu | *-*-gnu* | *-*-k*bsd*-gnu | *-*-linux-uclibc*)
-         # Enable libmudflap by default in GNU and friends.
-       ;;
-     *-*-freebsd*)
-diff -urN binutils-2.16.90.0.2-dist/gas/configure binutils-2.16.90.0.2/gas/configure
---- binutils-2.16.90.0.2-dist/gas/configure    2005-04-29 12:50:27.000000000 -0500
-+++ binutils-2.16.90.0.2/gas/configure 2005-04-30 11:35:21.097055224 -0500
-@@ -3421,6 +3421,11 @@
-   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
-   ;;
-+linux-uclibc*)
-+  lt_cv_deplibs_check_method=pass_all
-+  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
-+  ;;
-+
- netbsd* | knetbsd*-gnu)
-   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
-     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
-diff -urN binutils-2.16.90.0.2-dist/gas/testsuite/gas/sh/basic.exp binutils-2.16.90.0.2/gas/testsuite/gas/sh/basic.exp
---- binutils-2.16.90.0.2-dist/gas/testsuite/gas/sh/basic.exp   2005-04-09 14:03:14.000000000 -0500
-+++ binutils-2.16.90.0.2/gas/testsuite/gas/sh/basic.exp        2005-04-30 11:41:57.301822944 -0500
-@@ -20,7 +20,7 @@
- # Written by Cygnus Support.
--if [istarget "sh*-*-linux-gnu"] {
-+if {[istarget "sh*-*-linux-gnu"] || [istarget "sh*-*-linux-uclibc"]} {
-     global ASFLAGS
-     set ASFLAGS "$ASFLAGS -big"
- }
-diff -urN binutils-2.16.90.0.2-dist/gprof/configure binutils-2.16.90.0.2/gprof/configure
---- binutils-2.16.90.0.2-dist/gprof/configure  2005-04-29 12:50:29.000000000 -0500
-+++ binutils-2.16.90.0.2/gprof/configure       2005-04-30 11:35:36.880655752 -0500
-@@ -3419,6 +3419,11 @@
-   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
-   ;;
-+linux-uclibc*)
-+  lt_cv_deplibs_check_method=pass_all
-+  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
-+  ;;
-+
- netbsd* | knetbsd*-gnu)
-   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
-     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
-diff -urN binutils-2.16.90.0.2-dist/ld/configure binutils-2.16.90.0.2/ld/configure
---- binutils-2.16.90.0.2-dist/ld/configure     2005-04-29 12:50:30.000000000 -0500
-+++ binutils-2.16.90.0.2/ld/configure  2005-04-30 11:46:15.974498720 -0500
-@@ -1581,6 +1581,11 @@
-   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
-   ;;
-+linux-uclibc*)
-+  lt_cv_deplibs_check_method=pass_all
-+  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
-+  ;;
-+
- netbsd* | knetbsd*-gnu)
-   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
-     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
-diff -urN binutils-2.16.90.0.2-dist/ld/testsuite/ld-sh/sh.exp binutils-2.16.90.0.2/ld/testsuite/ld-sh/sh.exp
---- binutils-2.16.90.0.2-dist/ld/testsuite/ld-sh/sh.exp        2005-04-09 14:03:29.000000000 -0500
-+++ binutils-2.16.90.0.2/ld/testsuite/ld-sh/sh.exp     2005-04-30 11:45:07.890849008 -0500
-@@ -62,7 +62,7 @@
- set testsrec "SH relaxing to S-records"
--if [istarget sh*-linux-gnu] {
-+if {[istarget sh*-linux-gnu] || [istarget sh*-*-linux-uclibc]} {
-     # This target needs the explicit entry address.
-     catch "exec $objdump -x tmpdir/sh1 | grep start\\ address | sed s/start\\ address//" entry_addr
-     set srec_relax_arg "-Ttext $entry_addr -relax --oformat srec tmpdir/sh1.o"
-@@ -117,7 +117,7 @@
-     return
- }
--if [istarget sh*-linux-gnu] {
-+if {[istarget sh*-linux-gnu] || [istarget sh*-*-linux-uclibc]} {
-     exec sed -e s/_main/main/ -e s/_trap/trap/ -e s/_stack/stack/ \
-           < $srcdir/$subdir/start.s >tmpdir/start.s
- } else {
-diff -urN binutils-2.16.90.0.2-dist/ld/testsuite/ld-srec/srec.exp binutils-2.16.90.0.2/ld/testsuite/ld-srec/srec.exp
---- binutils-2.16.90.0.2-dist/ld/testsuite/ld-srec/srec.exp    2005-04-29 12:50:30.000000000 -0500
-+++ binutils-2.16.90.0.2/ld/testsuite/ld-srec/srec.exp 2005-04-30 11:44:26.358162936 -0500
-@@ -385,7 +385,7 @@
- setup_xfail "v850*-*-elf"
- # The S-record linker doesn't handle Alpha Elf relaxation.
--setup_xfail "alpha*-*-elf*" "alpha*-*-linux-gnu*" "alpha*-*-gnu*"
-+setup_xfail "alpha*-*-elf*" "alpha*-*-linux-gnu*" "alpha*-*-gnu*" "alpha*-*-linux-uclibc*"
- setup_xfail "alpha*-*-netbsd*"
- # The S-record linker hasn't any hope of coping with HPPA relocs.
-@@ -424,7 +424,7 @@
- setup_xfail "thumb-*-*"
- setup_xfail "powerpc*-*-eabi*"
- setup_xfail "v850*-*-elf"
--setup_xfail "alpha*-*-elf*" "alpha*-*-linux-gnu*" "alpha*-*-gnu*"
-+setup_xfail "alpha*-*-elf*" "alpha*-*-linux-gnu*" "alpha*-*-gnu*" "alpha*-*-linux-uclibc*"
- setup_xfail "alpha*-*-netbsd*"
- setup_xfail "hppa*-*-*"
- setup_xfail "ia64-*-*"
-diff -urN binutils-2.16.90.0.2-dist/libtool.m4 binutils-2.16.90.0.2/libtool.m4
---- binutils-2.16.90.0.2-dist/libtool.m4       2004-07-27 23:36:06.000000000 -0500
-+++ binutils-2.16.90.0.2/libtool.m4    2005-04-30 11:35:54.062043784 -0500
-@@ -645,6 +645,11 @@
-   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
-   ;;
-+linux-uclibc*)
-+  lt_cv_deplibs_check_method=pass_all
-+  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
-+  ;;
-+
- netbsd* | knetbsd*-gnu)
-   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
-     [lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$']
-diff -urN binutils-2.16.90.0.2-dist/ltconfig binutils-2.16.90.0.2/ltconfig
---- binutils-2.16.90.0.2-dist/ltconfig 2004-11-22 14:33:30.000000000 -0600
-+++ binutils-2.16.90.0.2/ltconfig      2005-04-30 11:22:10.594229920 -0500
-@@ -602,6 +602,7 @@
- # Transform linux* to *-*-linux-gnu*, to support old configure scripts.
- case $host_os in
-+linux-uclibc*) ;;
- linux-gnu*) ;;
- linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
- esac
-@@ -1270,6 +1271,23 @@
-   dynamic_linker='GNU/Linux ld.so'
-   ;;
-+linux-uclibc*)
-+  version_type=linux
-+  need_lib_prefix=no
-+  need_version=no
-+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
-+  soname_spec='${libname}${release}.so$major'
-+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
-+  shlibpath_var=LD_LIBRARY_PATH
-+  shlibpath_overrides_runpath=no
-+  # This implies no fast_install, which is unacceptable.
-+  # Some rework will be needed to allow for fast_install
-+  # before this can be enabled.
-+  hardcode_into_libs=yes
-+  # Assume using the uClibc dynamic linker.
-+  dynamic_linker="uClibc ld.so"
-+  ;;
-+
- netbsd*)
-   need_lib_prefix=no
-   need_version=no
-diff -urN binutils-2.16.90.0.2-dist/opcodes/configure binutils-2.16.90.0.2/opcodes/configure
---- binutils-2.16.90.0.2-dist/opcodes/configure        2005-04-29 12:50:31.000000000 -0500
-+++ binutils-2.16.90.0.2/opcodes/configure     2005-04-30 11:17:07.168357664 -0500
-@@ -3588,6 +3588,11 @@
-   lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
-   ;;
-+linux-uclibc*)
-+  lt_cv_deplibs_check_method=pass_all
-+  lt_cv_file_magic_test_file=`echo /lib/libuClibc-*.so`
-+  ;;
-+
- netbsd* | knetbsd*-gnu)
-   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
-     lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
diff --git a/src/patches/bzip2-1.0.3-bzgrep_security-1.patch b/src/patches/bzip2-1.0.3-bzgrep_security-1.patch
deleted file mode 100644 (file)
index dab627d..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-Submitted By: Ken Moffat <ken@kenmoffat.uklinux.net>
-Date: 2005-08-09
-Initial Package Version: 1.0.3
-Upstream Status: Unknown.
-Origin: Jyri Ryska (RedHat) for fedora3
-Description: Fixes filename sanitisation in bzgrep.
- This fixes CAN-2005-0758 (if a user can be tricked into running
-bzgrep in an untrusted directory containing files with carefully
-crafted filenames, arbitrary commands could be executed as the user
-running bzgrep).  Risk is reported as low.  I've modified it to force
-the interpreter to be bash, some of the other shells in use won't
-like the bash syntax.
-
-diff -Naur bzip2-1.0.3/bzgrep bzip2-1.0.3-new/bzgrep
---- bzip2-1.0.3/bzgrep 2004-10-09 12:29:32.000000000 +0100
-+++ bzip2-1.0.3-new/bzgrep     2005-08-09 21:36:37.000000000 +0100
-@@ -1,4 +1,4 @@
--#!/bin/sh
-+#!/bin/bash
- # Bzgrep wrapped for bzip2, 
- # adapted from zgrep by Philippe Troin <phil@fifi.org> for Debian GNU/Linux.
-@@ -63,7 +63,11 @@
-     bzip2 -cdfq "$i" | $grep $opt "$pat"
-     r=$?
-   else
--    bzip2 -cdfq "$i" | $grep $opt "$pat" | sed "s|^|${i}:|"
-+    j=${i//\\/\\\\}
-+    j=${j//|/\\|}
-+    j=${j//&/\\&}
-+    j=`printf "%s" "$j" | tr '\n' ' '`
-+    bzip2 -cdfq "$i" | $grep $opt "$pat" | sed "s|^|${j}:|"
-     r=$?
-   fi
-   test "$r" -ne 0 && res="$r"
diff --git a/src/patches/cdrtools-2.01-ascii-2.patch b/src/patches/cdrtools-2.01-ascii-2.patch
deleted file mode 100644 (file)
index 6b6f22f..0000000
+++ /dev/null
@@ -1,139 +0,0 @@
-Submitted By: Alexander E. Patrakov
-Date: 2006-06-05
-Initial Package Version: 2.01
-Upstream Status: Knows about a similar RedHat patch, ignores the issue
-Origin: Alexander E. Patrakov; RedHat does something very similar
-        Modified by Andy Benton to fix an issue with it not applying properly
-Description: Replaces hard-coded ISO-8859-1 with ASCII approximations
-To regenerate:
-
-for F in cdrecord/cdrecord.c cdrecord/diskid.c cdrecord/sector.c \
-    readcd/readcd.c scgcheck/scgcheck.c scgskeleton/skel.c ; do
-    LC_ALL=de_DE iconv -f ISO-8859-1 -t US-ASCII//TRANSLIT $F >tmp
-    mv tmp $F
-done
-
-and remove hunks that modify comments.
-
-RedHat converts to UTF-8 instead, but this is unacceptable for LFS because
-not everyone uses UTF-8 based locales.
-
-$Id: cdrtools-2.01-ascii-2.patch 1553 2006-06-05 12:05:57Z randy $
-
-
-diff -urN cdrtools-2.01.orig/cdrecord/cdrecord.c cdrtools-2.01/cdrecord/cdrecord.c
---- cdrtools-2.01.orig/cdrecord/cdrecord.c     2004-09-08 23:26:35.000000000 +0600
-+++ cdrtools-2.01/cdrecord/cdrecord.c  2006-02-13 10:17:29.000000000 +0500
-@@ -297,7 +297,7 @@
-        *
-        * Warning: you are not allowed to modify or to remove the
-        * Copyright and version printing code below!
--       * See also GPL § 2 subclause c)
-+       * See also GPL paragraph 2 subclause c)
-        *
-        * If you modify cdrecord you need to include additional version
-        * printing code that:
-@@ -349,7 +349,7 @@
- #     define  CLONE_TITLE     ""
- #endif
-       if ((flags & F_MSINFO) == 0 || lverbose || flags & F_VERSION) {
--              printf("Cdrecord%s%s %s (%s-%s-%s) Copyright (C) 1995-2004 Jörg Schilling\n",
-+              printf("Cdrecord%s%s %s (%s-%s-%s) Copyright (C) 1995-2004 Joerg Schilling\n",
-                                                               PRODVD_TITLE,
-                                                               CLONE_TITLE,
-                                                               cdr_version,
-@@ -1651,7 +1651,7 @@
-       error("\t-xamix         Subsequent tracks are CD-ROM XA mode 2 form 1/2 - 2332 bytes\n");
-       error("\t-cdi           Subsequent tracks are CDI tracks\n");
-       error("\t-isosize       Use iso9660 file system size for next data track\n");
--      error("\t-preemp                Audio tracks are mastered with 50/15 µs preemphasis\n");
-+      error("\t-preemp                Audio tracks are mastered with 50/15 us preemphasis\n");
-       error("\t-nopreemp      Audio tracks are mastered with no preemphasis (default)\n");
-       error("\t-copy          Audio tracks have unlimited copy permission\n");
-       error("\t-nocopy                Audio tracks may only be copied once for personal use (default)\n");
-diff -urN cdrtools-2.01.orig/cdrecord/diskid.c cdrtools-2.01/cdrecord/diskid.c
---- cdrtools-2.01.orig/cdrecord/diskid.c       2004-03-02 06:14:38.000000000 +0500
-+++ cdrtools-2.01/cdrecord/diskid.c    2006-02-13 10:17:35.000000000 +0500
-@@ -112,8 +112,8 @@
- LOCAL char    m_grandadv[]    = "Grand Advance Technology Ltd.";
- LOCAL char    m_digitalstor[] = "DIGITAL STORAGE TECHNOLOGY CO.,LTD";
- LOCAL char    m_matsushita[]  = "Matsushita Electric Industrial Co.,Ltd.";
--LOCAL char    m_albrechts[]   = "CDA Datenträger Albrechts GmbH.";
--LOCAL char    m_xalbrechts[]  = "??? CDA Datenträger Albrechts GmbH.";
-+LOCAL char    m_albrechts[]   = "CDA Datentraeger Albrechts GmbH.";
-+LOCAL char    m_xalbrechts[]  = "??? CDA Datentraeger Albrechts GmbH.";
- LOCAL char    m_prodisc[]     = "Prodisc Technology Inc.";
- LOCAL char    m_postech[]     = "POSTECH Corporation";
-@@ -150,7 +150,7 @@
-       {{97, 27, 00}, 81, "ILLEGAL OLD CODE: Old Ritek Co.???" },
-       {{97, 27, 25},  0, m_ill },
-       {{97, 30, 00},  0, m_ill },
--      {{97, 33, 00}, 82, "ILLEGAL OLD CODE: Old CDA Datenträger Albrechts GmbH." },
-+      {{97, 33, 00}, 82, "ILLEGAL OLD CODE: Old CDA Datentraeger Albrechts GmbH." },
-       {{97, 35, 44},  0, m_ill },
-       {{97, 39, 00},  0, m_ill },
-       {{97, 45, 36}, 83, "ILLEGAL OLD CODE: Old Kodak Photo CD" },
-diff -urN cdrtools-2.01.orig/cdrecord/sector.c cdrtools-2.01/cdrecord/sector.c
---- cdrtools-2.01.orig/cdrecord/sector.c       2004-03-01 14:19:13.000000000 +0500
-+++ cdrtools-2.01/cdrecord/sector.c    2006-02-13 10:17:36.000000000 +0500
-@@ -125,7 +125,7 @@
-                       break;
-       }
-       if (be_verbose) {
--              printf("Encoding speed : %dx (%d sectors/s) for libedc from Heiko Eißfeldt\n",
-+              printf("Encoding speed : %dx (%d sectors/s) for libedc from Heiko Eissfeldt\n",
-                               (i+74)/75, i);
-       }
-       return ((i+74)/75);
-diff -urN cdrtools-2.01.orig/readcd/readcd.c cdrtools-2.01/readcd/readcd.c
---- cdrtools-2.01.orig/readcd/readcd.c 2004-09-08 23:24:14.000000000 +0600
-+++ cdrtools-2.01/readcd/readcd.c      2006-02-13 10:17:37.000000000 +0500
-@@ -296,7 +296,7 @@
-       if (help)
-               usage(0);
-       if (pversion) {
--              printf("readcd %s (%s-%s-%s) Copyright (C) 1987, 1995-2003 Jörg Schilling\n",
-+              printf("readcd %s (%s-%s-%s) Copyright (C) 1987, 1995-2003 Joerg Schilling\n",
-                                                               cdr_version,
-                                                               HOST_CPU, HOST_VENDOR, HOST_OS);
-               exit(0);
-diff -urN cdrtools-2.01.orig/scgcheck/scgcheck.c cdrtools-2.01/scgcheck/scgcheck.c
---- cdrtools-2.01.orig/scgcheck/scgcheck.c     2004-09-08 23:49:48.000000000 +0600
-+++ cdrtools-2.01/scgcheck/scgcheck.c  2006-02-13 10:17:38.000000000 +0500
-@@ -129,7 +129,7 @@
-       if (help)
-               usage(0);
-       if (pversion) {
--              printf("scgckeck %s (%s-%s-%s) Copyright (C) 1998-2002 Jörg Schilling\n",
-+              printf("scgckeck %s (%s-%s-%s) Copyright (C) 1998-2002 Joerg Schilling\n",
-                                                               scgc_version,
-                                                               HOST_CPU, HOST_VENDOR, HOST_OS);
-               exit(0);
-@@ -153,11 +153,11 @@
-               comerr("Cannot open logfile.\n");
-       printf("Scgcheck %s (%s-%s-%s) SCSI user level transport library ABI checker.\n\
--Copyright (C) 1998,2001 Jörg Schilling\n",
-+Copyright (C) 1998,2001 Joerg Schilling\n",
-                                               scgc_version,
-                                               HOST_CPU, HOST_VENDOR, HOST_OS);
-       fprintf(logfile, "Scgcheck %s (%s-%s-%s) SCSI user level transport library ABI checker.\n\
--Copyright (C) 1998,2001 Jörg Schilling\n",
-+Copyright (C) 1998,2001 Joerg Schilling\n",
-                                               scgc_version,
-                                               HOST_CPU, HOST_VENDOR, HOST_OS);
-       /*
-diff -urN cdrtools-2.01.orig/scgskeleton/skel.c cdrtools-2.01/scgskeleton/skel.c
---- cdrtools-2.01.orig/scgskeleton/skel.c      2004-07-11 04:57:27.000000000 +0600
-+++ cdrtools-2.01/scgskeleton/skel.c   2006-02-13 10:17:39.000000000 +0500
-@@ -155,7 +155,7 @@
-       if (help)
-               usage(0);
-       if (pversion) {
--              printf("scgskeleton %s (%s-%s-%s) Copyright (C) 1987, 1995-2003 Jörg Schilling\n",
-+              printf("scgskeleton %s (%s-%s-%s) Copyright (C) 1987, 1995-2003 Joerg Schilling\n",
-                                                               skel_version,
-                                                               HOST_CPU, HOST_VENDOR, HOST_OS);
-               exit(0);
diff --git a/src/patches/cdrtools-2.01-mkisofs_iconv-1.patch b/src/patches/cdrtools-2.01-mkisofs_iconv-1.patch
deleted file mode 100644 (file)
index 4f47533..0000000
+++ /dev/null
@@ -1,629 +0,0 @@
-Submitted By: Alexander E. Patrakov
-Date: 2005-09-30
-Initial Package Version: 2.01
-Origin: RedHat (but maybe they initially obtained the patch from elsewhere)
-Upstream Status: Not applied
-Description: Allows one to specify any glibc-supported source charset
-for Joliet filenames, instead of the very limited choice offered by mkisofs
-itself. Required for writing Windows-readable data CDs in UTF-8 locales when
-filenames contain national characters.
-
-diff -urN --exclude-from=- cdrtools-2.01/include/unls.h cdrtools-2.01-jh/include/unls.h
---- cdrtools-2.01/include/unls.h       2003-06-16 00:41:23.000000000 +0300
-+++ cdrtools-2.01-jh/include/unls.h    2004-02-02 18:31:22.000000000 +0200
-@@ -30,6 +30,10 @@
- #include <prototyp.h>
- #endif
-+#ifdef USE_ICONV
-+#include <iconv.h>
-+#endif
-+
- #ifdef        __cplusplus
- extern "C" {
- #endif
-@@ -43,6 +47,9 @@
-       char *charset;
-       unsigned char **page_uni2charset;
-       struct nls_unicode *charset2uni;
-+#ifdef USE_ICONV
-+      iconv_t iconv_d;
-+#endif
-       void (*inc_use_count)   __PR((void));
-       void (*dec_use_count)   __PR((void));
-@@ -58,6 +65,9 @@
- extern void           unload_nls              __PR((struct nls_table *));
- extern struct nls_table *load_nls_default     __PR((void));
- extern int            init_nls_file           __PR((char * name));
-+#ifdef USE_ICONV
-+extern int            init_nls_iconv          __PR((char * name));
-+#endif
- #ifdef        __cplusplus
- }
-diff -urN --exclude-from=- cdrtools-2.01/libunls/libunls.mk cdrtools-2.01-jh/libunls/libunls.mk
---- cdrtools-2.01/libunls/libunls.mk   2000-03-25 14:51:56.000000000 +0200
-+++ cdrtools-2.01-jh/libunls/libunls.mk        2004-02-02 18:31:22.000000000 +0200
-@@ -8,6 +8,7 @@
- INSDIR=               lib
- TARGETLIB=    unls
- #CPPOPTS +=   -Istdio
-+CPPOPTS +=    -DUSE_ICONV
- include               Targets
- LIBS=         
-diff -urN --exclude-from=- cdrtools-2.01/libunls/nls.h cdrtools-2.01-jh/libunls/nls.h
---- cdrtools-2.01/libunls/nls.h        2002-12-03 02:34:27.000000000 +0200
-+++ cdrtools-2.01-jh/libunls/nls.h     2004-02-02 18:31:22.000000000 +0200
-@@ -111,5 +111,8 @@
- extern int init_nls_cp10079   __PR((void));
- extern int init_nls_cp10081   __PR((void));
- extern int init_nls_file      __PR((char * name));
-+#ifdef USE_ICONV
-+extern int init_nls_iconv     __PR((char * name));
-+#endif
- #endif        /* _NLS_H */
-diff -urN --exclude-from=- cdrtools-2.01/libunls/nls_iconv.c cdrtools-2.01-jh/libunls/nls_iconv.c
---- cdrtools-2.01/libunls/nls_iconv.c  1970-01-01 02:00:00.000000000 +0200
-+++ cdrtools-2.01-jh/libunls/nls_iconv.c       2004-02-02 18:31:22.000000000 +0200
-@@ -0,0 +1,96 @@
-+/* @(#)nls_iconv.c    1.0 02/04/20 2002 J. Schilling  */
-+#ifndef lint
-+static        char sccsid[] =
-+      "@(#)nls_iconv.c        1.0 02/01/20 2002 J. Schilling";
-+#endif
-+/*
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2, or (at your option)
-+ * any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; see the file COPYING.  If not, write to
-+ * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
-+ */
-+/*
-+ *    Modifications to make the code portable Copyright (c) 2000 J. Schilling
-+ *
-+ * nls_iconv: create a pseudo-charset table to use iconv() provided by C
-+ * library or libiconv by Bruno Haible
-+ * The Unicode to charset table has only exact mappings.
-+ *
-+ *
-+ * Jungshik Shin (jshin@mailaps.org) 04-Feb-2002
-+ */
-+
-+#ifdef USE_ICONV
-+#include <mconfig.h>
-+#include <stdio.h>
-+#include <stdxlib.h>
-+#include <strdefs.h>
-+#include "nls.h"
-+#include <iconv.h>
-+
-+static void   inc_use_count   __PR((void));
-+static void   dec_use_count   __PR((void));
-+
-+
-+static void
-+inc_use_count()
-+{
-+      MOD_INC_USE_COUNT;
-+}
-+
-+static void
-+dec_use_count()
-+{
-+      MOD_DEC_USE_COUNT;
-+}
-+
-+int
-+init_nls_iconv(charset)
-+      char    *charset;
-+{
-+      iconv_t iconv_d;  /* iconv conversion descriptor */
-+      struct nls_table *table;
-+
-+      /* give up if no charset is given */
-+      if (charset == NULL)
-+              return -1;
-+
-+      /* see if we already have a table with this name - built in tables
-+         have precedence over iconv() - i.e. can't have the name of an
-+         existing table. Also, we may have already registered this file
-+         table */
-+      if (find_nls(charset) != NULL)
-+              return -1;
-+
-+      if ((iconv_d = iconv_open("UCS-2BE", charset)) == (iconv_t) -1)
-+              return -1;
-+
-+
-+      /* set up the table */
-+      if ((table = (struct nls_table *)malloc(sizeof (struct nls_table)))
-+                                                      == NULL) {
-+              return -1;
-+      }
-+
-+      /* give the table the file name, so we can find it again if needed */
-+      table->charset = strdup(charset);
-+      table->iconv_d = iconv_d;
-+      table->page_uni2charset = NULL;
-+      table->charset2uni = NULL;
-+      table->inc_use_count = inc_use_count;
-+      table->dec_use_count = dec_use_count;
-+      table->next = NULL;
-+
-+      /* register the table */
-+      return register_nls(table);
-+}
-+#endif
-diff -urN --exclude-from=- cdrtools-2.01/libunls/Targets cdrtools-2.01-jh/libunls/Targets
---- cdrtools-2.01/libunls/Targets      2002-12-03 02:34:27.000000000 +0200
-+++ cdrtools-2.01-jh/libunls/Targets   2004-02-02 18:31:22.000000000 +0200
-@@ -39,4 +39,5 @@
-       nls_cp10029.c \
-       nls_cp10079.c \
-       nls_cp10081.c \
--      nls_file.c
-+      nls_file.c \
-+      nls_iconv.c
-diff -urN --exclude-from=- cdrtools-2.01/mkisofs/joliet.c cdrtools-2.01-jh/mkisofs/joliet.c
---- cdrtools-2.01/mkisofs/joliet.c     2003-04-28 01:36:08.000000000 +0300
-+++ cdrtools-2.01-jh/mkisofs/joliet.c  2004-02-03 14:15:17.000000000 +0200
-@@ -90,6 +90,11 @@
- #include <unls.h>     /* For UNICODE translation */
- #include <schily.h>
-+#ifdef USE_ICONV
-+#include <iconv.h>
-+#include <errno.h>
-+#endif
-+
- static Uint   jpath_table_index;
- static struct directory **jpathlist;
- static int    next_jpath_index = 1;
-@@ -103,13 +108,23 @@
- };
- #ifdef        UDF
--      void    convert_to_unicode      __PR((unsigned char *buffer,
-+#     ifdef USE_ICONV
-+      size_t
-+#     else
-+      void
-+#     endif
-+              convert_to_unicode      __PR((unsigned char *buffer,
-               int size, char *source, struct nls_table *inls));
--      int     joliet_strlen           __PR((const char *string));
-+      int     joliet_strlen           __PR((const char *string, struct nls_table *inls));
- #else
--static void   convert_to_unicode      __PR((unsigned char *buffer,
-+#     ifdef USE_ICONV
-+      static size_t
-+#     else
-+      static void
-+#endif
-+              convert_to_unicode      __PR((unsigned char *buffer,
-               int size, char *source, struct nls_table *inls));
--static int    joliet_strlen           __PR((const char *string));
-+static int    joliet_strlen           __PR((const char *string, struct nls_table *inls));
- #endif
- static void   get_joliet_vol_desc     __PR((struct iso_primary_descriptor *jvol_desc));
- static void   assign_joliet_directory_addresses __PR((struct directory *node));
-@@ -161,6 +176,20 @@
-       if (inls == onls)
-               return (c);
-+#ifdef USE_ICONV
-+      if(inls->charset2uni == NULL || onls->page_uni2charset == NULL) {
-+              /*
-+               * This shouldn't be reached
-+               */
-+              static BOOL iconv_warned = FALSE;
-+              if(!iconv_warned) {
-+                      error("Warning: Iconv conversion not supported in conv_charset.\n");
-+                      iconv_warned = TRUE;
-+              }
-+              return (c);
-+      }
-+#endif
-+
-       /* get high and low UNICODE bytes */
-       uh = inls->charset2uni[c].uni2;
-       ul = inls->charset2uni[c].uni1;
-@@ -186,10 +215,18 @@
-  *
-  * Notes:
-  */
--#ifdef        UDF
--void
-+#ifdef USE_ICONV
-+#     if      UDF
-+size_t
-+#     else
-+static size_t
-+#     endif
- #else
-+#     if      UDF
-+void
-+#     else
- static void
-+#     endif
- #endif
- convert_to_unicode(buffer, size, source, inls)
-       unsigned char   *buffer;
-@@ -216,6 +253,51 @@
-               tmpbuf = (Uchar *) source;
-       }
-+#ifdef USE_ICONV
-+      if (inls->iconv_d && inls->charset2uni==NULL &&
-+                      inls->page_uni2charset==NULL) {
-+              char *inptr = tmpbuf;
-+              char *outptr = buffer;
-+              size_t inleft = strlen(tmpbuf);
-+              size_t inlen = inleft;
-+              size_t outleft = size;
-+
-+              iconv(inls->iconv_d, NULL, NULL, NULL, NULL);
-+              if(iconv(inls->iconv_d, &inptr, &inleft, &outptr, &outleft) ==
-+                              (size_t)-1 && errno == EILSEQ) {
-+                      fprintf(stderr, "Incorrectly encoded string (%s) "
-+                              "encountered.\nPossibly creating an invalid "
-+                              "Joliet extension. Aborting.\n", source);
-+                      exit(1);
-+              }
-+
-+              for (i = 0; (i + 1) < size - outleft; i += 2) { /* Size may be odd!!!*/
-+                      if (buffer[i]=='\0') {
-+                              switch (buffer[i+1]) {   /* Invalid characters for Joliet */
-+                                      case '*':
-+                                      case '/':
-+                                      case ':':
-+                                      case ';':
-+                                      case '?':
-+                                      case '\\':
-+                                              buffer[i+1]='_';
-+                                      default:
-+                                              if (buffer[i+1] == 0x7f ||
-+                                                          buffer[i+1] < 0x20)
-+                                                      buffer[i+1]='_';
-+                              }
-+                      }
-+              }
-+              if (size & 1) { /* beautification */
-+                      buffer[size - 1] = 0;
-+              }
-+              if (source == NULL) {
-+                      free(tmpbuf);
-+              }
-+              return (inlen - inleft);
-+      }
-+#endif
-+
-       /*
-        * Now start copying characters.  If the size was specified to be 0,
-        * then assume the input was 0 terminated.
-@@ -271,6 +353,9 @@
-       if (source == NULL) {
-               free(tmpbuf);
-       }
-+#ifdef USE_ICONV
-+      return j;
-+#endif
- }
- /*
-@@ -287,12 +372,50 @@
- #else
- static int
- #endif
--joliet_strlen(string)
-+joliet_strlen(string, inls)
-       const char      *string;
-+      struct nls_table *inls;
- {
-       int             rtn;
-+#ifdef USE_ICONV
-+      if (inls->iconv_d && inls->charset2uni==NULL &&
-+                      inls->page_uni2charset==NULL) {
-+              /*
-+               * we const-cast since we're sure iconv won't change
-+               * the string itself
-+               */
-+              char *string_ptr = (char *)string;
-+              size_t string_len = strlen(string);
-+
-+              /*
-+               * iconv has no way of finding out the required size
-+               * in the target
-+               */
-+
-+              char *tmp, *tmp_ptr;
-+              /* we assume that the maximum length is 2 * jlen */
-+              size_t tmp_len = (size_t)jlen * 2 + 1;
-+              tmp = e_malloc(tmp_len);
-+              tmp_ptr = tmp;
-+
-+              iconv(inls->iconv_d, NULL, NULL, NULL, NULL);
-+              iconv(inls->iconv_d, &string_ptr, &string_len, &tmp_ptr,
-+                      &tmp_len);
-+
-+              /*
-+               * iconv advanced the tmp pointer with as many chars
-+               * as it has written to it, so we add up the delta
-+               */
-+              rtn = (tmp_ptr - tmp);
-+
-+              free(tmp);
-+      } else {
-+              rtn = strlen(string) << 1;
-+      }
-+#else
-       rtn = strlen(string) << 1;
-+#endif
-       /*
-        * We do clamp the maximum length of a Joliet string to be the
-@@ -480,16 +603,33 @@
-       /* compare the Unicode names */
-       while (*rpnt && *lpnt) {
-+#ifdef USE_ICONV
-+              size_t ri, li;
-+
-+              ri = convert_to_unicode(rtmp, 2, rpnt, rinls);
-+              li = convert_to_unicode(ltmp, 2, lpnt, linls);
-+              rpnt += ri;
-+              lpnt += li;
-+              if(!ri && !li)
-+                      return (0);
-+              else if(ri && !li)
-+                      return (1);
-+              else if(!ri && li)
-+                      return (-1);
-+#else
-               convert_to_unicode(rtmp, 2, rpnt, rinls);
-               convert_to_unicode(ltmp, 2, lpnt, linls);
-+#endif
-               if (a_to_u_2_byte(rtmp) < a_to_u_2_byte(ltmp))
-                       return (-1);
-               if (a_to_u_2_byte(rtmp) > a_to_u_2_byte(ltmp))
-                       return (1);
-+#ifndef USE_ICONV
-               rpnt++;
-               lpnt++;
-+#endif
-       }
-       if (*rpnt)
-@@ -574,10 +714,10 @@
-               }
- #ifdef APPLE_HYB
-               if (USE_MAC_NAME(de))
--                      namelen = joliet_strlen(de->hfs_ent->name);
-+                      namelen = joliet_strlen(de->hfs_ent->name, hfs_inls);
-               else
- #endif        /* APPLE_HYB */
--                      namelen = joliet_strlen(de->name);
-+                      namelen = joliet_strlen(de->name, in_nls);
-               if (dpnt == root) {
-                       jpath_table_l[jpath_table_index] = 1;
-@@ -742,10 +882,10 @@
- #ifdef APPLE_HYB
-               /* Use the HFS name if it exists */
-               if (USE_MAC_NAME(s_entry1))
--                      cvt_len = joliet_strlen(s_entry1->hfs_ent->name);
-+                      cvt_len = joliet_strlen(s_entry1->hfs_ent->name, hfs_inls);
-               else
- #endif        /* APPLE_HYB */
--                      cvt_len = joliet_strlen(s_entry1->name);
-+                      cvt_len = joliet_strlen(s_entry1->name, in_nls);
-               /*
-                * Fix the record length
-@@ -891,12 +1031,12 @@
-                               if (USE_MAC_NAME(s_entry))
-                                       /* Use the HFS name if it exists */
-                                       jpath_table_size +=
--                                              joliet_strlen(s_entry->hfs_ent->name) +
-+                                              joliet_strlen(s_entry->hfs_ent->name, hfs_inls) +
-                                               offsetof(struct iso_path_table, name[0]);
-                               else
- #endif        /* APPLE_HYB */
-                                       jpath_table_size +=
--                                              joliet_strlen(s_entry->name) +
-+                                              joliet_strlen(s_entry->name, in_nls) +
-                                               offsetof(struct iso_path_table, name[0]);
-                               if (jpath_table_size & 1) {
-                                       jpath_table_size++;
-@@ -918,13 +1058,13 @@
-                               /* Use the HFS name if it exists */
-                               s_entry->jreclen =
-                               offsetof(struct iso_directory_record, name[0])
--                                      + joliet_strlen(s_entry->hfs_ent->name)
-+                                      + joliet_strlen(s_entry->hfs_ent->name, hfs_inls)
-                                       + 1;
-                       else
- #endif        /* APPLE_HYB */
-                               s_entry->jreclen =
-                               offsetof(struct iso_directory_record, name[0])
--                                      + joliet_strlen(s_entry->name)
-+                                      + joliet_strlen(s_entry->name, in_nls)
-                                       + 1;
-               } else {
-                       /*
-@@ -1072,6 +1212,9 @@
- #endif
-       while (*rpnt && *lpnt) {
-+#ifdef USE_ICONV
-+              size_t ri, li;
-+#endif
-               if (*rpnt == ';' && *lpnt != ';')
-                       return (-1);
-               if (*rpnt != ';' && *lpnt == ';')
-@@ -1092,16 +1235,32 @@
-                       return (1);
- #endif
-+#ifdef USE_ICONV
-+
-+              ri = convert_to_unicode(rtmp, 2, rpnt, rinls);
-+              li = convert_to_unicode(ltmp, 2, lpnt, linls);
-+              rpnt += ri;
-+              lpnt += li;
-+              if(!ri && !li)
-+                      return (0);
-+              else if(ri && !li)
-+                      return (1);
-+              else if(!ri && li)
-+                      return (-1);
-+#else
-               convert_to_unicode(rtmp, 2, rpnt, rinls);
-               convert_to_unicode(ltmp, 2, lpnt, linls);
-+#endif
-               if (a_to_u_2_byte(rtmp) < a_to_u_2_byte(ltmp))
-                       return (-1);
-               if (a_to_u_2_byte(rtmp) > a_to_u_2_byte(ltmp))
-                       return (1);
-+#ifndef USE_ICONV
-               rpnt++;
-               lpnt++;
-+#endif
-       }
-       if (*rpnt)
-               return (1);
-diff -urN --exclude-from=- cdrtools-2.01/mkisofs/Makefile cdrtools-2.01-jh/mkisofs/Makefile
---- cdrtools-2.01/mkisofs/Makefile     2004-01-02 17:23:32.000000000 +0200
-+++ cdrtools-2.01-jh/mkisofs/Makefile  2004-02-02 18:31:22.000000000 +0200
-@@ -32,6 +32,7 @@
- CPPOPTS +=    -DUDF
- CPPOPTS +=    -DDVD_VIDEO
- CPPOPTS +=    -DSORTING
-+CPPOPTS +=    -DUSE_ICONV
- CPPOPTS +=    -I../libhfs_iso/
- CPPOPTS       +=      -DHAVE_CONFIG_H -DUSE_LIBSCHILY -DUSE_SCG \
-               '-DAPPID_DEFAULT="MKISOFS ISO 9660/HFS FILESYSTEM BUILDER & CDRECORD CD-R/DVD CREATOR (C) 1993 E.YOUNGDALE (C) 1997 J.PEARSON/J.SCHILLING"' \
-diff -urN --exclude-from=- cdrtools-2.01/mkisofs/mkisofs.c cdrtools-2.01-jh/mkisofs/mkisofs.c
---- cdrtools-2.01/mkisofs/mkisofs.c    2004-01-07 01:23:46.000000000 +0200
-+++ cdrtools-2.01-jh/mkisofs/mkisofs.c 2004-02-02 18:31:22.000000000 +0200
-@@ -59,6 +59,11 @@
- #endif
- #endif        /* no_more_needed */
-+#ifdef USE_ICONV
-+#include <locale.h>
-+#include <langinfo.h>
-+#endif
-+
- struct directory *root = NULL;
- int           path_ind;
-@@ -223,6 +228,10 @@
- int   do_sort = 0;            /* sort file data */
- #endif /* SORTING */
-+#ifdef USE_ICONV
-+int   iconv_possible;
-+#endif
-+
- struct nls_table *in_nls = NULL;  /* input UNICODE conversion table */
- struct nls_table *out_nls = NULL; /* output UNICODE conversion table */
- #ifdef APPLE_HYB
-@@ -2235,6 +2244,37 @@
-       init_nls_file(hfs_ocharset);
- #endif /* APPLE_HYB */
-+#ifdef USE_ICONV
-+      iconv_possible = !(iso9660_level >= 4 || ((ocharset &&
-+              strcmp(ocharset, icharset ? icharset : "")) &&
-+              use_RockRidge) || apple_ext || apple_hyb);
-+
-+      setlocale(LC_CTYPE, "");
-+      
-+      if (icharset == NULL && iconv_possible) {
-+              char *charset = nl_langinfo(CODESET);
-+              /* set to detected value but only if it is not pure US-ASCII */
-+              if(strcmp(charset, "ANSI_X3.4-1968") != 0)
-+                      icharset = charset;
-+
-+              if(icharset && verbose > 0)
-+                      fprintf(stderr, "INFO:\t"
-+                      "%s character encoding detected by locale settings."
-+                      "\n\tAssuming %s encoded filenames on source "
-+                      "filesystem,\n"
-+                      "\tuse -input-charset to override.\n",
-+                      icharset, icharset);
-+      }
-+
-+      if(iconv_possible) {
-+              /*
-+               * don't care if initialization fails
-+               */
-+              init_nls_iconv(icharset);
-+              init_nls_iconv(ocharset);
-+      }
-+#endif
-+
-       if (icharset == NULL) {
- #if   (defined(__CYGWIN32__) || defined(__CYGWIN__)) && !defined(IS_CYGWIN_1)
-               in_nls = load_nls("cp437");
-@@ -2262,6 +2302,12 @@
-       if (in_nls == NULL || out_nls == NULL) { /* Unknown charset specified */
-               fprintf(stderr, "Unknown charset\nKnown charsets are:\n");
-               list_nls();     /* List all known charset names */
-+#ifdef USE_ICONV
-+              if(!iconv_possible)
-+                      fprintf(stderr, "Iconv charsets cannot be used with "
-+                              "Apple extension, HFS, ISO9660 version 2 or\n"
-+                              "Rock Ridge.\n");
-+#endif
-               exit(1);
-       }
-diff -urN --exclude-from=- cdrtools-2.01/mkisofs/mkisofs.h cdrtools-2.01-jh/mkisofs/mkisofs.h
---- cdrtools-2.01/mkisofs/mkisofs.h    2003-12-28 15:38:51.000000000 +0200
-+++ cdrtools-2.01-jh/mkisofs/mkisofs.h 2004-02-02 18:31:22.000000000 +0200
-@@ -501,9 +501,14 @@
- /* joliet.c */
- #ifdef        UDF
-+#     ifdef USE_ICONV
-+extern        size_t  convert_to_unicode      __PR((unsigned char *buffer,
-+                      int size, char *source, struct nls_table *inls));
-+#     else
- extern        void    convert_to_unicode      __PR((unsigned char *buffer,
-                       int size, char *source, struct nls_table *inls));
--extern        int     joliet_strlen           __PR((const char *string));
-+#     endif
-+extern        int     joliet_strlen           __PR((const char *string, struct nls_table *inls));
- #endif
- extern unsigned char conv_charset __PR((unsigned char, struct nls_table *,
-                               struct nls_table *));
-diff -urN --exclude-from=- cdrtools-2.01/mkisofs/udf.c cdrtools-2.01-jh/mkisofs/udf.c
---- cdrtools-2.01/mkisofs/udf.c        2003-04-28 01:34:52.000000000 +0300
-+++ cdrtools-2.01-jh/mkisofs/udf.c     2004-02-02 18:31:22.000000000 +0200
-@@ -442,7 +442,7 @@
-       int i;
-       int expanded_length;
--      expanded_length = joliet_strlen(src);
-+      expanded_length = joliet_strlen(src, in_nls);
-       if (expanded_length > 1024)
-               expanded_length = 1024;
-       if (expanded_length > (dst_size-1)*2)
diff --git a/src/patches/gcc-pr28045.patch b/src/patches/gcc-pr28045.patch
deleted file mode 100644 (file)
index b38ff9e..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-Index: fold-const.c
-===================================================================
-*** gcc4.0.3/gcc/fold-const.c  (revision 114755)
---- gcc4.0.3/fold-const.c      (working copy)
-*************** operand_equal_p (tree arg0, tree arg1, u
-*** 2497,2502 ****
---- 2497,2507 ----
-    if (TYPE_UNSIGNED (TREE_TYPE (arg0)) != TYPE_UNSIGNED (TREE_TYPE (arg1)))
-      return 0;
-  
-+   /* If both types don't have the same precision, then it is not safe
-+      to strip NOPs.  */
-+   if (TYPE_PRECISION (TREE_TYPE (arg0)) != TYPE_PRECISION (TREE_TYPE (arg1)))
-+     return 0;
-+ 
-    STRIP_NOPS (arg0);
-    STRIP_NOPS (arg1);
-  
-
-
-/* { dg-do run } */
-
-extern void abort(void);
-struct a
-{
-   unsigned int bits : 1;
-   signed long val : ((sizeof(long) * 8) - 1);
-};
-int Fnegate (struct a b)
-{
-  if ((-((long)b.val)) <= ((long) ((1UL << ((sizeof(long) * 8) - 2)) -1UL))
-      && (-((long)b.val)) >= (-(((long) ((1UL << ((sizeof(long) * 8) - 2)) -1UL))) - 1))
-     return 0 ;
-  abort ();
-}
-int main ()
-{
-  struct a b = {1, 1};
-  Fnegate (b);
-  return 0;
-}
diff --git a/src/patches/iptables-1.3.0-imq1.diff b/src/patches/iptables-1.3.0-imq1.diff
deleted file mode 100644 (file)
index c3bf8d0..0000000
+++ /dev/null
@@ -1,220 +0,0 @@
---- userspace/extensions.orig/.IMQ-test6       Thu Jan  1 01:00:00 1970
-+++ userspace/extensions/.IMQ-test6    Mon Jun 16 10:12:47 2003
-@@ -0,0 +1,3 @@
-+#!/bin/sh
-+# True if IMQ target patch is applied.
-+[ -f $KERNEL_DIR/net/ipv6/netfilter/ip6t_IMQ.c ] && echo IMQ
---- userspace/extensions.orig/libip6t_IMQ.c    Thu Jan  1 01:00:00 1970
-+++ userspace/extensions/libip6t_IMQ.c Mon Jun 16 10:12:47 2003
-@@ -0,0 +1,101 @@
-+/* Shared library add-on to iptables to add IMQ target support. */
-+#include <stdio.h>
-+#include <string.h>
-+#include <stdlib.h>
-+#include <getopt.h>
-+
-+#include <ip6tables.h>
-+#include <linux/netfilter_ipv6/ip6_tables.h>
-+#include <linux/netfilter_ipv6/ip6t_IMQ.h>
-+
-+/* Function which prints out usage message. */
-+static void
-+help(void)
-+{
-+      printf(
-+"IMQ target v%s options:\n"
-+"  --todev <N>                enqueue to imq<N>, defaults to 0\n", 
-+IPTABLES_VERSION);
-+}
-+
-+static struct option opts[] = {
-+      { "todev", 1, 0, '1' },
-+      { 0 }
-+};
-+
-+/* Initialize the target. */
-+static void
-+init(struct ip6t_entry_target *t, unsigned int *nfcache)
-+{
-+      struct ip6t_imq_info *mr = (struct ip6t_imq_info*)t->data;
-+
-+      mr->todev = 0;
-+      *nfcache |= NFC_UNKNOWN;
-+}
-+
-+/* Function which parses command options; returns true if it
-+   ate an option */
-+static int
-+parse(int c, char **argv, int invert, unsigned int *flags,
-+      const struct ip6t_entry *entry,
-+      struct ip6t_entry_target **target)
-+{
-+      struct ip6t_imq_info *mr = (struct ip6t_imq_info*)(*target)->data;
-+      
-+      switch(c) {
-+      case '1':
-+              if (check_inverse(optarg, &invert, NULL, 0))
-+                      exit_error(PARAMETER_PROBLEM,
-+                                 "Unexpected `!' after --todev");
-+              mr->todev=atoi(optarg);
-+              break;
-+      default:
-+              return 0;
-+      }
-+      return 1;
-+}
-+
-+static void
-+final_check(unsigned int flags)
-+{
-+}
-+
-+/* Prints out the targinfo. */
-+static void
-+print(const struct ip6t_ip6 *ip,
-+      const struct ip6t_entry_target *target,
-+      int numeric)
-+{
-+      struct ip6t_imq_info *mr = (struct ip6t_imq_info*)target->data;
-+
-+      printf("IMQ: todev %u ", mr->todev);
-+}
-+
-+/* Saves the union ipt_targinfo in parsable form to stdout. */
-+static void
-+save(const struct ip6t_ip6 *ip, const struct ip6t_entry_target *target)
-+{
-+      struct ip6t_imq_info *mr = (struct ip6t_imq_info*)target->data;
-+
-+      printf("--todev %u", mr->todev);
-+}
-+
-+static struct ip6tables_target imq = {
-+      .next           = NULL,
-+      .name           = "IMQ",
-+      .version        = IPTABLES_VERSION,
-+      .size           = IP6T_ALIGN(sizeof(struct ip6t_imq_info)),
-+      .userspacesize  = IP6T_ALIGN(sizeof(struct ip6t_imq_info)),
-+      .help           = &help,
-+      .init           = &init,
-+      .parse          = &parse,
-+      .final_check    = &final_check,
-+      .print          = &print,
-+      .save           = &save,
-+      .extra_opts     = opts
-+};
-+
-+void _init(void)
-+{
-+      register_target6(&imq);
-+}
---- userspace/extensions.orig/.IMQ-test        Thu Jan  1 01:00:00 1970
-+++ userspace/extensions/.IMQ-test     Mon Jun 16 10:12:47 2003
-@@ -0,0 +1,3 @@
-+#!/bin/sh
-+# True if IMQ target patch is applied.
-+[ -f $KERNEL_DIR/net/ipv4/netfilter/ipt_IMQ.c ] && echo IMQ
---- userspace/extensions.orig/libipt_IMQ.c     Thu Jan  1 01:00:00 1970
-+++ userspace/extensions/libipt_IMQ.c  Mon Jun 16 10:12:47 2003
-@@ -0,0 +1,101 @@
-+/* Shared library add-on to iptables to add IMQ target support. */
-+#include <stdio.h>
-+#include <string.h>
-+#include <stdlib.h>
-+#include <getopt.h>
-+
-+#include <iptables.h>
-+#include <linux/netfilter_ipv4/ip_tables.h>
-+#include <linux/netfilter_ipv4/ipt_IMQ.h>
-+
-+/* Function which prints out usage message. */
-+static void
-+help(void)
-+{
-+      printf(
-+"IMQ target v%s options:\n"
-+"  --todev <N>                enqueue to imq<N>, defaults to 0\n", 
-+IPTABLES_VERSION);
-+}
-+
-+static struct option opts[] = {
-+      { "todev", 1, 0, '1' },
-+      { 0 }
-+};
-+
-+/* Initialize the target. */
-+static void
-+init(struct ipt_entry_target *t, unsigned int *nfcache)
-+{
-+      struct ipt_imq_info *mr = (struct ipt_imq_info*)t->data;
-+
-+      mr->todev = 0;
-+      *nfcache |= NFC_UNKNOWN;
-+}
-+
-+/* Function which parses command options; returns true if it
-+   ate an option */
-+static int
-+parse(int c, char **argv, int invert, unsigned int *flags,
-+      const struct ipt_entry *entry,
-+      struct ipt_entry_target **target)
-+{
-+      struct ipt_imq_info *mr = (struct ipt_imq_info*)(*target)->data;
-+      
-+      switch(c) {
-+      case '1':
-+              if (check_inverse(optarg, &invert, NULL, 0))
-+                      exit_error(PARAMETER_PROBLEM,
-+                                 "Unexpected `!' after --todev");
-+              mr->todev=atoi(optarg);
-+              break;
-+      default:
-+              return 0;
-+      }
-+      return 1;
-+}
-+
-+static void
-+final_check(unsigned int flags)
-+{
-+}
-+
-+/* Prints out the targinfo. */
-+static void
-+print(const struct ipt_ip *ip,
-+      const struct ipt_entry_target *target,
-+      int numeric)
-+{
-+      struct ipt_imq_info *mr = (struct ipt_imq_info*)target->data;
-+
-+      printf("IMQ: todev %u ", mr->todev);
-+}
-+
-+/* Saves the union ipt_targinfo in parsable form to stdout. */
-+static void
-+save(const struct ipt_ip *ip, const struct ipt_entry_target *target)
-+{
-+      struct ipt_imq_info *mr = (struct ipt_imq_info*)target->data;
-+
-+      printf("--todev %u", mr->todev);
-+}
-+
-+static struct iptables_target imq = {
-+      .next           = NULL,
-+      .name           = "IMQ",
-+      .version        = IPTABLES_VERSION,
-+      .size           = IPT_ALIGN(sizeof(struct ipt_imq_info)),
-+      .userspacesize  = IPT_ALIGN(sizeof(struct ipt_imq_info)),
-+      .help           = &help,
-+      .init           = &init,
-+      .parse          = &parse,
-+      .final_check    = &final_check,
-+      .print          = &print,
-+      .save           = &save,
-+      .extra_opts     = opts
-+};
-+
-+void _init(void)
-+{
-+      register_target(&imq);
-+}
diff --git a/src/patches/iptables-1.3.6-imq.diff b/src/patches/iptables-1.3.6-imq.diff
deleted file mode 100644 (file)
index 262fef1..0000000
+++ /dev/null
@@ -1,221 +0,0 @@
---- iptables-1.3.6.orig/extensions.orig/.IMQ-test6     Thu Jan  1 01:00:00 1970\r
-+++ iptables-1.3.6/extensions/.IMQ-test6       Mon Jun 16 10:12:47 2003\r
-@@ -0,0 +1,3 @@\r
-+#!/bin/sh\r
-+# True if IMQ target patch is applied.\r
-+[ -f $KERNEL_DIR/net/ipv6/netfilter/ip6t_IMQ.c ] && echo IMQ\r
---- iptables-1.3.6.orig/extensions.orig/libip6t_IMQ.c  Thu Jan  1 01:00:00 1970\r
-+++ iptables-1.3.6/extensions/libip6t_IMQ.c    Mon Jun 16 10:12:47 2003\r
-@@ -0,0 +1,101 @@\r
-+/* Shared library add-on to iptables to add IMQ target support. */\r
-+#include <stdio.h>\r
-+#include <string.h>\r
-+#include <stdlib.h>\r
-+#include <getopt.h>\r
-+\r
-+#include <ip6tables.h>\r
-+#include <linux/netfilter_ipv6/ip6_tables.h>\r
-+#include <linux/netfilter_ipv6/ip6t_IMQ.h>\r
-+\r
-+/* Function which prints out usage message. */\r
-+static void\r
-+help(void)\r
-+{\r
-+      printf(\r
-+"IMQ target v%s options:\n"\r
-+"  --todev <N>                enqueue to imq<N>, defaults to 0\n", \r
-+IPTABLES_VERSION);\r
-+}\r
-+\r
-+static struct option opts[] = {\r
-+      { "todev", 1, 0, '1' },\r
-+      { 0 }\r
-+};\r
-+\r
-+/* Initialize the target. */\r
-+static void\r
-+init(struct ip6t_entry_target *t, unsigned int *nfcache)\r
-+{\r
-+      struct ip6t_imq_info *mr = (struct ip6t_imq_info*)t->data;\r
-+\r
-+      mr->todev = 0;\r
-+      *nfcache |= NFC_UNKNOWN;\r
-+}\r
-+\r
-+/* Function which parses command options; returns true if it\r
-+   ate an option */\r
-+static int\r
-+parse(int c, char **argv, int invert, unsigned int *flags,\r
-+      const struct ip6t_entry *entry,\r
-+      struct ip6t_entry_target **target)\r
-+{\r
-+      struct ip6t_imq_info *mr = (struct ip6t_imq_info*)(*target)->data;\r
-+      \r
-+      switch(c) {\r
-+      case '1':\r
-+              if (check_inverse(optarg, &invert, NULL, 0))\r
-+                      exit_error(PARAMETER_PROBLEM,\r
-+                                 "Unexpected `!' after --todev");\r
-+              mr->todev=atoi(optarg);\r
-+              break;\r
-+      default:\r
-+              return 0;\r
-+      }\r
-+      return 1;\r
-+}\r
-+\r
-+static void\r
-+final_check(unsigned int flags)\r
-+{\r
-+}\r
-+\r
-+/* Prints out the targinfo. */\r
-+static void\r
-+print(const struct ip6t_ip6 *ip,\r
-+      const struct ip6t_entry_target *target,\r
-+      int numeric)\r
-+{\r
-+      struct ip6t_imq_info *mr = (struct ip6t_imq_info*)target->data;\r
-+\r
-+      printf("IMQ: todev %u ", mr->todev);\r
-+}\r
-+\r
-+/* Saves the union ipt_targinfo in parsable form to stdout. */\r
-+static void\r
-+save(const struct ip6t_ip6 *ip, const struct ip6t_entry_target *target)\r
-+{\r
-+      struct ip6t_imq_info *mr = (struct ip6t_imq_info*)target->data;\r
-+\r
-+      printf("--todev %u", mr->todev);\r
-+}\r
-+\r
-+static struct ip6tables_target imq = {\r
-+      .next           = NULL,\r
-+      .name           = "IMQ",\r
-+      .version        = IPTABLES_VERSION,\r
-+      .size           = IP6T_ALIGN(sizeof(struct ip6t_imq_info)),\r
-+      .userspacesize  = IP6T_ALIGN(sizeof(struct ip6t_imq_info)),\r
-+      .help           = &help,\r
-+      .init           = &init,\r
-+      .parse          = &parse,\r
-+      .final_check    = &final_check,\r
-+      .print          = &print,\r
-+      .save           = &save,\r
-+      .extra_opts     = opts\r
-+};\r
-+\r
-+static __attribute__((constructor)) void _init(void)\r
-+{\r
-+      register_target6(&imq);\r
-+}\r
---- iptables-1.3.6.orig/extensions.orig/.IMQ-test      Thu Jan  1 01:00:00 1970\r
-+++ iptables-1.3.6/extensions/.IMQ-test        Mon Jun 16 10:12:47 2003\r
-@@ -0,0 +1,3 @@\r
-+#!/bin/sh\r
-+# True if IMQ target patch is applied.\r
-+[ -f $KERNEL_DIR/net/ipv4/netfilter/ipt_IMQ.c ] && echo IMQ\r
---- iptables-1.3.6.orig/extensions.orig/libipt_IMQ.c   Thu Jan  1 01:00:00 1970\r
-+++ iptables-1.3.6/extensions/libipt_IMQ.c     Mon Jun 16 10:12:47 2003\r
-@@ -0,0 +1,101 @@\r
-+/* Shared library add-on to iptables to add IMQ target support. */\r
-+#include <stdio.h>\r
-+#include <string.h>\r
-+#include <stdlib.h>\r
-+#include <getopt.h>\r
-+\r
-+#include <iptables.h>\r
-+#include <linux/netfilter_ipv4/ip_tables.h>\r
-+#include <linux/netfilter_ipv4/ipt_IMQ.h>\r
-+\r
-+/* Function which prints out usage message. */\r
-+static void\r
-+help(void)\r
-+{\r
-+      printf(\r
-+"IMQ target v%s options:\n"\r
-+"  --todev <N>                enqueue to imq<N>, defaults to 0\n", \r
-+IPTABLES_VERSION);\r
-+}\r
-+\r
-+static struct option opts[] = {\r
-+      { "todev", 1, 0, '1' },\r
-+      { 0 }\r
-+};\r
-+\r
-+/* Initialize the target. */\r
-+static void\r
-+init(struct ipt_entry_target *t, unsigned int *nfcache)\r
-+{\r
-+      struct ipt_imq_info *mr = (struct ipt_imq_info*)t->data;\r
-+\r
-+      mr->todev = 0;\r
-+      *nfcache |= NFC_UNKNOWN;\r
-+}\r
-+\r
-+/* Function which parses command options; returns true if it\r
-+   ate an option */\r
-+static int\r
-+parse(int c, char **argv, int invert, unsigned int *flags,\r
-+      const struct ipt_entry *entry,\r
-+      struct ipt_entry_target **target)\r
-+{\r
-+      struct ipt_imq_info *mr = (struct ipt_imq_info*)(*target)->data;\r
-+      \r
-+      switch(c) {\r
-+      case '1':\r
-+              if (check_inverse(optarg, &invert, NULL, 0))\r
-+                      exit_error(PARAMETER_PROBLEM,\r
-+                                 "Unexpected `!' after --todev");\r
-+              mr->todev=atoi(optarg);\r
-+              break;\r
-+      default:\r
-+              return 0;\r
-+      }\r
-+      return 1;\r
-+}\r
-+\r
-+static void\r
-+final_check(unsigned int flags)\r
-+{\r
-+}\r
-+\r
-+/* Prints out the targinfo. */\r
-+static void\r
-+print(const struct ipt_ip *ip,\r
-+      const struct ipt_entry_target *target,\r
-+      int numeric)\r
-+{\r
-+      struct ipt_imq_info *mr = (struct ipt_imq_info*)target->data;\r
-+\r
-+      printf("IMQ: todev %u ", mr->todev);\r
-+}\r
-+\r
-+/* Saves the union ipt_targinfo in parsable form to stdout. */\r
-+static void\r
-+save(const struct ipt_ip *ip, const struct ipt_entry_target *target)\r
-+{\r
-+      struct ipt_imq_info *mr = (struct ipt_imq_info*)target->data;\r
-+\r
-+      printf("--todev %u", mr->todev);\r
-+}\r
-+\r
-+static struct iptables_target imq = {\r
-+      .next           = NULL,\r
-+      .name           = "IMQ",\r
-+      .version        = IPTABLES_VERSION,\r
-+      .size           = IPT_ALIGN(sizeof(struct ipt_imq_info)),\r
-+      .userspacesize  = IPT_ALIGN(sizeof(struct ipt_imq_info)),\r
-+      .help           = &help,\r
-+      .init           = &init,\r
-+      .parse          = &parse,\r
-+      .final_check    = &final_check,\r
-+      .print          = &print,\r
-+      .save           = &save,\r
-+      .extra_opts     = opts\r
-+};\r
-+\r
-+static __attribute__((constructor)) void _init(void)\r
-+{\r
-+      register_target(&imq);\r
-+}\r
-\r
diff --git a/src/patches/iptables-1.4.1-imq.diff b/src/patches/iptables-1.4.1-imq.diff
deleted file mode 100755 (executable)
index 3c96a3b..0000000
+++ /dev/null
@@ -1,198 +0,0 @@
---- iptables-1.4.1-rc3.orig/extensions/.IMQ-test       1970-01-01 10:00:00.000000000 +1000
-+++ iptables-1.4.1-rc3/extensions/.IMQ-test    2008-06-08 22:41:49.000000000 +1000
-@@ -0,0 +1,3 @@
-+#!/bin/sh
-+# True if IMQ target patch is applied.
-+[ -f $KERNEL_DIR/include/linux/netfilter_ipv4/ipt_IMQ.h ] && echo IMQ
-diff -pruN iptables-1.4.1-rc3.orig/extensions/.IMQ-test6 iptables-1.4.1-rc3/extensions/.IMQ-test6
---- iptables-1.4.1-rc3.orig/extensions/.IMQ-test6      1970-01-01 10:00:00.000000000 +1000
-+++ iptables-1.4.1-rc3/extensions/.IMQ-test6   2008-06-08 22:41:49.000000000 +1000
-@@ -0,0 +1,3 @@
-+#!/bin/sh
-+# True if IMQ target patch is applied.
-+[ -f $KERNEL_DIR/include/linux/netfilter_ipv6/ip6t_IMQ.h ] && echo IMQ
-diff -pruN iptables-1.4.1-rc3.orig/extensions/libip6t_IMQ.c iptables-1.4.1-rc3/extensions/libip6t_IMQ.c
---- iptables-1.4.1-rc3.orig/extensions/libip6t_IMQ.c   1970-01-01 10:00:00.000000000 +1000
-+++ iptables-1.4.1-rc3/extensions/libip6t_IMQ.c        2008-06-08 22:46:57.000000000 +1000
-@@ -0,0 +1,89 @@
-+/* Shared library add-on to iptables to add IMQ target support. */
-+#include <stdio.h>
-+#include <string.h>
-+#include <stdlib.h>
-+#include <getopt.h>
-+
-+#include <ip6tables.h>
-+#include <linux/netfilter_ipv6/ip6_tables.h>
-+#include <linux/netfilter_ipv6/ip6t_IMQ.h>
-+
-+/* Function which prints out usage message. */
-+static void IMQ_help(void)
-+{
-+      printf(
-+"IMQ target v%s options:\n"
-+"  --todev <N>                enqueue to imq<N>, defaults to 0\n", 
-+XTABLES_VERSION);
-+}
-+
-+static struct option IMQ_opts[] = {
-+      { "todev", 1, 0, '1' },
-+      { 0 }
-+};
-+
-+/* Initialize the target. */
-+static void IMQ_init(struct xt_entry_target *t)
-+{
-+      struct ip6t_imq_info *mr = (struct ip6t_imq_info*)t->data;
-+
-+      mr->todev = 0;
-+}
-+
-+/* Function which parses command options; returns true if it
-+   ate an option */
-+static int IMQ_parse(int c, char **argv, int invert, unsigned int *flags,
-+      const void *entry,
-+      struct xt_entry_target **target)
-+{
-+      struct ip6t_imq_info *mr = (struct ip6t_imq_info*)(*target)->data;
-+      
-+      switch(c) {
-+      case '1':
-+              if (check_inverse(optarg, &invert, NULL, 0))
-+                      exit_error(PARAMETER_PROBLEM,
-+                                 "Unexpected `!' after --todev");
-+              mr->todev=atoi(optarg);
-+              break;
-+      default:
-+              return 0;
-+      }
-+      return 1;
-+}
-+
-+/* Prints out the targinfo. */
-+static void IMQ_print(const void *ip,
-+      const struct xt_entry_target *target,
-+      int numeric)
-+{
-+      struct ip6t_imq_info *mr = (struct ip6t_imq_info*)target->data;
-+
-+      printf("IMQ: todev %u ", mr->todev);
-+}
-+
-+/* Saves the union ipt_targinfo in parsable form to stdout. */
-+static void IMQ_save(const void *ip, const struct xt_entry_target *target)
-+{
-+      struct ip6t_imq_info *mr = (struct ip6t_imq_info*)target->data;
-+
-+      printf("--todev %u", mr->todev);
-+}
-+
-+static struct xtables_target imq = {
-+      .name           = "IMQ",
-+      .version        = XTABLES_VERSION,
-+      .family         = PF_INET6,
-+      .size           = XT_ALIGN(sizeof(struct ip6t_imq_info)),
-+      .userspacesize  = XT_ALIGN(sizeof(struct ip6t_imq_info)),
-+      .help           = IMQ_help,
-+      .init           = IMQ_init,
-+      .parse          = IMQ_parse,
-+      .print          = IMQ_print,
-+      .save           = IMQ_save,
-+      .extra_opts     = IMQ_opts,
-+};
-+
-+void _init(void)
-+{
-+      xtables_register_target(&imq);
-+}
-diff -pruN iptables-1.4.1-rc3.orig/extensions/libipt_IMQ.c iptables-1.4.1-rc3/extensions/libipt_IMQ.c
---- iptables-1.4.1-rc3.orig/extensions/libipt_IMQ.c    1970-01-01 10:00:00.000000000 +1000
-+++ iptables-1.4.1-rc3/extensions/libipt_IMQ.c 2008-06-08 22:46:25.000000000 +1000
-@@ -0,0 +1,88 @@
-+/* Shared library add-on to iptables to add IMQ target support. */
-+#include <stdio.h>
-+#include <string.h>
-+#include <stdlib.h>
-+#include <getopt.h>
-+
-+#include <iptables.h>
-+#include <linux/netfilter_ipv4/ip_tables.h>
-+#include <linux/netfilter_ipv4/ipt_IMQ.h>
-+
-+/* Function which prints out usage message. */
-+static void IMQ_help(void)
-+{
-+      printf(
-+"IMQ target v%s options:\n"
-+"  --todev <N>                enqueue to imq<N>, defaults to 0\n", 
-+XTABLES_VERSION);
-+}
-+
-+static struct option IMQ_opts[] = {
-+      { "todev", 1, 0, '1' },
-+      { 0 }
-+};
-+
-+/* Initialize the target. */
-+static void IMQ_init(struct xt_entry_target *t)
-+{
-+      struct ipt_imq_info *mr = (struct ipt_imq_info*)t->data;
-+
-+      mr->todev = 0;
-+}
-+
-+/* Function which parses command options; returns true if it
-+   ate an option */
-+static int IMQ_parse(int c, char **argv, int invert, unsigned int *flags,
-+      const void *entry, struct xt_entry_target **target)
-+{
-+      struct ipt_imq_info *mr = (struct ipt_imq_info*)(*target)->data;
-+      
-+      switch(c) {
-+      case '1':
-+              if (check_inverse(optarg, &invert, NULL, 0))
-+                      exit_error(PARAMETER_PROBLEM,
-+                                 "Unexpected `!' after --todev");
-+              mr->todev=atoi(optarg);
-+              break;
-+      default:
-+              return 0;
-+      }
-+      return 1;
-+}
-+
-+/* Prints out the targinfo. */
-+static void IMQ_print(const void *ip,
-+      const struct xt_entry_target *target,
-+      int numeric)
-+{
-+      struct ipt_imq_info *mr = (struct ipt_imq_info*)target->data;
-+
-+      printf("IMQ: todev %u ", mr->todev);
-+}
-+
-+/* Saves the union ipt_targinfo in parsable form to stdout. */
-+static void IMQ_save(const void *ip, const struct xt_entry_target *target)
-+{
-+      struct ipt_imq_info *mr = (struct ipt_imq_info*)target->data;
-+
-+      printf("--todev %u", mr->todev);
-+}
-+
-+static struct xtables_target imq = {
-+      .name           = "IMQ",
-+      .version        = XTABLES_VERSION,
-+      .family         = PF_INET,
-+      .size           = XT_ALIGN(sizeof(struct ipt_imq_info)),
-+      .userspacesize  = XT_ALIGN(sizeof(struct ipt_imq_info)),
-+      .help           = IMQ_help,
-+      .init           = IMQ_init,
-+      .parse          = IMQ_parse,
-+      .print          = IMQ_print,
-+      .save           = IMQ_save,
-+      .extra_opts     = IMQ_opts,
-+};
-+
-+void _init(void)
-+{
-+      xtables_register_target(&imq);
-+}
diff --git a/src/patches/libdlna-0.2.3-ffmpeg_not_found.patch b/src/patches/libdlna-0.2.3-ffmpeg_not_found.patch
deleted file mode 100644 (file)
index 46c8301..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-diff -Naur libdlna-0.2.3.org/configure libdlna-0.2.3/configure
---- libdlna-0.2.3.org/configure        2007-11-26 21:47:43.000000000 +0100
-+++ libdlna-0.2.3/configure    2008-12-27 22:22:18.000000000 +0100
-@@ -610,9 +610,9 @@
- fi
- echolog "Checking for libavformat ..."
--check_lib ffmpeg/avformat.h av_register_all -lavformat || die "Error, can't find libavformat !"
-+check_lib libavformat/avformat.h av_register_all -lavformat || die "Error, can't find libavformat !"
- echolog "Checking for libavcodec ..."
--check_lib ffmpeg/avcodec.h avcodec_register_all -lavcodec || die "Error, can't find libavcodec !"
-+check_lib libavcodec/avcodec.h avcodec_register_all -lavcodec || die "Error, can't find libavcodec !"
- #################################################
- #   version
-diff -Naur libdlna-0.2.3.org/src/av_mpeg4_part10.c libdlna-0.2.3/src/av_mpeg4_part10.c
---- libdlna-0.2.3.org/src/av_mpeg4_part10.c    2007-11-26 21:47:43.000000000 +0100
-+++ libdlna-0.2.3/src/av_mpeg4_part10.c        2008-12-27 22:23:12.000000000 +0100
-@@ -26,7 +26,7 @@
- #include <sys/stat.h>
- #include <fcntl.h>
--#include <ffmpeg/avcodec.h>
-+#include <libavcodec/avcodec.h>
- #include "dlna_internals.h"
- #include "profiles.h"
-diff -Naur libdlna-0.2.3.org/src/av_mpeg4_part2.c libdlna-0.2.3/src/av_mpeg4_part2.c
---- libdlna-0.2.3.org/src/av_mpeg4_part2.c     2007-11-26 21:47:43.000000000 +0100
-+++ libdlna-0.2.3/src/av_mpeg4_part2.c 2008-12-27 22:23:25.000000000 +0100
-@@ -26,7 +26,7 @@
- #include <sys/stat.h>
- #include <fcntl.h>
--#include <ffmpeg/avcodec.h>
-+#include <libavcodec/avcodec.h>
- #include "dlna_internals.h"
- #include "profiles.h"
-diff -Naur libdlna-0.2.3.org/src/containers.c libdlna-0.2.3/src/containers.c
---- libdlna-0.2.3.org/src/containers.c 2007-11-26 21:47:43.000000000 +0100
-+++ libdlna-0.2.3/src/containers.c     2008-12-27 22:23:47.000000000 +0100
-@@ -4,7 +4,7 @@
- #include <sys/stat.h>
- #include <fcntl.h>
--#include <ffmpeg/avformat.h>
-+#include <libavformat/avformat.h>
- #include "containers.h"
- #include "profiles.h"
-diff -Naur libdlna-0.2.3.org/src/profiles.h libdlna-0.2.3/src/profiles.h
---- libdlna-0.2.3.org/src/profiles.h   2007-11-26 21:47:43.000000000 +0100
-+++ libdlna-0.2.3/src/profiles.h       2008-12-27 22:24:47.000000000 +0100
-@@ -22,8 +22,8 @@
- #ifndef _PROFILES_H_
- #define _PROFILES_H_
--#include <ffmpeg/avcodec.h>
--#include <ffmpeg/avformat.h>
-+#include <libavcodec/avcodec.h>
-+#include <libavformat/avformat.h>
- #include "dlna_internals.h"
- #include "containers.h"
diff --git a/src/patches/libpcap-0.8.3-ppp.patch b/src/patches/libpcap-0.8.3-ppp.patch
deleted file mode 100644 (file)
index 923b71c..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
---- gencode.c.old      2004-06-21 19:43:24.611308762 +0100
-+++ gencode.c  2004-06-21 19:43:34.851140716 +0100
-@@ -5004,6 +5004,7 @@
-        */
-       switch (linktype) {
-       case DLT_SLIP:
-+      case DLT_PPP:
-               b0 = gen_relation(BPF_JEQ,
-                         gen_load(Q_LINK, gen_loadi(0), 1),
-                         gen_loadi(0),
diff --git a/src/patches/libpcap-0.8.3-shared.patch b/src/patches/libpcap-0.8.3-shared.patch
deleted file mode 100644 (file)
index d99b0af..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-diff -ruN libpcap-0.8.3.old/Makefile.in libpcap-0.8.3/Makefile.in
---- libpcap-0.8.3.old/Makefile.in      2001-01-18 05:05:12.000000000 +0100
-+++ libpcap-0.8.3/Makefile.in  2004-01-25 14:40:47.000000000 +0100
-@@ -22,6 +22,10 @@
- #
- # Various configurable paths (remember to edit Makefile.in, not Makefile)
- #
-+MAJOR=0
-+MINOR=8
-+SUBMINOR=3
-+VERSION = $(MAJOR).$(MINOR).$(SUBMINOR)
- # Top level hierarchy
- prefix = @prefix@
-@@ -47,7 +51,7 @@
- DEFS = @DEFS@
- # Standard CFLAGS
--CFLAGS = $(CCOPT) $(INCLS) $(DEFS)
-+CFLAGS = $(CCOPT) $(INCLS) $(DEFS) -fPIC -DPIC
- INSTALL = @INSTALL@
- INSTALL_PROGRAM = @INSTALL_PROGRAM@
-@@ -91,9 +95,14 @@
- TAGFILES = \
-       $(SRC) $(HDR) $(TAGHDR)
--CLEANFILES = $(OBJ) libpcap.a $(GENSRC) $(GENHDR) lex.yy.c
--all: libpcap.a
-+
-+CLEANFILES = $(OBJ) libpcap.a $(GENSRC) $(GENHDR) lex.yy.c libpcap.so.$(VERSION)
-+
-+all: libpcap.a libpcap.so.$(VERSION)
-+
-+libpcap.so.$(VERSION):
-+      gcc -shared -Wl,-soname -Wl,libpcap.so.$(VERSION) -o libpcap.so.$(VERSION) $(OBJ) -lc
- libpcap.a: $(OBJ)
-       @rm -f $@
-@@ -139,6 +148,10 @@
-       [ -d $(DESTDIR)$(libdir) ] || \
-           (mkdir -p $(DESTDIR)$(libdir); chmod 755 $(DESTDIR)$(libdir))
-       $(INSTALL_DATA) libpcap.a $(DESTDIR)$(libdir)/libpcap.a
-+      $(INSTALL_DATA) libpcap.so.$(VERSION)  $(DESTDIR)$(libdir)/libpcap.so.$(VERSION)
-+      ln -sf libpcap.so.$(VERSION) $(DESTDIR)$(libdir)/libpcap.so
-+      ln -sf libpcap.so.$(VERSION) $(DESTDIR)$(libdir)/libpcap.so.$(MAJOR)
-+      ln -sf libpcap.so.$(VERSION) $(DESTDIR)$(libdir)/libpcap.so.$(MAJOR).$(MINOR)
-       $(RANLIB) $(DESTDIR)$(libdir)/libpcap.a
-       [ -d $(DESTDIR)$(includedir) ] || \
-           (mkdir -p $(DESTDIR)$(includedir); chmod 755 $(DESTDIR)$(includedir))
diff --git a/src/patches/linux-2.6.20-hwmon-coretemp.patch b/src/patches/linux-2.6.20-hwmon-coretemp.patch
deleted file mode 100644 (file)
index 7808bb1..0000000
+++ /dev/null
@@ -1,549 +0,0 @@
-Index: linux-2.6.20-rc4/drivers/hwmon/coretemp.c
-===================================================================
---- /dev/null  1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.20-rc4/drivers/hwmon/coretemp.c  2007-01-14 21:49:52.764871760 +0100
-@@ -0,0 +1,472 @@
-+/*
-+ * coretemp.c - Linux kernel module for hardware monitoring
-+ *
-+ * Copyright (C) 2006 Rudolf Marek <r.marek@assembler.cz>
-+ *
-+ * Inspired from many hwmon drivers
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-+ * 02110-1301 USA.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/delay.h>
-+#include <linux/init.h>
-+#include <linux/slab.h>
-+#include <linux/jiffies.h>
-+#include <linux/hwmon.h>
-+#include <linux/sysfs.h>
-+#include <linux/hwmon-sysfs.h>
-+#include <linux/err.h>
-+#include <linux/mutex.h>
-+#include <linux/list.h>
-+#include <linux/platform_device.h>
-+#include <linux/cpu.h>
-+#include <asm/msr.h>
-+#include <asm/processor.h>
-+
-+#define DRVNAME               "coretemp"
-+
-+/*
-+   Following part ripped from the msr.c. It should be merged with generic MSR
-+   infrastructure (once ready)
-+*/
-+
-+static inline int rdmsr_eio(u32 reg, u32 *eax, u32 *edx)
-+{
-+      int err;
-+
-+      err = rdmsr_safe(reg, eax, edx);
-+      if (err)
-+              err = -EIO;
-+      return err;
-+}
-+
-+#ifdef CONFIG_SMP
-+
-+struct msr_command {
-+      int cpu;
-+      int err;
-+      u32 reg;
-+      u32 data[2];
-+};
-+
-+static void msr_smp_rdmsr(void *cmd_block)
-+{
-+      struct msr_command *cmd = (struct msr_command *)cmd_block;
-+
-+      if (cmd->cpu == smp_processor_id())
-+              cmd->err = rdmsr_eio(cmd->reg, &cmd->data[0], &cmd->data[1]);
-+}
-+
-+static inline int msr_read(int cpu, u32 reg, u32 * eax, u32 * edx)
-+{
-+      struct msr_command cmd;
-+      int ret;
-+
-+      preempt_disable();
-+      if (cpu == smp_processor_id()) {
-+              ret = rdmsr_eio(reg, eax, edx);
-+      } else {
-+              cmd.cpu = cpu;
-+              cmd.reg = reg;
-+
-+              smp_call_function(msr_smp_rdmsr, &cmd, 1, 1);
-+
-+              *eax = cmd.data[0];
-+              *edx = cmd.data[1];
-+
-+              ret = cmd.err;
-+      }
-+      preempt_enable();
-+      return ret;
-+}
-+
-+#else                         /* ! CONFIG_SMP */
-+
-+static inline int msr_read(int cpu, u32 reg, u32 *eax, u32 *edx)
-+{
-+      return rdmsr_eio(reg, eax, edx);
-+}
-+
-+#endif                                /* ! CONFIG_SMP */
-+
-+/* cut here */
-+
-+typedef enum { SHOW_TEMP, SHOW_TJMAX, SHOW_LABEL, SHOW_NAME } SHOW;
-+
-+/*
-+ * Functions declaration
-+ */
-+
-+static struct coretemp_data *coretemp_update_device(struct device *dev);
-+
-+struct coretemp_data {
-+      struct class_device *class_dev;
-+      struct mutex update_lock;
-+      const char *name;
-+      u32 id;
-+      char valid;             /* zero until following fields are valid */
-+      unsigned long last_updated;     /* in jiffies */
-+      int temp;
-+      int tjmax;
-+      /* registers values */
-+      u32 therm_status;
-+};
-+
-+static struct coretemp_data *coretemp_update_device(struct device *dev);
-+
-+/*
-+ * Sysfs stuff
-+ */
-+
-+static ssize_t show_name(struct device *dev, struct device_attribute
-+                        *devattr, char *buf)
-+{
-+      int ret;
-+      struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
-+      struct coretemp_data *data = dev_get_drvdata(dev);
-+
-+      if (attr->index == SHOW_NAME)
-+              ret = sprintf(buf, "%s\n", data->name);
-+      else    /* show label */
-+              ret = sprintf(buf, "Core %d\n", data->id);
-+      return ret;
-+}
-+
-+static ssize_t show_alarm(struct device *dev, struct device_attribute
-+                        *devattr, char *buf)
-+{
-+      struct coretemp_data *data = coretemp_update_device(dev);
-+      /* read the Out-of-spec log, never clear */
-+      return sprintf(buf, "%d\n", (data->therm_status >> 5) & 1);
-+}
-+
-+static ssize_t show_temp(struct device *dev,
-+                       struct device_attribute *devattr, char *buf)
-+{
-+      struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
-+      struct coretemp_data *data = coretemp_update_device(dev);
-+      return sprintf(buf, "%d\n",
-+                     attr->index ==
-+                     SHOW_TEMP ? data->temp : data->tjmax);
-+}
-+
-+static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, show_temp, NULL,
-+                        SHOW_TEMP);
-+static SENSOR_DEVICE_ATTR(temp1_crit, S_IRUGO, show_temp, NULL,
-+                        SHOW_TJMAX);
-+static DEVICE_ATTR(temp1_crit_alarm, S_IRUGO, show_alarm, NULL);
-+static SENSOR_DEVICE_ATTR(temp1_label, S_IRUGO, show_name, NULL, SHOW_LABEL);
-+static SENSOR_DEVICE_ATTR(name, S_IRUGO, show_name, NULL, SHOW_NAME);
-+
-+static struct attribute *coretemp_attributes[] = {
-+      &sensor_dev_attr_name.dev_attr.attr,
-+      &sensor_dev_attr_temp1_label.dev_attr.attr,
-+      &dev_attr_temp1_crit_alarm.attr,
-+      &sensor_dev_attr_temp1_input.dev_attr.attr,
-+      &sensor_dev_attr_temp1_crit.dev_attr.attr,
-+      NULL
-+};
-+
-+static const struct attribute_group coretemp_group = {
-+      .attrs = coretemp_attributes,
-+};
-+
-+static struct coretemp_data *coretemp_update_device(struct device *dev)
-+{
-+      struct coretemp_data *data = dev_get_drvdata(dev);
-+
-+      mutex_lock(&data->update_lock);
-+
-+      if (!data->valid || time_after(jiffies, data->last_updated + HZ)) {
-+              u32 eax, edx;
-+
-+              data->valid = 0;
-+              msr_read(data->id, MSR_IA32_THERM_STATUS, &eax, &edx);
-+              data->therm_status = eax;
-+
-+              /* update only if data has been valid */
-+              if (eax & 0x80000000) {
-+                      data->temp = data->tjmax - (((data->therm_status >> 16)
-+                                                      & 0x7f) * 1000);
-+                      data->valid = 1;
-+              }
-+              data->last_updated = jiffies;
-+      }
-+
-+      mutex_unlock(&data->update_lock);
-+      return data;
-+}
-+
-+static int __devinit coretemp_probe(struct platform_device *pdev)
-+{
-+      struct coretemp_data *data;
-+      struct cpuinfo_x86 *c = &(cpu_data)[pdev->id];
-+      int err;
-+      u32 eax, edx;
-+
-+      if (!(data = kzalloc(sizeof(struct coretemp_data), GFP_KERNEL))) {
-+              err = -ENOMEM;
-+              dev_err(&pdev->dev, "Out of memory\n");
-+              goto exit;
-+      }
-+
-+      data->id = pdev->id;
-+      data->name = "coretemp";
-+      mutex_init(&data->update_lock);
-+      /* Tjmax default is 100C */
-+      data->tjmax = 100000;
-+
-+      /* Some processors have Tjmax 85 following magic should detect it 
-+         Intel won't disclose the information without signed NDA, but
-+         individuals cannot sign it. Catch(ed) 22.
-+      */
-+
-+      if (((c->x86_model == 0xf) && (c->x86_mask > 3 )) ||
-+              (c->x86_model == 0xe))  {
-+
-+              err = msr_read(data->id, 0xee, &eax, &edx);
-+              if (err) {
-+                      dev_warn(&pdev->dev,
-+                               "Unable to access MSR 0xEE, Tjmax left at %d\n",
-+                               data->tjmax);
-+              } else if (eax & 0x40000000) {
-+                      data->tjmax = 85000;
-+              }
-+      }
-+
-+      /* test if we can access the THERM_STATUS MSR */
-+      err = msr_read(data->id, MSR_IA32_THERM_STATUS, &eax, &edx);
-+
-+      if (err) {
-+              dev_err(&pdev->dev,
-+                      "Unable to access THERM_STATUS MSR, giving up\n");
-+              goto exit_free;
-+      }
-+      platform_set_drvdata(pdev, data);
-+
-+      if ((err = sysfs_create_group(&pdev->dev.kobj, &coretemp_group)))
-+              goto exit_free;
-+
-+      data->class_dev = hwmon_device_register(&pdev->dev);
-+      if (IS_ERR(data->class_dev)) {
-+              err = PTR_ERR(data->class_dev);
-+              dev_err(&pdev->dev, "Class registration failed (%d)\n",
-+                      err);
-+              goto exit_class;
-+      }
-+
-+      dev_warn(&pdev->dev, "This driver uses undocumented features of Core "
-+                      "CPU (Intel will not disclose the information to "
-+                      "individuals). Temperature might be wrong!\n");
-+      return 0;
-+
-+exit_class:
-+      sysfs_remove_group(&pdev->dev.kobj, &coretemp_group);
-+exit_free:
-+      kfree(data);
-+exit:
-+      return err;
-+}
-+
-+static int __devexit coretemp_remove(struct platform_device *pdev)
-+{
-+      struct coretemp_data *data = platform_get_drvdata(pdev);
-+
-+      hwmon_device_unregister(data->class_dev);
-+      sysfs_remove_group(&pdev->dev.kobj, &coretemp_group);
-+      platform_set_drvdata(pdev, NULL);
-+      kfree(data);
-+      return 0;
-+}
-+
-+static struct platform_driver coretemp_driver = {
-+      .driver = {
-+                 .owner = THIS_MODULE,
-+                 .name = DRVNAME,
-+                 },
-+      .probe = coretemp_probe,
-+      .remove = __devexit_p(coretemp_remove),
-+};
-+
-+struct pdev_entry {
-+      struct list_head list;
-+      struct platform_device *pdev;
-+      unsigned int cpu;
-+};
-+
-+static LIST_HEAD(pdev_list);
-+static DEFINE_MUTEX(pdev_list_mutex);
-+
-+static int __cpuinit coretemp_devices_add(unsigned int cpu)
-+{
-+      int err;
-+      struct platform_device *pdev;
-+      struct pdev_entry *pdev_entry;
-+
-+      pdev = platform_device_alloc(DRVNAME, cpu);
-+      if (!pdev) {
-+              err = -ENOMEM;
-+              printk(KERN_ERR DRVNAME ": Device allocation failed\n");
-+              goto exit;
-+
-+      }
-+
-+      pdev_entry = kzalloc(sizeof(struct pdev_entry), GFP_KERNEL);
-+
-+      if (!pdev_entry) {
-+              err = -ENOMEM;
-+              goto exit_device_put;
-+      }
-+
-+      err = platform_device_add(pdev);
-+
-+      if (err) {
-+              printk(KERN_ERR DRVNAME ": Device addition failed (%d)\n",
-+                     err);
-+              goto exit_device_free;
-+      }
-+
-+      pdev_entry->pdev = pdev;
-+      pdev_entry->cpu = cpu;
-+      mutex_lock(&pdev_list_mutex);
-+      list_add_tail(&pdev_entry->list, &pdev_list);
-+      mutex_unlock(&pdev_list_mutex);
-+
-+      return 0;
-+
-+exit_device_free:
-+      kfree(pdev_entry);
-+exit_device_put:
-+      platform_device_put(pdev);
-+exit:
-+      return err;
-+}
-+
-+#ifdef CONFIG_HOTPLUG_CPU
-+void coretemp_devices_remove(unsigned int cpu)
-+{
-+      struct pdev_entry *p, *n;
-+      mutex_lock(&pdev_list_mutex);
-+      list_for_each_entry_safe(p, n, &pdev_list, list) {
-+              if (p->cpu == cpu) {
-+                      platform_device_unregister(p->pdev);
-+                      list_del(&p->list);
-+                      kfree(p);
-+              }
-+      }
-+      mutex_unlock(&pdev_list_mutex);
-+}
-+
-+static int coretemp_cpu_callback(struct notifier_block *nfb,
-+                               unsigned long action, void *hcpu)
-+{
-+      unsigned int cpu = (unsigned long) hcpu;
-+
-+      switch (action) {
-+      case CPU_ONLINE:
-+              coretemp_devices_add(cpu);
-+              break;
-+      case CPU_DEAD:
-+              coretemp_devices_remove(cpu);
-+              break;
-+      }
-+      return NOTIFY_OK;
-+}
-+
-+static struct notifier_block __cpuinitdata coretemp_cpu_notifier = {
-+      .notifier_call = coretemp_cpu_callback,
-+};
-+#endif                                /* !CONFIG_HOTPLUG_CPU */
-+
-+static int __init coretemp_init(void)
-+{
-+      int i, err = -ENODEV;
-+      struct pdev_entry *p, *n;
-+
-+      /* quick check if we run Intel */
-+      if (cpu_data[0].x86_vendor != X86_VENDOR_INTEL)
-+              goto exit;
-+
-+      err = platform_driver_register(&coretemp_driver);
-+      if (err)
-+              goto exit;
-+
-+      for_each_online_cpu(i) {
-+              struct cpuinfo_x86 *c = &(cpu_data)[i];
-+
-+              /* check if family 6, models e, f */
-+              if ((c->cpuid_level < 0) || (c->x86 != 0x6) ||
-+                  !((c->x86_model == 0xe) || (c->x86_model == 0xf))) {
-+
-+                      /* supported CPU not found, but report the unknown
-+                         family 6 CPU */
-+                      if ((c->x86 == 0x6) && (c->x86_model > 0xf))
-+                              printk(KERN_WARNING DRVNAME ": Unknown CPU, please"
-+                         " report to the lm-sensors@lm-sensors.org\n");
-+                      continue;
-+              }
-+
-+              err = coretemp_devices_add(i);
-+              if (err)
-+                      goto exit_driver;
-+      }
-+      if (list_empty(&pdev_list)) {
-+              err = -ENODEV;
-+              goto exit_driver_unreg;
-+      }
-+
-+#ifdef CONFIG_HOTPLUG_CPU
-+      register_hotcpu_notifier(&coretemp_cpu_notifier);
-+#endif
-+      return 0;
-+
-+exit_driver:
-+      mutex_lock(&pdev_list_mutex);
-+      list_for_each_entry_safe(p, n, &pdev_list, list) {
-+              platform_device_unregister(p->pdev);
-+              list_del(&p->list);
-+              kfree(p);
-+      }
-+      mutex_unlock(&pdev_list_mutex);
-+exit_driver_unreg:
-+      platform_driver_unregister(&coretemp_driver);
-+exit:
-+      return err;
-+}
-+
-+static void __exit coretemp_exit(void)
-+{
-+      struct pdev_entry *p, *n;
-+#ifdef CONFIG_HOTPLUG_CPU
-+      unregister_hotcpu_notifier(&coretemp_cpu_notifier);
-+#endif
-+      mutex_lock(&pdev_list_mutex);
-+      list_for_each_entry_safe(p, n, &pdev_list, list) {
-+              platform_device_unregister(p->pdev);
-+              list_del(&p->list);
-+              kfree(p);
-+      }
-+      mutex_unlock(&pdev_list_mutex);
-+      platform_driver_unregister(&coretemp_driver);
-+}
-+
-+MODULE_AUTHOR("Rudolf Marek <r.marek@assembler.cz>");
-+MODULE_DESCRIPTION("Intel Core temperature monitor");
-+MODULE_LICENSE("GPL");
-+
-+module_init(coretemp_init)
-+module_exit(coretemp_exit)
-Index: linux-2.6.20-rc4/drivers/hwmon/Makefile
-===================================================================
---- linux-2.6.20-rc4.orig/drivers/hwmon/Makefile       2007-01-07 06:45:51.000000000 +0100
-+++ linux-2.6.20-rc4/drivers/hwmon/Makefile    2007-01-14 21:29:41.899868496 +0100
-@@ -21,6 +21,7 @@
- obj-$(CONFIG_SENSORS_ADM9240) += adm9240.o
- obj-$(CONFIG_SENSORS_AMS)     += ams/
- obj-$(CONFIG_SENSORS_ATXP1)   += atxp1.o
-+obj-$(CONFIG_SENSORS_CORETEMP)        += coretemp.o
- obj-$(CONFIG_SENSORS_DS1621)  += ds1621.o
- obj-$(CONFIG_SENSORS_F71805F) += f71805f.o
- obj-$(CONFIG_SENSORS_FSCHER)  += fscher.o
-Index: linux-2.6.20-rc4/drivers/hwmon/Kconfig
-===================================================================
---- linux-2.6.20-rc4.orig/drivers/hwmon/Kconfig        2007-01-07 06:45:51.000000000 +0100
-+++ linux-2.6.20-rc4/drivers/hwmon/Kconfig     2007-01-14 21:40:33.336991782 +0100
-@@ -156,6 +156,14 @@
-         This driver can also be built as a module.  If so, the module
-         will be called atxp1.
-+config SENSORS_CORETEMP
-+      tristate "Intel Core (2) Duo/Solo temperature sensor"
-+      depends on HWMON && X86 && EXPERIMENTAL
-+      help
-+        If you say yes here you get support for the temperature
-+        sensor inside your CPU. Supported all are all known variants
-+        of Intel Core family.
-+
- config SENSORS_DS1621
-       tristate "Dallas Semiconductor DS1621 and DS1625"
-       depends on HWMON && I2C
---- /dev/null  1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.20-rc4/Documentation/hwmon/coretemp      2007-01-14 22:01:58.766244221 +0100
-@@ -0,0 +1,37 @@
-+Kernel driver coretemp
-+======================
-+
-+Supported chips:
-+  * All Intel Core family
-+    Prefix: 'coretemp'
-+    Addresses scanned: CPUID (family 0x6, models 0xe, 0xf)
-+    Datasheet: Intel 64 and IA-32 Architectures Software Developer's Manual
-+               Volume 3A: System Programming Guide
-+
-+Author: Rudolf Marek
-+Contact: Rudolf Marek <r.marek@assembler.cz>
-+
-+Description
-+-----------
-+
-+This driver permits reading temperature sensor embedded inside Intel Core CPU.
-+Temperature is measured in degrees Celsius and measurement resolution is
-+1 degree C. Valid temperatures are from 0 to TjMax degrees C, because
-+the actual temperature is in fact a delta from TjMax.
-+
-+Temperature known as TjMax is the maximum junction temperature of processor.
-+Intel defines this temperature as 85C or 100C. At this temperature, protection
-+mechanism will perform actions to forcibly cool down the processor. Alarm
-+may be raised, if the temperature grows enough (more than TjMax) to trigger
-+the Out-Of-Spec bit. Following table summarizes the exported sysfs files:
-+
-+temp1_input    - Core temperature (in milidegrees of Celsius).
-+temp1_crit     - Maximum junction temperature  (in milidegrees of Celsius).
-+temp1_crit_alarm - Set when Out-of-spec bit is set, never clears.
-+                 Correct CPU operation is no longer guaranteed.
-+temp1_label    - Contains string with the "Core X", where X is processor
-+                 number.
-+
-+The TjMax temperature is set to 85C if undocumented model specific register
-+(UMSR) 0xee has bit 30 set. If not the TjMax is 100C as documented in processor
-+datasheet. Intel will not disclose this information to individuals.
diff --git a/src/patches/linux-2.6.20-imq.diff b/src/patches/linux-2.6.20-imq.diff
deleted file mode 100644 (file)
index d8b91ab..0000000
+++ /dev/null
@@ -1,876 +0,0 @@
---- linux-2.6.20.7-original/drivers/net/imq.c  1970-01-01 02:00:00.000000000 +0200\r
-+++ linux-2.6.20.7/drivers/net/imq.c   2007-04-19 16:22:34.000000000 +0300\r
-@@ -0,0 +1,402 @@\r
-+/*\r
-+ *             Pseudo-driver for the intermediate queue device.\r
-+ *\r
-+ *             This program is free software; you can redistribute it and/or\r
-+ *             modify it under the terms of the GNU General Public License\r
-+ *             as published by the Free Software Foundation; either version\r
-+ *             2 of the License, or (at your option) any later version.\r
-+ *\r
-+ * Authors:    Patrick McHardy, <kaber@trash.net>\r
-+ *\r
-+ *            The first version was written by Martin Devera, <devik@cdi.cz>\r
-+ *\r
-+ * Credits:    Jan Rafaj <imq2t@cedric.vabo.cz>\r
-+ *              - Update patch to 2.4.21\r
-+ *             Sebastian Strollo <sstrollo@nortelnetworks.com>\r
-+ *              - Fix "Dead-loop on netdevice imq"-issue\r
-+ *             Marcel Sebek <sebek64@post.cz>\r
-+ *              - Update to 2.6.2-rc1\r
-+ *\r
-+ *           After some time of inactivity there is a group taking care\r
-+ *           of IMQ again: http://www.linuximq.net\r
-+ *\r
-+ *\r
-+ *           2004/06/30 - New version of IMQ patch to kernels <=2.6.7 including\r
-+ *           the following changes:\r
-+ *\r
-+ *           - Correction of ipv6 support "+"s issue (Hasso Tepper)\r
-+ *           - Correction of imq_init_devs() issue that resulted in\r
-+ *           kernel OOPS unloading IMQ as module (Norbert Buchmuller)\r
-+ *           - Addition of functionality to choose number of IMQ devices\r
-+ *           during kernel config (Andre Correa)\r
-+ *           - Addition of functionality to choose how IMQ hooks on\r
-+ *           PRE and POSTROUTING (after or before NAT) (Andre Correa)\r
-+ *           - Cosmetic corrections (Norbert Buchmuller) (Andre Correa)\r
-+ *\r
-+ *\r
-+ *             2005/12/16 - IMQ versions between 2.6.7 and 2.6.13 were\r
-+ *             released with almost no problems. 2.6.14-x was released\r
-+ *             with some important changes: nfcache was removed; After\r
-+ *             some weeks of trouble we figured out that some IMQ fields\r
-+ *             in skb were missing in skbuff.c - skb_clone and copy_skb_header.\r
-+ *             These functions are correctly patched by this new patch version.\r
-+ *\r
-+ *             Thanks for all who helped to figure out all the problems with\r
-+ *             2.6.14.x: Patrick McHardy, Rune Kock, VeNoMouS, Max CtRiX,\r
-+ *             Kevin Shanahan, Richard Lucassen, Valery Dachev (hopefully\r
-+ *             I didn't forget anybody). I apologize again for my lack of time.\r
-+ *\r
-+ *             More info at: http://www.linuximq.net/ (Andre Correa)\r
-+ */\r
-+\r
-+#include <linux/module.h>\r
-+#include <linux/kernel.h>\r
-+#include <linux/moduleparam.h>\r
-+#include <linux/skbuff.h>\r
-+#include <linux/netdevice.h>\r
-+#include <linux/rtnetlink.h>\r
-+#include <linux/if_arp.h>\r
-+#include <linux/netfilter.h>\r
-+#include <linux/netfilter_ipv4.h>\r
-+#if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE)\r
-+      #include <linux/netfilter_ipv6.h>\r
-+#endif\r
-+#include <linux/imq.h>\r
-+#include <net/pkt_sched.h>\r
-+\r
-+extern int qdisc_restart1(struct net_device *dev);\r
-+\r
-+static nf_hookfn imq_nf_hook;\r
-+\r
-+static struct nf_hook_ops imq_ingress_ipv4 = {\r
-+      .hook           = imq_nf_hook,\r
-+      .owner          = THIS_MODULE,\r
-+      .pf             = PF_INET,\r
-+      .hooknum        = NF_IP_PRE_ROUTING,\r
-+#if defined(CONFIG_IMQ_BEHAVIOR_BA) || defined(CONFIG_IMQ_BEHAVIOR_BB)\r
-+      .priority       = NF_IP_PRI_MANGLE + 1\r
-+#else\r
-+      .priority       = NF_IP_PRI_NAT_DST + 1\r
-+#endif\r
-+};\r
-+\r
-+static struct nf_hook_ops imq_egress_ipv4 = {\r
-+      .hook           = imq_nf_hook,\r
-+      .owner          = THIS_MODULE,\r
-+      .pf             = PF_INET,\r
-+      .hooknum        = NF_IP_POST_ROUTING,\r
-+#if defined(CONFIG_IMQ_BEHAVIOR_AA) || defined(CONFIG_IMQ_BEHAVIOR_BA)\r
-+      .priority       = NF_IP_PRI_LAST\r
-+#else\r
-+      .priority       = NF_IP_PRI_NAT_SRC - 1\r
-+#endif\r
-+};\r
-+\r
-+#if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE)\r
-+static struct nf_hook_ops imq_ingress_ipv6 = {\r
-+      .hook           = imq_nf_hook,\r
-+      .owner          = THIS_MODULE,\r
-+      .pf             = PF_INET6,\r
-+      .hooknum        = NF_IP6_PRE_ROUTING,\r
-+#if defined(CONFIG_IMQ_BEHAVIOR_BA) || defined(CONFIG_IMQ_BEHAVIOR_BB)\r
-+      .priority       = NF_IP6_PRI_MANGLE + 1\r
-+#else\r
-+      .priority       = NF_IP6_PRI_NAT_DST + 1\r
-+#endif\r
-+};\r
-+\r
-+static struct nf_hook_ops imq_egress_ipv6 = {\r
-+      .hook           = imq_nf_hook,\r
-+      .owner          = THIS_MODULE,\r
-+      .pf             = PF_INET6,\r
-+      .hooknum        = NF_IP6_POST_ROUTING,\r
-+#if defined(CONFIG_IMQ_BEHAVIOR_AA) || defined(CONFIG_IMQ_BEHAVIOR_BA)\r
-+      .priority       = NF_IP6_PRI_LAST\r
-+#else\r
-+      .priority       = NF_IP6_PRI_NAT_SRC - 1\r
-+#endif\r
-+};\r
-+#endif\r
-+\r
-+#if defined(CONFIG_IMQ_NUM_DEVS)\r
-+static unsigned int numdevs = CONFIG_IMQ_NUM_DEVS;\r
-+#else\r
-+static unsigned int numdevs = 2;\r
-+#endif\r
-+\r
-+static struct net_device *imq_devs;\r
-+\r
-+static struct net_device_stats *imq_get_stats(struct net_device *dev)\r
-+{\r
-+      return (struct net_device_stats *)dev->priv;\r
-+}\r
-+\r
-+/* called for packets kfree'd in qdiscs at places other than enqueue */\r
-+static void imq_skb_destructor(struct sk_buff *skb)\r
-+{\r
-+      struct nf_info *info = skb->nf_info;\r
-+\r
-+      if (info) {\r
-+              if (info->indev)\r
-+                      dev_put(info->indev);\r
-+              if (info->outdev)\r
-+                      dev_put(info->outdev);\r
-+              kfree(info);\r
-+      }\r
-+}\r
-+\r
-+static int imq_dev_xmit(struct sk_buff *skb, struct net_device *dev)\r
-+{\r
-+      struct net_device_stats *stats = (struct net_device_stats*) dev->priv;\r
-+\r
-+      stats->tx_bytes += skb->len;\r
-+      stats->tx_packets++;\r
-+\r
-+      skb->imq_flags = 0;\r
-+      skb->destructor = NULL;\r
-+\r
-+      dev->trans_start = jiffies;\r
-+      nf_reinject(skb, skb->nf_info, NF_ACCEPT);\r
-+      return 0;\r
-+}\r
-+\r
-+static int imq_nf_queue(struct sk_buff *skb, struct nf_info *info, unsigned queue_num, void *data)\r
-+{\r
-+      struct net_device *dev;\r
-+      struct net_device_stats *stats;\r
-+      struct sk_buff *skb2 = NULL;\r
-+      struct Qdisc *q;\r
-+      unsigned int index = skb->imq_flags&IMQ_F_IFMASK;\r
-+      int ret = -1;\r
-+\r
-+      if (index > numdevs)\r
-+              return -1;\r
-+\r
-+      dev = imq_devs + index;\r
-+      if (!(dev->flags & IFF_UP)) {\r
-+              skb->imq_flags = 0;\r
-+              nf_reinject(skb, info, NF_ACCEPT);\r
-+              return 0;\r
-+      }\r
-+      dev->last_rx = jiffies;\r
-+\r
-+      if (skb->destructor) {\r
-+              skb2 = skb;\r
-+              skb = skb_clone(skb, GFP_ATOMIC);\r
-+              if (!skb)\r
-+                      return -1;\r
-+      }\r
-+      skb->nf_info = info;\r
-+\r
-+      stats = (struct net_device_stats *)dev->priv;\r
-+      stats->rx_bytes+= skb->len;\r
-+      stats->rx_packets++;\r
-+\r
-+      spin_lock_bh(&dev->queue_lock);\r
-+      q = dev->qdisc;\r
-+      if (q->enqueue) {\r
-+              q->enqueue(skb_get(skb), q);\r
-+              if (skb_shared(skb)) {\r
-+                      skb->destructor = imq_skb_destructor;\r
-+                      kfree_skb(skb);\r
-+                      ret = 0;\r
-+              }\r
-+      }\r
-+      if (spin_is_locked(&dev->_xmit_lock))\r
-+              netif_schedule(dev);\r
-+      else\r
-+              while (!netif_queue_stopped(dev) && qdisc_restart1(dev) < 0)\r
-+                      /* NOTHING */;\r
-+\r
-+      spin_unlock_bh(&dev->queue_lock);\r
-+\r
-+      if (skb2)\r
-+              kfree_skb(ret ? skb : skb2);\r
-+\r
-+      return ret;\r
-+}\r
-+\r
-+static struct nf_queue_handler nfqh = {\r
-+      .name  = "imq",\r
-+      .outfn = imq_nf_queue,\r
-+};\r
-+\r
-+static unsigned int imq_nf_hook(unsigned int hook, struct sk_buff **pskb,\r
-+                              const struct net_device *indev,\r
-+                              const struct net_device *outdev,\r
-+                              int (*okfn)(struct sk_buff *))\r
-+{\r
-+      if ((*pskb)->imq_flags & IMQ_F_ENQUEUE)\r
-+              return NF_QUEUE;\r
-+\r
-+      return NF_ACCEPT;\r
-+}\r
-+\r
-+\r
-+static int __init imq_init_hooks(void)\r
-+{\r
-+      int err;\r
-+\r
-+      err = nf_register_queue_handler(PF_INET, &nfqh);\r
-+      if (err > 0)\r
-+              goto err1;\r
-+      if ((err = nf_register_hook(&imq_ingress_ipv4)))\r
-+              goto err2;\r
-+      if ((err = nf_register_hook(&imq_egress_ipv4)))\r
-+              goto err3;\r
-+#if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE)\r
-+      if ((err = nf_register_queue_handler(PF_INET6, &nfqh)))\r
-+              goto err4;\r
-+      if ((err = nf_register_hook(&imq_ingress_ipv6)))\r
-+              goto err5;\r
-+      if ((err = nf_register_hook(&imq_egress_ipv6)))\r
-+              goto err6;\r
-+#endif\r
-+\r
-+      return 0;\r
-+\r
-+#if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE)\r
-+err6:\r
-+      nf_unregister_hook(&imq_ingress_ipv6);\r
-+err5:\r
-+      nf_unregister_queue_handler(PF_INET6);\r
-+err4:\r
-+      nf_unregister_hook(&imq_egress_ipv6);\r
-+#endif\r
-+err3:\r
-+      nf_unregister_hook(&imq_ingress_ipv4);\r
-+err2:\r
-+      nf_unregister_queue_handler(PF_INET);\r
-+err1:\r
-+      return err;\r
-+}\r
-+\r
-+static void __exit imq_unhook(void)\r
-+{\r
-+      nf_unregister_hook(&imq_ingress_ipv4);\r
-+      nf_unregister_hook(&imq_egress_ipv4);\r
-+      nf_unregister_queue_handler(PF_INET);\r
-+#if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE)\r
-+      nf_unregister_hook(&imq_ingress_ipv6);\r
-+      nf_unregister_hook(&imq_egress_ipv6);\r
-+      nf_unregister_queue_handler(PF_INET6);\r
-+#endif\r
-+}\r
-+\r
-+static int __init imq_dev_init(struct net_device *dev)\r
-+{\r
-+      dev->hard_start_xmit    = imq_dev_xmit;\r
-+      dev->type               = ARPHRD_VOID;\r
-+      dev->mtu                = 16000;\r
-+      dev->tx_queue_len       = 11000;\r
-+      dev->flags              = IFF_NOARP;\r
-+      dev->priv = kmalloc(sizeof(struct net_device_stats), GFP_KERNEL);\r
-+      if (dev->priv == NULL)\r
-+              return -ENOMEM;\r
-+      memset(dev->priv, 0, sizeof(struct net_device_stats));\r
-+      dev->get_stats          = imq_get_stats;\r
-+\r
-+      return 0;\r
-+}\r
-+\r
-+static void imq_dev_uninit(struct net_device *dev)\r
-+{\r
-+      kfree(dev->priv);\r
-+}\r
-+\r
-+static int __init imq_init_devs(void)\r
-+{\r
-+      struct net_device *dev;\r
-+      int i,j;\r
-+      j = numdevs;\r
-+\r
-+      if (!numdevs || numdevs > IMQ_MAX_DEVS) {\r
-+              printk(KERN_ERR "IMQ: numdevs has to be betweed 1 and %u\n",\r
-+                     IMQ_MAX_DEVS);\r
-+              return -EINVAL;\r
-+      }\r
-+\r
-+      imq_devs = kmalloc(sizeof(struct net_device) * numdevs, GFP_KERNEL);\r
-+      if (!imq_devs)\r
-+              return -ENOMEM;\r
-+      memset(imq_devs, 0, sizeof(struct net_device) * numdevs);\r
-+\r
-+      /* we start counting at zero */\r
-+      numdevs--;\r
-+\r
-+      for (i = 0, dev = imq_devs; i <= numdevs; i++, dev++) {\r
-+              SET_MODULE_OWNER(dev);\r
-+              strcpy(dev->name, "imq%d");\r
-+              dev->init   = imq_dev_init;\r
-+              dev->uninit = imq_dev_uninit;\r
-+\r
-+              if (register_netdev(dev) < 0)\r
-+                      goto err_register;\r
-+      }\r
-+      printk(KERN_INFO "IMQ starting with %u devices...\n", j);\r
-+      return 0;\r
-+\r
-+err_register:\r
-+      for (; i; i--)\r
-+              unregister_netdev(--dev);\r
-+      kfree(imq_devs);\r
-+      return -EIO;\r
-+}\r
-+\r
-+static void imq_cleanup_devs(void)\r
-+{\r
-+      int i;\r
-+      struct net_device *dev = imq_devs;\r
-+\r
-+      for (i = 0; i <= numdevs; i++)\r
-+              unregister_netdev(dev++);\r
-+\r
-+      kfree(imq_devs);\r
-+}\r
-+\r
-+static int __init imq_init_module(void)\r
-+{\r
-+      int err;\r
-+\r
-+      if ((err = imq_init_devs())) {\r
-+              printk(KERN_ERR "IMQ: Error trying imq_init_devs()\n");\r
-+              return err;\r
-+      }\r
-+      if ((err = imq_init_hooks())) {\r
-+              printk(KERN_ERR "IMQ: Error trying imq_init_hooks()\n");\r
-+              imq_cleanup_devs();\r
-+              return err;\r
-+      }\r
-+\r
-+      printk(KERN_INFO "IMQ driver loaded successfully.\n");\r
-+\r
-+#if defined(CONFIG_IMQ_BEHAVIOR_BA) || defined(CONFIG_IMQ_BEHAVIOR_BB)\r
-+      printk(KERN_INFO "\tHooking IMQ before NAT on PREROUTING.\n");\r
-+#else\r
-+      printk(KERN_INFO "\tHooking IMQ after NAT on PREROUTING.\n");\r
-+#endif\r
-+#if defined(CONFIG_IMQ_BEHAVIOR_AB) || defined(CONFIG_IMQ_BEHAVIOR_BB)\r
-+      printk(KERN_INFO "\tHooking IMQ before NAT on POSTROUTING.\n");\r
-+#else\r
-+      printk(KERN_INFO "\tHooking IMQ after NAT on POSTROUTING.\n");\r
-+#endif\r
-+\r
-+      return 0;\r
-+}\r
-+\r
-+static void __exit imq_cleanup_module(void)\r
-+{\r
-+      imq_unhook();\r
-+      imq_cleanup_devs();\r
-+      printk(KERN_INFO "IMQ driver unloaded successfully.\n");\r
-+}\r
-+\r
-+\r
-+module_init(imq_init_module);\r
-+module_exit(imq_cleanup_module);\r
-+\r
-+module_param(numdevs, int, 0);\r
-+MODULE_PARM_DESC(numdevs, "number of IMQ devices (how many imq* devices will be created)");\r
-+MODULE_AUTHOR("http://www.linuximq.net");\r
-+MODULE_DESCRIPTION("Pseudo-driver for the intermediate queue device. See http://www.linuximq.net/ for more information.");\r
-+MODULE_LICENSE("GPL");\r
---- linux-2.6.20.7-original/drivers/net/Kconfig        2007-04-13 23:48:14.000000000 +0300\r
-+++ linux-2.6.20.7/drivers/net/Kconfig 2007-04-19 16:22:34.000000000 +0300\r
-@@ -96,6 +96,129 @@\r
-         To compile this driver as a module, choose M here: the module\r
-         will be called eql.  If unsure, say N.\r
\r
-+config IMQ\r
-+      tristate "IMQ (intermediate queueing device) support"\r
-+      depends on NETDEVICES && NETFILTER\r
-+      ---help---\r
-+        The IMQ device(s) is used as placeholder for QoS queueing\r
-+        disciplines. Every packet entering/leaving the IP stack can be\r
-+        directed through the IMQ device where it's enqueued/dequeued to the\r
-+        attached qdisc. This allows you to treat network devices as classes\r
-+        and distribute bandwidth among them. Iptables is used to specify\r
-+        through which IMQ device, if any, packets travel.\r
-+\r
-+        More information at: http://www.linuximq.net/\r
-+\r
-+        To compile this driver as a module, choose M here: the module\r
-+        will be called imq.  If unsure, say N.\r
-+\r
-+choice\r
-+      prompt "IMQ behavior (PRE/POSTROUTING)"\r
-+      depends on IMQ\r
-+      default IMQ_BEHAVIOR_AB\r
-+      help\r
-+\r
-+              This settings defines how IMQ behaves in respect to its\r
-+              hooking in PREROUTING and POSTROUTING.\r
-+\r
-+              IMQ can work in any of the following ways:\r
-+\r
-+                  PREROUTING   |      POSTROUTING\r
-+              -----------------|-------------------\r
-+              #1  After NAT    |      After NAT\r
-+              #2  After NAT    |      Before NAT\r
-+              #3  Before NAT   |      After NAT\r
-+              #4  Before NAT   |      Before NAT\r
-+\r
-+              The default behavior is to hook before NAT on PREROUTING\r
-+              and after NAT on POSTROUTING (#3).\r
-+\r
-+              This settings are specially usefull when trying to use IMQ\r
-+              to shape NATed clients.\r
-+\r
-+              More information can be found at: www.linuximq.net\r
-+\r
-+              If not sure leave the default settings alone.\r
-+\r
-+config IMQ_BEHAVIOR_AA\r
-+      bool "IMQ AA"\r
-+      help\r
-+              This settings defines how IMQ behaves in respect to its\r
-+              hooking in PREROUTING and POSTROUTING.\r
-+\r
-+              Choosing this option will make IMQ hook like this:\r
-+\r
-+              PREROUTING:   After NAT\r
-+              POSTROUTING:  After NAT\r
-+\r
-+              More information can be found at: www.linuximq.net\r
-+\r
-+              If not sure leave the default settings alone.\r
-+\r
-+config IMQ_BEHAVIOR_AB\r
-+      bool "IMQ AB"\r
-+      help\r
-+              This settings defines how IMQ behaves in respect to its\r
-+              hooking in PREROUTING and POSTROUTING.\r
-+\r
-+              Choosing this option will make IMQ hook like this:\r
-+\r
-+              PREROUTING:   After NAT\r
-+              POSTROUTING:  Before NAT\r
-+\r
-+              More information can be found at: www.linuximq.net\r
-+\r
-+              If not sure leave the default settings alone.\r
-+\r
-+config IMQ_BEHAVIOR_BA\r
-+      bool "IMQ BA"\r
-+      help\r
-+              This settings defines how IMQ behaves in respect to its\r
-+              hooking in PREROUTING and POSTROUTING.\r
-+\r
-+              Choosing this option will make IMQ hook like this:\r
-+\r
-+              PREROUTING:   Before NAT\r
-+              POSTROUTING:  After NAT\r
-+\r
-+              More information can be found at: www.linuximq.net\r
-+\r
-+              If not sure leave the default settings alone.\r
-+\r
-+config IMQ_BEHAVIOR_BB\r
-+      bool "IMQ BB"\r
-+      help\r
-+              This settings defines how IMQ behaves in respect to its\r
-+              hooking in PREROUTING and POSTROUTING.\r
-+\r
-+              Choosing this option will make IMQ hook like this:\r
-+\r
-+              PREROUTING:   Before NAT\r
-+              POSTROUTING:  Before NAT\r
-+\r
-+              More information can be found at: www.linuximq.net\r
-+\r
-+              If not sure leave the default settings alone.\r
-+\r
-+endchoice\r
-+\r
-+config IMQ_NUM_DEVS\r
-+\r
-+      int "Number of IMQ devices"\r
-+      range 2 16\r
-+      depends on IMQ\r
-+      default "2"\r
-+      help\r
-+\r
-+              This settings defines how many IMQ devices will be \r
-+              created.\r
-+\r
-+              The default value is 2.\r
-+\r
-+              More information can be found at: www.linuximq.net\r
-+\r
-+              If not sure leave the default settings alone.\r
-+\r
- config TUN\r
-       tristate "Universal TUN/TAP device driver support"\r
-       select CRC32\r
---- linux-2.6.20.7-original/drivers/net/Makefile       2007-04-13 23:48:14.000000000 +0300\r
-+++ linux-2.6.20.7/drivers/net/Makefile        2007-04-19 16:22:34.000000000 +0300\r
-@@ -124,6 +124,7 @@\r
- obj-$(CONFIG_SLHC) += slhc.o\r
\r
- obj-$(CONFIG_DUMMY) += dummy.o\r
-+obj-$(CONFIG_IMQ) += imq.o\r
- obj-$(CONFIG_IFB) += ifb.o\r
- obj-$(CONFIG_DE600) += de600.o\r
- obj-$(CONFIG_DE620) += de620.o\r
---- linux-2.6.20.7-original/include/linux/imq.h        1970-01-01 02:00:00.000000000 +0200\r
-+++ linux-2.6.20.7/include/linux/imq.h 2007-04-19 16:22:34.000000000 +0300\r
-@@ -0,0 +1,9 @@\r
-+#ifndef _IMQ_H\r
-+#define _IMQ_H\r
-+\r
-+#define IMQ_MAX_DEVS   16\r
-+\r
-+#define IMQ_F_IFMASK   0x7f\r
-+#define IMQ_F_ENQUEUE  0x80\r
-+\r
-+#endif /* _IMQ_H */\r
---- linux-2.6.20.7-original/include/linux/netfilter_ipv4/ipt_IMQ.h     1970-01-01 02:00:00.000000000 +0200\r
-+++ linux-2.6.20.7/include/linux/netfilter_ipv4/ipt_IMQ.h      2007-04-19 16:22:34.000000000 +0300\r
-@@ -0,0 +1,8 @@\r
-+#ifndef _IPT_IMQ_H\r
-+#define _IPT_IMQ_H\r
-+\r
-+struct ipt_imq_info {\r
-+      unsigned int todev;     /* target imq device */\r
-+};\r
-+\r
-+#endif /* _IPT_IMQ_H */\r
---- linux-2.6.20.7-original/include/linux/netfilter_ipv6/ip6t_IMQ.h    1970-01-01 02:00:00.000000000 +0200\r
-+++ linux-2.6.20.7/include/linux/netfilter_ipv6/ip6t_IMQ.h     2007-04-19 16:22:34.000000000 +0300\r
-@@ -0,0 +1,8 @@\r
-+#ifndef _IP6T_IMQ_H\r
-+#define _IP6T_IMQ_H\r
-+\r
-+struct ip6t_imq_info {\r
-+      unsigned int todev;     /* target imq device */\r
-+};\r
-+\r
-+#endif /* _IP6T_IMQ_H */\r
---- linux-2.6.20.7-original/include/linux/skbuff.h     2007-04-13 23:48:14.000000000 +0300\r
-+++ linux-2.6.20.7/include/linux/skbuff.h      2007-04-19 16:22:34.000000000 +0300\r
-@@ -294,6 +294,10 @@\r
- #if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)\r
-       struct sk_buff          *nfct_reasm;\r
- #endif\r
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)\r
-+      unsigned char           imq_flags;\r
-+      struct nf_info          *nf_info;\r
-+#endif\r
- #ifdef CONFIG_BRIDGE_NETFILTER\r
-       struct nf_bridge_info   *nf_bridge;\r
- #endif\r
---- linux-2.6.20.7-original/net/core/dev.c     2007-04-13 23:48:14.000000000 +0300\r
-+++ linux-2.6.20.7/net/core/dev.c      2007-04-19 16:22:34.000000000 +0300\r
-@@ -94,6 +94,9 @@\r
- #include <linux/skbuff.h>\r
- #include <net/sock.h>\r
- #include <linux/rtnetlink.h>\r
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)\r
-+#include <linux/imq.h>\r
-+#endif\r
- #include <linux/proc_fs.h>\r
- #include <linux/seq_file.h>\r
- #include <linux/stat.h>\r
-@@ -1343,7 +1346,11 @@\r
- int dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)\r
- {\r
-       if (likely(!skb->next)) {\r
--              if (netdev_nit)\r
-+              if (netdev_nit\r
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)\r
-+                  && !(skb->imq_flags & IMQ_F_ENQUEUE)\r
-+#endif\r
-+                  )\r
-                       dev_queue_xmit_nit(skb, dev);\r
\r
-               if (netif_needs_gso(dev, skb)) {\r
---- linux-2.6.20.7-original/net/core/skbuff.c  2007-04-13 23:48:14.000000000 +0300\r
-+++ linux-2.6.20.7/net/core/skbuff.c   2007-04-19 16:22:34.000000000 +0300\r
-@@ -486,6 +486,10 @@\r
-       C(nfct_reasm);\r
-       nf_conntrack_get_reasm(skb->nfct_reasm);\r
- #endif\r
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)\r
-+      C(imq_flags);\r
-+      C(nf_info);\r
-+#endif /*CONFIG_IMQ*/\r
- #ifdef CONFIG_BRIDGE_NETFILTER\r
-       C(nf_bridge);\r
-       nf_bridge_get(skb->nf_bridge);\r
-@@ -550,6 +554,10 @@\r
- #if defined(CONFIG_IP_VS) || defined(CONFIG_IP_VS_MODULE)\r
-       new->ipvs_property = old->ipvs_property;\r
- #endif\r
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)\r
-+      new->imq_flags  = old->imq_flags;\r
-+      new->nf_info    = old->nf_info;\r
-+#endif /*CONFIG_IMQ*/\r
- #ifdef CONFIG_BRIDGE_NETFILTER\r
-       new->nf_bridge  = old->nf_bridge;\r
-       nf_bridge_get(old->nf_bridge);\r
---- linux-2.6.20.7-original/net/ipv4/netfilter/ipt_IMQ.c       1970-01-01 02:00:00.000000000 +0200\r
-+++ linux-2.6.20.7/net/ipv4/netfilter/ipt_IMQ.c        2007-04-19 16:22:34.000000000 +0300\r
-@@ -0,0 +1,71 @@\r
-+/*\r
-+ * This target marks packets to be enqueued to an imq device\r
-+ */\r
-+#include <linux/module.h>\r
-+#include <linux/skbuff.h>\r
-+#include <linux/netfilter_ipv4/ip_tables.h>\r
-+#include <linux/netfilter_ipv4/ipt_IMQ.h>\r
-+#include <linux/imq.h>\r
-+\r
-+static unsigned int imq_target(struct sk_buff **pskb,\r
-+                             const struct net_device *in,\r
-+                             const struct net_device *out,\r
-+                             unsigned int hooknum,\r
-+                             const struct xt_target *target,\r
-+                             const void *targinfo)\r
-+{\r
-+      struct ipt_imq_info *mr = (struct ipt_imq_info*)targinfo;\r
-+\r
-+      (*pskb)->imq_flags = mr->todev | IMQ_F_ENQUEUE;\r
-+\r
-+      return IPT_CONTINUE;\r
-+}\r
-+\r
-+static int imq_checkentry(const char *tablename,\r
-+                        const void *e,\r
-+                        const struct xt_target *target,\r
-+                        void *targinfo,\r
-+                        unsigned int hook_mask)\r
-+{\r
-+      struct ipt_imq_info *mr;\r
-+\r
-+      mr = (struct ipt_imq_info*)targinfo;\r
-+\r
-+      if (mr->todev > IMQ_MAX_DEVS) {\r
-+              printk(KERN_WARNING\r
-+                     "IMQ: invalid device specified, highest is %u\n",\r
-+                     IMQ_MAX_DEVS);\r
-+              return 0;\r
-+      }\r
-+\r
-+      return 1;\r
-+}\r
-+\r
-+static struct ipt_target ipt_imq_reg = {\r
-+      .name           = "IMQ",\r
-+      .target         = imq_target,\r
-+      .targetsize     = sizeof(struct ipt_imq_info),\r
-+      .checkentry     = imq_checkentry,\r
-+      .me             = THIS_MODULE,\r
-+      .table          = "mangle"\r
-+};\r
-+\r
-+static int __init init(void)\r
-+{\r
-+      if (ipt_register_target(&ipt_imq_reg))\r
-+              return -EINVAL;\r
-+\r
-+      return 0;\r
-+}\r
-+\r
-+static void __exit fini(void)\r
-+{\r
-+      ipt_unregister_target(&ipt_imq_reg);\r
-+}\r
-+\r
-+module_init(init);\r
-+module_exit(fini);\r
-+\r
-+MODULE_AUTHOR("http://www.linuximq.net");\r
-+MODULE_DESCRIPTION("Pseudo-driver for the intermediate queue device. See http://www.linuximq.net/ for more information.");\r
-+MODULE_LICENSE("GPL");\r
---- linux-2.6.20.7-original/net/ipv4/netfilter/Kconfig 2007-04-13 23:48:14.000000000 +0300\r
-+++ linux-2.6.20.7/net/ipv4/netfilter/Kconfig  2007-04-19 16:22:34.000000000 +0300\r
-@@ -591,6 +591,17 @@\r
\r
-         To compile it as a module, choose M here.  If unsure, say N.\r
\r
-+config IP_NF_TARGET_IMQ\r
-+       tristate "IMQ target support"\r
-+       depends on IP_NF_MANGLE\r
-+       help\r
-+         This option adds a `IMQ' target which is used to specify if and\r
-+         to which IMQ device packets should get enqueued/dequeued.\r
-+\r
-+       For more information visit: http://www.linuximq.net/\r
-+\r
-+         To compile it as a module, choose M here.  If unsure, say N.\r
-+\r
- config IP_NF_TARGET_TOS\r
-       tristate "TOS target support"\r
-       depends on IP_NF_MANGLE\r
---- linux-2.6.20.7-original/net/ipv4/netfilter/Makefile        2007-04-13 23:48:14.000000000 +0300\r
-+++ linux-2.6.20.7/net/ipv4/netfilter/Makefile 2007-04-19 16:22:34.000000000 +0300\r
-@@ -96,6 +96,7 @@\r
- obj-$(CONFIG_IP_NF_TARGET_REJECT) += ipt_REJECT.o\r
- obj-$(CONFIG_IP_NF_TARGET_TOS) += ipt_TOS.o\r
- obj-$(CONFIG_IP_NF_TARGET_ECN) += ipt_ECN.o\r
-+obj-$(CONFIG_IP_NF_TARGET_IMQ) += ipt_IMQ.o\r
- obj-$(CONFIG_IP_NF_TARGET_MASQUERADE) += ipt_MASQUERADE.o\r
- obj-$(CONFIG_IP_NF_TARGET_REDIRECT) += ipt_REDIRECT.o\r
- obj-$(CONFIG_IP_NF_TARGET_NETMAP) += ipt_NETMAP.o\r
---- linux-2.6.20.7-original/net/ipv6/netfilter/ip6t_IMQ.c      1970-01-01 02:00:00.000000000 +0200\r
-+++ linux-2.6.20.7/net/ipv6/netfilter/ip6t_IMQ.c       2007-04-19 16:22:34.000000000 +0300\r
-@@ -0,0 +1,71 @@\r
-+/*\r
-+ * This target marks packets to be enqueued to an imq device\r
-+ */\r
-+#include <linux/module.h>\r
-+#include <linux/skbuff.h>\r
-+#include <linux/netfilter_ipv6/ip6_tables.h>\r
-+#include <linux/netfilter_ipv6/ip6t_IMQ.h>\r
-+#include <linux/imq.h>\r
-+\r
-+static unsigned int imq_target(struct sk_buff **pskb,\r
-+                             const struct net_device *in,\r
-+                             const struct net_device *out,\r
-+                             unsigned int hooknum,\r
-+                             const struct xt_target *target,\r
-+                             const void *targinfo)\r
-+{\r
-+      struct ip6t_imq_info *mr = (struct ip6t_imq_info*)targinfo;\r
-+\r
-+      (*pskb)->imq_flags = mr->todev | IMQ_F_ENQUEUE;\r
-+\r
-+      return IP6T_CONTINUE;\r
-+}\r
-+\r
-+static int imq_checkentry(const char *tablename,\r
-+                        const void *entry,\r
-+                        const struct xt_target *target,\r
-+                        void *targinfo,\r
-+                        unsigned int hook_mask)\r
-+{\r
-+      struct ip6t_imq_info *mr;\r
-+\r
-+      mr = (struct ip6t_imq_info*)targinfo;\r
-+\r
-+      if (mr->todev > IMQ_MAX_DEVS) {\r
-+              printk(KERN_WARNING\r
-+                     "IMQ: invalid device specified, highest is %u\n",\r
-+                     IMQ_MAX_DEVS);\r
-+              return 0;\r
-+      }\r
-+\r
-+      return 1;\r
-+}\r
-+\r
-+static struct ip6t_target ip6t_imq_reg = {\r
-+      .name           = "IMQ",\r
-+      .target         = imq_target,\r
-+      .targetsize     = sizeof(struct ip6t_imq_info),\r
-+      .table          = "mangle",\r
-+      .checkentry     = imq_checkentry,\r
-+      .me             = THIS_MODULE\r
-+};\r
-+\r
-+static int __init init(void)\r
-+{\r
-+      if (ip6t_register_target(&ip6t_imq_reg))\r
-+              return -EINVAL;\r
-+\r
-+      return 0;\r
-+}\r
-+\r
-+static void __exit fini(void)\r
-+{\r
-+      ip6t_unregister_target(&ip6t_imq_reg);\r
-+}\r
-+\r
-+module_init(init);\r
-+module_exit(fini);\r
-+\r
-+MODULE_AUTHOR("http://www.linuximq.net");\r
-+MODULE_DESCRIPTION("Pseudo-driver for the intermediate queue device. See http://www.linuximq.net/ for more information.");\r
-+MODULE_LICENSE("GPL");\r
---- linux-2.6.20.7-original/net/ipv6/netfilter/Kconfig 2007-04-13 23:48:14.000000000 +0300\r
-+++ linux-2.6.20.7/net/ipv6/netfilter/Kconfig  2007-04-19 16:22:34.000000000 +0300\r
-@@ -164,6 +164,15 @@\r
\r
-         To compile it as a module, choose M here.  If unsure, say N.\r
\r
-+config IP6_NF_TARGET_IMQ\r
-+      tristate "IMQ target support"\r
-+      depends on IP6_NF_MANGLE\r
-+      help\r
-+          This option adds a `IMQ' target which is used to specify if and\r
-+          to which imq device packets should get enqueued/dequeued.\r
-+\r
-+          To compile it as a module, choose M here.  If unsure, say N.\r
-+\r
- config IP6_NF_TARGET_HL\r
-       tristate  'HL (hoplimit) target support'\r
-       depends on IP6_NF_MANGLE\r
---- linux-2.6.20.7-original/net/ipv6/netfilter/Makefile        2007-04-13 23:48:14.000000000 +0300\r
-+++ linux-2.6.20.7/net/ipv6/netfilter/Makefile 2007-04-19 16:22:34.000000000 +0300\r
-@@ -13,6 +13,7 @@\r
- obj-$(CONFIG_IP6_NF_MATCH_OWNER) += ip6t_owner.o\r
- obj-$(CONFIG_IP6_NF_FILTER) += ip6table_filter.o\r
- obj-$(CONFIG_IP6_NF_MANGLE) += ip6table_mangle.o\r
-+obj-$(CONFIG_IP6_NF_TARGET_IMQ) += ip6t_IMQ.o\r
- obj-$(CONFIG_IP6_NF_TARGET_HL) += ip6t_HL.o\r
- obj-$(CONFIG_IP6_NF_QUEUE) += ip6_queue.o\r
- obj-$(CONFIG_IP6_NF_TARGET_LOG) += ip6t_LOG.o\r
---- linux-2.6.20.7-original/net/sched/sch_generic.c    2007-04-13 23:48:14.000000000 +0300\r
-+++ linux-2.6.20.7/net/sched/sch_generic.c     2007-04-19 16:22:34.000000000 +0300\r
-@@ -87,7 +87,6 @@\r
\r
-    NOTE: Called under dev->queue_lock with locally disabled BH.\r
- */\r
--\r
- static inline int qdisc_restart(struct net_device *dev)\r
- {\r
-       struct Qdisc *q = dev->qdisc;\r
-@@ -181,6 +180,11 @@\r
-       return q->q.qlen;\r
- }\r
\r
-+int qdisc_restart1(struct net_device *dev)\r
-+{\r
-+      return qdisc_restart(dev);\r
-+}\r
-+\r
- void __qdisc_run(struct net_device *dev)\r
- {\r
-       if (unlikely(dev->qdisc == &noop_qdisc))\r
-@@ -617,3 +621,4 @@\r
- EXPORT_SYMBOL(qdisc_reset);\r
- EXPORT_SYMBOL(qdisc_lock_tree);\r
- EXPORT_SYMBOL(qdisc_unlock_tree);\r
-+EXPORT_SYMBOL(qdisc_restart1);\r
diff --git a/src/patches/linux-2.6.20.21-additional_check_on_BER_decoding.patch b/src/patches/linux-2.6.20.21-additional_check_on_BER_decoding.patch
deleted file mode 100644 (file)
index c667af9..0000000
+++ /dev/null
@@ -1,133 +0,0 @@
-From: Chris Wright <chrisw@sous-sol.org>
-Date: Wed, 4 Jun 2008 16:16:33 +0000 (-0700)
-Subject: asn1: additional sanity checking during BER decoding (CVE-2008-1673)
-X-Git-Tag: v2.6.25.5~1
-X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Fstable%2Flinux-2.6.25.y.git;a=commitdiff_plain;h=33afb8403f361919aa5c8fe1d0a4f5ddbfbbea3c
-
-asn1: additional sanity checking during BER decoding (CVE-2008-1673)
-
-upstream commit: ddb2c43594f22843e9f3153da151deaba1a834c5
-
-- Don't trust a length which is greater than the working buffer.
-  An invalid length could cause overflow when calculating buffer size
-  for decoding oid.
-
-- An oid length of zero is invalid and allows for an off-by-one error when
-  decoding oid because the first subid actually encodes first 2 subids.
-
-- A primitive encoding may not have an indefinite length.
-
-Thanks to Wei Wang from McAfee for report.
-
-Cc: Steven French <sfrench@us.ibm.com>
-Cc: stable@kernel.org
-Acked-by: Patrick McHardy <kaber@trash.net>
-Signed-off-by: Chris Wright <chrisw@sous-sol.org>
-Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
----
-rediff for Linux-2.6.20.21 by Arne Fitzenreiter <arne_f@ipfire.org>
----
-From: Chris Wright <chrisw@sous-sol.org>
-Date: Wed, 4 Jun 2008 16:16:33 +0000 (-0700)
-Subject: asn1: additional sanity checking during BER decoding (CVE-2008-1673)
-X-Git-Tag: v2.6.25.5~1
-X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Fstable%2Flinux-2.6.25.y.git;a=commitdiff_plain;h=33afb8403f361919aa5c8fe1d0a4f5ddbfbbea3c
-
-asn1: additional sanity checking during BER decoding (CVE-2008-1673)
-
-upstream commit: ddb2c43594f22843e9f3153da151deaba1a834c5
-
-- Don't trust a length which is greater than the working buffer.
-  An invalid length could cause overflow when calculating buffer size
-  for decoding oid.
-
-- An oid length of zero is invalid and allows for an off-by-one error when
-  decoding oid because the first subid actually encodes first 2 subids.
-
-- A primitive encoding may not have an indefinite length.
-
-Thanks to Wei Wang from McAfee for report.
-
-Cc: Steven French <sfrench@us.ibm.com>
-Cc: stable@kernel.org
-Acked-by: Patrick McHardy <kaber@trash.net>
-Signed-off-by: Chris Wright <chrisw@sous-sol.org>
-Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
----
-rediff for Linux-2.6.20.21 by Arne Fitzenreiter <arne_f@ipfire.org>
----
-diff -Naur linux-2.6.20.21.org/fs/cifs/asn1.c linux-2.6.20.21/fs/cifs/asn1.c
---- linux-2.6.20.21.org/fs/cifs/asn1.c 2007-10-17 21:31:14.000000000 +0200
-+++ linux-2.6.20.21/fs/cifs/asn1.c     2008-06-10 00:09:43.000000000 +0200
-@@ -182,6 +182,11 @@
-                       }
-               }
-       }
-+
-+      /* don't trust len bigger than ctx buffer */
-+      if (*len > ctx->end - ctx->pointer)
-+              return 0;
-+
-       return 1;
- }
-@@ -199,6 +204,10 @@
-       if (!asn1_length_decode(ctx, &def, &len))
-               return 0;
-+      /* primitive shall be definite, indefinite shall be constructed */
-+      if (*con == ASN1_PRI && !def)
-+              return 0;
-+
-       if (def)
-               *eoc = ctx->pointer + len;
-       else
-@@ -385,6 +394,10 @@
-       unsigned long *optr;
-       size = eoc - ctx->pointer + 1;
-+      
-+      /* first subid actually encodes first two subids */
-+      if (size < 2 || size > ULONG_MAX/sizeof(unsigned long))
-+      return 0;
-       *oid = kmalloc(size * sizeof (unsigned long), GFP_ATOMIC);
-       if (*oid == NULL) {
-               return 0;
-diff -Naur linux-2.6.20.21.org/net/ipv4/netfilter/nf_nat_snmp_basic.c linux-2.6.20.21/net/ipv4/netfilter/nf_nat_snmp_basic.c
---- linux-2.6.20.21.org/net/ipv4/netfilter/nf_nat_snmp_basic.c 2007-10-17 21:31:14.000000000 +0200
-+++ linux-2.6.20.21/net/ipv4/netfilter/nf_nat_snmp_basic.c     2008-06-10 00:03:59.000000000 +0200
-@@ -235,6 +235,11 @@
-                       }
-               }
-       }
-+
-+      /* don't trust len bigger than ctx buffer */
-+      if (*len > ctx->end - ctx->pointer)
-+              return 0;
-+
-       return 1;
- }
-@@ -253,6 +258,10 @@
-       if (!asn1_length_decode(ctx, &def, &len))
-               return 0;
-+      /* primitive shall be definite, indefinite shall be constructed */
-+      if (*con == ASN1_PRI && !def)
-+              return 0;
-+
-       if (def)
-               *eoc = ctx->pointer + len;
-       else
-@@ -437,6 +446,11 @@
-       unsigned long *optr;
-       size = eoc - ctx->pointer + 1;
-+
-+      /* first subid actually encodes first two subids */
-+      if (size < 2 || size > ULONG_MAX/sizeof(unsigned long))
-+              return 0;
-+
-       *oid = kmalloc(size * sizeof(unsigned long), GFP_ATOMIC);
-       if (*oid == NULL) {
-               if (net_ratelimit())
diff --git a/src/patches/linux-2.6.20.21-zd1211-usrobotics-usbid.patch b/src/patches/linux-2.6.20.21-zd1211-usrobotics-usbid.patch
deleted file mode 100644 (file)
index ae65fc2..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-diff -Naur linux-2.6.20.21.org/drivers/net/wireless/zd1211rw/zd_usb.c linux-2.6.20.21/drivers/net/wireless/zd1211rw/zd_usb.c
---- linux-2.6.20.21.org/drivers/net/wireless/zd1211rw/zd_usb.c 2007-10-17 21:31:14.000000000 +0200
-+++ linux-2.6.20.21/drivers/net/wireless/zd1211rw/zd_usb.c     2008-06-16 19:31:03.000000000 +0200
-@@ -54,6 +54,7 @@
-       { USB_DEVICE(0x14ea, 0xab13), .driver_info = DEVICE_ZD1211 },
-       /* ZD1211B */
-       { USB_DEVICE(0x0ace, 0x1215), .driver_info = DEVICE_ZD1211B },
-+      { USB_DEVICE(0x0baf, 0x0121), .driver_info = DEVICE_ZD1211B },
-       { USB_DEVICE(0x157e, 0x300d), .driver_info = DEVICE_ZD1211B },
-       { USB_DEVICE(0x079b, 0x0062), .driver_info = DEVICE_ZD1211B },
-       { USB_DEVICE(0x1582, 0x6003), .driver_info = DEVICE_ZD1211B },
diff --git a/src/patches/linux-2.6.23-imq.diff b/src/patches/linux-2.6.23-imq.diff
deleted file mode 100644 (file)
index a85cf86..0000000
+++ /dev/null
@@ -1,864 +0,0 @@
-diff -Naurw linux-2.6.23/drivers/net/imq.c linux-2.6.23.imq/drivers/net/imq.c
---- linux-2.6.23/drivers/net/imq.c     1969-12-31 21:00:00.000000000 -0300
-+++ linux-2.6.23.imq/drivers/net/imq.c 2007-10-01 09:59:23.000000000 -0300
-@@ -0,0 +1,400 @@
-+/*
-+ *             Pseudo-driver for the intermediate queue device.
-+ *
-+ *             This program is free software; you can redistribute it and/or
-+ *             modify it under the terms of the GNU General Public License
-+ *             as published by the Free Software Foundation; either version
-+ *             2 of the License, or (at your option) any later version.
-+ *
-+ * Authors:    Patrick McHardy, <kaber@trash.net>
-+ *
-+ *            The first version was written by Martin Devera, <devik@cdi.cz>
-+ *
-+ * Credits:    Jan Rafaj <imq2t@cedric.vabo.cz>
-+ *              - Update patch to 2.4.21
-+ *             Sebastian Strollo <sstrollo@nortelnetworks.com>
-+ *              - Fix "Dead-loop on netdevice imq"-issue
-+ *             Marcel Sebek <sebek64@post.cz>
-+ *              - Update to 2.6.2-rc1
-+ *
-+ *           After some time of inactivity there is a group taking care
-+ *           of IMQ again: http://www.linuximq.net
-+ *
-+ *
-+ *           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.
-+ *
-+ *             More info at: http://www.linuximq.net/ (Andre Correa)
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/kernel.h>
-+#include <linux/moduleparam.h>
-+#include <linux/skbuff.h>
-+#include <linux/netdevice.h>
-+#include <linux/rtnetlink.h>
-+#include <linux/if_arp.h>
-+#include <linux/netfilter.h>
-+#include <linux/netfilter_ipv4.h>
-+#if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE)
-+      #include <linux/netfilter_ipv6.h>
-+#endif
-+#include <linux/imq.h>
-+#include <net/pkt_sched.h>
-+
-+extern int qdisc_restart1(struct net_device *dev);
-+
-+static nf_hookfn imq_nf_hook;
-+
-+static struct nf_hook_ops imq_ingress_ipv4 = {
-+      .hook           = imq_nf_hook,
-+      .owner          = THIS_MODULE,
-+      .pf             = PF_INET,
-+      .hooknum        = NF_IP_PRE_ROUTING,
-+#if defined(CONFIG_IMQ_BEHAVIOR_BA) || defined(CONFIG_IMQ_BEHAVIOR_BB)
-+      .priority       = NF_IP_PRI_MANGLE + 1
-+#else
-+      .priority       = NF_IP_PRI_NAT_DST + 1
-+#endif
-+};
-+
-+static struct nf_hook_ops imq_egress_ipv4 = {
-+      .hook           = imq_nf_hook,
-+      .owner          = THIS_MODULE,
-+      .pf             = PF_INET,
-+      .hooknum        = NF_IP_POST_ROUTING,
-+#if defined(CONFIG_IMQ_BEHAVIOR_AA) || defined(CONFIG_IMQ_BEHAVIOR_BA)
-+      .priority       = NF_IP_PRI_LAST
-+#else
-+      .priority       = NF_IP_PRI_NAT_SRC - 1
-+#endif
-+};
-+
-+#if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE)
-+static struct nf_hook_ops imq_ingress_ipv6 = {
-+      .hook           = imq_nf_hook,
-+      .owner          = THIS_MODULE,
-+      .pf             = PF_INET6,
-+      .hooknum        = NF_IP6_PRE_ROUTING,
-+#if defined(CONFIG_IMQ_BEHAVIOR_BA) || defined(CONFIG_IMQ_BEHAVIOR_BB)
-+      .priority       = NF_IP6_PRI_MANGLE + 1
-+#else
-+      .priority       = NF_IP6_PRI_NAT_DST + 1
-+#endif
-+};
-+
-+static struct nf_hook_ops imq_egress_ipv6 = {
-+      .hook           = imq_nf_hook,
-+      .owner          = THIS_MODULE,
-+      .pf             = PF_INET6,
-+      .hooknum        = NF_IP6_POST_ROUTING,
-+#if defined(CONFIG_IMQ_BEHAVIOR_AA) || defined(CONFIG_IMQ_BEHAVIOR_BA)
-+      .priority       = NF_IP6_PRI_LAST
-+#else
-+      .priority       = NF_IP6_PRI_NAT_SRC - 1
-+#endif
-+};
-+#endif
-+
-+#if defined(CONFIG_IMQ_NUM_DEVS)
-+static unsigned int numdevs = CONFIG_IMQ_NUM_DEVS;
-+#else
-+static unsigned int numdevs = 16;
-+#endif
-+
-+static struct net_device *imq_devs;
-+
-+static struct net_device_stats *imq_get_stats(struct net_device *dev)
-+{
-+      return (struct net_device_stats *)dev->priv;
-+}
-+
-+/* called for packets kfree'd in qdiscs at places other than enqueue */
-+static void imq_skb_destructor(struct sk_buff *skb)
-+{
-+      struct nf_info *info = skb->nf_info;
-+
-+      if (info) {
-+              if (info->indev)
-+                      dev_put(info->indev);
-+              if (info->outdev)
-+                      dev_put(info->outdev);
-+              kfree(info);
-+      }
-+}
-+
-+static int imq_dev_xmit(struct sk_buff *skb, struct net_device *dev)
-+{
-+      struct net_device_stats *stats = (struct net_device_stats*) dev->priv;
-+
-+      stats->tx_bytes += skb->len;
-+      stats->tx_packets++;
-+
-+      skb->imq_flags = 0;
-+      skb->destructor = NULL;
-+
-+      dev->trans_start = jiffies;
-+      nf_reinject(skb, skb->nf_info, NF_ACCEPT);
-+      return 0;
-+}
-+
-+static int imq_nf_queue(struct sk_buff *skb, struct nf_info *info, unsigned queue_num, void *data)
-+{
-+      struct net_device *dev;
-+      struct net_device_stats *stats;
-+      struct sk_buff *skb2 = NULL;
-+      struct Qdisc *q;
-+      unsigned int index = skb->imq_flags&IMQ_F_IFMASK;
-+      int ret = -1;
-+
-+      if (index > numdevs)
-+              return -1;
-+
-+      dev = imq_devs + index;
-+      if (!(dev->flags & IFF_UP)) {
-+              skb->imq_flags = 0;
-+              nf_reinject(skb, info, NF_ACCEPT);
-+              return 0;
-+      }
-+      dev->last_rx = jiffies;
-+
-+      if (skb->destructor) {
-+              skb2 = skb;
-+              skb = skb_clone(skb, GFP_ATOMIC);
-+              if (!skb)
-+                      return -1;
-+      }
-+      skb->nf_info = info;
-+
-+      stats = (struct net_device_stats *)dev->priv;
-+      stats->rx_bytes+= skb->len;
-+      stats->rx_packets++;
-+
-+      spin_lock_bh(&dev->queue_lock);
-+      q = dev->qdisc;
-+      if (q->enqueue) {
-+              q->enqueue(skb_get(skb), q);
-+              if (skb_shared(skb)) {
-+                      skb->destructor = imq_skb_destructor;
-+                      kfree_skb(skb);
-+                      ret = 0;
-+              }
-+      }
-+      if (spin_is_locked(&dev->_xmit_lock))
-+              netif_schedule(dev);
-+      else
-+              while (!netif_queue_stopped(dev) && qdisc_restart1(dev) < 0)
-+                      /* NOTHING */;
-+
-+      spin_unlock_bh(&dev->queue_lock);
-+
-+      if (skb2)
-+              kfree_skb(ret ? skb : skb2);
-+
-+      return ret;
-+}
-+
-+static struct nf_queue_handler nfqh = {
-+      .name  = "imq",
-+      .outfn = imq_nf_queue,
-+};
-+
-+static unsigned int imq_nf_hook(unsigned int hook, struct sk_buff **pskb,
-+                              const struct net_device *indev,
-+                              const struct net_device *outdev,
-+                              int (*okfn)(struct sk_buff *))
-+{
-+      if ((*pskb)->imq_flags & IMQ_F_ENQUEUE)
-+              return NF_QUEUE;
-+
-+      return NF_ACCEPT;
-+}
-+
-+
-+static int __init imq_init_hooks(void)
-+{
-+      int err;
-+
-+      err = nf_register_queue_handler(PF_INET, &nfqh);
-+      if (err > 0)
-+              goto err1;
-+      if ((err = nf_register_hook(&imq_ingress_ipv4)))
-+              goto err2;
-+      if ((err = nf_register_hook(&imq_egress_ipv4)))
-+              goto err3;
-+#if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE)
-+      if ((err = nf_register_queue_handler(PF_INET6, &nfqh)))
-+              goto err4;
-+      if ((err = nf_register_hook(&imq_ingress_ipv6)))
-+              goto err5;
-+      if ((err = nf_register_hook(&imq_egress_ipv6)))
-+              goto err6;
-+#endif
-+
-+      return 0;
-+
-+#if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE)
-+err6:
-+      nf_unregister_hook(&imq_ingress_ipv6);
-+err5:
-+      nf_unregister_queue_handler(PF_INET6, &nfqh);
-+err4:
-+      nf_unregister_hook(&imq_egress_ipv4);
-+#endif
-+err3:
-+      nf_unregister_hook(&imq_ingress_ipv4);
-+err2:
-+      nf_unregister_queue_handler(PF_INET, &nfqh);
-+err1:
-+      return err;
-+}
-+
-+static void __exit imq_unhook(void)
-+{
-+#if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE)
-+      nf_unregister_hook(&imq_ingress_ipv6);
-+      nf_unregister_hook(&imq_egress_ipv6);
-+      nf_unregister_queue_handler(PF_INET6, &nfqh);
-+#endif
-+      nf_unregister_hook(&imq_ingress_ipv4);
-+      nf_unregister_hook(&imq_egress_ipv4);
-+      nf_unregister_queue_handler(PF_INET, &nfqh);
-+}
-+
-+static int __init imq_dev_init(struct net_device *dev)
-+{
-+      dev->hard_start_xmit    = imq_dev_xmit;
-+      dev->type               = ARPHRD_VOID;
-+      dev->mtu                = 16000;
-+      dev->tx_queue_len       = 11000;
-+      dev->flags              = IFF_NOARP;
-+      dev->priv = kzalloc(sizeof(struct net_device_stats), GFP_KERNEL);
-+      if (dev->priv == NULL)
-+              return -ENOMEM;
-+      dev->get_stats          = imq_get_stats;
-+
-+      return 0;
-+}
-+
-+static void imq_dev_uninit(struct net_device *dev)
-+{
-+      kfree(dev->priv);
-+}
-+
-+static int __init imq_init_devs(void)
-+{
-+      struct net_device *dev;
-+      int i,j;
-+      j = numdevs;
-+
-+      if (!numdevs || numdevs > IMQ_MAX_DEVS) {
-+              printk(KERN_ERR "IMQ: numdevs has to be betweed 1 and %u\n",
-+                     IMQ_MAX_DEVS);
-+              return -EINVAL;
-+      }
-+
-+      imq_devs = kzalloc(sizeof(struct net_device) * numdevs, GFP_KERNEL);
-+      if (!imq_devs)
-+              return -ENOMEM;
-+
-+      /* we start counting at zero */
-+      numdevs--;
-+
-+      for (i = 0, dev = imq_devs; i <= numdevs; i++, dev++) {
-+              SET_MODULE_OWNER(dev);
-+              strcpy(dev->name, "imq%d");
-+              dev->init   = imq_dev_init;
-+              dev->uninit = imq_dev_uninit;
-+
-+              if (register_netdev(dev) < 0)
-+                      goto err_register;
-+      }
-+      printk(KERN_INFO "IMQ starting with %u devices...\n", j);
-+      return 0;
-+
-+err_register:
-+      for (; i; i--)
-+              unregister_netdev(--dev);
-+      kfree(imq_devs);
-+      return -EIO;
-+}
-+
-+static void imq_cleanup_devs(void)
-+{
-+      int i;
-+      struct net_device *dev = imq_devs;
-+
-+      for (i = 0; i <= numdevs; i++)
-+              unregister_netdev(dev++);
-+
-+      kfree(imq_devs);
-+}
-+
-+static int __init imq_init_module(void)
-+{
-+      int err;
-+
-+      if ((err = imq_init_devs())) {
-+              printk(KERN_ERR "IMQ: Error trying imq_init_devs()\n");
-+              return err;
-+      }
-+      if ((err = imq_init_hooks())) {
-+              printk(KERN_ERR "IMQ: Error trying imq_init_hooks()\n");
-+              imq_cleanup_devs();
-+              return err;
-+      }
-+
-+      printk(KERN_INFO "IMQ driver loaded successfully.\n");
-+
-+#if defined(CONFIG_IMQ_BEHAVIOR_BA) || defined(CONFIG_IMQ_BEHAVIOR_BB)
-+      printk(KERN_INFO "\tHooking IMQ before NAT on PREROUTING.\n");
-+#else
-+      printk(KERN_INFO "\tHooking IMQ after NAT on PREROUTING.\n");
-+#endif
-+#if defined(CONFIG_IMQ_BEHAVIOR_AB) || defined(CONFIG_IMQ_BEHAVIOR_BB)
-+      printk(KERN_INFO "\tHooking IMQ before NAT on POSTROUTING.\n");
-+#else
-+      printk(KERN_INFO "\tHooking IMQ after NAT on POSTROUTING.\n");
-+#endif
-+
-+      return 0;
-+}
-+
-+static void __exit imq_cleanup_module(void)
-+{
-+      imq_unhook();
-+      imq_cleanup_devs();
-+      printk(KERN_INFO "IMQ driver unloaded successfully.\n");
-+}
-+
-+
-+module_init(imq_init_module);
-+module_exit(imq_cleanup_module);
-+
-+module_param(numdevs, int, 16);
-+MODULE_PARM_DESC(numdevs, "number of IMQ devices (how many imq* devices will be created)");
-+MODULE_AUTHOR("http://www.linuximq.net");
-+MODULE_DESCRIPTION("Pseudo-driver for the intermediate queue device. See http://www.linuximq.net/ for more information.");
-+MODULE_LICENSE("GPL");
-diff -Naurw linux-2.6.23/drivers/net/Kconfig linux-2.6.23.imq/drivers/net/Kconfig
---- linux-2.6.23/drivers/net/Kconfig   2007-10-01 09:04:50.000000000 -0300
-+++ linux-2.6.23.imq/drivers/net/Kconfig       2007-10-01 09:55:14.000000000 -0300
-@@ -112,6 +112,129 @@
-         To compile this driver as a module, choose M here: the module
-         will be called eql.  If unsure, say N.
-+config IMQ
-+      tristate "IMQ (intermediate queueing device) support"
-+      depends on NETDEVICES && NETFILTER
-+      ---help---
-+        The IMQ device(s) is used as placeholder for QoS queueing
-+        disciplines. Every packet entering/leaving the IP stack can be
-+        directed through the IMQ device where it's enqueued/dequeued to the
-+        attached qdisc. This allows you to treat network devices as classes
-+        and distribute bandwidth among them. Iptables is used to specify
-+        through which IMQ device, if any, packets travel.
-+
-+        More information at: http://www.linuximq.net/
-+
-+        To compile this driver as a module, choose M here: the module
-+        will be called imq.  If unsure, say N.
-+
-+choice
-+      prompt "IMQ behavior (PRE/POSTROUTING)"
-+      depends on IMQ
-+      default IMQ_BEHAVIOR_AB
-+      help
-+
-+              This settings defines how IMQ behaves in respect to its
-+              hooking in PREROUTING and POSTROUTING.
-+
-+              IMQ can work in any of the following ways:
-+
-+                  PREROUTING   |      POSTROUTING
-+              -----------------|-------------------
-+              #1  After NAT    |      After NAT
-+              #2  After NAT    |      Before NAT
-+              #3  Before NAT   |      After NAT
-+              #4  Before NAT   |      Before NAT
-+
-+              The default behavior is to hook before NAT on PREROUTING
-+              and after NAT on POSTROUTING (#3).
-+
-+              This settings are specially usefull when trying to use IMQ
-+              to shape NATed clients.
-+
-+              More information can be found at: www.linuximq.net
-+
-+              If not sure leave the default settings alone.
-+
-+config IMQ_BEHAVIOR_AA
-+      bool "IMQ AA"
-+      help
-+              This settings defines how IMQ behaves in respect to its
-+              hooking in PREROUTING and POSTROUTING.
-+
-+              Choosing this option will make IMQ hook like this:
-+
-+              PREROUTING:   After NAT
-+              POSTROUTING:  After NAT
-+
-+              More information can be found at: www.linuximq.net
-+
-+              If not sure leave the default settings alone.
-+
-+config IMQ_BEHAVIOR_AB
-+      bool "IMQ AB"
-+      help
-+              This settings defines how IMQ behaves in respect to its
-+              hooking in PREROUTING and POSTROUTING.
-+
-+              Choosing this option will make IMQ hook like this:
-+
-+              PREROUTING:   After NAT
-+              POSTROUTING:  Before NAT
-+
-+              More information can be found at: www.linuximq.net
-+
-+              If not sure leave the default settings alone.
-+
-+config IMQ_BEHAVIOR_BA
-+      bool "IMQ BA"
-+      help
-+              This settings defines how IMQ behaves in respect to its
-+              hooking in PREROUTING and POSTROUTING.
-+
-+              Choosing this option will make IMQ hook like this:
-+
-+              PREROUTING:   Before NAT
-+              POSTROUTING:  After NAT
-+
-+              More information can be found at: www.linuximq.net
-+
-+              If not sure leave the default settings alone.
-+
-+config IMQ_BEHAVIOR_BB
-+      bool "IMQ BB"
-+      help
-+              This settings defines how IMQ behaves in respect to its
-+              hooking in PREROUTING and POSTROUTING.
-+
-+              Choosing this option will make IMQ hook like this:
-+
-+              PREROUTING:   Before NAT
-+              POSTROUTING:  Before NAT
-+
-+              More information can be found at: www.linuximq.net
-+
-+              If not sure leave the default settings alone.
-+
-+endchoice
-+
-+config IMQ_NUM_DEVS
-+
-+      int "Number of IMQ devices"
-+      range 2 16
-+      depends on IMQ
-+      default "16"
-+      help
-+
-+              This settings defines how many IMQ devices will be
-+              created.
-+
-+              The default value is 16.
-+
-+              More information can be found at: www.linuximq.net
-+
-+              If not sure leave the default settings alone.
-+
- config TUN
-       tristate "Universal TUN/TAP device driver support"
-       select CRC32
-diff -Naurw linux-2.6.23/drivers/net/Makefile linux-2.6.23.imq/drivers/net/Makefile
---- linux-2.6.23/drivers/net/Makefile  2007-10-01 09:04:50.000000000 -0300
-+++ linux-2.6.23.imq/drivers/net/Makefile      2007-10-01 09:55:14.000000000 -0300
-@@ -131,6 +131,7 @@
- obj-$(CONFIG_XEN_NETDEV_FRONTEND) += xen-netfront.o
- obj-$(CONFIG_DUMMY) += dummy.o
-+obj-$(CONFIG_IMQ) += imq.o
- obj-$(CONFIG_IFB) += ifb.o
- obj-$(CONFIG_MACVLAN) += macvlan.o
- obj-$(CONFIG_DE600) += de600.o
-diff -Naurw linux-2.6.23/include/linux/imq.h linux-2.6.23.imq/include/linux/imq.h
---- linux-2.6.23/include/linux/imq.h   1969-12-31 21:00:00.000000000 -0300
-+++ linux-2.6.23.imq/include/linux/imq.h       2007-10-01 09:55:14.000000000 -0300
-@@ -0,0 +1,9 @@
-+#ifndef _IMQ_H
-+#define _IMQ_H
-+
-+#define IMQ_MAX_DEVS   16
-+
-+#define IMQ_F_IFMASK   0x7f
-+#define IMQ_F_ENQUEUE  0x80
-+
-+#endif /* _IMQ_H */
-diff -Naurw linux-2.6.23/include/linux/netfilter_ipv4/ipt_IMQ.h linux-2.6.23.imq/include/linux/netfilter_ipv4/ipt_IMQ.h
---- linux-2.6.23/include/linux/netfilter_ipv4/ipt_IMQ.h        1969-12-31 21:00:00.000000000 -0300
-+++ linux-2.6.23.imq/include/linux/netfilter_ipv4/ipt_IMQ.h    2007-10-01 09:55:14.000000000 -0300
-@@ -0,0 +1,8 @@
-+#ifndef _IPT_IMQ_H
-+#define _IPT_IMQ_H
-+
-+struct ipt_imq_info {
-+      unsigned int todev;     /* target imq device */
-+};
-+
-+#endif /* _IPT_IMQ_H */
-diff -Naurw linux-2.6.23/include/linux/netfilter_ipv6/ip6t_IMQ.h linux-2.6.23.imq/include/linux/netfilter_ipv6/ip6t_IMQ.h
---- linux-2.6.23/include/linux/netfilter_ipv6/ip6t_IMQ.h       1969-12-31 21:00:00.000000000 -0300
-+++ linux-2.6.23.imq/include/linux/netfilter_ipv6/ip6t_IMQ.h   2007-10-01 09:55:14.000000000 -0300
-@@ -0,0 +1,8 @@
-+#ifndef _IP6T_IMQ_H
-+#define _IP6T_IMQ_H
-+
-+struct ip6t_imq_info {
-+      unsigned int todev;     /* target imq device */
-+};
-+
-+#endif /* _IP6T_IMQ_H */
-diff -Naurw linux-2.6.23/include/linux/skbuff.h linux-2.6.23.imq/include/linux/skbuff.h
---- linux-2.6.23/include/linux/skbuff.h        2007-10-01 09:05:08.000000000 -0300
-+++ linux-2.6.23.imq/include/linux/skbuff.h    2007-10-01 09:55:14.000000000 -0300
-@@ -296,6 +296,10 @@
-       struct nf_conntrack     *nfct;
-       struct sk_buff          *nfct_reasm;
- #endif
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+      unsigned char           imq_flags;
-+      struct nf_info          *nf_info;
-+#endif
- #ifdef CONFIG_BRIDGE_NETFILTER
-       struct nf_bridge_info   *nf_bridge;
- #endif
-@@ -1726,6 +1730,10 @@
-       dst->nfct_reasm = src->nfct_reasm;
-       nf_conntrack_get_reasm(src->nfct_reasm);
- #endif
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+      dst->imq_flags = src->imq_flags;
-+      dst->nf_info = src->nf_info;
-+#endif
- #ifdef CONFIG_BRIDGE_NETFILTER
-       dst->nf_bridge  = src->nf_bridge;
-       nf_bridge_get(src->nf_bridge);
-diff -Naurw linux-2.6.23/net/core/dev.c linux-2.6.23.imq/net/core/dev.c
---- linux-2.6.23/net/core/dev.c        2007-10-01 09:05:10.000000000 -0300
-+++ linux-2.6.23.imq/net/core/dev.c    2007-10-01 09:55:14.000000000 -0300
-@@ -94,6 +94,9 @@
- #include <linux/skbuff.h>
- #include <net/sock.h>
- #include <linux/rtnetlink.h>
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+#include <linux/imq.h>
-+#endif
- #include <linux/proc_fs.h>
- #include <linux/seq_file.h>
- #include <linux/stat.h>
-@@ -1462,7 +1465,11 @@
- int dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
- {
-       if (likely(!skb->next)) {
--              if (!list_empty(&ptype_all))
-+              if (!list_empty(&ptype_all)
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+                  && !(skb->imq_flags & IMQ_F_ENQUEUE)
-+#endif
-+                  )
-                       dev_queue_xmit_nit(skb, dev);
-               if (netif_needs_gso(dev, skb)) {
-diff -Naurw linux-2.6.23/net/ipv4/netfilter/ipt_IMQ.c linux-2.6.23.imq/net/ipv4/netfilter/ipt_IMQ.c
---- linux-2.6.23/net/ipv4/netfilter/ipt_IMQ.c  1969-12-31 21:00:00.000000000 -0300
-+++ linux-2.6.23.imq/net/ipv4/netfilter/ipt_IMQ.c      2007-10-01 09:55:14.000000000 -0300
-@@ -0,0 +1,69 @@
-+/*
-+ * This target marks packets to be enqueued to an imq device
-+ */
-+#include <linux/module.h>
-+#include <linux/skbuff.h>
-+#include <linux/netfilter_ipv4/ip_tables.h>
-+#include <linux/netfilter_ipv4/ipt_IMQ.h>
-+#include <linux/imq.h>
-+
-+static unsigned int imq_target(struct sk_buff **pskb,
-+                             const struct net_device *in,
-+                             const struct net_device *out,
-+                             unsigned int hooknum,
-+                             const struct xt_target *target,
-+                             const void *targinfo)
-+{
-+      struct ipt_imq_info *mr = (struct ipt_imq_info*)targinfo;
-+
-+      (*pskb)->imq_flags = mr->todev | IMQ_F_ENQUEUE;
-+
-+      return XT_CONTINUE;
-+}
-+
-+static bool imq_checkentry(const char *tablename,
-+                        const void *e,
-+                        const struct xt_target *target,
-+                        void *targinfo,
-+                        unsigned int hook_mask)
-+{
-+      struct ipt_imq_info *mr;
-+
-+      mr = (struct ipt_imq_info*)targinfo;
-+
-+      if (mr->todev > IMQ_MAX_DEVS) {
-+              printk(KERN_WARNING
-+                     "IMQ: invalid device specified, highest is %u\n",
-+                     IMQ_MAX_DEVS);
-+              return 0;
-+      }
-+
-+      return 1;
-+}
-+
-+static struct xt_target ipt_imq_reg = {
-+      .name           = "IMQ",
-+      .family         = AF_INET,
-+      .target         = imq_target,
-+      .targetsize     = sizeof(struct ipt_imq_info),
-+      .checkentry     = imq_checkentry,
-+      .me             = THIS_MODULE,
-+      .table          = "mangle"
-+};
-+
-+static int __init init(void)
-+{
-+      return xt_register_target(&ipt_imq_reg);
-+}
-+
-+static void __exit fini(void)
-+{
-+      xt_unregister_target(&ipt_imq_reg);
-+}
-+
-+module_init(init);
-+module_exit(fini);
-+
-+MODULE_AUTHOR("http://www.linuximq.net");
-+MODULE_DESCRIPTION("Pseudo-driver for the intermediate queue device. See http://www.linuximq.net/ for more information.");
-+MODULE_LICENSE("GPL");
-diff -Naurw linux-2.6.23/net/ipv4/netfilter/Kconfig linux-2.6.23.imq/net/ipv4/netfilter/Kconfig
---- linux-2.6.23/net/ipv4/netfilter/Kconfig    2007-10-01 09:05:12.000000000 -0300
-+++ linux-2.6.23.imq/net/ipv4/netfilter/Kconfig        2007-10-01 09:55:14.000000000 -0300
-@@ -311,6 +311,17 @@
-         To compile it as a module, choose M here.  If unsure, say N.
-+config IP_NF_TARGET_IMQ
-+       tristate "IMQ target support"
-+       depends on IP_NF_MANGLE
-+       help
-+         This option adds a `IMQ' target which is used to specify if and
-+         to which IMQ device packets should get enqueued/dequeued.
-+
-+       For more information visit: http://www.linuximq.net/
-+
-+         To compile it as a module, choose M here.  If unsure, say N.
-+
- config IP_NF_TARGET_TOS
-       tristate "TOS target support"
-       depends on IP_NF_MANGLE
-diff -Naurw linux-2.6.23/net/ipv4/netfilter/Makefile linux-2.6.23.imq/net/ipv4/netfilter/Makefile
---- linux-2.6.23/net/ipv4/netfilter/Makefile   2007-10-01 09:03:13.000000000 -0300
-+++ linux-2.6.23.imq/net/ipv4/netfilter/Makefile       2007-10-01 09:55:14.000000000 -0300
-@@ -54,6 +54,7 @@
- obj-$(CONFIG_IP_NF_TARGET_REJECT) += ipt_REJECT.o
- obj-$(CONFIG_IP_NF_TARGET_TOS) += ipt_TOS.o
- obj-$(CONFIG_IP_NF_TARGET_ECN) += ipt_ECN.o
-+obj-$(CONFIG_IP_NF_TARGET_IMQ) += ipt_IMQ.o
- obj-$(CONFIG_IP_NF_TARGET_MASQUERADE) += ipt_MASQUERADE.o
- obj-$(CONFIG_IP_NF_TARGET_REDIRECT) += ipt_REDIRECT.o
- obj-$(CONFIG_IP_NF_TARGET_NETMAP) += ipt_NETMAP.o
-diff -Naurw linux-2.6.23/net/ipv6/netfilter/ip6t_IMQ.c linux-2.6.23.imq/net/ipv6/netfilter/ip6t_IMQ.c
---- linux-2.6.23/net/ipv6/netfilter/ip6t_IMQ.c 1969-12-31 21:00:00.000000000 -0300
-+++ linux-2.6.23.imq/net/ipv6/netfilter/ip6t_IMQ.c     2007-10-01 09:55:14.000000000 -0300
-@@ -0,0 +1,69 @@
-+/*
-+ * This target marks packets to be enqueued to an imq device
-+ */
-+#include <linux/module.h>
-+#include <linux/skbuff.h>
-+#include <linux/netfilter_ipv6/ip6_tables.h>
-+#include <linux/netfilter_ipv6/ip6t_IMQ.h>
-+#include <linux/imq.h>
-+
-+static unsigned int imq_target(struct sk_buff **pskb,
-+                             const struct net_device *in,
-+                             const struct net_device *out,
-+                             unsigned int hooknum,
-+                             const struct xt_target *target,
-+                             const void *targinfo)
-+{
-+      struct ip6t_imq_info *mr = (struct ip6t_imq_info*)targinfo;
-+
-+      (*pskb)->imq_flags = mr->todev | IMQ_F_ENQUEUE;
-+
-+      return XT_CONTINUE;
-+}
-+
-+static bool imq_checkentry(const char *tablename,
-+                        const void *entry,
-+                        const struct xt_target *target,
-+                        void *targinfo,
-+                        unsigned int hook_mask)
-+{
-+      struct ip6t_imq_info *mr;
-+
-+      mr = (struct ip6t_imq_info*)targinfo;
-+
-+      if (mr->todev > IMQ_MAX_DEVS) {
-+              printk(KERN_WARNING
-+                     "IMQ: invalid device specified, highest is %u\n",
-+                     IMQ_MAX_DEVS);
-+              return 0;
-+      }
-+
-+      return 1;
-+}
-+
-+static struct xt_target ip6t_imq_reg = {
-+      .name           = "IMQ",
-+      .family         = AF_INET6,
-+      .target         = imq_target,
-+      .targetsize     = sizeof(struct ip6t_imq_info),
-+      .table          = "mangle",
-+      .checkentry     = imq_checkentry,
-+      .me             = THIS_MODULE
-+};
-+
-+static int __init init(void)
-+{
-+      return xt_register_target(&ip6t_imq_reg);
-+}
-+
-+static void __exit fini(void)
-+{
-+      xt_unregister_target(&ip6t_imq_reg);
-+}
-+
-+module_init(init);
-+module_exit(fini);
-+
-+MODULE_AUTHOR("http://www.linuximq.net");
-+MODULE_DESCRIPTION("Pseudo-driver for the intermediate queue device. See http://www.linuximq.net/ for more information.");
-+MODULE_LICENSE("GPL");
-diff -Naurw linux-2.6.23/net/ipv6/netfilter/Kconfig linux-2.6.23.imq/net/ipv6/netfilter/Kconfig
---- linux-2.6.23/net/ipv6/netfilter/Kconfig    2007-10-01 09:03:12.000000000 -0300
-+++ linux-2.6.23.imq/net/ipv6/netfilter/Kconfig        2007-10-01 09:55:14.000000000 -0300
-@@ -173,6 +173,15 @@
-         To compile it as a module, choose M here.  If unsure, say N.
-+config IP6_NF_TARGET_IMQ
-+      tristate "IMQ target support"
-+      depends on IP6_NF_MANGLE
-+      help
-+          This option adds a `IMQ' target which is used to specify if and
-+          to which imq device packets should get enqueued/dequeued.
-+
-+          To compile it as a module, choose M here.  If unsure, say N.
-+
- config IP6_NF_TARGET_HL
-       tristate  'HL (hoplimit) target support'
-       depends on IP6_NF_MANGLE
-diff -Naurw linux-2.6.23/net/ipv6/netfilter/Makefile linux-2.6.23.imq/net/ipv6/netfilter/Makefile
---- linux-2.6.23/net/ipv6/netfilter/Makefile   2007-10-01 09:03:12.000000000 -0300
-+++ linux-2.6.23.imq/net/ipv6/netfilter/Makefile       2007-10-01 09:55:14.000000000 -0300
-@@ -13,6 +13,7 @@
- obj-$(CONFIG_IP6_NF_MATCH_OWNER) += ip6t_owner.o
- obj-$(CONFIG_IP6_NF_FILTER) += ip6table_filter.o
- obj-$(CONFIG_IP6_NF_MANGLE) += ip6table_mangle.o
-+obj-$(CONFIG_IP6_NF_TARGET_IMQ) += ip6t_IMQ.o
- obj-$(CONFIG_IP6_NF_TARGET_HL) += ip6t_HL.o
- obj-$(CONFIG_IP6_NF_QUEUE) += ip6_queue.o
- obj-$(CONFIG_IP6_NF_TARGET_LOG) += ip6t_LOG.o
-diff -Naurw linux-2.6.23/net/sched/sch_generic.c linux-2.6.23.imq/net/sched/sch_generic.c
---- linux-2.6.23/net/sched/sch_generic.c       2007-10-01 09:05:14.000000000 -0300
-+++ linux-2.6.23.imq/net/sched/sch_generic.c   2007-10-01 09:55:14.000000000 -0300
-@@ -190,6 +190,11 @@
-       return ret;
- }
-+int qdisc_restart1(struct net_device *dev)
-+{
-+      return qdisc_restart(dev);
-+}
-+
- void __qdisc_run(struct net_device *dev)
- {
-       do {
-@@ -619,3 +624,4 @@
- EXPORT_SYMBOL(qdisc_reset);
- EXPORT_SYMBOL(qdisc_lock_tree);
- EXPORT_SYMBOL(qdisc_unlock_tree);
-+EXPORT_SYMBOL(qdisc_restart1);
diff --git a/src/patches/linux-2.6.23-ueagle-atm-devolo_usb_id.patch b/src/patches/linux-2.6.23-ueagle-atm-devolo_usb_id.patch
deleted file mode 100644 (file)
index 0b0eb94..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-Submitted By: Arne Fitzenreiter <arne_f@ipfire.org>
-Date: 2008-08-17
-Description: Add devolo MicroLink ADSL Fun USB id's to eagle-atm driver 
-
-diff -Naur linux-2.6.23.17.org/drivers/usb/atm/ueagle-atm.c linux-2.6.23.17/drivers/usb/atm/ueagle-atm.c
---- linux-2.6.23.17.org/drivers/usb/atm/ueagle-atm.c   2008-02-26 01:14:28.000000000 +0100
-+++ linux-2.6.23.17/drivers/usb/atm/ueagle-atm.c       2008-08-17 12:35:03.000000000 +0200
-@@ -174,6 +174,16 @@
- #define ELSA_PID_PSTFIRM      0x3350
- #define ELSA_PID_PREFIRM      0x3351
-+#define DEVOLO_VID            0x1039
-+#define DEVOLO_E1I_PID_PSTFIRM        0x2100
-+#define DEVOLO_E1I_PID_PREFIRM        0x2101
-+#define DEVOLO_E1P_PID_PSTFIRM        0x2110
-+#define DEVOLO_E1P_PID_PREFIRM        0x2111
-+#define DEVOLO_E2I_PID_PSTFIRM        0x2120
-+#define DEVOLO_E2I_PID_PREFIRM        0x2121
-+#define DEVOLO_E2P_PID_PSTFIRM        0x2130
-+#define DEVOLO_E2P_PID_PREFIRM        0x2131
-+
- /*
-  * Sagem USB IDs
-  */
-@@ -1795,6 +1805,14 @@
- static const struct usb_device_id uea_ids[] = {
-       {USB_DEVICE(ELSA_VID,   ELSA_PID_PREFIRM),      .driver_info = ADI930 | PREFIRM},
-       {USB_DEVICE(ELSA_VID,   ELSA_PID_PSTFIRM),      .driver_info = ADI930 | PSTFIRM},
-+      {USB_DEVICE(DEVOLO_VID, DEVOLO_E1I_PID_PREFIRM),.driver_info = EAGLE_I | PREFIRM},
-+      {USB_DEVICE(DEVOLO_VID, DEVOLO_E1I_PID_PSTFIRM),.driver_info = EAGLE_I | PSTFIRM},
-+      {USB_DEVICE(DEVOLO_VID, DEVOLO_E1P_PID_PREFIRM),.driver_info = EAGLE_I | PREFIRM},
-+      {USB_DEVICE(DEVOLO_VID, DEVOLO_E1P_PID_PSTFIRM),.driver_info = EAGLE_I | PSTFIRM},
-+      {USB_DEVICE(DEVOLO_VID, DEVOLO_E2I_PID_PREFIRM),.driver_info = EAGLE_II | PREFIRM},
-+      {USB_DEVICE(DEVOLO_VID, DEVOLO_E2I_PID_PSTFIRM),.driver_info = EAGLE_II | PSTFIRM},
-+      {USB_DEVICE(DEVOLO_VID, DEVOLO_E2P_PID_PREFIRM),.driver_info = EAGLE_II | PREFIRM},
-+      {USB_DEVICE(DEVOLO_VID, DEVOLO_E2P_PID_PSTFIRM),.driver_info = EAGLE_II | PSTFIRM},
-       {USB_DEVICE(EAGLE_VID,  EAGLE_I_PID_PREFIRM),   .driver_info = EAGLE_I | PREFIRM},
-       {USB_DEVICE(EAGLE_VID,  EAGLE_I_PID_PSTFIRM),   .driver_info = EAGLE_I | PSTFIRM},
-       {USB_DEVICE(EAGLE_VID,  EAGLE_II_PID_PREFIRM),  .driver_info = EAGLE_II | PREFIRM},
diff --git a/src/patches/linux-2.6.23.17-ipp2p-0.8.2-pomng.patch b/src/patches/linux-2.6.23.17-ipp2p-0.8.2-pomng.patch
deleted file mode 100644 (file)
index 426e1c8..0000000
+++ /dev/null
@@ -1,980 +0,0 @@
-diff -Naur linux-2.6.23.17.org/include/linux/netfilter_ipv4/ipt_ipp2p.h linux-2.6.23.17/include/linux/netfilter_ipv4/ipt_ipp2p.h
---- linux-2.6.23.17.org/include/linux/netfilter_ipv4/ipt_ipp2p.h       1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23.17/include/linux/netfilter_ipv4/ipt_ipp2p.h   2008-09-22 21:58:41.000000000 +0000
-@@ -0,0 +1,31 @@
-+#ifndef __IPT_IPP2P_H
-+#define __IPT_IPP2P_H
-+#define IPP2P_VERSION "0.8.2-pomng"
-+
-+struct ipt_p2p_info {
-+    int cmd;
-+    int debug;
-+};
-+
-+#endif //__IPT_IPP2P_H
-+
-+#define SHORT_HAND_IPP2P      1 /* --ipp2p switch*/
-+//#define SHORT_HAND_DATA             4 /* --ipp2p-data switch*/
-+#define SHORT_HAND_NONE               5 /* no short hand*/
-+
-+#define IPP2P_EDK             (1 << 1)
-+#define IPP2P_DATA_KAZAA      (1 << 2)
-+#define IPP2P_DATA_EDK                (1 << 3)
-+#define IPP2P_DATA_DC         (1 << 4)
-+#define IPP2P_DC              (1 << 5)
-+#define IPP2P_DATA_GNU                (1 << 6)
-+#define IPP2P_GNU             (1 << 7)
-+#define IPP2P_KAZAA           (1 << 8)
-+#define IPP2P_BIT             (1 << 9)
-+#define IPP2P_APPLE           (1 << 10)
-+#define IPP2P_SOUL            (1 << 11)
-+#define IPP2P_WINMX           (1 << 12)
-+#define IPP2P_ARES            (1 << 13)
-+#define IPP2P_MUTE            (1 << 14)
-+#define IPP2P_WASTE           (1 << 15)
-+#define IPP2P_XDCC            (1 << 16)
-diff -Naur linux-2.6.23.17.org/net/ipv4/netfilter/Kconfig linux-2.6.23.17/net/ipv4/netfilter/Kconfig
---- linux-2.6.23.17.org/net/ipv4/netfilter/Kconfig     2008-02-26 00:14:28.000000000 +0000
-+++ linux-2.6.23.17/net/ipv4/netfilter/Kconfig 2008-09-22 21:58:41.000000000 +0000
-@@ -402,5 +402,15 @@
-         Allows altering the ARP packet payload: source and destination
-         hardware and network addresses.
-+config IP_NF_MATCH_IPP2P
-+      tristate  'IPP2P match support'
-+      depends on IP_NF_IPTABLES
-+      help
-+        This option makes possible to match some P2P packets
-+        therefore helps controlling such traffic.
-+      
-+        If you want to compile it as a module, say M here and read
-+        <file:Documentation/modules.txt>.  If unsure, say `N'.
-+
- endmenu
-diff -Naur linux-2.6.23.17.org/net/ipv4/netfilter/Makefile linux-2.6.23.17/net/ipv4/netfilter/Makefile
---- linux-2.6.23.17.org/net/ipv4/netfilter/Makefile    2008-02-26 00:14:28.000000000 +0000
-+++ linux-2.6.23.17/net/ipv4/netfilter/Makefile        2008-09-22 21:58:41.000000000 +0000
-@@ -45,6 +45,7 @@
- obj-$(CONFIG_IP_NF_MATCH_OWNER) += ipt_owner.o
- obj-$(CONFIG_IP_NF_MATCH_TOS) += ipt_tos.o
- obj-$(CONFIG_IP_NF_MATCH_RECENT) += ipt_recent.o
-+obj-$(CONFIG_IP_NF_MATCH_IPP2P) += ipt_ipp2p.o
- obj-$(CONFIG_IP_NF_MATCH_ECN) += ipt_ecn.o
- obj-$(CONFIG_IP_NF_MATCH_AH) += ipt_ah.o
- obj-$(CONFIG_IP_NF_MATCH_TTL) += ipt_ttl.o
-diff -Naur linux-2.6.23.17.org/net/ipv4/netfilter/ipt_ipp2p.c linux-2.6.23.17/net/ipv4/netfilter/ipt_ipp2p.c
---- linux-2.6.23.17.org/net/ipv4/netfilter/ipt_ipp2p.c 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23.17/net/ipv4/netfilter/ipt_ipp2p.c     2008-09-22 21:58:41.000000000 +0000
-@@ -0,0 +1,911 @@
-+#if defined(MODVERSIONS)
-+#include <linux/modversions.h>
-+#endif
-+#include <linux/module.h>
-+#include <linux/version.h>
-+#include <linux/netfilter_ipv4/ip_tables.h>
-+#include <linux/netfilter_ipv4/ipt_ipp2p.h>
-+#include <net/tcp.h>
-+#include <net/udp.h>
-+
-+#define get_u8(X,O)  (*(__u8 *)(X + O))
-+#define get_u16(X,O)  (*(__u16 *)(X + O))
-+#define get_u32(X,O)  (*(__u32 *)(X + O))
-+
-+MODULE_AUTHOR("Eicke Friedrich/Klaus Degner <ipp2p@ipp2p.org>");
-+MODULE_DESCRIPTION("An extension to iptables to identify P2P traffic.");
-+MODULE_LICENSE("GPL");
-+
-+
-+/*Search for UDP eDonkey/eMule/Kad commands*/
-+int
-+udp_search_edk (unsigned char *haystack, int packet_len)
-+{
-+    unsigned char *t = haystack;
-+    t += 8;
-+
-+      switch (t[0]) {
-+              case 0xe3: 
-+              {       /*edonkey*/
-+                      switch (t[1]) 
-+                      {
-+                              /* client -> server status request */
-+                              case 0x96: 
-+                                      if (packet_len == 14) return ((IPP2P_EDK * 100) + 50);
-+                                      break;
-+                              /* server -> client status request */
-+                              case 0x97: if (packet_len == 42) return ((IPP2P_EDK * 100) + 51);
-+                                      break;
-+                                              /* server description request */
-+                                              /* e3 2a ff f0 .. | size == 6 */
-+                              case 0xa2: if ( (packet_len == 14) && ( get_u16(t,2) == __constant_htons(0xfff0) ) ) return ((IPP2P_EDK * 100) + 52);
-+                                      break;
-+                                              /* server description response */
-+                                              /* e3 a3 ff f0 ..  | size > 40 && size < 200 */
-+                              //case 0xa3: return ((IPP2P_EDK * 100) + 53);
-+                              //      break;
-+                              case 0x9a: if (packet_len==26) return ((IPP2P_EDK * 100) + 54);
-+                                      break;
-+
-+                              case 0x92: if (packet_len==18) return ((IPP2P_EDK * 100) + 55);
-+                                      break;
-+                      }
-+                      break;
-+              }
-+              case 0xe4: 
-+              {
-+                      switch (t[1]) 
-+                      {
-+                                              /* e4 20 .. | size == 43 */
-+                              case 0x20: if ((packet_len == 43) && (t[2] != 0x00) && (t[34] != 0x00)) return ((IPP2P_EDK * 100) + 60);
-+                                      break;
-+                                              /* e4 00 .. 00 | size == 35 ? */
-+                              case 0x00: if ((packet_len == 35) && (t[26] == 0x00)) return ((IPP2P_EDK * 100) + 61);
-+                                      break;
-+                                              /* e4 10 .. 00 | size == 35 ? */
-+                              case 0x10: if ((packet_len == 35) && (t[26] == 0x00)) return ((IPP2P_EDK * 100) + 62);
-+                                      break;
-+                                              /* e4 18 .. 00 | size == 35 ? */
-+                              case 0x18: if ((packet_len == 35) && (t[26] == 0x00)) return ((IPP2P_EDK * 100) + 63);
-+                                      break;
-+                                              /* e4 52 .. | size = 44 */
-+                              case 0x52: if (packet_len == 44 ) return ((IPP2P_EDK * 100) + 64);
-+                                      break;
-+                                              /* e4 58 .. | size == 6 */
-+                              case 0x58: if (packet_len == 14 ) return ((IPP2P_EDK * 100) + 65);
-+                                      break;
-+                                              /* e4 59 .. | size == 2 */
-+                              case 0x59: if (packet_len == 10 )return ((IPP2P_EDK * 100) + 66);
-+                                      break;
-+                                      /* e4 28 .. | packet_len == 52,77,102,127... */
-+                              case 0x28: if (((packet_len-52) % 25) == 0) return ((IPP2P_EDK * 100) + 67);
-+                                      break;
-+                                      /* e4 50 xx xx | size == 4 */
-+                              case 0x50: if (packet_len == 12) return ((IPP2P_EDK * 100) + 68);
-+                                      break;
-+                                      /* e4 40 xx xx | size == 48 */
-+                              case 0x40: if (packet_len == 56) return ((IPP2P_EDK * 100) + 69);
-+                                      break;
-+                      }
-+                      break;
-+              }
-+      } /* end of switch (t[0]) */
-+    return 0;
-+}/*udp_search_edk*/
-+
-+
-+/*Search for UDP Gnutella commands*/
-+int
-+udp_search_gnu (unsigned char *haystack, int packet_len)
-+{
-+    unsigned char *t = haystack;
-+    t += 8;
-+    
-+    if (memcmp(t, "GND", 3) == 0) return ((IPP2P_GNU * 100) + 51);
-+    if (memcmp(t, "GNUTELLA ", 9) == 0) return ((IPP2P_GNU * 100) + 52);
-+    return 0;
-+}/*udp_search_gnu*/
-+
-+
-+/*Search for UDP KaZaA commands*/
-+int
-+udp_search_kazaa (unsigned char *haystack, int packet_len)
-+{
-+    unsigned char *t = haystack;
-+    
-+    if (t[packet_len-1] == 0x00){
-+      t += (packet_len - 6);
-+      if (memcmp(t, "KaZaA", 5) == 0) return (IPP2P_KAZAA * 100 +50);
-+    }
-+    
-+    return 0;
-+}/*udp_search_kazaa*/
-+
-+/*Search for UDP DirectConnect commands*/
-+int
-+udp_search_directconnect (unsigned char *haystack, int packet_len)
-+{
-+    unsigned char *t = haystack;
-+    if ((*(t + 8) == 0x24) && (*(t + packet_len - 1) == 0x7c)) {
-+      t+=8;
-+      if (memcmp(t, "SR ", 3) == 0)                   return ((IPP2P_DC * 100) + 60);
-+      if (memcmp(t, "Ping ", 5) == 0)                 return ((IPP2P_DC * 100) + 61);
-+    }
-+    return 0;
-+}/*udp_search_directconnect*/
-+
-+
-+
-+/*Search for UDP BitTorrent commands*/
-+int
-+udp_search_bit (unsigned char *haystack, int packet_len)
-+{
-+      switch(packet_len)
-+      {
-+              case 24:
-+                      /* ^ 00 00 04 17 27 10 19 80 */
-+                      if ((ntohl(get_u32(haystack, 8)) == 0x00000417) && (ntohl(get_u32(haystack, 12)) == 0x27101980)) 
-+                              return (IPP2P_BIT * 100 + 50);
-+                      break;
-+              case 44:
-+                      if (get_u32(haystack, 16) == __constant_htonl(0x00000400) && get_u32(haystack, 36) == __constant_htonl(0x00000104)) 
-+                              return (IPP2P_BIT * 100 + 51);
-+                      if (get_u32(haystack, 16) == __constant_htonl(0x00000400))
-+                              return (IPP2P_BIT * 100 + 61);
-+                      break;
-+              case 65:
-+                      if (get_u32(haystack, 16) == __constant_htonl(0x00000404) && get_u32(haystack, 36) == __constant_htonl(0x00000104)) 
-+                              return (IPP2P_BIT * 100 + 52);
-+                      if (get_u32(haystack, 16) == __constant_htonl(0x00000404))
-+                              return (IPP2P_BIT * 100 + 62);
-+                      break;
-+              case 67:
-+                      if (get_u32(haystack, 16) == __constant_htonl(0x00000406) && get_u32(haystack, 36) == __constant_htonl(0x00000104)) 
-+                              return (IPP2P_BIT * 100 + 53);
-+                      if (get_u32(haystack, 16) == __constant_htonl(0x00000406))
-+                              return (IPP2P_BIT * 100 + 63);
-+                      break;
-+              case 211:
-+                      if (get_u32(haystack, 8) == __constant_htonl(0x00000405)) 
-+                              return (IPP2P_BIT * 100 + 54);
-+                      break;
-+              case 29:
-+                      if ((get_u32(haystack, 8) == __constant_htonl(0x00000401))) 
-+                              return (IPP2P_BIT * 100 + 55);
-+                      break;
-+              case 52:
-+                      if (get_u32(haystack,8)  == __constant_htonl(0x00000827) &&
-+                      get_u32(haystack,12) == __constant_htonl(0x37502950))
-+                              return (IPP2P_BIT * 100 + 80);
-+                      break;
-+              default:
-+                      /* this packet does not have a constant size */
-+                      if (packet_len >= 40 && get_u32(haystack, 16) == __constant_htonl(0x00000402) && get_u32(haystack, 36) == __constant_htonl(0x00000104)) 
-+                              return (IPP2P_BIT * 100 + 56);
-+                      break;
-+      }
-+    
-+      /* some extra-bitcomet rules:
-+      * "d1:" [a|r] "d2:id20:"
-+      */
-+      if (packet_len > 30 && get_u8(haystack, 8) == 'd' && get_u8(haystack, 9) == '1' && get_u8(haystack, 10) == ':' )
-+      {
-+              if (get_u8(haystack, 11) == 'a' || get_u8(haystack, 11) == 'r')
-+              {
-+                      if (memcmp(haystack+12,"d2:id20:",8)==0)
-+                              return (IPP2P_BIT * 100 + 57);
-+              }
-+      }
-+    
-+#if 0
-+      /* bitlord rules */
-+      /* packetlen must be bigger than 40 */
-+      /* first 4 bytes are zero */
-+      if (packet_len > 40 && get_u32(haystack, 8) == 0x00000000)
-+      {
-+              /* first rule: 00 00 00 00 01 00 00 xx xx xx xx 00 00 00 00*/
-+              if (get_u32(haystack, 12) == 0x00000000 && 
-+                  get_u32(haystack, 16) == 0x00010000 &&
-+                  get_u32(haystack, 24) == 0x00000000 )
-+                      return (IPP2P_BIT * 100 + 71);
-+                      
-+              /* 00 01 00 00 0d 00 00 xx xx xx xx 00 00 00 00*/
-+              if (get_u32(haystack, 12) == 0x00000001 && 
-+                  get_u32(haystack, 16) == 0x000d0000 &&
-+                  get_u32(haystack, 24) == 0x00000000 )
-+                      return (IPP2P_BIT * 100 + 71);
-+              
-+                  
-+      }
-+#endif
-+
-+    return 0;
-+}/*udp_search_bit*/
-+
-+
-+
-+/*Search for Ares commands*/
-+//#define IPP2P_DEBUG_ARES
-+int
-+search_ares (const unsigned char *payload, const u16 plen)
-+//int search_ares (unsigned char *haystack, int packet_len, int head_len)
-+{
-+//    const unsigned char *t = haystack + head_len;
-+      
-+      /* all ares packets start with  */
-+      if (payload[1] == 0 && (plen - payload[0]) == 3)
-+      {
-+              switch (payload[2])
-+              {
-+                      case 0x5a:
-+                              /* ares connect */
-+                              if ( plen == 6 && payload[5] == 0x05 ) return ((IPP2P_ARES * 100) + 1);
-+                              break;
-+                      case 0x09:
-+                              /* ares search, min 3 chars --> 14 bytes
-+                               * lets define a search can be up to 30 chars --> max 34 bytes
-+                               */
-+                              if ( plen >= 14 && plen <= 34 ) return ((IPP2P_ARES * 100) + 1);
-+                              break;
-+#ifdef IPP2P_DEBUG_ARES
-+                      default:
-+                      printk(KERN_DEBUG "Unknown Ares command %x recognized, len: %u \n", (unsigned int) payload[2],plen);
-+#endif /* IPP2P_DEBUG_ARES */
-+              }
-+      }
-+
-+#if 0         
-+      /* found connect packet: 03 00 5a 04 03 05 */
-+      /* new version ares 1.8: 03 00 5a xx xx 05 */
-+    if ((plen) == 6){ /* possible connect command*/
-+      if ((payload[0] == 0x03) && (payload[1] == 0x00) && (payload[2] == 0x5a) && (payload[5] == 0x05))
-+          return ((IPP2P_ARES * 100) + 1);
-+    }
-+    if ((plen) == 60){        /* possible download command*/
-+      if ((payload[59] == 0x0a) && (payload[58] == 0x0a)){
-+          if (memcmp(t, "PUSH SHA1:", 10) == 0) /* found download command */
-+              return ((IPP2P_ARES * 100) + 2);
-+      }
-+    }
-+#endif
-+
-+    return 0;
-+} /*search_ares*/
-+
-+/*Search for SoulSeek commands*/
-+int
-+search_soul (const unsigned char *payload, const u16 plen)
-+{
-+//#define IPP2P_DEBUG_SOUL
-+    /* match: xx xx xx xx | xx = sizeof(payload) - 4 */
-+    if (get_u32(payload, 0) == (plen - 4)){
-+      const __u32 m=get_u32(payload, 4);
-+      /* match 00 yy yy 00, yy can be everything */
-+        if ( get_u8(payload, 4) == 0x00 && get_u8(payload, 7) == 0x00 )
-+      {
-+#ifdef IPP2P_DEBUG_SOUL
-+      printk(KERN_DEBUG "0: Soulseek command 0x%x recognized\n",get_u32(payload, 4));
-+#endif /* IPP2P_DEBUG_SOUL */
-+              return ((IPP2P_SOUL * 100) + 1);
-+      }
-+      
-+        /* next match: 01 yy 00 00 | yy can be everything */
-+        if ( get_u8(payload, 4) == 0x01 && get_u16(payload, 6) == 0x0000 )
-+      {
-+#ifdef IPP2P_DEBUG_SOUL
-+      printk(KERN_DEBUG "1: Soulseek command 0x%x recognized\n",get_u16(payload, 4));
-+#endif /* IPP2P_DEBUG_SOUL */
-+              return ((IPP2P_SOUL * 100) + 2);
-+      }
-+      
-+      /* other soulseek commandos are: 1-5,7,9,13-18,22,23,26,28,35-37,40-46,50,51,60,62-69,91,92,1001 */
-+      /* try to do this in an intelligent way */
-+      /* get all small commandos */
-+      switch(m)
-+      {
-+              case 7:
-+              case 9:
-+              case 22:
-+              case 23:
-+              case 26:
-+              case 28:
-+              case 50:
-+              case 51:
-+              case 60:
-+              case 91:
-+              case 92:
-+              case 1001:
-+#ifdef IPP2P_DEBUG_SOUL
-+              printk(KERN_DEBUG "2: Soulseek command 0x%x recognized\n",get_u16(payload, 4));
-+#endif /* IPP2P_DEBUG_SOUL */
-+              return ((IPP2P_SOUL * 100) + 3);
-+      }
-+      
-+      if (m > 0 && m < 6 ) 
-+      {
-+#ifdef IPP2P_DEBUG_SOUL
-+              printk(KERN_DEBUG "3: Soulseek command 0x%x recognized\n",get_u16(payload, 4));
-+#endif /* IPP2P_DEBUG_SOUL */
-+              return ((IPP2P_SOUL * 100) + 4);
-+      }
-+      if (m > 12 && m < 19 )
-+      {
-+#ifdef IPP2P_DEBUG_SOUL
-+              printk(KERN_DEBUG "4: Soulseek command 0x%x recognized\n",get_u16(payload, 4));
-+#endif /* IPP2P_DEBUG_SOUL */
-+              return ((IPP2P_SOUL * 100) + 5);
-+      }
-+
-+      if (m > 34 && m < 38 )
-+      {
-+#ifdef IPP2P_DEBUG_SOUL
-+              printk(KERN_DEBUG "5: Soulseek command 0x%x recognized\n",get_u16(payload, 4));
-+#endif /* IPP2P_DEBUG_SOUL */
-+              return ((IPP2P_SOUL * 100) + 6);
-+      }
-+
-+      if (m > 39 && m < 47 )
-+      {
-+#ifdef IPP2P_DEBUG_SOUL
-+              printk(KERN_DEBUG "6: Soulseek command 0x%x recognized\n",get_u16(payload, 4));
-+#endif /* IPP2P_DEBUG_SOUL */
-+              return ((IPP2P_SOUL * 100) + 7);
-+      }
-+
-+      if (m > 61 && m < 70 ) 
-+      {
-+#ifdef IPP2P_DEBUG_SOUL
-+              printk(KERN_DEBUG "7: Soulseek command 0x%x recognized\n",get_u16(payload, 4));
-+#endif /* IPP2P_DEBUG_SOUL */
-+              return ((IPP2P_SOUL * 100) + 8);
-+      }
-+
-+#ifdef IPP2P_DEBUG_SOUL
-+      printk(KERN_DEBUG "unknown SOULSEEK command: 0x%x, first 16 bit: 0x%x, first 8 bit: 0x%x ,soulseek ???\n",get_u32(payload, 4),get_u16(payload, 4) >> 16,get_u8(payload, 4) >> 24);
-+#endif /* IPP2P_DEBUG_SOUL */
-+    }
-+      
-+      /* match 14 00 00 00 01 yy 00 00 00 STRING(YY) 01 00 00 00 00 46|50 00 00 00 00 */
-+      /* without size at the beginning !!! */
-+      if ( get_u32(payload, 0) == 0x14 && get_u8(payload, 4) == 0x01 )
-+      {
-+              __u32 y=get_u32(payload, 5);
-+              /* we need 19 chars + string */
-+              if ( (y + 19) <= (plen) )
-+              {
-+                      const unsigned char *w=payload+9+y;
-+                      if (get_u32(w, 0) == 0x01 && ( get_u16(w, 4) == 0x4600 || get_u16(w, 4) == 0x5000) && get_u32(w, 6) == 0x00);
-+#ifdef IPP2P_DEBUG_SOUL
-+                      printk(KERN_DEBUG "Soulssek special client command recognized\n");
-+#endif /* IPP2P_DEBUG_SOUL */
-+                      return ((IPP2P_SOUL * 100) + 9);
-+              }
-+      }
-+    return 0;
-+}
-+
-+
-+/*Search for WinMX commands*/
-+int
-+search_winmx (const unsigned char *payload, const u16 plen)
-+{
-+//#define IPP2P_DEBUG_WINMX
-+    if (((plen) == 4) && (memcmp(payload, "SEND", 4) == 0))  return ((IPP2P_WINMX * 100) + 1);
-+    if (((plen) == 3) && (memcmp(payload, "GET", 3) == 0))  return ((IPP2P_WINMX * 100) + 2);
-+    //if (packet_len < (head_len + 10)) return 0;
-+    if (plen < 10) return 0;
-+    
-+    if ((memcmp(payload, "SEND", 4) == 0) || (memcmp(payload, "GET", 3) == 0)){
-+        u16 c=4;
-+        const u16 end=plen-2;
-+        u8 count=0;
-+        while (c < end)
-+        {
-+              if (payload[c]== 0x20 && payload[c+1] == 0x22)
-+              {
-+                      c++;
-+                      count++;
-+                      if (count>=2) return ((IPP2P_WINMX * 100) + 3);
-+              }
-+              c++;
-+        }
-+    }
-+    
-+    if ( plen == 149 && payload[0] == '8' )
-+    {
-+#ifdef IPP2P_DEBUG_WINMX
-+      printk(KERN_INFO "maybe WinMX\n");
-+#endif
-+      if (get_u32(payload,17) == 0 && get_u32(payload,21) == 0 && get_u32(payload,25) == 0 &&
-+//                get_u32(payload,33) == __constant_htonl(0x71182b1a) && get_u32(payload,37) == __constant_htonl(0x05050000) &&
-+//                get_u32(payload,133) == __constant_htonl(0x31097edf) && get_u32(payload,145) == __constant_htonl(0xdcb8f792))
-+          get_u16(payload,39) == 0 && get_u16(payload,135) == __constant_htons(0x7edf) && get_u16(payload,147) == __constant_htons(0xf792))
-+          
-+      {
-+#ifdef IPP2P_DEBUG_WINMX
-+              printk(KERN_INFO "got WinMX\n");
-+#endif
-+              return ((IPP2P_WINMX * 100) + 4);
-+      }
-+    }
-+    return 0;
-+} /*search_winmx*/
-+
-+
-+/*Search for appleJuice commands*/
-+int
-+search_apple (const unsigned char *payload, const u16 plen)
-+{
-+    if ( (plen > 7) && (payload[6] == 0x0d) && (payload[7] == 0x0a) && (memcmp(payload, "ajprot", 6) == 0))  return (IPP2P_APPLE * 100);
-+    
-+    return 0;
-+}
-+
-+
-+/*Search for BitTorrent commands*/
-+int
-+search_bittorrent (const unsigned char *payload, const u16 plen)
-+{
-+    if (plen > 20)
-+    {
-+      /* test for match 0x13+"BitTorrent protocol" */
-+      if (payload[0] == 0x13) 
-+      {
-+              if (memcmp(payload+1, "BitTorrent protocol", 19) == 0) return (IPP2P_BIT * 100);
-+      }
-+      
-+      /* get tracker commandos, all starts with GET /
-+      * then it can follow: scrape| announce
-+      * and then ?hash_info=
-+      */
-+      if (memcmp(payload,"GET /",5) == 0)
-+      {
-+              /* message scrape */
-+              if ( memcmp(payload+5,"scrape?info_hash=",17)==0 ) return (IPP2P_BIT * 100 + 1);
-+              /* message announce */
-+              if ( memcmp(payload+5,"announce?info_hash=",19)==0 ) return (IPP2P_BIT * 100 + 2);
-+      }
-+    } 
-+    else 
-+    {
-+      /* bitcomet encryptes the first packet, so we have to detect another 
-+       * one later in the flow */
-+       /* first try failed, too many missdetections */
-+      //if ( size == 5 && get_u32(t,0) == __constant_htonl(1) && t[4] < 3) return (IPP2P_BIT * 100 + 3);
-+      
-+      /* second try: block request packets */
-+      if ( plen == 17 && get_u32(payload,0) == __constant_htonl(0x0d) && payload[4] == 0x06 && get_u32(payload,13) == __constant_htonl(0x4000) ) return (IPP2P_BIT * 100 + 3);
-+    }
-+
-+    return 0;
-+}
-+
-+
-+
-+/*check for Kazaa get command*/
-+int
-+search_kazaa (const unsigned char *payload, const u16 plen)
-+
-+{
-+    if ((payload[plen-2] == 0x0d) && (payload[plen-1] == 0x0a) && memcmp(payload, "GET /.hash=", 11) == 0)
-+      return (IPP2P_DATA_KAZAA * 100);
-+
-+    return 0;
-+}
-+
-+
-+/*check for gnutella get command*/
-+int
-+search_gnu (const unsigned char *payload, const u16 plen)
-+{
-+    if ((payload[plen-2] == 0x0d) && (payload[plen-1] == 0x0a))
-+    {
-+      if (memcmp(payload, "GET /get/", 9) == 0)       return ((IPP2P_DATA_GNU * 100) + 1);
-+      if (memcmp(payload, "GET /uri-res/", 13) == 0) return ((IPP2P_DATA_GNU * 100) + 2); 
-+    }
-+    return 0;
-+}
-+
-+
-+/*check for gnutella get commands and other typical data*/
-+int
-+search_all_gnu (const unsigned char *payload, const u16 plen)
-+{
-+    
-+    if ((payload[plen-2] == 0x0d) && (payload[plen-1] == 0x0a))
-+    {
-+      
-+      if (memcmp(payload, "GNUTELLA CONNECT/", 17) == 0) return ((IPP2P_GNU * 100) + 1);
-+      if (memcmp(payload, "GNUTELLA/", 9) == 0) return ((IPP2P_GNU * 100) + 2);    
-+    
-+    
-+      if ((memcmp(payload, "GET /get/", 9) == 0) || (memcmp(payload, "GET /uri-res/", 13) == 0))
-+      {        
-+              u16 c=8;
-+              const u16 end=plen-22;
-+              while (c < end) {
-+                      if ( payload[c] == 0x0a && payload[c+1] == 0x0d && ((memcmp(&payload[c+2], "X-Gnutella-", 11) == 0) || (memcmp(&payload[c+2], "X-Queue:", 8) == 0))) 
-+                              return ((IPP2P_GNU * 100) + 3);
-+                      c++;
-+              }
-+      }
-+    }
-+    return 0;
-+}
-+
-+
-+/*check for KaZaA download commands and other typical data*/
-+int
-+search_all_kazaa (const unsigned char *payload, const u16 plen)
-+{
-+    if ((payload[plen-2] == 0x0d) && (payload[plen-1] == 0x0a))
-+    {
-+
-+      if (memcmp(payload, "GIVE ", 5) == 0) return ((IPP2P_KAZAA * 100) + 1);
-+    
-+      if (memcmp(payload, "GET /", 5) == 0) {
-+              u16 c = 8;
-+              const u16 end=plen-22;
-+              while (c < end) {
-+                      if ( payload[c] == 0x0a && payload[c+1] == 0x0d && ((memcmp(&payload[c+2], "X-Kazaa-Username: ", 18) == 0) || (memcmp(&payload[c+2], "User-Agent: PeerEnabler/", 24) == 0)))
-+                              return ((IPP2P_KAZAA * 100) + 2);
-+                      c++;
-+              }
-+      }
-+    }
-+    return 0;
-+}
-+
-+/*fast check for edonkey file segment transfer command*/
-+int
-+search_edk (const unsigned char *payload, const u16 plen)
-+{
-+    if (payload[0] != 0xe3) 
-+      return 0;
-+    else {
-+      if (payload[5] == 0x47) 
-+          return (IPP2P_DATA_EDK * 100);
-+      else    
-+          return 0;
-+    }
-+}
-+
-+
-+
-+/*intensive but slower search for some edonkey packets including size-check*/
-+int
-+search_all_edk (const unsigned char *payload, const u16 plen)
-+{
-+    if (payload[0] != 0xe3) 
-+      return 0;
-+    else {
-+      //t += head_len;        
-+      const u16 cmd = get_u16(payload, 1);
-+      if (cmd == (plen - 5)) {
-+          switch (payload[5]) {
-+              case 0x01: return ((IPP2P_EDK * 100) + 1);      /*Client: hello or Server:hello*/
-+              case 0x4c: return ((IPP2P_EDK * 100) + 9);      /*Client: Hello-Answer*/
-+          }
-+      }
-+      return 0;
-+     }
-+}
-+
-+
-+/*fast check for Direct Connect send command*/
-+int
-+search_dc (const unsigned char *payload, const u16 plen)
-+{
-+
-+    if (payload[0] != 0x24 ) 
-+      return 0;
-+    else {
-+      if (memcmp(&payload[1], "Send|", 5) == 0)
-+          return (IPP2P_DATA_DC * 100);
-+      else
-+          return 0;
-+    } 
-+
-+}
-+
-+
-+/*intensive but slower check for all direct connect packets*/
-+int
-+search_all_dc (const unsigned char *payload, const u16 plen)
-+{
-+//    unsigned char *t = haystack;
-+
-+    if (payload[0] == 0x24 && payload[plen-1] == 0x7c) 
-+    {
-+      const unsigned char *t=&payload[1];
-+              /* Client-Hub-Protocol */
-+      if (memcmp(t, "Lock ", 5) == 0)                 return ((IPP2P_DC * 100) + 1);
-+      /* Client-Client-Protocol, some are already recognized by client-hub (like lock) */
-+      if (memcmp(t, "MyNick ", 7) == 0)               return ((IPP2P_DC * 100) + 38); 
-+    }
-+    return 0;
-+}
-+
-+/*check for mute*/
-+int
-+search_mute (const unsigned char *payload, const u16 plen)
-+{
-+      if ( plen == 209 || plen == 345 || plen == 473 || plen == 609 || plen == 1121 )
-+      {
-+              //printk(KERN_DEBUG "size hit: %u",size);
-+              if (memcmp(payload,"PublicKey: ",11) == 0 )
-+              { 
-+                      return ((IPP2P_MUTE * 100) + 0);
-+                      
-+/*                    if (memcmp(t+size-14,"\x0aEndPublicKey\x0a",14) == 0)
-+                      {
-+                              printk(KERN_DEBUG "end pubic key hit: %u",size);
-+                              
-+                      }*/
-+              }
-+      }
-+      return 0;
-+}
-+
-+
-+/* check for xdcc */
-+int
-+search_xdcc (const unsigned char *payload, const u16 plen)
-+{
-+      /* search in small packets only */
-+      if (plen > 20 && plen < 200 && payload[plen-1] == 0x0a && payload[plen-2] == 0x0d && memcmp(payload,"PRIVMSG ",8) == 0)
-+      {
-+              
-+              u16 x=10;
-+              const u16 end=plen - 13;
-+              
-+              /* is seems to be a irc private massage, chedck for xdcc command */
-+              while (x < end)
-+              {
-+                      if (payload[x] == ':')
-+                      {
-+                              if ( memcmp(&payload[x+1],"xdcc send #",11) == 0 )
-+                                      return ((IPP2P_XDCC * 100) + 0);
-+                      }
-+                      x++;
-+              }
-+      }
-+      return 0;
-+}
-+
-+/* search for waste */
-+int search_waste(const unsigned char *payload, const u16 plen)
-+{
-+      if ( plen >= 8 && memcmp(payload,"GET.sha1:",9) == 0)
-+              return ((IPP2P_WASTE * 100) + 0);
-+
-+      return 0;
-+}
-+
-+
-+static struct {
-+    int command;
-+    __u8 short_hand;                  /*for fucntions included in short hands*/
-+    int packet_len;
-+    int (*function_name) (const unsigned char *, const u16);
-+} matchlist[] = {
-+    {IPP2P_EDK,SHORT_HAND_IPP2P,20, &search_all_edk},
-+//    {IPP2P_DATA_KAZAA,SHORT_HAND_DATA,200, &search_kazaa},
-+//    {IPP2P_DATA_EDK,SHORT_HAND_DATA,60, &search_edk},
-+//    {IPP2P_DATA_DC,SHORT_HAND_DATA,26, &search_dc},
-+    {IPP2P_DC,SHORT_HAND_IPP2P,5, search_all_dc},
-+//    {IPP2P_DATA_GNU,SHORT_HAND_DATA,40, &search_gnu},
-+    {IPP2P_GNU,SHORT_HAND_IPP2P,5, &search_all_gnu},
-+    {IPP2P_KAZAA,SHORT_HAND_IPP2P,5, &search_all_kazaa},
-+    {IPP2P_BIT,SHORT_HAND_IPP2P,20, &search_bittorrent},
-+    {IPP2P_APPLE,SHORT_HAND_IPP2P,5, &search_apple},
-+    {IPP2P_SOUL,SHORT_HAND_IPP2P,5, &search_soul},
-+    {IPP2P_WINMX,SHORT_HAND_IPP2P,2, &search_winmx},
-+    {IPP2P_ARES,SHORT_HAND_IPP2P,5, &search_ares},
-+    {IPP2P_MUTE,SHORT_HAND_NONE,200, &search_mute},
-+    {IPP2P_WASTE,SHORT_HAND_NONE,5, &search_waste},
-+    {IPP2P_XDCC,SHORT_HAND_NONE,5, &search_xdcc},
-+    {0,0,0,NULL}
-+};
-+
-+
-+static struct {
-+    int command;
-+    __u8 short_hand;                  /*for fucntions included in short hands*/
-+    int packet_len;
-+    int (*function_name) (unsigned char *, int);
-+} udp_list[] = {
-+    { IPP2P_KAZAA, SHORT_HAND_IPP2P, 14, &udp_search_kazaa},
-+    { IPP2P_BIT,   SHORT_HAND_IPP2P, 23, &udp_search_bit},
-+    { IPP2P_GNU,   SHORT_HAND_IPP2P, 11, &udp_search_gnu},
-+    { IPP2P_EDK,   SHORT_HAND_IPP2P,  9, &udp_search_edk},
-+    { IPP2P_DC,    SHORT_HAND_IPP2P, 12, &udp_search_directconnect},    
-+    { 0, 0, 0, NULL }
-+};
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,23)
-+static bool
-+#else
-+static int
-+#endif
-+match(const struct sk_buff *skb,
-+      const struct net_device *in,
-+      const struct net_device *out,
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,17)
-+      const struct xt_match *match,
-+#endif
-+      const void *matchinfo,
-+      int offset,
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+      const void *hdr,
-+      u_int16_t datalen,
-+#endif
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      unsigned int protoff,
-+#endif
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,23)
-+      bool *hotdrop)
-+#else
-+      bool *hotdrop)
-+#endif
-+{
-+    const struct ipt_p2p_info *info = matchinfo;
-+    unsigned char  *haystack;
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,22)
-+    struct iphdr *ip = ip_hdr(skb);
-+#else
-+    struct iphdr *ip = skb->nh.iph;
-+#endif
-+    int p2p_result = 0, i = 0;
-+//    int head_len;
-+    int hlen = ntohs(ip->tot_len)-(ip->ihl*4);        /*hlen = packet-data length*/
-+
-+    /*must not be a fragment*/
-+    if (offset) {
-+      if (info->debug) printk("IPP2P.match: offset found %i \n",offset);
-+      return 0;
-+    }
-+    
-+    /*make sure that skb is linear*/
-+    if(skb_is_nonlinear(skb)){
-+      if (info->debug) printk("IPP2P.match: nonlinear skb found\n");
-+      return 0;
-+    }
-+
-+
-+    haystack=(char *)ip+(ip->ihl*4);          /*haystack = packet data*/
-+
-+    switch (ip->protocol){
-+      case IPPROTO_TCP:               /*what to do with a TCP packet*/
-+      {
-+          struct tcphdr *tcph = (void *) ip + ip->ihl * 4;
-+          
-+          if (tcph->fin) return 0;  /*if FIN bit is set bail out*/
-+          if (tcph->syn) return 0;  /*if SYN bit is set bail out*/
-+          if (tcph->rst) return 0;  /*if RST bit is set bail out*/
-+          
-+          haystack += tcph->doff * 4; /*get TCP-Header-Size*/
-+          hlen -= tcph->doff * 4;
-+          while (matchlist[i].command) {
-+              if ((((info->cmd & matchlist[i].command) == matchlist[i].command) ||
-+                  ((info->cmd & matchlist[i].short_hand) == matchlist[i].short_hand)) &&
-+                  (hlen > matchlist[i].packet_len)) {
-+                          p2p_result = matchlist[i].function_name(haystack, hlen);
-+                          if (p2p_result) 
-+                          {
-+                              if (info->debug) printk("IPP2P.debug:TCP-match: %i from: %u.%u.%u.%u:%i to: %u.%u.%u.%u:%i Length: %i\n", 
-+                                  p2p_result, NIPQUAD(ip->saddr),ntohs(tcph->source), NIPQUAD(ip->daddr),ntohs(tcph->dest),hlen);
-+                              return p2p_result;
-+                          }
-+              }
-+          i++;
-+          }
-+          return p2p_result;
-+      }
-+      
-+      case IPPROTO_UDP:               /*what to do with an UDP packet*/
-+      {
-+          struct udphdr *udph = (void *) ip + ip->ihl * 4;
-+          
-+          while (udp_list[i].command){
-+              if ((((info->cmd & udp_list[i].command) == udp_list[i].command) ||
-+                  ((info->cmd & udp_list[i].short_hand) == udp_list[i].short_hand)) &&
-+                  (hlen > udp_list[i].packet_len)) {
-+                          p2p_result = udp_list[i].function_name(haystack, hlen);
-+                          if (p2p_result){
-+                              if (info->debug) printk("IPP2P.debug:UDP-match: %i from: %u.%u.%u.%u:%i to: %u.%u.%u.%u:%i Length: %i\n", 
-+                                  p2p_result, NIPQUAD(ip->saddr),ntohs(udph->source), NIPQUAD(ip->daddr),ntohs(udph->dest),hlen);
-+                              return p2p_result;
-+                          }
-+              }
-+          i++;
-+          }                   
-+          return p2p_result;
-+      }
-+    
-+      default: return 0;
-+    }
-+}
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,23)
-+static bool
-+#else
-+static int
-+#endif
-+checkentry(const char *tablename,
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+            const void *ip,
-+#else
-+            const struct ipt_ip *ip,
-+#endif
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,17)
-+            const struct xt_match *match,
-+#endif
-+          void *matchinfo,
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)
-+          unsigned int matchsize,
-+#endif
-+          unsigned int hook_mask)
-+{
-+        /* Must specify -p tcp */
-+/*    if (ip->proto != IPPROTO_TCP || (ip->invflags & IPT_INV_PROTO)) {
-+ *    printk("ipp2p: Only works on TCP packets, use -p tcp\n");
-+ *    return 0;
-+ *    }*/
-+    return 1;
-+}
-+                                                                          
-+
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,21)
-+static struct xt_match ipp2p_match = {
-+#else
-+static struct ipt_match ipp2p_match = { 
-+#endif
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+      { NULL, NULL }, 
-+      "ipp2p", 
-+      &ipp2p_match, 
-+      &ipp2p_checkentry, 
-+      NULL, 
-+      THIS_MODULE
-+#endif
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+      .name           = "ipp2p",
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,21)
-+      .family         = AF_INET,
-+#endif
-+      .match          = &match,
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,17)
-+      .matchsize      = sizeof(struct ipt_p2p_info),
-+#endif
-+      .checkentry     = &checkentry,
-+      .me             = THIS_MODULE,
-+#endif
-+};
-+
-+
-+static int __init init(void)
-+{
-+    printk(KERN_INFO "IPP2P v%s loading\n", IPP2P_VERSION);
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,21)
-+    return xt_register_match(&ipp2p_match);
-+#else
-+    return ipt_register_match(&ipp2p_match);
-+#endif
-+}
-+      
-+static void __exit fini(void)
-+{
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,21)
-+    xt_unregister_match(&ipp2p_match);
-+#else
-+    ipt_unregister_match(&ipp2p_match);
-+#endif
-+    printk(KERN_INFO "IPP2P v%s unloaded\n", IPP2P_VERSION);    
-+}
-+      
-+module_init(init);
-+module_exit(fini);
-+
-+
diff --git a/src/patches/linux-2.6.25-imq5.diff b/src/patches/linux-2.6.25-imq5.diff
deleted file mode 100755 (executable)
index 24d641f..0000000
+++ /dev/null
@@ -1,914 +0,0 @@
---- linux-2.6.25.7/drivers/net/imq.c   1970-01-01 02:00:00.000000000 +0200
-+++ linux-2.6.25.7.imq/drivers/net/imq.c       2008-06-17 15:03:01.000000000 +0300
-@@ -0,0 +1,474 @@
-+/*
-+ *             Pseudo-driver for the intermediate queue device.
-+ *
-+ *             This program is free software; you can redistribute it and/or
-+ *             modify it under the terms of the GNU General Public License
-+ *             as published by the Free Software Foundation; either version
-+ *             2 of the License, or (at your option) any later version.
-+ *
-+ * Authors:    Patrick McHardy, <kaber@trash.net>
-+ *
-+ *            The first version was written by Martin Devera, <devik@cdi.cz>
-+ *
-+ * Credits:    Jan Rafaj <imq2t@cedric.vabo.cz>
-+ *              - Update patch to 2.4.21
-+ *             Sebastian Strollo <sstrollo@nortelnetworks.com>
-+ *              - Fix "Dead-loop on netdevice imq"-issue
-+ *             Marcel Sebek <sebek64@post.cz>
-+ *              - Update to 2.6.2-rc1
-+ *
-+ *           After some time of inactivity there is a group taking care
-+ *           of IMQ again: http://www.linuximq.net
-+ *
-+ *
-+ *           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)
-+ *           
-+ *           Also, many thanks to pablo Sebastian Greco for making the initial
-+ *           patch and to those who helped the testing.
-+ *
-+ *             More info at: http://www.linuximq.net/ (Andre Correa)
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/kernel.h>
-+#include <linux/moduleparam.h>
-+#include <linux/skbuff.h>
-+#include <linux/netdevice.h>
-+#include <linux/rtnetlink.h>
-+#include <linux/if_arp.h>
-+#include <linux/netfilter.h>
-+#include <linux/netfilter_ipv4.h>
-+#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
-+      #include <linux/netfilter_ipv6.h>
-+#endif
-+#include <linux/imq.h>
-+#include <net/pkt_sched.h>
-+#include <net/netfilter/nf_queue.h>
-+
-+struct imq_private {
-+      struct tasklet_struct tasklet;
-+      int tasklet_pending;
-+};
-+
-+static nf_hookfn imq_nf_hook;
-+
-+static struct nf_hook_ops imq_ingress_ipv4 = {
-+      .hook           = imq_nf_hook,
-+      .owner          = THIS_MODULE,
-+      .pf             = PF_INET,
-+      .hooknum        = NF_INET_PRE_ROUTING,
-+#if defined(CONFIG_IMQ_BEHAVIOR_BA) || defined(CONFIG_IMQ_BEHAVIOR_BB)
-+      .priority       = NF_IP_PRI_MANGLE + 1
-+#else
-+      .priority       = NF_IP_PRI_NAT_DST + 1
-+#endif
-+};
-+
-+static struct nf_hook_ops imq_egress_ipv4 = {
-+      .hook           = imq_nf_hook,
-+      .owner          = THIS_MODULE,
-+      .pf             = PF_INET,
-+      .hooknum        = NF_INET_POST_ROUTING,
-+#if defined(CONFIG_IMQ_BEHAVIOR_AA) || defined(CONFIG_IMQ_BEHAVIOR_BA)
-+      .priority       = NF_IP_PRI_LAST
-+#else
-+      .priority       = NF_IP_PRI_NAT_SRC - 1
-+#endif
-+};
-+
-+#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
-+static struct nf_hook_ops imq_ingress_ipv6 = {
-+      .hook           = imq_nf_hook,
-+      .owner          = THIS_MODULE,
-+      .pf             = PF_INET6,
-+      .hooknum        = NF_INET_PRE_ROUTING,
-+#if defined(CONFIG_IMQ_BEHAVIOR_BA) || defined(CONFIG_IMQ_BEHAVIOR_BB)
-+      .priority       = NF_IP6_PRI_MANGLE + 1
-+#else
-+      .priority       = NF_IP6_PRI_NAT_DST + 1
-+#endif
-+};
-+
-+static struct nf_hook_ops imq_egress_ipv6 = {
-+      .hook           = imq_nf_hook,
-+      .owner          = THIS_MODULE,
-+      .pf             = PF_INET6,
-+      .hooknum        = NF_INET_POST_ROUTING,
-+#if defined(CONFIG_IMQ_BEHAVIOR_AA) || defined(CONFIG_IMQ_BEHAVIOR_BA)
-+      .priority       = NF_IP6_PRI_LAST
-+#else
-+      .priority       = NF_IP6_PRI_NAT_SRC - 1
-+#endif
-+};
-+#endif
-+
-+#if defined(CONFIG_IMQ_NUM_DEVS)
-+static unsigned int numdevs = CONFIG_IMQ_NUM_DEVS;
-+#else
-+static unsigned int numdevs = IMQ_MAX_DEVS;
-+#endif
-+
-+static struct net_device *imq_devs_cache[IMQ_MAX_DEVS];
-+
-+static struct net_device_stats *imq_get_stats(struct net_device *dev)
-+{
-+      return &dev->stats;
-+}
-+
-+/* called for packets kfree'd in qdiscs at places other than enqueue */
-+static void imq_skb_destructor(struct sk_buff *skb)
-+{
-+      struct nf_queue_entry *entry = skb->nf_queue_entry;
-+
-+      if (entry) {
-+              if (entry->indev)
-+                      dev_put(entry->indev);
-+              if (entry->outdev)
-+                      dev_put(entry->outdev);
-+              kfree(entry);
-+      }
-+}
-+
-+static int imq_dev_xmit(struct sk_buff *skb, struct net_device *dev)
-+{
-+      dev->stats.tx_bytes += skb->len;
-+      dev->stats.tx_packets++;
-+
-+      skb->imq_flags = 0;
-+      skb->destructor = NULL;
-+
-+      dev->trans_start = jiffies;
-+      nf_reinject(skb->nf_queue_entry, NF_ACCEPT);
-+      return 0;
-+}
-+
-+static int imq_nf_queue(struct nf_queue_entry *entry, unsigned queue_num)
-+{
-+      struct net_device *dev;
-+      struct imq_private *priv;
-+      struct sk_buff *skb2 = NULL;
-+      struct Qdisc *q;
-+      unsigned int index = entry->skb->imq_flags & IMQ_F_IFMASK;
-+      int ret = -1;
-+
-+      if (index > numdevs)
-+              return -1;
-+
-+      /* check for imq device by index from cache */
-+      dev = imq_devs_cache[index];
-+      if (!dev) {
-+              char buf[8];
-+
-+              /* get device by name and cache result */
-+              snprintf(buf, sizeof(buf), "imq%d", index);
-+              dev = dev_get_by_name(&init_net, buf);
-+              if (!dev) {
-+                      /* not found ?!*/
-+                      BUG();
-+                      return -1;
-+              }
-+
-+              imq_devs_cache[index] = dev;
-+      }
-+
-+      priv = netdev_priv(dev);
-+      if (!(dev->flags & IFF_UP)) {
-+              entry->skb->imq_flags = 0;
-+              nf_reinject(entry, NF_ACCEPT);
-+              return 0;
-+      }
-+      dev->last_rx = jiffies;
-+
-+      if (entry->skb->destructor) {
-+              skb2 = entry->skb;
-+              entry->skb = skb_clone(entry->skb, GFP_ATOMIC);
-+              if (!entry->skb)
-+                      return -1;
-+      }
-+      entry->skb->nf_queue_entry = entry;
-+
-+      dev->stats.rx_bytes += entry->skb->len;
-+      dev->stats.rx_packets++;
-+
-+      spin_lock_bh(&dev->queue_lock);
-+      q = dev->qdisc;
-+      if (q->enqueue) {
-+              q->enqueue(skb_get(entry->skb), q);
-+              if (skb_shared(entry->skb)) {
-+                      entry->skb->destructor = imq_skb_destructor;
-+                      kfree_skb(entry->skb);
-+                      ret = 0;
-+              }
-+      }
-+      if (!test_and_set_bit(1, &priv->tasklet_pending))
-+              tasklet_schedule(&priv->tasklet);
-+      spin_unlock_bh(&dev->queue_lock);
-+
-+      if (skb2)
-+              kfree_skb(ret ? entry->skb : skb2);
-+
-+      return ret;
-+}
-+
-+static struct nf_queue_handler nfqh = {
-+      .name  = "imq",
-+      .outfn = imq_nf_queue,
-+};
-+
-+static void qdisc_run_tasklet(unsigned long arg)
-+{
-+      struct net_device *dev = (struct net_device *)arg;
-+      struct imq_private *priv = netdev_priv(dev);
-+
-+      spin_lock(&dev->queue_lock);
-+      qdisc_run(dev);
-+      clear_bit(1, &priv->tasklet_pending);
-+      spin_unlock(&dev->queue_lock);
-+}
-+
-+static unsigned int imq_nf_hook(unsigned int hook, struct sk_buff *pskb,
-+                              const struct net_device *indev,
-+                              const struct net_device *outdev,
-+                              int (*okfn)(struct sk_buff *))
-+{
-+      if (pskb->imq_flags & IMQ_F_ENQUEUE)
-+              return NF_QUEUE;
-+
-+      return NF_ACCEPT;
-+}
-+
-+static int imq_close(struct net_device *dev)
-+{
-+      struct imq_private *priv = netdev_priv(dev);
-+
-+      tasklet_kill(&priv->tasklet);
-+      netif_stop_queue(dev);
-+
-+      return 0;
-+}
-+
-+static int imq_open(struct net_device *dev)
-+{
-+      struct imq_private *priv = netdev_priv(dev);
-+
-+      tasklet_init(&priv->tasklet, qdisc_run_tasklet, (unsigned long)dev);
-+      netif_start_queue(dev);
-+
-+      return 0;
-+}
-+
-+static void imq_setup(struct net_device *dev)
-+{
-+      dev->hard_start_xmit    = imq_dev_xmit;
-+      dev->open               = imq_open;
-+      dev->get_stats          = imq_get_stats;
-+      dev->stop               = imq_close;
-+      dev->type               = ARPHRD_VOID;
-+      dev->mtu                = 16000;
-+      dev->tx_queue_len       = 11000;
-+      dev->flags              = IFF_NOARP;
-+}
-+
-+static struct rtnl_link_ops imq_link_ops __read_mostly = {
-+      .kind           = "imq",
-+      .priv_size      = sizeof(struct imq_private),
-+      .setup          = imq_setup,
-+};
-+
-+static int __init imq_init_hooks(void)
-+{
-+      int err;
-+
-+      err = nf_register_queue_handler(PF_INET, &nfqh);
-+      if (err)
-+              goto err1;
-+
-+      err = nf_register_hook(&imq_ingress_ipv4);
-+      if (err)
-+              goto err2;
-+
-+      err = nf_register_hook(&imq_egress_ipv4);
-+      if (err)
-+              goto err3;
-+
-+#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
-+      err = nf_register_queue_handler(PF_INET6, &nfqh);
-+      if (err)
-+              goto err4;
-+
-+      err = nf_register_hook(&imq_ingress_ipv6);
-+      if (err)
-+              goto err5;
-+
-+      err = nf_register_hook(&imq_egress_ipv6);
-+      if (err)
-+              goto err6;
-+#endif
-+
-+      return 0;
-+
-+#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
-+err6:
-+      nf_unregister_hook(&imq_ingress_ipv6);
-+err5:
-+      nf_unregister_queue_handler(PF_INET6, &nfqh);
-+err4:
-+      nf_unregister_hook(&imq_egress_ipv4);
-+#endif
-+err3:
-+      nf_unregister_hook(&imq_ingress_ipv4);
-+err2:
-+      nf_unregister_queue_handler(PF_INET, &nfqh);
-+err1:
-+      return err;
-+}
-+
-+static int __init imq_init_one(int index)
-+{
-+      struct net_device *dev;
-+      int ret;
-+
-+      dev = alloc_netdev(sizeof(struct imq_private), "imq%d", imq_setup);
-+      if (!dev)
-+              return -ENOMEM;
-+
-+      ret = dev_alloc_name(dev, dev->name);
-+      if (ret < 0)
-+              goto fail;
-+
-+      dev->rtnl_link_ops = &imq_link_ops;
-+      ret = register_netdevice(dev);
-+      if (ret < 0)
-+              goto fail;
-+
-+      return 0;
-+fail:
-+      free_netdev(dev);
-+      return ret;
-+}
-+
-+static int __init imq_init_devs(void)
-+{
-+      int err, i;
-+
-+      if (!numdevs || numdevs > IMQ_MAX_DEVS) {
-+              printk(KERN_ERR "IMQ: numdevs has to be betweed 1 and %u\n",
-+                     IMQ_MAX_DEVS);
-+              return -EINVAL;
-+      }
-+
-+      rtnl_lock();
-+      err = __rtnl_link_register(&imq_link_ops);
-+
-+      for (i = 0; i < numdevs && !err; i++)
-+              err = imq_init_one(i);
-+
-+      if (err) {
-+              __rtnl_link_unregister(&imq_link_ops);
-+              memset(imq_devs_cache, 0, sizeof(imq_devs_cache));
-+      }
-+      rtnl_unlock();
-+
-+      return err;
-+}
-+
-+static int __init imq_init_module(void)
-+{
-+      int err;
-+
-+      err = imq_init_devs();
-+      if (err) {
-+              printk(KERN_ERR "IMQ: Error trying imq_init_devs(net)\n");
-+              return err;
-+      }
-+
-+      err = imq_init_hooks();
-+      if (err) {
-+              printk(KERN_ERR "IMQ: Error trying imq_init_hooks()\n");
-+              rtnl_link_unregister(&imq_link_ops);
-+              memset(imq_devs_cache, 0, sizeof(imq_devs_cache));
-+              return err;
-+      }
-+
-+      printk(KERN_INFO "IMQ driver loaded successfully.\n");
-+
-+#if defined(CONFIG_IMQ_BEHAVIOR_BA) || defined(CONFIG_IMQ_BEHAVIOR_BB)
-+      printk(KERN_INFO "\tHooking IMQ before NAT on PREROUTING.\n");
-+#else
-+      printk(KERN_INFO "\tHooking IMQ after NAT on PREROUTING.\n");
-+#endif
-+#if defined(CONFIG_IMQ_BEHAVIOR_AB) || defined(CONFIG_IMQ_BEHAVIOR_BB)
-+      printk(KERN_INFO "\tHooking IMQ before NAT on POSTROUTING.\n");
-+#else
-+      printk(KERN_INFO "\tHooking IMQ after NAT on POSTROUTING.\n");
-+#endif
-+
-+      return 0;
-+}
-+
-+static void __exit imq_unhook(void)
-+{
-+#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
-+      nf_unregister_hook(&imq_ingress_ipv6);
-+      nf_unregister_hook(&imq_egress_ipv6);
-+      nf_unregister_queue_handler(PF_INET6, &nfqh);
-+#endif
-+      nf_unregister_hook(&imq_ingress_ipv4);
-+      nf_unregister_hook(&imq_egress_ipv4);
-+      nf_unregister_queue_handler(PF_INET, &nfqh);
-+}
-+
-+static void __exit imq_cleanup_devs(void)
-+{
-+      rtnl_link_unregister(&imq_link_ops);
-+      memset(imq_devs_cache, 0, sizeof(imq_devs_cache));
-+}
-+
-+static void __exit imq_exit_module(void)
-+{
-+      imq_unhook();
-+      imq_cleanup_devs();
-+      printk(KERN_INFO "IMQ driver unloaded successfully.\n");
-+}
-+
-+module_init(imq_init_module);
-+module_exit(imq_exit_module);
-+
-+module_param(numdevs, int, 0);
-+MODULE_PARM_DESC(numdevs, "number of IMQ devices (how many imq* devices will "
-+                      "be created)");
-+MODULE_AUTHOR("http://www.linuximq.net");
-+MODULE_DESCRIPTION("Pseudo-driver for the intermediate queue device. See "
-+                      "http://www.linuximq.net/ for more information.");
-+MODULE_LICENSE("GPL");
-+MODULE_ALIAS_RTNL_LINK("imq");
-+
---- linux-2.6.25.7/drivers/net/Kconfig 2008-06-16 23:24:36.000000000 +0300
-+++ linux-2.6.25.7.imq/drivers/net/Kconfig     2008-06-17 15:03:21.000000000 +0300
-@@ -117,6 +117,129 @@
-         To compile this driver as a module, choose M here: the module
-         will be called eql.  If unsure, say N.
-+config IMQ
-+      tristate "IMQ (intermediate queueing device) support"
-+      depends on NETDEVICES && NETFILTER
-+      ---help---
-+        The IMQ device(s) is used as placeholder for QoS queueing
-+        disciplines. Every packet entering/leaving the IP stack can be
-+        directed through the IMQ device where it's enqueued/dequeued to the
-+        attached qdisc. This allows you to treat network devices as classes
-+        and distribute bandwidth among them. Iptables is used to specify
-+        through which IMQ device, if any, packets travel.
-+
-+        More information at: http://www.linuximq.net/
-+
-+        To compile this driver as a module, choose M here: the module
-+        will be called imq.  If unsure, say N.
-+
-+choice
-+      prompt "IMQ behavior (PRE/POSTROUTING)"
-+      depends on IMQ
-+      default IMQ_BEHAVIOR_AB
-+      help
-+
-+              This settings defines how IMQ behaves in respect to its
-+              hooking in PREROUTING and POSTROUTING.
-+
-+              IMQ can work in any of the following ways:
-+
-+                  PREROUTING   |      POSTROUTING
-+              -----------------|-------------------
-+              #1  After NAT    |      After NAT
-+              #2  After NAT    |      Before NAT
-+              #3  Before NAT   |      After NAT
-+              #4  Before NAT   |      Before NAT
-+
-+              The default behavior is to hook before NAT on PREROUTING
-+              and after NAT on POSTROUTING (#3).
-+
-+              This settings are specially usefull when trying to use IMQ
-+              to shape NATed clients.
-+
-+              More information can be found at: www.linuximq.net
-+
-+              If not sure leave the default settings alone.
-+
-+config IMQ_BEHAVIOR_AA
-+      bool "IMQ AA"
-+      help
-+              This settings defines how IMQ behaves in respect to its
-+              hooking in PREROUTING and POSTROUTING.
-+
-+              Choosing this option will make IMQ hook like this:
-+
-+              PREROUTING:   After NAT
-+              POSTROUTING:  After NAT
-+
-+              More information can be found at: www.linuximq.net
-+
-+              If not sure leave the default settings alone.
-+
-+config IMQ_BEHAVIOR_AB
-+      bool "IMQ AB"
-+      help
-+              This settings defines how IMQ behaves in respect to its
-+              hooking in PREROUTING and POSTROUTING.
-+
-+              Choosing this option will make IMQ hook like this:
-+
-+              PREROUTING:   After NAT
-+              POSTROUTING:  Before NAT
-+
-+              More information can be found at: www.linuximq.net
-+
-+              If not sure leave the default settings alone.
-+
-+config IMQ_BEHAVIOR_BA
-+      bool "IMQ BA"
-+      help
-+              This settings defines how IMQ behaves in respect to its
-+              hooking in PREROUTING and POSTROUTING.
-+
-+              Choosing this option will make IMQ hook like this:
-+
-+              PREROUTING:   Before NAT
-+              POSTROUTING:  After NAT
-+
-+              More information can be found at: www.linuximq.net
-+
-+              If not sure leave the default settings alone.
-+
-+config IMQ_BEHAVIOR_BB
-+      bool "IMQ BB"
-+      help
-+              This settings defines how IMQ behaves in respect to its
-+              hooking in PREROUTING and POSTROUTING.
-+
-+              Choosing this option will make IMQ hook like this:
-+
-+              PREROUTING:   Before NAT
-+              POSTROUTING:  Before NAT
-+
-+              More information can be found at: www.linuximq.net
-+
-+              If not sure leave the default settings alone.
-+
-+endchoice
-+
-+config IMQ_NUM_DEVS
-+
-+      int "Number of IMQ devices"
-+      range 2 16
-+      depends on IMQ
-+      default "16"
-+      help
-+
-+              This settings defines how many IMQ devices will be
-+              created.
-+
-+              The default value is 16.
-+
-+              More information can be found at: www.linuximq.net
-+
-+              If not sure leave the default settings alone.
-+
- config TUN
-       tristate "Universal TUN/TAP device driver support"
-       select CRC32
---- linux-2.6.25.7/drivers/net/Makefile        2008-06-16 23:24:36.000000000 +0300
-+++ linux-2.6.25.7.imq/drivers/net/Makefile    2008-06-17 14:56:58.000000000 +0300
-@@ -143,6 +143,7 @@
- obj-$(CONFIG_XEN_NETDEV_FRONTEND) += xen-netfront.o
- obj-$(CONFIG_DUMMY) += dummy.o
-+obj-$(CONFIG_IMQ) += imq.o
- obj-$(CONFIG_IFB) += ifb.o
- obj-$(CONFIG_MACVLAN) += macvlan.o
- obj-$(CONFIG_DE600) += de600.o
---- linux-2.6.25.7/include/linux/imq.h 1970-01-01 02:00:00.000000000 +0200
-+++ linux-2.6.25.7.imq/include/linux/imq.h     2008-06-17 14:56:58.000000000 +0300
-@@ -0,0 +1,9 @@
-+#ifndef _IMQ_H
-+#define _IMQ_H
-+
-+#define IMQ_MAX_DEVS   16
-+
-+#define IMQ_F_IFMASK   0x7f
-+#define IMQ_F_ENQUEUE  0x80
-+
-+#endif /* _IMQ_H */
---- linux-2.6.25.7/include/linux/netfilter_ipv4/ipt_IMQ.h      1970-01-01 02:00:00.000000000 +0200
-+++ linux-2.6.25.7.imq/include/linux/netfilter_ipv4/ipt_IMQ.h  2008-06-17 14:56:58.000000000 +0300
-@@ -0,0 +1,8 @@
-+#ifndef _IPT_IMQ_H
-+#define _IPT_IMQ_H
-+
-+struct ipt_imq_info {
-+      unsigned int todev;     /* target imq device */
-+};
-+
-+#endif /* _IPT_IMQ_H */
---- linux-2.6.25.7/include/linux/netfilter_ipv6/ip6t_IMQ.h     1970-01-01 02:00:00.000000000 +0200
-+++ linux-2.6.25.7.imq/include/linux/netfilter_ipv6/ip6t_IMQ.h 2008-06-17 14:56:58.000000000 +0300
-@@ -0,0 +1,8 @@
-+#ifndef _IP6T_IMQ_H
-+#define _IP6T_IMQ_H
-+
-+struct ip6t_imq_info {
-+      unsigned int todev;     /* target imq device */
-+};
-+
-+#endif /* _IP6T_IMQ_H */
---- linux-2.6.25.7/include/linux/skbuff.h      2008-06-16 23:24:36.000000000 +0300
-+++ linux-2.6.25.7.imq/include/linux/skbuff.h  2008-06-17 14:56:58.000000000 +0300
-@@ -296,6 +296,10 @@
-       struct nf_conntrack     *nfct;
-       struct sk_buff          *nfct_reasm;
- #endif
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+      unsigned char                   imq_flags;
-+      struct nf_queue_entry   *nf_queue_entry;
-+#endif
- #ifdef CONFIG_BRIDGE_NETFILTER
-       struct nf_bridge_info   *nf_bridge;
- #endif
-@@ -1736,6 +1740,10 @@
-       dst->nfct_reasm = src->nfct_reasm;
-       nf_conntrack_get_reasm(src->nfct_reasm);
- #endif
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+      dst->imq_flags = src->imq_flags;
-+      dst->nf_queue_entry = src->nf_queue_entry;
-+#endif
- #ifdef CONFIG_BRIDGE_NETFILTER
-       dst->nf_bridge  = src->nf_bridge;
-       nf_bridge_get(src->nf_bridge);
---- linux-2.6.25.7/net/core/dev.c      2008-06-16 23:24:36.000000000 +0300
-+++ linux-2.6.25.7.imq/net/core/dev.c  2008-06-17 14:56:58.000000000 +0300
-@@ -95,6 +95,9 @@
- #include <net/net_namespace.h>
- #include <net/sock.h>
- #include <linux/rtnetlink.h>
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+#include <linux/imq.h>
-+#endif
- #include <linux/proc_fs.h>
- #include <linux/seq_file.h>
- #include <linux/stat.h>
-@@ -1537,7 +1540,11 @@
- int dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
- {
-       if (likely(!skb->next)) {
--              if (!list_empty(&ptype_all))
-+              if (!list_empty(&ptype_all)
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+                  && !(skb->imq_flags & IMQ_F_ENQUEUE)
-+#endif
-+                  )
-                       dev_queue_xmit_nit(skb, dev);
-               if (netif_needs_gso(dev, skb)) {
---- linux-2.6.25.7/net/ipv4/netfilter/ipt_IMQ.c        1970-01-01 02:00:00.000000000 +0200
-+++ linux-2.6.25.7.imq/net/ipv4/netfilter/ipt_IMQ.c    2008-06-17 14:56:58.000000000 +0300
-@@ -0,0 +1,69 @@
-+/*
-+ * This target marks packets to be enqueued to an imq device
-+ */
-+#include <linux/module.h>
-+#include <linux/skbuff.h>
-+#include <linux/netfilter_ipv4/ip_tables.h>
-+#include <linux/netfilter_ipv4/ipt_IMQ.h>
-+#include <linux/imq.h>
-+
-+static unsigned int imq_target(struct sk_buff *pskb,
-+                             const struct net_device *in,
-+                             const struct net_device *out,
-+                             unsigned int hooknum,
-+                             const struct xt_target *target,
-+                             const void *targinfo)
-+{
-+      struct ipt_imq_info *mr = (struct ipt_imq_info *)targinfo;
-+
-+      pskb->imq_flags = mr->todev | IMQ_F_ENQUEUE;
-+
-+      return XT_CONTINUE;
-+}
-+
-+static bool imq_checkentry(const char *tablename,
-+                        const void *e,
-+                        const struct xt_target *target,
-+                        void *targinfo,
-+                        unsigned int hook_mask)
-+{
-+      struct ipt_imq_info *mr;
-+
-+      mr = (struct ipt_imq_info *)targinfo;
-+
-+      if (mr->todev > IMQ_MAX_DEVS) {
-+              printk(KERN_WARNING
-+                     "IMQ: invalid device specified, highest is %u\n",
-+                     IMQ_MAX_DEVS);
-+              return 0;
-+      }
-+
-+      return 1;
-+}
-+
-+static struct xt_target ipt_imq_reg = {
-+      .name           = "IMQ",
-+      .family         = AF_INET,
-+      .target         = imq_target,
-+      .targetsize     = sizeof(struct ipt_imq_info),
-+      .checkentry     = imq_checkentry,
-+      .me             = THIS_MODULE,
-+      .table          = "mangle"
-+};
-+
-+static int __init init(void)
-+{
-+      return xt_register_target(&ipt_imq_reg);
-+}
-+
-+static void __exit fini(void)
-+{
-+      xt_unregister_target(&ipt_imq_reg);
-+}
-+
-+module_init(init);
-+module_exit(fini);
-+
-+MODULE_AUTHOR("http://www.linuximq.net");
-+MODULE_DESCRIPTION("Pseudo-driver for the intermediate queue device. See http://www.linuximq.net/ for more information.");
-+MODULE_LICENSE("GPL");
---- linux-2.6.25.7/net/ipv4/netfilter/Kconfig  2008-06-16 23:24:36.000000000 +0300
-+++ linux-2.6.25.7.imq/net/ipv4/netfilter/Kconfig      2008-06-17 14:56:58.000000000 +0300
-@@ -123,6 +123,17 @@
-         To compile it as a module, choose M here.  If unsure, say N.
-+config IP_NF_TARGET_IMQ
-+       tristate "IMQ target support"
-+       depends on IP_NF_MANGLE
-+       help
-+         This option adds a `IMQ' target which is used to specify if and
-+         to which IMQ device packets should get enqueued/dequeued.
-+
-+       For more information visit: http://www.linuximq.net/
-+
-+         To compile it as a module, choose M here.  If unsure, say N.
-+
- config IP_NF_TARGET_REJECT
-       tristate "REJECT target support"
-       depends on IP_NF_FILTER
---- linux-2.6.25.7/net/ipv4/netfilter/Makefile 2008-06-16 23:24:36.000000000 +0300
-+++ linux-2.6.25.7.imq/net/ipv4/netfilter/Makefile     2008-06-17 14:56:58.000000000 +0300
-@@ -51,6 +51,7 @@
- obj-$(CONFIG_IP_NF_TARGET_CLUSTERIP) += ipt_CLUSTERIP.o
- obj-$(CONFIG_IP_NF_TARGET_ECN) += ipt_ECN.o
- obj-$(CONFIG_IP_NF_TARGET_LOG) += ipt_LOG.o
-+obj-$(CONFIG_IP_NF_TARGET_IMQ) += ipt_IMQ.o
- obj-$(CONFIG_IP_NF_TARGET_MASQUERADE) += ipt_MASQUERADE.o
- obj-$(CONFIG_IP_NF_TARGET_NETMAP) += ipt_NETMAP.o
- obj-$(CONFIG_IP_NF_TARGET_REDIRECT) += ipt_REDIRECT.o
---- linux-2.6.25.7/net/ipv6/netfilter/ip6t_IMQ.c       1970-01-01 02:00:00.000000000 +0200
-+++ linux-2.6.25.7.imq/net/ipv6/netfilter/ip6t_IMQ.c   2008-06-17 14:56:58.000000000 +0300
-@@ -0,0 +1,69 @@
-+/*
-+ * This target marks packets to be enqueued to an imq device
-+ */
-+#include <linux/module.h>
-+#include <linux/skbuff.h>
-+#include <linux/netfilter_ipv6/ip6_tables.h>
-+#include <linux/netfilter_ipv6/ip6t_IMQ.h>
-+#include <linux/imq.h>
-+
-+static unsigned int imq_target(struct sk_buff *pskb,
-+                             const struct net_device *in,
-+                             const struct net_device *out,
-+                             unsigned int hooknum,
-+                             const struct xt_target *target,
-+                             const void *targinfo)
-+{
-+      struct ip6t_imq_info *mr = (struct ip6t_imq_info *)targinfo;
-+
-+      pskb->imq_flags = mr->todev | IMQ_F_ENQUEUE;
-+
-+      return XT_CONTINUE;
-+}
-+
-+static bool imq_checkentry(const char *tablename,
-+                        const void *entry,
-+                        const struct xt_target *target,
-+                        void *targinfo,
-+                        unsigned int hook_mask)
-+{
-+      struct ip6t_imq_info *mr;
-+
-+      mr = (struct ip6t_imq_info *)targinfo;
-+
-+      if (mr->todev > IMQ_MAX_DEVS) {
-+              printk(KERN_WARNING
-+                     "IMQ: invalid device specified, highest is %u\n",
-+                     IMQ_MAX_DEVS);
-+              return 0;
-+      }
-+
-+      return 1;
-+}
-+
-+static struct xt_target ip6t_imq_reg = {
-+      .name           = "IMQ",
-+      .family         = AF_INET6,
-+      .target         = imq_target,
-+      .targetsize     = sizeof(struct ip6t_imq_info),
-+      .table          = "mangle",
-+      .checkentry     = imq_checkentry,
-+      .me             = THIS_MODULE
-+};
-+
-+static int __init init(void)
-+{
-+      return xt_register_target(&ip6t_imq_reg);
-+}
-+
-+static void __exit fini(void)
-+{
-+      xt_unregister_target(&ip6t_imq_reg);
-+}
-+
-+module_init(init);
-+module_exit(fini);
-+
-+MODULE_AUTHOR("http://www.linuximq.net");
-+MODULE_DESCRIPTION("Pseudo-driver for the intermediate queue device. See http://www.linuximq.net/ for more information.");
-+MODULE_LICENSE("GPL");
---- linux-2.6.25.7/net/ipv6/netfilter/Kconfig  2008-06-16 23:24:36.000000000 +0300
-+++ linux-2.6.25.7.imq/net/ipv6/netfilter/Kconfig      2008-06-17 14:56:58.000000000 +0300
-@@ -179,6 +179,15 @@
-         To compile it as a module, choose M here.  If unsure, say N.
-+config IP6_NF_TARGET_IMQ
-+      tristate "IMQ target support"
-+      depends on IP6_NF_MANGLE
-+      help
-+          This option adds a `IMQ' target which is used to specify if and
-+          to which imq device packets should get enqueued/dequeued.
-+
-+          To compile it as a module, choose M here.  If unsure, say N.
-+
- config IP6_NF_TARGET_HL
-       tristate  'HL (hoplimit) target support'
-       depends on IP6_NF_MANGLE
---- linux-2.6.25.7/net/ipv6/netfilter/Makefile 2008-06-16 23:24:36.000000000 +0300
-+++ linux-2.6.25.7.imq/net/ipv6/netfilter/Makefile     2008-06-17 14:56:58.000000000 +0300
-@@ -6,6 +6,7 @@
- obj-$(CONFIG_IP6_NF_IPTABLES) += ip6_tables.o
- obj-$(CONFIG_IP6_NF_FILTER) += ip6table_filter.o
- obj-$(CONFIG_IP6_NF_MANGLE) += ip6table_mangle.o
-+obj-$(CONFIG_IP6_NF_TARGET_IMQ) += ip6t_IMQ.o
- obj-$(CONFIG_IP6_NF_QUEUE) += ip6_queue.o
- obj-$(CONFIG_IP6_NF_RAW) += ip6table_raw.o
---- linux-2.6.25.7/net/sched/sch_generic.c     2008-06-16 23:24:36.000000000 +0300
-+++ linux-2.6.25.7.imq/net/sched/sch_generic.c 2008-06-17 14:56:58.000000000 +0300
-@@ -203,6 +203,7 @@
-       clear_bit(__LINK_STATE_QDISC_RUNNING, &dev->state);
- }
-+EXPORT_SYMBOL(__qdisc_run);
- static void dev_watchdog(unsigned long arg)
- {
diff --git a/src/patches/linux-2.6.25.17-ipp2p-0.8.2-pomng.patch b/src/patches/linux-2.6.25.17-ipp2p-0.8.2-pomng.patch
deleted file mode 100644 (file)
index 0410086..0000000
+++ /dev/null
@@ -1,980 +0,0 @@
-diff -Naur linux-2.6.25.17.org/include/linux/netfilter_ipv4/ipt_ipp2p.h linux-2.6.25.17/include/linux/netfilter_ipv4/ipt_ipp2p.h
---- linux-2.6.25.17.org/include/linux/netfilter_ipv4/ipt_ipp2p.h       1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.25.17/include/linux/netfilter_ipv4/ipt_ipp2p.h   2008-09-29 15:19:39.000000000 +0000
-@@ -0,0 +1,31 @@
-+#ifndef __IPT_IPP2P_H
-+#define __IPT_IPP2P_H
-+#define IPP2P_VERSION "0.8.2-pomng"
-+
-+struct ipt_p2p_info {
-+    int cmd;
-+    int debug;
-+};
-+
-+#endif //__IPT_IPP2P_H
-+
-+#define SHORT_HAND_IPP2P      1 /* --ipp2p switch*/
-+//#define SHORT_HAND_DATA             4 /* --ipp2p-data switch*/
-+#define SHORT_HAND_NONE               5 /* no short hand*/
-+
-+#define IPP2P_EDK             (1 << 1)
-+#define IPP2P_DATA_KAZAA      (1 << 2)
-+#define IPP2P_DATA_EDK                (1 << 3)
-+#define IPP2P_DATA_DC         (1 << 4)
-+#define IPP2P_DC              (1 << 5)
-+#define IPP2P_DATA_GNU                (1 << 6)
-+#define IPP2P_GNU             (1 << 7)
-+#define IPP2P_KAZAA           (1 << 8)
-+#define IPP2P_BIT             (1 << 9)
-+#define IPP2P_APPLE           (1 << 10)
-+#define IPP2P_SOUL            (1 << 11)
-+#define IPP2P_WINMX           (1 << 12)
-+#define IPP2P_ARES            (1 << 13)
-+#define IPP2P_MUTE            (1 << 14)
-+#define IPP2P_WASTE           (1 << 15)
-+#define IPP2P_XDCC            (1 << 16)
-diff -Naur linux-2.6.25.17.org/net/ipv4/netfilter/Kconfig linux-2.6.25.17/net/ipv4/netfilter/Kconfig
---- linux-2.6.25.17.org/net/ipv4/netfilter/Kconfig     2008-09-08 10:20:51.000000000 +0000
-+++ linux-2.6.25.17/net/ipv4/netfilter/Kconfig 2008-09-29 15:19:39.000000000 +0000
-@@ -379,5 +379,15 @@
-         Allows altering the ARP packet payload: source and destination
-         hardware and network addresses.
-+config IP_NF_MATCH_IPP2P
-+      tristate  'IPP2P match support'
-+      depends on IP_NF_IPTABLES
-+      help
-+        This option makes possible to match some P2P packets
-+        therefore helps controlling such traffic.
-+      
-+        If you want to compile it as a module, say M here and read
-+        <file:Documentation/modules.txt>.  If unsure, say `N'.
-+
- endmenu
-diff -Naur linux-2.6.25.17.org/net/ipv4/netfilter/Makefile linux-2.6.25.17/net/ipv4/netfilter/Makefile
---- linux-2.6.25.17.org/net/ipv4/netfilter/Makefile    2008-09-08 10:20:51.000000000 +0000
-+++ linux-2.6.25.17/net/ipv4/netfilter/Makefile        2008-09-29 15:19:39.000000000 +0000
-@@ -45,6 +45,7 @@
- obj-$(CONFIG_IP_NF_MATCH_AH) += ipt_ah.o
- obj-$(CONFIG_IP_NF_MATCH_ECN) += ipt_ecn.o
- obj-$(CONFIG_IP_NF_MATCH_RECENT) += ipt_recent.o
-+obj-$(CONFIG_IP_NF_MATCH_IPP2P) += ipt_ipp2p.o
- obj-$(CONFIG_IP_NF_MATCH_TTL) += ipt_ttl.o
- # targets
-diff -Naur linux-2.6.25.17.org/net/ipv4/netfilter/ipt_ipp2p.c linux-2.6.25.17/net/ipv4/netfilter/ipt_ipp2p.c
---- linux-2.6.25.17.org/net/ipv4/netfilter/ipt_ipp2p.c 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.25.17/net/ipv4/netfilter/ipt_ipp2p.c     2008-09-29 15:19:39.000000000 +0000
-@@ -0,0 +1,911 @@
-+#if defined(MODVERSIONS)
-+#include <linux/modversions.h>
-+#endif
-+#include <linux/module.h>
-+#include <linux/version.h>
-+#include <linux/netfilter_ipv4/ip_tables.h>
-+#include <linux/netfilter_ipv4/ipt_ipp2p.h>
-+#include <net/tcp.h>
-+#include <net/udp.h>
-+
-+#define get_u8(X,O)  (*(__u8 *)(X + O))
-+#define get_u16(X,O)  (*(__u16 *)(X + O))
-+#define get_u32(X,O)  (*(__u32 *)(X + O))
-+
-+MODULE_AUTHOR("Eicke Friedrich/Klaus Degner <ipp2p@ipp2p.org>");
-+MODULE_DESCRIPTION("An extension to iptables to identify P2P traffic.");
-+MODULE_LICENSE("GPL");
-+
-+
-+/*Search for UDP eDonkey/eMule/Kad commands*/
-+int
-+udp_search_edk (unsigned char *haystack, int packet_len)
-+{
-+    unsigned char *t = haystack;
-+    t += 8;
-+
-+      switch (t[0]) {
-+              case 0xe3: 
-+              {       /*edonkey*/
-+                      switch (t[1]) 
-+                      {
-+                              /* client -> server status request */
-+                              case 0x96: 
-+                                      if (packet_len == 14) return ((IPP2P_EDK * 100) + 50);
-+                                      break;
-+                              /* server -> client status request */
-+                              case 0x97: if (packet_len == 42) return ((IPP2P_EDK * 100) + 51);
-+                                      break;
-+                                              /* server description request */
-+                                              /* e3 2a ff f0 .. | size == 6 */
-+                              case 0xa2: if ( (packet_len == 14) && ( get_u16(t,2) == __constant_htons(0xfff0) ) ) return ((IPP2P_EDK * 100) + 52);
-+                                      break;
-+                                              /* server description response */
-+                                              /* e3 a3 ff f0 ..  | size > 40 && size < 200 */
-+                              //case 0xa3: return ((IPP2P_EDK * 100) + 53);
-+                              //      break;
-+                              case 0x9a: if (packet_len==26) return ((IPP2P_EDK * 100) + 54);
-+                                      break;
-+
-+                              case 0x92: if (packet_len==18) return ((IPP2P_EDK * 100) + 55);
-+                                      break;
-+                      }
-+                      break;
-+              }
-+              case 0xe4: 
-+              {
-+                      switch (t[1]) 
-+                      {
-+                                              /* e4 20 .. | size == 43 */
-+                              case 0x20: if ((packet_len == 43) && (t[2] != 0x00) && (t[34] != 0x00)) return ((IPP2P_EDK * 100) + 60);
-+                                      break;
-+                                              /* e4 00 .. 00 | size == 35 ? */
-+                              case 0x00: if ((packet_len == 35) && (t[26] == 0x00)) return ((IPP2P_EDK * 100) + 61);
-+                                      break;
-+                                              /* e4 10 .. 00 | size == 35 ? */
-+                              case 0x10: if ((packet_len == 35) && (t[26] == 0x00)) return ((IPP2P_EDK * 100) + 62);
-+                                      break;
-+                                              /* e4 18 .. 00 | size == 35 ? */
-+                              case 0x18: if ((packet_len == 35) && (t[26] == 0x00)) return ((IPP2P_EDK * 100) + 63);
-+                                      break;
-+                                              /* e4 52 .. | size = 44 */
-+                              case 0x52: if (packet_len == 44 ) return ((IPP2P_EDK * 100) + 64);
-+                                      break;
-+                                              /* e4 58 .. | size == 6 */
-+                              case 0x58: if (packet_len == 14 ) return ((IPP2P_EDK * 100) + 65);
-+                                      break;
-+                                              /* e4 59 .. | size == 2 */
-+                              case 0x59: if (packet_len == 10 )return ((IPP2P_EDK * 100) + 66);
-+                                      break;
-+                                      /* e4 28 .. | packet_len == 52,77,102,127... */
-+                              case 0x28: if (((packet_len-52) % 25) == 0) return ((IPP2P_EDK * 100) + 67);
-+                                      break;
-+                                      /* e4 50 xx xx | size == 4 */
-+                              case 0x50: if (packet_len == 12) return ((IPP2P_EDK * 100) + 68);
-+                                      break;
-+                                      /* e4 40 xx xx | size == 48 */
-+                              case 0x40: if (packet_len == 56) return ((IPP2P_EDK * 100) + 69);
-+                                      break;
-+                      }
-+                      break;
-+              }
-+      } /* end of switch (t[0]) */
-+    return 0;
-+}/*udp_search_edk*/
-+
-+
-+/*Search for UDP Gnutella commands*/
-+int
-+udp_search_gnu (unsigned char *haystack, int packet_len)
-+{
-+    unsigned char *t = haystack;
-+    t += 8;
-+    
-+    if (memcmp(t, "GND", 3) == 0) return ((IPP2P_GNU * 100) + 51);
-+    if (memcmp(t, "GNUTELLA ", 9) == 0) return ((IPP2P_GNU * 100) + 52);
-+    return 0;
-+}/*udp_search_gnu*/
-+
-+
-+/*Search for UDP KaZaA commands*/
-+int
-+udp_search_kazaa (unsigned char *haystack, int packet_len)
-+{
-+    unsigned char *t = haystack;
-+    
-+    if (t[packet_len-1] == 0x00){
-+      t += (packet_len - 6);
-+      if (memcmp(t, "KaZaA", 5) == 0) return (IPP2P_KAZAA * 100 +50);
-+    }
-+    
-+    return 0;
-+}/*udp_search_kazaa*/
-+
-+/*Search for UDP DirectConnect commands*/
-+int
-+udp_search_directconnect (unsigned char *haystack, int packet_len)
-+{
-+    unsigned char *t = haystack;
-+    if ((*(t + 8) == 0x24) && (*(t + packet_len - 1) == 0x7c)) {
-+      t+=8;
-+      if (memcmp(t, "SR ", 3) == 0)                   return ((IPP2P_DC * 100) + 60);
-+      if (memcmp(t, "Ping ", 5) == 0)                 return ((IPP2P_DC * 100) + 61);
-+    }
-+    return 0;
-+}/*udp_search_directconnect*/
-+
-+
-+
-+/*Search for UDP BitTorrent commands*/
-+int
-+udp_search_bit (unsigned char *haystack, int packet_len)
-+{
-+      switch(packet_len)
-+      {
-+              case 24:
-+                      /* ^ 00 00 04 17 27 10 19 80 */
-+                      if ((ntohl(get_u32(haystack, 8)) == 0x00000417) && (ntohl(get_u32(haystack, 12)) == 0x27101980)) 
-+                              return (IPP2P_BIT * 100 + 50);
-+                      break;
-+              case 44:
-+                      if (get_u32(haystack, 16) == __constant_htonl(0x00000400) && get_u32(haystack, 36) == __constant_htonl(0x00000104)) 
-+                              return (IPP2P_BIT * 100 + 51);
-+                      if (get_u32(haystack, 16) == __constant_htonl(0x00000400))
-+                              return (IPP2P_BIT * 100 + 61);
-+                      break;
-+              case 65:
-+                      if (get_u32(haystack, 16) == __constant_htonl(0x00000404) && get_u32(haystack, 36) == __constant_htonl(0x00000104)) 
-+                              return (IPP2P_BIT * 100 + 52);
-+                      if (get_u32(haystack, 16) == __constant_htonl(0x00000404))
-+                              return (IPP2P_BIT * 100 + 62);
-+                      break;
-+              case 67:
-+                      if (get_u32(haystack, 16) == __constant_htonl(0x00000406) && get_u32(haystack, 36) == __constant_htonl(0x00000104)) 
-+                              return (IPP2P_BIT * 100 + 53);
-+                      if (get_u32(haystack, 16) == __constant_htonl(0x00000406))
-+                              return (IPP2P_BIT * 100 + 63);
-+                      break;
-+              case 211:
-+                      if (get_u32(haystack, 8) == __constant_htonl(0x00000405)) 
-+                              return (IPP2P_BIT * 100 + 54);
-+                      break;
-+              case 29:
-+                      if ((get_u32(haystack, 8) == __constant_htonl(0x00000401))) 
-+                              return (IPP2P_BIT * 100 + 55);
-+                      break;
-+              case 52:
-+                      if (get_u32(haystack,8)  == __constant_htonl(0x00000827) &&
-+                      get_u32(haystack,12) == __constant_htonl(0x37502950))
-+                              return (IPP2P_BIT * 100 + 80);
-+                      break;
-+              default:
-+                      /* this packet does not have a constant size */
-+                      if (packet_len >= 40 && get_u32(haystack, 16) == __constant_htonl(0x00000402) && get_u32(haystack, 36) == __constant_htonl(0x00000104)) 
-+                              return (IPP2P_BIT * 100 + 56);
-+                      break;
-+      }
-+    
-+      /* some extra-bitcomet rules:
-+      * "d1:" [a|r] "d2:id20:"
-+      */
-+      if (packet_len > 30 && get_u8(haystack, 8) == 'd' && get_u8(haystack, 9) == '1' && get_u8(haystack, 10) == ':' )
-+      {
-+              if (get_u8(haystack, 11) == 'a' || get_u8(haystack, 11) == 'r')
-+              {
-+                      if (memcmp(haystack+12,"d2:id20:",8)==0)
-+                              return (IPP2P_BIT * 100 + 57);
-+              }
-+      }
-+    
-+#if 0
-+      /* bitlord rules */
-+      /* packetlen must be bigger than 40 */
-+      /* first 4 bytes are zero */
-+      if (packet_len > 40 && get_u32(haystack, 8) == 0x00000000)
-+      {
-+              /* first rule: 00 00 00 00 01 00 00 xx xx xx xx 00 00 00 00*/
-+              if (get_u32(haystack, 12) == 0x00000000 && 
-+                  get_u32(haystack, 16) == 0x00010000 &&
-+                  get_u32(haystack, 24) == 0x00000000 )
-+                      return (IPP2P_BIT * 100 + 71);
-+                      
-+              /* 00 01 00 00 0d 00 00 xx xx xx xx 00 00 00 00*/
-+              if (get_u32(haystack, 12) == 0x00000001 && 
-+                  get_u32(haystack, 16) == 0x000d0000 &&
-+                  get_u32(haystack, 24) == 0x00000000 )
-+                      return (IPP2P_BIT * 100 + 71);
-+              
-+                  
-+      }
-+#endif
-+
-+    return 0;
-+}/*udp_search_bit*/
-+
-+
-+
-+/*Search for Ares commands*/
-+//#define IPP2P_DEBUG_ARES
-+int
-+search_ares (const unsigned char *payload, const u16 plen)
-+//int search_ares (unsigned char *haystack, int packet_len, int head_len)
-+{
-+//    const unsigned char *t = haystack + head_len;
-+      
-+      /* all ares packets start with  */
-+      if (payload[1] == 0 && (plen - payload[0]) == 3)
-+      {
-+              switch (payload[2])
-+              {
-+                      case 0x5a:
-+                              /* ares connect */
-+                              if ( plen == 6 && payload[5] == 0x05 ) return ((IPP2P_ARES * 100) + 1);
-+                              break;
-+                      case 0x09:
-+                              /* ares search, min 3 chars --> 14 bytes
-+                               * lets define a search can be up to 30 chars --> max 34 bytes
-+                               */
-+                              if ( plen >= 14 && plen <= 34 ) return ((IPP2P_ARES * 100) + 1);
-+                              break;
-+#ifdef IPP2P_DEBUG_ARES
-+                      default:
-+                      printk(KERN_DEBUG "Unknown Ares command %x recognized, len: %u \n", (unsigned int) payload[2],plen);
-+#endif /* IPP2P_DEBUG_ARES */
-+              }
-+      }
-+
-+#if 0         
-+      /* found connect packet: 03 00 5a 04 03 05 */
-+      /* new version ares 1.8: 03 00 5a xx xx 05 */
-+    if ((plen) == 6){ /* possible connect command*/
-+      if ((payload[0] == 0x03) && (payload[1] == 0x00) && (payload[2] == 0x5a) && (payload[5] == 0x05))
-+          return ((IPP2P_ARES * 100) + 1);
-+    }
-+    if ((plen) == 60){        /* possible download command*/
-+      if ((payload[59] == 0x0a) && (payload[58] == 0x0a)){
-+          if (memcmp(t, "PUSH SHA1:", 10) == 0) /* found download command */
-+              return ((IPP2P_ARES * 100) + 2);
-+      }
-+    }
-+#endif
-+
-+    return 0;
-+} /*search_ares*/
-+
-+/*Search for SoulSeek commands*/
-+int
-+search_soul (const unsigned char *payload, const u16 plen)
-+{
-+//#define IPP2P_DEBUG_SOUL
-+    /* match: xx xx xx xx | xx = sizeof(payload) - 4 */
-+    if (get_u32(payload, 0) == (plen - 4)){
-+      const __u32 m=get_u32(payload, 4);
-+      /* match 00 yy yy 00, yy can be everything */
-+        if ( get_u8(payload, 4) == 0x00 && get_u8(payload, 7) == 0x00 )
-+      {
-+#ifdef IPP2P_DEBUG_SOUL
-+      printk(KERN_DEBUG "0: Soulseek command 0x%x recognized\n",get_u32(payload, 4));
-+#endif /* IPP2P_DEBUG_SOUL */
-+              return ((IPP2P_SOUL * 100) + 1);
-+      }
-+      
-+        /* next match: 01 yy 00 00 | yy can be everything */
-+        if ( get_u8(payload, 4) == 0x01 && get_u16(payload, 6) == 0x0000 )
-+      {
-+#ifdef IPP2P_DEBUG_SOUL
-+      printk(KERN_DEBUG "1: Soulseek command 0x%x recognized\n",get_u16(payload, 4));
-+#endif /* IPP2P_DEBUG_SOUL */
-+              return ((IPP2P_SOUL * 100) + 2);
-+      }
-+      
-+      /* other soulseek commandos are: 1-5,7,9,13-18,22,23,26,28,35-37,40-46,50,51,60,62-69,91,92,1001 */
-+      /* try to do this in an intelligent way */
-+      /* get all small commandos */
-+      switch(m)
-+      {
-+              case 7:
-+              case 9:
-+              case 22:
-+              case 23:
-+              case 26:
-+              case 28:
-+              case 50:
-+              case 51:
-+              case 60:
-+              case 91:
-+              case 92:
-+              case 1001:
-+#ifdef IPP2P_DEBUG_SOUL
-+              printk(KERN_DEBUG "2: Soulseek command 0x%x recognized\n",get_u16(payload, 4));
-+#endif /* IPP2P_DEBUG_SOUL */
-+              return ((IPP2P_SOUL * 100) + 3);
-+      }
-+      
-+      if (m > 0 && m < 6 ) 
-+      {
-+#ifdef IPP2P_DEBUG_SOUL
-+              printk(KERN_DEBUG "3: Soulseek command 0x%x recognized\n",get_u16(payload, 4));
-+#endif /* IPP2P_DEBUG_SOUL */
-+              return ((IPP2P_SOUL * 100) + 4);
-+      }
-+      if (m > 12 && m < 19 )
-+      {
-+#ifdef IPP2P_DEBUG_SOUL
-+              printk(KERN_DEBUG "4: Soulseek command 0x%x recognized\n",get_u16(payload, 4));
-+#endif /* IPP2P_DEBUG_SOUL */
-+              return ((IPP2P_SOUL * 100) + 5);
-+      }
-+
-+      if (m > 34 && m < 38 )
-+      {
-+#ifdef IPP2P_DEBUG_SOUL
-+              printk(KERN_DEBUG "5: Soulseek command 0x%x recognized\n",get_u16(payload, 4));
-+#endif /* IPP2P_DEBUG_SOUL */
-+              return ((IPP2P_SOUL * 100) + 6);
-+      }
-+
-+      if (m > 39 && m < 47 )
-+      {
-+#ifdef IPP2P_DEBUG_SOUL
-+              printk(KERN_DEBUG "6: Soulseek command 0x%x recognized\n",get_u16(payload, 4));
-+#endif /* IPP2P_DEBUG_SOUL */
-+              return ((IPP2P_SOUL * 100) + 7);
-+      }
-+
-+      if (m > 61 && m < 70 ) 
-+      {
-+#ifdef IPP2P_DEBUG_SOUL
-+              printk(KERN_DEBUG "7: Soulseek command 0x%x recognized\n",get_u16(payload, 4));
-+#endif /* IPP2P_DEBUG_SOUL */
-+              return ((IPP2P_SOUL * 100) + 8);
-+      }
-+
-+#ifdef IPP2P_DEBUG_SOUL
-+      printk(KERN_DEBUG "unknown SOULSEEK command: 0x%x, first 16 bit: 0x%x, first 8 bit: 0x%x ,soulseek ???\n",get_u32(payload, 4),get_u16(payload, 4) >> 16,get_u8(payload, 4) >> 24);
-+#endif /* IPP2P_DEBUG_SOUL */
-+    }
-+      
-+      /* match 14 00 00 00 01 yy 00 00 00 STRING(YY) 01 00 00 00 00 46|50 00 00 00 00 */
-+      /* without size at the beginning !!! */
-+      if ( get_u32(payload, 0) == 0x14 && get_u8(payload, 4) == 0x01 )
-+      {
-+              __u32 y=get_u32(payload, 5);
-+              /* we need 19 chars + string */
-+              if ( (y + 19) <= (plen) )
-+              {
-+                      const unsigned char *w=payload+9+y;
-+                      if (get_u32(w, 0) == 0x01 && ( get_u16(w, 4) == 0x4600 || get_u16(w, 4) == 0x5000) && get_u32(w, 6) == 0x00);
-+#ifdef IPP2P_DEBUG_SOUL
-+                      printk(KERN_DEBUG "Soulssek special client command recognized\n");
-+#endif /* IPP2P_DEBUG_SOUL */
-+                      return ((IPP2P_SOUL * 100) + 9);
-+              }
-+      }
-+    return 0;
-+}
-+
-+
-+/*Search for WinMX commands*/
-+int
-+search_winmx (const unsigned char *payload, const u16 plen)
-+{
-+//#define IPP2P_DEBUG_WINMX
-+    if (((plen) == 4) && (memcmp(payload, "SEND", 4) == 0))  return ((IPP2P_WINMX * 100) + 1);
-+    if (((plen) == 3) && (memcmp(payload, "GET", 3) == 0))  return ((IPP2P_WINMX * 100) + 2);
-+    //if (packet_len < (head_len + 10)) return 0;
-+    if (plen < 10) return 0;
-+    
-+    if ((memcmp(payload, "SEND", 4) == 0) || (memcmp(payload, "GET", 3) == 0)){
-+        u16 c=4;
-+        const u16 end=plen-2;
-+        u8 count=0;
-+        while (c < end)
-+        {
-+              if (payload[c]== 0x20 && payload[c+1] == 0x22)
-+              {
-+                      c++;
-+                      count++;
-+                      if (count>=2) return ((IPP2P_WINMX * 100) + 3);
-+              }
-+              c++;
-+        }
-+    }
-+    
-+    if ( plen == 149 && payload[0] == '8' )
-+    {
-+#ifdef IPP2P_DEBUG_WINMX
-+      printk(KERN_INFO "maybe WinMX\n");
-+#endif
-+      if (get_u32(payload,17) == 0 && get_u32(payload,21) == 0 && get_u32(payload,25) == 0 &&
-+//                get_u32(payload,33) == __constant_htonl(0x71182b1a) && get_u32(payload,37) == __constant_htonl(0x05050000) &&
-+//                get_u32(payload,133) == __constant_htonl(0x31097edf) && get_u32(payload,145) == __constant_htonl(0xdcb8f792))
-+          get_u16(payload,39) == 0 && get_u16(payload,135) == __constant_htons(0x7edf) && get_u16(payload,147) == __constant_htons(0xf792))
-+          
-+      {
-+#ifdef IPP2P_DEBUG_WINMX
-+              printk(KERN_INFO "got WinMX\n");
-+#endif
-+              return ((IPP2P_WINMX * 100) + 4);
-+      }
-+    }
-+    return 0;
-+} /*search_winmx*/
-+
-+
-+/*Search for appleJuice commands*/
-+int
-+search_apple (const unsigned char *payload, const u16 plen)
-+{
-+    if ( (plen > 7) && (payload[6] == 0x0d) && (payload[7] == 0x0a) && (memcmp(payload, "ajprot", 6) == 0))  return (IPP2P_APPLE * 100);
-+    
-+    return 0;
-+}
-+
-+
-+/*Search for BitTorrent commands*/
-+int
-+search_bittorrent (const unsigned char *payload, const u16 plen)
-+{
-+    if (plen > 20)
-+    {
-+      /* test for match 0x13+"BitTorrent protocol" */
-+      if (payload[0] == 0x13) 
-+      {
-+              if (memcmp(payload+1, "BitTorrent protocol", 19) == 0) return (IPP2P_BIT * 100);
-+      }
-+      
-+      /* get tracker commandos, all starts with GET /
-+      * then it can follow: scrape| announce
-+      * and then ?hash_info=
-+      */
-+      if (memcmp(payload,"GET /",5) == 0)
-+      {
-+              /* message scrape */
-+              if ( memcmp(payload+5,"scrape?info_hash=",17)==0 ) return (IPP2P_BIT * 100 + 1);
-+              /* message announce */
-+              if ( memcmp(payload+5,"announce?info_hash=",19)==0 ) return (IPP2P_BIT * 100 + 2);
-+      }
-+    } 
-+    else 
-+    {
-+      /* bitcomet encryptes the first packet, so we have to detect another 
-+       * one later in the flow */
-+       /* first try failed, too many missdetections */
-+      //if ( size == 5 && get_u32(t,0) == __constant_htonl(1) && t[4] < 3) return (IPP2P_BIT * 100 + 3);
-+      
-+      /* second try: block request packets */
-+      if ( plen == 17 && get_u32(payload,0) == __constant_htonl(0x0d) && payload[4] == 0x06 && get_u32(payload,13) == __constant_htonl(0x4000) ) return (IPP2P_BIT * 100 + 3);
-+    }
-+
-+    return 0;
-+}
-+
-+
-+
-+/*check for Kazaa get command*/
-+int
-+search_kazaa (const unsigned char *payload, const u16 plen)
-+
-+{
-+    if ((payload[plen-2] == 0x0d) && (payload[plen-1] == 0x0a) && memcmp(payload, "GET /.hash=", 11) == 0)
-+      return (IPP2P_DATA_KAZAA * 100);
-+
-+    return 0;
-+}
-+
-+
-+/*check for gnutella get command*/
-+int
-+search_gnu (const unsigned char *payload, const u16 plen)
-+{
-+    if ((payload[plen-2] == 0x0d) && (payload[plen-1] == 0x0a))
-+    {
-+      if (memcmp(payload, "GET /get/", 9) == 0)       return ((IPP2P_DATA_GNU * 100) + 1);
-+      if (memcmp(payload, "GET /uri-res/", 13) == 0) return ((IPP2P_DATA_GNU * 100) + 2); 
-+    }
-+    return 0;
-+}
-+
-+
-+/*check for gnutella get commands and other typical data*/
-+int
-+search_all_gnu (const unsigned char *payload, const u16 plen)
-+{
-+    
-+    if ((payload[plen-2] == 0x0d) && (payload[plen-1] == 0x0a))
-+    {
-+      
-+      if (memcmp(payload, "GNUTELLA CONNECT/", 17) == 0) return ((IPP2P_GNU * 100) + 1);
-+      if (memcmp(payload, "GNUTELLA/", 9) == 0) return ((IPP2P_GNU * 100) + 2);    
-+    
-+    
-+      if ((memcmp(payload, "GET /get/", 9) == 0) || (memcmp(payload, "GET /uri-res/", 13) == 0))
-+      {        
-+              u16 c=8;
-+              const u16 end=plen-22;
-+              while (c < end) {
-+                      if ( payload[c] == 0x0a && payload[c+1] == 0x0d && ((memcmp(&payload[c+2], "X-Gnutella-", 11) == 0) || (memcmp(&payload[c+2], "X-Queue:", 8) == 0))) 
-+                              return ((IPP2P_GNU * 100) + 3);
-+                      c++;
-+              }
-+      }
-+    }
-+    return 0;
-+}
-+
-+
-+/*check for KaZaA download commands and other typical data*/
-+int
-+search_all_kazaa (const unsigned char *payload, const u16 plen)
-+{
-+    if ((payload[plen-2] == 0x0d) && (payload[plen-1] == 0x0a))
-+    {
-+
-+      if (memcmp(payload, "GIVE ", 5) == 0) return ((IPP2P_KAZAA * 100) + 1);
-+    
-+      if (memcmp(payload, "GET /", 5) == 0) {
-+              u16 c = 8;
-+              const u16 end=plen-22;
-+              while (c < end) {
-+                      if ( payload[c] == 0x0a && payload[c+1] == 0x0d && ((memcmp(&payload[c+2], "X-Kazaa-Username: ", 18) == 0) || (memcmp(&payload[c+2], "User-Agent: PeerEnabler/", 24) == 0)))
-+                              return ((IPP2P_KAZAA * 100) + 2);
-+                      c++;
-+              }
-+      }
-+    }
-+    return 0;
-+}
-+
-+/*fast check for edonkey file segment transfer command*/
-+int
-+search_edk (const unsigned char *payload, const u16 plen)
-+{
-+    if (payload[0] != 0xe3) 
-+      return 0;
-+    else {
-+      if (payload[5] == 0x47) 
-+          return (IPP2P_DATA_EDK * 100);
-+      else    
-+          return 0;
-+    }
-+}
-+
-+
-+
-+/*intensive but slower search for some edonkey packets including size-check*/
-+int
-+search_all_edk (const unsigned char *payload, const u16 plen)
-+{
-+    if (payload[0] != 0xe3) 
-+      return 0;
-+    else {
-+      //t += head_len;        
-+      const u16 cmd = get_u16(payload, 1);
-+      if (cmd == (plen - 5)) {
-+          switch (payload[5]) {
-+              case 0x01: return ((IPP2P_EDK * 100) + 1);      /*Client: hello or Server:hello*/
-+              case 0x4c: return ((IPP2P_EDK * 100) + 9);      /*Client: Hello-Answer*/
-+          }
-+      }
-+      return 0;
-+     }
-+}
-+
-+
-+/*fast check for Direct Connect send command*/
-+int
-+search_dc (const unsigned char *payload, const u16 plen)
-+{
-+
-+    if (payload[0] != 0x24 ) 
-+      return 0;
-+    else {
-+      if (memcmp(&payload[1], "Send|", 5) == 0)
-+          return (IPP2P_DATA_DC * 100);
-+      else
-+          return 0;
-+    } 
-+
-+}
-+
-+
-+/*intensive but slower check for all direct connect packets*/
-+int
-+search_all_dc (const unsigned char *payload, const u16 plen)
-+{
-+//    unsigned char *t = haystack;
-+
-+    if (payload[0] == 0x24 && payload[plen-1] == 0x7c) 
-+    {
-+      const unsigned char *t=&payload[1];
-+              /* Client-Hub-Protocol */
-+      if (memcmp(t, "Lock ", 5) == 0)                 return ((IPP2P_DC * 100) + 1);
-+      /* Client-Client-Protocol, some are already recognized by client-hub (like lock) */
-+      if (memcmp(t, "MyNick ", 7) == 0)               return ((IPP2P_DC * 100) + 38); 
-+    }
-+    return 0;
-+}
-+
-+/*check for mute*/
-+int
-+search_mute (const unsigned char *payload, const u16 plen)
-+{
-+      if ( plen == 209 || plen == 345 || plen == 473 || plen == 609 || plen == 1121 )
-+      {
-+              //printk(KERN_DEBUG "size hit: %u",size);
-+              if (memcmp(payload,"PublicKey: ",11) == 0 )
-+              { 
-+                      return ((IPP2P_MUTE * 100) + 0);
-+                      
-+/*                    if (memcmp(t+size-14,"\x0aEndPublicKey\x0a",14) == 0)
-+                      {
-+                              printk(KERN_DEBUG "end pubic key hit: %u",size);
-+                              
-+                      }*/
-+              }
-+      }
-+      return 0;
-+}
-+
-+
-+/* check for xdcc */
-+int
-+search_xdcc (const unsigned char *payload, const u16 plen)
-+{
-+      /* search in small packets only */
-+      if (plen > 20 && plen < 200 && payload[plen-1] == 0x0a && payload[plen-2] == 0x0d && memcmp(payload,"PRIVMSG ",8) == 0)
-+      {
-+              
-+              u16 x=10;
-+              const u16 end=plen - 13;
-+              
-+              /* is seems to be a irc private massage, chedck for xdcc command */
-+              while (x < end)
-+              {
-+                      if (payload[x] == ':')
-+                      {
-+                              if ( memcmp(&payload[x+1],"xdcc send #",11) == 0 )
-+                                      return ((IPP2P_XDCC * 100) + 0);
-+                      }
-+                      x++;
-+              }
-+      }
-+      return 0;
-+}
-+
-+/* search for waste */
-+int search_waste(const unsigned char *payload, const u16 plen)
-+{
-+      if ( plen >= 8 && memcmp(payload,"GET.sha1:",9) == 0)
-+              return ((IPP2P_WASTE * 100) + 0);
-+
-+      return 0;
-+}
-+
-+
-+static struct {
-+    int command;
-+    __u8 short_hand;                  /*for fucntions included in short hands*/
-+    int packet_len;
-+    int (*function_name) (const unsigned char *, const u16);
-+} matchlist[] = {
-+    {IPP2P_EDK,SHORT_HAND_IPP2P,20, &search_all_edk},
-+//    {IPP2P_DATA_KAZAA,SHORT_HAND_DATA,200, &search_kazaa},
-+//    {IPP2P_DATA_EDK,SHORT_HAND_DATA,60, &search_edk},
-+//    {IPP2P_DATA_DC,SHORT_HAND_DATA,26, &search_dc},
-+    {IPP2P_DC,SHORT_HAND_IPP2P,5, search_all_dc},
-+//    {IPP2P_DATA_GNU,SHORT_HAND_DATA,40, &search_gnu},
-+    {IPP2P_GNU,SHORT_HAND_IPP2P,5, &search_all_gnu},
-+    {IPP2P_KAZAA,SHORT_HAND_IPP2P,5, &search_all_kazaa},
-+    {IPP2P_BIT,SHORT_HAND_IPP2P,20, &search_bittorrent},
-+    {IPP2P_APPLE,SHORT_HAND_IPP2P,5, &search_apple},
-+    {IPP2P_SOUL,SHORT_HAND_IPP2P,5, &search_soul},
-+    {IPP2P_WINMX,SHORT_HAND_IPP2P,2, &search_winmx},
-+    {IPP2P_ARES,SHORT_HAND_IPP2P,5, &search_ares},
-+    {IPP2P_MUTE,SHORT_HAND_NONE,200, &search_mute},
-+    {IPP2P_WASTE,SHORT_HAND_NONE,5, &search_waste},
-+    {IPP2P_XDCC,SHORT_HAND_NONE,5, &search_xdcc},
-+    {0,0,0,NULL}
-+};
-+
-+
-+static struct {
-+    int command;
-+    __u8 short_hand;                  /*for fucntions included in short hands*/
-+    int packet_len;
-+    int (*function_name) (unsigned char *, int);
-+} udp_list[] = {
-+    { IPP2P_KAZAA, SHORT_HAND_IPP2P, 14, &udp_search_kazaa},
-+    { IPP2P_BIT,   SHORT_HAND_IPP2P, 23, &udp_search_bit},
-+    { IPP2P_GNU,   SHORT_HAND_IPP2P, 11, &udp_search_gnu},
-+    { IPP2P_EDK,   SHORT_HAND_IPP2P,  9, &udp_search_edk},
-+    { IPP2P_DC,    SHORT_HAND_IPP2P, 12, &udp_search_directconnect},    
-+    { 0, 0, 0, NULL }
-+};
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,23)
-+static bool
-+#else
-+static int
-+#endif
-+match(const struct sk_buff *skb,
-+      const struct net_device *in,
-+      const struct net_device *out,
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,17)
-+      const struct xt_match *match,
-+#endif
-+      const void *matchinfo,
-+      int offset,
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+      const void *hdr,
-+      u_int16_t datalen,
-+#endif
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      unsigned int protoff,
-+#endif
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,23)
-+      bool *hotdrop)
-+#else
-+      bool *hotdrop)
-+#endif
-+{
-+    const struct ipt_p2p_info *info = matchinfo;
-+    unsigned char  *haystack;
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,22)
-+    struct iphdr *ip = ip_hdr(skb);
-+#else
-+    struct iphdr *ip = skb->nh.iph;
-+#endif
-+    int p2p_result = 0, i = 0;
-+//    int head_len;
-+    int hlen = ntohs(ip->tot_len)-(ip->ihl*4);        /*hlen = packet-data length*/
-+
-+    /*must not be a fragment*/
-+    if (offset) {
-+      if (info->debug) printk("IPP2P.match: offset found %i \n",offset);
-+      return 0;
-+    }
-+    
-+    /*make sure that skb is linear*/
-+    if(skb_is_nonlinear(skb)){
-+      if (info->debug) printk("IPP2P.match: nonlinear skb found\n");
-+      return 0;
-+    }
-+
-+
-+    haystack=(char *)ip+(ip->ihl*4);          /*haystack = packet data*/
-+
-+    switch (ip->protocol){
-+      case IPPROTO_TCP:               /*what to do with a TCP packet*/
-+      {
-+          struct tcphdr *tcph = (void *) ip + ip->ihl * 4;
-+          
-+          if (tcph->fin) return 0;  /*if FIN bit is set bail out*/
-+          if (tcph->syn) return 0;  /*if SYN bit is set bail out*/
-+          if (tcph->rst) return 0;  /*if RST bit is set bail out*/
-+          
-+          haystack += tcph->doff * 4; /*get TCP-Header-Size*/
-+          hlen -= tcph->doff * 4;
-+          while (matchlist[i].command) {
-+              if ((((info->cmd & matchlist[i].command) == matchlist[i].command) ||
-+                  ((info->cmd & matchlist[i].short_hand) == matchlist[i].short_hand)) &&
-+                  (hlen > matchlist[i].packet_len)) {
-+                          p2p_result = matchlist[i].function_name(haystack, hlen);
-+                          if (p2p_result) 
-+                          {
-+                              if (info->debug) printk("IPP2P.debug:TCP-match: %i from: %u.%u.%u.%u:%i to: %u.%u.%u.%u:%i Length: %i\n", 
-+                                  p2p_result, NIPQUAD(ip->saddr),ntohs(tcph->source), NIPQUAD(ip->daddr),ntohs(tcph->dest),hlen);
-+                              return p2p_result;
-+                          }
-+              }
-+          i++;
-+          }
-+          return p2p_result;
-+      }
-+      
-+      case IPPROTO_UDP:               /*what to do with an UDP packet*/
-+      {
-+          struct udphdr *udph = (void *) ip + ip->ihl * 4;
-+          
-+          while (udp_list[i].command){
-+              if ((((info->cmd & udp_list[i].command) == udp_list[i].command) ||
-+                  ((info->cmd & udp_list[i].short_hand) == udp_list[i].short_hand)) &&
-+                  (hlen > udp_list[i].packet_len)) {
-+                          p2p_result = udp_list[i].function_name(haystack, hlen);
-+                          if (p2p_result){
-+                              if (info->debug) printk("IPP2P.debug:UDP-match: %i from: %u.%u.%u.%u:%i to: %u.%u.%u.%u:%i Length: %i\n", 
-+                                  p2p_result, NIPQUAD(ip->saddr),ntohs(udph->source), NIPQUAD(ip->daddr),ntohs(udph->dest),hlen);
-+                              return p2p_result;
-+                          }
-+              }
-+          i++;
-+          }                   
-+          return p2p_result;
-+      }
-+    
-+      default: return 0;
-+    }
-+}
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,23)
-+static bool
-+#else
-+static int
-+#endif
-+checkentry(const char *tablename,
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+            const void *ip,
-+#else
-+            const struct ipt_ip *ip,
-+#endif
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,17)
-+            const struct xt_match *match,
-+#endif
-+          void *matchinfo,
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)
-+          unsigned int matchsize,
-+#endif
-+          unsigned int hook_mask)
-+{
-+        /* Must specify -p tcp */
-+/*    if (ip->proto != IPPROTO_TCP || (ip->invflags & IPT_INV_PROTO)) {
-+ *    printk("ipp2p: Only works on TCP packets, use -p tcp\n");
-+ *    return 0;
-+ *    }*/
-+    return 1;
-+}
-+                                                                          
-+
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,21)
-+static struct xt_match ipp2p_match = {
-+#else
-+static struct ipt_match ipp2p_match = { 
-+#endif
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+      { NULL, NULL }, 
-+      "ipp2p", 
-+      &ipp2p_match, 
-+      &ipp2p_checkentry, 
-+      NULL, 
-+      THIS_MODULE
-+#endif
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+      .name           = "ipp2p",
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,21)
-+      .family         = AF_INET,
-+#endif
-+      .match          = &match,
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,17)
-+      .matchsize      = sizeof(struct ipt_p2p_info),
-+#endif
-+      .checkentry     = &checkentry,
-+      .me             = THIS_MODULE,
-+#endif
-+};
-+
-+
-+static int __init init(void)
-+{
-+    printk(KERN_INFO "IPP2P v%s loading\n", IPP2P_VERSION);
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,21)
-+    return xt_register_match(&ipp2p_match);
-+#else
-+    return ipt_register_match(&ipp2p_match);
-+#endif
-+}
-+      
-+static void __exit fini(void)
-+{
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,21)
-+    xt_unregister_match(&ipp2p_match);
-+#else
-+    ipt_unregister_match(&ipp2p_match);
-+#endif
-+    printk(KERN_INFO "IPP2P v%s unloaded\n", IPP2P_VERSION);    
-+}
-+      
-+module_init(init);
-+module_exit(fini);
-+
-+
diff --git a/src/patches/linux-2.6.27-disable_mISDNv2.patch b/src/patches/linux-2.6.27-disable_mISDNv2.patch
deleted file mode 100644 (file)
index a58d831..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-diff -Naur linux-2.6.27.21.org/drivers/isdn/hardware/Makefile linux-2.6.27.21/drivers/isdn/hardware/Makefile
---- linux-2.6.27.21.org/drivers/isdn/hardware/Makefile 2009-03-23 23:04:09.000000000 +0100
-+++ linux-2.6.27.21/drivers/isdn/hardware/Makefile     2009-03-29 11:08:02.000000000 +0200
-@@ -4,4 +4,3 @@
- obj-$(CONFIG_CAPI_AVM)                += avm/
- obj-$(CONFIG_CAPI_EICON)      += eicon/
--obj-$(CONFIG_MISDN)           += mISDN/
-diff -Naur linux-2.6.27.21.org/drivers/isdn/Kconfig linux-2.6.27.21/drivers/isdn/Kconfig
---- linux-2.6.27.21.org/drivers/isdn/Kconfig   2009-03-23 23:04:09.000000000 +0100
-+++ linux-2.6.27.21/drivers/isdn/Kconfig       2009-03-29 11:07:20.000000000 +0200
-@@ -21,8 +21,6 @@
- if ISDN
--source "drivers/isdn/mISDN/Kconfig"
--
- menuconfig ISDN_I4L
-       tristate "Old ISDN4Linux (deprecated)"
-       ---help---
-diff -Naur linux-2.6.27.21.org/drivers/isdn/Makefile linux-2.6.27.21/drivers/isdn/Makefile
---- linux-2.6.27.21.org/drivers/isdn/Makefile  2009-03-23 23:04:09.000000000 +0100
-+++ linux-2.6.27.21/drivers/isdn/Makefile      2009-03-29 11:07:30.000000000 +0200
-@@ -4,7 +4,6 @@
- obj-$(CONFIG_ISDN_I4L)                        += i4l/
- obj-$(CONFIG_ISDN_CAPI)                       += capi/
--obj-$(CONFIG_MISDN)                   += mISDN/
- obj-$(CONFIG_ISDN)                    += hardware/
- obj-$(CONFIG_ISDN_DIVERSION)          += divert/
- obj-$(CONFIG_ISDN_DRV_HISAX)          += hisax/
diff --git a/src/patches/mISDN-avmfritz.patch b/src/patches/mISDN-avmfritz.patch
deleted file mode 100644 (file)
index 69c880f..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- avm_fritz.c.old    Tue Feb 13 11:43:45 2007
-+++ avm_fritz.c        Wed Apr 11 15:26:32 2007
-@@ -781,6 +781,8 @@
-                       spin_lock_irqsave(inst->hwlock, flags);
-                       ret = modehdlc(bch, bch->channel,
-                               bch->inst.pid.protocol[1]);
-+                      if (bch->inst.pid.protocol[2] == ISDN_PID_L2_B_TRANS)
-+                              test_and_set_bit(FLG_L2DATA, &bch->Flags);
-                       spin_unlock_irqrestore(inst->hwlock, flags);
-               }
-               skb_trim(skb, 0);
diff --git a/src/patches/mISDN-remove2.6.27-dsp-features.diff b/src/patches/mISDN-remove2.6.27-dsp-features.diff
deleted file mode 100644 (file)
index 7cc95b6..0000000
+++ /dev/null
@@ -1,344 +0,0 @@
-diff -Naur mISDN.git.org/drivers/isdn/hardware/mISDN/dsp_cmx.c mISDN.git/drivers/isdn/hardware/mISDN/dsp_cmx.c
---- mISDN.git.org/drivers/isdn/hardware/mISDN/dsp_cmx.c        2009-01-22 14:26:03.000000000 +0100
-+++ mISDN.git/drivers/isdn/hardware/mISDN/dsp_cmx.c    2009-04-04 19:06:14.000000000 +0200
-@@ -1138,11 +1138,7 @@
-        * also add delay if requested by PH_SIGNAL
-        */
-       if (dsp->rx_W < 0) {
--#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27)
--              if (dsp->features.unclocked) {
--#else
-               if (dsp->features.has_jitter) {
--#endif
-                       dsp->rx_R = (hh->dinfo & CMX_BUFF_MASK);
-                       dsp->rx_W = (dsp->rx_R+dsp->cmx_delay) & CMX_BUFF_MASK;
-               } else {
-@@ -1151,11 +1147,7 @@
-               }
-       }
-       /* if frame contains time code, write directly */
--#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27)
--      if (dsp->features.unclocked) {
--#else
-         if (dsp->features.has_jitter) {
--#endif
-               dsp->rx_W = (hh->dinfo & CMX_BUFF_MASK);
- #warning remove me
-               printk(KERN_DEBUG "%s %08x\n", dsp->inst.name, hh->dinfo);
-diff -Naur mISDN.git.org/drivers/isdn/hardware/mISDN/dsp.h mISDN.git/drivers/isdn/hardware/mISDN/dsp.h
---- mISDN.git.org/drivers/isdn/hardware/mISDN/dsp.h    2009-01-22 14:26:03.000000000 +0100
-+++ mISDN.git/drivers/isdn/hardware/mISDN/dsp.h        2009-04-04 19:04:43.000000000 +0200
-@@ -159,7 +159,6 @@
-  * general stuff *
-  *****************/
--#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 27)
- struct dsp_features {
-       int             hfc_id;         // unique id to identify the chip (or -1) 
-       int             hfc_dtmf;       // set if HFCmulti card supports dtmf 
-@@ -170,7 +169,6 @@
-       int             pcm_banks;      // number of IO banks of pcm bus 
-       int             has_jitter;     // data is jittered and unsorted 
- };
--#endif
- typedef struct _dsp {
-       struct list_head list;
-diff -Naur mISDN.git.org/drivers/isdn/hardware/mISDN/dsp_hwec.c mISDN.git/drivers/isdn/hardware/mISDN/dsp_hwec.c
---- mISDN.git.org/drivers/isdn/hardware/mISDN/dsp_hwec.c       2009-01-22 14:26:03.000000000 +0100
-+++ mISDN.git/drivers/isdn/hardware/mISDN/dsp_hwec.c   2009-04-04 19:07:16.000000000 +0200
-@@ -30,24 +30,6 @@
- #include <linux/mISDNif.h>
- #include "dsp.h"
- #include "helper.h"
--
--#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27)
--static struct mISDN_dsp_element_arg args[] = {
--        { "deftaps", "128", "Set the number of taps of cancellation." },
--};
--
--static struct mISDN_dsp_element dsp_hwec_p = {
--        .name = "hwec",
--        .new = NULL,
--        .free = NULL,
--        .process_tx = NULL,
--        .process_rx = NULL,
--        .num_args = sizeof(args) / sizeof(struct mISDN_dsp_element_arg),
--        .args = args,
--};
--struct mISDN_dsp_element *dsp_hwec = &dsp_hwec_p;
--
--#else
- static mISDN_dsp_element_arg_t args[] = {
-       { "deftaps", "128", "Set the number of taps of cancellation." },
- };
-@@ -62,7 +44,6 @@
-       .args = args,
- };
- mISDN_dsp_element_t *dsp_hwec = &dsp_hwec_p;
--#endif
- void dsp_hwec_enable (dsp_t *dsp, const char *arg)
- {
-diff -Naur mISDN.git.org/drivers/isdn/hardware/mISDN/dsp_kb1ec.c mISDN.git/drivers/isdn/hardware/mISDN/dsp_kb1ec.c
---- mISDN.git.org/drivers/isdn/hardware/mISDN/dsp_kb1ec.c      2009-01-22 14:26:03.000000000 +0100
-+++ mISDN.git/drivers/isdn/hardware/mISDN/dsp_kb1ec.c  2009-04-04 19:07:35.000000000 +0200
-@@ -90,22 +90,6 @@
-       dsp_cancel_rx(p, data, len);
- }
--#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27)
--static struct mISDN_dsp_element_arg args[] = {
--        { "deftaps", "128", "Set the number of taps of cancellation." },
--        { "training", "0", "Enable echotraining (0: disabled, 1: enabled)." },
--};
--
--static struct mISDN_dsp_element dsp_kb1ec = {
--        .name = "kb1ec",
--        .new = new,
--        .free = free,
--        .process_tx = process_tx,
--        .process_rx = process_rx,
--        .num_args = sizeof(args) / sizeof(struct mISDN_dsp_element_arg),
--        .args = args,
--};
--#else
- static mISDN_dsp_element_arg_t args[] = {
-       { "deftaps", "128", "Set the number of taps of cancellation." },
-       { "training", "0", "Enable echotraining (0: disabled, 1: enabled)." },
-@@ -120,7 +104,6 @@
-       .num_args = sizeof(args) / sizeof(mISDN_dsp_element_arg_t),
-       .args = args,
- };
--#endif
- #ifdef MODULE
- static int __init dsp_kb1ec_init (void)
-diff -Naur mISDN.git.org/drivers/isdn/hardware/mISDN/dsp_mec2.c mISDN.git/drivers/isdn/hardware/mISDN/dsp_mec2.c
---- mISDN.git.org/drivers/isdn/hardware/mISDN/dsp_mec2.c       2009-01-22 14:26:03.000000000 +0100
-+++ mISDN.git/drivers/isdn/hardware/mISDN/dsp_mec2.c   2009-04-04 19:08:03.000000000 +0200
-@@ -91,22 +91,6 @@
-       dsp_cancel_rx(p, data, len);
- }
--#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27)
--static struct mISDN_dsp_element_arg args[] = {
--        { "deftaps", "128", "Set the number of taps of cancellation." },
--        { "training", "0", "Enable echotraining (0: disabled, 1: enabled)." },
--};
--
--static struct mISDN_dsp_element dsp_mec2 = {
--        .name = "mec2",
--        .new = new,
--        .free = free,
--        .process_tx = process_tx,
--        .process_rx = process_rx,
--        .num_args = sizeof(args) / sizeof(struct mISDN_dsp_element_arg),
--        .args = args,
--};
--#else
- static mISDN_dsp_element_arg_t args[] = {
-       { "deftaps", "128", "Set the number of taps of cancellation." },
-       { "training", "0", "Enable echotraining (0: disabled, 1: enabled)." },
-@@ -121,7 +105,6 @@
-       .num_args = sizeof(args) / sizeof(mISDN_dsp_element_arg_t),
-       .args = args,
- };
--#endif
- #ifdef MODULE
- static int __init dsp_mec2_init (void)
-diff -Naur mISDN.git.org/drivers/isdn/hardware/mISDN/dsp_mg2ec.c mISDN.git/drivers/isdn/hardware/mISDN/dsp_mg2ec.c
---- mISDN.git.org/drivers/isdn/hardware/mISDN/dsp_mg2ec.c      2009-01-22 14:26:03.000000000 +0100
-+++ mISDN.git/drivers/isdn/hardware/mISDN/dsp_mg2ec.c  2009-04-04 19:08:27.000000000 +0200
-@@ -90,22 +90,6 @@
-       dsp_cancel_rx(p, data, len);
- }
--#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27)
--static struct mISDN_dsp_element_arg args[] = {
--        { "deftaps", "128", "Set the number of taps of cancellation." },
--        { "training", "0", "Enable echotraining (0: disabled, 1: enabled)." },
--};
--
--static struct mISDN_dsp_element dsp_mg2ec = {
--        .name = "mg2ec",
--        .new = new,
--        .free = free,
--        .process_tx = process_tx,
--        .process_rx = process_rx,
--        .num_args = sizeof(args) / sizeof(struct mISDN_dsp_element_arg),
--        .args = args,
--};
--#else
- static mISDN_dsp_element_arg_t args[] = {
-       { "deftaps", "128", "Set the number of taps of cancellation." },
-       { "training", "0", "Enable echotraining (0: disabled, 1: enabled)." },
-@@ -120,7 +104,6 @@
-       .num_args = sizeof(args) / sizeof(mISDN_dsp_element_arg_t),
-       .args = args,
- };
--#endif
- #ifdef MODULE
- static int __init dsp_mg2ec_init (void)
-diff -Naur mISDN.git.org/drivers/isdn/hardware/mISDN/dsp_octwareec.c mISDN.git/drivers/isdn/hardware/mISDN/dsp_octwareec.c
---- mISDN.git.org/drivers/isdn/hardware/mISDN/dsp_octwareec.c  2009-01-22 14:26:03.000000000 +0100
-+++ mISDN.git/drivers/isdn/hardware/mISDN/dsp_octwareec.c      2009-04-04 19:09:07.000000000 +0200
-@@ -91,22 +91,6 @@
-       dsp_cancel_rx(p, data, len);
- }
--#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27)
--static struct mISDN_dsp_element_arg args[] = {
--        { "deftaps", "128", "Set the number of taps of cancellation." },
--        { "training", "0", "Enable echotraining (0: disabled, 1: enabled)." },
--};
--
--static struct mISDN_dsp_element dsp_octwareec = {
--        .name = "octwareec",
--        .new = new,
--        .free = free,
--        .process_tx = process_tx,
--        .process_rx = process_rx,
--        .num_args = sizeof(args) / sizeof(struct mISDN_dsp_element_arg),
--        .args = args,
--};
--#else
- static mISDN_dsp_element_arg_t args[] = {
-       { "deftaps", "128", "Set the number of taps of cancellation." },
-       { "training", "0", "Enable echotraining (0: disabled, 1: enabled)." },
-@@ -121,7 +105,6 @@
-       .num_args = sizeof(args) / sizeof(mISDN_dsp_element_arg_t),
-       .args = args,
- };
--#endif
- #ifdef MODULE
- static int __init dsp_octwareec_init (void)
-diff -Naur mISDN.git.org/drivers/isdn/hardware/mISDN/dsp_oslec.c mISDN.git/drivers/isdn/hardware/mISDN/dsp_oslec.c
---- mISDN.git.org/drivers/isdn/hardware/mISDN/dsp_oslec.c      2009-01-22 14:26:03.000000000 +0100
-+++ mISDN.git/drivers/isdn/hardware/mISDN/dsp_oslec.c  2009-04-04 19:09:34.000000000 +0200
-@@ -98,22 +98,6 @@
-       dsp_cancel_rx(p, data, len);
- }
--#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27)
--static struct  mISDN_dsp_element_arg args[] = {
--        { "deftaps", "128", "Set the number of taps of cancellation." },
--        { "training", "0", "Enable echotraining (0: disabled, 1: enabled)." },
--};
--
--static struct mISDN_dsp_element dsp_oslec = {
--        .name = "oslec",
--        .new = new,
--        .free = free,
--        .process_tx = process_tx,
--        .process_rx = process_rx,
--        .num_args = sizeof(args) / sizeof(struct mISDN_dsp_element_arg),
--        .args = args,
--};
--#else
- static mISDN_dsp_element_arg_t args[] = {
-       { "deftaps", "128", "Set the number of taps of cancellation." },
-       { "training", "0", "Enable echotraining (0: disabled, 1: enabled)." },
-@@ -128,7 +112,6 @@
-       .num_args = sizeof(args) / sizeof(mISDN_dsp_element_arg_t),
-       .args = args,
- };
--#endif
- #ifdef MODULE
- static int __init dsp_oslec_init (void)
-diff -Naur mISDN.git.org/drivers/isdn/hardware/mISDN/dsp_pipeline.c mISDN.git/drivers/isdn/hardware/mISDN/dsp_pipeline.c
---- mISDN.git.org/drivers/isdn/hardware/mISDN/dsp_pipeline.c   2009-01-22 14:26:03.000000000 +0100
-+++ mISDN.git/drivers/isdn/hardware/mISDN/dsp_pipeline.c       2009-04-04 19:13:05.000000000 +0200
-@@ -36,11 +36,7 @@
- /* uncomment for debugging */
- /*#define PIPELINE_DEBUG*/
--#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27)
--extern struct mISDN_dsp_element *dsp_hwec;
--#else
- extern mISDN_dsp_element_t *dsp_hwec;
--#endif
- extern void dsp_hwec_enable          (dsp_t *dsp, const char *arg);
- extern void dsp_hwec_disable         (dsp_t *dsp);
-@@ -48,21 +44,13 @@
- extern void dsp_hwec_exit            (void);
- typedef struct _dsp_pipeline_entry {
--#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27)
--      struct mISDN_dsp_element *elem;
--#else
-       mISDN_dsp_element_t *elem;
--#endif
-       void                *p;
-       struct list_head     list;
- } dsp_pipeline_entry_t;
- typedef struct _dsp_element_entry {
--#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27)
--      struct mISDN_dsp_element *elem;
--      struct device  dev;
--
--#elif LINUX_VERSION_CODE == KERNEL_VERSION(2, 6, 26)
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 26)
-       mISDN_dsp_element_t *elem;
-       struct device dev;
-@@ -95,11 +83,7 @@
- #endif
- };
--#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27)
--static ssize_t attr_show_args (struct device *dev, struct device_attribute *attr, char *buf) {
--      struct mISDN_dsp_element *elem = dev_get_drvdata(dev);
--
--#elif LINUX_VERSION_CODE == KERNEL_VERSION(2, 6, 26)
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 26)
- static ssize_t attr_show_args (struct device *dev, struct device_attribute *attr, char *buf) {
-         mISDN_dsp_element_t *elem = dev_get_drvdata(dev);
-@@ -125,14 +109,7 @@
-       return(len);
- }
--#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27)
--static struct device_attribute element_attributes[] = {
--        __ATTR(args, 0444, attr_show_args, NULL),
--};
--
--int mISDN_dsp_element_register (struct mISDN_dsp_element *elem) {
--
--#elif LINUX_VERSION_CODE == KERNEL_VERSION(2, 6, 26)
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 26)
- static struct device_attribute element_attributes[] = {
-         __ATTR(args, 0444, attr_show_args, NULL),
- };
-@@ -201,12 +178,7 @@
-       return re;
- }
--#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27)
--void mISDN_dsp_element_unregister (struct mISDN_dsp_element *elem) {
--
--#else
- void mISDN_dsp_element_unregister (mISDN_dsp_element_t *elem) {
--#endif
-       dsp_element_entry_t *entry, *n;
-       u_long flags;
-@@ -319,11 +291,7 @@
-       char *dup, *tok, *name, *args;
-       dsp_element_entry_t *entry, *n;
-       dsp_pipeline_entry_t *pipeline_entry;
--#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27)
--      struct mISDN_dsp_element *elem;
--#else
-       mISDN_dsp_element_t *elem;
--#endif
-       u_long elements_flags, pipeline_flags;
-       if (!pipeline)
diff --git a/src/patches/module-init-tools-3.2.2-modprobe-1.patch b/src/patches/module-init-tools-3.2.2-modprobe-1.patch
deleted file mode 100644 (file)
index c2e5f26..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-Submitted By: Bruce Dubbs (bdubbs at linuxfromscratch dot org)
-Date: 2006-07-15
-Initial Package Version: 3.2.2
-Origin: 
-Upstream Status: This is fixed in 3.3-pre1
-Description: Updates modprobe functionality to fix problem where 
-aliases don't quite work properly 
-            
---- module-init-tools-3.2.2/modprobe.c  2005-12-01 15:42:09.000000000 -0800
-+++ module-init-tools-3.3-pre1/modprobe.c   2006-02-04 15:18:07.000000000 -0800
-@@ -990,13 +990,27 @@
-       return ret;
- }
-+/* Careful!  Don't munge - in [ ] as per Debian Bug#350915 */
- static char *underscores(char *string)
- {
-       if (string) {
-               unsigned int i;
--              for (i = 0; string[i]; i++)
--                      if (string[i] == '-')
--                              string[i] = '_';
-+        int inbracket = 0;
-+        for (i = 0; string[i]; i++) {
-+            switch (string[i]) {
-+            case '[':
-+                inbracket++;
-+                break;
-+            case ']':
-+                inbracket--;
-+                break;
-+            case '-':
-+                if (!inbracket)
-+                    string[i] = '_';
-+        }
-+    }
-+    if (inbracket)
-+        warn("Unmatched bracket in %s\n", string);
-       }
-       return string;
- }
diff --git a/src/patches/mpg123-0.59r-makefile.patch b/src/patches/mpg123-0.59r-makefile.patch
deleted file mode 100644 (file)
index 6afb0f2..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
---- Makefile   1999-06-15 22:39:06.000000000 +0200
-+++ Makefile   2008-04-13 15:26:55.000000000 +0200
-@@ -104,8 +104,7 @@
- linux:
-       $(MAKE) CC=gcc LDFLAGS= \
--              OBJECTS='decode_i386.o dct64_i386.o decode_i586.o \
--                      audio_oss.o term.o' \
-+              OBJECTS='decode_i386.o dct64_i386.o decode_i586.o audio_oss.o term.o' \
-               CFLAGS='-DI386_ASSEM -DPENTIUM_OPT -DREAL_IS_FLOAT -DLINUX \
-                       -DREAD_MMAP -DOSS -DTERM_CONTROL\
-                       -Wall -O2 -m486 \
diff --git a/src/patches/mpg123-0.59r-security-1.patch b/src/patches/mpg123-0.59r-security-1.patch
deleted file mode 100644 (file)
index 8d2547d..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-Submitted By: David Jensen (djensen at linuxfromscratch dot org)
-Date: 2005-07-23
-Initial Package Version: 0.59r
-Origin: Debian
-Upstream Status: not maintained
-Description: Fixes buffer overflow vulnerablity (CAN-2004-0805)
-$LastChangedBy: djensen $
-$Date: 2005-07-26 21:17:28 -0600 (Tue, 26 Jul 2005) $
-
-diff -Naur mpg123-0.59r.orig/layer2.c mpg123-0.59r/layer2.c
---- mpg123-0.59r.orig/layer2.c 1999-02-10 06:13:06.000000000 -0600
-+++ mpg123-0.59r/layer2.c      2005-07-23 16:44:07.000000000 -0500
-@@ -265,6 +265,11 @@
-   fr->jsbound = (fr->mode == MPG_MD_JOINT_STEREO) ?
-      (fr->mode_ext<<2)+4 : fr->II_sblimit;
-+  if (fr->jsbound > fr->II_sblimit) {
-+        fprintf(stderr, "Truncating stereo boundary to sideband limit.\n");
-+        fr->jsbound=fr->II_sblimit;
-+  }
-+  
-   if(stereo == 1 || single == 3)
-     single = 0;
diff --git a/src/patches/openswan-2.4.12-startklips-1.patch b/src/patches/openswan-2.4.12-startklips-1.patch
deleted file mode 100644 (file)
index f90f9fe..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
---- _startklips.old    2008-05-17 15:41:46.000000000 +0200
-+++ _startklips        2008-05-17 15:52:10.000000000 +0200
-@@ -104,23 +104,35 @@
-       # figure out ifconfig for interface
-       addr=
--      eval `ifconfig $phys |
--              awk '$1 == "inet" && $2 ~ /^addr:/ && $NF ~ /^Mask:/ {
--                      gsub(/:/, " ", $0)
--                      print "addr=" $3
--                      other = $5
--                      if ($4 == "Bcast")
--                              print "type=broadcast"
--                      else if ($4 == "P-t-P")
--                              print "type=pointopoint"
--                      else if (NF == 5) {
--                              print "type="
--                              other = ""
--                      } else
--                              print "type=unknown"
--                      print "otheraddr=" other
--                      print "mask=" $NF
--              }'`
-+      eval `ip addr show $phys | awk '$3 ~ /BROADCAST|POINTOPOINT/ { 
-+                              if ($3 ~ /BROADCAST/) 
-+                                      print "type=broadcast"; 
-+                              else if ($3 ~ /POINTOPOINT/) 
-+                                      print "type=pointopoint";
-+                              else {
-+                                      print "type=";
-+                              }
-+                      }'`
-+                      
-+      if [ "$type" == "broadcast" ]; then
-+              eval `ip addr show $phys | awk '$1 == "inet"  { gsub(/\//, " "); 
-+                                      print "addr=" $2;
-+                                      print "mask=" $3;
-+                                      print "otheraddr=" $5;
-+                                      }'`
-+      elif [ "$type" == "pointopoint" ]; then
-+              eval `ip addr show $phys | awk '$1 == "inet"  { gsub(/\//, " "); 
-+                                      print "addr=" $2;
-+                                      print "mask=" $5;
-+