9c947454efc2bf16a404cf01063e94241cd56601
[cascardo/ovs.git] / datapath / linux / compat / include / linux / net.h
1 #ifndef __LINUX_NET_WRAPPER_H
2 #define __LINUX_NET_WRAPPER_H 1
3
4 #include_next <linux/net.h>
5 #include <linux/types.h>
6
7 #ifndef net_ratelimited_function
8 #define net_ratelimited_function(function, ...)                 \
9 do {                                                            \
10         if (net_ratelimit())                                    \
11                 function(__VA_ARGS__);                          \
12 } while (0)
13
14 #define net_emerg_ratelimited(fmt, ...)                         \
15         net_ratelimited_function(pr_emerg, fmt, ##__VA_ARGS__)
16 #define net_alert_ratelimited(fmt, ...)                         \
17         net_ratelimited_function(pr_alert, fmt, ##__VA_ARGS__)
18 #define net_crit_ratelimited(fmt, ...)                          \
19         net_ratelimited_function(pr_crit, fmt, ##__VA_ARGS__)
20 #define net_err_ratelimited(fmt, ...)                           \
21         net_ratelimited_function(pr_err, fmt, ##__VA_ARGS__)
22 #define net_notice_ratelimited(fmt, ...)                        \
23         net_ratelimited_function(pr_notice, fmt, ##__VA_ARGS__)
24 #define net_warn_ratelimited(fmt, ...)                          \
25         net_ratelimited_function(pr_warn, fmt, ##__VA_ARGS__)
26 #define net_info_ratelimited(fmt, ...)                          \
27         net_ratelimited_function(pr_info, fmt, ##__VA_ARGS__)
28 #define net_dbg_ratelimited(fmt, ...)                           \
29         net_ratelimited_function(pr_debug, fmt, ##__VA_ARGS__)
30 #endif
31
32 #ifndef net_get_random_once
33 #define __net_get_random_once rpl___net_get_random_once
34 bool rpl___net_get_random_once(void *buf, int nbytes, bool *done,
35                            atomic_t *done_key);
36
37 #define ___NET_RANDOM_STATIC_KEY_INIT   ATOMIC_INIT(0)
38
39
40 #define net_get_random_once(buf, nbytes)                        \
41 ({                                                              \
42         bool ___ret = false;                                    \
43         static bool ___done = false;                            \
44         static atomic_t ___done_key =                           \
45                         ___NET_RANDOM_STATIC_KEY_INIT;          \
46         if (!atomic_read(&___done_key))                         \
47                 ___ret = __net_get_random_once(buf,             \
48                                                nbytes,          \
49                                                &___done,        \
50                                                &___done_key);   \
51         ___ret;                                                 \
52 })
53 #endif
54
55 #endif