blob: 8c1716f520d6885dbd6c5a960653f6a70dcefe1e [file] [log] [blame]
yu.dongc33b3072024-08-21 23:14:49 -07001/*****************************************************************************
2* Copyright Statement:
3* --------------------
4* This software is protected by Copyright and the information contained
5* herein is confidential. The software may not be copied and the information
6* contained herein may not be used or disclosed except with the written
7* permission of MediaTek Inc. (C) 2018
8*
9* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
10* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
11* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
12* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
13* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
14* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
15* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
16* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
17* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
18* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
19* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
20* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
21*
22* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
23* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
24* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
25* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
26* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
27*
28* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
29* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
30* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
31* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
32* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
33*
34*****************************************************************************/
35
36/*******************************************************************************
37 * Filename:
38 * ---------
39 * dpfm_struct.h
40 *
41 * Project:
42 * --------
43 * VMOLY
44 *
45 * Description:
46 * ------------
47 *
48 *
49 * Author:
50 * -------
51 * -------
52 *
53 *==============================================================================
54 * HISTORY
55 * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
56 *------------------------------------------------------------------------------
57 * removed!
58 *
59 * removed!
60 * removed!
61 * removed!
62 * removed!
63 *
64 * removed!
65 * removed!
66 * removed!
67 *
68 * removed!
69 * removed!
70 * removed!
71 *
72 * removed!
73 * removed!
74 * removed!
75 *
76 * removed!
77 * removed!
78 * removed!
79 *
80 * removed!
81 * removed!
82 * removed!
83 *
84 * removed!
85 * removed!
86 * removed!
87 *
88 *------------------------------------------------------------------------------
89 * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
90 *==============================================================================
91 *******************************************************************************/
92#ifndef __DPFM_STRUCT_H
93#define __DPFM_STRUCT_H
94
95#include "hif_lhif.h"
96
97/*------------------------------------------------------------------------------
98 * Constant definition.
99 *----------------------------------------------------------------------------*/
100#define DPFM_MAX_FILTER_CNT 128
101#define DPFM_MAX_LAN_DEV_USER_NUM 16
102#define DPFM_HASH_TABLE_SIZE 128
103#define DPFM_MAX_HW_FILTER_CNT 128
104#define DPFM_MAX_HW_CMD_CNT 128
105
106#define DPFM_DECLARE_OBJECT \
107 kal_int32 ref_count; \
108 kal_int32 reader_cnt; \
109 kal_int32 writer_cnt;
110/*------------------------------------------------------------------------------
111 * Data Structure.
112 *----------------------------------------------------------------------------*/
113typedef struct _dpfm_ipv4_rule_t {
114 kal_uint32 private_ip;
115 kal_uint32 public_ip;
116 kal_uint32 remote_ip;
117 kal_uint16 private_port;
118 kal_uint16 public_port;
119 kal_uint16 remote_port;
120 kal_uint8 protocol;
121 kal_uint8 reserved;
122 kal_uint32 lan_netif_id;
123 kal_uint32 wan_netif_id;
124} dpfm_ipv4_rule_t;
125
126typedef struct _dpfm_ipv6_rule_t {
127 kal_uint32 private_ip[4];
128 kal_uint32 remote_ip[4];
129 kal_uint16 private_port;
130 kal_uint16 remote_port;
131 kal_uint8 protocol;
132 kal_uint8 reserved[3];
133 kal_uint32 lan_netif_id;
134 kal_uint32 wan_netif_id;
135} dpfm_ipv6_rule_t;
136
137typedef struct _dpfm_tag_packet_t {
138 kal_uint16 guard_pattern;
139 kal_uint8 version;
140 kal_uint8 tag_len;
141 union {
142 struct {
143 kal_uint8 in_netif_id;
144 kal_uint8 out_netif_id;
145 kal_uint16 port;
146 } v1;
147 struct {
148 kal_uint8 tag_info;
149 kal_uint8 reserved;
150 kal_uint16 port;
151 kal_uint32 lan_netif_id;
152 kal_uint32 ip;
153 } v2;
154 } type;
155} dpfm_tag_packet_t;
156
157typedef struct _dpfm_lan_dev_info_t {
158 kal_uint32 netif_id;
159 kal_uint8 net_type;
160 kal_bool (*notify_add_rule)(kal_int16 filter_id, kal_uint8 *tag);
161 kal_bool (*notify_match_rule)(kal_bool is_uplink, kal_int16 filter_id);
162 kal_bool (*notify_del_rule)(kal_int16 filter_id);
163} dpfm_lan_dev_info_t;
164
165typedef struct _dpfm_filter_t {
166 DPFM_DECLARE_OBJECT
167
168 kal_int16 id;
169 kal_uint8 ip_type;
170 kal_uint8 reserved;
171 union {
172 dpfm_ipv4_rule_t ipv4_rule;
173 dpfm_ipv6_rule_t ipv6_rule;
174 } rule;
175 kal_uint32 lan_netif_id;
176 kal_uint32 wan_netif_id;
177 struct _dpfm_filter_t *next_filter[2];
178 kal_uint32 last_access_time;
179 dpfm_filter_state_e state;
180} dpfm_filter_t;
181
182typedef struct _dpfm_ipv6_filter_t {
183 DPFM_DECLARE_OBJECT
184
185 kal_uint32 ip[4];
186 kal_uint8 is_valid;
187 kal_uint8 reserved[3];
188 kal_uint32 netif_id;
189} dpfm_ipv6_filter_t;
190
191typedef struct _dpfm_filter_list_t {
192 DPFM_DECLARE_OBJECT
193
194 dpfm_filter_t *filter;
195} dpfm_filter_list_t;
196
197typedef struct _dpfm_ipv6_dl_filter_cbk_context_t {
198 kal_uint8 lan_dev_id;
199 kal_uint8 reserved[3];
200 kal_uint32 lan_dev_user_id;
201} dpfm_ipv6_dl_filter_cbk_context_t;
202
203typedef struct _dpfm_lan_dev_t {
204 kal_bool is_activated;
205 dpfm_lan_dev_info_t info;
206 kal_uint32 private_ip;
207 kal_int32 ipv6_dl_filter_id[DPFM_MAX_LAN_DEV_USER_NUM][DPFM_CT_PROTOCOL_CNT];
208 kal_uint32 ipv6_dl_filter_cnt[DPFM_MAX_LAN_DEV_USER_NUM];
209 dpfm_ipv6_filter_t ipv6_dl_filters[DPFM_MAX_LAN_DEV_USER_NUM];
210 dpfm_ipv6_dl_filter_cbk_context_t ipv6_dl_filter_cbk_context[DPFM_MAX_LAN_DEV_USER_NUM];
211} dpfm_lan_dev_t;
212
213typedef struct _dpfm_ct_timeout_t {
214 kal_uint32 value;
215 kal_uint32 cnt;
216} dpfm_ct_timeout_t;
217
218typedef struct _dpfm_hw_cmd_q_t {
219 kal_bool is_send_ilm;
220 kal_uint32 read_idx;
221 kal_uint32 write_idx;
222 kal_int16 filter_id[DPFM_MAX_FILTER_CNT];
223 lhif_ul_nat_inband_data_t cmd[DPFM_MAX_FILTER_CNT];
224} dpfm_hw_cmd_q_t;
225
226typedef struct _dpfm_t {
227 kal_bool is_activated;
228 kal_uint32 user_cnt;
229 kal_uint32 ccmni_lan_netif_id;
230 kal_int16 filter_cmd_read_index;
231 kal_int16 filter_cmd_write_index;
232 kal_int16 filter_id_by_cmd_id[DPFM_MAX_HW_CMD_CNT];
233 kal_int16 filter_id_by_index[DPFM_MAX_HW_FILTER_CNT];
234 kal_uint32 filter_cnt;
235 dpfm_filter_t filters[DPFM_MAX_FILTER_CNT];
236 dpfm_filter_list_t hash_table[2][DPFM_HASH_TABLE_SIZE]; // uplink & downlink
237 dpfm_lan_dev_t lan_dev[DPFM_LAN_DEV_CNT];
238 dpfm_ct_timeout_t ct_timeout[DPFM_CT_PROTOCOL_CNT];
239 kal_bool is_filter_send_hw_cmd[DPFM_MAX_FILTER_CNT];
240 dpfm_hw_cmd_q_t hw_cmd_q;
241} dpfm_t;
242
243#ifdef __TEMP_MDDP_WH_SUPPORT__
244typedef struct _dpfm_ct_nat_table_entry_t {
245 kal_uint32 private_ip;
246 kal_uint32 target_ip;
247 kal_uint32 public_ip;
248 kal_uint16 private_port;
249 kal_uint16 target_port;
250 kal_uint16 public_port;
251 kal_uint8 protocol;
252 kal_uint8 reserved;
253 kal_uint32 timestamp;
254 kal_bool dst_nat;
255} dpfm_ct_nat_table_entry_t;
256#else
257typedef struct _dpfm_ct_nat_table_entry_t {
258 kal_uint32 private_ip;
259 kal_uint16 private_port;
260 kal_uint32 target_ip;
261 kal_uint16 target_port;
262 kal_uint32 public_ip;
263 kal_uint16 public_port;
264 kal_uint8 protocol;
265 kal_uint8 reserved;
266 kal_uint32 timestamp;
267 kal_bool dst_nat;
268} dpfm_ct_nat_table_entry_t;
269#endif
270
271/* ILM structures definition for Data Usage */
272typedef struct _dpfm_global_alert_t {
273 kal_uint32 trans_id;
274 kal_uint32 status; //unused
275 kal_uint64 measure_buffer_size;
276 kal_int8 dpfm_id;
277 kal_uint8 reserved[3];
278} dpfm_global_alert_t;
279
280typedef struct _dpfm_iquota_t {
281 kal_uint32 trans_id;
282 kal_uint32 status; //unused
283 kal_uint64 limit_buffer_size;
284 kal_int8 dpfm_id;
285 kal_uint8 reserved[3];
286} dpfm_iquota_t;
287
288typedef struct _dpfm_data_usage_cmd_struct {
289 LOCAL_PARA_HDR
290 kal_uint32 cmd;
291} dpfm_data_usage_cmd_struct;
292
293typedef struct _dpfm_alert_global_alert_ind_struct {
294 LOCAL_PARA_HDR
295 kal_uint32 cmd;
296 dpfm_global_alert_t ga;
297} dpfm_alert_global_alert_ind_struct;
298
299typedef struct _dpfm_set_iquota_req_struct {
300 LOCAL_PARA_HDR
301 kal_uint32 cmd;
302 dpfm_iquota_t iq;
303} dpfm_set_iquota_req_struct;
304
305typedef struct _dpfm_alert_iquota_ind_struct {
306 LOCAL_PARA_HDR
307 kal_uint32 cmd;
308 dpfm_iquota_t iq;
309} dpfm_alert_iquota_ind_struct;
310
311typedef struct _dpfm_del_iquota_req_struct {
312 LOCAL_PARA_HDR
313 kal_uint32 cmd;
314 dpfm_iquota_t iq;
315} dpfm_del_iquota_req_struct;
316
317#ifdef __TEMP_MDDP_WH_SUPPORT__
318typedef struct _dpfm_set_ct_timeout_req_struct {
319 LOCAL_PARA_HDR
320 kal_uint32 udp_timeout_value;
321 kal_uint32 tcp_timeout_value;
322 kal_uint8 reserved[4];
323} dpfm_set_ct_timeout_req_struct;
324
325typedef struct _dpfm_set_ct_timeout_rsp_struct {
326 LOCAL_PARA_HDR
327 kal_uint32 udp_timeout_value;
328 kal_uint32 tcp_timeout_value;
329 kal_uint8 result; //bool
330 kal_uint8 reserved[3];
331} dpfm_set_ct_timeout_rsp_struct;
332
333#else
334typedef struct _dpfm_set_ct_timeout_req_struct {
335 LOCAL_PARA_HDR
336 kal_uint32 tcp_timeout_value;
337 kal_uint32 udp_timeout_value;
338 kal_uint8 reserved[4];
339} dpfm_set_ct_timeout_req_struct;
340
341typedef struct _dpfm_set_ct_timeout_rsp_struct {
342 LOCAL_PARA_HDR
343 kal_uint32 tcp_timeout_value;
344 kal_uint32 udp_timeout_value;
345 kal_uint8 result; //bool
346 kal_uint8 reserved[3];
347} dpfm_set_ct_timeout_rsp_struct;
348
349#endif
350typedef struct _dpfm_lan_dev_del_filter_ind_struct {
351 LOCAL_PARA_HDR
352 kal_int16 filter_id;
353 kal_uint8 reserved[2];
354} dpfm_lan_dev_del_filter_ind_struct;
355
356#endif
357