WS63 SDK 文档 7021f4f@fbb_ws63
ws63 和 ws63e 解决方案的 SDK 文档
载入中...
搜索中...
未找到
hmac_m2u.h
浏览该文件的文档.
1/*
2 * Copyright (c) HiSilicon (Shanghai) Technologies Co., Ltd. 2014-2023. All rights reserved.
3 * Description: hmac_m2u.c的头文件
4 */
5
6#ifndef __HMAC_M2U_H__
7#define __HMAC_M2U_H__
8
9/*****************************************************************************
10 1 其他头文件包含
11*****************************************************************************/
12#include "oal_netbuf_ext.h"
13#include "oal_ext_if.h"
14#include "oam_ext_if.h"
15#include "mac_frame.h"
16#include "hmac_main.h"
17#include "hmac_user.h"
18#include "hmac_vap.h"
19#include "frw_ext_if.h"
20
21#ifdef __cplusplus
22#if __cplusplus
23extern "C" {
24#endif
25#endif
26
27#undef THIS_FILE_ID
28#define THIS_FILE_ID OAM_FILE_ID_HMAC_M2U_H
29
40
41/*****************************************************************************
42 2 宏定义
43*****************************************************************************/
44#define HMAC_M2U_GRPADDR_FILTEROUT_NUM 8
45#define HMAC_M2U_DENY_GROUP 4026531585UL /* 组播组黑名单 239.255.255.1 */
46#define HMAC_M2U_MIN_DENY_GROUP 3758096384UL /* 最小组播组地址 224.0.0.0 */
47#define HMAC_M2U_MAX_DENY_GROUP 4026531839UL /* 最大组播组地址 239.255.255.255 */
48#define HMAC_M2U_SPECIAL_GROUP1 3758096385UL /* SPECIAL GROUP1 224.0.0.1 */
49#define HMAC_M2U_SPECIAL_GROUP2 3758096386UL /* SPECIAL GROUP2 224.0.0.2 */
50#define HMAC_M2U_RIPV2_GROUP 3758096393UL /* RIPV2 GROUP 224.0.0.9 */
51#define HMAC_M2U_SPECIAL_GROUP3 3758096406UL /* SPECIAL GROUP3 224.0.0.22 */
52#define HMAC_M2U_UPNP_GROUP 4026531834UL /* UPNP GROUP 239.255.255.250 */
53
54#define DEFAULT_IPV4_DENY_GROUP_COUNT 1 /* 默认额外添加1个ipv4组播黑名单 */
55#define DEFAULT_IPV6_DENY_GROUP_COUNT 1 /* 默认添加1个ipv6组播黑名单 */
56#define SPECIAL_M2U_GROUP_COUNT_IPV4 5 /* 默认添加5个特殊ipv4业务组播 */
57#define SPECIAL_M2U_GROUP_COUNT_IPV6 5 /* 默认添加5个特殊ipv6业务组播 */
58#define HMAC_M2U_ADAPTIVE_STA_HASHSIZE 16 /* 配网报文统计HASH桶为16 */
59
60
61#define MAC_ETH_PROTOCOL_SUBTYPE 0x17
62#define OAL_SNAP_LEN 8 /* SNAP 头的长度 */
63#define MIN_IP_HDR_LEN 5 /* 最小IP头长度 */
64
65#define HMAC_DEF_M2U_TIMER 30000 /* timer interval as 30 secs */
66#define HMAC_DEF_M2U_TIMEOUT 120000 /* 2 minutes for timeout */
67
68#define HMAC_DEF_ADAPTIVE_TIMEOUT 1000 /* 配网模式老化时间 */
69#define HMAC_DEF_THRESHOLD_TIME 500 /* 配网模式门限时间 */
70#define HMAC_DEF_NUM_OF_ADAPTIVE 16 /* 配网模式门限个数 */
71
72#define ETHER_TYPE_VLAN_88A8 0x88a8 /* VLAN TAG TPID ,有运营商的情况 */
73#define ETHER_TYPE_VLAN_9100 0x9100 /* VLAN TAG TPID */
74#define MAX_STA_NUM_OF_ALL_GROUP 1000 /* 最多1000个叶子节点(sta个数) */
75#define MAX_STA_NUM_OF_ADAPTIVE 128 /* 最多128个配网sta个数 */
76#define MAX_STR_SIZE_OF_U8 4 /* U8类型转换成字符串最多3个字符,+1个'\0'占用4个字符 */
77
78#define HMAC_M2U_MAX_PRINT_SIZE 100 /* 最大打印字节数 */
79
80#define ether_is_with_vlan_tag(_a) \
81 (((_a) == oal_host2net_short(ETHER_TYPE_VLAN_88A8)) || \
82 ((_a) == oal_host2net_short(ETHER_TYPE_VLAN_9100)) || \
83 ((_a) == oal_host2net_short(ETHER_TYPE_VLAN)))
84
85#define oal_is_mdnsv4_mac(_a, _b) (((osal_u8)((_a)[0]) == 0x01) && ((osal_u8)((_a)[1]) == 0x00) && \
86 ((osal_u8)((_a)[2]) == 0x5e) && ((osal_u8)((_a)[3]) == 0x00) && \
87 ((osal_u8)((_a)[4]) == 0x00) && ((osal_u8)((_a)[5]) == 0xfb) && \
88 ((_b) == oal_host2net_short(ETHER_TYPE_IP)))
89#define oal_is_mdnsv6_mac(_a, _b) (((osal_u8)((_a)[0]) == 0x33) && ((osal_u8)((_a)[1]) == 0x33) && \
90 ((osal_u8)((_a)[2]) == 0x00) && ((osal_u8)((_a)[3]) == 0x00) && \
91 ((osal_u8)((_a)[4]) == 0x00) && ((osal_u8)((_a)[5]) == 0xfb) && \
92 ((_b) == oal_host2net_short(ETHER_TYPE_IPV6)))
93
94#ifdef _PRE_WLAN_FEATURE_HERA_MCAST
95/* 配网报文哈希函数定义 */
96#define hmac_adaptive_cal_hash_value(_puc_mac_addr) \
97 ((_puc_mac_addr)[ETHER_ADDR_LEN - 1] & (HMAC_M2U_ADAPTIVE_STA_HASHSIZE - 1))
98#endif
99
100/*****************************************************************************
101 3 枚举定义
102*****************************************************************************/
110
119
120typedef struct {
121#if defined(OAL_BYTE_ORDER) && defined(OAL_LITTLE_ENDIAN) && (OAL_BYTE_ORDER == OAL_LITTLE_ENDIAN)
122 osal_u32 offset : 11,
123 seq_num : 11,
124 opt_hdr_len32 : 2,
125 frame_type : 2,
126 proto : 6;
127#else /* big endian */
132 offset : 11;
133#endif
135
136/*****************************************************************************
137 4 全局变量声明
138*****************************************************************************/
139
140
141/*****************************************************************************
142 5 消息头定义
143*****************************************************************************/
144
145
146/*****************************************************************************
147 6 消息定义
148*****************************************************************************/
149
150
151/*****************************************************************************
152 7 STRUCT定义
153*****************************************************************************/
154
155/* hmac_m2u_grp_list_entry通过各组的不同地址来存储组,挂到snoop_list下 */
156// 组播组结构体
157typedef struct {
158 struct osal_list_head src_list; /* 组播组内成员的链表头 */
159 osal_u8 group_mac[WLAN_MAC_ADDR_LEN]; /* 这个组播组的组mac地址 */
160 osal_u8 sta_num; /* 记录当前组播组下sta个数 */
162 struct osal_list_head grp_entry;
163 mac_vlan_tag_stru outer_vlan_tag; /* 外层vlan tag */
164 mac_vlan_tag_stru inner_vlan_tag; /* 内层vlan tag */
166
167/* 管理组播组的snoop链表结构 */
168typedef struct {
171 struct osal_list_head grp_list; /* 组链表头 */
172 osal_u16 group_list_count; /* 组播组个数 */
174 osal_u16 total_sta_num; /* 记录当前各组播组下sta总数 */
175 osal_u8 deny_count_ipv4; /* ipv4黑名单个数 */
176 osal_u8 deny_count_ipv6; /* ipv6黑名单个数 */
177 osal_u32 special_group_ipv4[SPECIAL_M2U_GROUP_COUNT_IPV4]; /* ipv4特殊组播IP */
178 osal_u8 special_group_ipv6[SPECIAL_M2U_GROUP_COUNT_IPV6][OAL_IPV6_ADDR_SIZE]; /* ipv6特殊组播IP */
180
188// 组内成员站点信息 (STA )
189typedef struct {
190 osal_u8 src_ip_addr[OAL_IPV6_ADDR_SIZE]; // 组播源IP地址
193 osal_u8 grp_member_mac[WLAN_MAC_ADDR_LEN]; // 该STA MAC 地址
195 osal_u8 src_ip_addr_len; // ip 地址长度,用于兼容IPV4、IPV6
196 struct osal_list_head member_entry;
198
199
200/* hmac_m2u_list_update_stru 结构用来传递参数给list update函数来完成特定group的成员更新 */
201typedef struct {
202 osal_u8 src_ip_addr[OAL_IPV6_ADDR_SIZE]; /* 源地址 */
203 osal_u8 grp_mac[WLAN_MAC_ADDR_LEN]; /* 需要加入的组播组mac地址 */
204 osal_u8 new_member_mac[WLAN_MAC_ADDR_LEN]; /* 需要进行更新的组播成员mac地址 */
205 osal_u32 timestamp; /* 时间戳 */
206 hmac_vap_stru *hmac_vap; /* vap指针 */
207 hmac_user_stru *hmac_user; /* user指针 */
208 mac_vlan_tag_stru outer_vlan_tag; /* 外层vlan tag */
209 mac_vlan_tag_stru inner_vlan_tag; /* 内层vlan tag */
210 hmac_m2u_igmp_cmd_enum_uint8 cmd; /* 加入、删除命令 */
212 osal_u8 reserve[2];
214
215#ifdef _PRE_WLAN_FEATURE_HERA_MCAST
216/* 管理配网模式STA链表结构 */
217typedef struct {
218 struct osal_list_head adaptive_entry;
219 osal_u8 adaptive_mac[WLAN_MAC_ADDR_LEN]; /* 配网STA的mac地址 */
220 osal_u8 adaptive_num; /* 记录当前收到配网组播包的个数 */
221 oal_bool_enum_uint8 m2u_adaptive; /* 配网模式判据 */
222 osal_u32 timestamp;
223 mac_vlan_tag_stru outer_vlan_tag; /* 外层vlan tag */
224 mac_vlan_tag_stru inner_vlan_tag; /* 内层vlan tag */
225} hmac_m2u_adaptive_hash_stru;
226
227typedef struct {
228 osal_u8 new_member_mac[WLAN_MAC_ADDR_LEN]; /* 需要进行更新的配网设备mac地址 */
229 osal_u8 reserve[2];
230 osal_u32 timestamp; /* 时间戳 */
231 hmac_vap_stru *hmac_vap; /* vap指针 */
232 mac_vlan_tag_stru outer_vlan_tag; /* 外层vlan tag */
233 mac_vlan_tag_stru inner_vlan_tag; /* 内层vlan tag */
234} hmac_m2u_adaptive_list_update_stru;
235#endif
236
237/* 管理整个snoop链表 */
238typedef struct {
240 oal_bool_enum_uint8 snoop_enable; /* 控制组播转单播是否使能 */
241 hmac_m2u_mcast_mode_enum_uint8 mcast_mode; /* 控制组播帧的发送方式 */
242 oal_bool_enum_uint8 discard_mcast; /* 控制组播帧是否直接丢弃 */
245 osal_u32 timeout; /* 组播组成员沉默时间 */
246#ifdef _PRE_WLAN_FEATURE_HERA_MCAST
247 struct osal_list_head m2u_adaptive_hash[HMAC_M2U_ADAPTIVE_STA_HASHSIZE]; /* 配网配网报文统计HASH表 */
248 oal_bool_enum_uint8 frequency_enable; /* 控制异频组播帧转发开关使能 */
249 oal_bool_enum_uint8 adaptive_enable; /* 控制配网模式识别使能 */
250 frw_timeout_stru adaptivelist_timer;
251 osal_u32 threshold_time; /* 配网模式门限时间 */
252 osal_u32 adaptive_timeout; /* 配网模式老化时间 */
253 osal_u8 adaptive_num; /* 配网模式门限个数 */
254 osal_u8 adaptive_sta_count; /* 配网STA个数 */
255 osal_u8 reserve[2];
256#endif
258/*****************************************************************************
259 8 UNION定义
260*****************************************************************************/
261
262
263/*****************************************************************************
264 9 OTHERS定义
265*****************************************************************************/
266
267
268/*****************************************************************************
269 10 函数声明
270*****************************************************************************/
273 oal_netbuf_stru *buf);
274extern osal_void hmac_m2u_attach(hmac_vap_stru *hmac_vap);
275extern osal_void hmac_m2u_detach(hmac_vap_stru *hmac_vap);
279extern osal_void hmac_m2u_del_ipv4_deny_entry(hmac_vap_stru *hmac_vap, const osal_u32 *pul_grpaddr);
284 oal_snoop_all_group_stru *snoop_all_grp);
289 hmac_msdu_stru *msdu);
290
291#ifdef _PRE_WLAN_FEATURE_HERA_MCAST
292extern osal_u32 hmac_m2u_multicast_drop(hmac_vap_stru *hmac_vap, oal_netbuf_stru *buf);
293extern osal_void hmac_m2u_adaptive_inspecting(hmac_vap_stru *hmac_vap, oal_netbuf_stru *buf);
294#endif
295
300
302 osal_u8 *tid);
304 oal_netbuf_stru *buf);
308 oal_netbuf_stru *pst_netbuf, hmac_msdu_stru *msdu);
311
312static osal_u32 hmac_m2u_init_weakref(osal_void) __attribute__ ((weakref("hmac_m2u_init"), used));
313static osal_void hmac_m2u_deinit_weakref(osal_void) __attribute__ ((weakref("hmac_m2u_deinit"), used));
314
315#ifdef __cplusplus
316#if __cplusplus
317}
318#endif
319#endif
320
321#endif /* end of hmac_m2u.h */
#define list_entry(cur, type, member)
Definition list.h:74
osal_u8 hmac_m2u_mcast_mode_enum_uint8
Definition hmac_m2u.h:118
osal_void hmac_m2u_detach(hmac_vap_stru *hmac_vap)
Definition hmac_m2u.c:2994
osal_u32(* hmac_m2u_snoop_convert_cb)(hmac_vap_stru *hmac_vap, oal_netbuf_stru *buf)
Definition hmac_m2u.h:306
osal_u8 hmac_m2u_igmp_cmd_enum_uint8
Definition hmac_m2u.h:109
osal_void(* hmac_m2u_cleanup_snoopwds_node_cb)(hmac_user_stru *hmac_user)
Definition hmac_m2u.h:305
osal_void hmac_m2u_snoop_inspecting(hmac_vap_stru *hmac_vap, hmac_user_stru *hmac_user, oal_netbuf_stru *buf)
Definition hmac_m2u.c:1432
osal_void hmac_m2u_add_snoop_ipv6_deny_entry(hmac_vap_stru *hmac_vap, osal_u8 *grpaddr)
Definition hmac_m2u.c:714
osal_u32 hmac_m2u_snoop_convert(hmac_vap_stru *hmac_vap, oal_netbuf_stru *buf)
Definition hmac_m2u.c:2019
osal_void(* hmac_m2u_unicast_convert_multicast_cb)(hmac_vap_stru *hmac_vap, oal_netbuf_stru *pst_netbuf, hmac_msdu_stru *msdu)
Definition hmac_m2u.h:307
osal_s32 hmac_config_m2u_snoop_on(hmac_vap_stru *hmac_vap, frw_msg *msg)
hmac_m2u_update_cmd_enum
Definition hmac_m2u.h:103
@ HMAC_M2U_CMD_INCLUDE_LIST
Definition hmac_m2u.h:105
@ HMAC_M2U_IGMP_CMD_BUTT
Definition hmac_m2u.h:107
@ HMAC_M2U_CMD_EXCLUDE_LIST
Definition hmac_m2u.h:104
osal_void hmac_m2u_unicast_convert_multicast(hmac_vap_stru *hmac_vap, oal_netbuf_stru *pst_netbuf, hmac_msdu_stru *msdu)
Definition hmac_m2u.c:2345
osal_bool(* hmac_m2u_tx_classify_special_cb)(hmac_vap_stru *hmac_vap, mac_tx_ctl_stru *tx_ctl, osal_u8 *tid)
Definition hmac_m2u.h:301
hmac_m2u_mcast_mode_enum
Definition hmac_m2u.h:111
@ HMAC_M2U_MCAST_BUTT
Definition hmac_m2u.h:116
@ HMAC_M2U_MCAST_MAITAIN
Definition hmac_m2u.h:112
@ HMAC_M2U_MCAST_TRANSLATE
Definition hmac_m2u.h:114
@ HMAC_M2U_MCAST_TUNNEL
Definition hmac_m2u.h:113
osal_void hmac_m2u_attach(hmac_vap_stru *hmac_vap)
Definition hmac_m2u.c:2933
#define SPECIAL_M2U_GROUP_COUNT_IPV6
Definition hmac_m2u.h:57
osal_s32 hmac_config_igmp_packet_xmit(hmac_vap_stru *hmac_vap, frw_msg *msg)
osal_u32 hmac_m2u_update_snoop_list(hmac_m2u_list_update_stru *list_entry)
Definition hmac_m2u.c:450
osal_void(* hmac_m2u_attach_cb)(hmac_vap_stru *hmac_vap)
Definition hmac_m2u.h:309
osal_void hmac_m2u_cleanup_snoopwds_node(hmac_user_stru *hmac_user)
Definition hmac_m2u.c:1699
osal_void hmac_m2u_del_ipv6_deny_entry(hmac_vap_stru *hmac_vap, osal_u8 *grpaddr)
Definition hmac_m2u.c:807
osal_void hmac_m2u_clear_deny_table(hmac_vap_stru *hmac_vap)
Definition hmac_m2u.c:612
#define HMAC_M2U_ADAPTIVE_STA_HASHSIZE
Definition hmac_m2u.h:58
osal_void(* hmac_m2u_snoop_inspecting_cb)(hmac_vap_stru *hmac_vap, hmac_user_stru *hmac_user, oal_netbuf_stru *buf)
Definition hmac_m2u.h:303
osal_void hmac_m2u_add_snoop_ipv4_deny_entry(hmac_vap_stru *hmac_vap, osal_u32 *pul_grpaddr)
Definition hmac_m2u.c:673
osal_u32 hmac_m2u_print_all_snoop_list(hmac_vap_stru *hmac_vap, oal_snoop_all_group_stru *snoop_all_grp)
Definition hmac_m2u.c:897
static osal_u32 used
Definition hmac_m2u.h:312
osal_u32 hmac_m2u_igmp_v1v2_update(hmac_vap_stru *hmac_vap, hmac_m2u_list_update_stru *list_entry, mac_igmp_header_stru *igmp)
Definition hmac_m2u.c:1001
#define HMAC_M2U_GRPADDR_FILTEROUT_NUM
Definition hmac_m2u.h:44
hmac_m2u_deny_table_cfg
Definition hmac_m2u.h:30
@ HMAC_H2U_DENY_TABLE_ADD_IPV4
Definition hmac_m2u.h:33
@ HMAC_H2U_DENY_TABLE_CLEAR
Definition hmac_m2u.h:32
@ HMAC_H2U_DENY_TABLE_DEL_IPV4
Definition hmac_m2u.h:35
@ HMAC_H2U_DENY_TABLE_LIST
Definition hmac_m2u.h:31
@ HMAC_H2U_DENY_TABLE_ADD_IPV6
Definition hmac_m2u.h:34
@ HMAC_H2U_DENY_TABLE_DEL_IPV6
Definition hmac_m2u.h:36
@ HMAC_M2U_DENY_TABLE_BUTT
Definition hmac_m2u.h:38
osal_s32 hmac_config_m2u_deny_table(hmac_vap_stru *hmac_vap, frw_msg *msg)
osal_void(* hmac_m2u_detach_cb)(hmac_vap_stru *hmac_vap)
Definition hmac_m2u.h:310
osal_void hmac_m2u_del_ipv4_deny_entry(hmac_vap_stru *hmac_vap, const osal_u32 *pul_grpaddr)
Definition hmac_m2u.c:757
#define SPECIAL_M2U_GROUP_COUNT_IPV4
Definition hmac_m2u.h:56
osal_s32 hmac_config_show_m2u_snoop_table(hmac_vap_stru *hmac_vap, frw_msg *msg)
osal_void hmac_m2u_show_snoop_deny_table(hmac_vap_stru *hmac_vap)
Definition hmac_m2u.c:485
#define WLAN_MAC_ADDR_LEN
Definition mac_addr.c:28
osal_u16 seq_num
Definition mac_frame_rom.h:7
#define OAL_IPV6_ADDR_SIZE
Definition oal_net_rom.h:137
osal_u8 oal_bool_enum_uint8
Definition oal_types_device_rom.h:45
int osal_s32
Definition osal_types.h:19
unsigned char osal_u8
Definition osal_types.h:11
osal_u8 osal_bool
Definition osal_types.h:27
void osal_void
Definition osal_types.h:29
unsigned int osal_u32
Definition osal_types.h:13
unsigned short osal_u16
Definition osal_types.h:12
Log message information header.
Definition log_oam_logger.h:564
Definition frw_msg_rom.h:74
Definition frw_ext_common_rom.h:20
Definition hmac_m2u.h:157
osal_u8 reserve
Definition hmac_m2u.h:161
mac_vlan_tag_stru outer_vlan_tag
Definition hmac_m2u.h:163
osal_u8 sta_num
Definition hmac_m2u.h:160
mac_vlan_tag_stru inner_vlan_tag
Definition hmac_m2u.h:164
Definition hmac_m2u.h:189
osal_u32 timestamp
Definition hmac_m2u.h:191
hmac_user_stru * hmac_user
Definition hmac_m2u.h:192
osal_u8 mode
Definition hmac_m2u.h:194
osal_u8 src_ip_addr_len
Definition hmac_m2u.h:195
Definition hmac_m2u.h:201
osal_u32 timestamp
Definition hmac_m2u.h:205
hmac_m2u_igmp_cmd_enum_uint8 cmd
Definition hmac_m2u.h:210
hmac_user_stru * hmac_user
Definition hmac_m2u.h:207
osal_u8 src_ip_addr_len
Definition hmac_m2u.h:211
mac_vlan_tag_stru outer_vlan_tag
Definition hmac_m2u.h:208
hmac_vap_stru * hmac_vap
Definition hmac_m2u.h:206
mac_vlan_tag_stru inner_vlan_tag
Definition hmac_m2u.h:209
Definition hmac_m2u.h:168
osal_u8 deny_count_ipv6
Definition hmac_m2u.h:176
osal_u16 total_sta_num
Definition hmac_m2u.h:174
osal_u16 misc
Definition hmac_m2u.h:173
osal_u16 group_list_count
Definition hmac_m2u.h:172
osal_u8 deny_count_ipv4
Definition hmac_m2u.h:175
Definition hmac_m2u.h:238
osal_u32 timeout
Definition hmac_m2u.h:245
hmac_m2u_snoop_list_stru m2u_snooplist
Definition hmac_m2u.h:239
frw_timeout_stru snooplist_timer
Definition hmac_m2u.h:244
wlan_tidno_enum_uint8 tid_num
Definition hmac_m2u.h:243
hmac_m2u_mcast_mode_enum_uint8 mcast_mode
Definition hmac_m2u.h:241
oal_bool_enum_uint8 discard_mcast
Definition hmac_m2u.h:242
oal_bool_enum_uint8 snoop_enable
Definition hmac_m2u.h:240
Definition dmac_ext_if_hcm.h:341
Definition mac_user_ext.h:519
Definition mac_vap_ext.h:2019
Definition oal_net.h:536
Definition dmac_ext_if_device_rom.h:98
Definition oal_net.h:643
Definition hmac_m2u.h:120
osal_u32 offset
Definition hmac_m2u.h:132
osal_u32 proto
Definition hmac_m2u.h:128
osal_u32 opt_hdr_len32
Definition hmac_m2u.h:130
osal_u32 frame_type
Definition hmac_m2u.h:129
osal_u32 seq_num
Definition hmac_m2u.h:131
Definition oal_net_cfg80211.h:1366
Definition osal_list.h:39
Definition oal_skbuff.h:82
osal_u8 wlan_tidno_enum_uint8
Definition wlan_types_base_rom.h:74