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