• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2020 HiSilicon (Shanghai) Technologies CO., LIMITED.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  * Description: hmac_hook.c 的头文件
15  * Date: 2020-07-07
16  */
17 
18 #ifndef __HMAC_HOOK_H__
19 #define __HMAC_HOOK_H__
20 
21 /*****************************************************************************
22   1 其他头文件包吿
23 *****************************************************************************/
24 #include "hmac_main.h"
25 
26 #ifdef __cplusplus
27 #if __cplusplus
28 extern "C" {
29 #endif
30 #endif
31 
32 /*****************************************************************************
33   Hook机制对外API接口以及结构体定义
34 *****************************************************************************/
35 /* Hook点定义 */
36 enum HMAC_HOOK_NUM {
37     /* HMAC侧数据帧和管理帧转发Hook点定义 */
38     HMAC_FRAME_HOOK_START                 = 0,
39     HMAC_FRAME_MGMT_RX_EVENT_D2H = HMAC_FRAME_HOOK_START,
40     HMAC_FRAME_MGMT_RX_EVENT_FEATURE,
41     HMAC_FRAME_DATA_RX_EVENT_D2H,        /* DMAC to HAMC DRX事件处理入口 */
42     HMAC_FRAME_DATA_RX_EVENT_H2O,        /* HMAC to OS 交操作系统接收入口 */
43     HMAC_FRAME_DATA_TX_BRIDGE_IN,        /* 报文处理入口 */
44     HMAC_FRAME_DATA_TX_EVENT_H2D,        /* HMAC to DMAC DTX事件发送前 */
45     HMAC_FRAME_HOOK_END
46 };
47 
48 enum HMAC_HOOK_PRI {
49     HMAC_HOOK_PRI_HIGHEST  = 0,
50     HMAC_HOOK_PRI_HIGH     = 1,
51     HMAC_HOOK_PRI_MIDDLE   = 2,
52     HMAC_HOOK_PRI_LOW      = 3,
53     HMAC_HOOK_PRI_NUM
54 };
55 
56 typedef osal_u32 (*hmac_hookfn)(oal_netbuf_stru **netbuf, hmac_vap_stru *hmac_vap);
57 
58 typedef struct {
59     struct osal_list_head list_entry;
60     osal_u16 hooknum;
61     osal_u16 priority;
62     hmac_hookfn hook_func;
63 } hmac_netbuf_hook_stru;
64 
65 /*
66   Hook函数参数定义如下
67   Hook函数的合法返回值只有以下三个,返回其他值会造成异常
68   OAL_CONTINUE: 当前Hook执行完成,判定报文正常处理,并继续后续Hook执行, Hook机制最终返回OAL_CONTINUE
69   OAL_SUCC: Hook判定执行完当前Hook之后,跳过后续Hook执行返回主流程,Hook机制最终返回OAL_CONTINUE
70   OAL_FAIL: Hook判定需要异常返回,Hook机制最终返回OAL_FAIL
71 */
72 typedef osal_u32 hmac_netbuf_hookfn(oal_netbuf_stru **netbuf, hmac_vap_stru *hmac_vap);
73 
74 /*
75    功能: 注册netbuf类型的Hook函数
76    参数: hooknum -- HMAC_HOOK_NUM, priority -- HMAC_HOOK_PRI, hook -- Hook函数
77    返回值:成功返回OAL_SUCC, 失败返回OAL_FAIL
78 */
79 osal_u32 hmac_register_netbuf_hook(hmac_netbuf_hook_stru *netbuf_hook_new);
80 /*
81    功能: 注销netbuf类型的Hook函数
82    参数: hooknum -- HMAC_HOOK_NUM, priority -- HMAC_HOOK_PRI
83    返回值:无
84 */
85 osal_void hmac_unregister_netbuf_hook(hmac_netbuf_hook_stru *netbuf_hook);
86 /*
87    功能: 按注册优先级执行指定Hook点已注册的Hook函数
88    参数: netbuf - 指向待处理报文缓存的2级指针 hmac_vap - dmac vap指针 hooknum - Hook点
89    返回值:OAL_CONTINUE - Hook执行成功并需要继续主流程处理; OAL_SUCC - 执行成功并退出主流程; OAL_FAIL - 需要异常返回
90 */
91 osal_u32 hmac_call_netbuf_hooks(oal_netbuf_stru **netbuf, hmac_vap_stru *hmac_vap, osal_u8 hooknum);
92 
93 osal_void hmac_hook_init(osal_void);
94 osal_void hmac_hook_exit(osal_void);
95 
96 #ifdef __cplusplus
97 #if __cplusplus
98 }
99 #endif
100 #endif
101 
102 #endif /* end of hmac_hook.h */
103