• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/linux/linux-2.6.36/drivers/char/rtl8365mb/
1/*
2 * Copyright (C) 2013 Realtek Semiconductor Corp.
3 * All Rights Reserved.
4 *
5 * This program is the proprietary software of Realtek Semiconductor
6 * Corporation and/or its licensors, and only be used, duplicated,
7 * modified or distributed under the authorized license from Realtek.
8 *
9 * ANY USE OF THE SOFTWARE OTHER THAN AS AUTHORIZED UNDER
10 * THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
11 *
12 * $Revision: 42586 $
13 * $Date: 2013-09-05 14:29:38 +0800 (������, 05 ������ 2013) $
14 *
15 * Purpose : RTK switch high-level API for RTL8367/RTL8367C
16 * Feature : Here is a list of all functions and variables in Trap module.
17 *
18 */
19
20#include <rtk_switch.h>
21#include <rtk_error.h>
22#include <trap.h>
23#ifndef __KERNEL__
24#include <string.h>
25#else
26#include <linux/string.h>
27#endif
28
29#include <rtl8367c_asicdrv.h>
30#include <rtl8367c_asicdrv_port.h>
31#include <rtl8367c_asicdrv_igmp.h>
32#include <rtl8367c_asicdrv_rma.h>
33#include <rtl8367c_asicdrv_eav.h>
34#include <rtl8367c_asicdrv_oam.h>
35#include <rtl8367c_asicdrv_svlan.h>
36#include <rtl8367c_asicdrv_unknownMulticast.h>
37#include <rtl8367c_asicdrv_dot1x.h>
38
39/* Function Name:
40 *      rtk_trap_unknownUnicastPktAction_set
41 * Description:
42 *      Set unknown unicast packet action configuration.
43 * Input:
44 *      port            - ingress port ID for unknown unicast packet
45 *      ucast_action    - Unknown unicast action.
46 * Output:
47 *      None
48 * Return:
49 *      RT_ERR_OK                  - OK
50 *      RT_ERR_FAILED              - Failed
51 *      RT_ERR_SMI                 - SMI access error
52 *      RT_ERR_NOT_ALLOWED         - Invalid action.
53 *      RT_ERR_INPUT               - Invalid input parameters.
54 * Note:
55 *      This API can set unknown unicast packet action configuration.
56 *      The unknown unicast action is as following:
57 *          - UCAST_ACTION_FORWARD_PMASK
58 *          - UCAST_ACTION_DROP
59 *          - UCAST_ACTION_TRAP2CPU
60 *          - UCAST_ACTION_FLOODING
61 */
62rtk_api_ret_t rtk_trap_unknownUnicastPktAction_set(rtk_port_t port, rtk_trap_ucast_action_t ucast_action)
63{
64    rtk_api_ret_t retVal;
65
66    /* Check initialization state */
67    RTK_CHK_INIT_STATE();
68
69    /* check port valid */
70    RTK_CHK_PORT_VALID(port);
71
72    if (ucast_action >= UCAST_ACTION_END)
73        return RT_ERR_INPUT;
74
75    if ((retVal = rtl8367c_setAsicPortUnknownDaBehavior(rtk_switch_port_L2P_get(port), ucast_action)) != RT_ERR_OK)
76        return retVal;
77
78    return RT_ERR_OK;
79}
80
81/* Function Name:
82 *      rtk_trap_unknownUnicastPktAction_get
83 * Description:
84 *      Get unknown unicast packet action configuration.
85 * Input:
86 *      port            - ingress port ID for unknown unicast packet
87 * Output:
88 *      pUcast_action   - Unknown unicast action.
89 * Return:
90 *      RT_ERR_OK                  - OK
91 *      RT_ERR_FAILED              - Failed
92 *      RT_ERR_SMI                 - SMI access error
93 *      RT_ERR_NOT_ALLOWED         - Invalid action.
94 *      RT_ERR_INPUT               - Invalid input parameters.
95 *      RT_ERR_NULL_POINTER        - Null pointer
96 * Note:
97 *      This API can get unknown unicast packet action configuration.
98 *      The unknown unicast action is as following:
99 *          - UCAST_ACTION_FORWARD_PMASK
100 *          - UCAST_ACTION_DROP
101 *          - UCAST_ACTION_TRAP2CPU
102 *          - UCAST_ACTION_FLOODING
103 */
104rtk_api_ret_t rtk_trap_unknownUnicastPktAction_get(rtk_port_t port, rtk_trap_ucast_action_t *pUcast_action)
105{
106    rtk_api_ret_t retVal;
107
108    /* Check initialization state */
109    RTK_CHK_INIT_STATE();
110
111    /* check port valid */
112    RTK_CHK_PORT_VALID(port);
113
114    if (NULL == pUcast_action)
115        return RT_ERR_NULL_POINTER;
116
117    if ((retVal = rtl8367c_getAsicPortUnknownDaBehavior(rtk_switch_port_L2P_get(port), pUcast_action)) != RT_ERR_OK)
118        return retVal;
119
120    return RT_ERR_OK;
121}
122
123/* Function Name:
124 *      rtk_trap_unknownMacPktAction_set
125 * Description:
126 *      Set unknown source MAC packet action configuration.
127 * Input:
128 *      ucast_action    - Unknown source MAC action.
129 * Output:
130 *      None
131 * Return:
132 *      RT_ERR_OK                  - OK
133 *      RT_ERR_FAILED              - Failed
134 *      RT_ERR_SMI                 - SMI access error
135 *      RT_ERR_NOT_ALLOWED         - Invalid action.
136 *      RT_ERR_INPUT               - Invalid input parameters.
137 * Note:
138 *      This API can set unknown unicast packet action configuration.
139 *      The unknown unicast action is as following:
140 *          - UCAST_ACTION_FORWARD_PMASK
141 *          - UCAST_ACTION_DROP
142 *          - UCAST_ACTION_TRAP2CPU
143 */
144rtk_api_ret_t rtk_trap_unknownMacPktAction_set(rtk_trap_ucast_action_t ucast_action)
145{
146    rtk_api_ret_t retVal;
147
148    /* Check initialization state */
149    RTK_CHK_INIT_STATE();
150
151    if (ucast_action >= UCAST_ACTION_FLOODING)
152        return RT_ERR_INPUT;
153
154    if ((retVal = rtl8367c_setAsicPortUnknownSaBehavior(ucast_action)) != RT_ERR_OK)
155        return retVal;
156
157    return RT_ERR_OK;
158}
159
160/* Function Name:
161 *      rtk_trap_unknownMacPktAction_get
162 * Description:
163 *      Get unknown source MAC packet action configuration.
164 * Input:
165 *      None.
166 * Output:
167 *      pUcast_action   - Unknown source MAC action.
168 * Return:
169 *      RT_ERR_OK                  - OK
170 *      RT_ERR_FAILED              - Failed
171 *      RT_ERR_SMI                 - SMI access error
172 *      RT_ERR_NULL_POINTER        - Null Pointer.
173 *      RT_ERR_INPUT               - Invalid input parameters.
174 * Note:
175 *
176 */
177rtk_api_ret_t rtk_trap_unknownMacPktAction_get(rtk_trap_ucast_action_t *pUcast_action)
178{
179    rtk_api_ret_t retVal;
180
181    /* Check initialization state */
182    RTK_CHK_INIT_STATE();
183
184    if(NULL == pUcast_action)
185        return RT_ERR_NULL_POINTER;
186
187    if ((retVal = rtl8367c_getAsicPortUnknownSaBehavior(pUcast_action)) != RT_ERR_OK)
188        return retVal;
189
190    return RT_ERR_OK;
191}
192
193/* Function Name:
194 *      rtk_trap_unmatchMacPktAction_set
195 * Description:
196 *      Set unmatch source MAC packet action configuration.
197 * Input:
198 *      ucast_action    - Unknown source MAC action.
199 * Output:
200 *      None
201 * Return:
202 *      RT_ERR_OK                  - OK
203 *      RT_ERR_FAILED              - Failed
204 *      RT_ERR_SMI                 - SMI access error
205 *      RT_ERR_NOT_ALLOWED         - Invalid action.
206 *      RT_ERR_INPUT               - Invalid input parameters.
207 * Note:
208 *      This API can set unknown unicast packet action configuration.
209 *      The unknown unicast action is as following:
210 *          - UCAST_ACTION_FORWARD_PMASK
211 *          - UCAST_ACTION_DROP
212 *          - UCAST_ACTION_TRAP2CPU
213 */
214rtk_api_ret_t rtk_trap_unmatchMacPktAction_set(rtk_trap_ucast_action_t ucast_action)
215{
216    rtk_api_ret_t retVal;
217
218    /* Check initialization state */
219    RTK_CHK_INIT_STATE();
220
221    if (ucast_action >= UCAST_ACTION_FLOODING)
222        return RT_ERR_INPUT;
223
224    if ((retVal = rtl8367c_setAsicPortUnmatchedSaBehavior(ucast_action)) != RT_ERR_OK)
225        return retVal;
226
227    return RT_ERR_OK;
228}
229
230/* Function Name:
231 *      rtk_trap_unmatchMacPktAction_get
232 * Description:
233 *      Get unmatch source MAC packet action configuration.
234 * Input:
235 *      None.
236 * Output:
237 *      pUcast_action   - Unknown source MAC action.
238 * Return:
239 *      RT_ERR_OK                  - OK
240 *      RT_ERR_FAILED              - Failed
241 *      RT_ERR_SMI                 - SMI access error
242 *      RT_ERR_NOT_ALLOWED         - Invalid action.
243 *      RT_ERR_INPUT               - Invalid input parameters.
244 * Note:
245 *      This API can set unknown unicast packet action configuration.
246 *      The unknown unicast action is as following:
247 *          - UCAST_ACTION_FORWARD_PMASK
248 *          - UCAST_ACTION_DROP
249 *          - UCAST_ACTION_TRAP2CPU
250 */
251rtk_api_ret_t rtk_trap_unmatchMacPktAction_get(rtk_trap_ucast_action_t *pUcast_action)
252{
253    rtk_api_ret_t retVal;
254
255    /* Check initialization state */
256    RTK_CHK_INIT_STATE();
257
258    if(NULL == pUcast_action)
259        return RT_ERR_NULL_POINTER;
260
261    if ((retVal = rtl8367c_getAsicPortUnmatchedSaBehavior(pUcast_action)) != RT_ERR_OK)
262        return retVal;
263
264    return RT_ERR_OK;
265}
266
267/* Function Name:
268 *      rtk_trap_unmatchMacMoving_set
269 * Description:
270 *      Set unmatch source MAC packet moving state.
271 * Input:
272 *      port        - Port ID.
273 *      enable      - ENABLED: allow SA moving, DISABLE: don't allow SA moving.
274 * Output:
275 *      None
276 * Return:
277 *      RT_ERR_OK                  - OK
278 *      RT_ERR_FAILED              - Failed
279 *      RT_ERR_SMI                 - SMI access error
280 *      RT_ERR_NOT_ALLOWED         - Invalid action.
281 *      RT_ERR_INPUT               - Invalid input parameters.
282 * Note:
283 */
284rtk_api_ret_t rtk_trap_unmatchMacMoving_set(rtk_port_t port, rtk_enable_t enable)
285{
286    rtk_api_ret_t retVal;
287
288    /* Check initialization state */
289    RTK_CHK_INIT_STATE();
290
291    /* check port valid */
292    RTK_CHK_PORT_VALID(port);
293
294    if(enable >= RTK_ENABLE_END)
295        return RT_ERR_INPUT;
296
297    if ((retVal = rtl8367c_setAsicPortUnmatchedSaMoving(rtk_switch_port_L2P_get(port), enable)) != RT_ERR_OK)
298        return retVal;
299
300    return RT_ERR_OK;
301}
302
303/* Function Name:
304 *      rtk_trap_unmatchMacMoving_get
305 * Description:
306 *      Set unmatch source MAC packet moving state.
307 * Input:
308 *      port        - Port ID.
309 * Output:
310 *      pEnable     - ENABLED: allow SA moving, DISABLE: don't allow SA moving.
311 * Return:
312 *      RT_ERR_OK                  - OK
313 *      RT_ERR_FAILED              - Failed
314 *      RT_ERR_SMI                 - SMI access error
315 *      RT_ERR_NOT_ALLOWED         - Invalid action.
316 *      RT_ERR_INPUT               - Invalid input parameters.
317 * Note:
318 */
319rtk_api_ret_t rtk_trap_unmatchMacMoving_get(rtk_port_t port, rtk_enable_t *pEnable)
320{
321    rtk_api_ret_t retVal;
322
323    /* Check initialization state */
324    RTK_CHK_INIT_STATE();
325
326    /* check port valid */
327    RTK_CHK_PORT_VALID(port);
328
329    if(NULL == pEnable)
330        return RT_ERR_NULL_POINTER;
331
332    if ((retVal = rtl8367c_getAsicPortUnmatchedSaMoving(rtk_switch_port_L2P_get(port), pEnable)) != RT_ERR_OK)
333        return retVal;
334
335    return RT_ERR_OK;
336}
337
338/* Function Name:
339 *      rtk_trap_unknownMcastPktAction_set
340 * Description:
341 *      Set behavior of unknown multicast
342 * Input:
343 *      port            - Port id.
344 *      type            - unknown multicast packet type.
345 *      mcast_action    - unknown multicast action.
346 * Output:
347 *      None
348 * Return:
349 *      RT_ERR_OK           - OK
350 *      RT_ERR_FAILED       - Failed
351 *      RT_ERR_SMI          - SMI access error
352 *      RT_ERR_PORT_ID         - Invalid port number.
353 *      RT_ERR_NOT_ALLOWED     - Invalid action.
354 *      RT_ERR_INPUT         - Invalid input parameters.
355 * Note:
356 *      When receives an unknown multicast packet, switch may trap, drop or flood this packet
357 *      (1) The unknown multicast packet type is as following:
358 *          - MCAST_L2
359 *          - MCAST_IPV4
360 *          - MCAST_IPV6
361 *      (2) The unknown multicast action is as following:
362 *          - MCAST_ACTION_FORWARD
363 *          - MCAST_ACTION_DROP
364 *          - MCAST_ACTION_TRAP2CPU
365 */
366rtk_api_ret_t rtk_trap_unknownMcastPktAction_set(rtk_port_t port, rtk_mcast_type_t type, rtk_trap_mcast_action_t mcast_action)
367{
368    rtk_api_ret_t retVal;
369    rtk_uint32 rawAction;
370
371    /* Check initialization state */
372    RTK_CHK_INIT_STATE();
373
374    /* Check Port Valid */
375    RTK_CHK_PORT_VALID(port);
376
377    if (type >= MCAST_END)
378        return RT_ERR_INPUT;
379
380    if (mcast_action >= MCAST_ACTION_END)
381        return RT_ERR_INPUT;
382
383
384    switch (type)
385    {
386        case MCAST_L2:
387            if (MCAST_ACTION_ROUTER_PORT == mcast_action)
388                return RT_ERR_INPUT;
389            else if(MCAST_ACTION_DROP_EX_RMA == mcast_action)
390                rawAction = L2_UNKOWN_MULTICAST_DROP_EXCLUDE_RMA;
391            else
392                rawAction = (rtk_uint32)mcast_action;
393
394            if ((retVal = rtl8367c_setAsicUnknownL2MulticastBehavior(rtk_switch_port_L2P_get(port), rawAction)) != RT_ERR_OK)
395                return retVal;
396
397            break;
398        case MCAST_IPV4:
399            if (MCAST_ACTION_DROP_EX_RMA == mcast_action)
400                return RT_ERR_INPUT;
401            else
402                rawAction = (rtk_uint32)mcast_action;
403
404            if ((retVal = rtl8367c_setAsicUnknownIPv4MulticastBehavior(rtk_switch_port_L2P_get(port), rawAction)) != RT_ERR_OK)
405                return retVal;
406
407            break;
408        case MCAST_IPV6:
409            if (MCAST_ACTION_DROP_EX_RMA == mcast_action)
410                return RT_ERR_INPUT;
411            else
412                rawAction = (rtk_uint32)mcast_action;
413
414            if ((retVal = rtl8367c_setAsicUnknownIPv6MulticastBehavior(rtk_switch_port_L2P_get(port), rawAction)) != RT_ERR_OK)
415                return retVal;
416
417            break;
418        default:
419            break;
420    }
421
422    return RT_ERR_OK;
423}
424
425/* Function Name:
426 *      rtk_trap_unknownMcastPktAction_get
427 * Description:
428 *      Get behavior of unknown multicast
429 * Input:
430 *      type - unknown multicast packet type.
431 * Output:
432 *      pMcast_action - unknown multicast action.
433 * Return:
434 *      RT_ERR_OK                  - OK
435 *      RT_ERR_FAILED              - Failed
436 *      RT_ERR_SMI                 - SMI access error
437 *      RT_ERR_PORT_ID             - Invalid port number.
438 *      RT_ERR_NOT_ALLOWED         - Invalid operation.
439 *      RT_ERR_INPUT             - Invalid input parameters.
440 * Note:
441 *      When receives an unknown multicast packet, switch may trap, drop or flood this packet
442 *      (1) The unknown multicast packet type is as following:
443 *          - MCAST_L2
444 *          - MCAST_IPV4
445 *          - MCAST_IPV6
446 *      (2) The unknown multicast action is as following:
447 *          - MCAST_ACTION_FORWARD
448 *          - MCAST_ACTION_DROP
449 *          - MCAST_ACTION_TRAP2CPU
450 */
451rtk_api_ret_t rtk_trap_unknownMcastPktAction_get(rtk_port_t port, rtk_mcast_type_t type, rtk_trap_mcast_action_t *pMcast_action)
452{
453    rtk_api_ret_t retVal;
454    rtk_uint32 rawAction;
455
456    /* Check initialization state */
457    RTK_CHK_INIT_STATE();
458
459    /* Check Port Valid */
460    RTK_CHK_PORT_VALID(port);
461
462    if (type >= MCAST_END)
463        return RT_ERR_INPUT;
464
465    if(NULL == pMcast_action)
466        return RT_ERR_NULL_POINTER;
467
468    switch (type)
469    {
470        case MCAST_L2:
471            if ((retVal = rtl8367c_getAsicUnknownL2MulticastBehavior(rtk_switch_port_L2P_get(port), &rawAction)) != RT_ERR_OK)
472                return retVal;
473
474            if(L2_UNKOWN_MULTICAST_DROP_EXCLUDE_RMA == rawAction)
475                *pMcast_action = MCAST_ACTION_DROP_EX_RMA;
476            else
477                *pMcast_action = (rtk_trap_mcast_action_t)rawAction;
478
479            break;
480        case MCAST_IPV4:
481            if ((retVal = rtl8367c_getAsicUnknownIPv4MulticastBehavior(rtk_switch_port_L2P_get(port), &rawAction)) != RT_ERR_OK)
482                return retVal;
483
484            *pMcast_action = (rtk_trap_mcast_action_t)rawAction;
485            break;
486        case MCAST_IPV6:
487            if ((retVal = rtl8367c_getAsicUnknownIPv6MulticastBehavior(rtk_switch_port_L2P_get(port), &rawAction)) != RT_ERR_OK)
488                return retVal;
489
490            *pMcast_action = (rtk_trap_mcast_action_t)rawAction;
491            break;
492        default:
493            break;
494    }
495
496    return RT_ERR_OK;
497}
498
499/* Function Name:
500 *      rtk_trap_lldpEnable_set
501 * Description:
502 *      Set LLDP enable.
503 * Input:
504 *      enabled - LLDP enable, 0: follow RMA, 1: use LLDP action.
505 * Output:
506 *      None
507 * Return:
508 *      RT_ERR_OK                  - OK
509 *      RT_ERR_FAILED              - Failed
510 *      RT_ERR_SMI                 - SMI access error
511 *      RT_ERR_NOT_ALLOWED         - Invalid action.
512 *      RT_ERR_INPUT             - Invalid input parameters.
513 * Note:
514 *      - DMAC                                                 Assignment
515 *      - 01:80:c2:00:00:0e ethertype = 0x88CC    LLDP
516 *      - 01:80:c2:00:00:03 ethertype = 0x88CC
517 *      - 01:80:c2:00:00:00 ethertype = 0x88CC
518
519 */
520rtk_api_ret_t rtk_trap_lldpEnable_set(rtk_enable_t enabled)
521{
522    rtk_api_ret_t retVal;
523    rtl8367c_rma_t rmacfg;
524    rtk_enable_t tmp;
525
526    /* Check initialization state */
527    RTK_CHK_INIT_STATE();
528
529    if (enabled >= RTK_ENABLE_END)
530        return RT_ERR_ENABLE;
531
532    if ((retVal = rtl8367c_getAsicRmaLldp(&tmp, &rmacfg)) != RT_ERR_OK)
533        return retVal;
534
535    if ((retVal = rtl8367c_setAsicRmaLldp(enabled, &rmacfg)) != RT_ERR_OK)
536        return retVal;
537
538    return RT_ERR_OK;
539}
540
541/* Function Name:
542 *      rtk_trap_lldpEnable_get
543 * Description:
544 *      Get LLDP status.
545 * Input:
546 *      None
547 * Output:
548 *      pEnabled - LLDP enable, 0: follow RMA, 1: use LLDP action.
549 * Return:
550 *      RT_ERR_OK           - OK
551 *      RT_ERR_FAILED       - Failed
552 *      RT_ERR_SMI          - SMI access error
553 *      RT_ERR_INPUT         - Invalid input parameters.
554 * Note:
555 *      LLDP is as following definition.
556 *      - DMAC                                                 Assignment
557 *      - 01:80:c2:00:00:0e ethertype = 0x88CC    LLDP
558 *      - 01:80:c2:00:00:03 ethertype = 0x88CC
559 *      - 01:80:c2:00:00:00 ethertype = 0x88CC
560 */
561rtk_api_ret_t rtk_trap_lldpEnable_get(rtk_enable_t *pEnabled)
562{
563    rtk_api_ret_t retVal;
564    rtl8367c_rma_t rmacfg;
565
566    /* Check initialization state */
567    RTK_CHK_INIT_STATE();
568
569    if(NULL == pEnabled)
570        return RT_ERR_NULL_POINTER;
571
572    if ((retVal = rtl8367c_getAsicRmaLldp(pEnabled, &rmacfg)) != RT_ERR_OK)
573        return retVal;
574
575    return RT_ERR_OK;
576}
577
578/* Function Name:
579 *      rtk_trap_reasonTrapToCpuPriority_set
580 * Description:
581 *      Set priority value of a packet that trapped to CPU port according to specific reason.
582 * Input:
583 *      type     - reason that trap to CPU port.
584 *      priority - internal priority that is going to be set for specific trap reason.
585 * Output:
586 *      None.
587 * Return:
588 *      RT_ERR_OK
589 *      RT_ERR_FAILED
590 *      RT_ERR_NOT_INIT - The module is not initial
591 *      RT_ERR_INPUT    - Invalid input parameter
592 * Note:
593 *      Currently the trap reason that supported are listed as follows:
594 *      - TRAP_REASON_RMA
595 *      - TRAP_REASON_OAM
596 *      - TRAP_REASON_1XUNAUTH
597 *      - TRAP_REASON_VLANSTACK
598 *      - TRAP_REASON_UNKNOWNMC
599 */
600rtk_api_ret_t rtk_trap_reasonTrapToCpuPriority_set(rtk_trap_reason_type_t type, rtk_pri_t priority)
601{
602    rtk_api_ret_t retVal;
603    rtl8367c_rma_t rmacfg;
604
605    /* Check initialization state */
606    RTK_CHK_INIT_STATE();
607
608    if (type >= TRAP_REASON_END)
609        return RT_ERR_INPUT;
610
611    if (priority > RTL8367C_PRIMAX)
612        return  RT_ERR_QOS_INT_PRIORITY;
613
614    switch (type)
615    {
616        case TRAP_REASON_RMA:
617            if ((retVal = rtl8367c_getAsicRma(0, &rmacfg)) != RT_ERR_OK)
618                return retVal;
619            rmacfg.trap_priority= priority;
620            if ((retVal = rtl8367c_setAsicRma(0, &rmacfg)) != RT_ERR_OK)
621                return retVal;
622
623            break;
624        case TRAP_REASON_OAM:
625            if ((retVal = rtl8367c_setAsicOamCpuPri(priority)) != RT_ERR_OK)
626                return retVal;
627
628            break;
629        case TRAP_REASON_1XUNAUTH:
630            if ((retVal = rtl8367c_setAsic1xTrapPriority(priority)) != RT_ERR_OK)
631                return retVal;
632
633            break;
634        case TRAP_REASON_VLANSTACK:
635            if ((retVal = rtl8367c_setAsicSvlanTrapPriority(priority)) != RT_ERR_OK)
636                return retVal;
637
638            break;
639        case TRAP_REASON_UNKNOWNMC:
640            if ((retVal = rtl8367c_setAsicUnknownMulticastTrapPriority(priority)) != RT_ERR_OK)
641                return retVal;
642
643            break;
644        default:
645            return RT_ERR_CHIP_NOT_SUPPORTED;
646    }
647
648
649    return RT_ERR_OK;
650}
651
652
653/* Function Name:
654 *      rtk_trap_reasonTrapToCpuPriority_get
655 * Description:
656 *      Get priority value of a packet that trapped to CPU port according to specific reason.
657 * Input:
658 *      type      - reason that trap to CPU port.
659 * Output:
660 *      pPriority - configured internal priority for such reason.
661 * Return:
662 *      RT_ERR_OK
663 *      RT_ERR_FAILED
664 *      RT_ERR_NOT_INIT     - The module is not initial
665 *      RT_ERR_INPUT        - Invalid input parameter
666 *      RT_ERR_NULL_POINTER - NULL pointer
667 * Note:
668 *      Currently the trap reason that supported are listed as follows:
669 *      - TRAP_REASON_RMA
670 *      - TRAP_REASON_OAM
671 *      - TRAP_REASON_1XUNAUTH
672 *      - TRAP_REASON_VLANSTACK
673 *      - TRAP_REASON_UNKNOWNMC
674 */
675rtk_api_ret_t rtk_trap_reasonTrapToCpuPriority_get(rtk_trap_reason_type_t type, rtk_pri_t *pPriority)
676{
677    rtk_api_ret_t retVal;
678    rtl8367c_rma_t rmacfg;
679
680    /* Check initialization state */
681    RTK_CHK_INIT_STATE();
682
683    if (type >= TRAP_REASON_END)
684        return RT_ERR_INPUT;
685
686    if(NULL == pPriority)
687        return RT_ERR_NULL_POINTER;
688
689    switch (type)
690    {
691        case TRAP_REASON_RMA:
692            if ((retVal = rtl8367c_getAsicRma(0, &rmacfg)) != RT_ERR_OK)
693                return retVal;
694            *pPriority = rmacfg.trap_priority;
695
696            break;
697        case TRAP_REASON_OAM:
698            if ((retVal = rtl8367c_getAsicOamCpuPri(pPriority)) != RT_ERR_OK)
699                return retVal;
700
701            break;
702        case TRAP_REASON_1XUNAUTH:
703            if ((retVal = rtl8367c_getAsic1xTrapPriority(pPriority)) != RT_ERR_OK)
704                return retVal;
705
706            break;
707        case TRAP_REASON_VLANSTACK:
708            if ((retVal = rtl8367c_getAsicSvlanTrapPriority(pPriority)) != RT_ERR_OK)
709                return retVal;
710
711            break;
712        case TRAP_REASON_UNKNOWNMC:
713            if ((retVal = rtl8367c_getAsicUnknownMulticastTrapPriority(pPriority)) != RT_ERR_OK)
714                return retVal;
715
716            break;
717        default:
718            return RT_ERR_CHIP_NOT_SUPPORTED;
719
720    }
721
722    return RT_ERR_OK;
723}
724
725
726
727/* Function Name:
728 *      rtk_trap_rmaAction_set
729 * Description:
730 *      Set Reserved multicast address action configuration.
731 * Input:
732 *      type    - rma type.
733 *      rma_action - RMA action.
734 * Output:
735 *      None
736 * Return:
737 *      RT_ERR_OK           - OK
738 *      RT_ERR_FAILED       - Failed
739 *      RT_ERR_SMI          - SMI access error
740 *      RT_ERR_INPUT 		- Invalid input parameters.
741 * Note:
742 *
743 *      There are 48 types of Reserved Multicast Address frame for application usage.
744 *      (1)They are as following definition.
745 *      - TRAP_BRG_GROUP,
746 *      - TRAP_FD_PAUSE,
747 *      - TRAP_SP_MCAST,
748 *      - TRAP_1X_PAE,
749 *      - TRAP_UNDEF_BRG_04,
750 *      - TRAP_UNDEF_BRG_05,
751 *      - TRAP_UNDEF_BRG_06,
752 *      - TRAP_UNDEF_BRG_07,
753 *      - TRAP_PROVIDER_BRIDGE_GROUP_ADDRESS,
754 *      - TRAP_UNDEF_BRG_09,
755 *      - TRAP_UNDEF_BRG_0A,
756 *      - TRAP_UNDEF_BRG_0B,
757 *      - TRAP_UNDEF_BRG_0C,
758 *      - TRAP_PROVIDER_BRIDGE_GVRP_ADDRESS,
759 *      - TRAP_8021AB,
760 *      - TRAP_UNDEF_BRG_0F,
761 *      - TRAP_BRG_MNGEMENT,
762 *      - TRAP_UNDEFINED_11,
763 *      - TRAP_UNDEFINED_12,
764 *      - TRAP_UNDEFINED_13,
765 *      - TRAP_UNDEFINED_14,
766 *      - TRAP_UNDEFINED_15,
767 *      - TRAP_UNDEFINED_16,
768 *      - TRAP_UNDEFINED_17,
769 *      - TRAP_UNDEFINED_18,
770 *      - TRAP_UNDEFINED_19,
771 *      - TRAP_UNDEFINED_1A,
772 *      - TRAP_UNDEFINED_1B,
773 *      - TRAP_UNDEFINED_1C,
774 *      - TRAP_UNDEFINED_1D,
775 *      - TRAP_UNDEFINED_1E,
776 *      - TRAP_UNDEFINED_1F,
777 *      - TRAP_GMRP,
778 *      - TRAP_GVRP,
779 *      - TRAP_UNDEF_GARP_22,
780 *      - TRAP_UNDEF_GARP_23,
781 *      - TRAP_UNDEF_GARP_24,
782 *      - TRAP_UNDEF_GARP_25,
783 *      - TRAP_UNDEF_GARP_26,
784 *      - TRAP_UNDEF_GARP_27,
785 *      - TRAP_UNDEF_GARP_28,
786 *      - TRAP_UNDEF_GARP_29,
787 *      - TRAP_UNDEF_GARP_2A,
788 *      - TRAP_UNDEF_GARP_2B,
789 *      - TRAP_UNDEF_GARP_2C,
790 *      - TRAP_UNDEF_GARP_2D,
791 *      - TRAP_UNDEF_GARP_2E,
792 *      - TRAP_UNDEF_GARP_2F,
793 *      - TRAP_CDP.
794 *      - TRAP_CSSTP.
795 *      - TRAP_LLDP.
796 *      (2) The RMA action is as following:
797 *      - RMA_ACTION_FORWARD
798 *      - RMA_ACTION_TRAP2CPU
799 *      - RMA_ACTION_DROP
800 *      - RMA_ACTION_FORWARD_EXCLUDE_CPU
801 */
802rtk_api_ret_t rtk_trap_rmaAction_set(rtk_trap_type_t type, rtk_trap_rma_action_t rma_action)
803{
804    rtk_api_ret_t retVal;
805    rtl8367c_rma_t rmacfg;
806    rtk_uint32 tmp;
807
808    /* Check initialization state */
809    RTK_CHK_INIT_STATE();
810
811    if (type >= TRAP_END)
812        return RT_ERR_INPUT;
813
814    if (rma_action >= RMA_ACTION_END)
815        return RT_ERR_RMA_ACTION;
816
817    if (type >= 0 && type <= TRAP_UNDEF_GARP_2F)
818    {
819        if ((retVal = rtl8367c_getAsicRma(type, &rmacfg)) != RT_ERR_OK)
820            return retVal;
821
822        rmacfg.operation = rma_action;
823
824        if ((retVal = rtl8367c_setAsicRma(type, &rmacfg)) != RT_ERR_OK)
825            return retVal;
826    }
827    else if (type == TRAP_CDP)
828    {
829        if ((retVal = rtl8367c_getAsicRmaCdp(&rmacfg)) != RT_ERR_OK)
830            return retVal;
831
832        rmacfg.operation = rma_action;
833
834        if ((retVal = rtl8367c_setAsicRmaCdp(&rmacfg)) != RT_ERR_OK)
835            return retVal;
836    }
837    else if (type  == TRAP_CSSTP)
838    {
839        if ((retVal = rtl8367c_getAsicRmaCsstp(&rmacfg)) != RT_ERR_OK)
840            return retVal;
841
842        rmacfg.operation = rma_action;
843
844        if ((retVal = rtl8367c_setAsicRmaCsstp(&rmacfg)) != RT_ERR_OK)
845            return retVal;
846    }
847    else if (type  == TRAP_LLDP)
848    {
849        if ((retVal = rtl8367c_getAsicRmaLldp(&tmp, &rmacfg)) != RT_ERR_OK)
850            return retVal;
851
852        rmacfg.operation = rma_action;
853
854        if ((retVal = rtl8367c_setAsicRmaLldp(tmp, &rmacfg)) != RT_ERR_OK)
855            return retVal;
856    }
857    else
858        return RT_ERR_INPUT;
859
860    return RT_ERR_OK;
861}
862
863/* Function Name:
864 *      rtk_trap_rmaAction_get
865 * Description:
866 *      Get Reserved multicast address action configuration.
867 * Input:
868 *      type - rma type.
869 * Output:
870 *      pRma_action - RMA action.
871 * Return:
872 *      RT_ERR_OK           - OK
873 *      RT_ERR_FAILED       - Failed
874 *      RT_ERR_SMI          - SMI access error
875 *      RT_ERR_INPUT 		- Invalid input parameters.
876 * Note:
877 *      There are 48 types of Reserved Multicast Address frame for application usage.
878 *      (1)They are as following definition.
879 *      - TRAP_BRG_GROUP,
880 *      - TRAP_FD_PAUSE,
881 *      - TRAP_SP_MCAST,
882 *      - TRAP_1X_PAE,
883 *      - TRAP_UNDEF_BRG_04,
884 *      - TRAP_UNDEF_BRG_05,
885 *      - TRAP_UNDEF_BRG_06,
886 *      - TRAP_UNDEF_BRG_07,
887 *      - TRAP_PROVIDER_BRIDGE_GROUP_ADDRESS,
888 *      - TRAP_UNDEF_BRG_09,
889 *      - TRAP_UNDEF_BRG_0A,
890 *      - TRAP_UNDEF_BRG_0B,
891 *      - TRAP_UNDEF_BRG_0C,
892 *      - TRAP_PROVIDER_BRIDGE_GVRP_ADDRESS,
893 *      - TRAP_8021AB,
894 *      - TRAP_UNDEF_BRG_0F,
895 *      - TRAP_BRG_MNGEMENT,
896 *      - TRAP_UNDEFINED_11,
897 *      - TRAP_UNDEFINED_12,
898 *      - TRAP_UNDEFINED_13,
899 *      - TRAP_UNDEFINED_14,
900 *      - TRAP_UNDEFINED_15,
901 *      - TRAP_UNDEFINED_16,
902 *      - TRAP_UNDEFINED_17,
903 *      - TRAP_UNDEFINED_18,
904 *      - TRAP_UNDEFINED_19,
905 *      - TRAP_UNDEFINED_1A,
906 *      - TRAP_UNDEFINED_1B,
907 *      - TRAP_UNDEFINED_1C,
908 *      - TRAP_UNDEFINED_1D,
909 *      - TRAP_UNDEFINED_1E,
910 *      - TRAP_UNDEFINED_1F,
911 *      - TRAP_GMRP,
912 *      - TRAP_GVRP,
913 *      - TRAP_UNDEF_GARP_22,
914 *      - TRAP_UNDEF_GARP_23,
915 *      - TRAP_UNDEF_GARP_24,
916 *      - TRAP_UNDEF_GARP_25,
917 *      - TRAP_UNDEF_GARP_26,
918 *      - TRAP_UNDEF_GARP_27,
919 *      - TRAP_UNDEF_GARP_28,
920 *      - TRAP_UNDEF_GARP_29,
921 *      - TRAP_UNDEF_GARP_2A,
922 *      - TRAP_UNDEF_GARP_2B,
923 *      - TRAP_UNDEF_GARP_2C,
924 *      - TRAP_UNDEF_GARP_2D,
925 *      - TRAP_UNDEF_GARP_2E,
926 *      - TRAP_UNDEF_GARP_2F,
927 *      - TRAP_CDP.
928 *      - TRAP_CSSTP.
929 *      - TRAP_LLDP.
930 *      (2) The RMA action is as following:
931 *      - RMA_ACTION_FORWARD
932 *      - RMA_ACTION_TRAP2CPU
933 *      - RMA_ACTION_DROP
934 *      - RMA_ACTION_FORWARD_EXCLUDE_CPU
935 */
936rtk_api_ret_t rtk_trap_rmaAction_get(rtk_trap_type_t type, rtk_trap_rma_action_t *pRma_action)
937{
938    rtk_api_ret_t retVal;
939    rtl8367c_rma_t rmacfg;
940    rtk_uint32 tmp;
941
942    /* Check initialization state */
943    RTK_CHK_INIT_STATE();
944
945    if (type >= TRAP_END)
946        return RT_ERR_INPUT;
947
948    if(NULL == pRma_action)
949        return RT_ERR_NULL_POINTER;
950
951    if (type >= 0 && type <= TRAP_UNDEF_GARP_2F)
952    {
953        if ((retVal = rtl8367c_getAsicRma(type, &rmacfg)) != RT_ERR_OK)
954            return retVal;
955
956        *pRma_action = rmacfg.operation;
957    }
958    else if (type == TRAP_CDP)
959    {
960        if ((retVal = rtl8367c_getAsicRmaCdp(&rmacfg)) != RT_ERR_OK)
961            return retVal;
962
963        *pRma_action = rmacfg.operation;
964    }
965    else if (type == TRAP_CSSTP)
966    {
967        if ((retVal = rtl8367c_getAsicRmaCsstp(&rmacfg)) != RT_ERR_OK)
968            return retVal;
969
970        *pRma_action = rmacfg.operation;
971    }
972    else if (type == TRAP_LLDP)
973    {
974        if ((retVal = rtl8367c_getAsicRmaLldp(&tmp,&rmacfg)) != RT_ERR_OK)
975            return retVal;
976
977        *pRma_action = rmacfg.operation;
978    }
979    else
980        return RT_ERR_INPUT;
981
982    return RT_ERR_OK;
983}
984
985/* Function Name:
986 *      rtk_trap_rmaKeepFormat_set
987 * Description:
988 *      Set Reserved multicast address keep format configuration.
989 * Input:
990 *      type    - rma type.
991 *      enable - enable keep format.
992 * Output:
993 *      None
994 * Return:
995 *      RT_ERR_OK           - OK
996 *      RT_ERR_FAILED       - Failed
997 *      RT_ERR_SMI          - SMI access error
998 *      RT_ERR_INPUT 		- Invalid input parameters.
999 *      RT_ERR_ENABLE 		- Invalid IFG parameter
1000 * Note:
1001 *
1002 *      There are 48 types of Reserved Multicast Address frame for application usage.
1003 *      They are as following definition.
1004 *      - TRAP_BRG_GROUP,
1005 *      - TRAP_FD_PAUSE,
1006 *      - TRAP_SP_MCAST,
1007 *      - TRAP_1X_PAE,
1008 *      - TRAP_UNDEF_BRG_04,
1009 *      - TRAP_UNDEF_BRG_05,
1010 *      - TRAP_UNDEF_BRG_06,
1011 *      - TRAP_UNDEF_BRG_07,
1012 *      - TRAP_PROVIDER_BRIDGE_GROUP_ADDRESS,
1013 *      - TRAP_UNDEF_BRG_09,
1014 *      - TRAP_UNDEF_BRG_0A,
1015 *      - TRAP_UNDEF_BRG_0B,
1016 *      - TRAP_UNDEF_BRG_0C,
1017 *      - TRAP_PROVIDER_BRIDGE_GVRP_ADDRESS,
1018 *      - TRAP_8021AB,
1019 *      - TRAP_UNDEF_BRG_0F,
1020 *      - TRAP_BRG_MNGEMENT,
1021 *      - TRAP_UNDEFINED_11,
1022 *      - TRAP_UNDEFINED_12,
1023 *      - TRAP_UNDEFINED_13,
1024 *      - TRAP_UNDEFINED_14,
1025 *      - TRAP_UNDEFINED_15,
1026 *      - TRAP_UNDEFINED_16,
1027 *      - TRAP_UNDEFINED_17,
1028 *      - TRAP_UNDEFINED_18,
1029 *      - TRAP_UNDEFINED_19,
1030 *      - TRAP_UNDEFINED_1A,
1031 *      - TRAP_UNDEFINED_1B,
1032 *      - TRAP_UNDEFINED_1C,
1033 *      - TRAP_UNDEFINED_1D,
1034 *      - TRAP_UNDEFINED_1E,
1035 *      - TRAP_UNDEFINED_1F,
1036 *      - TRAP_GMRP,
1037 *      - TRAP_GVRP,
1038 *      - TRAP_UNDEF_GARP_22,
1039 *      - TRAP_UNDEF_GARP_23,
1040 *      - TRAP_UNDEF_GARP_24,
1041 *      - TRAP_UNDEF_GARP_25,
1042 *      - TRAP_UNDEF_GARP_26,
1043 *      - TRAP_UNDEF_GARP_27,
1044 *      - TRAP_UNDEF_GARP_28,
1045 *      - TRAP_UNDEF_GARP_29,
1046 *      - TRAP_UNDEF_GARP_2A,
1047 *      - TRAP_UNDEF_GARP_2B,
1048 *      - TRAP_UNDEF_GARP_2C,
1049 *      - TRAP_UNDEF_GARP_2D,
1050 *      - TRAP_UNDEF_GARP_2E,
1051 *      - TRAP_UNDEF_GARP_2F,
1052 *      - TRAP_CDP.
1053 *      - TRAP_CSSTP.
1054 *      - TRAP_LLDP.
1055 */
1056rtk_api_ret_t rtk_trap_rmaKeepFormat_set(rtk_trap_type_t type, rtk_enable_t enable)
1057{
1058    rtk_api_ret_t retVal;
1059    rtl8367c_rma_t rmacfg;
1060    rtk_uint32 tmp;
1061
1062    /* Check initialization state */
1063    RTK_CHK_INIT_STATE();
1064
1065    if (type >= TRAP_END)
1066        return RT_ERR_INPUT;
1067
1068    if (enable >= RTK_ENABLE_END)
1069        return RT_ERR_INPUT;
1070
1071    if (type >= 0 && type <= TRAP_UNDEF_GARP_2F)
1072    {
1073        if ((retVal = rtl8367c_getAsicRma(type, &rmacfg)) != RT_ERR_OK)
1074            return retVal;
1075
1076        rmacfg.keep_format = enable;
1077
1078        if ((retVal = rtl8367c_setAsicRma(type, &rmacfg)) != RT_ERR_OK)
1079            return retVal;
1080    }
1081    else if (type == TRAP_CDP)
1082    {
1083        if ((retVal = rtl8367c_getAsicRmaCdp(&rmacfg)) != RT_ERR_OK)
1084            return retVal;
1085
1086        rmacfg.keep_format = enable;
1087
1088        if ((retVal = rtl8367c_setAsicRmaCdp(&rmacfg)) != RT_ERR_OK)
1089            return retVal;
1090    }
1091    else if (type  == TRAP_CSSTP)
1092    {
1093        if ((retVal = rtl8367c_getAsicRmaCsstp(&rmacfg)) != RT_ERR_OK)
1094            return retVal;
1095
1096        rmacfg.keep_format = enable;
1097
1098        if ((retVal = rtl8367c_setAsicRmaCsstp(&rmacfg)) != RT_ERR_OK)
1099            return retVal;
1100    }
1101    else if (type  == TRAP_LLDP)
1102    {
1103        if ((retVal = rtl8367c_getAsicRmaLldp(&tmp, &rmacfg)) != RT_ERR_OK)
1104            return retVal;
1105
1106        rmacfg.keep_format = enable;
1107
1108        if ((retVal = rtl8367c_setAsicRmaLldp(tmp, &rmacfg)) != RT_ERR_OK)
1109            return retVal;
1110    }
1111    else
1112        return RT_ERR_INPUT;
1113
1114    return RT_ERR_OK;
1115}
1116
1117/* Function Name:
1118 *      rtk_trap_rmaKeepFormat_get
1119 * Description:
1120 *      Get Reserved multicast address action configuration.
1121 * Input:
1122 *      type - rma type.
1123 * Output:
1124 *      pEnable - keep format status.
1125 * Return:
1126 *      RT_ERR_OK           - OK
1127 *      RT_ERR_FAILED       - Failed
1128 *      RT_ERR_SMI          - SMI access error
1129 *      RT_ERR_INPUT 		- Invalid input parameters.
1130 * Note:
1131 *      There are 48 types of Reserved Multicast Address frame for application usage.
1132 *      They are as following definition.
1133 *      - TRAP_BRG_GROUP,
1134 *      - TRAP_FD_PAUSE,
1135 *      - TRAP_SP_MCAST,
1136 *      - TRAP_1X_PAE,
1137 *      - TRAP_UNDEF_BRG_04,
1138 *      - TRAP_UNDEF_BRG_05,
1139 *      - TRAP_UNDEF_BRG_06,
1140 *      - TRAP_UNDEF_BRG_07,
1141 *      - TRAP_PROVIDER_BRIDGE_GROUP_ADDRESS,
1142 *      - TRAP_UNDEF_BRG_09,
1143 *      - TRAP_UNDEF_BRG_0A,
1144 *      - TRAP_UNDEF_BRG_0B,
1145 *      - TRAP_UNDEF_BRG_0C,
1146 *      - TRAP_PROVIDER_BRIDGE_GVRP_ADDRESS,
1147 *      - TRAP_8021AB,
1148 *      - TRAP_UNDEF_BRG_0F,
1149 *      - TRAP_BRG_MNGEMENT,
1150 *      - TRAP_UNDEFINED_11,
1151 *      - TRAP_UNDEFINED_12,
1152 *      - TRAP_UNDEFINED_13,
1153 *      - TRAP_UNDEFINED_14,
1154 *      - TRAP_UNDEFINED_15,
1155 *      - TRAP_UNDEFINED_16,
1156 *      - TRAP_UNDEFINED_17,
1157 *      - TRAP_UNDEFINED_18,
1158 *      - TRAP_UNDEFINED_19,
1159 *      - TRAP_UNDEFINED_1A,
1160 *      - TRAP_UNDEFINED_1B,
1161 *      - TRAP_UNDEFINED_1C,
1162 *      - TRAP_UNDEFINED_1D,
1163 *      - TRAP_UNDEFINED_1E,
1164 *      - TRAP_UNDEFINED_1F,
1165 *      - TRAP_GMRP,
1166 *      - TRAP_GVRP,
1167 *      - TRAP_UNDEF_GARP_22,
1168 *      - TRAP_UNDEF_GARP_23,
1169 *      - TRAP_UNDEF_GARP_24,
1170 *      - TRAP_UNDEF_GARP_25,
1171 *      - TRAP_UNDEF_GARP_26,
1172 *      - TRAP_UNDEF_GARP_27,
1173 *      - TRAP_UNDEF_GARP_28,
1174 *      - TRAP_UNDEF_GARP_29,
1175 *      - TRAP_UNDEF_GARP_2A,
1176 *      - TRAP_UNDEF_GARP_2B,
1177 *      - TRAP_UNDEF_GARP_2C,
1178 *      - TRAP_UNDEF_GARP_2D,
1179 *      - TRAP_UNDEF_GARP_2E,
1180 *      - TRAP_UNDEF_GARP_2F,
1181 *      - TRAP_CDP.
1182 *      - TRAP_CSSTP.
1183 *      - TRAP_LLDP.
1184 */
1185rtk_api_ret_t rtk_trap_rmaKeepFormat_get(rtk_trap_type_t type, rtk_enable_t *pEnable)
1186{
1187    rtk_api_ret_t retVal;
1188    rtl8367c_rma_t rmacfg;
1189    rtk_uint32 tmp;
1190
1191    /* Check initialization state */
1192    RTK_CHK_INIT_STATE();
1193
1194    if (type >= TRAP_END)
1195        return RT_ERR_INPUT;
1196
1197    if(NULL == pEnable)
1198        return RT_ERR_NULL_POINTER;
1199
1200    if (type >= 0 && type <= TRAP_UNDEF_GARP_2F)
1201    {
1202        if ((retVal = rtl8367c_getAsicRma(type, &rmacfg)) != RT_ERR_OK)
1203            return retVal;
1204
1205        *pEnable = rmacfg.keep_format;
1206    }
1207    else if (type == TRAP_CDP)
1208    {
1209        if ((retVal = rtl8367c_getAsicRmaCdp(&rmacfg)) != RT_ERR_OK)
1210            return retVal;
1211
1212        *pEnable = rmacfg.keep_format;
1213    }
1214    else if (type == TRAP_CSSTP)
1215    {
1216        if ((retVal = rtl8367c_getAsicRmaCsstp(&rmacfg)) != RT_ERR_OK)
1217            return retVal;
1218
1219        *pEnable = rmacfg.keep_format;
1220    }
1221    else if (type == TRAP_LLDP)
1222    {
1223        if ((retVal = rtl8367c_getAsicRmaLldp(&tmp,&rmacfg)) != RT_ERR_OK)
1224            return retVal;
1225
1226        *pEnable = rmacfg.keep_format;
1227    }
1228    else
1229        return RT_ERR_INPUT;
1230
1231    return RT_ERR_OK;
1232}
1233
1234
1235
1236