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