OSDN Git Service

279e7b3dca643b4b8567e66e57008c0e2e079ce8
[immortalwrt/immortalwrt.git] / package / kernel / shortcut-fe / src / sfe.h
1 /*
2  * sfe.h
3  *      Shortcut forwarding engine.
4  *
5  * Copyright (c) 2013-2017 The Linux Foundation. All rights reserved.
6  * Permission to use, copy, modify, and/or distribute this software for
7  * any purpose with or without fee is hereby granted, provided that the
8  * above copyright notice and this permission notice appear in all copies.
9  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
15  * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16  */
17
18
19 /*
20  * The following are debug macros used throughout the SFE.
21  *
22  * The DEBUG_LEVEL enables the followings based on its value,
23  * when dynamic debug option is disabled.
24  *
25  * 0 = OFF
26  * 1 = ASSERTS / ERRORS
27  * 2 = 1 + WARN
28  * 3 = 2 + INFO
29  * 4 = 3 + TRACE
30  */
31 #define DEBUG_LEVEL 2
32
33 #if (DEBUG_LEVEL < 1)
34 #define DEBUG_ASSERT(s, ...)
35 #define DEBUG_ERROR(s, ...)
36 #else
37 #define DEBUG_ASSERT(c, s, ...) if (!(c)) { pr_emerg("ASSERT: %s:%d:" s, __FUNCTION__, __LINE__, ##__VA_ARGS__); BUG(); }
38 #define DEBUG_ERROR(s, ...) pr_err("%s:%d:" s, __FUNCTION__, __LINE__, ##__VA_ARGS__)
39 #endif
40
41 #if defined(CONFIG_DYNAMIC_DEBUG)
42 /*
43  * Compile messages for dynamic enable/disable
44  */
45 #define DEBUG_WARN(s, ...) pr_debug("%s[%d]:" s, __FUNCTION__, __LINE__, ##__VA_ARGS__)
46 #define DEBUG_INFO(s, ...) pr_debug("%s[%d]:" s, __FUNCTION__, __LINE__, ##__VA_ARGS__)
47 #define DEBUG_TRACE(s, ...) pr_debug("%s[%d]:" s, __FUNCTION__, __LINE__, ##__VA_ARGS__)
48 #else
49
50 /*
51  * Statically compile messages at different levels
52  */
53 #if (DEBUG_LEVEL < 2)
54 #define DEBUG_WARN(s, ...)
55 #else
56 #define DEBUG_WARN(s, ...) pr_warn("%s[%d]:" s, __FUNCTION__, __LINE__, ##__VA_ARGS__)
57 #endif
58
59 #if (DEBUG_LEVEL < 3)
60 #define DEBUG_INFO(s, ...)
61 #else
62 #define DEBUG_INFO(s, ...) pr_notice("%s[%d]:" s, __FUNCTION__, __LINE__, ##__VA_ARGS__)
63 #endif
64
65 #if (DEBUG_LEVEL < 4)
66 #define DEBUG_TRACE(s, ...)
67 #else
68 #define DEBUG_TRACE(s, ...) pr_info("%s[%d]:" s, __FUNCTION__, __LINE__, ##__VA_ARGS__)
69 #endif
70 #endif
71
72 #ifdef CONFIG_NF_FLOW_COOKIE
73 typedef int (*flow_cookie_set_func_t)(u32 protocol, __be32 src_ip, __be16 src_port,
74                                       __be32 dst_ip, __be16 dst_port, u16 flow_cookie);
75 /*
76  * sfe_register_flow_cookie_cb
77  *      register a function in SFE to let SFE use this function to configure flow cookie for a flow
78  *
79  * Hardware driver which support flow cookie should register a callback function in SFE. Then SFE
80  * can use this function to configure flow cookie for a flow.
81  * return: 0, success; !=0, fail
82  */
83 int sfe_register_flow_cookie_cb(flow_cookie_set_func_t cb);
84
85 /*
86  * sfe_unregister_flow_cookie_cb
87  *      unregister function which is used to configure flow cookie for a flow
88  *
89  * return: 0, success; !=0, fail
90  */
91 int sfe_unregister_flow_cookie_cb(flow_cookie_set_func_t cb);
92
93 typedef int (*sfe_ipv6_flow_cookie_set_func_t)(u32 protocol, __be32 src_ip[4], __be16 src_port,
94                                                 __be32 dst_ip[4], __be16 dst_port, u16 flow_cookie);
95
96 /*
97  * sfe_ipv6_register_flow_cookie_cb
98  *      register a function in SFE to let SFE use this function to configure flow cookie for a flow
99  *
100  * Hardware driver which support flow cookie should register a callback function in SFE. Then SFE
101  * can use this function to configure flow cookie for a flow.
102  * return: 0, success; !=0, fail
103  */
104 int sfe_ipv6_register_flow_cookie_cb(sfe_ipv6_flow_cookie_set_func_t cb);
105
106 /*
107  * sfe_ipv6_unregister_flow_cookie_cb
108  *      unregister function which is used to configure flow cookie for a flow
109  *
110  * return: 0, success; !=0, fail
111  */
112 int sfe_ipv6_unregister_flow_cookie_cb(sfe_ipv6_flow_cookie_set_func_t cb);
113
114 #endif /*CONFIG_NF_FLOW_COOKIE*/