kernel: add missing config symbols for 5.15
[openwrt/openwrt.git] / target / linux / mediatek / files-5.10 / drivers / net / phy / rtk / rtl8367c / include / acl.h
1 /*
2 * Copyright (C) 2013 Realtek Semiconductor Corp.
3 * All Rights Reserved.
4 *
5 * Unless you and Realtek execute a separate written software license
6 * agreement governing use of this software, this software is licensed
7 * to you under the terms of the GNU General Public License version 2,
8 * available at https://www.gnu.org/licenses/old-licenses/gpl-2.0.txt
9 *
10 * Purpose : RTL8367/RTL8367C switch high-level API
11 *
12 * Feature : The file includes ACL module high-layer API defination
13 *
14 */
15
16 #ifndef __RTK_API_ACL_H__
17 #define __RTK_API_ACL_H__
18
19 /*
20 * Data Type Declaration
21 */
22 #define RTK_FILTER_RAW_FIELD_NUMBER 8
23
24 #define ACL_DEFAULT_ABILITY 0
25 #define ACL_DEFAULT_UNMATCH_PERMIT 1
26
27 #define ACL_RULE_FREE 0
28 #define ACL_RULE_INAVAILABLE 1
29 #define ACL_RULE_CARETAG_MASK 0x1F
30 #define FILTER_POLICING_MAX 4
31 #define FILTER_LOGGING_MAX 8
32 #define FILTER_PATTERN_MAX 4
33
34 #define FILTER_ENACT_CVLAN_MASK 0x01
35 #define FILTER_ENACT_SVLAN_MASK 0x02
36 #define FILTER_ENACT_PRIORITY_MASK 0x04
37 #define FILTER_ENACT_POLICING_MASK 0x08
38 #define FILTER_ENACT_FWD_MASK 0x10
39 #define FILTER_ENACT_INTGPIO_MASK 0x20
40 #define FILTER_ENACT_INIT_MASK 0x3F
41
42 typedef enum rtk_filter_act_cactext_e
43 {
44 FILTER_ENACT_CACTEXT_VLANONLY=0,
45 FILTER_ENACT_CACTEXT_BOTHVLANTAG,
46 FILTER_ENACT_CACTEXT_TAGONLY,
47 FILTER_ENACT_CACTEXT_END,
48
49
50 }rtk_filter_act_cactext_t;
51
52 typedef enum rtk_filter_act_ctagfmt_e
53 {
54 FILTER_CTAGFMT_UNTAG=0,
55 FILTER_CTAGFMT_TAG,
56 FILTER_CTAGFMT_KEEP,
57 FILTER_CTAGFMT_KEEP1PRMK,
58
59
60 }rtk_filter_act_ctag_t;
61
62
63
64
65
66 #define RTK_MAX_NUM_OF_FILTER_TYPE 5
67 #define RTK_MAX_NUM_OF_FILTER_FIELD 8
68
69 #define RTK_DOT_1AS_TIMESTAMP_UNIT_IN_WORD_LENGTH 3UL
70 #define RTK_IPV6_ADDR_WORD_LENGTH 4UL
71
72 #define FILTER_ENACT_CVLAN_TYPE(type) (type - FILTER_ENACT_CVLAN_INGRESS)
73 #define FILTER_ENACT_SVLAN_TYPE(type) (type - FILTER_ENACT_SVLAN_INGRESS)
74 #define FILTER_ENACT_FWD_TYPE(type) (type - FILTER_ENACT_ADD_DSTPORT)
75 #define FILTER_ENACT_PRI_TYPE(type) (type - FILTER_ENACT_PRIORITY)
76
77 #define RTK_FILTER_FIELD_USED_MAX 8
78 #define RTK_FILTER_FIELD_INDEX(template, index) ((template << 4) + index)
79
80
81 typedef enum rtk_filter_act_enable_e
82 {
83 /* CVLAN */
84 FILTER_ENACT_CVLAN_INGRESS = 0,
85 FILTER_ENACT_CVLAN_EGRESS,
86 FILTER_ENACT_CVLAN_SVID,
87 FILTER_ENACT_POLICING_1,
88
89 /* SVLAN */
90 FILTER_ENACT_SVLAN_INGRESS,
91 FILTER_ENACT_SVLAN_EGRESS,
92 FILTER_ENACT_SVLAN_CVID,
93 FILTER_ENACT_POLICING_2,
94
95 /* Policing and Logging */
96 FILTER_ENACT_POLICING_0,
97
98 /* Forward */
99 FILTER_ENACT_COPY_CPU,
100 FILTER_ENACT_DROP,
101 FILTER_ENACT_ADD_DSTPORT,
102 FILTER_ENACT_REDIRECT,
103 FILTER_ENACT_MIRROR,
104 FILTER_ENACT_TRAP_CPU,
105 FILTER_ENACT_ISOLATION,
106
107 /* QoS */
108 FILTER_ENACT_PRIORITY,
109 FILTER_ENACT_DSCP_REMARK,
110 FILTER_ENACT_1P_REMARK,
111 FILTER_ENACT_POLICING_3,
112
113 /* Interrutp and GPO */
114 FILTER_ENACT_INTERRUPT,
115 FILTER_ENACT_GPO,
116
117 /*VLAN tag*/
118 FILTER_ENACT_EGRESSCTAG_UNTAG,
119 FILTER_ENACT_EGRESSCTAG_TAG,
120 FILTER_ENACT_EGRESSCTAG_KEEP,
121 FILTER_ENACT_EGRESSCTAG_KEEPAND1PRMK,
122
123 FILTER_ENACT_END,
124 } rtk_filter_act_enable_t;
125
126
127 typedef struct
128 {
129 rtk_filter_act_enable_t actEnable[FILTER_ENACT_END];
130
131 /* CVLAN acton */
132 rtk_uint32 filterCvlanVid;
133 rtk_uint32 filterCvlanIdx;
134 /* SVLAN action */
135 rtk_uint32 filterSvlanVid;
136 rtk_uint32 filterSvlanIdx;
137
138 /* Policing action */
139 rtk_uint32 filterPolicingIdx[FILTER_POLICING_MAX];
140
141 /* Forwarding action */
142 rtk_portmask_t filterPortmask;
143
144 /* QOS action */
145 rtk_uint32 filterPriority;
146
147 /*GPO*/
148 rtk_uint32 filterPin;
149
150 } rtk_filter_action_t;
151
152 typedef struct rtk_filter_flag_s
153 {
154 rtk_uint32 value;
155 rtk_uint32 mask;
156 } rtk_filter_flag_t;
157
158 typedef enum rtk_filter_care_tag_index_e
159 {
160 CARE_TAG_CTAG = 0,
161 CARE_TAG_STAG,
162 CARE_TAG_PPPOE,
163 CARE_TAG_IPV4,
164 CARE_TAG_IPV6,
165 CARE_TAG_TCP,
166 CARE_TAG_UDP,
167 CARE_TAG_ARP,
168 CARE_TAG_RSV1,
169 CARE_TAG_RSV2,
170 CARE_TAG_ICMP,
171 CARE_TAG_IGMP,
172 CARE_TAG_LLC,
173 CARE_TAG_RSV3,
174 CARE_TAG_HTTP,
175 CARE_TAG_RSV4,
176 CARE_TAG_RSV5,
177 CARE_TAG_DHCP,
178 CARE_TAG_DHCPV6,
179 CARE_TAG_SNMP,
180 CARE_TAG_OAM,
181 CARE_TAG_END,
182 } rtk_filter_care_tag_index_t;
183
184 typedef struct rtk_filter_care_tag_s
185 {
186 rtk_filter_flag_t tagType[CARE_TAG_END];
187 } rtk_filter_care_tag_t;
188
189 typedef struct rtk_filter_field rtk_filter_field_t;
190
191 typedef struct
192 {
193 rtk_uint32 value[RTK_DOT_1AS_TIMESTAMP_UNIT_IN_WORD_LENGTH];
194 } rtk_filter_dot1as_timestamp_t;
195
196 typedef enum rtk_filter_field_data_type_e
197 {
198 FILTER_FIELD_DATA_MASK = 0,
199 FILTER_FIELD_DATA_RANGE,
200 FILTER_FIELD_DATA_END ,
201 } rtk_filter_field_data_type_t;
202
203 typedef struct rtk_filter_ip_s
204 {
205 rtk_uint32 dataType;
206 rtk_uint32 rangeStart;
207 rtk_uint32 rangeEnd;
208 rtk_uint32 value;
209 rtk_uint32 mask;
210 } rtk_filter_ip_t;
211
212 typedef struct rtk_filter_mac_s
213 {
214 rtk_uint32 dataType;
215 rtk_mac_t value;
216 rtk_mac_t mask;
217 rtk_mac_t rangeStart;
218 rtk_mac_t rangeEnd;
219 } rtk_filter_mac_t;
220
221 typedef rtk_uint32 rtk_filter_op_t;
222
223 typedef struct rtk_filter_value_s
224 {
225 rtk_uint32 dataType;
226 rtk_uint32 value;
227 rtk_uint32 mask;
228 rtk_uint32 rangeStart;
229 rtk_uint32 rangeEnd;
230
231 } rtk_filter_value_t;
232
233 typedef struct rtk_filter_activeport_s
234 {
235 rtk_portmask_t value;
236 rtk_portmask_t mask;
237
238 } rtk_filter_activeport_t;
239
240
241
242 typedef struct rtk_filter_tag_s
243 {
244 rtk_filter_value_t pri;
245 rtk_filter_flag_t cfi;
246 rtk_filter_value_t vid;
247 } rtk_filter_tag_t;
248
249 typedef struct rtk_filter_ipFlag_s
250 {
251 rtk_filter_flag_t xf;
252 rtk_filter_flag_t mf;
253 rtk_filter_flag_t df;
254 } rtk_filter_ipFlag_t;
255
256 typedef struct
257 {
258 rtk_uint32 addr[RTK_IPV6_ADDR_WORD_LENGTH];
259 } rtk_filter_ip6_addr_t;
260
261 typedef struct
262 {
263 rtk_uint32 dataType;
264 rtk_filter_ip6_addr_t value;
265 rtk_filter_ip6_addr_t mask;
266 rtk_filter_ip6_addr_t rangeStart;
267 rtk_filter_ip6_addr_t rangeEnd;
268 } rtk_filter_ip6_t;
269
270 typedef rtk_uint32 rtk_filter_number_t;
271
272 typedef struct rtk_filter_pattern_s
273 {
274 rtk_uint32 value[FILTER_PATTERN_MAX];
275 rtk_uint32 mask[FILTER_PATTERN_MAX];
276 } rtk_filter_pattern_t;
277
278 typedef struct rtk_filter_tcpFlag_s
279 {
280 rtk_filter_flag_t urg;
281 rtk_filter_flag_t ack;
282 rtk_filter_flag_t psh;
283 rtk_filter_flag_t rst;
284 rtk_filter_flag_t syn;
285 rtk_filter_flag_t fin;
286 rtk_filter_flag_t ns;
287 rtk_filter_flag_t cwr;
288 rtk_filter_flag_t ece;
289 } rtk_filter_tcpFlag_t;
290
291 typedef rtk_uint32 rtk_filter_field_raw_t;
292
293 typedef enum rtk_filter_field_temple_input_e
294 {
295 FILTER_FIELD_TEMPLE_INPUT_TYPE = 0,
296 FILTER_FIELD_TEMPLE_INPUT_INDEX,
297 FILTER_FIELD_TEMPLE_INPUT_MAX ,
298 } rtk_filter_field_temple_input_t;
299
300 struct rtk_filter_field
301 {
302 rtk_uint32 fieldType;
303
304 union
305 {
306 /* L2 struct */
307 rtk_filter_mac_t dmac;
308 rtk_filter_mac_t smac;
309 rtk_filter_value_t etherType;
310 rtk_filter_tag_t ctag;
311 rtk_filter_tag_t relayCtag;
312 rtk_filter_tag_t stag;
313 rtk_filter_tag_t l2tag;
314 rtk_filter_dot1as_timestamp_t dot1asTimeStamp;
315 rtk_filter_mac_t mac;
316
317 /* L3 struct */
318 rtk_filter_ip_t sip;
319 rtk_filter_ip_t dip;
320 rtk_filter_ip_t ip;
321 rtk_filter_value_t protocol;
322 rtk_filter_value_t ipTos;
323 rtk_filter_ipFlag_t ipFlag;
324 rtk_filter_value_t ipOffset;
325 rtk_filter_ip6_t sipv6;
326 rtk_filter_ip6_t dipv6;
327 rtk_filter_ip6_t ipv6;
328 rtk_filter_value_t ipv6TrafficClass;
329 rtk_filter_value_t ipv6NextHeader;
330 rtk_filter_value_t flowLabel;
331
332 /* L4 struct */
333 rtk_filter_value_t tcpSrcPort;
334 rtk_filter_value_t tcpDstPort;
335 rtk_filter_tcpFlag_t tcpFlag;
336 rtk_filter_value_t tcpSeqNumber;
337 rtk_filter_value_t tcpAckNumber;
338 rtk_filter_value_t udpSrcPort;
339 rtk_filter_value_t udpDstPort;
340 rtk_filter_value_t icmpCode;
341 rtk_filter_value_t icmpType;
342 rtk_filter_value_t igmpType;
343
344 /* pattern match */
345 rtk_filter_pattern_t pattern;
346
347 rtk_filter_value_t inData;
348
349 } filter_pattern_union;
350
351 rtk_uint32 fieldTemplateNo;
352 rtk_uint32 fieldTemplateIdx[RTK_FILTER_FIELD_USED_MAX];
353
354 struct rtk_filter_field *next;
355 };
356
357 typedef enum rtk_filter_field_type_e
358 {
359 FILTER_FIELD_DMAC = 0,
360 FILTER_FIELD_SMAC,
361 FILTER_FIELD_ETHERTYPE,
362 FILTER_FIELD_CTAG,
363 FILTER_FIELD_STAG,
364
365 FILTER_FIELD_IPV4_SIP,
366 FILTER_FIELD_IPV4_DIP,
367 FILTER_FIELD_IPV4_TOS,
368 FILTER_FIELD_IPV4_PROTOCOL,
369 FILTER_FIELD_IPV4_FLAG,
370 FILTER_FIELD_IPV4_OFFSET,
371 FILTER_FIELD_IPV6_SIPV6,
372 FILTER_FIELD_IPV6_DIPV6,
373 FILTER_FIELD_IPV6_TRAFFIC_CLASS,
374 FILTER_FIELD_IPV6_NEXT_HEADER,
375
376 FILTER_FIELD_TCP_SPORT,
377 FILTER_FIELD_TCP_DPORT,
378 FILTER_FIELD_TCP_FLAG,
379 FILTER_FIELD_UDP_SPORT,
380 FILTER_FIELD_UDP_DPORT,
381 FILTER_FIELD_ICMP_CODE,
382 FILTER_FIELD_ICMP_TYPE,
383 FILTER_FIELD_IGMP_TYPE,
384
385 FILTER_FIELD_VID_RANGE,
386 FILTER_FIELD_IP_RANGE,
387 FILTER_FIELD_PORT_RANGE,
388
389 FILTER_FIELD_USER_DEFINED00,
390 FILTER_FIELD_USER_DEFINED01,
391 FILTER_FIELD_USER_DEFINED02,
392 FILTER_FIELD_USER_DEFINED03,
393 FILTER_FIELD_USER_DEFINED04,
394 FILTER_FIELD_USER_DEFINED05,
395 FILTER_FIELD_USER_DEFINED06,
396 FILTER_FIELD_USER_DEFINED07,
397 FILTER_FIELD_USER_DEFINED08,
398 FILTER_FIELD_USER_DEFINED09,
399 FILTER_FIELD_USER_DEFINED10,
400 FILTER_FIELD_USER_DEFINED11,
401 FILTER_FIELD_USER_DEFINED12,
402 FILTER_FIELD_USER_DEFINED13,
403 FILTER_FIELD_USER_DEFINED14,
404 FILTER_FIELD_USER_DEFINED15,
405
406 FILTER_FIELD_PATTERN_MATCH,
407
408 FILTER_FIELD_END,
409 } rtk_filter_field_type_t;
410
411
412 typedef enum rtk_filter_field_type_raw_e
413 {
414 FILTER_FIELD_RAW_UNUSED = 0,
415 FILTER_FIELD_RAW_DMAC_15_0,
416 FILTER_FIELD_RAW_DMAC_31_16,
417 FILTER_FIELD_RAW_DMAC_47_32,
418 FILTER_FIELD_RAW_SMAC_15_0,
419 FILTER_FIELD_RAW_SMAC_31_16,
420 FILTER_FIELD_RAW_SMAC_47_32,
421 FILTER_FIELD_RAW_ETHERTYPE,
422 FILTER_FIELD_RAW_STAG,
423 FILTER_FIELD_RAW_CTAG,
424
425 FILTER_FIELD_RAW_IPV4_SIP_15_0 = 0x10,
426 FILTER_FIELD_RAW_IPV4_SIP_31_16,
427 FILTER_FIELD_RAW_IPV4_DIP_15_0,
428 FILTER_FIELD_RAW_IPV4_DIP_31_16,
429
430
431 FILTER_FIELD_RAW_IPV6_SIP_15_0 = 0x20,
432 FILTER_FIELD_RAW_IPV6_SIP_31_16,
433 FILTER_FIELD_RAW_IPV6_DIP_15_0 = 0x28,
434 FILTER_FIELD_RAW_IPV6_DIP_31_16,
435
436 FILTER_FIELD_RAW_VIDRANGE = 0x30,
437 FILTER_FIELD_RAW_IPRANGE,
438 FILTER_FIELD_RAW_PORTRANGE,
439 FILTER_FIELD_RAW_FIELD_VALID,
440
441 FILTER_FIELD_RAW_FIELD_SELECT00 = 0x40,
442 FILTER_FIELD_RAW_FIELD_SELECT01,
443 FILTER_FIELD_RAW_FIELD_SELECT02,
444 FILTER_FIELD_RAW_FIELD_SELECT03,
445 FILTER_FIELD_RAW_FIELD_SELECT04,
446 FILTER_FIELD_RAW_FIELD_SELECT05,
447 FILTER_FIELD_RAW_FIELD_SELECT06,
448 FILTER_FIELD_RAW_FIELD_SELECT07,
449 FILTER_FIELD_RAW_FIELD_SELECT08,
450 FILTER_FIELD_RAW_FIELD_SELECT09,
451 FILTER_FIELD_RAW_FIELD_SELECT10,
452 FILTER_FIELD_RAW_FIELD_SELECT11,
453 FILTER_FIELD_RAW_FIELD_SELECT12,
454 FILTER_FIELD_RAW_FIELD_SELECT13,
455 FILTER_FIELD_RAW_FIELD_SELECT14,
456 FILTER_FIELD_RAW_FIELD_SELECT15,
457
458 FILTER_FIELD_RAW_END,
459 } rtk_filter_field_type_raw_t;
460
461 typedef enum rtk_filter_flag_care_type_e
462 {
463 FILTER_FLAG_CARE_DONT_CARE = 0,
464 FILTER_FLAG_CARE_1,
465 FILTER_FLAG_CARE_0,
466 FILTER_FLAG_END
467 } rtk_filter_flag_care_type_t;
468
469 typedef rtk_uint32 rtk_filter_id_t; /* filter id type */
470
471 typedef enum rtk_filter_invert_e
472 {
473 FILTER_INVERT_DISABLE = 0,
474 FILTER_INVERT_ENABLE,
475 FILTER_INVERT_END,
476 } rtk_filter_invert_t;
477
478 typedef rtk_uint32 rtk_filter_state_t;
479
480 typedef rtk_uint32 rtk_filter_unmatch_action_t;
481
482 typedef enum rtk_filter_unmatch_action_e
483 {
484 FILTER_UNMATCH_DROP = 0,
485 FILTER_UNMATCH_PERMIT,
486 FILTER_UNMATCH_END,
487 } rtk_filter_unmatch_action_type_t;
488
489 typedef struct
490 {
491 rtk_filter_field_t *fieldHead;
492 rtk_filter_care_tag_t careTag;
493 rtk_filter_activeport_t activeport;
494
495 rtk_filter_invert_t invert;
496 } rtk_filter_cfg_t;
497
498 typedef struct
499 {
500 rtk_filter_field_raw_t dataFieldRaw[RTK_FILTER_RAW_FIELD_NUMBER];
501 rtk_filter_field_raw_t careFieldRaw[RTK_FILTER_RAW_FIELD_NUMBER];
502 rtk_filter_field_type_raw_t fieldRawType[RTK_FILTER_RAW_FIELD_NUMBER];
503 rtk_filter_care_tag_t careTag;
504 rtk_filter_activeport_t activeport;
505
506 rtk_filter_invert_t invert;
507 rtk_enable_t valid;
508 } rtk_filter_cfg_raw_t;
509
510 typedef struct
511 {
512 rtk_uint32 index;
513 rtk_filter_field_type_raw_t fieldType[RTK_FILTER_RAW_FIELD_NUMBER];
514 } rtk_filter_template_t;
515
516 typedef enum rtk_field_sel_e
517 {
518 FORMAT_DEFAULT = 0,
519 FORMAT_RAW,
520 FORMAT_LLC,
521 FORMAT_IPV4,
522 FORMAT_ARP,
523 FORMAT_IPV6,
524 FORMAT_IPPAYLOAD,
525 FORMAT_L4PAYLOAD,
526 FORMAT_END
527 }rtk_field_sel_t;
528
529 typedef enum rtk_filter_iprange_e
530 {
531 IPRANGE_UNUSED = 0,
532 IPRANGE_IPV4_SIP,
533 IPRANGE_IPV4_DIP,
534 IPRANGE_IPV6_SIP,
535 IPRANGE_IPV6_DIP,
536 IPRANGE_END
537 }rtk_filter_iprange_t;
538
539 typedef enum rtk_filter_vidrange_e
540 {
541 VIDRANGE_UNUSED = 0,
542 VIDRANGE_CVID,
543 VIDRANGE_SVID,
544 VIDRANGE_END
545 }rtk_filter_vidrange_t;
546
547 typedef enum rtk_filter_portrange_e
548 {
549 PORTRANGE_UNUSED = 0,
550 PORTRANGE_SPORT,
551 PORTRANGE_DPORT,
552 PORTRANGE_END
553 }rtk_filter_portrange_t;
554
555 /* Function Name:
556 * rtk_filter_igrAcl_init
557 * Description:
558 * ACL initialization function
559 * Input:
560 * None
561 * Output:
562 * None
563 * Return:
564 * RT_ERR_OK - OK
565 * RT_ERR_FAILED - Failed
566 * RT_ERR_SMI - SMI access error
567 * RT_ERR_NULL_POINTER - Pointer pFilter_field or pFilter_cfg point to NULL.
568 * Note:
569 * This function enable and intialize ACL function
570 */
571 extern rtk_api_ret_t rtk_filter_igrAcl_init(void);
572
573 /* Function Name:
574 * rtk_filter_igrAcl_field_add
575 * Description:
576 * Add comparison rule to an ACL configuration
577 * Input:
578 * pFilter_cfg - The ACL configuration that this function will add comparison rule
579 * pFilter_field - The comparison rule that will be added.
580 * Output:
581 * None
582 * Return:
583 * RT_ERR_OK - OK
584 * RT_ERR_FAILED - Failed
585 * RT_ERR_SMI - SMI access error
586 * RT_ERR_NULL_POINTER - Pointer pFilter_field or pFilter_cfg point to NULL.
587 * RT_ERR_INPUT - Invalid input parameters.
588 * Note:
589 * This function add a comparison rule (*pFilter_field) to an ACL configuration (*pFilter_cfg).
590 * Pointer pFilter_cfg points to an ACL configuration structure, this structure keeps multiple ACL
591 * comparison rules by means of linked list. Pointer pFilter_field will be added to linked
592 * list keeped by structure that pFilter_cfg points to.
593 */
594 extern rtk_api_ret_t rtk_filter_igrAcl_field_add(rtk_filter_cfg_t *pFilter_cfg, rtk_filter_field_t *pFilter_field);
595
596 /* Function Name:
597 * rtk_filter_igrAcl_cfg_add
598 * Description:
599 * Add an ACL configuration to ASIC
600 * Input:
601 * filter_id - Start index of ACL configuration.
602 * pFilter_cfg - The ACL configuration that this function will add comparison rule
603 * pFilter_action - Action(s) of ACL configuration.
604 * Output:
605 * ruleNum - number of rules written in acl table
606 * Return:
607 * RT_ERR_OK - OK
608 * RT_ERR_FAILED - Failed
609 * RT_ERR_SMI - SMI access error
610 * RT_ERR_NULL_POINTER - Pointer pFilter_field or pFilter_cfg point to NULL.
611 * RT_ERR_INPUT - Invalid input parameters.
612 * RT_ERR_ENTRY_INDEX - Invalid filter_id .
613 * RT_ERR_NULL_POINTER - Pointer pFilter_action or pFilter_cfg point to NULL.
614 * RT_ERR_FILTER_INACL_ACT_NOT_SUPPORT - Action is not supported in this chip.
615 * RT_ERR_FILTER_INACL_RULE_NOT_SUPPORT - Rule is not supported.
616 * Note:
617 * This function store pFilter_cfg, pFilter_action into ASIC. The starting
618 * index(es) is filter_id.
619 */
620 extern rtk_api_ret_t rtk_filter_igrAcl_cfg_add(rtk_filter_id_t filter_id, rtk_filter_cfg_t *pFilter_cfg, rtk_filter_action_t *pAction, rtk_filter_number_t *ruleNum);
621
622 /* Function Name:
623 * rtk_filter_igrAcl_cfg_del
624 * Description:
625 * Delete an ACL configuration from ASIC
626 * Input:
627 * filter_id - Start index of ACL configuration.
628 * Output:
629 * None
630 * Return:
631 * RT_ERR_OK - OK
632 * RT_ERR_FAILED - Failed
633 * RT_ERR_SMI - SMI access error
634 * RT_ERR_FILTER_ENTRYIDX - Invalid filter_id.
635 * Note:
636 * This function delete a group of ACL rules starting from filter_id.
637 */
638 extern rtk_api_ret_t rtk_filter_igrAcl_cfg_del(rtk_filter_id_t filter_id);
639
640 /* Function Name:
641 * rtk_filter_igrAcl_cfg_delAll
642 * Description:
643 * Delete all ACL entries from ASIC
644 * Input:
645 * None
646 * Output:
647 * None
648 * Return:
649 * RT_ERR_OK - OK
650 * RT_ERR_FAILED - Failed
651 * RT_ERR_SMI - SMI access error
652 * Note:
653 * This function delete all ACL configuration from ASIC.
654 */
655 extern rtk_api_ret_t rtk_filter_igrAcl_cfg_delAll(void);
656
657 /* Function Name:
658 * rtk_filter_igrAcl_cfg_get
659 * Description:
660 * Get one ingress acl configuration from ASIC.
661 * Input:
662 * filter_id - Start index of ACL configuration.
663 * Output:
664 * pFilter_cfg - buffer pointer of ingress acl data
665 * pFilter_action - buffer pointer of ingress acl action
666 * Return:
667 * RT_ERR_OK - OK
668 * RT_ERR_FAILED - Failed
669 * RT_ERR_SMI - SMI access error
670 * RT_ERR_NULL_POINTER - Pointer pFilter_action or pFilter_cfg point to NULL.
671 * RT_ERR_FILTER_ENTRYIDX - Invalid entry index.
672 * Note:
673 * This function delete all ACL configuration from ASIC.
674 */
675 extern rtk_api_ret_t rtk_filter_igrAcl_cfg_get(rtk_filter_id_t filter_id, rtk_filter_cfg_raw_t *pFilter_cfg, rtk_filter_action_t *pAction);
676
677 /* Function Name:
678 * rtk_filter_igrAcl_unmatchAction_set
679 * Description:
680 * Set action to packets when no ACL configuration match
681 * Input:
682 * port - Port id.
683 * action - Action.
684 * Output:
685 * None
686 * Return:
687 * RT_ERR_OK - OK
688 * RT_ERR_FAILED - Failed
689 * RT_ERR_SMI - SMI access error
690 * RT_ERR_PORT_ID - Invalid port id.
691 * RT_ERR_INPUT - Invalid input parameters.
692 * Note:
693 * This function sets action of packets when no ACL configruation matches.
694 */
695 extern rtk_api_ret_t rtk_filter_igrAcl_unmatchAction_set(rtk_port_t port, rtk_filter_unmatch_action_t action);
696
697 /* Function Name:
698 * rtk_filter_igrAcl_unmatchAction_get
699 * Description:
700 * Get action to packets when no ACL configuration match
701 * Input:
702 * port - Port id.
703 * Output:
704 * pAction - Action.
705 * Return:
706 * RT_ERR_OK - OK
707 * RT_ERR_FAILED - Failed
708 * RT_ERR_SMI - SMI access error
709 * RT_ERR_PORT_ID - Invalid port id.
710 * RT_ERR_INPUT - Invalid input parameters.
711 * Note:
712 * This function gets action of packets when no ACL configruation matches.
713 */
714 extern rtk_api_ret_t rtk_filter_igrAcl_unmatchAction_get(rtk_port_t port, rtk_filter_unmatch_action_t* action);
715
716 /* Function Name:
717 * rtk_filter_igrAcl_state_set
718 * Description:
719 * Set state of ingress ACL.
720 * Input:
721 * port - Port id.
722 * state - Ingress ACL state.
723 * Output:
724 * None
725 * Return:
726 * RT_ERR_OK - OK
727 * RT_ERR_FAILED - Failed
728 * RT_ERR_SMI - SMI access error
729 * RT_ERR_PORT_ID - Invalid port id.
730 * RT_ERR_INPUT - Invalid input parameters.
731 * Note:
732 * This function gets action of packets when no ACL configruation matches.
733 */
734 extern rtk_api_ret_t rtk_filter_igrAcl_state_set(rtk_port_t port, rtk_filter_state_t state);
735
736 /* Function Name:
737 * rtk_filter_igrAcl_state_get
738 * Description:
739 * Get state of ingress ACL.
740 * Input:
741 * port - Port id.
742 * Output:
743 * pState - Ingress ACL state.
744 * Return:
745 * RT_ERR_OK - OK
746 * RT_ERR_FAILED - Failed
747 * RT_ERR_SMI - SMI access error
748 * RT_ERR_PORT_ID - Invalid port id.
749 * RT_ERR_INPUT - Invalid input parameters.
750 * Note:
751 * This function gets action of packets when no ACL configruation matches.
752 */
753 extern rtk_api_ret_t rtk_filter_igrAcl_state_get(rtk_port_t port, rtk_filter_state_t* state);
754
755 /* Function Name:
756 * rtk_filter_igrAcl_template_set
757 * Description:
758 * Set template of ingress ACL.
759 * Input:
760 * template - Ingress ACL template
761 * Output:
762 * None
763 * Return:
764 * RT_ERR_OK - OK
765 * RT_ERR_FAILED - Failed
766 * RT_ERR_SMI - SMI access error
767 * RT_ERR_INPUT - Invalid input parameters.
768 * Note:
769 * This function set ACL template.
770 */
771 extern rtk_api_ret_t rtk_filter_igrAcl_template_set(rtk_filter_template_t *aclTemplate);
772
773 /* Function Name:
774 * rtk_filter_igrAcl_template_get
775 * Description:
776 * Get template of ingress ACL.
777 * Input:
778 * template - Ingress ACL template
779 * Output:
780 * None
781 * Return:
782 * RT_ERR_OK - OK
783 * RT_ERR_FAILED - Failed
784 * RT_ERR_SMI - SMI access error
785 * Note:
786 * This function gets template of ACL.
787 */
788 extern rtk_api_ret_t rtk_filter_igrAcl_template_get(rtk_filter_template_t *aclTemplate);
789
790 /* Function Name:
791 * rtk_filter_igrAcl_field_sel_set
792 * Description:
793 * Set user defined field selectors in HSB
794 * Input:
795 * index - index of field selector 0-15
796 * format - Format of field selector
797 * offset - Retrieving data offset
798 * Output:
799 * None
800 * Return:
801 * RT_ERR_OK - OK
802 * RT_ERR_FAILED - Failed
803 * RT_ERR_SMI - SMI access error
804 * Note:
805 * System support 16 user defined field selctors.
806 * Each selector can be enabled or disable.
807 * User can defined retrieving 16-bits in many predefiend
808 * standard l2/l3/l4 payload.
809 */
810 extern rtk_api_ret_t rtk_filter_igrAcl_field_sel_set(rtk_uint32 index, rtk_field_sel_t format, rtk_uint32 offset);
811
812 /* Function Name:
813 * rtk_filter_igrAcl_field_sel_get
814 * Description:
815 * Get user defined field selectors in HSB
816 * Input:
817 * index - index of field selector 0-15
818 * Output:
819 * pFormat - Format of field selector
820 * pOffset - Retrieving data offset
821 * Return:
822 * RT_ERR_OK - OK
823 * RT_ERR_FAILED - Failed
824 * RT_ERR_SMI - SMI access error
825 * Note:
826 * None.
827 */
828 extern rtk_api_ret_t rtk_filter_igrAcl_field_sel_get(rtk_uint32 index, rtk_field_sel_t *pFormat, rtk_uint32 *pOffset);
829
830 /* Function Name:
831 * rtk_filter_iprange_set
832 * Description:
833 * Set IP Range check
834 * Input:
835 * index - index of IP Range 0-15
836 * type - IP Range check type, 0:Delete a entry, 1: IPv4_SIP, 2: IPv4_DIP, 3:IPv6_SIP, 4:IPv6_DIP
837 * upperIp - The upper bound of IP range
838 * lowerIp - The lower Bound of IP range
839 * Output:
840 * None.
841 * Return:
842 * RT_ERR_OK - OK
843 * RT_ERR_FAILED - Failed
844 * RT_ERR_SMI - SMI access error
845 * RT_ERR_OUT_OF_RANGE - The parameter is out of range
846 * RT_ERR_INPUT - Input error
847 * Note:
848 * upperIp must be larger or equal than lowerIp.
849 */
850 extern rtk_api_ret_t rtk_filter_iprange_set(rtk_uint32 index, rtk_filter_iprange_t type, ipaddr_t upperIp, ipaddr_t lowerIp);
851
852 /* Function Name:
853 * rtk_filter_iprange_get
854 * Description:
855 * Set IP Range check
856 * Input:
857 * index - index of IP Range 0-15
858 * Output:
859 * pType - IP Range check type, 0:Delete a entry, 1: IPv4_SIP, 2: IPv4_DIP, 3:IPv6_SIP, 4:IPv6_DIP
860 * pUpperIp - The upper bound of IP range
861 * pLowerIp - The lower Bound of IP range
862 * Return:
863 * RT_ERR_OK - OK
864 * RT_ERR_FAILED - Failed
865 * RT_ERR_SMI - SMI access error
866 * RT_ERR_OUT_OF_RANGE - The parameter is out of range
867 * Note:
868 * upperIp must be larger or equal than lowerIp.
869 */
870 extern rtk_api_ret_t rtk_filter_iprange_get(rtk_uint32 index, rtk_filter_iprange_t *pType, ipaddr_t *pUpperIp, ipaddr_t *pLowerIp);
871
872 /* Function Name:
873 * rtk_filter_vidrange_set
874 * Description:
875 * Set VID Range check
876 * Input:
877 * index - index of VID Range 0-15
878 * type - IP Range check type, 0:Delete a entry, 1: CVID, 2: SVID
879 * upperVid - The upper bound of VID range
880 * lowerVid - The lower Bound of VID range
881 * Output:
882 * None.
883 * Return:
884 * RT_ERR_OK - OK
885 * RT_ERR_FAILED - Failed
886 * RT_ERR_SMI - SMI access error
887 * RT_ERR_OUT_OF_RANGE - The parameter is out of range
888 * RT_ERR_INPUT - Input error
889 * Note:
890 * upperVid must be larger or equal than lowerVid.
891 */
892 extern rtk_api_ret_t rtk_filter_vidrange_set(rtk_uint32 index, rtk_filter_vidrange_t type, rtk_uint32 upperVid, rtk_uint32 lowerVid);
893
894 /* Function Name:
895 * rtk_filter_vidrange_get
896 * Description:
897 * Get VID Range check
898 * Input:
899 * index - index of VID Range 0-15
900 * Output:
901 * pType - IP Range check type, 0:Unused, 1: CVID, 2: SVID
902 * pUpperVid - The upper bound of VID range
903 * pLowerVid - The lower Bound of VID range
904 * Return:
905 * RT_ERR_OK - OK
906 * RT_ERR_FAILED - Failed
907 * RT_ERR_SMI - SMI access error
908 * RT_ERR_OUT_OF_RANGE - The parameter is out of range
909 * Note:
910 * None.
911 */
912 extern rtk_api_ret_t rtk_filter_vidrange_get(rtk_uint32 index, rtk_filter_vidrange_t *pType, rtk_uint32 *pUpperVid, rtk_uint32 *pLowerVid);
913
914 /* Function Name:
915 * rtk_filter_portrange_set
916 * Description:
917 * Set Port Range check
918 * Input:
919 * index - index of Port Range 0-15
920 * type - IP Range check type, 0:Delete a entry, 1: Source Port, 2: Destnation Port
921 * upperPort - The upper bound of Port range
922 * lowerPort - The lower Bound of Port range
923 * Output:
924 * None.
925 * Return:
926 * RT_ERR_OK - OK
927 * RT_ERR_FAILED - Failed
928 * RT_ERR_SMI - SMI access error
929 * RT_ERR_OUT_OF_RANGE - The parameter is out of range
930 * RT_ERR_INPUT - Input error
931 * Note:
932 * upperPort must be larger or equal than lowerPort.
933 */
934 extern rtk_api_ret_t rtk_filter_portrange_set(rtk_uint32 index, rtk_filter_portrange_t type, rtk_uint32 upperPort, rtk_uint32 lowerPort);
935
936 /* Function Name:
937 * rtk_filter_portrange_get
938 * Description:
939 * Set Port Range check
940 * Input:
941 * index - index of Port Range 0-15
942 * Output:
943 * pType - IP Range check type, 0:Delete a entry, 1: Source Port, 2: Destnation Port
944 * pUpperPort - The upper bound of Port range
945 * pLowerPort - The lower Bound of Port range
946 * Return:
947 * RT_ERR_OK - OK
948 * RT_ERR_FAILED - Failed
949 * RT_ERR_SMI - SMI access error
950 * RT_ERR_OUT_OF_RANGE - The parameter is out of range
951 * RT_ERR_INPUT - Input error
952 * Note:
953 * None.
954 */
955 extern rtk_api_ret_t rtk_filter_portrange_get(rtk_uint32 index, rtk_filter_portrange_t *pType, rtk_uint32 *pUpperPort, rtk_uint32 *pLowerPort);
956
957 /* Function Name:
958 * rtk_filter_igrAclPolarity_set
959 * Description:
960 * Set ACL Goip control palarity
961 * Input:
962 * polarity - 1: High, 0: Low
963 * Output:
964 * None
965 * Return:
966 * RT_ERR_OK - Success
967 * RT_ERR_SMI - SMI access error
968 * Note:
969 * none
970 */
971 extern rtk_api_ret_t rtk_filter_igrAclPolarity_set(rtk_uint32 polarity);
972
973 /* Function Name:
974 * rtk_filter_igrAclPolarity_get
975 * Description:
976 * Get ACL Goip control palarity
977 * Input:
978 * pPolarity - 1: High, 0: Low
979 * Output:
980 * None
981 * Return:
982 * RT_ERR_OK - Success
983 * RT_ERR_SMI - SMI access error
984 * Note:
985 * none
986 */
987 extern rtk_api_ret_t rtk_filter_igrAclPolarity_get(rtk_uint32* pPolarity);
988
989
990 #endif /* __RTK_API_ACL_H__ */