3f97a3d5af19c456e25fa6683f764d068c24ad0e
[~tnikolova/compat/.git] / include / linux / compat-3.5.h
1 #ifndef LINUX_3_5_COMPAT_H
2 #define LINUX_3_5_COMPAT_H
3
4 #include <linux/version.h>
5 #include <linux/fs.h>
6 #include <linux/etherdevice.h>
7 #include <linux/net.h>
8
9 #if (LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0))
10
11 /*
12  * This backports:
13  *
14  *   From a3860c1c5dd1137db23d7786d284939c5761d517 Mon Sep 17 00:00:00 2001
15  *   From: Xi Wang <xi.wang@gmail.com>
16  *   Date: Thu, 31 May 2012 16:26:04 -0700
17  *   Subject: [PATCH] introduce SIZE_MAX
18  */
19
20 #define SIZE_MAX    (~(size_t)0)
21
22
23 #include <linux/pkt_sched.h>
24
25 /*
26  * This backports:
27  *
28  *   From 76e3cc126bb223013a6b9a0e2a51238d1ef2e409 Mon Sep 17 00:00:00 2001
29  *   From: Eric Dumazet <edumazet@google.com>
30  *   Date: Thu, 10 May 2012 07:51:25 +0000
31  *   Subject: [PATCH] codel: Controlled Delay AQM
32  */
33
34 /* CODEL */
35
36 enum {
37         TCA_CODEL_UNSPEC,
38         TCA_CODEL_TARGET,
39         TCA_CODEL_LIMIT,
40         TCA_CODEL_INTERVAL,
41         TCA_CODEL_ECN,
42         __TCA_CODEL_MAX
43 };
44
45 #define TCA_CODEL_MAX   (__TCA_CODEL_MAX - 1)
46
47 struct tc_codel_xstats {
48         __u32   maxpacket; /* largest packet we've seen so far */
49         __u32   count;     /* how many drops we've done since the last time we
50                             * entered dropping state
51                             */
52         __u32   lastcount; /* count at entry to dropping state */
53         __u32   ldelay;    /* in-queue delay seen by most recently dequeued packet */
54         __s32   drop_next; /* time to drop next packet */
55         __u32   drop_overlimit; /* number of time max qdisc packet limit was hit */
56         __u32   ecn_mark;  /* number of packets we ECN marked instead of dropped */
57         __u32   dropping;  /* are we in dropping state ? */
58 };
59
60 /* This backports:
61  *
62  * commit 4b549a2ef4bef9965d97cbd992ba67930cd3e0fe
63  * Author: Eric Dumazet <edumazet@google.com>
64  * Date:   Fri May 11 09:30:50 2012 +0000
65  *    fq_codel: Fair Queue Codel AQM
66  */
67
68 /* FQ_CODEL */
69
70 enum {
71         TCA_FQ_CODEL_UNSPEC,
72         TCA_FQ_CODEL_TARGET,
73         TCA_FQ_CODEL_LIMIT,
74         TCA_FQ_CODEL_INTERVAL,
75         TCA_FQ_CODEL_ECN,
76         TCA_FQ_CODEL_FLOWS,
77         TCA_FQ_CODEL_QUANTUM,
78         __TCA_FQ_CODEL_MAX
79 };
80
81 #define TCA_FQ_CODEL_MAX        (__TCA_FQ_CODEL_MAX - 1)
82
83 enum {
84         TCA_FQ_CODEL_XSTATS_QDISC,
85         TCA_FQ_CODEL_XSTATS_CLASS,
86 };
87
88 struct tc_fq_codel_qd_stats {
89         __u32   maxpacket;      /* largest packet we've seen so far */
90         __u32   drop_overlimit; /* number of time max qdisc
91                                  * packet limit was hit
92                                  */
93         __u32   ecn_mark;       /* number of packets we ECN marked
94                                  * instead of being dropped
95                                  */
96         __u32   new_flow_count; /* number of time packets
97                                  * created a 'new flow'
98                                  */
99         __u32   new_flows_len;  /* count of flows in new list */
100         __u32   old_flows_len;  /* count of flows in old list */
101 };
102
103 struct tc_fq_codel_cl_stats {
104         __s32   deficit;
105         __u32   ldelay;         /* in-queue delay seen by most recently
106                                  * dequeued packet
107                                  */
108         __u32   count;
109         __u32   lastcount;
110         __u32   dropping;
111         __s32   drop_next;
112 };
113
114 struct tc_fq_codel_xstats {
115         __u32   type;
116         union {
117                 struct tc_fq_codel_qd_stats qdisc_stats;
118                 struct tc_fq_codel_cl_stats class_stats;
119         };
120 };
121
122
123 /* Backports tty_lock: Localise the lock */
124 #define tty_lock(__tty) tty_lock()
125 #define tty_unlock(__tty) tty_unlock()
126
127 /* Backport ether_addr_equal */
128 static inline bool ether_addr_equal(const u8 *addr1, const u8 *addr2)
129 {
130     return !compare_ether_addr(addr1, addr2);
131 }
132
133 #define net_ratelimited_function(function, ...)                 \
134 do {                                                            \
135         if (net_ratelimit())                                    \
136                 function(__VA_ARGS__);                          \
137 } while (0)
138
139 #define net_emerg_ratelimited(fmt, ...)                         \
140         net_ratelimited_function(pr_emerg, fmt, ##__VA_ARGS__)
141 #define net_alert_ratelimited(fmt, ...)                         \
142         net_ratelimited_function(pr_alert, fmt, ##__VA_ARGS__)
143 #define net_crit_ratelimited(fmt, ...)                          \
144         net_ratelimited_function(pr_crit, fmt, ##__VA_ARGS__)
145 #define net_err_ratelimited(fmt, ...)                           \
146         net_ratelimited_function(pr_err, fmt, ##__VA_ARGS__)
147 #define net_notice_ratelimited(fmt, ...)                        \
148         net_ratelimited_function(pr_notice, fmt, ##__VA_ARGS__)
149 #define net_warn_ratelimited(fmt, ...)                          \
150         net_ratelimited_function(pr_warn, fmt, ##__VA_ARGS__)
151 #define net_info_ratelimited(fmt, ...)                          \
152         net_ratelimited_function(pr_info, fmt, ##__VA_ARGS__)
153 #define net_dbg_ratelimited(fmt, ...)                           \
154         net_ratelimited_function(pr_debug, fmt, ##__VA_ARGS__)
155
156 #endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0)) */
157
158 #endif /* LINUX_3_5_COMPAT_H */