/*
* Copyright (C) 2013 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 OTHER THAN AS AUTHORIZED UNDER
* THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
*
* $Revision: 70627 $
* $Date: 2016-08-09 16:49:57 +0800 (?曹?, 09 ?急? 2016) $
*
* Purpose : RTL8367C switch high-level API for RTL8367C
* Feature : Port security related functions
*
*/
#include <rtl8367c_asicdrv_port.h>
#include <string.h>
/* Function Name:
* rtl8367c_setAsicPortUnknownDaBehavior
* Description:
* Set UNDA behavior
* Input:
* port - port ID
* behavior - 0: flooding to unknwon DA portmask; 1: drop; 2:trap; 3: flooding
* Output:
* None
* Return:
* RT_ERR_OK - Success
* RT_ERR_SMI - SMI access error
* RT_ERR_NOT_ALLOWED - Invalid behavior
* Note:
* None
*/
ret_t rtl8367c_setAsicPortUnknownDaBehavior(rtk_uint32 port, rtk_uint32 behavior)
{
if(port >= RTL8367C_PORTNO)
return RT_ERR_PORT_ID;
if(behavior >= L2_UNDA_BEHAVE_END)
return RT_ERR_NOT_ALLOWED;
if(port < 8)
return rtl8367c_setAsicRegBits(RTL8367C_REG_UNKNOWN_UNICAST_DA_PORT_BEHAVE, RTL8367C_Port0_ACTION_MASK << (port * 2), behavior);
else
return rtl8367c_setAsicRegBits(RTL8367C_REG_UNKNOWN_UNICAST_DA_PORT_BEHAVE_EXT, RTL8367C_PORT8_ACTION_MASK << ((port-8) * 2), behavior);
}
/* Function Name:
* rtl8367c_getAsicPortUnknownDaBehavior
* Description:
* Get UNDA behavior
* Input:
* port - port ID
* Output:
* pBehavior - 0: flooding to unknwon DA portmask; 1: drop; 2:trap; 3: flooding
* Return:
* RT_ERR_OK - Success
* RT_ERR_SMI - SMI access error
* Note:
* None
*/
ret_t rtl8367c_getAsicPortUnknownDaBehavior(rtk_uint32 port, rtk_uint32 *pBehavior)
{
if(port >= RTL8367C_PORTNO)
return RT_ERR_PORT_ID;
if(port < 8)
return rtl8367c_getAsicRegBits(RTL8367C_REG_UNKNOWN_UNICAST_DA_PORT_BEHAVE, RTL8367C_Port0_ACTION_MASK << (port * 2), pBehavior);
else
return rtl8367c_getAsicRegBits(RTL8367C_REG_UNKNOWN_UNICAST_DA_PORT_BEHAVE_EXT, RTL8367C_PORT8_ACTION_MASK << ((port-8) * 2), pBehavior);
}
/* Function Name:
* rtl8367c_setAsicPortUnknownSaBehavior
* Description:
* Set UNSA behavior
* Input:
* behavior - 0: flooding; 1: drop; 2:trap
* Output:
* None
* Return:
* RT_ERR_OK - Success
* RT_ERR_SMI - SMI access error
* RT_ERR_NOT_ALLOWED - Invalid behavior
* Note:
* None
*/
ret_t rtl8367c_setAsicPortUnknownSaBehavior(rtk_uint32 behavior)
{
if(behavior >= L2_BEHAVE_SA_END)
return RT_ERR_NOT_ALLOWED;
return rtl8367c_setAsicRegBits(RTL8367C_PORT_SECURIT_CTRL_REG, RTL8367C_UNKNOWN_SA_BEHAVE_MASK, behavior);
}
/* Function Name:
* rtl8367c_getAsicPortUnknownSaBehavior
* Description:
* Get UNSA behavior
* Input:
* pBehavior - 0: flooding; 1: drop; 2:trap
* Output:
* None
* Return:
* RT_ERR_OK - Success
* RT_ERR_SMI - SMI access error
* Note:
* None
*/
ret_t rtl8367c_getAsicPortUnknownSaBehavior(rtk_uint32 *pBehavior)
{
return rtl8367c_getAsicRegBits(RTL8367C_PORT_SECURIT_CTRL_REG, RTL8367C_UNKNOWN_SA_BEHAVE_MASK, pBehavior);
}
/* Function Name:
* rtl8367c_setAsicPortUnmatchedSaBehavior
* Description:
* Set Unmatched SA behavior
* Input:
* behavior - 0: flooding; 1: drop; 2:trap
* Output:
* None
* Return:
* RT_ERR_OK - Success
* RT_ERR_SMI - SMI access error
* RT_ERR_NOT_ALLOWED - Invalid behavior
* Note:
* None
*/
ret_t rtl8367c_setAsicPortUnmatchedSaBehavior(rtk_uint32 behavior)
{
if(behavior >= L2_BEHAVE_SA_END)
return RT_ERR_NOT_ALLOWED;
return rtl8367c_setAsicRegBits(RTL8367C_PORT_SECURIT_CTRL_REG, RTL8367C_UNMATCHED_SA_BEHAVE_MASK, behavior);
}
/* Function Name:
* rtl8367c_getAsicPortUnmatchedSaBehavior
* Description:
* Get Unmatched SA behavior
* Input:
* pBehavior - 0: flooding; 1: drop; 2:trap
* Output:
* None
* Return:
* RT_ERR_OK - Success
* RT_ERR_SMI - SMI access error
* Note:
* None
*/
ret_t rtl8367c_getAsicPortUnmatchedSaBehavior(rtk_uint32 *pBehavior)
{
return rtl8367c_getAsicRegBits(RTL8367C_PORT_SECURIT_CTRL_REG, RTL8367C_UNMATCHED_SA_BEHAVE_MASK, pBehavior);
}
/* Function Name:
* rtl8367c_setAsicPortUnmatchedSaMoving
* Description:
* Set Unmatched SA moving state
* Input:
* port - Port ID
* enabled - 0: can't move to new port; 1: can move to new port
* Output:
* None
* Return:
* RT_ERR_OK - Success
* RT_ERR_SMI - SMI access error
* RT_ERR_PORT_ID - Error Port ID
* Note:
* None
*/
ret_t rtl8367c_setAsicPortUnmatchedSaMoving(rtk_uint32 port, rtk_uint32 enabled)
{
if(port >= RTL8367C_PORTNO)
return RT_ERR_PORT_ID;
return rtl8367c_setAsicRegBit(RTL8367C_REG_L2_SA_MOVING_FORBID, port, (enabled == 1) ? 0 : 1);
}
/* Function Name:
* rtl8367c_getAsicPortUnmatchedSaMoving
* Description:
* Get Unmatched SA moving state
* Input:
* port - Port ID
* Output:
* pEnabled - 0: can't move to new port; 1: can move to new port
* Return:
* RT_ERR_OK - Success
* RT_ERR_SMI - SMI access error
* RT_ERR_PORT_ID - Error Port ID
* Note:
* None
*/
ret_t rtl8367c_getAsicPortUnmatchedSaMoving(rtk_uint32 port, rtk_uint32 *pEnabled)
{
rtk_uint32 data;
ret_t retVal;
if(port >= RTL8367C_PORTNO)
return RT_ERR_PORT_ID;
if((retVal = rtl8367c_getAsicRegBit(RTL8367C_REG_L2_SA_MOVING_FORBID, port, &data)) != RT_ERR_OK)
return retVal;
*pEnabled = (data == 1) ? 0 : 1;
return RT_ERR_OK;
}
/* Function Name:
* rtl8367c_setAsicPortUnknownDaFloodingPortmask
* Description:
* Set UNDA flooding portmask
* Input:
* portmask - portmask(0~0xFF)
* Output:
* None
* Return:
* RT_ERR_OK - Success
* RT_ERR_SMI - SMI access error
* RT_ERR_PORT_MASK - Invalid portmask
* Note:
* None
*/
ret_t rtl8367c_setAsicPortUnknownDaFloodingPortmask(rtk_uint32 portmask)
{
if(portmask > RTL8367C_PORTMASK)
return RT_ERR_PORT_MASK;
return rtl8367c_setAsicReg(RTL8367C_UNUCAST_FLOADING_PMSK_REG, portmask);
}
/* Function Name:
* rtl8367c_getAsicPortUnknownDaFloodingPortmask
* Description:
* Get UNDA flooding portmask
* Input:
* pPortmask - portmask(0~0xFF)
* Output:
* None
* Return:
* RT_ERR_OK - Success
* RT_ERR_SMI - SMI access error
* Note:
* None
*/
ret_t rtl8367c_getAsicPortUnknownDaFloodingPortmask(rtk_uint32 *pPortmask)
{
return rtl8367c_getAsicReg(RTL8367C_UNUCAST_FLOADING_PMSK_REG, pPortmask);
}
/* Function Name:
* rtl8367c_setAsicPortUnknownMulticastFloodingPortmask
* Description:
* Set UNMC flooding portmask
* Input:
* portmask - portmask(0~0xFF)
* Output:
* None
* Return:
* RT_ERR_OK - Success
* RT_ERR_SMI - SMI access error
* RT_ERR_PORT_MASK - Invalid portmask
* Note:
* None
*/
ret_t rtl8367c_setAsicPortUnknownMulticastFloodingPortmask(rtk_uint32 portmask)
{
if(portmask > RTL8367C_PORTMASK)
return RT_ERR_PORT_MASK;
return rtl8367c_setAsicReg(RTL8367C_UNMCAST_FLOADING_PMSK_REG, portmask);
}
/* Function Name:
* rtl8367c_getAsicPortUnknownMulticastFloodingPortmask
* Description:
* Get UNMC flooding portmask
* Input:
* pPortmask - portmask(0~0xFF)
* Output:
* None
* Return:
* RT_ERR_OK - Success
* RT_ERR_SMI - SMI access error
* Note:
* None
*/
ret_t rtl8367c_getAsicPortUnknownMulticastFloodingPortmask(rtk_uint32 *pPortmask)
{
return rtl8367c_getAsicReg(RTL8367C_UNMCAST_FLOADING_PMSK_REG, pPortmask
评论15