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