RTL8305NB-CG寄存器定义

https://github.com/Undrizzle/apps/blob/58b712ebf8055266be3192df1292a2246a89d825/rtl8306e/rtk_api_ext.h

/*
* Copyright (C) 2010 Realtek Semiconductor Corp.
* All Rights Reserved.
*
* This program is the proprietary software of Realtek Semiconductor
* Corporation and/or its licensors, and only be used, duplicated,
* modified or distributed under the authorized license from Realtek.
*
* ANY USE OF THE SOFTWARE OTEHR THAN AS AUTHORIZED UNDER
* THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
*
* $Revision: 10083 $
* $Date: 2010-06-07 11:18:41 +0800 (星期一, 07 六月 2010) $
*
* Purpose : Realtek common API function list supported by RTL8306E switch,
* they could also be applied to chips
* RTL8306M/RTL8305N/RTL8303/RTL8304E/RTL8306N
*
* Feature : This file consists of following modules:
* (1) Port Configuration
* (2) Rate Limit
* (3) QOS
* (4) TRAP
* (5) VLAN
* (6) Spanning Tree
* (7) Address Table
* (8) CPU Port
* (9) Mirror
* (10) IEEE 802.1x
* (11) SVLAN
*/
#ifndef __RTK_API_EXT_H__
#define __RTK_API_EXT_H__
#include "rtl8306e_types.h"
#include "rtk_api.h"
/*
* Function Declaration
*/
/*Misc*/
/* Function Name:
* rtk_switch_init
* Description:
* Set chip to default configuration enviroment
* Input:
* none
* Output:
* none
* Return:
* RT_ERR_OK - Success
* RT_ERR_FAILED - Failure
* Note:
* The API can set chip registers to default configuration for
* different release chip model.
*/
extern rtk_api_ret_t rtk_switch_init(void);
/* Function Name:
* rtk_switch_maxPktLen_set
* Description:
* Set the max packet length of the specific unit
* Input:
* len - max packet length
* Output:
* none
* Return:
* RT_ERR_OK - Success
* RT_ERR_FAILED - Failure
* RT_ERR_INPUT - Invalid input parameter
* Note:
* The API can set max packet length of the specific unit to
* MAXPKTLEN_1522B,
* MAXPKTLEN_1536B,
* MAXPKTLEN_1552B,
* MAXPKTLEN_2000B,
*/
extern rtk_api_ret_t rtk_switch_maxPktLen_set(rtk_switch_maxPktLen_t len);
/* Function Name:
* rtk_switch_maxPktLen_get
* Description:
* Get the max packet length of the specific unit
* Input:
* none
* Output:
* pLen - the pointer of max packet length
* Return:
* RT_ERR_OK - Success
* RT_ERR_FAILED - Failure
* RT_ERR_NULL_POINTER - Input parameter is null pointer
* Note:
* The API can set max packet length of the specific unit to
* MAXPKTLEN_1522B,
* MAXPKTLEN_1536B,
* MAXPKTLEN_1552B,
* MAXPKTLEN_2000B,
*/
extern rtk_api_ret_t rtk_switch_maxPktLen_get(rtk_switch_maxPktLen_t *pLen);
/* Function Name:
* rtk_port_phyReg_set
* Description:
* Set PHY register data of the specific port
* Input:
* phy - phy number, 0 ~ 6
* reg - Register id
* regData - Register data
* Output:
* none
* Return:
* RT_ERR_OK - Success
* RT_ERR_FAILED - Failure
* Note:
* This API can set PHY register data of the specific port.
* RTL8306E switch has 5 FE port, and port 4 could be set as
* phy mode or mac mode, port 5 is mac mode which connect
* with mii interface. so parameter phy 0 ~4 means port 0 ~4
* phy register, 5 means port 4 mac mode, 6 means port 5.
*
*/
extern rtk_api_ret_t rtk_port_phyReg_set(rtk_port_t port, rtk_port_phy_reg_t reg, rtk_port_phy_data_t value);
/* Function Name:
* rtk_port_phyReg_get
* Description:
* Get PHY register data of the specific port
* Input:
* phy - phy number, 0 ~ 6
* reg - Register id
* Output:
* pData - the pointer of Register data
* Return:
* RT_ERR_OK - Success
* RT_ERR_FAILED - Failure
* Note:
* This API can set PHY register data of the specific port.
* RTL8306E switch has 5 FE port, and port 4 could be set as
* phy mode or mac mode, port 5 is mac mode which connect
* with mii interface. so parameter phy 0 ~4 means port 0 ~4
* phy register, 5 means port 4 mac mode, 6 means port 5.
*
*/
extern rtk_api_ret_t rtk_port_phyReg_get(rtk_port_t port, rtk_port_phy_reg_t reg, rtk_port_phy_data_t *pData);
/* Function Name:
* rtk_port_phyAutoNegoAbility_set
* Description:
* Set ethernet PHY auto-negotiation desired ability
* Input:
* port - Port id
* pAbility - Ability structure
* Output:
* none
* Return:
* RT_ERR_OK
* RT_ERR_FAILED
* RT_ERR_SMI
* RT_ERR_PORT_ID
* RT_ERR_PHY_REG_ID
* RT_ERR_NULL_POINTER
* RT_ERR_BUSYWAIT_TIMEOUT
*
* Note:
* (1) RTL8306E switch only has 5 phy, so the input port id should be 0~4.
* (2) In auto-negotiation mode, phy autoNegotiation ability must be enabled
*/
extern rtk_api_ret_t rtk_port_phyAutoNegoAbility_set(rtk_port_t port, rtk_port_phy_ability_t *pAbility);
/* Function Name:
* rtk_port_phyAutoNegoAbility_get
* Description:
* Get ethernet PHY auto-negotiation desired ability
* Input:
* port - Port id
* Output:
* pAbility - Ability structure
* Return:
* RT_ERR_OK
* RT_ERR_FAILED
* RT_ERR_SMI
* RT_ERR_PORT_ID
* RT_ERR_PHY_REG_ID
* RT_ERR_NULL_POINTER
* RT_ERR_PHY_AUTO_NEGO_MODE
* RT_ERR_BUSYWAIT_TIMEOUT
*
* Note:
* (1) RTL8306E switch only has 5 phy, so the input port id should be 0~4.
* (2) In auto-negotiation mode, phy autoNegotiation ability must be enabled
*/
extern rtk_api_ret_t rtk_port_phyAutoNegoAbility_get(rtk_port_t port, rtk_port_phy_ability_t *pAbility);
/* Function Name:
* rtk_port_phyForceModeAbility_set
* Description:
* Set the port PHY force mode, config its speed/duplex mode/pause/asy_pause
* Input:
* port - Port id
* pAbility - Ability structure
* Output:
* none
* Return:
* RT_ERR_OK
* RT_ERR_FAILED
* RT_ERR_SMI
* RT_ERR_PORT_ID
* RT_ERR_PHY_REG_ID
* RT_ERR_NULL_POINTER
* RT_ERR_PHY_FORCE_1000
* RT_ERR_BUSYWAIT_TIMEOUT
*
* Note:
* (1) RTL8306E switch only has 5 phy, so the input port id should be 0~4.
* (2) In force mode, phy autoNegotiation ability must be disabled.
*/
extern rtk_api_ret_t rtk_port_phyForceModeAbility_set(rtk_port_t port, rtk_port_phy_ability_t *pAbility);
/* Function Name:
* rtk_port_phyForceModeAbility_get
* Description:
* Get the port PHY speed/duplex mode/pause/asy_pause in force mode
* Input:
* port - Port id
* Output:
* pAbility - Ability structure
* Return:
* RT_ERR_OK
* RT_ERR_FAILED
* RT_ERR_SMI
* RT_ERR_PORT_ID
* RT_ERR_PHY_REG_ID
* RT_ERR_NULL_POINTER
* RT_ERR_BUSYWAIT_TIMEOUT
*
* Note:
* (1) RTL8306E switch only has 5 phy, so the input port id should be 0~4.
* (2) In force mode, phy autoNegotiation ability must be disabled.
*/
extern rtk_api_ret_t rtk_port_phyForceModeAbility_get(rtk_port_t port, rtk_port_phy_ability_t *pAbility);
/* Function Name:
* rtk_port_phyStatus_get
* Description:
* Get ethernet PHY linking status
* Input:
* port - Port id
* Output:
* pLinkStatus - the pointer of PHY link status
* pSpeed - the pointer of PHY link speed
* pDuplex - the pointer of PHY duplex
* Return:
* RT_ERR_OK
* RT_ERR_FAILED
* RT_ERR_SMI
* RT_ERR_PORT_ID
* RT_ERR_NULL_POINTER
*
* Note:
* RTL8306E switch only has 5 phy, so the input port id should be 0~4.
*/
extern rtk_api_ret_t rtk_port_phyStatus_get(rtk_port_t port, rtk_port_linkStatus_t *pLinkStatus, rtk_port_speed_t *pSpeed, rtk_port_duplex_t *pDuplex);
/* Function Name:
* rtk_port_macForceLinkExt0_set
* Description:
* Set external interface 0(MAC 5) force linking configuration.
* Input:
* mode - external interface mode
* pPortability - port ability configuration
* Output:
* None
* Return:
* RT_ERR_OK - Success
* RT_ERR_FAILED - Failure
* RT_ERR_INPUT - Invalid input parameters.
* Note:
* (1) This API can set external interface 0(MAC 5) force mode properties,
* including link status,speed,duplex,and tx pause and tx pause ability.
* In force mode, autoNegotiation ability must be disabled.
* (2) For 8306E, the external interface 0(MAC 5) operating mode can be
* MAC Mode (T)MII, PHY Mode (T)MII and RMII. The operating mode is
* determined by strapping pin upon reset, and can not be configured
* by software, except the selection of MII or TMII.
* (3)The input parament mode here is only used to select MII or TMII.
* When operating mode is configured as MAC Mode (T)MII or PHY Mode (T)MII
* via strapping pin, then the selection of MII or TMII can be done via software.
* For example, set mode MODE_EXT_TMII_MAC to select TMII, and set mode
* MODE_EXT_MII_MAC to select MII.
*/
extern rtk_api_ret_t rtk_port_macForceLinkExt0_set(rtk_mode_ext_t mode, rtk_port_mac_ability_t *pPortability);
/* Function Name:
* rtk_port_macForceLinkExt0_get
* Description:
* Get external interface 0(MAC 5) force linking configuration.
* Input:
* None
* Output:
* pMode - external interface mode
* pPortability - port ability configuration
* Return:
* RT_ERR_OK - Success
* RT_ERR_FAILED - Failure
* RT_ERR_INPUT - Invalid input parameters.
* Note:
* This API can get external interface 0 (MAC 5) force mode properties.
* The external interface 0 operating mode can be:
* - MODE_EXT_MII_MAC,
* - MODE_EXT_MII_PHY,
* - MODE_EXT_TMII_MAC,
* - MODE_EXT_TMII_PHY,
* - MODE_EXT_RMII,
*/
extern rtk_api_ret_t rtk_port_macForceLinkExt0_get(rtk_mode_ext_t *pMode, rtk_port_mac_ability_t *pPortability);
/* Function Name:
* rtk_port_isolation_set
* Description:
* Set permitted port isolation portmask
* Input:
* port - port id, 0 ~ 5
* portmask - Permit port mask
* Output:
* none
* Return:
* RT_ERR_OK - Success
* RT_ERR_PORT_ID - Invalid port number
* RT_ERR_PORT_MASK - Invalid portmask
* RT_ERR_FAILED - Failure
* Note:
* This API set the port mask that a port can trasmit packet to of each port.
* A port can only transmit packet to ports included in permitted portmask
*/
extern rtk_api_ret_t rtk_port_isolation_set(rtk_port_t port, rtk_portmask_t portmask);
/* Function Name:
* rtk_port_isolation_get
* Description:
* Get permitted port isolation portmask
* Input:
* port - port id, 0 ~ 5
* Output:
* pPortmask - the pointer of permit port mask
* Return:
* RT_ERR_OK - Success
* RT_ERR_PORT_ID - Invalid port number
* RT_ERR_NULL_POINTER - Input parameter is null pointer
* RT_ERR_FAILED - Failure
* Note:
* This API get the port mask that a port can trasmit packet to of each port.
* A port can only transmit packet to ports included in permitted portmask
*/
extern rtk_api_ret_t rtk_port_isolation_get(rtk_port_t port, rtk_portmask_t *pPortmask);
/* Function Name:
* rtk_stat_port_reset
* Description:
* Reset per port MIB counter by port.
* Input:
* port - port id.
* Output:
* None
* Return:
* RT_ERR_OK - set shared meter successfully
* RT_ERR_FAILED - FAILED to iset shared meter
* Note:
*/
extern rtk_api_ret_t rtk_stat_port_reset(rtk_port_t port);
/* Function Name:
* rtk_rate_igrBandwidthCtrlRate_set
* Description:
* Set port ingress bandwidth control
* Input:
* port - Port id
* rate - Rate of share meter
* ifg_include - Rate's calculation including IFG, ENABLE:include DISABLE:exclude
* Output:
* none
* Return:
* RT_ERR_OK - Success
* RT_ERR_PORT_ID - Invalid port number
* RT_ERR_FAILED - Failure
* RT_ERR_ENABLE - Invalid IFG parameter
* RT_ERR_INBW_RATE - Invalid ingress rate parameter
* Note:
* The rate unit is 64Kbps and the range is from 64Kbps to 100Mbps. The granularity of rate is 64Kbps.
* The ifg_include parameter is used for rate calculation with/without inter-frame-gap and preamble.
*/
extern rtk_api_ret_t rtk_rate_igrBandwidthCtrlRate_set( rtk_port_t port, rtk_rate_t rate, rtk_enable_t ifg_include);
/* Function Name:
* rtk_rate_igrBandwidthCtrlRate_get
* Description:
* Get port ingress bandwidth control
* Input:
* port - Port id
* Output:
* pRate - the pointer of rate of share meter
* pIfg_include - Rate's calculation including IFG, ENABLE:include DISABLE:exclude
* Return:
* RT_ERR_OK - Success
* RT_ERR_PORT_ID - Invalid port number
* RT_ERR_FAILED - Failure
* RT_ERR_ENABLE - Invalid IFG parameter
* RT_ERR_NULL_POINTER - null pointer
* Note:
* The rate unit is 64Kbps and the range is from 64Kbps to 100Mbps. The granularity of rate is 64Kbps.
* The ifg_include parameter is used for rate calculation with/without inter-frame-gap and preamble.
*/
extern rtk_api_ret_t rtk_rate_igrBandwidthCtrlRate_get(rtk_port_t port, rtk_rate_t *pRate, rtk_enable_t *pIfg_include);
/* Function Name:
* rtk_rate_egrBandwidthCtrlRate_set
* Description:
* Set port egress bandwidth control
* Input:
* port - Port id
* rate - Rate of bandwidth control
* ifg_include - Rate's calculation including IFG, ENABLE:include DISABLE:exclude
* Output:
* none
* Return:
* RT_ERR_OK - Success
* RT_ERR_PORT_ID - Invalid port number
* RT_ERR_FAILED - Failure
* RT_ERR_ENABLE - Invalid IFG parameter
* RT_ERR_QOS_EBW_RATE - Invalid egress rate parameter
* Note:
* The rate unit is 64Kbps and the range is from 64Kbps to 100Mbps. The granularity of rate is 64Kbps.
* The ifg_include parameter is used for rate calculation with/without inter-frame-gap and preamble.
*/
extern rtk_api_ret_t rtk_rate_egrBandwidthCtrlRate_set(rtk_port_t port, rtk_rate_t rate, rtk_enable_t ifg_include);
/* Function Name:
* rtk_rate_igrBandwidthCtrlRate_get
* Description:
* Get port ingress bandwidth control
* Input:
* port - Port id
* Output:
* pRate - the pointer of rate of bandwidth control
* pIfg_include - Rate's calculation including IFG, ENABLE:include DISABLE:exclude
* Return:
* RT_ERR_OK - Success
* RT_ERR_PORT_ID - Invalid port number
* RT_ERR_FAILED - Failure
* RT_ERR_NULL_POINTER - null pointer
* Note:
* The rate unit is 64Kbps and the range is from 64Kbps to 100Mbps. The granularity of rate is 64Kbps.
* The ifg_include parameter is used for rate calculation with/without inter-frame-gap and preamble.
*/
extern rtk_api_ret_t rtk_rate_egrBandwidthCtrlRate_get(rtk_port_t port, rtk_rate_t *pRate, rtk_enable_t *pIfg_include);
/* QoS */
/* Function Name:
* rtk_qos_init
* Description:
* Configure Qos default settings with queue number assigment to each port
* Input:
* queueNum - Queue number of each port
* Output:
* none
* Return:
* RT_ERR_OK - Success
* RT_ERR_FAILED - Failure
* RT_ERR_QUEUE_NUM - Error queue number
* Note:
* This API will initialize related Qos setting with queue number assigment.
* The queue number is from 1 to 4.
*/
extern rtk_api_ret_t rtk_qos_init(rtk_queue_num_t queueNum);
/* Function Name:
* rtk_qos_1pPriRemap_set
* Description:
* Configure 1Q priorities mapping to internal absolute priority
* Input:
* dot1p_pri - 802.1p priority value
* int_pri - internal priority value
* Output:
* none
* Return:
* RT_ERR_OK - Success
* RT_ERR_FAILED - Failure
* RT_ERR_VLAN_PRIORITY - Invalid 1p priority
* RT_ERR_QOS_INT_PRIORITY - Invalid priority
* Note:
* Priority of 802.1Q assignment for internal asic priority, and it is used for queue usage
* and packet scheduling.
*/
extern rtk_api_ret_t rtk_qos_1pPriRemap_set(rtk_pri_t dot1p_pri, rtk_pri_t int_pri);
/* Function Name:
* rtk_qos_priSel_set
* Description:
* Configure the priority order among different priority mechanisms.
* Input:
* pPriDec - priority level for port, dscp, 802.1Q, ACL and VID based priority decision.
* Output:
* None
* Return:
* RT_ERR_OK - success
* RT_ERR_NULL_POINTER - Input parameter is null pointer
* RT_ERR_FAILED - failure
* RT_ERR_QOS_SEL_PRI_SOURCE - Invalid priority decision source parameter.
* Note:
* (1)For 8306E, there are 5 types of priority mechanisms that could be set arbitration level, which are
* ACL-based priority, DSCP-based priority, 1Q-based priority, Port-based priority, VID-based priority.
* Each one could be set level from 1 to 5.
* (2)ASIC will follow user's arbitration level setting of priority mechanisms to select internal priority for receiving frame.
* If two priority mechanisms are the same level, the ASIC will chose the priority mechanism with highest level to
* assign internal priority to receiving frame.
*/
extern rtk_api_ret_t rtk_qos_priSel_set(rtk_priority_select_t *pPriDec);
/* Function Name:
* rtk_qos_priSel_get
* Description:
* Get the priority order configuration among different priority mechanism.
* Input:
* None
* Output:
* pPriDec - priority level for port, dscp, 802.1Q, ACL and VID based priority decision.
* Return:
* RT_ERR_OK - success
* RT_ERR_NULL_POINTER - Input parameter is null pointer
* RT_ERR_FAILED - failure
* Note:
* (1)For 8306E, there are 5 types of priority mechanisms that could be set arbitration level, which are
* ACL-based priority, DSCP-based priority, 1Q-based priority,Port-based priority, VID-based priority.
* Each one could be set level from 1 to 5.
* (2)ASIC will follow user's arbitration level setting of priority mechanisms to select internal priority for receiving frame.
* If two priority mechanisms are the same level, the ASIC will chose the priority mechanism with the highest level to
* assign internal priority to receiving frame.
*/
extern rtk_api_ret_t rtk_qos_priSel_get(rtk_priority_select_t *pPriDec);
/* Function Name:
* rtk_qos_1pPriRemap_get
* Description:
* Get 1Q priorities mapping to internal absolute priority
* Input:
* dot1p_pri - 802.1p priority value
* Output:
* pInt_pri - the pointer of internal priority value
* Return:
* RT_ERR_OK - Success
* RT_ERR_FAILED - Failure
* RT_ERR_VLAN_PRIORITY - Invalid 1p priority
* RT_ERR_NULL_POINTER - null pointer
* Note:
* Priority of 802.1Q assignment for internal asic priority, and it is used for queue usage
* and packet scheduling.
*/
extern rtk_api_ret_t rtk_qos_1pPriRemap_get(rtk_pri_t dot1p_pri, rtk_pri_t *pInt_pri);
/* Function Name:
* rtk_qos_dscpPriRemap_set
* Description:
* Set DSCP-based priority
* Input:
* code - dscp code
* int_pri - internal priority value
* Output:
* none
* Return:
* RT_ERR_OK - Success
* RT_ERR_FAILED - Failure
* RT_ERR_QOS_INT_PRIORITY - invalid internal priority
* RT_ERR_QOS_DSCP_VALUE - invalid DSCP value
* Note:
* switch support 16 kinds of dscp code:
* RTL8306_DSCP_EF
* - DSCP for the Expedited forwarding PHB, 101110
* RTL8306_DSCP_AFL1
* - DSCP for AF PHB Class 1 low drop, 001010
* RTL8306_DSCP_AFM1
* - DSCP for AF PHB Class 1 medium drop, 001100
* RTL8306_DSCP_AFH1
* - DSCP for AF PHB Class 1 high drop, 001110
* RTL8306_DSCP_AFL2
* - DSCP for AF PHB Class 2 low drop, 01001
* RTL8306_DSCP_AFM2
* - DSCP for AF PHB Class 2 medium drop, 010100
* RTL8306_DSCP_AFH2
* - DSCP for AF PHB Class 2 high drop, 010110
* RTL8306_DSCP_AFL3
* - DSCP for AF PHB Class 3 low drop, 011010
* RTL8306_DSCP_AFM3
* - DSCP for AF PHB Class 3 medium drop, 011100
* RTL8306_DSCP_AFH3
* - DSCP for AF PHB Class 3 high drop, 0111
* RTL8306_DSCP_AFL4
* - DSCP for AF PHB Class 4 low drop, 100010
* RTL8306_DSCP_AFM4
* - DSCP for AF PHB Class 4 medium drop, 100100
* RTL8306_DSCP_AFH4
* - DSCP for AF PHB Class 4 high drop, 100110
* RTL8306_DSCP_NC
* - DSCP for network control, 110000 or 111000
* RTL8306_DSCP_REG_PRI
* - DSCP Register match priority, user could define two dscp code
* RTL8306_DSCP_BF
* - DSCP Default PHB
*
* The Differentiated Service Code Point is a selector for router's per-hop behaviors. As a selector, there is no implication that a numerically
* greater DSCP implies a better network service. As can be seen, the DSCP totally overlaps the old precedence field of TOS. So if values of
* DSCP are carefully chosen then backward compatibility can be achieved.
*/
extern rtk_api_ret_t rtk_qos_dscpPriRemap_set(rtk_dscp_t dscp, rtk_pri_t int_pri);
/* Function Name:
* rtk_qos_dscpPriRemap_get
* Description:
* Get DSCP-based priority
* Input:
* dscp - dscp code
* Output:
* pInt_pri - the pointer of internal priority value
* Return:
* RT_ERR_OK - Success
* RT_ERR_FAILED - Failure
* RT_ERR_QOS_DSCP_VALUE - Invalid DSCP value
* RT_ERR_NULL_POINTER - Input parameter is null pointer
* Note:
* switch support 16 kinds of dscp code:
* RTL8306_DSCP_EF
* - DSCP for the Expedited forwarding PHB, 101110
* RTL8306_DSCP_AFL1
* - DSCP for AF PHB Class 1 low drop, 001010
* RTL8306_DSCP_AFM1
* - DSCP for AF PHB Class 1 medium drop, 001100
* RTL8306_DSCP_AFH1
* - DSCP for AF PHB Class 1 high drop, 001110
* RTL8306_DSCP_AFL2
* - DSCP for AF PHB Class 2 low drop, 01001
* RTL8306_DSCP_AFM2
* - DSCP for AF PHB Class 2 medium drop, 010100
* RTL8306_DSCP_AFH2
* - DSCP for AF PHB Class 2 high drop, 010110
* RTL8306_DSCP_AFL3
* - DSCP for AF PHB Class 3 low drop, 011010
* RTL8306_DSCP_AFM3
* - DSCP for AF PHB Class 3 medium drop, 011100
* RTL8306_DSCP_AFH3
* - DSCP for AF PHB Class 3 high drop, 0111
* RTL8306_DSCP_AFL4
* - DSCP for AF PHB Class 4 low drop, 100010
* RTL8306_DSCP_AFM4
* - DSCP for AF PHB Class 4 medium drop, 100100
* RTL8306_DSCP_AFH4
* - DSCP for AF PHB Class 4 high drop, 100110
* RTL8306_DSCP_NC
* - DSCP for network control, 110000 or 111000
* RTL8306_DSCP_REG_PRI
* - DSCP Register match priority, user could define two dscp code
* RTL8306_DSCP_BF
* - DSCP Default PHB
* The Differentiated Service Code Point is a selector for router's per-hop behaviors. As a selector, there is no implication that a numerically
* greater DSCP implies a better network service. As can be seen, the DSCP totally overlaps the old precedence field of TOS. So if values of
* DSCP are carefully chosen then backward compatibility can be achieved.
*/
extern rtk_api_ret_t rtk_qos_dscpPriRemap_get(rtk_dscp_t dscp, rtk_pri_t *pInt_pri);
/* Function Name:
* rtk_qos_portPri_set
* Description:
* Configure priority usage to each port
* Input:
* port - Port id.
* int_pri - internal priority value
* Output:
* none
* Return:
* RT_ERR_OK - Success
* RT_ERR_FAILED - Failure
* RT_ERR_PORT_ID - Error port id
* RT_ERR_QOS_INT_PRIORITY - Error internal priority value
* Note:
* The API can set priority of port assignments for queue usage and packet scheduling.
*/
extern rtk_api_ret_t rtk_qos_portPri_set(rtk_port_t port, rtk_pri_t int_pri) ;
/* Function Name:
* rtk_qos_portPri_get
* Description:
* Get priority usage to each port
* Input:
* port - Port id.
* Output:
* pInt_pri - the pointer of internal priority value
* Return:
* RT_ERR_OK - Success
* RT_ERR_FAILED - Failure
* RT_ERR_PORT_ID - Error port id
* RT_ERR_NULL_POINTER - null pointer
* Note:
* The API can get priority of port assignments for queue usage and packet scheduling.
*/
extern rtk_api_ret_t rtk_qos_portPri_get(rtk_port_t port, rtk_pri_t *pInt_pri) ;
/* Function Name:
* rtk_qos_priMap_set
* Description:
* Set internal priority mapping to queue ID for different queue number
* Input:
* queue_num - Queue number usage
* pPri2qid - Priority mapping to queue ID
* Output:
* none
* Return:
* RT_ERR_OK - Success
* RT_ERR_FAILED - Failure
* RT_ERR_QUEUE_ID - Error queue id
* RT_ERR_NULL_POINTER - null pointer
* Note:
* ASIC supports priority mapping to queue with different queue number from 1 to 4.
* For different queue numbers usage, ASIC supports different internal available queue IDs.
*/
extern rtk_api_ret_t rtk_qos_priMap_set(rtk_queue_num_t queue_num, rtk_qos_pri2queue_t *pPri2qid);
/* Function Name:
* rtk_qos_priMap_get
* Description:
* Get priority to queue ID mapping table parameters
* Input:
* queue_num - Queue number usage
* pPri2qid - Priority mapping to queue ID
* Output:
* none
* Return:
* RT_ERR_OK - Success
* RT_ERR_FAILED - Failure
* RT_ERR_QUEUE_ID - Error queue id
* RT_ERR_NULL_POINTER - null pointer
* Note:
* ASIC supports priority mapping to queue with different queue number from 1 to 4.
* For different queue numbers usage, ASIC supports different internal available queue IDs.
*/
extern rtk_api_ret_t rtk_qos_priMap_get(rtk_queue_num_t queue_num, rtk_qos_pri2queue_t *pPri2qid);
/* Function Name:
* rtk_qos_1pRemarkEnable_set
* Description:
* Set 802.1P remarking ability
* Input:
* port - port number (0~5)
* enabled - TRUE or FALSE
* Output:
* none
* Return:
* RT_ERR_OK - Success
* RT_ERR_FAILED - Failure
* RT_ERR_PORT_ID - Invalid port id
* Note:
*
*/
extern rtk_api_ret_t rtk_qos_1pRemarkEnable_set(rtk_port_t port, rtk_enable_t enable);
/* Function Name:
* rtk_qos_1pRemarkEnable_get
* Description:
* Get 802.1P remarking ability
* Input:
* port - port number (0~5)
* Output:
* pEnabled - pointer of the ability status
* Return:
* RT_ERR_OK - Success
* RT_ERR_FAILED - Failure
* RT_ERR_PORT_ID - Invalid port id
* RT_ERR_NULL_POINTER - Input parameter is null pointer
* Note:
*
*/
extern rtk_api_ret_t rtk_qos_1pRemarkEnable_get(rtk_port_t port, rtk_enable_t *pEnable);
/* Function Name:
* rtk_qos_1pRemark_set
* Description:
* Set 802.1P remarking priority
* Input:
* int_pri - Packet priority(0~4)
* dot1p_pri - 802.1P priority(0~7)
* Output:
* none
* Return:
* RT_ERR_OK - Success
* RT_ERR_FAILED - Failure
* RT_ERR_VLAN_PRIORITY - Invalid 1p priority
* RT_ERR_QOS_INT_PRIORITY - Invalid internal priority
* Note:
* switch determines packet priority, the priority souce could
* be port-based, 1Q-based, dscp-based, vid-based, ip address,
* cpu tag.
*/
extern rtk_api_ret_t rtk_qos_1pRemark_set(rtk_pri_t int_pri, rtk_pri_t dot1p_pri);
/* Function Name:
* rtk_qos_1pRemark_get
* Description:
* Get 802.1P remarking priority
* Input:
* int_pri - Packet priority(0~4)
* Output:
* pDot1p_pri - the pointer of 802.1P priority(0~7)
* Return:
* RT_ERR_OK - Success
* RT_ERR_FAILED - Failure
* RT_ERR_NULL_POINTER - Input parameter is null pointer
* RT_ERR_QOS_INT_PRIORITY - Invalid internal priority
* Note:
* switch determines packet priority, the priority souce could
* be port-based, 1Q-based, dscp-based, vid-based, ip address,
* cpu tag.
*/
extern rtk_api_ret_t rtk_qos_1pRemark_get(rtk_pri_t int_pri, rtk_pri_t *pDot1p_pri);
/* Trap & Reserved Multicast Address (More Action like leaky, bypass storm not define) */
/* Function Name:
* rtk_trap_unknownMcastPktAction_set
* Description:
* Set behavior of unknown multicast
* Input:
* port - port id
* type - unknown multicast packet type
* mcast_action - unknown multicast action
* Output:
* none
* Return:
* RT_ERR_OK - Success
* RT_ERR_FAILED - Failure
* RT_ERR_PORT_ID - Invalid port id
* RT_ERR_INPUT - Invalid input parameter
* Note:
* When receives an unknown multicast packet, switch may trap, drop this packet
* The unknown multicast packet type is as following:
* - MCAST_IPV4
* - MCAST_IPV6
* The unknown multicast action is as following:
* - MCAST_ACTION_FORWARD
* - MCAST_ACTION_DROP
*/
extern rtk_api_ret_t rtk_trap_unknownMcastPktAction_set(rtk_port_t port, rtk_mcast_type_t type, rtk_trap_mcast_action_t mcast_action);
/* Function Name:
* rtk_trap_unknownMcastPktAction_get
* Description:
* Get behavior of unknown multicast
* Input:
* port - port id
* type - unknown multicast packet type
* Output:
* pMcast_action - the pointer of unknown multicast action
* Return:
* RT_ERR_OK - Success
* RT_ERR_FAILED - Failure
* RT_ERR_PORT_ID - Invalid port id
* RT_ERR_NULL_POINTER - Input parameter is null pointer
* Note:
* When receives an unknown multicast packet, switch may trap, drop this packet.
* The unknown multicast packet type is as following:
* - MCAST_IPV4
* - MCAST_IPV6
* The unknown multicast action is as following:
* - MCAST_ACTION_FORWARD
* - MCAST_ACTION_DROP
*/
extern rtk_api_ret_t rtk_trap_unknownMcastPktAction_get(rtk_port_t port, rtk_mcast_type_t type, rtk_trap_mcast_action_t *pMcast_action);
/* Function Name:
* rtk_trap_igmpCtrlPktAction_set
* Description:
* Set IGMP/MLD trap function
* Input:
* type - IGMP/MLD packet type
* igmp_action - IGMP/MLD action
* Output:
* none
* Return:
* RT_ERR_OK - Success
* RT_ERR_FAILED - Failure
* RT_ERR_INPUT - Invalid input parameter
* RT_ERR_NOT_ALLOWED - Actions not allowed by the function
* Note:
* This API can set both IPv4 IGMP/IPv6 MLD with/without PPPoE header trapping function.
* All 4 kinds of IGMP/MLD function can be set separately.
* The IGMP/MLD packet type is as following:
* - IGMP_IPV4
* - IGMP_MLD
* - IGMP_PPPOE_IPV4
* - IGMP_PPPOE_MLD
* The IGMP/MLD action is as following:
* - IGMP_ACTION_FORWARD
* - IGMP_ACTION_TRAP2CPU
*/
extern rtk_api_ret_t rtk_trap_igmpCtrlPktAction_set(rtk_igmp_type_t type, rtk_trap_igmp_action_t igmp_action);
/* Function Name:
* rtk_trap_igmpCtrlPktAction_get
* Description:
* Get IGMP/MLD trap function
* Input:
* type - IGMP/MLD packet type
* Output:
* pIgmp_action - the pointer of IGMP/MLD action
* Return:
* RT_ERR_OK - Success
* RT_ERR_FAILED - Failure
* RT_ERR_INPUT - Invalid input parameter
* RT_ERR_NULL_POINTER - Input parameter is null pointer
* Note:
* This API can get both IPv4 IGMP/IPv6 MLD with/without PPPoE header trapping function.
* All 4 kinds of IGMP/MLD function can be set separately.
* The IGMP/MLD packet type is as following:
* - IGMP_IPV4
* - IGMP_MLD
* - IGMP_PPPOE_IPV4
* - IGMP_PPPOE_MLD
* The IGMP/MLD action is as following:
* - IGMP_ACTION_FORWARD
* - IGMP_ACTION_TRAP2CPU
*/
extern rtk_api_ret_t rtk_trap_igmpCtrlPktAction_get(rtk_igmp_type_t type, rtk_trap_igmp_action_t *pIgmp_action);
/* CVLAN */
/* Function Name:
* rtk_vlan_init
* Description:
* Initialize VLAN
* Input:
* none
* Output:
* none
* Return:
* RT_ERR_OK - Success
* RT_ERR_FAILED - Failure
* Note:
* VLAN is disabled by default. User has to call this API to enable VLAN before
* using it. And It will set a default VLAN(vid 1) including all ports and set
* all ports PVID to the default VLAN.
*/
extern rtk_api_ret_t rtk_vlan_init(void);
/* Function Name:
* rtk_vlan_set
* Description:
* Set a VLAN entry
* Input:
* vid - VLAN ID to configure, should be 1~4094
* mbrmsk - VLAN member set portmask
* untagmsk - VLAN untag set portmask
* fid - filtering database id, could be any value for RTL8306E
* Output:
* none
* Return:
* RT_ERR_OK - Success
* RT_ERR_FAILED - Failure
* RT_ERR_VLAN_VID - Invalid vid
* RT_ERR_INPUT - Invalid input parameter
* RT_ERR_TBL_FULL - Input table full
* Note:
* There are 16 VLAN entry supported. User could configure the member set and untag set
* for specified vid through this API. The portmask's bit N means port N.
* For example, mbrmask 23=0x17=010111 means port 0,1,2,4 in the member set.
* FID is for SVL/IVL usage, and the range is 0~4095, rtl8306E only supports SVL,
* so fid is no useage.
*/
extern rtk_api_ret_t rtk_vlan_set(rtk_vlan_t vid, rtk_portmask_t mbrmsk, rtk_portmask_t untagmsk, rtk_fid_t fid);
/* Function Name:
* rtk_vlan_get
* Description:
* Get a VLAN entry
* Input:
* vid - VLAN ID to configure
* Output:
* pMbrmsk - VLAN member set portmask
* pUntagmsk - VLAN untag set portmask
* pFid - filtering database id
* Return:
* RT_ERR_OK - Success
* RT_ERR_FAILED - Failure
* RT_ERR_VLAN_VID - Invalid vid
* RT_ERR_NULL_POINTER - Input parameter is null pointer
* RT_ERR_VLAN_ENTRY_NOT_FOUND - Specified vlan entry not found
* Note:
* There are 16 VLAN entry supported. User could configure the member set and untag set
* for specified vid through this API. The portmask's bit N means port N.
* For example, mbrmask 23=0x17=010111 means port 0,1,2,4 in the member set.
* FID is for SVL/IVL usage, and the range is 0~4095, rtl8306E only supports SVL,
* so fid is no useage.
*/
extern rtk_api_ret_t rtk_vlan_get(rtk_vlan_t vid, rtk_portmask_t *pMbrmsk, rtk_portmask_t *pUntagmsk, rtk_fid_t *pFid);
/* Function Name:
* rtk_vlan_destroy
* Description:
* delete vid from vlan table
* Input:
* vid - VLAN ID to configure
* Output:
* none
* Return:
* RT_ERR_OK - Success
* RT_ERR_FAILED - Failure
* RT_ERR_VLAN_VID - Invalid vid
* RT_ERR_VLAN_ENTRY_NOT_FOUND - Specified vlan entry not found
* Note:
*
*/
extern rtk_api_ret_t rtk_vlan_destroy(rtk_vlan_t vid);
/* Function Name:
* rtk_vlan_portPvid_set
* Description:
* Set port to specified VLAN ID(PVID)
* Input:
* port - Port id
* pvid - Specified VLAN ID
* priority - 802.1p priority for the PVID, 0~3 for RTL8306E
* Output:
* none
* Return:
* RT_ERR_OK - Success
* RT_ERR_FAILED - Failure
* RT_ERR_VLAN_VID - Invalid vid
* RT_ERR_VLAN_PRIORITY - Invalid 1p priority
* RT_ERR_VLAN_ENTRY_NOT_FOUND - Specified vlan entry not found
* Note:
* The API is used for Port-based VLAN. The untagged frame received from the
* port will be classified to the specified VLAN and assigned to the specified priority.
*/
extern rtk_api_ret_t rtk_vlan_portPvid_set(rtk_port_t port, rtk_vlan_t pvid, rtk_pri_t priority);
/* Function Name:
* rtk_vlan_portPvid_get
* Description:
* Get VLAN ID(PVID) on specified port
* Input:
* port - Port id
* Output:
* pPvid - Specified VLAN ID
* pPriority - 802.1p priority for the PVID
* Return:
* RT_ERR_OK - Success
* RT_ERR_FAILED - Failure
* RT_ERR_PORT_ID - Invalid port id
* RT_ERR_NULL_POINTER - Input parameter is null pointer
* Note:
* The API is used for Port-based VLAN. The untagged frame received from the
* port will be classified to the specified VLAN and assigned to the specified priority.
*/
extern rtk_api_ret_t rtk_vlan_portPvid_get(rtk_port_t port, rtk_vlan_t *pPvid, rtk_pri_t *pPriority);
/* Function Name:
* rtk_vlan_portIgrFilterEnable_set
* Description:
* Set VLAN ingress for each port
* Input:
* port - Port id
* igr_filter - VLAN ingress function enable status
* Output:
* none
* Return:
* RT_ERR_OK - Success
* RT_ERR_FAILED - Failure
* Note:
* RTL8306E use one ingress filter for whole system, not for each port, so
* any port you set will affect all ports ingress filter setting.
* While VLAN function is enabled, ASIC will decide VLAN ID for each received frame
* and get belonged member ports from VLAN table. If received port is not belonged
* to VLAN member ports, ASIC will drop received frame if VLAN ingress function is enabled.
*/
extern rtk_api_ret_t rtk_vlan_portIgrFilterEnable_set(rtk_port_t port, rtk_enable_t igr_filter);
/* Function Name:
* rtk_vlan_portIgrFilterEnable_get
* Description:
* get VLAN ingress for each port
* Input:
* port - Port id
* Output:
* pIgr_filter - the pointer of VLAN ingress function enable status
* Return:
* RT_ERR_OK - Success
* RT_ERR_FAILED - Failure
* Note:
* RTL8306E use one ingress filter for whole system, not for each port, so
* any port you set will affect all ports ingress filter setting.
* While VLAN function is enabled, ASIC will decide VLAN ID for each received frame
* and get belonged member ports from VLAN table. If received port is not belonged
* to VLAN member ports, ASIC will drop received frame if VLAN ingress function is enabled.
*/
extern rtk_api_ret_t rtk_vlan_portIgrFilterEnable_get(rtk_port_t port, rtk_enable_t *pIgr_filter);
/* Function Name:
* rtk_vlan_portAcceptFrameType_set
* Description:
* Set VLAN support frame type
* Input:
* port - Port id
* accept_frame_type - accept frame type
* Output:
* none
* Return:
* RT_ERR_OK - Success
* RT_ERR_FAILED - Failure
* RT_ERR_PORT_ID - Invalid port id
* Note:
* The API is used for checking 802.1Q tagged frames.
* The accept frame type as following:
* - ACCEPT_FRAME_TYPE_ALL
* - ACCEPT_FRAME_TYPE_TAG_ONLY
* - ACCEPT_FRAME_TYPE_UNTAG_ONLY
*/
extern rtk_api_ret_t rtk_vlan_portAcceptFrameType_set(rtk_port_t port, rtk_vlan_acceptFrameType_t accept_frame_type);
/* Function Name:
* rtk_vlan_portAcceptFrameType_get
* Description:
* Get VLAN support frame type
* Input:
* port - Port id
* accept_frame_type - accept frame type
* Output:
* none
* Return:
* RT_ERR_OK - Success
* RT_ERR_FAILED - Failure
* RT_ERR_PORT_ID - Invalid port id
* RT_ERR_VLAN_ACCEPT_FRAME_TYPE - Invalid accept frame type
* Note:
* The API is used for checking 802.1Q tagged frames.
* The accept frame type as following:
* - ACCEPT_FRAME_TYPE_ALL
* - ACCEPT_FRAME_TYPE_TAG_ONLY
* - ACCEPT_FRAME_TYPE_UNTAG_ONLY
*/
extern rtk_api_ret_t rtk_vlan_portAcceptFrameType_get(rtk_port_t port, rtk_vlan_acceptFrameType_t *pAccept_frame_type);
/* Function Name:
* rtk_vlan_vlanBasedPriority_set
* Description:
* Set VLAN priority for each CVLAN
* Input:
* vid -Specified VLAN ID
* priority -priority for the VID
* Output:
* none
* Return:
* RT_ERR_OK - Success
* RT_ERR_FAILED - Failure
* RT_ERR_VLAN_VID - Invalid vid
* RT_ERR_VLAN_PRIORITY - Invalid 1p priority
* RT_ERR_VLAN_ENTRY_NOT_FOUND - Specified vlan entry not found
* Note:
* This API is used to set priority per VLAN.
*/
extern rtk_api_ret_t rtk_vlan_vlanBasedPriority_set(rtk_vlan_t vid, rtk_pri_t priority);
/* Function Name:
* rtk_vlan_vlanBasedPriority_get
* Description:
* Get VLAN priority for each CVLAN
* Input:
* vid -Specified VLAN ID
* Output:
* pPriority -the pointer of priority for the VID
* Return:
* RT_ERR_OK - Success
* RT_ERR_FAILED - Failure
* RT_ERR_VLAN_VID - Invalid vid
* RT_ERR_NULL_POINTER - Input parameter is null pointer
* RT_ERR_VLAN_ENTRY_NOT_FOUND - Specified vlan entry not found
* Note:
* This API is used to set priority per VLAN.
*/
extern rtk_api_ret_t rtk_vlan_vlanBasedPriority_get(rtk_vlan_t vid, rtk_pri_t *pPriority);
/* Function Name:
* rtk_vlan_vidTranslation_set
* Description:
* Set vid translated to new vid
* Input:
* vid - old vid
* nvid - new vid
* Output:
* none
* Return:
* RT_ERR_OK - Success
* RT_ERR_FAILED - Failure
* RT_ERR_VLAN_VID - Invalid vid
* RT_ERR_VLAN_ENTRY_NOT_FOUND - Specified vlan entry not found
* Note:
* This API is used to translate a vid to a new vid, the new vid could be
* used by Q-in-Q or vlan translation function.
*/
extern rtk_api_ret_t rtk_vlan_vidTranslation_set(rtk_vlan_t vid, rtk_vlan_t nvid);
/* Function Name:
* rtk_vlan_vidTranslation_get
* Description:
* Get vid translation new vid
* Input:
* vid - old vid
* Output:
* pNvid - the pointer of new vid
* Return:
* RT_ERR_OK - Success
* RT_ERR_FAILED - Failure
* RT_ERR_VLAN_VID - Invalid vid
* RT_ERR_NULL_POINTER - NULL pointer
* RT_ERR_VLAN_ENTRY_NOT_FOUND - Specified vlan entry not found
* Note:
* This API is used to translate a vid to a new vid, the new vid could be
* used by Q-in-Q or vlan translation function.
*/
extern rtk_api_ret_t rtk_vlan_vidTranslation_get(rtk_vlan_t vid, rtk_vlan_t *pNvid);
/* Function Name:
* rtk_vlan_vidTranslationEnable_set
* Description:
* Set vlan translation function enabled or disabled
* Input:
* enable - enable or disable
* nniMask - NNI port mask
* Output:
* pNvid - the pointer of new vid
* Return:
* RT_ERR_OK - Success
* RT_ERR_FAILED - Failure
* RT_ERR_PORT_MASK - Error port mask
* Note:
* VLAN translation only happens between UNI and NNI port,
* in nniMask, 1 means the port is NNI port, 0 means the port
* is UNI port
*/
extern rtk_api_ret_t rtk_vlan_vidTranslationEnable_set(rtk_enable_t enable, rtk_portmask_t nniMask);
/* Function Name:
* rtk_vlan_vidTranslationEnable_get
* Description:
* Get vlan translation function enabled or disabled
* Input:
* Output:
* pEnable - the pointer of enable or disable
* pNniMask - the pointer of NNI port mask
* Return:
* RT_ERR_OK - Success
* RT_ERR_FAILED - Failure
* RT_ERR_NULL_POINTER - NULL pointer
* Note:
* VLAN translation only happens between UNI and NNI port,
* in nniMask, 1 means the port is NNI port, 0 means the port
* is UNI port
*/
extern rtk_api_ret_t rtk_vlan_vidTranslationEnable_get(rtk_enable_t *pEnable, rtk_portmask_t *pNniMask);
/* Function Name:
* rtk_vlan_tagSrc_set
* Description:
* Set tag vid and priority source for Q-in-Q and VLAN translation
* Input:
* port - port id
* vidSrc - vid source
* priSrc - priority source
* Output:
* none
* Return:
* RT_ERR_OK - Success
* RT_ERR_FAILED - Failure
* RT_ERR_PORT_ID - error port id
* Note:
* Q-in-Q(SVLAN) and VLAN translation will modify tag,
* the API could set outer tag or translated VLAN tag
* vid/priority source.
* - vidSrc:
* - RTL8306E_VIDSRC_POVID - port-based otag vid,
* - RTL8306E_VIDSRC_NVID - new vid(translated vid)
* - priSrc:
* - RTL8306E_PRISRC_PPRI - port-based otag priority,
* - RTL8306E_PRISRC_1PRMK - 1p remarking priority
*/
extern rtk_api_ret_t rtk_vlan_tagSrc_set(rtk_port_t port, rtk_vidSrc_t vidSrc, rtk_priSrc_t priSrc);
/* Function Name:
* rtk_vlan_tagSrc_get
* Description:
* Get tag vid and priority source for Q-in-Q and VLAN translation
* Input:
* port - port id
* Output:
* pVidSrc - the pointer of vid source
* pPriSrc - the pointer of priority source
* Return:
* RT_ERR_OK - Success
* RT_ERR_FAILED - Failure
* RT_ERR_PORT_ID - error port id
* Note:
* Q-in-Q(SVLAN) and VLAN translation will modify tag,
* the API could set outer tag or tranlated VLAN tag
* vid/priority source.
* - vidSrc:
* - RTL8306E_VIDSRC_POVID - port-based otag vid,
* - RTL8306E_VIDSRC_NVID - new vid(translated vid)
* - priSrc:
* - RTL8306E_PRISRC_PPRI - port-based otag priority,
* - RTL8306E_PRISRC_1PRMK - 1p remarking priority
*/
extern rtk_api_ret_t rtk_vlan_tagSrc_get(rtk_port_t port, rtk_vidSrc_t *pVidSrc, rtk_priSrc_t *pPriSrc);
/*Spanning Tree*/
/* Function Name:
* rtk_stp_mstpState_set
* Description:
* Configure spanning tree state per port
* Input:
* msti - Multiple spanning tree instance, no use for RTL8306E
* port - Port id
* stp_state - Spanning tree state
* Output:
* none
* Return:
* RT_ERR_OK - Success
* RT_ERR_FAILED - Failure
* RT_ERR_PORT_ID - Invalid port id
* RT_ERR_MSTP_STATE - Invalid spanning tree status
* Note:
* Because RTL8306E does not support multiple spanning tree, so msti is no use.
* There are four states supported by ASIC.
* - STP_STATE_DISABLED
* - STP_STATE_BLOCKING
* - STP_STATE_LEARNING
* - STP_STATE_FORWARDING
*/
extern rtk_api_ret_t rtk_stp_mstpState_set(rtk_stp_msti_id_t msti, rtk_port_t port, rtk_stp_state_t stp_state);
/* Function Name:
* rtk_stp_mstpState_get
* Description:
* Get Configuration of spanning tree state per port
* Input:
* msti - Multiple spanning tree instance, no use for RTL8306E
* port - Port id
* Output:
* pStp_state - the pointer of Spanning tree state
* Return:
* RT_ERR_OK - Success
* RT_ERR_FAILED - Failure
* RT_ERR_PORT_ID - Invalid port id
* RT_ERR_NULL_POINTER - Input parameter is null pointer
* Note:
* Because RTL8306E does not support multiple spanning tree, so msti is no use.
* There are four states supported by ASIC.
* - STP_STATE_DISABLED
* - STP_STATE_BLOCKING
* - STP_STATE_LEARNING
* - STP_STATE_FORWARDING
*/
extern rtk_api_ret_t rtk_stp_mstpState_get(rtk_stp_msti_id_t msti, rtk_port_t port, rtk_stp_state_t *pStp_state);
/* LUT */
/* Function Name:
* rtk_l2_addr_add
* Description:
* Set LUT unicast entry
* Input:
* pMac - 6 bytes unicast(I/G bit is 0) mac address to be written into LUT
* pL2_data - the mac address attributes
* Output:
* none
* Return:
* RT_ERR_OK - Success
* RT_ERR_FAILED - Failure
* RT_ERR_INPUT - Invalid input parameter
* RT_ERR_MAC - Wrong mac address, must be unicast mac
* RT_ERR_NULL_POINTER - Input parameter is null pointer
* RT_ERR_L2_INDEXTBL_FULL - The L2 index table is full
* Note:
* If the unicast mac address already existed in LUT, it will udpate the status of the entry.
* Otherwise, it will find an empty or asic auto learned entry to write. If all the entries
* with the same hash value can't be replaced, ASIC will return a RT_ERR_L2_INDEXTBL_FULL error.
* for RTL8306E, pL2_data member fid and sa_block is no use, so it can be chosen any value.
*/
extern rtk_api_ret_t rtk_l2_addr_add(rtk_mac_t *pMac, rtk_l2_ucastAddr_t *pL2_data);
/* Function Name:
* rtk_l2_addr_get
* Description:
* Get LUT unicast entry
* Input:
* pMac - 6 bytes unicast(I/G bit is 0) mac address to be gotten
* fid - filtering database id, could be any value for RTL8306E switch
* Output:
* pL2_data - the mac address attributes
* Return:
* RT_ERR_OK - Success
* RT_ERR_FAILED - Failure
* RT_ERR_INPUT - Invalid input parameter
* RT_ERR_MAC - Wrong mac address, must be unicast mac
* RT_ERR_NULL_POINTER - Input parameter is null pointer
* RT_ERR_L2_ENTRY_NOTFOUND - Specified entry not found
* Note:
* If the unicast mac address existed in LUT, it will return the port where
* the mac is learned, 802.1x authorized status and dynamic/static entry,
* Otherwise, it will return a RT_ERR_L2_ENTRY_NOTFOUND error.
*/
extern rtk_api_ret_t rtk_l2_addr_get(rtk_mac_t *pMac, rtk_fid_t fid, rtk_l2_ucastAddr_t *pL2_data);
/* Function Name:
* rtk_l2_addr_del
* Description:
* Delete LUT unicast entry
* Input:
* pMac - 6 bytes unicast mac address to be deleted
* fid - filtering database id, could be any value for RTL8306E switch
* Output:
* none
* Return:
* RT_ERR_OK - Success
* RT_ERR_FAILED - Failure
* RT_ERR_INPUT - Invalid input parameter
* RT_ERR_MAC - Wrong mac address, must be unicast mac
* RT_ERR_NULL_POINTER - Input parameter is null pointer
* RT_ERR_L2_ENTRY_NOTFOUND - Specified entry not found
* Note:
* If the mac has existed in the LUT, it will be deleted.
* Otherwise, it will return RT_ERR_L2_ENTRY_NOTFOUND.
*/
extern rtk_api_ret_t rtk_l2_addr_del(rtk_mac_t *pMac, rtk_fid_t fid);
/* Function Name:
* rtk_l2_mcastAddr_add
* Description:
* Add LUT multicast entry
* Input:
* pMac - 6 bytes unicast mac address to be deleted
* fid - filtering database id, could be any value for RTL8306E switch
* portmask - Port mask to be forwarded to
* Output:
* none
* Return:
* RT_ERR_OK - Success
* RT_ERR_FAILED - Failure
* RT_ERR_INPUT - Invalid input parameter
* RT_ERR_PORT_MASK - Invalid port mask
* RT_ERR_MAC - Wrong mac address, must be unicast mac
* RT_ERR_L2_INDEXTBL_FULL - Hashed index is full of entries
* Note:
* If the multicast mac address already existed in the LUT, it will udpate the
* port mask of the entry. Otherwise, it will find an empty or asic auto learned
* entry to write. If all the entries with the same hash value can't be replaced,
* ASIC will return a RT_ERR_L2_INDEXTBL_FULL error.
*/
extern rtk_api_ret_t rtk_l2_mcastAddr_add(rtk_mac_t *pMac, rtk_fid_t fid, rtk_portmask_t portmask);
/* Function Name:
* rtk_l2_mcastAddr_get
* Description:
* Get LUT multicast entry
* Input:
* pMac - 6 bytes multicast(I/G bit is 0) mac address to be gotten
* fid - filtering database id, could be any value for RTL8306E switch
* Output:
* pPortmask - the pointer of port mask
* Return:
* RT_ERR_OK - Success
* RT_ERR_FAILED - Failure
* RT_ERR_INPUT - Invalid input parameter
* RT_ERR_NULL_POINTER - Input parameter is null pointer
* RT_ERR_MAC - Wrong mac address, must be unicast mac
* RT_ERR_L2_INDEXTBL_FULL - Hashed index is full of entries
* Note:
* If the multicast mac address existed in LUT, it will return the port mask where
* the packet should be forwarded to, Otherwise, it will return a
* RT_ERR_L2_ENTRY_NOTFOUND error.
*/
extern rtk_api_ret_t rtk_l2_mcastAddr_get(rtk_mac_t *pMac, rtk_fid_t fid, rtk_portmask_t *pPortmask);
/* Function Name:
* rtk_l2_mcastAddr_del
* Description:
* Delete LUT unicast entry
* Input:
* pMac - 6 bytes multicast(I/G bit is 1) mac address to be gotten
* fid - filtering database id, could be any value for RTL8306E switch
* Output:
* none
* Return:
* RT_ERR_OK - Success
* RT_ERR_FAILED - Failure
* RT_ERR_INPUT - Invalid input parameter
* RT_ERR_MAC - Wrong mac address, must be unicast mac
* RT_ERR_L2_ENTRY_NOTFOUND - No such LUT entry
* Note:
* If the mac has existed in the LUT, it will be deleted.
* Otherwise, it will return RT_ERR_L2_ENTRY_NOTFOUND.
*/
extern rtk_api_ret_t rtk_l2_mcastAddr_del(rtk_mac_t *pMac, rtk_fid_t fid);
/* Function Name:
* rtk_l2_limitLearningCnt_set
* Description:
* Set per-Port auto learning limit number
* Input:
* port - Port id.
* mac_cnt - Auto learning entries limit number
* Output:
* None
* Return:
* RT_ERR_OK - set shared meter successfully
* RT_ERR_FAILED - FAILED to iset shared meter
* RT_ERR_PORT_ID - Invalid port number.
* RT_ERR_LIMITED_L2ENTRY_NUM - Invalid auto learning limit number
* Note:
* (1)The API can set per-port ASIC auto learning limit number from 0(disable learning)
* to 0x1F(31).
* (2)If mac_cnt is set from 0 to 0x1F, per-port ASIC auto learning limit will be enabled;
* if mac_cnt is set 0xFF, per-port ASIC auto learning limit will be disabled.
*/
extern rtk_api_ret_t rtk_l2_limitLearningCnt_set(rtk_port_t port, rtk_mac_cnt_t mac_cnt);
/* Function Name:
* rtk_l2_limitLearningCnt_get
* Description:
* Get per-Port auto learning limit number
* Input:
* port - Port id.
* Output:
* pMac_cnt - Auto learning entries limit number
* Return:
* RT_ERR_OK - Success
* RT_ERR_FAILED - Failure
* RT_ERR_PORT_ID - Invalid port number.
* Note:
* The API can get per-port ASIC auto learning limit number.
*/
extern rtk_api_ret_t rtk_l2_limitLearningCnt_get(rtk_port_t port, rtk_mac_cnt_t *pMac_cnt);
/* Function Name:
* rtk_l2_limitLearningCntAction_set
* Description:
* Configure auto learn over limit number action.
* Input:
* port - Port id (must be RTK_WHOLE_SYSTEM)
* action - Auto learning entries limit number
* Output:
* None
* Return:
* RT_ERR_OK - Success
* RT_ERR_FAILED - Failure
* RT_ERR_PORT_ID - Invalid port number.
* RT_ERR_NOT_ALLOWED - Invalid learn over action
* Note:
* (1)The API can set SA unknown packet action while auto learn limit number is over.
* The action symbol as following:
* - LIMIT_LEARN_CNT_ACTION_DROP,
* - LIMIT_LEARN_CNT_ACTION_TO_CPU,
* (2)The action is global, so the port must be set as RTK_WHOLE_SYSTEM
*/
extern rtk_api_ret_t rtk_l2_limitLearningCntAction_set(rtk_port_t port, rtk_l2_limitLearnCntAction_t action);
/* Function Name:
* rtk_l2_limitLearningCntAction_get
* Description:
* Get auto learn over limit number action.
* Input:
* port - Port id (must be RTK_WHOLE_SYSTEM)
* Output:
* pAction - Learn over action
* Return:
* RT_ERR_OK - Success
* RT_ERR_FAILED - Failure
* RT_ERR_PORT_ID - Invalid port number.
* Note:
* (1)The API can get SA unknown packet action while auto learn limit number is over.
* The action symbol as following:
* - LIMIT_LEARN_CNT_ACTION_DROP,
* - LIMIT_LEARN_CNT_ACTION_TO_CPU,
* (2)The action is global, so the port must be set as RTK_WHOLE_SYSTEM
*/
extern rtk_api_ret_t rtk_l2_limitLearningCntAction_get(rtk_port_t port, rtk_l2_limitLearnCntAction_t *pAction);
/* Function Name:
* rtk_l2_learningCnt_get
* Description:
* Get per-Port current auto learning number
* Input:
* port - Port id.
* Output:
* pMac_cnt - ASIC auto learning entries number
* Return:
* RT_ERR_OK - Success
* RT_ERR_PORT_ID - Invalid port number.
* RT_ERR_NULL_POINTER - Input parameter is null pointer
* Note:
* The API can get per-port ASIC auto learning number
*/
extern rtk_api_ret_t rtk_l2_learningCnt_get(rtk_port_t port, rtk_mac_cnt_t *pMac_cnt);
/* CPU Port */
/* Function Name:
* rtk_cpu_enable_set
* Description:
* Set cpu port function enable or disable
* Input:
* enable - enable or disable
* Output:
* none
* Return:
* RT_ERR_OK - Success
* RT_ERR_FAILED - Failure
* Note:
* The API can set CPU port function enable/disable
* default port 4 is cpu port.
*/
extern rtk_api_ret_t rtk_cpu_enable_set(rtk_enable_t enable);
/* Function Name:
* rtk_cpu_enable_get
* Description:
* Get cpu port function enable or disable
* Input:
* none
* Output:
* pEnable - the pointer of enable or disable cpu port function
* Return:
* RT_ERR_OK - Success
* RT_ERR_FAILED - Failure
* Note:
* The API can set CPU port function enable/disable
*/
extern rtk_api_ret_t rtk_cpu_enable_get(rtk_enable_t *pEnable);
/* Function Name:
* rtk_cpu_tagPort_set
* Description:
* Set CPU port and CPU tag insert mode
* Input:
* port - Port id
* mode - CPU tag insert for packets egress from CPU port
* Output:
* none
* Return:
* RT_ERR_OK - Success
* RT_ERR_FAILED - Failure
* RT_ERR_PORT_ID - Invalid port id
* Note:
* The API can set CPU port and inserting proprietary CPU tag mode (Length/Type 0x8899)
* to the frame that transmitting to CPU port.
* The inset cpu tag mode is as following:
* - CPU_INSERT_TO_ALL
* - CPU_INSERT_TO_TRAPPING
* - CPU_INSERT_TO_NONE
*/
extern rtk_api_ret_t rtk_cpu_tagPort_set(rtk_port_t port, rtk_cpu_insert_t mode);
/* Function Name:
* rtk_cpu_tagPort_get
* Description:
* Get CPU port and CPU tag insert mode
* Input:
* port - Port id
* Output:
* pMode - the pointer of CPU tag insert for packets egress from CPU port
* Return:
* RT_ERR_OK - Success
* RT_ERR_FAILED - Failure
* RT_ERR_NULL_POINTER - Input parameter is null pointer
* Note:
* The API can set CPU port and inserting proprietary CPU tag mode (Length/Type 0x8899)
* to the frame that transmitting to CPU port.
* The inset cpu tag mode is as following:
* - CPU_INSERT_TO_ALL
* - CPU_INSERT_TO_TRAPPING
* - CPU_INSERT_TO_NONE
*/
extern rtk_api_ret_t rtk_cpu_tagPort_get(rtk_port_t *pPort, rtk_cpu_insert_t *pMode);
/*Port Mirror */
/* Function Name:
* rtk_mirror_portBased_set
* Description:
* Set port mirror function
* Input:
* mirroring_port - Monitor port, 7 means no monitor port
* pMirrored_rx_portmask - the pointer of Rx mirror port mask
* pMirrored_tx_portmask - the pointer of Tx mirror port mask
* Output:
* none
* Return:
* RT_ERR_OK - Success
* RT_ERR_FAILED - Failure
* RT_ERR_PORT_MASK - Invalid port mask
* Note:
* The API is to set mirror function of source port and mirror port.
*/
extern rtk_api_ret_t rtk_mirror_portBased_set(rtk_port_t mirroring_port, rtk_portmask_t *pMirrored_rx_portmask, rtk_portmask_t *pMirrored_tx_portmask);
/* Function Name:
* rtk_mirror_portBased_get
* Description:
* Get port mirror function
* Input:
* none
* Output:
* pMirroring_port - the pointer Monitor port, 7 means no monitor port
* pMirrored_rx_portmask - the pointer of Rx mirror port mask
* pMirrored_tx_portmask - the pointer of Tx mirror port mask
* Return:
* RT_ERR_OK - Success
* RT_ERR_FAILED - Failure
* RT_ERR_PORT_MASK - Invalid port mask
* RT_ERR_NULL_POINTER - Input parameter is null pointer
* Note:
* The API is to set mirror function of source port and mirror port.
*/
extern rtk_api_ret_t rtk_mirror_portBased_get(rtk_port_t* pMirroring_port, rtk_portmask_t *pMirrored_rx_portmask, rtk_portmask_t *pMirrored_tx_portmask);
/* 802.1X */
/* Function Name:
* rtk_dot1x_unauthPacketOper_set
* Description:
* Set 802.1x unauth action configuration
* Input:
* port - Port id, no use for RTL8306E switch
* unauth_action - 802.1X unauth action
* Output:
* none
* Return:
* RT_ERR_OK
* RT_ERR_FAILED
* RT_ERR_DOT1X_PROC
* Note:
* This API can set 802.1x unauth action configuration,
* for RTL8306E switch, the action is by whole system,
* so port could be any value of 0~6.
* The unauth action is as following:
* - DOT1X_ACTION_DROP
* - DOT1X_ACTION_TRAP2CPU
*/
extern rtk_api_ret_t rtk_dot1x_unauthPacketOper_set(rtk_port_t port, rtk_dot1x_unauth_action_t unauth_action);
/* Function Name:
* rtk_dot1x_unauthPacketOper_get
* Description:
* Get 802.1x unauth action configuration
* Input:
* port - Port id, no use for RTL8306E switch
* Output:
* pUnauth_action - the pointer of 802.1X unauth action
* Return:
* RT_ERR_OK - Success
* RT_ERR_FAILED - Failure
* RT_ERR_NULL_POINTER - Input parameter is null pointer
* Note:
* This API can set 802.1x unauth action configuration,
* for RTL8306E switch, the action is by whole system,
* so port could be any value of 0~6.
* The unauth action is as following:
* - DOT1X_ACTION_DROP
* - DOT1X_ACTION_TRAP2CPU
*/
extern rtk_api_ret_t rtk_dot1x_unauthPacketOper_get(rtk_port_t port, rtk_dot1x_unauth_action_t *pUnauth_action);
/* Function Name:
* rtk_dot1x_portBasedEnable_set
* Description:
* Set 802.1x port-based enable configuration
* Input:
* port - Port id
* enable - enable or disable
* Output:
* none
* Return:
* RT_ERR_OK - Success
* RT_ERR_FAILED - Failure
* RT_ERR_PORT_ID - Invalid port id
* Note:
* The API can update the port-based port enable register content. If a port is 802.1x
* port based network access control "enabled", it should be authenticated so packets
* from that port won't be dropped or trapped to CPU.
* The status of 802.1x port-based network access control is as following:
* - DISABLED
* - ENABLED
*/
extern rtk_api_ret_t rtk_dot1x_portBasedEnable_set(rtk_port_t port, rtk_enable_t enable);
/* Function Name:
* rtk_dot1x_portBasedEnable_get
* Description:
* Get 802.1x port-based enable configuration
* Input:
* port - Port id
* Output:
* pEnable - the pointer of enable or disable
* Return:
* RT_ERR_OK - Success
* RT_ERR_FAILED - Failure
* RT_ERR_PORT_ID - Invalid port id
* Note:
* The API can update the port-based port enable register content. If a port is 802.1x
* port based network access control "enabled", it should be authenticated so packets
* from that port won't be dropped or trapped to CPU.
* The status of 802.1x port-based network access control is as following:
* - DISABLED
* - ENABLED
*/
extern rtk_api_ret_t rtk_dot1x_portBasedEnable_get(rtk_port_t port, rtk_enable_t *pEnable);
/* Function Name:
* rtk_dot1x_portBasedAuthStatus_set
* Description:
* Set 802.1x port-based enable configuration
* Input:
* port - Port id
* port_auth - The status of 802.1x port
* Output:
* none
* Return:
* RT_ERR_OK - Success
* RT_ERR_FAILED - Failure
* RT_ERR_PORT_ID - Invalid port id
* RT_ERR_DOT1X_PORTBASEDAUTH - Port-based auth port error
* Note:
* The authenticated status of 802.1x port-based network access control is as following:
* - UNAUTH
* - AUTH
*/
extern rtk_api_ret_t rtk_dot1x_portBasedAuthStatus_set(rtk_port_t port, rtk_dot1x_auth_status_t port_auth);
/* Function Name:
* rtk_dot1x_portBasedAuthStatus_get
* Description:
* Get 802.1x port-based enable configuration
* Input:
* port - Port id
* Output:
* pPort_auth - the pointer of the status of 802.1x port
* Return:
* RT_ERR_OK - Success
* RT_ERR_FAILED - Failure
* RT_ERR_PORT_ID - Invalid port id
* RT_ERR_NULL_POINTER - Input parameter is null pointer
* Note:
* The authenticated status of 802.1x port-based network access control is as following:
* - UNAUTH
* - AUTH
*/
extern rtk_api_ret_t rtk_dot1x_portBasedAuthStatus_get(rtk_port_t port, rtk_dot1x_auth_status_t *pPort_auth);
/* Function Name:
* rtk_dot1x_portBasedDirection_set
* Description:
* Set 802.1x port-based operational direction configuration
* Input:
* port - Port id
* port_direction - Operation direction
* Output:
* none
* Return:
* RT_ERR_OK - Success
* RT_ERR_FAILED - Failure
* RT_ERR_PORT_ID - Invalid port id
* RT_ERR_DOT1X_PORTBASEDOPDIR - Port-based opdir error
* Note:
* The operate controlled direction of 802.1x port-based network access control is as following:
* - BOTH
* - IN
*/
extern rtk_api_ret_t rtk_dot1x_portBasedDirection_set(rtk_port_t port, rtk_dot1x_direction_t port_direction);
/* Function Name:
* rtk_dot1x_portBasedDirection_get
* Description:
* Get 802.1x port-based operational direction configuration
* Input:
* port - Port id
* Output:
* pPort_direction - the pointer of Operation direction
* Return:
* RT_ERR_OK - Success
* RT_ERR_FAILED - Failure
* RT_ERR_PORT_ID - Invalid port id
* RT_ERR_NULL_POINTER - Input parameter is null pointer
* Note:
* The operate controlled direction of 802.1x port-based network access control is as following:
* - BOTH
* - IN
*/
extern rtk_api_ret_t rtk_dot1x_portBasedDirection_get(rtk_port_t port, rtk_dot1x_direction_t *pPort_direction);
/* Function Name:
* rtk_dot1x_macBasedEnable_set
* Description:
* Set 802.1x mac-based port enable configuration
* Input:
* port - Port id
* enable - The status of 802.1x mac-base funtion
* Output:
* none
* Return:
* RT_ERR_OK - Success
* RT_ERR_FAILED - Failure
* RT_ERR_PORT_ID - Invalid port id
* Note:
* If a port is 802.1x MAC based network access control "enabled", the incoming packets should
* be authenticated so packets from that port won't be dropped or trapped to CPU.
* The status of 802.1x MAC-based network access control is as following:
* - DISABLED
* - ENABLED
*/
extern rtk_api_ret_t rtk_dot1x_macBasedEnable_set(rtk_port_t port, rtk_enable_t enable);
/* Function Name:
* rtk_dot1x_macBasedEnable_get
* Description:
* Get 802.1x mac-based port enable configuration
* Input:
* port - Port id
* Output:
* pEnable - the pointer of the status of 802.1x mac-base funtion
* Return:
* RT_ERR_OK - Success
* RT_ERR_FAILED - Failure
* Note:
* If a port is 802.1x MAC based network access control "enabled", the incoming packets should
* be authenticated so packets from that port won't be dropped or trapped to CPU.
* The status of 802.1x MAC-based network access control is as following:
* - DISABLED
* - ENABLED
*/
extern rtk_api_ret_t rtk_dot1x_macBasedEnable_get(rtk_port_t port, rtk_enable_t *pEnable);
/* Function Name:
* rtk_dot1x_macBasedDirection_set
* Description:
* Set 802.1x mac-based operational direction configuration
* Input:
* mac_direction - Operation direction
* Output:
* none
* Return:
* RT_ERR_OK - Success
* RT_ERR_FAILED - Failure
* RT_ERR_DOT1X_MACBASEDOPDIR - MAC-based opdir error
* Note:
* The operate controlled direction of 802.1x mac-based network access control is as following:
* - BOTH
* - IN
*/
extern rtk_api_ret_t rtk_dot1x_macBasedDirection_set(rtk_dot1x_direction_t mac_direction);
/* Function Name:
* rtk_dot1x_macBasedDirection_get
* Description:
* Get 802.1x mac-based operational direction configuration
* Input:
* none
* Output:
* pMac_direction - the pointer of Operation direction
* Return:
* RT_ERR_OK - Success
* RT_ERR_FAILED - Failure
* RT_ERR_NULL_POINTER - Input parameter is null pointer
* Note:
* The operate controlled direction of 802.1x mac-based network access control is as following:
* - BOTH
* - IN
*/
extern rtk_api_ret_t rtk_dot1x_macBasedDirection_get(rtk_dot1x_direction_t *pMac_direction);
/* Function Name:
* rtk_dot1x_macBasedAuthMac_add
* Description:
* Add an authenticated MAC to ASIC
* Input:
* port - Port id
* pAuth_mac - The authenticated MAC
* fid - no use for RTL8306E
* Output:
* none
* Return:
* RT_ERR_OK - Success
* RT_ERR_FAILED - Failure
* RT_ERR_L2_ENTRY_NOTFOUND - Specified entry not found
* RT_ERR_DOT1X_MAC_PORT_MISMATCH - Auth MAC and port mismatch eror
* Note:
* The API can add a 802.1x authenticated MAC address to port. If the MAC does not exist in LUT,
* user can't add this MAC to auth status.
*/
extern rtk_api_ret_t rtk_dot1x_macBasedAuthMac_add(rtk_port_t port, rtk_mac_t *pAuth_mac, rtk_fid_t fid);
/* Function Name:
* rtk_dot1x_macBasedAuthMac_del
* Description:
* Delete an authenticated MAC to ASIC
* Input:
* port - Port id
* pAuth_mac - The authenticated MAC
* fid - no use for RTL8306E
* Output:
* none
* Return:
* RT_ERR_OK - Success
* RT_ERR_FAILED - Failure
* RT_ERR_L2_ENTRY_NOTFOUND - Specified entry not found
* RT_ERR_DOT1X_MAC_PORT_MISMATCH - Auth MAC and port mismatch eror
* Note:
* The API can delete a 802.1x authenticated MAC address to port. It only change the auth status of
* the MAC and won't delete it from LUT.
*/
extern rtk_api_ret_t rtk_dot1x_macBasedAuthMac_del(rtk_port_t port, rtk_mac_t *pAuth_mac, rtk_fid_t fid);
/* Function Name:
* rtk_svlan_init
* Description:
* Initialize SVLAN Configuration
* Input:
* none
* Output:
* none
* Return:
* RT_ERR_OK
* RT_ERR_FAILED
* RT_ERR_SMI
* RT_ERR_INPUT
* Note:
* Ether type of S-tag in 802.1ad is 0x88a8 and there are existed ether type
* 0x9100 and 0x9200 for Q-in-Q SLAN design. User can set mathced ether
* type as service provider supported protocol. After call this API, all ports are
* set as CVLAN port. you can use rtk_svlan_servicePort_add to add SVLAN port.
*/
extern rtk_api_ret_t rtk_svlan_init(void);
/* Function Name:
* rtk_svlan_servicePort_add
* Description:
* Enable one service port in the specified device
* Input:
* port - Port id
* Output:
* none
* Return:
* RT_ERR_OK
* RT_ERR_FAILED
* RT_ERR_SMI
* Note:
* This API is setting which port is connected to provider switch. All frames receiving from this port
* will recognize Service Vlan Tag.
*
*/
extern rtk_api_ret_t rtk_svlan_servicePort_add(rtk_port_t port);
/* Function Name:
* rtk_svlan_servicePort_del
* Description:
* Disable one service port in the specified device
* Input:
* none
* Output:
* pSvlan_portmask - svlan ports mask
* Return:
* RT_ERR_OK
* RT_ERR_FAILED
* RT_ERR_SMI
* Note:
* Ether type of S-tag in 802.1ad is 0x88a8 and there are existed ether type
* 0x9100 and 0x9200 for Q-in-Q SLAN design. User can set mathced ether type as service
* provider supported protocol.
*/
extern rtk_api_ret_t rtk_svlan_servicePort_del(rtk_port_t port);
/* Function Name:
* rtk_svlan_servicePort_get
* Description:
* Disable one service port in the specified device
* Input:
* none
* Output:
* pSvlan_portmask - svlan ports mask
* Return:
* RT_ERR_OK - success
* RT_ERR_FAILED - fail
* RT_ERR_NULL_POINTER - null pointer
* Note:
* Ether type of S-tag in 802.1ad is 0x88a8 and there are existed ether type 0x9100
* and 0x9200 for Q-in-Q SLAN design. User can set mathced ether type as service
* provider supported protocol.
*/
extern rtk_api_ret_t rtk_svlan_servicePort_get(rtk_portmask_t *pSvlan_portmask);
/* Function Name:
* rtk_svlan_tpidEntry_set
* Description:
* Configure accepted S-VLAN ether type. The default ether type of S-VLAN is 0x88a8
* Input:
* svlan_tag_id - Ether type of S-tag frame parsing in uplink ports
* Output:
* none
* Return:
* RT_ERR_OK
* RT_ERR_FAILED
* RT_ERR_SMI
* Note:
* Ether type of S-tag in 802.1ad is 0x88a8 and there are existed ether type 0x9100
* and 0x9200 for Q-in-Q SLAN design. User can set mathced ether type as service
* provider supported protocol.
*/
extern rtk_api_ret_t rtk_svlan_tpidEntry_set(rtk_svlan_tpid_t svlan_tag_id);
/* Function Name:
* rtk_svlan_tpidEntry_get
* Description:
* Get accepted S-VLAN ether type. The default ether type of S-VLAN is 0x88a8
* Input:
* pSvlan_tag_id - Ether type of S-tag frame parsing in uplink ports
* Output:
* none
* Return:
* RT_ERR_OK
* RT_ERR_FAILED
* Note:
* Ether type of S-tag in 802.1ad is 0x88a8 and there are existed ether type 0x9100
* and 0x9200 for Q-in-Q SLAN design. User can set mathced ether type as service
* provider supported protocol.
*/
extern rtk_api_ret_t rtk_svlan_tpidEntry_get(rtk_svlan_tpid_t *pSvlan_tag_id);
/* Function Name:
* rtk_svlan_portPvid_set
* Description:
* Set port to specified VLAN ID(PVID) for Service Provider Port
* Input:
* port - Port id
* pvid - Specified Service VLAN ID
* priority - 802.1p priority for the PVID
* dei - Service VLAN tag DEI bit
* Output:
* none
* Return:
* RT_ERR_OK
* RT_ERR_FAILED
* RT_ERR_VLAN_VID
* RT_ERR_SMI
* RT_ERR_VLAN_PRIORITY
* RT_ERR_VLAN_ENTRY_NOT_FOUND
* Note:
* The API is used for Port-based VLAN. The untagged frame received from the
* port will be classified to the specified VLAN and assigned to the specified priority.
*/
extern rtk_api_ret_t rtk_svlan_portPvid_set(rtk_port_t port, rtk_vlan_t pvid, rtk_pri_t priority, rtk_dei_t dei);
/* Function Name:
* rtk_svlan_portPvid_get
* Description:
* Get Service VLAN ID(PVID) on specified port
* Input:
* port - Port id
* pPvid - Specified VLAN ID
* pPriority - 802.1p priority for the PVID
* pDei - DEI bit
* Output:
* none
* Return:
* RT_ERR_OK
* RT_ERR_FAILED
* RT_ERR_SMI
* RT_ERR_PORT_ID
* RT_ERR_NULL_POINTER
* Note:
* The API is used for Port-based VLAN. The untagged frame received from the
* port will be classified to the specified VLAN and assigned to the specified priority.
*/
extern rtk_api_ret_t rtk_svlan_portPvid_get(rtk_port_t port, rtk_vlan_t *pPvid, rtk_pri_t* pPriority, rtk_dei_t *pDei);
/* Function Name:
* rtk_filter_igrAcl_init
* Description:
* Initialize ACL
* Input:
* none
* Output:
* none
* Return:
* RT_ERR_OK
* RT_ERR_FAILED
* Note:
* The API init ACL module.
*/
extern rtk_api_ret_t rtk_filter_igrAcl_init(void);
/* Function Name:
* rtk_filter_igrAcl_rule_add
* Description:
* Add an acl rule into acl table
* Input:
* pRule - the pointer of rule structure
* Output:
* none
* Return:
* RT_ERR_OK
* RT_ERR_FAILED
* RT_ERR_TBL_FULL
* RT_ERR_NULL_POINTER
* Note:
* The API add an ACL rule. <nl>
* phyport could be 0~5: port number, RTL8306_ACL_ANYPORT: any port;<nl>
* protocol could be RTL8306_ACL_ETHER(ether type), RTL8306_ACL_TCP(TCP), RTL8306_ACL_UDP(UDP), RTL8306_ACL_TCPUDP(TCP or UDP);<nl>
* prority could be RTL8306_PRIO0~RTL8306_PRIO3;<nl>
* action could be RTL8306_ACT_DROP/RTL8306_ACT_PERMIT/RTL8306_ACT_TRAPCPU/RTL8306_ACT_MIRROR;<nl>
*/
extern rtk_api_ret_t rtk_filter_igrAcl_rule_add(rtk_filter_rule_t *pRule);
/* Function Name:
* rtk_filter_igrAcl_rule_get
* Description:
* Get ACL rule priority and action
* Input:
* pRule - the pointer of rule structure
* Output:
* pRule - the pointer of rule structure
* Return:
* RT_ERR_OK
* RT_ERR_FAILED
* Note:
* The API add an ACL rule. <nl>
* phyport could be 0~5: port number, RTL8306_ACL_ANYPORT: any port;<nl>
* protocol could be RTL8306_ACL_ETHER(ether type), RTL8306_ACL_TCP(TCP), RTL8306_ACL_UDP(UDP), RTL8306_ACL_TCPUDP(TCP or UDP);<nl>
* prority could be RTL8306_PRIO0~RTL8306_PRIO3;<nl>
* action could be RTL8306_ACT_DROP/RTL8306_ACT_PERMIT/RTL8306_ACT_TRAPCPU/RTL8306_ACT_MIRROR;<nl>
*/
extern rtk_api_ret_t rtk_filter_igrAcl_rule_get(rtk_filter_rule_t *pRule);
/* Function Name:
* rtk_filter_igrAcl_rule_del
* Description:
* Delete an acl rule into acl table
* Input:
* pRule - the pointer of rule structure
* Output:
* none
* Return:
* RT_ERR_OK
* RT_ERR_FAILED
* RT_ERR_INPUT
* RT_ERR_NULL_POINTER
* Note:
* The API delete an ACL rule. <nl>
* only phyport/protocol/data field in pRule needs to be specified.
*/
extern rtk_api_ret_t rtk_filter_igrAcl_rule_del(rtk_filter_rule_t *pRule);
#endif /*__RTK_API_EXT_H__*/
/* * Copyright (C) 2010 Realtek Semiconductor Corp. * All Rights Reserved. * * This program is the proprietary software of Realtek Semiconductor * Corporation and/or its licensors, and only be used, duplicated, * modified or distributed under the authorized license from Realtek. * * ANY USE OF THE SOFTWARE OTEHR THAN AS AUTHORIZED UNDER * THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. * * $Revision: 10083 $ * $Date: 2010-06-07 11:18:41 +0800 (星期一, 07 六月 2010) $ * * Purpose : Realtek common API function list supported by RTL8306E switch, * they could also be applied to chips * RTL8306M/RTL8305N/RTL8303/RTL8304E/RTL8306N * * Feature : This file consists of following modules: * (1) Port Configuration * (2) Rate Limit * (3) QOS * (4) TRAP * (5) VLAN * (6) Spanning Tree * (7) Address Table * (8) CPU Port * (9) Mirror * (10) IEEE 802.1x * (11) SVLAN */ #ifndef __RTK_API_EXT_H__ #define __RTK_API_EXT_H__ #include "rtl8306e_types.h" #include "rtk_api.h" /* * Function Declaration */ /*Misc*/ /* Function Name: * rtk_switch_init * Description: * Set chip to default configuration enviroment * Input: * none * Output: * none * Return: * RT_ERR_OK - Success * RT_ERR_FAILED - Failure * Note: * The API can set chip registers to default configuration for * different release chip model. */ extern rtk_api_ret_t rtk_switch_init(void); /* Function Name: * rtk_switch_maxPktLen_set * Description: * Set the max packet length of the specific unit * Input: * len - max packet length * Output: * none * Return: * RT_ERR_OK - Success * RT_ERR_FAILED - Failure * RT_ERR_INPUT - Invalid input parameter * Note: * The API can set max packet length of the specific unit to * MAXPKTLEN_1522B, * MAXPKTLEN_1536B, * MAXPKTLEN_1552B, * MAXPKTLEN_2000B, */ extern rtk_api_ret_t rtk_switch_maxPktLen_set(rtk_switch_maxPktLen_t len); /* Function Name: * rtk_switch_maxPktLen_get * Description: * Get the max packet length of the specific unit * Input: * none * Output: * pLen - the pointer of max packet length * Return: * RT_ERR_OK - Success * RT_ERR_FAILED - Failure * RT_ERR_NULL_POINTER - Input parameter is null pointer * Note: * The API can set max packet length of the specific unit to * MAXPKTLEN_1522B, * MAXPKTLEN_1536B, * MAXPKTLEN_1552B, * MAXPKTLEN_2000B, */ extern rtk_api_ret_t rtk_switch_maxPktLen_get(rtk_switch_maxPktLen_t *pLen); /* Function Name: * rtk_port_phyReg_set * Description: * Set PHY register data of the specific port * Input: * phy - phy number, 0 ~ 6 * reg - Register id * regData - Register data * Output: * none * Return: * RT_ERR_OK - Success * RT_ERR_FAILED - Failure * Note: * This API can set PHY register data of the specific port. * RTL8306E switch has 5 FE port, and port 4 could be set as * phy mode or mac mode, port 5 is mac mode which connect * with mii interface. so parameter phy 0 ~4 means port 0 ~4 * phy register, 5 means port 4 mac mode, 6 means port 5. * */ extern rtk_api_ret_t rtk_port_phyReg_set(rtk_port_t port, rtk_port_phy_reg_t reg, rtk_port_phy_data_t value); /* Function Name: * rtk_port_phyReg_get * Description: * Get PHY register data of the specific port * Input: * phy - phy number, 0 ~ 6 * reg - Register id * Output: * pData - the pointer of Register data * Return: * RT_ERR_OK - Success * RT_ERR_FAILED - Failure * Note: * This API can set PHY register data of the specific port. * RTL8306E switch has 5 FE port, and port 4 could be set as * phy mode or mac mode, port 5 is mac mode which connect * with mii interface. so parameter phy 0 ~4 means port 0 ~4 * phy register, 5 means port 4 mac mode, 6 means port 5. * */ extern rtk_api_ret_t rtk_port_phyReg_get(rtk_port_t port, rtk_port_phy_reg_t reg, rtk_port_phy_data_t *pData); /* Function Name: * rtk_port_phyAutoNegoAbility_set * Description: * Set ethernet PHY auto-negotiation desired ability * Input: * port - Port id * pAbility - Ability structure * Output: * none * Return: * RT_ERR_OK * RT_ERR_FAILED * RT_ERR_SMI * RT_ERR_PORT_ID * RT_ERR_PHY_REG_ID * RT_ERR_NULL_POINTER * RT_ERR_BUSYWAIT_TIMEOUT * * Note: * (1) RTL8306E switch only has 5 phy, so the input port id should be 0~4. * (2) In auto-negotiation mode, phy autoNegotiation ability must be enabled */ extern rtk_api_ret_t rtk_port_phyAutoNegoAbility_set(rtk_port_t port, rtk_port_phy_ability_t *pAbility); /* Function Name: * rtk_port_phyAutoNegoAbility_get * Description: * Get ethernet PHY auto-negotiation desired ability * Input: * port - Port id * Output: * pAbility - Ability structure * Return: * RT_ERR_OK * RT_ERR_FAILED * RT_ERR_SMI * RT_ERR_PORT_ID * RT_ERR_PHY_REG_ID * RT_ERR_NULL_POINTER * RT_ERR_PHY_AUTO_NEGO_MODE * RT_ERR_BUSYWAIT_TIMEOUT * * Note: * (1) RTL8306E switch only has 5 phy, so the input port id should be 0~4. * (2) In auto-negotiation mode, phy autoNegotiation ability must be enabled */ extern rtk_api_ret_t rtk_port_phyAutoNegoAbility_get(rtk_port_t port, rtk_port_phy_ability_t *pAbility); /* Function Name: * rtk_port_phyForceModeAbility_set * Description: * Set the port PHY force mode, config its speed/duplex mode/pause/asy_pause * Input: * port - Port id * pAbility - Ability structure * Output: * none * Return: * RT_ERR_OK * RT_ERR_FAILED * RT_ERR_SMI * RT_ERR_PORT_ID * RT_ERR_PHY_REG_ID * RT_ERR_NULL_POINTER * RT_ERR_PHY_FORCE_1000 * RT_ERR_BUSYWAIT_TIMEOUT * * Note: * (1) RTL8306E switch only has 5 phy, so the input port id should be 0~4. * (2) In force mode, phy autoNegotiation ability must be disabled. */ extern rtk_api_ret_t rtk_port_phyForceModeAbility_set(rtk_port_t port, rtk_port_phy_ability_t *pAbility); /* Function Name: * rtk_port_phyForceModeAbility_get * Description: * Get the port PHY speed/duplex mode/pause/asy_pause in force mode * Input: * port - Port id * Output: * pAbility - Ability structure * Return: * RT_ERR_OK * RT_ERR_FAILED * RT_ERR_SMI * RT_ERR_PORT_ID * RT_ERR_PHY_REG_ID * RT_ERR_NULL_POINTER * RT_ERR_BUSYWAIT_TIMEOUT * * Note: * (1) RTL8306E switch only has 5 phy, so the input port id should be 0~4. * (2) In force mode, phy autoNegotiation ability must be disabled. */ extern rtk_api_ret_t rtk_port_phyForceModeAbility_get(rtk_port_t port, rtk_port_phy_ability_t *pAbility); /* Function Name: * rtk_port_phyStatus_get * Description: * Get ethernet PHY linking status * Input: * port - Port id * Output: * pLinkStatus - the pointer of PHY link status * pSpeed - the pointer of PHY link speed * pDuplex - the pointer of PHY duplex * Return: * RT_ERR_OK * RT_ERR_FAILED * RT_ERR_SMI * RT_ERR_PORT_ID * RT_ERR_NULL_POINTER * * Note: * RTL8306E switch only has 5 phy, so the input port id should be 0~4. */ extern rtk_api_ret_t rtk_port_phyStatus_get(rtk_port_t port, rtk_port_linkStatus_t *pLinkStatus, rtk_port_speed_t *pSpeed, rtk_port_duplex_t *pDuplex); /* Function Name: * rtk_port_macForceLinkExt0_set * Description: * Set external interface 0(MAC 5) force linking configuration. * Input: * mode - external interface mode * pPortability - port ability configuration * Output: * None * Return: * RT_ERR_OK - Success * RT_ERR_FAILED - Failure * RT_ERR_INPUT - Invalid input parameters. * Note: * (1) This API can set external interface 0(MAC 5) force mode properties, * including link status,speed,duplex,and tx pause and tx pause ability. * In force mode, autoNegotiation ability must be disabled. * (2) For 8306E, the external interface 0(MAC 5) operating mode can be * MAC Mode (T)MII, PHY Mode (T)MII and RMII. The operating mode is * determined by strapping pin upon reset, and can not be configured * by software, except the selection of MII or TMII. * (3)The input parament mode here is only used to select MII or TMII. * When operating mode is configured as MAC Mode (T)MII or PHY Mode (T)MII * via strapping pin, then the selection of MII or TMII can be done via software. * For example, set mode MODE_EXT_TMII_MAC to select TMII, and set mode * MODE_EXT_MII_MAC to select MII. */ extern rtk_api_ret_t rtk_port_macForceLinkExt0_set(rtk_mode_ext_t mode, rtk_port_mac_ability_t *pPortability); /* Function Name: * rtk_port_macForceLinkExt0_get * Description: * Get external interface 0(MAC 5) force linking configuration. * Input: * None * Output: * pMode - external interface mode * pPortability - port ability configuration * Return: * RT_ERR_OK - Success * RT_ERR_FAILED - Failure * RT_ERR_INPUT - Invalid input parameters. * Note: * This API can get external interface 0 (MAC 5) force mode properties. * The external interface 0 operating mode can be: * - MODE_EXT_MII_MAC, * - MODE_EXT_MII_PHY, * - MODE_EXT_TMII_MAC, * - MODE_EXT_TMII_PHY, * - MODE_EXT_RMII, */ extern rtk_api_ret_t rtk_port_macForceLinkExt0_get(rtk_mode_ext_t *pMode, rtk_port_mac_ability_t *pPortability); /* Function Name: * rtk_port_isolation_set * Description: * Set permitted port isolation portmask * Input: * port - port id, 0 ~ 5 * portmask - Permit port mask * Output: * none * Return: * RT_ERR_OK - Success * RT_ERR_PORT_ID - Invalid port number * RT_ERR_PORT_MASK - Invalid portmask * RT_ERR_FAILED - Failure * Note: * This API set the port mask that a port can trasmit packet to of each port. * A port can only transmit packet to ports included in permitted portmask */ extern rtk_api_ret_t rtk_port_isolation_set(rtk_port_t port, rtk_portmask_t portmask); /* Function Name: * rtk_port_isolation_get * Description: * Get permitted port isolation portmask * Input: * port - port id, 0 ~ 5 * Output: * pPortmask - the pointer of permit port mask * Return: * RT_ERR_OK - Success * RT_ERR_PORT_ID - Invalid port number * RT_ERR_NULL_POINTER - Input parameter is null pointer * RT_ERR_FAILED - Failure * Note: * This API get the port mask that a port can trasmit packet to of each port. * A port can only transmit packet to ports included in permitted portmask */ extern rtk_api_ret_t rtk_port_isolation_get(rtk_port_t port, rtk_portmask_t *pPortmask); /* Function Name: * rtk_stat_port_reset * Description: * Reset per port MIB counter by port. * Input: * port - port id. * Output: * None * Return: * RT_ERR_OK - set shared meter successfully * RT_ERR_FAILED - FAILED to iset shared meter * Note: */ extern rtk_api_ret_t rtk_stat_port_reset(rtk_port_t port); /* Function Name: * rtk_rate_igrBandwidthCtrlRate_set * Description: * Set port ingress bandwidth control * Input: * port - Port id * rate - Rate of share meter * ifg_include - Rate's calculation including IFG, ENABLE:include DISABLE:exclude * Output: * none * Return: * RT_ERR_OK - Success * RT_ERR_PORT_ID - Invalid port number * RT_ERR_FAILED - Failure * RT_ERR_ENABLE - Invalid IFG parameter * RT_ERR_INBW_RATE - Invalid ingress rate parameter * Note: * The rate unit is 64Kbps and the range is from 64Kbps to 100Mbps. The granularity of rate is 64Kbps. * The ifg_include parameter is used for rate calculation with/without inter-frame-gap and preamble. */ extern rtk_api_ret_t rtk_rate_igrBandwidthCtrlRate_set( rtk_port_t port, rtk_rate_t rate, rtk_enable_t ifg_include); /* Function Name: * rtk_rate_igrBandwidthCtrlRate_get * Description: * Get port ingress bandwidth control * Input: * port - Port id * Output: * pRate - the pointer of rate of share meter * pIfg_include - Rate's calculation including IFG, ENABLE:include DISABLE:exclude * Return: * RT_ERR_OK - Success * RT_ERR_PORT_ID - Invalid port number * RT_ERR_FAILED - Failure * RT_ERR_ENABLE - Invalid IFG parameter * RT_ERR_NULL_POINTER - null pointer * Note: * The rate unit is 64Kbps and the range is from 64Kbps to 100Mbps. The granularity of rate is 64Kbps. * The ifg_include parameter is used for rate calculation with/without inter-frame-gap and preamble. */ extern rtk_api_ret_t rtk_rate_igrBandwidthCtrlRate_get(rtk_port_t port, rtk_rate_t *pRate, rtk_enable_t *pIfg_include); /* Function Name: * rtk_rate_egrBandwidthCtrlRate_set * Description: * Set port egress bandwidth control * Input: * port - Port id * rate - Rate of bandwidth control * ifg_include - Rate's calculation including IFG, ENABLE:include DISABLE:exclude * Output: * none * Return: * RT_ERR_OK - Success * RT_ERR_PORT_ID - Invalid port number * RT_ERR_FAILED - Failure * RT_ERR_ENABLE - Invalid IFG parameter * RT_ERR_QOS_EBW_RATE - Invalid egress rate parameter * Note: * The rate unit is 64Kbps and the range is from 64Kbps to 100Mbps. The granularity of rate is 64Kbps. * The ifg_include parameter is used for rate calculation with/without inter-frame-gap and preamble. */ extern rtk_api_ret_t rtk_rate_egrBandwidthCtrlRate_set(rtk_port_t port, rtk_rate_t rate, rtk_enable_t ifg_include); /* Function Name: * rtk_rate_igrBandwidthCtrlRate_get * Description: * Get port ingress bandwidth control * Input: * port - Port id * Output: * pRate - the pointer of rate of bandwidth control * pIfg_include - Rate's calculation including IFG, ENABLE:include DISABLE:exclude * Return: * RT_ERR_OK - Success * RT_ERR_PORT_ID - Invalid port number * RT_ERR_FAILED - Failure * RT_ERR_NULL_POINTER - null pointer * Note: * The rate unit is 64Kbps and the range is from 64Kbps to 100Mbps. The granularity of rate is 64Kbps. * The ifg_include parameter is used for rate calculation with/without inter-frame-gap and preamble. */ extern rtk_api_ret_t rtk_rate_egrBandwidthCtrlRate_get(rtk_port_t port, rtk_rate_t *pRate, rtk_enable_t *pIfg_include); /* QoS */ /* Function Name: * rtk_qos_init * Description: * Configure Qos default settings with queue number assigment to each port * Input: * queueNum - Queue number of each port * Output: * none * Return: * RT_ERR_OK - Success * RT_ERR_FAILED - Failure * RT_ERR_QUEUE_NUM - Error queue number * Note: * This API will initialize related Qos setting with queue number assigment. * The queue number is from 1 to 4. */ extern rtk_api_ret_t rtk_qos_init(rtk_queue_num_t queueNum); /* Function Name: * rtk_qos_1pPriRemap_set * Description: * Configure 1Q priorities mapping to internal absolute priority * Input: * dot1p_pri - 802.1p priority value * int_pri - internal priority value * Output: * none * Return: * RT_ERR_OK - Success * RT_ERR_FAILED - Failure * RT_ERR_VLAN_PRIORITY - Invalid 1p priority * RT_ERR_QOS_INT_PRIORITY - Invalid priority * Note: * Priority of 802.1Q assignment for internal asic priority, and it is used for queue usage * and packet scheduling. */ extern rtk_api_ret_t rtk_qos_1pPriRemap_set(rtk_pri_t dot1p_pri, rtk_pri_t int_pri); /* Function Name: * rtk_qos_priSel_set * Description: * Configure the priority order among different priority mechanisms. * Input: * pPriDec - priority level for port, dscp, 802.1Q, ACL and VID based priority decision. * Output: * None * Return: * RT_ERR_OK - success * RT_ERR_NULL_POINTER - Input parameter is null pointer * RT_ERR_FAILED - failure * RT_ERR_QOS_SEL_PRI_SOURCE - Invalid priority decision source parameter. * Note: * (1)For 8306E, there are 5 types of priority mechanisms that could be set arbitration level, which are * ACL-based priority, DSCP-based priority, 1Q-based priority, Port-based priority, VID-based priority. * Each one could be set level from 1 to 5. * (2)ASIC will follow user's arbitration level setting of priority mechanisms to select internal priority for receiving frame. * If two priority mechanisms are the same level, the ASIC will chose the priority mechanism with highest level to * assign internal priority to receiving frame. */ extern rtk_api_ret_t rtk_qos_priSel_set(rtk_priority_select_t *pPriDec); /* Function Name: * rtk_qos_priSel_get * Description: * Get the priority order configuration among different priority mechanism. * Input: * None * Output: * pPriDec - priority level for port, dscp, 802.1Q, ACL and VID based priority decision. * Return: * RT_ERR_OK - success * RT_ERR_NULL_POINTER - Input parameter is null pointer * RT_ERR_FAILED - failure * Note: * (1)For 8306E, there are 5 types of priority mechanisms that could be set arbitration level, which are * ACL-based priority, DSCP-based priority, 1Q-based priority,Port-based priority, VID-based priority. * Each one could be set level from 1 to 5. * (2)ASIC will follow user's arbitration level setting of priority mechanisms to select internal priority for receiving frame. * If two priority mechanisms are the same level, the ASIC will chose the priority mechanism with the highest level to * assign internal priority to receiving frame. */ extern rtk_api_ret_t rtk_qos_priSel_get(rtk_priority_select_t *pPriDec); /* Function Name: * rtk_qos_1pPriRemap_get * Description: * Get 1Q priorities mapping to internal absolute priority * Input: * dot1p_pri - 802.1p priority value * Output: * pInt_pri - the pointer of internal priority value * Return: * RT_ERR_OK - Success * RT_ERR_FAILED - Failure * RT_ERR_VLAN_PRIORITY - Invalid 1p priority * RT_ERR_NULL_POINTER - null pointer * Note: * Priority of 802.1Q assignment for internal asic priority, and it is used for queue usage * and packet scheduling. */ extern rtk_api_ret_t rtk_qos_1pPriRemap_get(rtk_pri_t dot1p_pri, rtk_pri_t *pInt_pri); /* Function Name: * rtk_qos_dscpPriRemap_set * Description: * Set DSCP-based priority * Input: * code - dscp code * int_pri - internal priority value * Output: * none * Return: * RT_ERR_OK - Success * RT_ERR_FAILED - Failure * RT_ERR_QOS_INT_PRIORITY - invalid internal priority * RT_ERR_QOS_DSCP_VALUE - invalid DSCP value * Note: * switch support 16 kinds of dscp code: * RTL8306_DSCP_EF * - DSCP for the Expedited forwarding PHB, 101110 * RTL8306_DSCP_AFL1 * - DSCP for AF PHB Class 1 low drop, 001010 * RTL8306_DSCP_AFM1 * - DSCP for AF PHB Class 1 medium drop, 001100 * RTL8306_DSCP_AFH1 * - DSCP for AF PHB Class 1 high drop, 001110 * RTL8306_DSCP_AFL2 * - DSCP for AF PHB Class 2 low drop, 01001 * RTL8306_DSCP_AFM2 * - DSCP for AF PHB Class 2 medium drop, 010100 * RTL8306_DSCP_AFH2 * - DSCP for AF PHB Class 2 high drop, 010110 * RTL8306_DSCP_AFL3 * - DSCP for AF PHB Class 3 low drop, 011010 * RTL8306_DSCP_AFM3 * - DSCP for AF PHB Class 3 medium drop, 011100 * RTL8306_DSCP_AFH3 * - DSCP for AF PHB Class 3 high drop, 0111 * RTL8306_DSCP_AFL4 * - DSCP for AF PHB Class 4 low drop, 100010 * RTL8306_DSCP_AFM4 * - DSCP for AF PHB Class 4 medium drop, 100100 * RTL8306_DSCP_AFH4 * - DSCP for AF PHB Class 4 high drop, 100110 * RTL8306_DSCP_NC * - DSCP for network control, 110000 or 111000 * RTL8306_DSCP_REG_PRI * - DSCP Register match priority, user could define two dscp code * RTL8306_DSCP_BF * - DSCP Default PHB * * The Differentiated Service Code Point is a selector for router's per-hop behaviors. As a selector, there is no implication that a numerically * greater DSCP implies a better network service. As can be seen, the DSCP totally overlaps the old precedence field of TOS. So if values of * DSCP are carefully chosen then backward compatibility can be achieved. */ extern rtk_api_ret_t rtk_qos_dscpPriRemap_set(rtk_dscp_t dscp, rtk_pri_t int_pri); /* Function Name: * rtk_qos_dscpPriRemap_get * Description: * Get DSCP-based priority * Input: * dscp - dscp code * Output: * pInt_pri - the pointer of internal priority value * Return: * RT_ERR_OK - Success * RT_ERR_FAILED - Failure * RT_ERR_QOS_DSCP_VALUE - Invalid DSCP value * RT_ERR_NULL_POINTER - Input parameter is null pointer * Note: * switch support 16 kinds of dscp code: * RTL8306_DSCP_EF * - DSCP for the Expedited forwarding PHB, 101110 * RTL8306_DSCP_AFL1 * - DSCP for AF PHB Class 1 low drop, 001010 * RTL8306_DSCP_AFM1 * - DSCP for AF PHB Class 1 medium drop, 001100 * RTL8306_DSCP_AFH1 * - DSCP for AF PHB Class 1 high drop, 001110 * RTL8306_DSCP_AFL2 * - DSCP for AF PHB Class 2 low drop, 01001 * RTL8306_DSCP_AFM2 * - DSCP for AF PHB Class 2 medium drop, 010100 * RTL8306_DSCP_AFH2 * - DSCP for AF PHB Class 2 high drop, 010110 * RTL8306_DSCP_AFL3 * - DSCP for AF PHB Class 3 low drop, 011010 * RTL8306_DSCP_AFM3 * - DSCP for AF PHB Class 3 medium drop, 011100 * RTL8306_DSCP_AFH3 * - DSCP for AF PHB Class 3 high drop, 0111 * RTL8306_DSCP_AFL4 * - DSCP for AF PHB Class 4 low drop, 100010 * RTL8306_DSCP_AFM4 * - DSCP for AF PHB Class 4 medium drop, 100100 * RTL8306_DSCP_AFH4 * - DSCP for AF PHB Class 4 high drop, 100110 * RTL8306_DSCP_NC * - DSCP for network control, 110000 or 111000 * RTL8306_DSCP_REG_PRI * - DSCP Register match priority, user could define two dscp code * RTL8306_DSCP_BF * - DSCP Default PHB * The Differentiated Service Code Point is a selector for router's per-hop behaviors. As a selector, there is no implication that a numerically * greater DSCP implies a better network service. As can be seen, the DSCP totally overlaps the old precedence field of TOS. So if values of * DSCP are carefully chosen then backward compatibility can be achieved. */ extern rtk_api_ret_t rtk_qos_dscpPriRemap_get(rtk_dscp_t dscp, rtk_pri_t *pInt_pri); /* Function Name: * rtk_qos_portPri_set * Description: * Configure priority usage to each port * Input: * port - Port id. * int_pri - internal priority value * Output: * none * Return: * RT_ERR_OK - Success * RT_ERR_FAILED - Failure * RT_ERR_PORT_ID - Error port id * RT_ERR_QOS_INT_PRIORITY - Error internal priority value * Note: * The API can set priority of port assignments for queue usage and packet scheduling. */ extern rtk_api_ret_t rtk_qos_portPri_set(rtk_port_t port, rtk_pri_t int_pri) ; /* Function Name: * rtk_qos_portPri_get * Description: * Get priority usage to each port * Input: * port - Port id. * Output: * pInt_pri - the pointer of internal priority value * Return: * RT_ERR_OK - Success * RT_ERR_FAILED - Failure * RT_ERR_PORT_ID - Error port id * RT_ERR_NULL_POINTER - null pointer * Note: * The API can get priority of port assignments for queue usage and packet scheduling. */ extern rtk_api_ret_t rtk_qos_portPri_get(rtk_port_t port, rtk_pri_t *pInt_pri) ; /* Function Name: * rtk_qos_priMap_set * Description: * Set internal priority mapping to queue ID for different queue number * Input: * queue_num - Queue number usage * pPri2qid - Priority mapping to queue ID * Output: * none * Return: * RT_ERR_OK - Success * RT_ERR_FAILED - Failure * RT_ERR_QUEUE_ID - Error queue id * RT_ERR_NULL_POINTER - null pointer * Note: * ASIC supports priority mapping to queue with different queue number from 1 to 4. * For different queue numbers usage, ASIC supports different internal available queue IDs. */ extern rtk_api_ret_t rtk_qos_priMap_set(rtk_queue_num_t queue_num, rtk_qos_pri2queue_t *pPri2qid); /* Function Name: * rtk_qos_priMap_get * Description: * Get priority to queue ID mapping table parameters * Input: * queue_num - Queue number usage * pPri2qid - Priority mapping to queue ID * Output: * none * Return: * RT_ERR_OK - Success * RT_ERR_FAILED - Failure * RT_ERR_QUEUE_ID - Error queue id * RT_ERR_NULL_POINTER - null pointer * Note: * ASIC supports priority mapping to queue with different queue number from 1 to 4. * For different queue numbers usage, ASIC supports different internal available queue IDs. */ extern rtk_api_ret_t rtk_qos_priMap_get(rtk_queue_num_t queue_num, rtk_qos_pri2queue_t *pPri2qid); /* Function Name: * rtk_qos_1pRemarkEnable_set * Description: * Set 802.1P remarking ability * Input: * port - port number (0~5) * enabled - TRUE or FALSE * Output: * none * Return: * RT_ERR_OK - Success * RT_ERR_FAILED - Failure * RT_ERR_PORT_ID - Invalid port id * Note: * */ extern rtk_api_ret_t rtk_qos_1pRemarkEnable_set(rtk_port_t port, rtk_enable_t enable); /* Function Name: * rtk_qos_1pRemarkEnable_get * Description: * Get 802.1P remarking ability * Input: * port - port number (0~5) * Output: * pEnabled - pointer of the ability status * Return: * RT_ERR_OK - Success * RT_ERR_FAILED - Failure * RT_ERR_PORT_ID - Invalid port id * RT_ERR_NULL_POINTER - Input parameter is null pointer * Note: * */ extern rtk_api_ret_t rtk_qos_1pRemarkEnable_get(rtk_port_t port, rtk_enable_t *pEnable); /* Function Name: * rtk_qos_1pRemark_set * Description: * Set 802.1P remarking priority * Input: * int_pri - Packet priority(0~4) * dot1p_pri - 802.1P priority(0~7) * Output: * none * Return: * RT_ERR_OK - Success * RT_ERR_FAILED - Failure * RT_ERR_VLAN_PRIORITY - Invalid 1p priority * RT_ERR_QOS_INT_PRIORITY - Invalid internal priority * Note: * switch determines packet priority, the priority souce could * be port-based, 1Q-based, dscp-based, vid-based, ip address, * cpu tag. */ extern rtk_api_ret_t rtk_qos_1pRemark_set(rtk_pri_t int_pri, rtk_pri_t dot1p_pri); /* Function Name: * rtk_qos_1pRemark_get * Description: * Get 802.1P remarking priority * Input: * int_pri - Packet priority(0~4) * Output: * pDot1p_pri - the pointer of 802.1P priority(0~7) * Return: * RT_ERR_OK - Success * RT_ERR_FAILED - Failure * RT_ERR_NULL_POINTER - Input parameter is null pointer * RT_ERR_QOS_INT_PRIORITY - Invalid internal priority * Note: * switch determines packet priority, the priority souce could * be port-based, 1Q-based, dscp-based, vid-based, ip address, * cpu tag. */ extern rtk_api_ret_t rtk_qos_1pRemark_get(rtk_pri_t int_pri, rtk_pri_t *pDot1p_pri); /* Trap & Reserved Multicast Address (More Action like leaky, bypass storm not define) */ /* Function Name: * rtk_trap_unknownMcastPktAction_set * Description: * Set behavior of unknown multicast * Input: * port - port id * type - unknown multicast packet type * mcast_action - unknown multicast action * Output: * none * Return: * RT_ERR_OK - Success * RT_ERR_FAILED - Failure * RT_ERR_PORT_ID - Invalid port id * RT_ERR_INPUT - Invalid input parameter * Note: * When receives an unknown multicast packet, switch may trap, drop this packet * The unknown multicast packet type is as following: * - MCAST_IPV4 * - MCAST_IPV6 * The unknown multicast action is as following: * - MCAST_ACTION_FORWARD * - MCAST_ACTION_DROP */ extern rtk_api_ret_t rtk_trap_unknownMcastPktAction_set(rtk_port_t port, rtk_mcast_type_t type, rtk_trap_mcast_action_t mcast_action); /* Function Name: * rtk_trap_unknownMcastPktAction_get * Description: * Get behavior of unknown multicast * Input: * port - port id * type - unknown multicast packet type * Output: * pMcast_action - the pointer of unknown multicast action * Return: * RT_ERR_OK - Success * RT_ERR_FAILED - Failure * RT_ERR_PORT_ID - Invalid port id * RT_ERR_NULL_POINTER - Input parameter is null pointer * Note: * When receives an unknown multicast packet, switch may trap, drop this packet. * The unknown multicast packet type is as following: * - MCAST_IPV4 * - MCAST_IPV6 * The unknown multicast action is as following: * - MCAST_ACTION_FORWARD * - MCAST_ACTION_DROP */ extern rtk_api_ret_t rtk_trap_unknownMcastPktAction_get(rtk_port_t port, rtk_mcast_type_t type, rtk_trap_mcast_action_t *pMcast_action); /* Function Name: * rtk_trap_igmpCtrlPktAction_set * Description: * Set IGMP/MLD trap function * Input: * type - IGMP/MLD packet type * igmp_action - IGMP/MLD action * Output: * none * Return: * RT_ERR_OK - Success * RT_ERR_FAILED - Failure * RT_ERR_INPUT - Invalid input parameter * RT_ERR_NOT_ALLOWED - Actions not allowed by the function * Note: * This API can set both IPv4 IGMP/IPv6 MLD with/without PPPoE header trapping function. * All 4 kinds of IGMP/MLD function can be set separately. * The IGMP/MLD packet type is as following: * - IGMP_IPV4 * - IGMP_MLD * - IGMP_PPPOE_IPV4 * - IGMP_PPPOE_MLD * The IGMP/MLD action is as following: * - IGMP_ACTION_FORWARD * - IGMP_ACTION_TRAP2CPU */ extern rtk_api_ret_t rtk_trap_igmpCtrlPktAction_set(rtk_igmp_type_t type, rtk_trap_igmp_action_t igmp_action); /* Function Name: * rtk_trap_igmpCtrlPktAction_get * Description: * Get IGMP/MLD trap function * Input: * type - IGMP/MLD packet type * Output: * pIgmp_action - the pointer of IGMP/MLD action * Return: * RT_ERR_OK - Success * RT_ERR_FAILED - Failure * RT_ERR_INPUT - Invalid input parameter * RT_ERR_NULL_POINTER - Input parameter is null pointer * Note: * This API can get both IPv4 IGMP/IPv6 MLD with/without PPPoE header trapping function. * All 4 kinds of IGMP/MLD function can be set separately. * The IGMP/MLD packet type is as following: * - IGMP_IPV4 * - IGMP_MLD * - IGMP_PPPOE_IPV4 * - IGMP_PPPOE_MLD * The IGMP/MLD action is as following: * - IGMP_ACTION_FORWARD * - IGMP_ACTION_TRAP2CPU */ extern rtk_api_ret_t rtk_trap_igmpCtrlPktAction_get(rtk_igmp_type_t type, rtk_trap_igmp_action_t *pIgmp_action); /* CVLAN */ /* Function Name: * rtk_vlan_init * Description: * Initialize VLAN * Input: * none * Output: * none * Return: * RT_ERR_OK - Success * RT_ERR_FAILED - Failure * Note: * VLAN is disabled by default. User has to call this API to enable VLAN before * using it. And It will set a default VLAN(vid 1) including all ports and set * all ports PVID to the default VLAN. */ extern rtk_api_ret_t rtk_vlan_init(void); /* Function Name: * rtk_vlan_set * Description: * Set a VLAN entry * Input: * vid - VLAN ID to configure, should be 1~4094 * mbrmsk - VLAN member set portmask * untagmsk - VLAN untag set portmask * fid - filtering database id, could be any value for RTL8306E * Output: * none * Return: * RT_ERR_OK - Success * RT_ERR_FAILED - Failure * RT_ERR_VLAN_VID - Invalid vid * RT_ERR_INPUT - Invalid input parameter * RT_ERR_TBL_FULL - Input table full * Note: * There are 16 VLAN entry supported. User could configure the member set and untag set * for specified vid through this API. The portmask's bit N means port N. * For example, mbrmask 23=0x17=010111 means port 0,1,2,4 in the member set. * FID is for SVL/IVL usage, and the range is 0~4095, rtl8306E only supports SVL, * so fid is no useage. */ extern rtk_api_ret_t rtk_vlan_set(rtk_vlan_t vid, rtk_portmask_t mbrmsk, rtk_portmask_t untagmsk, rtk_fid_t fid); /* Function Name: * rtk_vlan_get * Description: * Get a VLAN entry * Input: * vid - VLAN ID to configure * Output: * pMbrmsk - VLAN member set portmask * pUntagmsk - VLAN untag set portmask * pFid - filtering database id * Return: * RT_ERR_OK - Success * RT_ERR_FAILED - Failure * RT_ERR_VLAN_VID - Invalid vid * RT_ERR_NULL_POINTER - Input parameter is null pointer * RT_ERR_VLAN_ENTRY_NOT_FOUND - Specified vlan entry not found * Note: * There are 16 VLAN entry supported. User could configure the member set and untag set * for specified vid through this API. The portmask's bit N means port N. * For example, mbrmask 23=0x17=010111 means port 0,1,2,4 in the member set. * FID is for SVL/IVL usage, and the range is 0~4095, rtl8306E only supports SVL, * so fid is no useage. */ extern rtk_api_ret_t rtk_vlan_get(rtk_vlan_t vid, rtk_portmask_t *pMbrmsk, rtk_portmask_t *pUntagmsk, rtk_fid_t *pFid); /* Function Name: * rtk_vlan_destroy * Description: * delete vid from vlan table * Input: * vid - VLAN ID to configure * Output: * none * Return: * RT_ERR_OK - Success * RT_ERR_FAILED - Failure * RT_ERR_VLAN_VID - Invalid vid * RT_ERR_VLAN_ENTRY_NOT_FOUND - Specified vlan entry not found * Note: * */ extern rtk_api_ret_t rtk_vlan_destroy(rtk_vlan_t vid); /* Function Name: * rtk_vlan_portPvid_set * Description: * Set port to specified VLAN ID(PVID) * Input: * port - Port id * pvid - Specified VLAN ID * priority - 802.1p priority for the PVID, 0~3 for RTL8306E * Output: * none * Return: * RT_ERR_OK - Success * RT_ERR_FAILED - Failure * RT_ERR_VLAN_VID - Invalid vid * RT_ERR_VLAN_PRIORITY - Invalid 1p priority * RT_ERR_VLAN_ENTRY_NOT_FOUND - Specified vlan entry not found * Note: * The API is used for Port-based VLAN. The untagged frame received from the * port will be classified to the specified VLAN and assigned to the specified priority. */ extern rtk_api_ret_t rtk_vlan_portPvid_set(rtk_port_t port, rtk_vlan_t pvid, rtk_pri_t priority); /* Function Name: * rtk_vlan_portPvid_get * Description: * Get VLAN ID(PVID) on specified port * Input: * port - Port id * Output: * pPvid - Specified VLAN ID * pPriority - 802.1p priority for the PVID * Return: * RT_ERR_OK - Success * RT_ERR_FAILED - Failure * RT_ERR_PORT_ID - Invalid port id * RT_ERR_NULL_POINTER - Input parameter is null pointer * Note: * The API is used for Port-based VLAN. The untagged frame received from the * port will be classified to the specified VLAN and assigned to the specified priority. */ extern rtk_api_ret_t rtk_vlan_portPvid_get(rtk_port_t port, rtk_vlan_t *pPvid, rtk_pri_t *pPriority); /* Function Name: * rtk_vlan_portIgrFilterEnable_set * Description: * Set VLAN ingress for each port * Input: * port - Port id * igr_filter - VLAN ingress function enable status * Output: * none * Return: * RT_ERR_OK - Success * RT_ERR_FAILED - Failure * Note: * RTL8306E use one ingress filter for whole system, not for each port, so * any port you set will affect all ports ingress filter setting. * While VLAN function is enabled, ASIC will decide VLAN ID for each received frame * and get belonged member ports from VLAN table. If received port is not belonged * to VLAN member ports, ASIC will drop received frame if VLAN ingress function is enabled. */ extern rtk_api_ret_t rtk_vlan_portIgrFilterEnable_set(rtk_port_t port, rtk_enable_t igr_filter); /* Function Name: * rtk_vlan_portIgrFilterEnable_get * Description: * get VLAN ingress for each port * Input: * port - Port id * Output: * pIgr_filter - the pointer of VLAN ingress function enable status * Return: * RT_ERR_OK - Success * RT_ERR_FAILED - Failure * Note: * RTL8306E use one ingress filter for whole system, not for each port, so * any port you set will affect all ports ingress filter setting. * While VLAN function is enabled, ASIC will decide VLAN ID for each received frame * and get belonged member ports from VLAN table. If received port is not belonged * to VLAN member ports, ASIC will drop received frame if VLAN ingress function is enabled. */ extern rtk_api_ret_t rtk_vlan_portIgrFilterEnable_get(rtk_port_t port, rtk_enable_t *pIgr_filter); /* Function Name: * rtk_vlan_portAcceptFrameType_set * Description: * Set VLAN support frame type * Input: * port - Port id * accept_frame_type - accept frame type * Output: * none * Return: * RT_ERR_OK - Success * RT_ERR_FAILED - Failure * RT_ERR_PORT_ID - Invalid port id * Note: * The API is used for checking 802.1Q tagged frames. * The accept frame type as following: * - ACCEPT_FRAME_TYPE_ALL * - ACCEPT_FRAME_TYPE_TAG_ONLY * - ACCEPT_FRAME_TYPE_UNTAG_ONLY */ extern rtk_api_ret_t rtk_vlan_portAcceptFrameType_set(rtk_port_t port, rtk_vlan_acceptFrameType_t accept_frame_type); /* Function Name: * rtk_vlan_portAcceptFrameType_get * Description: * Get VLAN support frame type * Input: * port - Port id * accept_frame_type - accept frame type * Output: * none * Return: * RT_ERR_OK - Success * RT_ERR_FAILED - Failure * RT_ERR_PORT_ID - Invalid port id * RT_ERR_VLAN_ACCEPT_FRAME_TYPE - Invalid accept frame type * Note: * The API is used for checking 802.1Q tagged frames. * The accept frame type as following: * - ACCEPT_FRAME_TYPE_ALL * - ACCEPT_FRAME_TYPE_TAG_ONLY * - ACCEPT_FRAME_TYPE_UNTAG_ONLY */ extern rtk_api_ret_t rtk_vlan_portAcceptFrameType_get(rtk_port_t port, rtk_vlan_acceptFrameType_t *pAccept_frame_type); /* Function Name: * rtk_vlan_vlanBasedPriority_set * Description: * Set VLAN priority for each CVLAN * Input: * vid -Specified VLAN ID * priority -priority for the VID * Output: * none * Return: * RT_ERR_OK - Success * RT_ERR_FAILED - Failure * RT_ERR_VLAN_VID - Invalid vid * RT_ERR_VLAN_PRIORITY - Invalid 1p priority * RT_ERR_VLAN_ENTRY_NOT_FOUND - Specified vlan entry not found * Note: * This API is used to set priority per VLAN. */ extern rtk_api_ret_t rtk_vlan_vlanBasedPriority_set(rtk_vlan_t vid, rtk_pri_t priority); /* Function Name: * rtk_vlan_vlanBasedPriority_get * Description: * Get VLAN priority for each CVLAN * Input: * vid -Specified VLAN ID * Output: * pPriority -the pointer of priority for the VID * Return: * RT_ERR_OK - Success * RT_ERR_FAILED - Failure * RT_ERR_VLAN_VID - Invalid vid * RT_ERR_NULL_POINTER - Input parameter is null pointer * RT_ERR_VLAN_ENTRY_NOT_FOUND - Specified vlan entry not found * Note: * This API is used to set priority per VLAN. */ extern rtk_api_ret_t rtk_vlan_vlanBasedPriority_get(rtk_vlan_t vid, rtk_pri_t *pPriority); /* Function Name: * rtk_vlan_vidTranslation_set * Description: * Set vid translated to new vid * Input: * vid - old vid * nvid - new vid * Output: * none * Return: * RT_ERR_OK - Success * RT_ERR_FAILED - Failure * RT_ERR_VLAN_VID - Invalid vid * RT_ERR_VLAN_ENTRY_NOT_FOUND - Specified vlan entry not found * Note: * This API is used to translate a vid to a new vid, the new vid could be * used by Q-in-Q or vlan translation function. */ extern rtk_api_ret_t rtk_vlan_vidTranslation_set(rtk_vlan_t vid, rtk_vlan_t nvid); /* Function Name: * rtk_vlan_vidTranslation_get * Description: * Get vid translation new vid * Input: * vid - old vid * Output: * pNvid - the pointer of new vid * Return: * RT_ERR_OK - Success * RT_ERR_FAILED - Failure * RT_ERR_VLAN_VID - Invalid vid * RT_ERR_NULL_POINTER - NULL pointer * RT_ERR_VLAN_ENTRY_NOT_FOUND - Specified vlan entry not found * Note: * This API is used to translate a vid to a new vid, the new vid could be * used by Q-in-Q or vlan translation function. */ extern rtk_api_ret_t rtk_vlan_vidTranslation_get(rtk_vlan_t vid, rtk_vlan_t *pNvid); /* Function Name: * rtk_vlan_vidTranslationEnable_set * Description: * Set vlan translation function enabled or disabled * Input: * enable - enable or disable * nniMask - NNI port mask * Output: * pNvid - the pointer of new vid * Return: * RT_ERR_OK - Success * RT_ERR_FAILED - Failure * RT_ERR_PORT_MASK - Error port mask * Note: * VLAN translation only happens between UNI and NNI port, * in nniMask, 1 means the port is NNI port, 0 means the port * is UNI port */ extern rtk_api_ret_t rtk_vlan_vidTranslationEnable_set(rtk_enable_t enable, rtk_portmask_t nniMask); /* Function Name: * rtk_vlan_vidTranslationEnable_get * Description: * Get vlan translation function enabled or disabled * Input: * Output: * pEnable - the pointer of enable or disable * pNniMask - the pointer of NNI port mask * Return: * RT_ERR_OK - Success * RT_ERR_FAILED - Failure * RT_ERR_NULL_POINTER - NULL pointer * Note: * VLAN translation only happens between UNI and NNI port, * in nniMask, 1 means the port is NNI port, 0 means the port * is UNI port */ extern rtk_api_ret_t rtk_vlan_vidTranslationEnable_get(rtk_enable_t *pEnable, rtk_portmask_t *pNniMask); /* Function Name: * rtk_vlan_tagSrc_set * Description: * Set tag vid and priority source for Q-in-Q and VLAN translation * Input: * port - port id * vidSrc - vid source * priSrc - priority source * Output: * none * Return: * RT_ERR_OK - Success * RT_ERR_FAILED - Failure * RT_ERR_PORT_ID - error port id * Note: * Q-in-Q(SVLAN) and VLAN translation will modify tag, * the API could set outer tag or translated VLAN tag * vid/priority source. * - vidSrc: * - RTL8306E_VIDSRC_POVID - port-based otag vid, * - RTL8306E_VIDSRC_NVID - new vid(translated vid) * - priSrc: * - RTL8306E_PRISRC_PPRI - port-based otag priority, * - RTL8306E_PRISRC_1PRMK - 1p remarking priority */ extern rtk_api_ret_t rtk_vlan_tagSrc_set(rtk_port_t port, rtk_vidSrc_t vidSrc, rtk_priSrc_t priSrc); /* Function Name: * rtk_vlan_tagSrc_get * Description: * Get tag vid and priority source for Q-in-Q and VLAN translation * Input: * port - port id * Output: * pVidSrc - the pointer of vid source * pPriSrc - the pointer of priority source * Return: * RT_ERR_OK - Success * RT_ERR_FAILED - Failure * RT_ERR_PORT_ID - error port id * Note: * Q-in-Q(SVLAN) and VLAN translation will modify tag, * the API could set outer tag or tranlated VLAN tag * vid/priority source. * - vidSrc: * - RTL8306E_VIDSRC_POVID - port-based otag vid, * - RTL8306E_VIDSRC_NVID - new vid(translated vid) * - priSrc: * - RTL8306E_PRISRC_PPRI - port-based otag priority, * - RTL8306E_PRISRC_1PRMK - 1p remarking priority */ extern rtk_api_ret_t rtk_vlan_tagSrc_get(rtk_port_t port, rtk_vidSrc_t *pVidSrc, rtk_priSrc_t *pPriSrc); /*Spanning Tree*/ /* Function Name: * rtk_stp_mstpState_set * Description: * Configure spanning tree state per port * Input: * msti - Multiple spanning tree instance, no use for RTL8306E * port - Port id * stp_state - Spanning tree state * Output: * none * Return: * RT_ERR_OK - Success * RT_ERR_FAILED - Failure * RT_ERR_PORT_ID - Invalid port id * RT_ERR_MSTP_STATE - Invalid spanning tree status * Note: * Because RTL8306E does not support multiple spanning tree, so msti is no use. * There are four states supported by ASIC. * - STP_STATE_DISABLED * - STP_STATE_BLOCKING * - STP_STATE_LEARNING * - STP_STATE_FORWARDING */ extern rtk_api_ret_t rtk_stp_mstpState_set(rtk_stp_msti_id_t msti, rtk_port_t port, rtk_stp_state_t stp_state); /* Function Name: * rtk_stp_mstpState_get * Description: * Get Configuration of spanning tree state per port * Input: * msti - Multiple spanning tree instance, no use for RTL8306E * port - Port id * Output: * pStp_state - the pointer of Spanning tree state * Return: * RT_ERR_OK - Success * RT_ERR_FAILED - Failure * RT_ERR_PORT_ID - Invalid port id * RT_ERR_NULL_POINTER - Input parameter is null pointer * Note: * Because RTL8306E does not support multiple spanning tree, so msti is no use. * There are four states supported by ASIC. * - STP_STATE_DISABLED * - STP_STATE_BLOCKING * - STP_STATE_LEARNING * - STP_STATE_FORWARDING */ extern rtk_api_ret_t rtk_stp_mstpState_get(rtk_stp_msti_id_t msti, rtk_port_t port, rtk_stp_state_t *pStp_state); /* LUT */ /* Function Name: * rtk_l2_addr_add * Description: * Set LUT unicast entry * Input: * pMac - 6 bytes unicast(I/G bit is 0) mac address to be written into LUT * pL2_data - the mac address attributes * Output: * none * Return: * RT_ERR_OK - Success * RT_ERR_FAILED - Failure * RT_ERR_INPUT - Invalid input parameter * RT_ERR_MAC - Wrong mac address, must be unicast mac * RT_ERR_NULL_POINTER - Input parameter is null pointer * RT_ERR_L2_INDEXTBL_FULL - The L2 index table is full * Note: * If the unicast mac address already existed in LUT, it will udpate the status of the entry. * Otherwise, it will find an empty or asic auto learned entry to write. If all the entries * with the same hash value can't be replaced, ASIC will return a RT_ERR_L2_INDEXTBL_FULL error. * for RTL8306E, pL2_data member fid and sa_block is no use, so it can be chosen any value. */ extern rtk_api_ret_t rtk_l2_addr_add(rtk_mac_t *pMac, rtk_l2_ucastAddr_t *pL2_data); /* Function Name: * rtk_l2_addr_get * Description: * Get LUT unicast entry * Input: * pMac - 6 bytes unicast(I/G bit is 0) mac address to be gotten * fid - filtering database id, could be any value for RTL8306E switch * Output: * pL2_data - the mac address attributes * Return: * RT_ERR_OK - Success * RT_ERR_FAILED - Failure * RT_ERR_INPUT - Invalid input parameter * RT_ERR_MAC - Wrong mac address, must be unicast mac * RT_ERR_NULL_POINTER - Input parameter is null pointer * RT_ERR_L2_ENTRY_NOTFOUND - Specified entry not found * Note: * If the unicast mac address existed in LUT, it will return the port where * the mac is learned, 802.1x authorized status and dynamic/static entry, * Otherwise, it will return a RT_ERR_L2_ENTRY_NOTFOUND error. */ extern rtk_api_ret_t rtk_l2_addr_get(rtk_mac_t *pMac, rtk_fid_t fid, rtk_l2_ucastAddr_t *pL2_data); /* Function Name: * rtk_l2_addr_del * Description: * Delete LUT unicast entry * Input: * pMac - 6 bytes unicast mac address to be deleted * fid - filtering database id, could be any value for RTL8306E switch * Output: * none * Return: * RT_ERR_OK - Success * RT_ERR_FAILED - Failure * RT_ERR_INPUT - Invalid input parameter * RT_ERR_MAC - Wrong mac address, must be unicast mac * RT_ERR_NULL_POINTER - Input parameter is null pointer * RT_ERR_L2_ENTRY_NOTFOUND - Specified entry not found * Note: * If the mac has existed in the LUT, it will be deleted. * Otherwise, it will return RT_ERR_L2_ENTRY_NOTFOUND. */ extern rtk_api_ret_t rtk_l2_addr_del(rtk_mac_t *pMac, rtk_fid_t fid); /* Function Name: * rtk_l2_mcastAddr_add * Description: * Add LUT multicast entry * Input: * pMac - 6 bytes unicast mac address to be deleted * fid - filtering database id, could be any value for RTL8306E switch * portmask - Port mask to be forwarded to * Output: * none * Return: * RT_ERR_OK - Success * RT_ERR_FAILED - Failure * RT_ERR_INPUT - Invalid input parameter * RT_ERR_PORT_MASK - Invalid port mask * RT_ERR_MAC - Wrong mac address, must be unicast mac * RT_ERR_L2_INDEXTBL_FULL - Hashed index is full of entries * Note: * If the multicast mac address already existed in the LUT, it will udpate the * port mask of the entry. Otherwise, it will find an empty or asic auto learned * entry to write. If all the entries with the same hash value can't be replaced, * ASIC will return a RT_ERR_L2_INDEXTBL_FULL error. */ extern rtk_api_ret_t rtk_l2_mcastAddr_add(rtk_mac_t *pMac, rtk_fid_t fid, rtk_portmask_t portmask); /* Function Name: * rtk_l2_mcastAddr_get * Description: * Get LUT multicast entry * Input: * pMac - 6 bytes multicast(I/G bit is 0) mac address to be gotten * fid - filtering database id, could be any value for RTL8306E switch * Output: * pPortmask - the pointer of port mask * Return: * RT_ERR_OK - Success * RT_ERR_FAILED - Failure * RT_ERR_INPUT - Invalid input parameter * RT_ERR_NULL_POINTER - Input parameter is null pointer * RT_ERR_MAC - Wrong mac address, must be unicast mac * RT_ERR_L2_INDEXTBL_FULL - Hashed index is full of entries * Note: * If the multicast mac address existed in LUT, it will return the port mask where * the packet should be forwarded to, Otherwise, it will return a * RT_ERR_L2_ENTRY_NOTFOUND error. */ extern rtk_api_ret_t rtk_l2_mcastAddr_get(rtk_mac_t *pMac, rtk_fid_t fid, rtk_portmask_t *pPortmask); /* Function Name: * rtk_l2_mcastAddr_del * Description: * Delete LUT unicast entry * Input: * pMac - 6 bytes multicast(I/G bit is 1) mac address to be gotten * fid - filtering database id, could be any value for RTL8306E switch * Output: * none * Return: * RT_ERR_OK - Success * RT_ERR_FAILED - Failure * RT_ERR_INPUT - Invalid input parameter * RT_ERR_MAC - Wrong mac address, must be unicast mac * RT_ERR_L2_ENTRY_NOTFOUND - No such LUT entry * Note: * If the mac has existed in the LUT, it will be deleted. * Otherwise, it will return RT_ERR_L2_ENTRY_NOTFOUND. */ extern rtk_api_ret_t rtk_l2_mcastAddr_del(rtk_mac_t *pMac, rtk_fid_t fid); /* Function Name: * rtk_l2_limitLearningCnt_set * Description: * Set per-Port auto learning limit number * Input: * port - Port id. * mac_cnt - Auto learning entries limit number * Output: * None * Return: * RT_ERR_OK - set shared meter successfully * RT_ERR_FAILED - FAILED to iset shared meter * RT_ERR_PORT_ID - Invalid port number. * RT_ERR_LIMITED_L2ENTRY_NUM - Invalid auto learning limit number * Note: * (1)The API can set per-port ASIC auto learning limit number from 0(disable learning) * to 0x1F(31). * (2)If mac_cnt is set from 0 to 0x1F, per-port ASIC auto learning limit will be enabled; * if mac_cnt is set 0xFF, per-port ASIC auto learning limit will be disabled. */ extern rtk_api_ret_t rtk_l2_limitLearningCnt_set(rtk_port_t port, rtk_mac_cnt_t mac_cnt); /* Function Name: * rtk_l2_limitLearningCnt_get * Description: * Get per-Port auto learning limit number * Input: * port - Port id. * Output: * pMac_cnt - Auto learning entries limit number * Return: * RT_ERR_OK - Success * RT_ERR_FAILED - Failure * RT_ERR_PORT_ID - Invalid port number. * Note: * The API can get per-port ASIC auto learning limit number. */ extern rtk_api_ret_t rtk_l2_limitLearningCnt_get(rtk_port_t port, rtk_mac_cnt_t *pMac_cnt); /* Function Name: * rtk_l2_limitLearningCntAction_set * Description: * Configure auto learn over limit number action. * Input: * port - Port id (must be RTK_WHOLE_SYSTEM) * action - Auto learning entries limit number * Output: * None * Return: * RT_ERR_OK - Success * RT_ERR_FAILED - Failure * RT_ERR_PORT_ID - Invalid port number. * RT_ERR_NOT_ALLOWED - Invalid learn over action * Note: * (1)The API can set SA unknown packet action while auto learn limit number is over. * The action symbol as following: * - LIMIT_LEARN_CNT_ACTION_DROP, * - LIMIT_LEARN_CNT_ACTION_TO_CPU, * (2)The action is global, so the port must be set as RTK_WHOLE_SYSTEM */ extern rtk_api_ret_t rtk_l2_limitLearningCntAction_set(rtk_port_t port, rtk_l2_limitLearnCntAction_t action); /* Function Name: * rtk_l2_limitLearningCntAction_get * Description: * Get auto learn over limit number action. * Input: * port - Port id (must be RTK_WHOLE_SYSTEM) * Output: * pAction - Learn over action * Return: * RT_ERR_OK - Success * RT_ERR_FAILED - Failure * RT_ERR_PORT_ID - Invalid port number. * Note: * (1)The API can get SA unknown packet action while auto learn limit number is over. * The action symbol as following: * - LIMIT_LEARN_CNT_ACTION_DROP, * - LIMIT_LEARN_CNT_ACTION_TO_CPU, * (2)The action is global, so the port must be set as RTK_WHOLE_SYSTEM */ extern rtk_api_ret_t rtk_l2_limitLearningCntAction_get(rtk_port_t port, rtk_l2_limitLearnCntAction_t *pAction); /* Function Name: * rtk_l2_learningCnt_get * Description: * Get per-Port current auto learning number * Input: * port - Port id. * Output: * pMac_cnt - ASIC auto learning entries number * Return: * RT_ERR_OK - Success * RT_ERR_PORT_ID - Invalid port number. * RT_ERR_NULL_POINTER - Input parameter is null pointer * Note: * The API can get per-port ASIC auto learning number */ extern rtk_api_ret_t rtk_l2_learningCnt_get(rtk_port_t port, rtk_mac_cnt_t *pMac_cnt); /* CPU Port */ /* Function Name: * rtk_cpu_enable_set * Description: * Set cpu port function enable or disable * Input: * enable - enable or disable * Output: * none * Return: * RT_ERR_OK - Success * RT_ERR_FAILED - Failure * Note: * The API can set CPU port function enable/disable * default port 4 is cpu port. */ extern rtk_api_ret_t rtk_cpu_enable_set(rtk_enable_t enable); /* Function Name: * rtk_cpu_enable_get * Description: * Get cpu port function enable or disable * Input: * none * Output: * pEnable - the pointer of enable or disable cpu port function * Return: * RT_ERR_OK - Success * RT_ERR_FAILED - Failure * Note: * The API can set CPU port function enable/disable */ extern rtk_api_ret_t rtk_cpu_enable_get(rtk_enable_t *pEnable); /* Function Name: * rtk_cpu_tagPort_set * Description: * Set CPU port and CPU tag insert mode * Input: * port - Port id * mode - CPU tag insert for packets egress from CPU port * Output: * none * Return: * RT_ERR_OK - Success * RT_ERR_FAILED - Failure * RT_ERR_PORT_ID - Invalid port id * Note: * The API can set CPU port and inserting proprietary CPU tag mode (Length/Type 0x8899) * to the frame that transmitting to CPU port. * The inset cpu tag mode is as following: * - CPU_INSERT_TO_ALL * - CPU_INSERT_TO_TRAPPING * - CPU_INSERT_TO_NONE */ extern rtk_api_ret_t rtk_cpu_tagPort_set(rtk_port_t port, rtk_cpu_insert_t mode); /* Function Name: * rtk_cpu_tagPort_get * Description: * Get CPU port and CPU tag insert mode * Input: * port - Port id * Output: * pMode - the pointer of CPU tag insert for packets egress from CPU port * Return: * RT_ERR_OK - Success * RT_ERR_FAILED - Failure * RT_ERR_NULL_POINTER - Input parameter is null pointer * Note: * The API can set CPU port and inserting proprietary CPU tag mode (Length/Type 0x8899) * to the frame that transmitting to CPU port. * The inset cpu tag mode is as following: * - CPU_INSERT_TO_ALL * - CPU_INSERT_TO_TRAPPING * - CPU_INSERT_TO_NONE */ extern rtk_api_ret_t rtk_cpu_tagPort_get(rtk_port_t *pPort, rtk_cpu_insert_t *pMode); /*Port Mirror */ /* Function Name: * rtk_mirror_portBased_set * Description: * Set port mirror function * Input: * mirroring_port - Monitor port, 7 means no monitor port * pMirrored_rx_portmask - the pointer of Rx mirror port mask * pMirrored_tx_portmask - the pointer of Tx mirror port mask * Output: * none * Return: * RT_ERR_OK - Success * RT_ERR_FAILED - Failure * RT_ERR_PORT_MASK - Invalid port mask * Note: * The API is to set mirror function of source port and mirror port. */ extern rtk_api_ret_t rtk_mirror_portBased_set(rtk_port_t mirroring_port, rtk_portmask_t *pMirrored_rx_portmask, rtk_portmask_t *pMirrored_tx_portmask); /* Function Name: * rtk_mirror_portBased_get * Description: * Get port mirror function * Input: * none * Output: * pMirroring_port - the pointer Monitor port, 7 means no monitor port * pMirrored_rx_portmask - the pointer of Rx mirror port mask * pMirrored_tx_portmask - the pointer of Tx mirror port mask * Return: * RT_ERR_OK - Success * RT_ERR_FAILED - Failure * RT_ERR_PORT_MASK - Invalid port mask * RT_ERR_NULL_POINTER - Input parameter is null pointer * Note: * The API is to set mirror function of source port and mirror port. */ extern rtk_api_ret_t rtk_mirror_portBased_get(rtk_port_t* pMirroring_port, rtk_portmask_t *pMirrored_rx_portmask, rtk_portmask_t *pMirrored_tx_portmask); /* 802.1X */ /* Function Name: * rtk_dot1x_unauthPacketOper_set * Description: * Set 802.1x unauth action configuration * Input: * port - Port id, no use for RTL8306E switch * unauth_action - 802.1X unauth action * Output: * none * Return: * RT_ERR_OK * RT_ERR_FAILED * RT_ERR_DOT1X_PROC * Note: * This API can set 802.1x unauth action configuration, * for RTL8306E switch, the action is by whole system, * so port could be any value of 0~6. * The unauth action is as following: * - DOT1X_ACTION_DROP * - DOT1X_ACTION_TRAP2CPU */ extern rtk_api_ret_t rtk_dot1x_unauthPacketOper_set(rtk_port_t port, rtk_dot1x_unauth_action_t unauth_action); /* Function Name: * rtk_dot1x_unauthPacketOper_get * Description: * Get 802.1x unauth action configuration * Input: * port - Port id, no use for RTL8306E switch * Output: * pUnauth_action - the pointer of 802.1X unauth action * Return: * RT_ERR_OK - Success * RT_ERR_FAILED - Failure * RT_ERR_NULL_POINTER - Input parameter is null pointer * Note: * This API can set 802.1x unauth action configuration, * for RTL8306E switch, the action is by whole system, * so port could be any value of 0~6. * The unauth action is as following: * - DOT1X_ACTION_DROP * - DOT1X_ACTION_TRAP2CPU */ extern rtk_api_ret_t rtk_dot1x_unauthPacketOper_get(rtk_port_t port, rtk_dot1x_unauth_action_t *pUnauth_action); /* Function Name: * rtk_dot1x_portBasedEnable_set * Description: * Set 802.1x port-based enable configuration * Input: * port - Port id * enable - enable or disable * Output: * none * Return: * RT_ERR_OK - Success * RT_ERR_FAILED - Failure * RT_ERR_PORT_ID - Invalid port id * Note: * The API can update the port-based port enable register content. If a port is 802.1x * port based network access control "enabled", it should be authenticated so packets * from that port won't be dropped or trapped to CPU. * The status of 802.1x port-based network access control is as following: * - DISABLED * - ENABLED */ extern rtk_api_ret_t rtk_dot1x_portBasedEnable_set(rtk_port_t port, rtk_enable_t enable); /* Function Name: * rtk_dot1x_portBasedEnable_get * Description: * Get 802.1x port-based enable configuration * Input: * port - Port id * Output: * pEnable - the pointer of enable or disable * Return: * RT_ERR_OK - Success * RT_ERR_FAILED - Failure * RT_ERR_PORT_ID - Invalid port id * Note: * The API can update the port-based port enable register content. If a port is 802.1x * port based network access control "enabled", it should be authenticated so packets * from that port won't be dropped or trapped to CPU. * The status of 802.1x port-based network access control is as following: * - DISABLED * - ENABLED */ extern rtk_api_ret_t rtk_dot1x_portBasedEnable_get(rtk_port_t port, rtk_enable_t *pEnable); /* Function Name: * rtk_dot1x_portBasedAuthStatus_set * Description: * Set 802.1x port-based enable configuration * Input: * port - Port id * port_auth - The status of 802.1x port * Output: * none * Return: * RT_ERR_OK - Success * RT_ERR_FAILED - Failure * RT_ERR_PORT_ID - Invalid port id * RT_ERR_DOT1X_PORTBASEDAUTH - Port-based auth port error * Note: * The authenticated status of 802.1x port-based network access control is as following: * - UNAUTH * - AUTH */ extern rtk_api_ret_t rtk_dot1x_portBasedAuthStatus_set(rtk_port_t port, rtk_dot1x_auth_status_t port_auth); /* Function Name: * rtk_dot1x_portBasedAuthStatus_get * Description: * Get 802.1x port-based enable configuration * Input: * port - Port id * Output: * pPort_auth - the pointer of the status of 802.1x port * Return: * RT_ERR_OK - Success * RT_ERR_FAILED - Failure * RT_ERR_PORT_ID - Invalid port id * RT_ERR_NULL_POINTER - Input parameter is null pointer * Note: * The authenticated status of 802.1x port-based network access control is as following: * - UNAUTH * - AUTH */ extern rtk_api_ret_t rtk_dot1x_portBasedAuthStatus_get(rtk_port_t port, rtk_dot1x_auth_status_t *pPort_auth); /* Function Name: * rtk_dot1x_portBasedDirection_set * Description: * Set 802.1x port-based operational direction configuration * Input: * port - Port id * port_direction - Operation direction * Output: * none * Return: * RT_ERR_OK - Success * RT_ERR_FAILED - Failure * RT_ERR_PORT_ID - Invalid port id * RT_ERR_DOT1X_PORTBASEDOPDIR - Port-based opdir error * Note: * The operate controlled direction of 802.1x port-based network access control is as following: * - BOTH * - IN */ extern rtk_api_ret_t rtk_dot1x_portBasedDirection_set(rtk_port_t port, rtk_dot1x_direction_t port_direction); /* Function Name: * rtk_dot1x_portBasedDirection_get * Description: * Get 802.1x port-based operational direction configuration * Input: * port - Port id * Output: * pPort_direction - the pointer of Operation direction * Return: * RT_ERR_OK - Success * RT_ERR_FAILED - Failure * RT_ERR_PORT_ID - Invalid port id * RT_ERR_NULL_POINTER - Input parameter is null pointer * Note: * The operate controlled direction of 802.1x port-based network access control is as following: * - BOTH * - IN */ extern rtk_api_ret_t rtk_dot1x_portBasedDirection_get(rtk_port_t port, rtk_dot1x_direction_t *pPort_direction); /* Function Name: * rtk_dot1x_macBasedEnable_set * Description: * Set 802.1x mac-based port enable configuration * Input: * port - Port id * enable - The status of 802.1x mac-base funtion * Output: * none * Return: * RT_ERR_OK - Success * RT_ERR_FAILED - Failure * RT_ERR_PORT_ID - Invalid port id * Note: * If a port is 802.1x MAC based network access control "enabled", the incoming packets should * be authenticated so packets from that port won't be dropped or trapped to CPU. * The status of 802.1x MAC-based network access control is as following: * - DISABLED * - ENABLED */ extern rtk_api_ret_t rtk_dot1x_macBasedEnable_set(rtk_port_t port, rtk_enable_t enable); /* Function Name: * rtk_dot1x_macBasedEnable_get * Description: * Get 802.1x mac-based port enable configuration * Input: * port - Port id * Output: * pEnable - the pointer of the status of 802.1x mac-base funtion * Return: * RT_ERR_OK - Success * RT_ERR_FAILED - Failure * Note: * If a port is 802.1x MAC based network access control "enabled", the incoming packets should * be authenticated so packets from that port won't be dropped or trapped to CPU. * The status of 802.1x MAC-based network access control is as following: * - DISABLED * - ENABLED */ extern rtk_api_ret_t rtk_dot1x_macBasedEnable_get(rtk_port_t port, rtk_enable_t *pEnable); /* Function Name: * rtk_dot1x_macBasedDirection_set * Description: * Set 802.1x mac-based operational direction configuration * Input: * mac_direction - Operation direction * Output: * none * Return: * RT_ERR_OK - Success * RT_ERR_FAILED - Failure * RT_ERR_DOT1X_MACBASEDOPDIR - MAC-based opdir error * Note: * The operate controlled direction of 802.1x mac-based network access control is as following: * - BOTH * - IN */ extern rtk_api_ret_t rtk_dot1x_macBasedDirection_set(rtk_dot1x_direction_t mac_direction); /* Function Name: * rtk_dot1x_macBasedDirection_get * Description: * Get 802.1x mac-based operational direction configuration * Input: * none * Output: * pMac_direction - the pointer of Operation direction * Return: * RT_ERR_OK - Success * RT_ERR_FAILED - Failure * RT_ERR_NULL_POINTER - Input parameter is null pointer * Note: * The operate controlled direction of 802.1x mac-based network access control is as following: * - BOTH * - IN */ extern rtk_api_ret_t rtk_dot1x_macBasedDirection_get(rtk_dot1x_direction_t *pMac_direction); /* Function Name: * rtk_dot1x_macBasedAuthMac_add * Description: * Add an authenticated MAC to ASIC * Input: * port - Port id * pAuth_mac - The authenticated MAC * fid - no use for RTL8306E * Output: * none * Return: * RT_ERR_OK - Success * RT_ERR_FAILED - Failure * RT_ERR_L2_ENTRY_NOTFOUND - Specified entry not found * RT_ERR_DOT1X_MAC_PORT_MISMATCH - Auth MAC and port mismatch eror * Note: * The API can add a 802.1x authenticated MAC address to port. If the MAC does not exist in LUT, * user can't add this MAC to auth status. */ extern rtk_api_ret_t rtk_dot1x_macBasedAuthMac_add(rtk_port_t port, rtk_mac_t *pAuth_mac, rtk_fid_t fid); /* Function Name: * rtk_dot1x_macBasedAuthMac_del * Description: * Delete an authenticated MAC to ASIC * Input: * port - Port id * pAuth_mac - The authenticated MAC * fid - no use for RTL8306E * Output: * none * Return: * RT_ERR_OK - Success * RT_ERR_FAILED - Failure * RT_ERR_L2_ENTRY_NOTFOUND - Specified entry not found * RT_ERR_DOT1X_MAC_PORT_MISMATCH - Auth MAC and port mismatch eror * Note: * The API can delete a 802.1x authenticated MAC address to port. It only change the auth status of * the MAC and won't delete it from LUT. */ extern rtk_api_ret_t rtk_dot1x_macBasedAuthMac_del(rtk_port_t port, rtk_mac_t *pAuth_mac, rtk_fid_t fid); /* Function Name: * rtk_svlan_init * Description: * Initialize SVLAN Configuration * Input: * none * Output: * none * Return: * RT_ERR_OK * RT_ERR_FAILED * RT_ERR_SMI * RT_ERR_INPUT * Note: * Ether type of S-tag in 802.1ad is 0x88a8 and there are existed ether type * 0x9100 and 0x9200 for Q-in-Q SLAN design. User can set mathced ether * type as service provider supported protocol. After call this API, all ports are * set as CVLAN port. you can use rtk_svlan_servicePort_add to add SVLAN port. */ extern rtk_api_ret_t rtk_svlan_init(void); /* Function Name: * rtk_svlan_servicePort_add * Description: * Enable one service port in the specified device * Input: * port - Port id * Output: * none * Return: * RT_ERR_OK * RT_ERR_FAILED * RT_ERR_SMI * Note: * This API is setting which port is connected to provider switch. All frames receiving from this port * will recognize Service Vlan Tag. * */ extern rtk_api_ret_t rtk_svlan_servicePort_add(rtk_port_t port); /* Function Name: * rtk_svlan_servicePort_del * Description: * Disable one service port in the specified device * Input: * none * Output: * pSvlan_portmask - svlan ports mask * Return: * RT_ERR_OK * RT_ERR_FAILED * RT_ERR_SMI * Note: * Ether type of S-tag in 802.1ad is 0x88a8 and there are existed ether type * 0x9100 and 0x9200 for Q-in-Q SLAN design. User can set mathced ether type as service * provider supported protocol. */ extern rtk_api_ret_t rtk_svlan_servicePort_del(rtk_port_t port); /* Function Name: * rtk_svlan_servicePort_get * Description: * Disable one service port in the specified device * Input: * none * Output: * pSvlan_portmask - svlan ports mask * Return: * RT_ERR_OK - success * RT_ERR_FAILED - fail * RT_ERR_NULL_POINTER - null pointer * Note: * Ether type of S-tag in 802.1ad is 0x88a8 and there are existed ether type 0x9100 * and 0x9200 for Q-in-Q SLAN design. User can set mathced ether type as service * provider supported protocol. */ extern rtk_api_ret_t rtk_svlan_servicePort_get(rtk_portmask_t *pSvlan_portmask); /* Function Name: * rtk_svlan_tpidEntry_set * Description: * Configure accepted S-VLAN ether type. The default ether type of S-VLAN is 0x88a8 * Input: * svlan_tag_id - Ether type of S-tag frame parsing in uplink ports * Output: * none * Return: * RT_ERR_OK * RT_ERR_FAILED * RT_ERR_SMI * Note: * Ether type of S-tag in 802.1ad is 0x88a8 and there are existed ether type 0x9100 * and 0x9200 for Q-in-Q SLAN design. User can set mathced ether type as service * provider supported protocol. */ extern rtk_api_ret_t rtk_svlan_tpidEntry_set(rtk_svlan_tpid_t svlan_tag_id); /* Function Name: * rtk_svlan_tpidEntry_get * Description: * Get accepted S-VLAN ether type. The default ether type of S-VLAN is 0x88a8 * Input: * pSvlan_tag_id - Ether type of S-tag frame parsing in uplink ports * Output: * none * Return: * RT_ERR_OK * RT_ERR_FAILED * Note: * Ether type of S-tag in 802.1ad is 0x88a8 and there are existed ether type 0x9100 * and 0x9200 for Q-in-Q SLAN design. User can set mathced ether type as service * provider supported protocol. */ extern rtk_api_ret_t rtk_svlan_tpidEntry_get(rtk_svlan_tpid_t *pSvlan_tag_id); /* Function Name: * rtk_svlan_portPvid_set * Description: * Set port to specified VLAN ID(PVID) for Service Provider Port * Input: * port - Port id * pvid - Specified Service VLAN ID * priority - 802.1p priority for the PVID * dei - Service VLAN tag DEI bit * Output: * none * Return: * RT_ERR_OK * RT_ERR_FAILED * RT_ERR_VLAN_VID * RT_ERR_SMI * RT_ERR_VLAN_PRIORITY * RT_ERR_VLAN_ENTRY_NOT_FOUND * Note: * The API is used for Port-based VLAN. The untagged frame received from the * port will be classified to the specified VLAN and assigned to the specified priority. */ extern rtk_api_ret_t rtk_svlan_portPvid_set(rtk_port_t port, rtk_vlan_t pvid, rtk_pri_t priority, rtk_dei_t dei); /* Function Name: * rtk_svlan_portPvid_get * Description: * Get Service VLAN ID(PVID) on specified port * Input: * port - Port id * pPvid - Specified VLAN ID * pPriority - 802.1p priority for the PVID * pDei - DEI bit * Output: * none * Return: * RT_ERR_OK * RT_ERR_FAILED * RT_ERR_SMI * RT_ERR_PORT_ID * RT_ERR_NULL_POINTER * Note: * The API is used for Port-based VLAN. The untagged frame received from the * port will be classified to the specified VLAN and assigned to the specified priority. */ extern rtk_api_ret_t rtk_svlan_portPvid_get(rtk_port_t port, rtk_vlan_t *pPvid, rtk_pri_t* pPriority, rtk_dei_t *pDei); /* Function Name: * rtk_filter_igrAcl_init * Description: * Initialize ACL * Input: * none * Output: * none * Return: * RT_ERR_OK * RT_ERR_FAILED * Note: * The API init ACL module. */ extern rtk_api_ret_t rtk_filter_igrAcl_init(void); /* Function Name: * rtk_filter_igrAcl_rule_add * Description: * Add an acl rule into acl table * Input: * pRule - the pointer of rule structure * Output: * none * Return: * RT_ERR_OK * RT_ERR_FAILED * RT_ERR_TBL_FULL * RT_ERR_NULL_POINTER * Note: * The API add an ACL rule. <nl> * phyport could be 0~5: port number, RTL8306_ACL_ANYPORT: any port;<nl> * protocol could be RTL8306_ACL_ETHER(ether type), RTL8306_ACL_TCP(TCP), RTL8306_ACL_UDP(UDP), RTL8306_ACL_TCPUDP(TCP or UDP);<nl> * prority could be RTL8306_PRIO0~RTL8306_PRIO3;<nl> * action could be RTL8306_ACT_DROP/RTL8306_ACT_PERMIT/RTL8306_ACT_TRAPCPU/RTL8306_ACT_MIRROR;<nl> */ extern rtk_api_ret_t rtk_filter_igrAcl_rule_add(rtk_filter_rule_t *pRule); /* Function Name: * rtk_filter_igrAcl_rule_get * Description: * Get ACL rule priority and action * Input: * pRule - the pointer of rule structure * Output: * pRule - the pointer of rule structure * Return: * RT_ERR_OK * RT_ERR_FAILED * Note: * The API add an ACL rule. <nl> * phyport could be 0~5: port number, RTL8306_ACL_ANYPORT: any port;<nl> * protocol could be RTL8306_ACL_ETHER(ether type), RTL8306_ACL_TCP(TCP), RTL8306_ACL_UDP(UDP), RTL8306_ACL_TCPUDP(TCP or UDP);<nl> * prority could be RTL8306_PRIO0~RTL8306_PRIO3;<nl> * action could be RTL8306_ACT_DROP/RTL8306_ACT_PERMIT/RTL8306_ACT_TRAPCPU/RTL8306_ACT_MIRROR;<nl> */ extern rtk_api_ret_t rtk_filter_igrAcl_rule_get(rtk_filter_rule_t *pRule); /* Function Name: * rtk_filter_igrAcl_rule_del * Description: * Delete an acl rule into acl table * Input: * pRule - the pointer of rule structure * Output: * none * Return: * RT_ERR_OK * RT_ERR_FAILED * RT_ERR_INPUT * RT_ERR_NULL_POINTER * Note: * The API delete an ACL rule. <nl> * only phyport/protocol/data field in pRule needs to be specified. */ extern rtk_api_ret_t rtk_filter_igrAcl_rule_del(rtk_filter_rule_t *pRule); #endif /*__RTK_API_EXT_H__*/
/*
* Copyright (C) 2010 Realtek Semiconductor Corp.
* All Rights Reserved.
*
* This program is the proprietary software of Realtek Semiconductor
* Corporation and/or its licensors, and only be used, duplicated,
* modified or distributed under the authorized license from Realtek.
*
* ANY USE OF THE SOFTWARE OTEHR THAN AS AUTHORIZED UNDER 
* THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
* 
* $Revision: 10083 $ 
* $Date: 2010-06-07 11:18:41 +0800 (星期一, 07 六月 2010) $
*
* Purpose : Realtek common API function list supported by RTL8306E switch, 
*               they could also be applied to chips 
*               RTL8306M/RTL8305N/RTL8303/RTL8304E/RTL8306N
* 
* Feature : This file consists of following modules:
*              (1)   Port Configuration              
*              (2)   Rate Limit
*              (3)   QOS
*              (4)   TRAP
*              (5)   VLAN
*              (6)   Spanning Tree
*              (7)   Address Table
*              (8)   CPU Port
*              (9)   Mirror
*              (10)  IEEE 802.1x
*              (11)  SVLAN
*/


#ifndef __RTK_API_EXT_H__
#define __RTK_API_EXT_H__

#include "rtl8306e_types.h"
#include "rtk_api.h"

/*
 * Function Declaration
 */
 
/*Misc*/

/* Function Name:
 *      rtk_switch_init
 * Description:
 *      Set chip to default configuration enviroment
 * Input:
 *      none
 * Output:
 *      none
 * Return:
 *      RT_ERR_OK                     -  Success
 *      RT_ERR_FAILED               -  Failure
 * Note:
 *     The API can set chip registers to default configuration for
 *     different release chip model.
 */ 
extern rtk_api_ret_t rtk_switch_init(void);

/* Function Name:
 *      rtk_switch_maxPktLen_set
 * Description:
 *      Set the max packet length of the specific unit
 * Input:
 *      len       -       max packet length
 * Output:
 *      none
 * Return:
 *      RT_ERR_OK                    -  Success
 *      RT_ERR_FAILED               -  Failure
 *      RT_ERR_INPUT                -  Invalid input parameter
 * Note:
 *      The API can set max packet length of the specific unit to
 *          MAXPKTLEN_1522B,
 *          MAXPKTLEN_1536B,
 *          MAXPKTLEN_1552B,
 *          MAXPKTLEN_2000B, 
 */ 
extern rtk_api_ret_t rtk_switch_maxPktLen_set(rtk_switch_maxPktLen_t len); 

/* Function Name:
 *      rtk_switch_maxPktLen_get
 * Description:
 *      Get the max packet length of the specific unit
 * Input:
 *      none
 * Output:
 *      pLen                             -    the pointer of max packet length
 * Return: 
 *      RT_ERR_OK                    -  Success
 *      RT_ERR_FAILED               -  Failure
 *      RT_ERR_NULL_POINTER     -  Input parameter is null pointer 
 * Note:
 *      The API can set max packet length of the specific unit to
 *          MAXPKTLEN_1522B,
 *          MAXPKTLEN_1536B,
 *          MAXPKTLEN_1552B,
 *          MAXPKTLEN_2000B, 
 */
 extern rtk_api_ret_t rtk_switch_maxPktLen_get(rtk_switch_maxPktLen_t *pLen);

/* Function Name:
 *      rtk_port_phyReg_set
 * Description:
 *      Set PHY register data of the specific port
 * Input:
 *      phy                - phy number, 0 ~ 6 
 *      reg                 - Register id
 *      regData           - Register data
 * Output:
 *      none
 * Return:
 *      RT_ERR_OK         -  Success
 *      RT_ERR_FAILED   -   Failure
 * Note:
 *      This API can set PHY register data of the specific port.
 *      RTL8306E switch has 5 FE port, and port 4 could be set as
 *      phy mode or mac mode, port 5 is mac mode which connect
 *      with mii interface. so parameter phy 0 ~4 means port 0 ~4
 *      phy register, 5 means port 4 mac mode, 6 means port 5.
 *      
 */
extern rtk_api_ret_t rtk_port_phyReg_set(rtk_port_t port, rtk_port_phy_reg_t reg, rtk_port_phy_data_t value);

/* Function Name:
 *      rtk_port_phyReg_get
 * Description:
 *      Get PHY register data of the specific port
 * Input:
 *      phy                  - phy number, 0 ~ 6
 *      reg                   - Register id
 * Output:
 *      pData               - the pointer of Register data
 * Return:
 *      RT_ERR_OK        -  Success
 *      RT_ERR_FAILED   -  Failure
 * Note:
 *      This API can set PHY register data of the specific port.
 *      RTL8306E switch has 5 FE port, and port 4 could be set as
 *      phy mode or mac mode, port 5 is mac mode which connect
 *      with mii interface. so parameter phy 0 ~4 means port 0 ~4
 *      phy register, 5 means port 4 mac mode, 6 means port 5.
 *      
 */
extern rtk_api_ret_t rtk_port_phyReg_get(rtk_port_t port, rtk_port_phy_reg_t reg, rtk_port_phy_data_t *pData); 

/* Function Name:
 *      rtk_port_phyAutoNegoAbility_set
 * Description:
 *      Set ethernet PHY auto-negotiation desired ability
 * Input:
 *      port       -  Port id
 *      pAbility   -  Ability structure
 * Output:
 *      none
 * Return:
 *      RT_ERR_OK                        
 *      RT_ERR_FAILED                  
 *      RT_ERR_SMI       
 *      RT_ERR_PORT_ID
 *      RT_ERR_PHY_REG_ID
 *      RT_ERR_NULL_POINTER
 *      RT_ERR_BUSYWAIT_TIMEOUT
 *     
 * Note:
 *      (1) RTL8306E switch only has 5 phy, so the input port id should be 0~4.
 *      (2) In auto-negotiation mode, phy autoNegotiation ability must be enabled
 */ 
extern rtk_api_ret_t rtk_port_phyAutoNegoAbility_set(rtk_port_t port, rtk_port_phy_ability_t *pAbility);

/* Function Name:
 *      rtk_port_phyAutoNegoAbility_get
 * Description:
 *      Get ethernet PHY auto-negotiation desired ability
 * Input:
 *      port       -  Port id
 * Output:
 *      pAbility   -  Ability structure
 * Return:
 *      RT_ERR_OK                        
 *      RT_ERR_FAILED                  
 *      RT_ERR_SMI       
 *      RT_ERR_PORT_ID
 *      RT_ERR_PHY_REG_ID
 *      RT_ERR_NULL_POINTER
 *      RT_ERR_PHY_AUTO_NEGO_MODE
 *      RT_ERR_BUSYWAIT_TIMEOUT
 *     
 * Note:
 *      (1) RTL8306E switch only has 5 phy, so the input port id should be 0~4.
 *      (2) In auto-negotiation mode, phy autoNegotiation ability must be enabled
 */  
extern rtk_api_ret_t rtk_port_phyAutoNegoAbility_get(rtk_port_t port, rtk_port_phy_ability_t *pAbility);

/* Function Name:
 *     rtk_port_phyForceModeAbility_set
 * Description:
 *      Set the port PHY force mode, config its speed/duplex mode/pause/asy_pause 
 * Input:
 *      port       -  Port id
 *      pAbility   -  Ability structure
 * Output:
 *      none
 * Return:
 *      RT_ERR_OK                        
 *      RT_ERR_FAILED                  
 *      RT_ERR_SMI       
 *      RT_ERR_PORT_ID
 *      RT_ERR_PHY_REG_ID
 *      RT_ERR_NULL_POINTER
 *      RT_ERR_PHY_FORCE_1000
 *      RT_ERR_BUSYWAIT_TIMEOUT
 *     
 * Note:
 *      (1) RTL8306E switch only has 5 phy, so the input port id should be 0~4.
 *      (2) In force mode,  phy autoNegotiation ability must be disabled.
 */
extern rtk_api_ret_t rtk_port_phyForceModeAbility_set(rtk_port_t port, rtk_port_phy_ability_t *pAbility);

/* Function Name:
 *      rtk_port_phyForceModeAbility_get
 * Description:
 *      Get the port PHY speed/duplex mode/pause/asy_pause in force mode
 * Input:
 *      port       -  Port id
 * Output:
 *      pAbility   -  Ability structure
 * Return:
 *      RT_ERR_OK                        
 *      RT_ERR_FAILED                  
 *      RT_ERR_SMI       
 *      RT_ERR_PORT_ID
 *      RT_ERR_PHY_REG_ID
 *      RT_ERR_NULL_POINTER
 *      RT_ERR_BUSYWAIT_TIMEOUT
 *     
 * Note:
 *      (1) RTL8306E switch only has 5 phy, so the input port id should be 0~4.
 *      (2) In force mode, phy autoNegotiation ability must be disabled.
 */
extern rtk_api_ret_t rtk_port_phyForceModeAbility_get(rtk_port_t port, rtk_port_phy_ability_t *pAbility);

/* Function Name:
 *      rtk_port_phyStatus_get
 * Description:
 *      Get ethernet PHY linking status
 * Input:
 *      port             -  Port id
 * Output:
 *      pLinkStatus   -  the pointer of PHY link status 
 *      pSpeed         -  the pointer of PHY link speed
 *      pDuplex        -  the pointer of PHY duplex 
 * Return:
 *      RT_ERR_OK                        
 *      RT_ERR_FAILED                  
 *      RT_ERR_SMI       
 *      RT_ERR_PORT_ID
 *      RT_ERR_NULL_POINTER
 *     
 * Note:
 *      RTL8306E switch only has 5 phy, so the input port id should be 0~4.
 */
extern rtk_api_ret_t rtk_port_phyStatus_get(rtk_port_t port, rtk_port_linkStatus_t *pLinkStatus, rtk_port_speed_t *pSpeed, rtk_port_duplex_t *pDuplex);

/* Function Name:
 *      rtk_port_macForceLinkExt0_set
 * Description:
 *      Set external interface 0(MAC 5) force linking configuration.
 * Input:
 *      mode - external interface mode
 *      pPortability - port ability configuration
 * Output:
 *      None 
 * Return:
 *      RT_ERR_OK              - Success
 *      RT_ERR_FAILED          - Failure
 *      RT_ERR_INPUT       - Invalid input parameters.
 * Note:
 *      (1) This API can set external interface 0(MAC 5) force mode properties,
 *      including link status,speed,duplex,and tx pause and tx pause ability.
 *      In force mode, autoNegotiation ability must be disabled.
 *      (2) For 8306E, the external interface 0(MAC 5) operating mode can be
 *      MAC Mode (T)MII, PHY Mode (T)MII and RMII. The operating mode is 
 *      determined by strapping pin upon reset, and can not be configured 
 *      by software, except the selection of MII or TMII. 
 *      (3)The input parament mode here is only used to select MII or TMII.
 *      When operating mode is configured as MAC Mode (T)MII or PHY Mode (T)MII
 *      via strapping pin, then the selection of MII or TMII can be done via software.
 *      For example, set mode MODE_EXT_TMII_MAC to select TMII, and set mode
 *      MODE_EXT_MII_MAC to select MII.
 */
extern rtk_api_ret_t rtk_port_macForceLinkExt0_set(rtk_mode_ext_t mode, rtk_port_mac_ability_t *pPortability);

/* Function Name:
 *      rtk_port_macForceLinkExt0_get
 * Description:
 *      Get external interface 0(MAC 5) force linking configuration.
 * Input:
 *      None
 * Output:
 *      pMode - external interface mode
 *      pPortability - port ability configuration
 * Return:
 *      RT_ERR_OK              - Success
 *      RT_ERR_FAILED          - Failure 
 *      RT_ERR_INPUT - Invalid input parameters.
 * Note:
 *      This API can get external interface 0 (MAC 5) force mode properties.
 *      The external interface 0 operating mode can be:
 *      - MODE_EXT_MII_MAC,
 *      - MODE_EXT_MII_PHY, 
 *      - MODE_EXT_TMII_MAC,
 *      - MODE_EXT_TMII_PHY, 
 *      - MODE_EXT_RMII, 
 */
extern rtk_api_ret_t rtk_port_macForceLinkExt0_get(rtk_mode_ext_t *pMode, rtk_port_mac_ability_t *pPortability);

/* Function Name:
 *      rtk_port_isolation_set
 * Description:
 *      Set permitted port isolation portmask
 * Input:
 *      port                - port id, 0 ~ 5 
 *      portmask         - Permit port mask
 * Output:
 *      none
 * Return:
 *      RT_ERR_OK             -   Success
 *      RT_ERR_PORT_ID     -   Invalid port number
 *      RT_ERR_PORT_MASK -   Invalid portmask
 *      RT_ERR_FAILED        -   Failure
 * Note:
 *      This API set the port mask that a port can trasmit packet to of each port.
 *      A port can only transmit packet to ports included in permitted portmask  
 */
extern rtk_api_ret_t rtk_port_isolation_set(rtk_port_t port, rtk_portmask_t portmask);

/* Function Name:
 *      rtk_port_isolation_get
 * Description:
 *      Get permitted port isolation portmask
 * Input:
 *      port                - port id, 0 ~ 5 
 * Output:
 *      pPortmask       - the pointer of permit port mask
 * Return:
 *      RT_ERR_OK                  -   Success
 *      RT_ERR_PORT_ID          -   Invalid port number
 *      RT_ERR_NULL_POINTER  -   Input parameter is null pointer
 *      RT_ERR_FAILED             -   Failure
 * Note:
 *      This API get the port mask that a port can trasmit packet to of each port.
 *      A port can only transmit packet to ports included in permitted portmask  
 */
 
extern rtk_api_ret_t rtk_port_isolation_get(rtk_port_t port, rtk_portmask_t *pPortmask);

/* Function Name:
 *      rtk_stat_port_reset
 * Description:
 *      Reset per port MIB counter by port.
 * Input:
 *      port - port id.
 * Output:
 *      None
 * Return:
 *      RT_ERR_OK              - set shared meter successfully
 *      RT_ERR_FAILED          - FAILED to iset shared meter
 * Note:
 */
extern rtk_api_ret_t rtk_stat_port_reset(rtk_port_t port);


/* Function Name:
 *      rtk_rate_igrBandwidthCtrlRate_set
 * Description:
 *      Set port ingress bandwidth control
 * Input:
 *      port            -  Port id
 *      rate            -  Rate of share meter
 *      ifg_include   -  Rate's calculation including IFG, ENABLE:include DISABLE:exclude
 * Output:
 *      none
 * Return:
 *      RT_ERR_OK              -  Success
 *      RT_ERR_PORT_ID      -  Invalid port number
 *      RT_ERR_FAILED        -  Failure
 *      RT_ERR_ENABLE       -  Invalid IFG parameter
 *      RT_ERR_INBW_RATE -  Invalid ingress rate parameter
 * Note:
 *      The rate unit is 64Kbps and the range is from 64Kbps to 100Mbps. The granularity of rate is 64Kbps. 
 *      The ifg_include parameter is used for rate calculation with/without inter-frame-gap and preamble. 
 */ 
extern rtk_api_ret_t rtk_rate_igrBandwidthCtrlRate_set( rtk_port_t port, rtk_rate_t rate,  rtk_enable_t ifg_include);

/* Function Name:
 *      rtk_rate_igrBandwidthCtrlRate_get
 * Description:
 *      Get port ingress bandwidth control
 * Input:
 *      port             -  Port id
 * Output:
 *      pRate           -  the pointer of rate of share meter
 *      pIfg_include   -  Rate's calculation including IFG, ENABLE:include DISABLE:exclude
 * Return:
 *      RT_ERR_OK                      -  Success
 *      RT_ERR_PORT_ID              -  Invalid port number
 *      RT_ERR_FAILED                -  Failure
 *      RT_ERR_ENABLE               -  Invalid IFG parameter
 *      RT_ERR_NULL_POINTER      -  null pointer
 * Note:
 *      The rate unit is 64Kbps and the range is from 64Kbps to 100Mbps. The granularity of rate is 64Kbps. 
 *      The ifg_include parameter is used for rate calculation with/without inter-frame-gap and preamble. 
 */
extern rtk_api_ret_t rtk_rate_igrBandwidthCtrlRate_get(rtk_port_t port, rtk_rate_t *pRate, rtk_enable_t *pIfg_include);

/* Function Name:
 *      rtk_rate_egrBandwidthCtrlRate_set
 * Description:
 *      Set port egress bandwidth control
 * Input:
 *      port            -  Port id
 *      rate            -  Rate of bandwidth control
 *      ifg_include   -  Rate's calculation including IFG, ENABLE:include DISABLE:exclude
 * Output:
 *      none
 * Return:
 *      RT_ERR_OK                   -  Success
 *      RT_ERR_PORT_ID           -  Invalid port number
 *      RT_ERR_FAILED             -  Failure
 *      RT_ERR_ENABLE             -  Invalid IFG parameter
 *      RT_ERR_QOS_EBW_RATE -  Invalid egress rate parameter
 * Note:
 *      The rate unit is 64Kbps and the range is from 64Kbps to 100Mbps. The granularity of rate is 64Kbps. 
 *      The ifg_include parameter is used for rate calculation with/without inter-frame-gap and preamble. 
 */
extern rtk_api_ret_t rtk_rate_egrBandwidthCtrlRate_set(rtk_port_t port, rtk_rate_t rate,  rtk_enable_t ifg_include);

/* Function Name:
 *      rtk_rate_igrBandwidthCtrlRate_get
 * Description:
 *      Get port ingress bandwidth control
 * Input:
 *      port             -  Port id
 * Output:
 *      pRate           -  the pointer of rate of bandwidth control
 *      pIfg_include   -  Rate's calculation including IFG, ENABLE:include DISABLE:exclude
 * Return:
 *      RT_ERR_OK                     -  Success
 *      RT_ERR_PORT_ID             -  Invalid port number
 *      RT_ERR_FAILED                -  Failure
 *      RT_ERR_NULL_POINTER      -  null pointer
 * Note:
 *      The rate unit is 64Kbps and the range is from 64Kbps to 100Mbps. The granularity of rate is 64Kbps. 
 *      The ifg_include parameter is used for rate calculation with/without inter-frame-gap and preamble. 
 */
extern rtk_api_ret_t rtk_rate_egrBandwidthCtrlRate_get(rtk_port_t port, rtk_rate_t *pRate, rtk_enable_t *pIfg_include);

/* QoS */

/* Function Name:
 *      rtk_qos_init
 * Description:
 *      Configure Qos default settings with queue number assigment to each port
 * Input:
 *      queueNum     -  Queue number of each port
 * Output:
 *      none
 * Return:
 *      RT_ERR_OK                     -  Success
 *      RT_ERR_FAILED                -  Failure
 *      RT_ERR_QUEUE_NUM         -  Error queue number
 * Note:
 *    This API will initialize related Qos setting with queue number assigment.
 *    The queue number is from 1 to 4.
 */ 
extern rtk_api_ret_t rtk_qos_init(rtk_queue_num_t queueNum);

/* Function Name:
 *      rtk_qos_1pPriRemap_set
 * Description:
 *      Configure 1Q priorities mapping to internal absolute priority
 * Input:
 *      dot1p_pri   -  802.1p priority value
 *      int_pri       -  internal priority value
 * Output:
 *      none
 * Return:
 *      RT_ERR_OK                         -  Success
 *      RT_ERR_FAILED                    -  Failure
 *      RT_ERR_VLAN_PRIORITY        -  Invalid 1p priority
 *      RT_ERR_QOS_INT_PRIORITY   -  Invalid priority
 * Note:
 *      Priority of 802.1Q assignment for internal asic priority, and it is used for queue usage 
 *      and packet scheduling.
 */ 
extern rtk_api_ret_t rtk_qos_1pPriRemap_set(rtk_pri_t dot1p_pri, rtk_pri_t int_pri);

/* Function Name:
 *      rtk_qos_priSel_set
 * Description:
 *      Configure the priority order among different priority mechanisms.
 * Input:
 *      pPriDec - priority level for port, dscp, 802.1Q, ACL and VID based priority decision.
 * Output:
 *      None
 * Return:
 *      RT_ERR_OK              - success
 *      RT_ERR_NULL_POINTER  -   Input parameter is null pointer
 *      RT_ERR_FAILED          - failure 
 *      RT_ERR_QOS_SEL_PRI_SOURCE - Invalid priority decision source parameter.
 * Note: 
 *      (1)For 8306E, there are 5 types of priority mechanisms that could be set arbitration level, which are 
 *      ACL-based  priority, DSCP-based priority, 1Q-based priority, Port-based priority, VID-based priority.
 *      Each one could be set level from 1 to 5.
 *      (2)ASIC will follow user's arbitration level setting of priority mechanisms to select internal priority for receiving frame. 
 *      If two priority mechanisms are the same level, the ASIC will chose the priority mechanism with highest level to 
 *      assign internal priority to receiving frame.
 */
extern rtk_api_ret_t rtk_qos_priSel_set(rtk_priority_select_t *pPriDec);

/* Function Name:
 *      rtk_qos_priSel_get
 * Description:
 *      Get the priority order configuration among different priority mechanism.
 * Input:
 *      None
 * Output:
 *      pPriDec - priority level for port, dscp, 802.1Q, ACL and VID based priority decision.
 * Return:
 *      RT_ERR_OK              - success
 *      RT_ERR_NULL_POINTER  -   Input parameter is null pointer
 *      RT_ERR_FAILED          - failure 
 * Note:
 *      (1)For 8306E, there are 5 types of priority mechanisms that could be set arbitration level, which are 
 *      ACL-based  priority, DSCP-based priority, 1Q-based priority,Port-based priority, VID-based priority.
 *      Each one could be set level from 1 to 5.
 *      (2)ASIC will follow user's arbitration level setting of priority mechanisms to select internal priority for receiving frame. 
 *      If two priority mechanisms are the same level, the ASIC will chose the priority mechanism with the highest level to 
 *      assign internal priority to receiving frame.
 */
extern rtk_api_ret_t rtk_qos_priSel_get(rtk_priority_select_t *pPriDec);

/* Function Name:
 *      rtk_qos_1pPriRemap_get
 * Description:
 *      Get 1Q priorities mapping to internal absolute priority
 * Input:
 *      dot1p_pri    -  802.1p priority value
 * Output:
 *      pInt_pri      -  the pointer of internal priority value
 * Return:
 *      RT_ERR_OK                         -  Success
 *      RT_ERR_FAILED                    -  Failure
 *      RT_ERR_VLAN_PRIORITY        -  Invalid 1p priority
 *      RT_ERR_NULL_POINTER         -   null pointer
 * Note:
 *      Priority of 802.1Q assignment for internal asic priority, and it is used for queue usage 
 *      and packet scheduling.
 */
extern rtk_api_ret_t rtk_qos_1pPriRemap_get(rtk_pri_t dot1p_pri, rtk_pri_t *pInt_pri);

/* Function Name:
 *      rtk_qos_dscpPriRemap_set
 * Description:
 *      Set DSCP-based priority
 * Input:
 *      code      -  dscp code
 *      int_pri    -  internal priority value
 * Output:
 *      none
 * Return:
 *      RT_ERR_OK                         -  Success
 *      RT_ERR_FAILED                    -  Failure
 *      RT_ERR_QOS_INT_PRIORITY   -  invalid internal priority
 *      RT_ERR_QOS_DSCP_VALUE    -   invalid DSCP value  
 * Note:
 *      switch support 16 kinds of dscp code:
 *          RTL8306_DSCP_EF          
 *                 - DSCP for the Expedited forwarding PHB, 101110   
 *          RTL8306_DSCP_AFL1         
 *                 - DSCP for AF PHB Class 1 low drop, 001010
 *          RTL8306_DSCP_AFM1     
 *                 - DSCP for AF PHB Class 1 medium drop, 001100
 *          RTL8306_DSCP_AFH1      
 *                 - DSCP for AF PHB Class 1 high drop, 001110
 *          RTL8306_DSCP_AFL2       
 *                 - DSCP for AF PHB Class 2 low drop, 01001
 *          RTL8306_DSCP_AFM2       
 *                 - DSCP for AF PHB Class 2 medium drop, 010100
 *          RTL8306_DSCP_AFH2   
 *                 - DSCP for AF PHB Class 2 high drop, 010110
 *          RTL8306_DSCP_AFL3    
 *                 - DSCP for AF PHB Class 3 low drop, 011010
 *          RTL8306_DSCP_AFM3      
 *                 - DSCP for AF PHB Class 3 medium drop, 011100
 *          RTL8306_DSCP_AFH3    
 *                 - DSCP for AF PHB Class 3 high drop, 0111
 *          RTL8306_DSCP_AFL4     
 *                 - DSCP for AF PHB Class 4 low drop, 100010
 *          RTL8306_DSCP_AFM4    
 *                 - DSCP for AF PHB Class 4 medium drop, 100100
 *          RTL8306_DSCP_AFH4     
 *                 - DSCP for AF PHB Class 4 high drop, 100110
 *          RTL8306_DSCP_NC        
 *                 - DSCP for network control, 110000 or 111000
 *          RTL8306_DSCP_REG_PRI 
 *                 - DSCP Register match priority, user could define two dscp code
 *          RTL8306_DSCP_BF        
 *                 - DSCP Default PHB
 *
 *     The Differentiated Service Code Point is a selector for router's per-hop behaviors. As a selector, there is no implication that a numerically 
 *     greater DSCP implies a better network service. As can be seen, the DSCP totally overlaps the old precedence field of TOS. So if values of 
 *     DSCP are carefully chosen then backward compatibility can be achieved.         
 */ 
extern rtk_api_ret_t rtk_qos_dscpPriRemap_set(rtk_dscp_t dscp, rtk_pri_t int_pri);

/* Function Name:
 *      rtk_qos_dscpPriRemap_get
 * Description:
 *      Get DSCP-based priority
 * Input:
 *      dscp      -  dscp code
 * Output:
 *      pInt_pri  -  the pointer of internal priority value
 * Return:
 *      RT_ERR_OK                           -  Success
 *      RT_ERR_FAILED                     -  Failure
 *      RT_ERR_QOS_DSCP_VALUE      -  Invalid DSCP value
 *      RT_ERR_NULL_POINTER           -  Input parameter is null pointer
 * Note:
 *      switch support 16 kinds of dscp code:
 *          RTL8306_DSCP_EF          
 *                 - DSCP for the Expedited forwarding PHB, 101110   
 *          RTL8306_DSCP_AFL1         
 *                 - DSCP for AF PHB Class 1 low drop, 001010
 *          RTL8306_DSCP_AFM1     
 *                 - DSCP for AF PHB Class 1 medium drop, 001100
 *          RTL8306_DSCP_AFH1      
 *                 - DSCP for AF PHB Class 1 high drop, 001110
 *          RTL8306_DSCP_AFL2       
 *                 - DSCP for AF PHB Class 2 low drop, 01001
 *          RTL8306_DSCP_AFM2       
 *                 - DSCP for AF PHB Class 2 medium drop, 010100
 *          RTL8306_DSCP_AFH2   
 *                 - DSCP for AF PHB Class 2 high drop, 010110
 *          RTL8306_DSCP_AFL3    
 *                 - DSCP for AF PHB Class 3 low drop, 011010
 *          RTL8306_DSCP_AFM3      
 *                 - DSCP for AF PHB Class 3 medium drop, 011100
 *          RTL8306_DSCP_AFH3    
 *                 - DSCP for AF PHB Class 3 high drop, 0111
 *          RTL8306_DSCP_AFL4     
 *                 - DSCP for AF PHB Class 4 low drop, 100010
 *          RTL8306_DSCP_AFM4    
 *                 - DSCP for AF PHB Class 4 medium drop, 100100
 *          RTL8306_DSCP_AFH4     
 *                 - DSCP for AF PHB Class 4 high drop, 100110
 *          RTL8306_DSCP_NC        
 *                 - DSCP for network control, 110000 or 111000
 *          RTL8306_DSCP_REG_PRI 
 *                 - DSCP Register match priority, user could define two dscp code
 *          RTL8306_DSCP_BF        
 *                 - DSCP Default PHB
 *     The Differentiated Service Code Point is a selector for router's per-hop behaviors. As a selector, there is no implication that a numerically 
 *     greater DSCP implies a better network service. As can be seen, the DSCP totally overlaps the old precedence field of TOS. So if values of 
 *     DSCP are carefully chosen then backward compatibility can be achieved.         
 */ 
extern rtk_api_ret_t rtk_qos_dscpPriRemap_get(rtk_dscp_t dscp, rtk_pri_t *pInt_pri);

/* Function Name:
 *      rtk_qos_portPri_set
 * Description:
 *      Configure priority usage to each port
 * Input:
 *      port                - Port id.                
 *      int_pri             -  internal priority value
 * Output:
 *      none
 * Return:
 *      RT_ERR_OK                        -  Success
 *      RT_ERR_FAILED                  -   Failure
 *      RT_ERR_PORT_ID                -   Error port id
 *      RT_ERR_QOS_INT_PRIORITY  -   Error internal priority value
 * Note:
 *     The API can set priority of port assignments for queue usage and packet scheduling.
 */
 
extern rtk_api_ret_t rtk_qos_portPri_set(rtk_port_t port, rtk_pri_t int_pri) ;

/* Function Name:
 *      rtk_qos_portPri_get
 * Description:
 *      Get priority usage to each port
 * Input:
 *      port                  - Port id.                
 * Output:
 *      pInt_pri             -  the pointer of internal priority value
 * Return:
 *      RT_ERR_OK                        -  Success
 *      RT_ERR_FAILED                  -   Failure
 *      RT_ERR_PORT_ID                -   Error port id
 *      RT_ERR_NULL_POINTER        -   null pointer
 * Note:
 *      The API can get priority of port assignments for queue usage and packet scheduling.
 */
 
extern rtk_api_ret_t rtk_qos_portPri_get(rtk_port_t port, rtk_pri_t *pInt_pri) ;

/* Function Name:
 *      rtk_qos_priMap_set
 * Description:
 *      Set internal priority mapping to queue ID for different queue number
 * Input:
 *      queue_num       - Queue number usage
 *      pPri2qid            - Priority mapping to queue ID               
 * Output:
 *      none
 * Return:
 *      RT_ERR_OK                        -  Success
 *      RT_ERR_FAILED                  -   Failure
 *      RT_ERR_QUEUE_ID              -   Error queue id
 *      RT_ERR_NULL_POINTER        -   null pointer
 * Note:
 *      ASIC supports priority mapping to queue with different queue number from 1 to 4.
 *      For different queue numbers usage, ASIC supports different internal available queue IDs.
 */

extern rtk_api_ret_t rtk_qos_priMap_set(rtk_queue_num_t queue_num, rtk_qos_pri2queue_t *pPri2qid);

/* Function Name:
 *      rtk_qos_priMap_get
 * Description:
 *      Get priority to queue ID mapping table parameters
 * Input:
 *      queue_num       - Queue number usage
 *      pPri2qid            - Priority mapping to queue ID               
 * Output:
 *      none
 * Return:
 *      RT_ERR_OK                        -  Success
 *      RT_ERR_FAILED                  -   Failure
 *      RT_ERR_QUEUE_ID              -   Error queue id
 *      RT_ERR_NULL_POINTER        -   null pointer
 * Note:
 *      ASIC supports priority mapping to queue with different queue number from 1 to 4.
 *      For different queue numbers usage, ASIC supports different internal available queue IDs.
 */
 
extern rtk_api_ret_t rtk_qos_priMap_get(rtk_queue_num_t queue_num, rtk_qos_pri2queue_t *pPri2qid);

/* Function Name:
 *      rtk_qos_1pRemarkEnable_set
 * Description:
 *      Set 802.1P remarking ability
 * Input:
 *      port       -  port number (0~5)
 *      enabled  -  TRUE or FALSE
 * Output:
 *      none
 * Return:
 *      RT_ERR_OK              -  Success
 *      RT_ERR_FAILED        -   Failure
 *      RT_ERR_PORT_ID      -   Invalid port id
 * Note:
 *      
 */
extern rtk_api_ret_t rtk_qos_1pRemarkEnable_set(rtk_port_t port, rtk_enable_t enable); 

/* Function Name:
 *      rtk_qos_1pRemarkEnable_get
 * Description:
 *      Get 802.1P remarking ability
 * Input:
 *      port        -  port number (0~5)
 * Output:
 *      pEnabled  -  pointer of the ability status
 * Return:
 *      RT_ERR_OK                     -  Success
 *      RT_ERR_FAILED               -   Failure
 *      RT_ERR_PORT_ID             -   Invalid port id
 *      RT_ERR_NULL_POINTER     -   Input parameter is null pointer
 * Note:
 *      
 */
extern rtk_api_ret_t rtk_qos_1pRemarkEnable_get(rtk_port_t port, rtk_enable_t *pEnable);

/* Function Name:
 *      rtk_qos_1pRemark_set
 * Description:
 *      Set 802.1P remarking priority
 * Input:
 *      int_pri        -  Packet priority(0~4)
 *      dot1p_pri    -  802.1P priority(0~7)
 * Output:
 *      none
 * Return:
 *      RT_ERR_OK                           - Success
 *      RT_ERR_FAILED                      - Failure
 *      RT_ERR_VLAN_PRIORITY          - Invalid 1p priority
 *      RT_ERR_QOS_INT_PRIORITY     - Invalid internal priority 
 * Note:
 *      switch determines packet priority, the priority souce could
 *      be port-based, 1Q-based, dscp-based, vid-based, ip address,
 *      cpu tag.
 */ 
extern rtk_api_ret_t rtk_qos_1pRemark_set(rtk_pri_t int_pri, rtk_pri_t dot1p_pri);

/* Function Name:
 *      rtk_qos_1pRemark_get
 * Description:
 *      Get 802.1P remarking priority
 * Input:
 *      int_pri        -  Packet priority(0~4)
 * Output:
 *      pDot1p_pri  -  the pointer of 802.1P priority(0~7)
 * Return:
 *      RT_ERR_OK                           -  Success
 *      RT_ERR_FAILED                      -  Failure
 *      RT_ERR_NULL_POINTER            -  Input parameter is null pointer
 *      RT_ERR_QOS_INT_PRIORITY     -  Invalid internal priority 
 * Note:
 *      switch determines packet priority, the priority souce could
 *      be port-based, 1Q-based, dscp-based, vid-based, ip address,
 *      cpu tag.
 */
extern rtk_api_ret_t rtk_qos_1pRemark_get(rtk_pri_t int_pri, rtk_pri_t *pDot1p_pri);

/* Trap & Reserved Multicast Address (More Action like leaky, bypass storm not define) */

/* Function Name:
 *      rtk_trap_unknownMcastPktAction_set
 * Description:
 *      Set behavior of unknown multicast
 * Input:
 *      port                -   port id
 *      type               -   unknown multicast packet type
 *      mcast_action    -  unknown multicast action
 * Output:
 *      none
 * Return:
 *      RT_ERR_OK                      -  Success
 *      RT_ERR_FAILED                -  Failure
 *      RT_ERR_PORT_ID              -  Invalid port id    
 *      RT_ERR_INPUT                 -  Invalid input parameter 
 * Note:
 *      When receives an unknown multicast packet, switch may trap, drop this packet
 *      The unknown multicast packet type is as following:
 *               - MCAST_IPV4
 *               - MCAST_IPV6
 *      The unknown multicast action is as following:
 *               - MCAST_ACTION_FORWARD
 *               - MCAST_ACTION_DROP
 */
extern rtk_api_ret_t rtk_trap_unknownMcastPktAction_set(rtk_port_t port, rtk_mcast_type_t type, rtk_trap_mcast_action_t mcast_action);

/* Function Name:
 *      rtk_trap_unknownMcastPktAction_get
 * Description:
 *      Get behavior of unknown multicast
 * Input:
 *      port                  -   port id
 *      type                 -   unknown multicast packet type
 * Output:
 *      pMcast_action    -   the pointer of unknown multicast action
 * Return:
 *      RT_ERR_OK                      -  Success
 *      RT_ERR_FAILED                -  Failure
 *      RT_ERR_PORT_ID              -  Invalid port id    
 *      RT_ERR_NULL_POINTER      -  Input parameter is null pointer
 * Note:
 *      When receives an unknown multicast packet, switch may trap, drop this packet.
 *      The unknown multicast packet type is as following:
 *               - MCAST_IPV4
 *               - MCAST_IPV6
 *      The unknown multicast action is as following:
 *               - MCAST_ACTION_FORWARD
 *               - MCAST_ACTION_DROP
 */
extern rtk_api_ret_t rtk_trap_unknownMcastPktAction_get(rtk_port_t port, rtk_mcast_type_t type, rtk_trap_mcast_action_t *pMcast_action);

/* Function Name:
 *      rtk_trap_igmpCtrlPktAction_set
 * Description:
 *      Set IGMP/MLD trap function
 * Input:
 *      type                -   IGMP/MLD packet type
 *      igmp_action      -   IGMP/MLD action
 * Output:
 *      none
 * Return:
 *      RT_ERR_OK                      -  Success
 *      RT_ERR_FAILED                -  Failure
 *      RT_ERR_INPUT                 -  Invalid input parameter
 *      RT_ERR_NOT_ALLOWED     -  Actions not allowed by the function
 * Note:
 *      This API can set both IPv4 IGMP/IPv6 MLD with/without PPPoE header trapping function.
 *      All 4 kinds of IGMP/MLD function can be set separately.
 *      The IGMP/MLD packet type is as following:
 *          - IGMP_IPV4
 *          - IGMP_MLD
 *          - IGMP_PPPOE_IPV4
 *          - IGMP_PPPOE_MLD
 *      The IGMP/MLD action is as following:
 *          - IGMP_ACTION_FORWARD
 *          - IGMP_ACTION_TRAP2CPU
 */  
extern rtk_api_ret_t rtk_trap_igmpCtrlPktAction_set(rtk_igmp_type_t type, rtk_trap_igmp_action_t igmp_action);

/* Function Name:
 *      rtk_trap_igmpCtrlPktAction_get
 * Description:
 *      Get IGMP/MLD trap function
 * Input:
 *      type                -   IGMP/MLD packet type
 * Output:
 *      pIgmp_action    -   the pointer of IGMP/MLD action
 * Return:
 *      RT_ERR_OK                      -  Success
 *      RT_ERR_FAILED                -  Failure
 *      RT_ERR_INPUT                 -  Invalid input parameter
 *      RT_ERR_NULL_POINTER      -  Input parameter is null pointer
 * Note:
 *      This API can get both IPv4 IGMP/IPv6 MLD with/without PPPoE header trapping function.
 *      All 4 kinds of IGMP/MLD function can be set separately.
 *      The IGMP/MLD packet type is as following:
 *          - IGMP_IPV4
 *          - IGMP_MLD
 *          - IGMP_PPPOE_IPV4
 *          - IGMP_PPPOE_MLD
 *      The IGMP/MLD action is as following:
 *          - IGMP_ACTION_FORWARD
 *          - IGMP_ACTION_TRAP2CPU
 */
extern rtk_api_ret_t rtk_trap_igmpCtrlPktAction_get(rtk_igmp_type_t type, rtk_trap_igmp_action_t *pIgmp_action);


/* CVLAN */

/* Function Name:
 *      rtk_vlan_init
 * Description:
 *      Initialize VLAN
 * Input:
 *      none
 * Output:
 *      none
 * Return:
 *      RT_ERR_OK                     -  Success
 *      RT_ERR_FAILED                -  Failure
 * Note:
 *      VLAN is disabled by default. User has to call this API to enable VLAN before
 *      using it. And It will set a default VLAN(vid 1) including all ports and set 
 *      all ports PVID to the default VLAN.
 */
extern rtk_api_ret_t rtk_vlan_init(void);

/* Function Name:
 *      rtk_vlan_set
 * Description:
 *      Set a VLAN entry
 * Input:
 *      vid              - VLAN ID to configure, should be 1~4094
 *      mbrmsk        - VLAN member set portmask
 *      untagmsk     - VLAN untag set portmask
 *      fid              -  filtering database id, could be any value for RTL8306E
 * Output:
 *      none
 * Return:
 *      RT_ERR_OK                     -  Success
 *      RT_ERR_FAILED                -  Failure
 *      RT_ERR_VLAN_VID            -  Invalid vid
 *      RT_ERR_INPUT                 -  Invalid input parameter 
 *      RT_ERR_TBL_FULL            -  Input table full 
 * Note:
 *     There are 16 VLAN entry supported. User could configure the member set and untag set
 *     for specified vid through this API. The portmask's bit N means port N.
 *     For example, mbrmask 23=0x17=010111 means port 0,1,2,4 in the member set.
 *     FID is for SVL/IVL usage, and the range is 0~4095, rtl8306E only supports SVL, 
 *     so fid is no useage.
 */
extern rtk_api_ret_t rtk_vlan_set(rtk_vlan_t vid, rtk_portmask_t mbrmsk, rtk_portmask_t untagmsk, rtk_fid_t fid);

/* Function Name:
 *      rtk_vlan_get
 * Description:
 *      Get a VLAN entry
 * Input:
 *      vid             - VLAN ID to configure
 * Output:
 *      pMbrmsk     - VLAN member set portmask
 *      pUntagmsk  - VLAN untag set portmask
 *      pFid           -  filtering database id
 * Return:
 *      RT_ERR_OK                                   -  Success
 *      RT_ERR_FAILED                              -  Failure
 *      RT_ERR_VLAN_VID                          -  Invalid vid
 *      RT_ERR_NULL_POINTER                    -  Input parameter is null pointer
 *      RT_ERR_VLAN_ENTRY_NOT_FOUND    -   Specified vlan entry not found
 * Note:
 *     There are 16 VLAN entry supported. User could configure the member set and untag set
 *     for specified vid through this API. The portmask's bit N means port N.
 *     For example, mbrmask 23=0x17=010111 means port 0,1,2,4 in the member set.
 *     FID is for SVL/IVL usage, and the range is 0~4095, rtl8306E only supports SVL, 
 *     so fid is no useage.
 */
extern rtk_api_ret_t rtk_vlan_get(rtk_vlan_t vid, rtk_portmask_t *pMbrmsk, rtk_portmask_t *pUntagmsk, rtk_fid_t *pFid);

/* Function Name:
 *      rtk_vlan_destroy
 * Description:
 *      delete vid from vlan table
 * Input:
 *      vid             - VLAN ID to configure
 * Output:
 *      none
 * Return:
 *      RT_ERR_OK                                   -  Success
 *      RT_ERR_FAILED                              -  Failure
 *      RT_ERR_VLAN_VID                          -  Invalid vid
 *      RT_ERR_VLAN_ENTRY_NOT_FOUND    -  Specified vlan entry not found
 * Note:
 * 
 */ 
extern rtk_api_ret_t rtk_vlan_destroy(rtk_vlan_t vid);

/* Function Name:
 *      rtk_vlan_portPvid_set
 * Description:
 *      Set port to specified VLAN ID(PVID)
 * Input:
 *      port             - Port id
 *      pvid             - Specified VLAN ID
 *      priority         - 802.1p priority for the PVID, 0~3 for RTL8306E 
 * Output:
 *      none
 * Return:
 *      RT_ERR_OK                                   -  Success
 *      RT_ERR_FAILED                              -  Failure
 *      RT_ERR_VLAN_VID                          -  Invalid vid
 *      RT_ERR_VLAN_PRIORITY                  -  Invalid 1p priority 
 *      RT_ERR_VLAN_ENTRY_NOT_FOUND    -  Specified vlan entry not found
 * Note:
 *      The API is used for Port-based VLAN. The untagged frame received from the
 *      port will be classified to the specified VLAN and assigned to the specified priority.
 */
extern rtk_api_ret_t rtk_vlan_portPvid_set(rtk_port_t port, rtk_vlan_t pvid, rtk_pri_t priority);

/* Function Name:
 *      rtk_vlan_portPvid_get
 * Description:
 *      Get VLAN ID(PVID) on specified port
 * Input:
 *      port             - Port id
 * Output:
 *      pPvid            - Specified VLAN ID
 *      pPriority        - 802.1p priority for the PVID
 * Return:
 *      RT_ERR_OK                                   - Success
 *      RT_ERR_FAILED                             -  Failure
 *      RT_ERR_PORT_ID                           -  Invalid port id
 *      RT_ERR_NULL_POINTER                   -  Input parameter is null pointer
 * Note:
 *    The API is used for Port-based VLAN. The untagged frame received from the
 *    port will be classified to the specified VLAN and assigned to the specified priority.
 */
extern rtk_api_ret_t rtk_vlan_portPvid_get(rtk_port_t port, rtk_vlan_t *pPvid, rtk_pri_t *pPriority);

/* Function Name:
 *      rtk_vlan_portIgrFilterEnable_set
 * Description:
 *      Set VLAN ingress for each port
 * Input:
 *      port             - Port id
 *      igr_filter        - VLAN ingress function enable status
 * Output:
 *      none
 * Return:
 *      RT_ERR_OK                        - Success
 *      RT_ERR_FAILED                  -  Failure
 * Note:
 *      RTL8306E use one ingress filter for whole system, not for each port, so 
 *      any port you set will affect all ports ingress filter setting.
 *      While VLAN function is enabled, ASIC will decide VLAN ID for each received frame 
 *      and get belonged member ports from VLAN table. If received port is not belonged 
 *      to VLAN member ports, ASIC will drop received frame if VLAN ingress function is enabled.
 */
extern rtk_api_ret_t rtk_vlan_portIgrFilterEnable_set(rtk_port_t port, rtk_enable_t igr_filter);

/* Function Name:
 *      rtk_vlan_portIgrFilterEnable_get
 * Description:
 *      get VLAN ingress for each port
 * Input:
 *      port             - Port id
 * Output:
 *      pIgr_filter     - the pointer of VLAN ingress function enable status
 * Return:
 *      RT_ERR_OK                 - Success
 *      RT_ERR_FAILED           -  Failure
 * Note:
 *      RTL8306E use one ingress filter for whole system, not for each port, so 
 *      any port you set will affect all ports ingress filter setting.
 *      While VLAN function is enabled, ASIC will decide VLAN ID for each received frame 
 *      and get belonged member ports from VLAN table. If received port is not belonged 
 *      to VLAN member ports, ASIC will drop received frame if VLAN ingress function is enabled.
 */
extern rtk_api_ret_t rtk_vlan_portIgrFilterEnable_get(rtk_port_t port, rtk_enable_t *pIgr_filter);

/* Function Name:
 *      rtk_vlan_portAcceptFrameType_set
 * Description:
 *      Set VLAN support frame type
 * Input:
 *      port                                 - Port id
 *      accept_frame_type             - accept frame type
 * Output:
 *      none
 * Return:
 *      RT_ERR_OK                  - Success
 *      RT_ERR_FAILED            -  Failure
 *      RT_ERR_PORT_ID          -  Invalid port id
 * Note:
 *      The API is used for checking 802.1Q tagged frames.
 *      The accept frame type as following:
 *          - ACCEPT_FRAME_TYPE_ALL
 *          - ACCEPT_FRAME_TYPE_TAG_ONLY
 *          - ACCEPT_FRAME_TYPE_UNTAG_ONLY
 */
extern rtk_api_ret_t rtk_vlan_portAcceptFrameType_set(rtk_port_t port, rtk_vlan_acceptFrameType_t accept_frame_type);

/* Function Name:
 *      rtk_vlan_portAcceptFrameType_get
 * Description:
 *      Get VLAN support frame type
 * Input:
 *      port                                 - Port id
 *      accept_frame_type             - accept frame type
 * Output:
 *      none
 * Return:
 *      RT_ERR_OK                                   - Success
 *      RT_ERR_FAILED                             -  Failure
 *      RT_ERR_PORT_ID                           -  Invalid port id
 *      RT_ERR_VLAN_ACCEPT_FRAME_TYPE -  Invalid accept frame type 
 * Note:
 *    The API is used for checking 802.1Q tagged frames.
 *    The accept frame type as following:
 *    - ACCEPT_FRAME_TYPE_ALL
 *    - ACCEPT_FRAME_TYPE_TAG_ONLY
 *    - ACCEPT_FRAME_TYPE_UNTAG_ONLY
 */
extern rtk_api_ret_t rtk_vlan_portAcceptFrameType_get(rtk_port_t port, rtk_vlan_acceptFrameType_t *pAccept_frame_type);

/* Function Name:
 *      rtk_vlan_vlanBasedPriority_set
 * Description:
 *      Set VLAN priority for each CVLAN
 * Input:
 *      vid                -Specified VLAN ID
 *      priority           -priority for the VID
 * Output:
 *      none
 * Return:
 *      RT_ERR_OK                                -  Success
 *      RT_ERR_FAILED                          -   Failure
 *      RT_ERR_VLAN_VID                       -  Invalid vid 
 *      RT_ERR_VLAN_PRIORITY               -  Invalid 1p priority
 *      RT_ERR_VLAN_ENTRY_NOT_FOUND -  Specified vlan entry not found
 * Note:
 *      This API is used to set priority per VLAN.
 */ 
extern rtk_api_ret_t rtk_vlan_vlanBasedPriority_set(rtk_vlan_t vid, rtk_pri_t priority);

/* Function Name:
 *      rtk_vlan_vlanBasedPriority_get
 * Description:
 *      Get VLAN priority for each CVLAN
 * Input:
 *      vid                -Specified VLAN ID
 * Output:
 *      pPriority         -the pointer of priority for the VID
 * Return:
 *      RT_ERR_OK                                -  Success
 *      RT_ERR_FAILED                          -   Failure
 *      RT_ERR_VLAN_VID                       -  Invalid vid 
 *      RT_ERR_NULL_POINTER                -   Input parameter is null pointer
 *      RT_ERR_VLAN_ENTRY_NOT_FOUND -   Specified vlan entry not found 
 * Note:
 *      This API is used to set priority per VLAN.
 */ 
extern rtk_api_ret_t rtk_vlan_vlanBasedPriority_get(rtk_vlan_t vid, rtk_pri_t *pPriority);

/* Function Name:
 *      rtk_vlan_vidTranslation_set
 * Description:
 *      Set vid translated to new vid
 * Input:
 *      vid       -  old vid
 *      nvid     -   new vid
 * Output:
 *      none
 * Return:
 *      RT_ERR_OK                                -  Success
 *      RT_ERR_FAILED                          -   Failure
 *      RT_ERR_VLAN_VID                       -  Invalid vid 
 *      RT_ERR_VLAN_ENTRY_NOT_FOUND -   Specified vlan entry not found 
 * Note:
 *      This API is used to translate a vid to a new vid, the new vid could be 
 *      used by Q-in-Q or vlan translation function.
 */
extern rtk_api_ret_t rtk_vlan_vidTranslation_set(rtk_vlan_t vid, rtk_vlan_t nvid);

/* Function Name:
 *      rtk_vlan_vidTranslation_get
 * Description:
 *      Get vid translation new vid
 * Input:
 *      vid        -  old vid
 * Output:
 *      pNvid     -  the pointer of new vid
 * Return:
 *      RT_ERR_OK                                -  Success
 *      RT_ERR_FAILED                          -   Failure
 *      RT_ERR_VLAN_VID                       -  Invalid vid 
 *      RT_ERR_NULL_POINTER                -   NULL pointer
 *      RT_ERR_VLAN_ENTRY_NOT_FOUND -   Specified vlan entry not found 
 * Note:
 *      This API is used to translate a vid to a new vid, the new vid could be 
 *      used by Q-in-Q or vlan translation function.
 */
extern rtk_api_ret_t rtk_vlan_vidTranslation_get(rtk_vlan_t vid, rtk_vlan_t *pNvid);


/* Function Name:
 *      rtk_vlan_vidTranslationEnable_set
 * Description:
 *      Set vlan translation function enabled or disabled 
 * Input:
 *      enable        -  enable or disable
 *      nniMask      -   NNI port mask
 * Output:
 *      pNvid     -  the pointer of new vid
 * Return:
 *      RT_ERR_OK                                -  Success
 *      RT_ERR_FAILED                          -   Failure
 *      RT_ERR_PORT_MASK                   -   Error port mask
 * Note:
 *      VLAN translation only happens between UNI and NNI port, 
 *      in nniMask, 1 means the port is NNI port, 0 means the port
 *      is UNI port
 */
extern rtk_api_ret_t rtk_vlan_vidTranslationEnable_set(rtk_enable_t enable, rtk_portmask_t nniMask);

/* Function Name:
 *      rtk_vlan_vidTranslationEnable_get
 * Description:
 *      Get vlan translation function enabled or disabled 
 * Input:
 * Output:
 *      pEnable      -   the pointer of enable or disable
 *      pNniMask    -   the pointer of NNI port mask
 * Return:
 *      RT_ERR_OK                                -  Success
 *      RT_ERR_FAILED                          -   Failure
 *      RT_ERR_NULL_POINTER                -   NULL pointer
 * Note:
 *      VLAN translation only happens between UNI and NNI port, 
 *      in nniMask, 1 means the port is NNI port, 0 means the port
 *      is UNI port
 */

extern rtk_api_ret_t rtk_vlan_vidTranslationEnable_get(rtk_enable_t *pEnable, rtk_portmask_t *pNniMask);


/* Function Name:
 *      rtk_vlan_tagSrc_set
 * Description:
 *      Set tag vid and priority source for Q-in-Q and VLAN translation
 * Input:
 *      port          -    port id
 *      vidSrc       -    vid source
 *      priSrc        -    priority source
 * Output:
 *      none
 * Return:
 *      RT_ERR_OK                 -  Success
 *      RT_ERR_FAILED            -   Failure
 *      RT_ERR_PORT_ID          -   error port id
 * Note:
 *     Q-in-Q(SVLAN) and VLAN translation will modify tag, 
 *      the API could set outer tag or translated VLAN tag
 *      vid/priority source.
 *      - vidSrc: 
 *                - RTL8306E_VIDSRC_POVID - port-based otag vid,     
 *                - RTL8306E_VIDSRC_NVID   - new vid(translated vid)
 *       - priSrc:
 *                - RTL8306E_PRISRC_PPRI    - port-based otag priority, 
 *                - RTL8306E_PRISRC_1PRMK - 1p remarking priority
 */
extern rtk_api_ret_t rtk_vlan_tagSrc_set(rtk_port_t port, rtk_vidSrc_t vidSrc, rtk_priSrc_t priSrc);

/* Function Name:
 *      rtk_vlan_tagSrc_get
 * Description:
 *      Get tag vid and priority source for Q-in-Q and VLAN translation
 * Input:
 *      port          -    port id
 * Output:
 *      pVidSrc     -    the pointer of vid source
 *      pPriSrc      -    the pointer of priority source
 * Return:
 *      RT_ERR_OK                 -  Success
 *      RT_ERR_FAILED            -   Failure
 *      RT_ERR_PORT_ID          -   error port id
 * Note:
 *      Q-in-Q(SVLAN) and VLAN translation will modify tag, 
 *      the API could set outer tag or tranlated VLAN tag
 *      vid/priority source.
 *      - vidSrc: 
 *                - RTL8306E_VIDSRC_POVID - port-based otag vid,     
 *                - RTL8306E_VIDSRC_NVID   - new vid(translated vid)
 *       - priSrc:
 *                - RTL8306E_PRISRC_PPRI    - port-based otag priority, 
 *                - RTL8306E_PRISRC_1PRMK - 1p remarking priority
 */
extern rtk_api_ret_t rtk_vlan_tagSrc_get(rtk_port_t port, rtk_vidSrc_t *pVidSrc, rtk_priSrc_t *pPriSrc);    



/*Spanning Tree*/

/* Function Name:
 *      rtk_stp_mstpState_set
 * Description:
 *      Configure spanning tree state per port
 * Input:
 *      msti              - Multiple spanning tree instance, no use for RTL8306E
 *      port              - Port id
 *      stp_state       - Spanning tree state
 * Output:
 *      none
 * Return:
 *      RT_ERR_OK                      -  Success
 *      RT_ERR_FAILED                -  Failure
 *      RT_ERR_PORT_ID              -  Invalid port id
 *      RT_ERR_MSTP_STATE        -  Invalid spanning tree status
 * Note:
 *      Because RTL8306E does not support multiple spanning tree, so msti is no use. 
 *      There are four states supported by ASIC.
 *          - STP_STATE_DISABLED
 *          - STP_STATE_BLOCKING
 *          - STP_STATE_LEARNING
 *          - STP_STATE_FORWARDING
 */
extern rtk_api_ret_t rtk_stp_mstpState_set(rtk_stp_msti_id_t msti, rtk_port_t port, rtk_stp_state_t stp_state);

/* Function Name:
 *      rtk_stp_mstpState_get
 * Description:
 *      Get Configuration of spanning tree state per port
 * Input:
 *      msti              - Multiple spanning tree instance, no use for RTL8306E
 *      port              - Port id
 * Output:
 *      pStp_state     - the pointer of Spanning tree state
 * Return:
 *      RT_ERR_OK                      -  Success
 *      RT_ERR_FAILED                -  Failure
 *      RT_ERR_PORT_ID              -  Invalid port id
 *      RT_ERR_NULL_POINTER      -  Input parameter is null pointer
 * Note:
 *      Because RTL8306E does not support multiple spanning tree, so msti is no use. 
 *      There are four states supported by ASIC.
 *          - STP_STATE_DISABLED
 *          - STP_STATE_BLOCKING
 *          - STP_STATE_LEARNING
 *          - STP_STATE_FORWARDING
 */
extern rtk_api_ret_t rtk_stp_mstpState_get(rtk_stp_msti_id_t msti, rtk_port_t port, rtk_stp_state_t *pStp_state);

/* LUT */

/* Function Name:
 *      rtk_l2_addr_add
 * Description:
 *      Set LUT unicast entry
 * Input:
 *      pMac               -   6 bytes unicast(I/G bit is 0) mac address to be written into LUT
 *      pL2_data          -   the mac address attributes
 * Output:
 *      none
 * Return:
 *      RT_ERR_OK                       -  Success
 *      RT_ERR_FAILED                 -   Failure
 *      RT_ERR_INPUT                  -   Invalid input parameter
 *      RT_ERR_MAC                    -   Wrong mac address, must be unicast mac        
 *      RT_ERR_NULL_POINTER       -  Input parameter is null pointer    
 *      RT_ERR_L2_INDEXTBL_FULL -  The L2 index table is full
 * Note:
 *      If the unicast mac address already existed in LUT, it will udpate the status of the entry. 
 *      Otherwise, it will find an empty or asic auto learned entry to write. If all the entries 
 *      with the same hash value can't be replaced, ASIC will return a RT_ERR_L2_INDEXTBL_FULL error.
 *      for RTL8306E, pL2_data member fid and sa_block is no use, so it can be chosen any value.
 */
extern rtk_api_ret_t rtk_l2_addr_add(rtk_mac_t *pMac, rtk_l2_ucastAddr_t *pL2_data);

/* Function Name:
 *      rtk_l2_addr_get
 * Description:
 *      Get LUT unicast entry
 * Input:
 *      pMac               -   6 bytes unicast(I/G bit is 0) mac address to be gotten
 *      fid                   -   filtering database id, could be any value for RTL8306E switch
 * Output:
 *      pL2_data          -   the mac address attributes
 * Return:
 *      RT_ERR_OK                               -  Success
 *      RT_ERR_FAILED                         -   Failure
 *      RT_ERR_INPUT                          -   Invalid input parameter
 *      RT_ERR_MAC                            -   Wrong mac address, must be unicast mac        
 *      RT_ERR_NULL_POINTER              -   Input parameter is null pointer    
 *      RT_ERR_L2_ENTRY_NOTFOUND    -   Specified entry not found
 * Note:
 *      If the unicast mac address existed in LUT, it will return the port where
 *      the mac is learned, 802.1x authorized status and dynamic/static entry,
 *      Otherwise, it will return a RT_ERR_L2_ENTRY_NOTFOUND error.
 */
extern rtk_api_ret_t rtk_l2_addr_get(rtk_mac_t *pMac, rtk_fid_t fid, rtk_l2_ucastAddr_t *pL2_data);

/* Function Name:
 *      rtk_l2_addr_del
 * Description:
 *      Delete LUT unicast entry
 * Input:
 *      pMac               -   6 bytes unicast mac address to be deleted
 *      fid                   -   filtering database id, could be any value for RTL8306E switch
 * Output:
 *      none
 * Return:
 *      RT_ERR_OK                               -  Success
 *      RT_ERR_FAILED                         -   Failure
 *      RT_ERR_INPUT                          -   Invalid input parameter
 *      RT_ERR_MAC                            -   Wrong mac address, must be unicast mac        
 *      RT_ERR_NULL_POINTER              -   Input parameter is null pointer    
 *      RT_ERR_L2_ENTRY_NOTFOUND    -   Specified entry not found 
 * Note:
 *      If the mac has existed in the LUT, it will be deleted.
 *      Otherwise, it will return RT_ERR_L2_ENTRY_NOTFOUND.
 */
extern rtk_api_ret_t rtk_l2_addr_del(rtk_mac_t *pMac, rtk_fid_t fid); 

/* Function Name:
 *      rtk_l2_mcastAddr_add
 * Description:
 *      Add LUT multicast entry
 * Input:
 *      pMac               -   6 bytes unicast mac address to be deleted
 *      fid                   -   filtering database id, could be any value for RTL8306E switch
 *      portmask          -   Port mask to be forwarded to 
 * Output:
 *      none
 * Return:
 *      RT_ERR_OK                               -  Success
 *      RT_ERR_FAILED                         -   Failure
 *      RT_ERR_INPUT                          -   Invalid input parameter
 *      RT_ERR_PORT_MASK                  -   Invalid port mask
 *      RT_ERR_MAC                            -   Wrong mac address, must be unicast mac        
 *      RT_ERR_L2_INDEXTBL_FULL         -   Hashed index is full of entries
 * Note:
 *      If the multicast mac address already existed in the LUT, it will udpate the
 *      port mask of the entry. Otherwise, it will find an empty or asic auto learned
 *      entry to write. If all the entries with the same hash value can't be replaced, 
 *      ASIC will return a RT_ERR_L2_INDEXTBL_FULL error.
 */
extern rtk_api_ret_t rtk_l2_mcastAddr_add(rtk_mac_t *pMac, rtk_fid_t fid, rtk_portmask_t portmask);

/* Function Name:
 *      rtk_l2_mcastAddr_get
 * Description:
 *      Get LUT multicast entry
 * Input:
 *      pMac               -   6 bytes multicast(I/G bit is 0) mac address to be gotten
 *      fid                   -   filtering database id, could be any value for RTL8306E switch
 * Output:
 *      pPortmask         -   the pointer of port mask      
 * Return:
 *      RT_ERR_OK                               -  Success
 *      RT_ERR_FAILED                         -   Failure
 *      RT_ERR_INPUT                          -   Invalid input parameter
 *      RT_ERR_NULL_POINTER              -   Input parameter is null pointer    
 *      RT_ERR_MAC                            -   Wrong mac address, must be unicast mac        
 *      RT_ERR_L2_INDEXTBL_FULL         -   Hashed index is full of entries 
 * Note:
 *      If the multicast mac address existed in LUT, it will return the port mask where
 *      the packet should be forwarded to, Otherwise, it will return a 
 *      RT_ERR_L2_ENTRY_NOTFOUND error.
 */
extern rtk_api_ret_t rtk_l2_mcastAddr_get(rtk_mac_t *pMac, rtk_fid_t fid, rtk_portmask_t *pPortmask);

/* Function Name:
 *      rtk_l2_mcastAddr_del
 * Description:
 *      Delete LUT unicast entry
 * Input:
 *      pMac               -   6 bytes multicast(I/G bit is 1) mac address to be gotten
 *      fid                   -   filtering database id, could be any value for RTL8306E switch
 * Output:
*       none
 * Return:
 *      RT_ERR_OK                               -  Success
 *      RT_ERR_FAILED                         -   Failure
 *      RT_ERR_INPUT                          -   Invalid input parameter
 *      RT_ERR_MAC                            -   Wrong mac address, must be unicast mac        
 *      RT_ERR_L2_ENTRY_NOTFOUND     -   No such LUT entry
 * Note:
 *      If the mac has existed in the LUT, it will be deleted.
 *      Otherwise, it will return RT_ERR_L2_ENTRY_NOTFOUND.
 */
extern rtk_api_ret_t rtk_l2_mcastAddr_del(rtk_mac_t *pMac, rtk_fid_t fid);    

/* Function Name:
 *      rtk_l2_limitLearningCnt_set
 * Description:
 *      Set per-Port auto learning limit number
 * Input:
 *      port - Port id.
 *      mac_cnt - Auto learning entries limit number
 * Output:
 *      None
 * Return:
 *      RT_ERR_OK              - set shared meter successfully
 *      RT_ERR_FAILED          - FAILED to iset shared meter
 *      RT_ERR_PORT_ID - Invalid port number.
 *      RT_ERR_LIMITED_L2ENTRY_NUM - Invalid auto learning limit number
 * Note:
 *      (1)The API can set per-port ASIC auto learning limit number from 0(disable learning) 
 *      to 0x1F(31). 
 *      (2)If mac_cnt is set from 0 to 0x1F, per-port ASIC auto learning limit will be enabled;
 *      if mac_cnt is set 0xFF, per-port ASIC auto learning limit will be disabled.
 */
extern rtk_api_ret_t rtk_l2_limitLearningCnt_set(rtk_port_t port, rtk_mac_cnt_t mac_cnt);

/* Function Name:
 *      rtk_l2_limitLearningCnt_get
 * Description:
 *      Get per-Port auto learning limit number
 * Input:
 *      port - Port id.
 * Output:
 *      pMac_cnt - Auto learning entries limit number
 * Return:
 *      RT_ERR_OK              - Success
 *      RT_ERR_FAILED          - Failure 
 *      RT_ERR_PORT_ID - Invalid port number. 
 * Note:
 *      The API can get per-port ASIC auto learning limit number.
 */
extern rtk_api_ret_t rtk_l2_limitLearningCnt_get(rtk_port_t port, rtk_mac_cnt_t *pMac_cnt);

/* Function Name:
 *      rtk_l2_limitLearningCntAction_set
 * Description:
 *      Configure auto learn over limit number action.
 * Input:
 *      port - Port id (must be RTK_WHOLE_SYSTEM)
 *      action - Auto learning entries limit number
 * Output:
 *      None
 * Return:
 *      RT_ERR_OK              - Success
 *      RT_ERR_FAILED          - Failure 
 *      RT_ERR_PORT_ID - Invalid port number.
 *      RT_ERR_NOT_ALLOWED - Invalid learn over action
 * Note:
 *      (1)The API can set SA unknown packet action while auto learn limit number is over. 
 *      The action symbol as following:
 *      - LIMIT_LEARN_CNT_ACTION_DROP,
 *      - LIMIT_LEARN_CNT_ACTION_TO_CPU,
 *      (2)The action is global, so the port must be set as RTK_WHOLE_SYSTEM
 */
extern rtk_api_ret_t rtk_l2_limitLearningCntAction_set(rtk_port_t port, rtk_l2_limitLearnCntAction_t action);

/* Function Name:
 *      rtk_l2_limitLearningCntAction_get
 * Description:
 *      Get auto learn over limit number action.
 * Input:
 *      port - Port id (must be RTK_WHOLE_SYSTEM)
 * Output:
 *      pAction - Learn over action
 * Return:
 *      RT_ERR_OK              - Success
 *      RT_ERR_FAILED          - Failure 
 *      RT_ERR_PORT_ID - Invalid port number. 
 * Note:
 *      (1)The API can get SA unknown packet action while auto learn limit number is over. 
 *      The action symbol as following:
 *      - LIMIT_LEARN_CNT_ACTION_DROP,
 *      - LIMIT_LEARN_CNT_ACTION_TO_CPU,
 *      (2)The action is global, so the port must be set as RTK_WHOLE_SYSTEM
 */
extern rtk_api_ret_t rtk_l2_limitLearningCntAction_get(rtk_port_t port, rtk_l2_limitLearnCntAction_t *pAction);

/* Function Name:
 *      rtk_l2_learningCnt_get
 * Description:
 *      Get per-Port current auto learning number
 * Input:
 *      port - Port id.
 * Output:
 *      pMac_cnt - ASIC auto learning entries number
 * Return:
 *      RT_ERR_OK              - Success
 *      RT_ERR_PORT_ID - Invalid port number. 
 *      RT_ERR_NULL_POINTER   -   Input parameter is null pointer  
 * Note:
 *      The API can get per-port ASIC auto learning number
 */
extern rtk_api_ret_t rtk_l2_learningCnt_get(rtk_port_t port, rtk_mac_cnt_t *pMac_cnt);

/* CPU Port */

/* Function Name:
 *      rtk_cpu_enable_set
 * Description:
 *      Set cpu port function enable or disable
 * Input:
 *      enable          - enable or disable
 * Output:
 *      none
 * Return:
 *      RT_ERR_OK                        -  Success
 *      RT_ERR_FAILED                  -   Failure
 * Note:
 *      The API can set CPU port function enable/disable
 *      default port 4 is cpu port.
 */
extern rtk_api_ret_t rtk_cpu_enable_set(rtk_enable_t enable);

/* Function Name:
 *      rtk_cpu_enable_get
 * Description:
 *      Get cpu port function enable or disable
 * Input:
 *      none
 * Output:
 *      pEnable          -  the pointer of enable or disable cpu port function
 * Return:
 *      RT_ERR_OK                   -  Success
 *      RT_ERR_FAILED             -   Failure
 * Note:
 *      The API can set CPU port function enable/disable
 */
extern rtk_api_ret_t rtk_cpu_enable_get(rtk_enable_t *pEnable);

/* Function Name:
 *      rtk_cpu_tagPort_set
 * Description:
 *      Set CPU port and CPU tag insert mode
 * Input:
 *      port          -  Port id
 *      mode        -  CPU tag insert for packets egress from CPU port
 * Output:
 *      none
 * Return:
 *      RT_ERR_OK                   -  Success
 *      RT_ERR_FAILED             -   Failure
 *      RT_ERR_PORT_ID           -   Invalid port id
 * Note:
 *      The API can set CPU port and inserting proprietary CPU tag mode (Length/Type 0x8899)
 *      to the frame that transmitting to CPU port.
 *      The inset cpu tag mode is as following:
 *          - CPU_INSERT_TO_ALL
 *          - CPU_INSERT_TO_TRAPPING
 *          - CPU_INSERT_TO_NONE   
 */ 
extern rtk_api_ret_t rtk_cpu_tagPort_set(rtk_port_t port, rtk_cpu_insert_t mode);

/* Function Name:
 *      rtk_cpu_tagPort_get
 * Description:
 *      Get CPU port and CPU tag insert mode
 * Input:
 *      port          -  Port id
 * Output:
 *      pMode       -  the pointer of CPU tag insert for packets egress from CPU port
 * Return:
 *      RT_ERR_OK                      -  Success
 *      RT_ERR_FAILED                -   Failure
 *      RT_ERR_NULL_POINTER      -   Input parameter is null pointer
 * Note:
 *      The API can set CPU port and inserting proprietary CPU tag mode (Length/Type 0x8899)
 *      to the frame that transmitting to CPU port.
 *      The inset cpu tag mode is as following:
 *          - CPU_INSERT_TO_ALL
 *          - CPU_INSERT_TO_TRAPPING
 *          - CPU_INSERT_TO_NONE    
 */

extern rtk_api_ret_t rtk_cpu_tagPort_get(rtk_port_t *pPort, rtk_cpu_insert_t *pMode);


/*Port Mirror */

/* Function Name:
 *      rtk_mirror_portBased_set
 * Description:
 *      Set port mirror function
 * Input:
 *      mirroring_port                  - Monitor port, 7 means no monitor port
 *      pMirrored_rx_portmask      - the pointer of Rx mirror port mask
 *      pMirrored_tx_portmask      - the pointer of Tx mirror port mask
 * Output:
 *      none
 * Return:
 *      RT_ERR_OK                      -  Success
 *      RT_ERR_FAILED                -   Failure
 *      RT_ERR_PORT_MASK         -   Invalid port mask
 * Note:
 *      The API is to set mirror function of source port and mirror port. 
 */
extern rtk_api_ret_t rtk_mirror_portBased_set(rtk_port_t mirroring_port, rtk_portmask_t *pMirrored_rx_portmask, rtk_portmask_t *pMirrored_tx_portmask);

/* Function Name:
 *      rtk_mirror_portBased_get
 * Description:
 *      Get port mirror function
 * Input:
 *      none 
 * Output:
 *      pMirroring_port             - the pointer Monitor port, 7 means no monitor port
 *      pMirrored_rx_portmask   - the pointer of Rx mirror port mask
 *      pMirrored_tx_portmask   - the pointer of Tx mirror port mask 
 * Return:
 *      RT_ERR_OK                      -  Success
 *      RT_ERR_FAILED                -   Failure
 *      RT_ERR_PORT_MASK         -   Invalid port mask
 *      RT_ERR_NULL_POINTER      -   Input parameter is null pointer 
 * Note:
 *      The API is to set mirror function of source port and mirror port. 
 */
extern rtk_api_ret_t rtk_mirror_portBased_get(rtk_port_t* pMirroring_port, rtk_portmask_t *pMirrored_rx_portmask, rtk_portmask_t *pMirrored_tx_portmask);

/* 802.1X */

/* Function Name:
 *      rtk_dot1x_unauthPacketOper_set
 * Description:
 *      Set 802.1x unauth action configuration
 * Input:
 *      port                 -   Port id, no use for RTL8306E switch
 *      unauth_action   -   802.1X unauth action    
 * Output:
 *      none
 * Return:
 *      RT_ERR_OK
 *      RT_ERR_FAILED
 *      RT_ERR_DOT1X_PROC
 * Note:
 *      This API can set 802.1x unauth action configuration, 
 *      for RTL8306E switch, the action is by whole system,
 *      so port could be any value of 0~6.
 *      The unauth action is as following:
 *          - DOT1X_ACTION_DROP
 *          - DOT1X_ACTION_TRAP2CPU
 */

extern rtk_api_ret_t rtk_dot1x_unauthPacketOper_set(rtk_port_t port, rtk_dot1x_unauth_action_t unauth_action);

/* Function Name:
 *      rtk_dot1x_unauthPacketOper_get
 * Description:
 *      Get 802.1x unauth action configuration
 * Input:
 *      port                  -   Port id, no use for RTL8306E switch
 * Output:
 *      pUnauth_action   -  the pointer of 802.1X unauth action    
 * Return:
 *      RT_ERR_OK                      -  Success
 *      RT_ERR_FAILED                -   Failure
 *      RT_ERR_NULL_POINTER      -   Input parameter is null pointer
 * Note:
 *      This API can set 802.1x unauth action configuration, 
 *      for RTL8306E switch, the action is by whole system,
 *      so port could be any value of 0~6.
 *      The unauth action is as following:
 *          - DOT1X_ACTION_DROP
 *          - DOT1X_ACTION_TRAP2CPU
 */
extern rtk_api_ret_t rtk_dot1x_unauthPacketOper_get(rtk_port_t port, rtk_dot1x_unauth_action_t *pUnauth_action);

/* Function Name:
 *      rtk_dot1x_portBasedEnable_set
 * Description:
 *      Set 802.1x port-based enable configuration
 * Input:
 *      port                  -   Port id
 *      enable               -   enable or disable
 * Output:
 *      none
 * Return:
 *      RT_ERR_OK                      -  Success
 *      RT_ERR_FAILED                -   Failure
 *      RT_ERR_PORT_ID              -   Invalid port id
 * Note:
 *      The API can update the port-based port enable register content. If a port is 802.1x 
 *      port based network access control "enabled", it should be authenticated so packets 
 *      from that port won't be dropped or trapped to CPU. 
 *      The status of 802.1x port-based network access control is as following:
 *          - DISABLED
 *          - ENABLED
 */    
extern rtk_api_ret_t rtk_dot1x_portBasedEnable_set(rtk_port_t port, rtk_enable_t enable);

/* Function Name:
 *      rtk_dot1x_portBasedEnable_get
 * Description:
 *      Get 802.1x port-based enable configuration
 * Input:
 *      port                  -   Port id
 * Output:
 *      pEnable             -   the pointer of enable or disable
 * Return:
 *      RT_ERR_OK                -  Success
 *      RT_ERR_FAILED          -   Failure
 *      RT_ERR_PORT_ID        -   Invalid port id
 * Note:
 *      The API can update the port-based port enable register content. If a port is 802.1x 
 *      port based network access control "enabled", it should be authenticated so packets 
 *      from that port won't be dropped or trapped to CPU. 
 *      The status of 802.1x port-based network access control is as following:
 *          - DISABLED
 *          - ENABLED
 */    
extern rtk_api_ret_t rtk_dot1x_portBasedEnable_get(rtk_port_t port, rtk_enable_t *pEnable);

/* Function Name:
 *      rtk_dot1x_portBasedAuthStatus_set
 * Description:
 *      Set 802.1x port-based enable configuration
 * Input:
 *      port                  -   Port id
 *      port_auth          -  The status of 802.1x port
 * Output:
 *      none
 * Return:
 *      RT_ERR_OK                                    -  Success
 *      RT_ERR_FAILED                              -   Failure
 *      RT_ERR_PORT_ID                            -   Invalid port id
 *      RT_ERR_DOT1X_PORTBASEDAUTH      -   Port-based auth port error
 * Note:
 *      The authenticated status of 802.1x port-based network access control is as following:
 *          - UNAUTH
 *          - AUTH
 */    
extern rtk_api_ret_t rtk_dot1x_portBasedAuthStatus_set(rtk_port_t port, rtk_dot1x_auth_status_t port_auth);

/* Function Name:
 *      rtk_dot1x_portBasedAuthStatus_get
 * Description:
 *      Get 802.1x port-based enable configuration
 * Input:
 *      port                  -   Port id
 * Output:
 *      pPort_auth         -   the pointer of the status of 802.1x port
 * Return:
 *      RT_ERR_OK                          -  Success
 *      RT_ERR_FAILED                     -  Failure
 *      RT_ERR_PORT_ID                   -  Invalid port id
 *      RT_ERR_NULL_POINTER           -  Input parameter is null pointer
 * Note:
 *      The authenticated status of 802.1x port-based network access control is as following:
 *          - UNAUTH
 *          - AUTH
 */    
extern rtk_api_ret_t rtk_dot1x_portBasedAuthStatus_get(rtk_port_t port, rtk_dot1x_auth_status_t *pPort_auth);

/* Function Name:
 *      rtk_dot1x_portBasedDirection_set
 * Description:
 *      Set 802.1x port-based operational direction configuration
 * Input:
 *      port                  -   Port id
 *      port_direction     -   Operation direction
 * Output:
 *      none
 * Return:
 *      RT_ERR_OK                                 -  Success
 *      RT_ERR_FAILED                           -  Failure
 *      RT_ERR_PORT_ID                         -  Invalid port id
 *      RT_ERR_DOT1X_PORTBASEDOPDIR  -  Port-based opdir error
 * Note:
 *      The operate controlled direction of 802.1x port-based network access control is as following:
 *          - BOTH
 *          - IN
 */    
extern rtk_api_ret_t rtk_dot1x_portBasedDirection_set(rtk_port_t port, rtk_dot1x_direction_t port_direction);

/* Function Name:
 *      rtk_dot1x_portBasedDirection_get
 * Description:
 *      Get 802.1x port-based operational direction configuration
 * Input:
 *      port                  -   Port id
 * Output:
 *      pPort_direction    -   the pointer of Operation direction
 * Return:
 *      RT_ERR_OK                         -  Success
 *      RT_ERR_FAILED                    -  Failure
 *      RT_ERR_PORT_ID                  -  Invalid port id
 *      RT_ERR_NULL_POINTER          -  Input parameter is null pointer
 * Note:
 *      The operate controlled direction of 802.1x port-based network access control is as following:
 *          - BOTH
 *          - IN
 */    
extern rtk_api_ret_t rtk_dot1x_portBasedDirection_get(rtk_port_t port, rtk_dot1x_direction_t *pPort_direction);

/* Function Name:
 *      rtk_dot1x_macBasedEnable_set
 * Description:
 *      Set 802.1x mac-based port enable configuration
 * Input:
 *      port                  -   Port id
 *      enable               -   The status of 802.1x mac-base funtion
 * Output:
 *      none
 * Return:
 *      RT_ERR_OK                         -  Success
 *      RT_ERR_FAILED                    -  Failure
 *      RT_ERR_PORT_ID                  -  Invalid port id
 * Note:
 *     If a port is 802.1x MAC based network access control "enabled", the incoming packets should 
 *     be authenticated so packets from that port won't be dropped or trapped to CPU.
 *     The status of 802.1x MAC-based network access control is as following:
 *         - DISABLED
 *         - ENABLED
 */    
extern rtk_api_ret_t rtk_dot1x_macBasedEnable_set(rtk_port_t port, rtk_enable_t enable);

/* Function Name:
 *      rtk_dot1x_macBasedEnable_get
 * Description:
 *      Get 802.1x mac-based port enable configuration
 * Input:
 *      port                  -   Port id
 * Output:
 *      pEnable             -   the pointer of the status of 802.1x mac-base funtion
 * Return:
 *      RT_ERR_OK               -  Success
 *      RT_ERR_FAILED         -   Failure
 * Note:
 *     If a port is 802.1x MAC based network access control "enabled", the incoming packets should 
 *     be authenticated so packets from that port won't be dropped or trapped to CPU.
 *     The status of 802.1x MAC-based network access control is as following:
 *         - DISABLED
 *         - ENABLED
 */    
extern rtk_api_ret_t rtk_dot1x_macBasedEnable_get(rtk_port_t port, rtk_enable_t *pEnable);

/* Function Name:
 *      rtk_dot1x_macBasedDirection_set
 * Description:
 *      Set 802.1x mac-based operational direction configuration
 * Input:
 *      mac_direction    -   Operation direction
 * Output:
 *      none
 * Return:
 *      RT_ERR_OK                                    -  Success
 *      RT_ERR_FAILED                              -  Failure
 *      RT_ERR_DOT1X_MACBASEDOPDIR      -  MAC-based opdir error
 * Note:
 *      The operate controlled direction of 802.1x mac-based network access control is as following:
 *          - BOTH
 *          - IN
 */     
extern rtk_api_ret_t rtk_dot1x_macBasedDirection_set(rtk_dot1x_direction_t mac_direction);

/* Function Name:
 *      rtk_dot1x_macBasedDirection_get
 * Description:
 *      Get 802.1x mac-based operational direction configuration
 * Input:
 *      none
 * Output:
 *      pMac_direction    -   the pointer of Operation direction
 * Return:
 *      RT_ERR_OK                                    -  Success
 *      RT_ERR_FAILED                              -  Failure
 *      RT_ERR_NULL_POINTER                    -  Input parameter is null pointer
 * Note:
 *      The operate controlled direction of 802.1x mac-based network access control is as following:
 *          - BOTH
 *          - IN
 */  
extern rtk_api_ret_t rtk_dot1x_macBasedDirection_get(rtk_dot1x_direction_t *pMac_direction);

/* Function Name:
 *      rtk_dot1x_macBasedAuthMac_add
 * Description:
 *      Add an authenticated MAC to ASIC
 * Input:
 *      port            -  Port id
 *      pAuth_mac   - The authenticated MAC
 *      fid              -  no use for RTL8306E   
 * Output:
 *      none
 * Return:
 *      RT_ERR_OK                                       - Success
 *      RT_ERR_FAILED                                 -  Failure
 *      RT_ERR_L2_ENTRY_NOTFOUND             -  Specified entry not found
 *      RT_ERR_DOT1X_MAC_PORT_MISMATCH  - Auth MAC and port mismatch eror 
 * Note:
 *     The API can add a 802.1x authenticated MAC address to port. If the MAC does not exist in LUT, 
 *     user can't add this MAC to auth status.
 */    
extern rtk_api_ret_t rtk_dot1x_macBasedAuthMac_add(rtk_port_t port, rtk_mac_t *pAuth_mac, rtk_fid_t fid);

/* Function Name:
 *      rtk_dot1x_macBasedAuthMac_del
 * Description:
 *      Delete an authenticated MAC to ASIC
 * Input:
 *      port            -  Port id
 *      pAuth_mac   - The authenticated MAC
 *      fid              -  no use for RTL8306E   
 * Output:
 *      none
 * Return:
 *      RT_ERR_OK                                       - Success
 *      RT_ERR_FAILED                                 -  Failure
 *      RT_ERR_L2_ENTRY_NOTFOUND             -  Specified entry not found
 *      RT_ERR_DOT1X_MAC_PORT_MISMATCH  - Auth MAC and port mismatch eror 
 * Note:
 *     The API can delete a 802.1x authenticated MAC address to port. It only change the auth status of
 *     the MAC and won't delete it from LUT.
 */    
extern rtk_api_ret_t rtk_dot1x_macBasedAuthMac_del(rtk_port_t port, rtk_mac_t *pAuth_mac, rtk_fid_t fid);


/* Function Name:
 *      rtk_svlan_init
 * Description:
 *      Initialize SVLAN Configuration
 * Input:
 *      none
 * Output:
 *      none
 * Return:
 *      RT_ERR_OK
 *      RT_ERR_FAILED
 *      RT_ERR_SMI
 *      RT_ERR_INPUT
 * Note:
 *    Ether type of S-tag in 802.1ad is 0x88a8 and there are existed ether type 
 *    0x9100 and 0x9200 for Q-in-Q SLAN design. User can set mathced ether 
 *    type as service provider supported protocol. After call this API, all ports are 
 *    set as CVLAN port. you can use rtk_svlan_servicePort_add to add SVLAN port. 
 */
extern rtk_api_ret_t rtk_svlan_init(void);

/* Function Name:
 *      rtk_svlan_servicePort_add
 * Description:
 *      Enable one service port in the specified device
 * Input:
 *      port     -  Port id
 * Output:
 *      none
 * Return:
 *      RT_ERR_OK
 *      RT_ERR_FAILED
 *      RT_ERR_SMI
 * Note:
 *    This API is setting which port is connected to provider switch. All frames receiving from this port
 *    will recognize Service Vlan Tag.
 *    
 */
extern rtk_api_ret_t rtk_svlan_servicePort_add(rtk_port_t port);


/* Function Name:
 *      rtk_svlan_servicePort_del
 * Description:
 *      Disable one service port in the specified device
 * Input:
 *      none
 * Output:
 *      pSvlan_portmask  - svlan ports mask
 * Return:
 *      RT_ERR_OK
 *      RT_ERR_FAILED
 *      RT_ERR_SMI
 * Note:
 *      Ether type of S-tag in 802.1ad is 0x88a8 and there are existed ether type
 *      0x9100 and 0x9200 for Q-in-Q SLAN design. User can set mathced ether type as service 
 *      provider supported protocol. 
 */
extern rtk_api_ret_t rtk_svlan_servicePort_del(rtk_port_t port);

/* Function Name:
 *      rtk_svlan_servicePort_get
 * Description:
 *      Disable one service port in the specified device
 * Input:
 *      none
 * Output:
 *      pSvlan_portmask  - svlan ports mask
 * Return:
 *      RT_ERR_OK                 - success
 *      RT_ERR_FAILED            -  fail
 *      RT_ERR_NULL_POINTER  -  null pointer
 * Note:
 *      Ether type of S-tag in 802.1ad is 0x88a8 and there are existed ether type 0x9100 
 *      and 0x9200 for Q-in-Q SLAN design. User can set mathced ether type as service 
 *      provider supported protocol. 
 */
extern rtk_api_ret_t rtk_svlan_servicePort_get(rtk_portmask_t *pSvlan_portmask);

/* Function Name:
 *      rtk_svlan_tpidEntry_set
 * Description:
 *      Configure accepted S-VLAN ether type. The default ether type of S-VLAN is 0x88a8
 * Input:
 *      svlan_tag_id  - Ether type of S-tag frame parsing in uplink ports
 * Output:
 *      none
 * Return:
 *      RT_ERR_OK
 *      RT_ERR_FAILED
 *      RT_ERR_SMI
 * Note:
 *      Ether type of S-tag in 802.1ad is 0x88a8 and there are existed ether type 0x9100 
 *      and 0x9200 for Q-in-Q SLAN design. User can set mathced ether type as service 
 *      provider supported protocol. 
 */
extern rtk_api_ret_t rtk_svlan_tpidEntry_set(rtk_svlan_tpid_t svlan_tag_id);


/* Function Name:
 *      rtk_svlan_tpidEntry_get
 * Description:
 *      Get accepted S-VLAN ether type. The default ether type of S-VLAN is 0x88a8
 * Input:
 *      pSvlan_tag_id       - Ether type of S-tag frame parsing in uplink ports
 * Output:
 *      none
 * Return:
 *      RT_ERR_OK
 *      RT_ERR_FAILED
 * Note:
 *      Ether type of S-tag in 802.1ad is 0x88a8 and there are existed ether type 0x9100 
 *      and 0x9200 for Q-in-Q SLAN design. User can set mathced ether type as service 
 *      provider supported protocol. 
 */
extern rtk_api_ret_t rtk_svlan_tpidEntry_get(rtk_svlan_tpid_t *pSvlan_tag_id);


/* Function Name:
 *      rtk_svlan_portPvid_set
 * Description:
 *      Set port to specified VLAN ID(PVID) for Service Provider Port
 * Input:
 *      port             - Port id
 *      pvid             - Specified Service VLAN ID
 *      priority         - 802.1p priority for the PVID
 *      dei               - Service VLAN tag DEI bit
 * Output:
 *      none
 * Return:
 *      RT_ERR_OK
 *      RT_ERR_FAILED
 *      RT_ERR_VLAN_VID
 *      RT_ERR_SMI 
 *      RT_ERR_VLAN_PRIORITY 
 *      RT_ERR_VLAN_ENTRY_NOT_FOUND
 * Note:
 *    The API is used for Port-based VLAN. The untagged frame received from the
 *    port will be classified to the specified VLAN and assigned to the specified priority.
 */
extern rtk_api_ret_t rtk_svlan_portPvid_set(rtk_port_t port, rtk_vlan_t pvid, rtk_pri_t priority, rtk_dei_t dei);

/* Function Name:
 *      rtk_svlan_portPvid_get
 * Description:
 *      Get Service VLAN ID(PVID) on specified port
 * Input:
 *      port             - Port id
 *      pPvid            - Specified VLAN ID
 *      pPriority        - 802.1p priority for the PVID
 *      pDei             - DEI bit
 * Output:
 *      none
 * Return:
 *      RT_ERR_OK
 *      RT_ERR_FAILED
 *      RT_ERR_SMI
 *      RT_ERR_PORT_ID
 *      RT_ERR_NULL_POINTER 
 * Note:
 *    The API is used for Port-based VLAN. The untagged frame received from the
 *    port will be classified to the specified VLAN and assigned to the specified priority.
 */
extern rtk_api_ret_t rtk_svlan_portPvid_get(rtk_port_t port, rtk_vlan_t *pPvid, rtk_pri_t* pPriority, rtk_dei_t *pDei);

/* Function Name:
 *      rtk_filter_igrAcl_init
 * Description:
 *       Initialize ACL 
 * Input:
 *      none
 * Output:
 *      none
 * Return:
 *      RT_ERR_OK
 *      RT_ERR_FAILED
 * Note:
 *      The API init ACL module.
 */
extern rtk_api_ret_t rtk_filter_igrAcl_init(void);

/* Function Name:
 *      rtk_filter_igrAcl_rule_add
 * Description:
 *      Add an acl rule into acl table
 * Input:
 *      pRule    -  the pointer of rule structure
 * Output:
 *      none
 * Return:
 *      RT_ERR_OK
 *      RT_ERR_FAILED
 *      RT_ERR_TBL_FULL
 *      RT_ERR_NULL_POINTER
 * Note:
 *      The API add an  ACL rule. <nl>
 *      phyport could be  0~5: port number,  RTL8306_ACL_ANYPORT: any port;<nl>
 *      protocol could be RTL8306_ACL_ETHER(ether type), RTL8306_ACL_TCP(TCP), RTL8306_ACL_UDP(UDP), RTL8306_ACL_TCPUDP(TCP or UDP);<nl>
 *      prority could be RTL8306_PRIO0~RTL8306_PRIO3;<nl>
 *      action could be RTL8306_ACT_DROP/RTL8306_ACT_PERMIT/RTL8306_ACT_TRAPCPU/RTL8306_ACT_MIRROR;<nl>
 */

extern rtk_api_ret_t rtk_filter_igrAcl_rule_add(rtk_filter_rule_t *pRule);

/* Function Name:
 *      rtk_filter_igrAcl_rule_get
 * Description:
 *      Get ACL rule priority and action 
 * Input:
 *      pRule    -  the pointer of rule structure
 * Output:
 *      pRule    -  the pointer of rule structure
 * Return:
 *      RT_ERR_OK
 *      RT_ERR_FAILED
 * Note:
 *      The API add an  ACL rule. <nl>
 *      phyport could be  0~5: port number,  RTL8306_ACL_ANYPORT: any port;<nl>
 *      protocol could be RTL8306_ACL_ETHER(ether type), RTL8306_ACL_TCP(TCP), RTL8306_ACL_UDP(UDP), RTL8306_ACL_TCPUDP(TCP or UDP);<nl>
 *      prority could be RTL8306_PRIO0~RTL8306_PRIO3;<nl>
 *      action could be RTL8306_ACT_DROP/RTL8306_ACT_PERMIT/RTL8306_ACT_TRAPCPU/RTL8306_ACT_MIRROR;<nl>
 */
extern rtk_api_ret_t rtk_filter_igrAcl_rule_get(rtk_filter_rule_t *pRule);



/* Function Name:
 *      rtk_filter_igrAcl_rule_del
 * Description:
 *      Delete an acl rule into acl table
 * Input:
 *      pRule    -  the pointer of rule structure
 * Output:
 *      none
 * Return:
 *      RT_ERR_OK
 *      RT_ERR_FAILED
 *      RT_ERR_INPUT
 *      RT_ERR_NULL_POINTER
 * Note:
 *      The API delete an  ACL rule. <nl>
 *      only phyport/protocol/data field in pRule needs to be specified.
 */
extern rtk_api_ret_t rtk_filter_igrAcl_rule_del(rtk_filter_rule_t *pRule);




#endif   /*__RTK_API_EXT_H__*/

 

发表评论