~ubuntu-branches/ubuntu/hardy/iproute/hardy-proposed

« back to all changes in this revision

Viewing changes to debian/patches/f_u32

  • Committer: Bazaar Package Importer
  • Author(s): Scott James Remnant
  • Date: 2006-07-06 10:23:46 UTC
  • mfrom: (1.1.2 upstream)
  • Revision ID: james.westby@ubuntu.com-20060706102346-tyd1mfjvay0nmz90
Tags: 20051007-4ubuntu1
* Merge from debian unstable, remaining changes:
  - versioned dependency on linux-kernel-headers,
  - MAX_ROUNDS patch to ip/ipaddress.c

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#! /bin/sh -e
 
2
## 
 
3
## All lines beginning with `## DP:' are a description of the patch.
 
4
## DP: Fixes the u32 calculation for 2.6 kernel - by Russell Stuart <russell-debian@stuart.id.au> 
 
5
 
 
6
[ -f debian/patches/00patch-opts ] && . debian/patches/00patch-opts
 
7
patch_opts="${patch_opts:--f --no-backup-if-mismatch}"
 
8
 
 
9
if [ $# -ne 1 ]; then
 
10
    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
 
11
    exit 1
 
12
fi
 
13
case "$1" in
 
14
       -patch) patch $patch_opts -p1 < $0;;
 
15
       -unpatch) patch $patch_opts -p1 -R < $0;;
 
16
        *)
 
17
                echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
 
18
                exit 1;;
 
19
esac
 
20
 
 
21
exit 0
 
22
@DPATCH@
 
23
diff -Nur iproute-20051007.keep/tc/f_u32.c iproute-20051007/tc/f_u32.c
 
24
--- iproute-20051007.keep/tc/f_u32.c    2006-01-12 17:34:37.000000000 +1000
 
25
+++ iproute-20051007/tc/f_u32.c 2006-02-07 17:10:29.000000000 +1000
 
26
@@ -17,6 +17,7 @@
 
27
 #include <syslog.h>
 
28
 #include <fcntl.h>
 
29
 #include <sys/socket.h>
 
30
+#include <sys/utsname.h>
 
31
 #include <netinet/in.h>
 
32
 #include <arpa/inet.h>
 
33
 #include <string.h>
 
34
@@ -874,6 +875,7 @@
 
35
                                htid = (handle&0xFFFFF000);
 
36
                } else if (strcmp(*argv, "sample") == 0) {
 
37
                        __u32 hash;
 
38
+                       struct utsname utsname;
 
39
                        struct {
 
40
                                struct tc_u32_sel sel;
 
41
                                struct tc_u32_key keys[4];
 
42
@@ -889,8 +891,19 @@
 
43
                                return -1;
 
44
                        }
 
45
                        hash = sel2.sel.keys[0].val&sel2.sel.keys[0].mask;
 
46
-                       hash ^= hash>>16;
 
47
-                       hash ^= hash>>8;
 
48
+                       uname(&utsname);
 
49
+                       if (strncmp(utsname.release, "2.4.", 4) == 0) {
 
50
+                               hash ^= hash>>16;
 
51
+                               hash ^= hash>>8;
 
52
+                       }
 
53
+                       else {
 
54
+                               __u32 mask = sel2.sel.keys[0].mask;
 
55
+                               while (mask && !(mask & 1)) {
 
56
+                                       mask >>= 1;
 
57
+                                       hash >>= 1;
 
58
+                               }
 
59
+                               hash &= 0xFF;
 
60
+                       }
 
61
                        htid = ((hash<<12)&0xFF000)|(htid&0xFFF00000);
 
62
                        sample_ok = 1;
 
63
                        continue;