blob: 791dba9eb35fdde68c706dec0196dc1e7a393e6a [file] [log] [blame]
/*
* Copyright (c) 2012, 2015-2018, The Linux Foundation. All rights reserved.
* Permission to use, copy, modify, and/or distribute this software for
* any purpose with or without fee is hereby granted, provided that the
* above copyright notice and this permission notice appear in all copies.
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
* OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
/**
* @defgroup fal_fdb FAL_FDB
* @{
*/
#ifndef _FAL_FDB_H_
#define _FAL_FDB_H_
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
#include "sw.h"
#include "fal/fal_type.h"
/**
@details Fields description:
portmap_en - If value of portmap_en is A_TRUE then port.map is valid
otherwise port.id is valid.
leaky_en - If value of leaky_en is A_TRUE then packets which
destination address equals addr in this entry would be leaky.
mirror_en - If value of mirror_en is A_TRUE then packets which
destination address equals addr in this entry would be mirrored.
clone_en - If value of clone_en is A_TRUE which means this address is
a mac clone address.
@brief This structure defines the Fdb entry.
*/
typedef struct
{
fal_mac_addr_t addr; /* mac address of fdb entry */
a_uint16_t fid; /* vlan_id/vsi value of fdb entry */
fal_fwd_cmd_t dacmd; /* source address command */
fal_fwd_cmd_t sacmd; /* dest address command */
union
{
fal_port_t id; /* union value is port id value */
fal_pbmp_t map; /* union value is bitmap value */
} port;
a_bool_t portmap_en; /* use port bitmap or not */
a_bool_t is_multicast; /* if it is a multicast mac fdb entry */
a_bool_t static_en; /* enable static or not */
a_bool_t leaky_en; /* enable leaky or not */
a_bool_t mirror_en; /* enable mirror or not */
a_bool_t clone_en; /* enable clone or not */
a_bool_t cross_pt_state; /* cross port state */
a_bool_t da_pri_en; /* enable da pri or not */
a_uint8_t da_queue; /* da queue value */
a_bool_t white_list_en; /* enable white list or not */
a_bool_t load_balance_en; /* enable load balance value or not */
a_uint8_t load_balance; /* load balance value */
a_bool_t entry_valid; /* check if entry is value */
a_bool_t lookup_valid; /* check if entry is lookup */
} fal_fdb_entry_t;
typedef struct
{
fal_mac_addr_t addr;
a_uint16_t fid;
a_uint8_t load_balance;
} fal_fdb_rfs_t;
typedef struct
{
a_bool_t enable; /* enable port learn limit or not */
a_uint32_t limit_num; /* port learn limit number */
fal_fwd_cmd_t action; /* the action when port learn number exceed limit*/
} fal_maclimit_ctrl_t;
#define FAL_FDB_DEL_STATIC 0x1
typedef struct
{
a_bool_t port_en; /* enable port value matching or not */
a_bool_t fid_en; /* enable fid value matching or not */
a_bool_t multicast_en; /* enable multicast value matching or not */
} fal_fdb_op_t;
typedef enum
{
INVALID_VLAN_SVL=0,
INVALID_VLAN_IVL
} fal_fdb_smode;
enum {
FUNC_FDB_ENTRY_ADD = 0,
FUNC_FDB_ENTRY_FLUSH,
FUNC_FDB_ENTRY_DEL_BYPORT,
FUNC_FDB_ENTRY_DEL_BYMAC,
FUNC_FDB_ENTRY_GETFIRST,
FUNC_FDB_ENTRY_GETNEXT,
FUNC_FDB_ENTRY_SEARCH,
FUNC_FDB_PORT_LEARN_SET,
FUNC_FDB_PORT_LEARN_GET,
FUNC_FDB_PORT_LEARNING_CTRL_SET,
FUNC_FDB_PORT_LEARNING_CTRL_GET,
FUNC_FDB_PORT_STAMOVE_CTRL_SET,
FUNC_FDB_PORT_STAMOVE_CTRL_GET,
FUNC_FDB_AGING_CTRL_SET,
FUNC_FDB_AGING_CTRL_GET,
FUNC_FDB_LEARNING_CTRL_SET,
FUNC_FDB_LEARNING_CTRL_GET,
FUNC_FDB_AGING_TIME_SET,
FUNC_FDB_AGING_TIME_GET,
FUNC_FDB_ENTRY_GETNEXT_BYINDEX,
FUNC_FDB_ENTRY_EXTEND_GETNEXT,
FUNC_FDB_ENTRY_EXTEND_GETFIRST,
FUNC_FDB_ENTRY_UPDATE_BYPORT,
FUNC_PORT_FDB_LEARN_LIMIT_SET,
FUNC_PORT_FDB_LEARN_LIMIT_GET,
FUNC_PORT_FDB_LEARN_EXCEED_CMD_SET,
FUNC_PORT_FDB_LEARN_EXCEED_CMD_GET,
FUNC_FDB_PORT_LEARNED_MAC_COUNTER_GET,
FUNC_FDB_PORT_ADD,
FUNC_FDB_PORT_DEL,
FUNC_FDB_PORT_MACLIMIT_CTRL_SET,
FUNC_FDB_PORT_MACLIMIT_CTRL_GET,
FUNC_FDB_DEL_BY_FID,
};
#ifndef IN_FDB_MINI
sw_error_t
fal_fdb_entry_add(a_uint32_t dev_id, const fal_fdb_entry_t * entry);
sw_error_t
fal_fdb_rfs_set(a_uint32_t dev_id, const fal_fdb_rfs_t * entry);
sw_error_t
fal_fdb_rfs_del(a_uint32_t dev_id, const fal_fdb_rfs_t * entry);
#endif
sw_error_t
fal_fdb_entry_flush(a_uint32_t dev_id, a_uint32_t flag);
sw_error_t
fal_fdb_entry_del_byport(a_uint32_t dev_id, a_uint32_t port_id, a_uint32_t flag);
sw_error_t
fal_fdb_entry_del_bymac(a_uint32_t dev_id, const fal_fdb_entry_t *entry);
sw_error_t
fal_fdb_entry_getfirst(a_uint32_t dev_id, fal_fdb_entry_t * entry);
#ifndef IN_FDB_MINI
sw_error_t
fal_fdb_entry_getnext(a_uint32_t dev_id, fal_fdb_entry_t * entry);
#endif
sw_error_t
fal_fdb_entry_search(a_uint32_t dev_id, fal_fdb_entry_t * entry);
sw_error_t
fal_fdb_port_learn_set(a_uint32_t dev_id, fal_port_t port_id, a_bool_t enable);
#ifndef IN_FDB_MINI
sw_error_t
fal_fdb_port_learn_get(a_uint32_t dev_id, fal_port_t port_id, a_bool_t *enable);
#endif
sw_error_t
fal_fdb_port_learning_ctrl_set(a_uint32_t dev_id, fal_port_t port_id,
a_bool_t enable, fal_fwd_cmd_t cmd);
#ifndef IN_FDB_MINI
sw_error_t
fal_fdb_port_learning_ctrl_get(a_uint32_t dev_id, fal_port_t port_id,
a_bool_t *enable, fal_fwd_cmd_t *cmd);
#endif
sw_error_t
fal_fdb_port_stamove_ctrl_set(a_uint32_t dev_id, fal_port_t port_id,
a_bool_t enable, fal_fwd_cmd_t cmd);
#ifndef IN_FDB_MINI
sw_error_t
fal_fdb_port_stamove_ctrl_get(a_uint32_t dev_id, fal_port_t port_id,
a_bool_t *enable, fal_fwd_cmd_t *cmd);
#endif
sw_error_t
fal_fdb_aging_ctrl_set(a_uint32_t dev_id, a_bool_t enable);
#ifndef IN_FDB_MINI
sw_error_t
fal_fdb_aging_ctrl_get(a_uint32_t dev_id, a_bool_t * enable);
#endif
sw_error_t
fal_fdb_learning_ctrl_set(a_uint32_t dev_id, a_bool_t enable);
#ifndef IN_FDB_MINI
sw_error_t
fal_fdb_learning_ctrl_get(a_uint32_t dev_id, a_bool_t * enable);
sw_error_t
fal_fdb_vlan_ivl_svl_set(a_uint32_t dev_id, fal_fdb_smode smode);
sw_error_t
fal_fdb_vlan_ivl_svl_get(a_uint32_t dev_id, fal_fdb_smode * smode);
sw_error_t
fal_fdb_aging_time_set(a_uint32_t dev_id, a_uint32_t * time);
sw_error_t
fal_fdb_aging_time_get(a_uint32_t dev_id, a_uint32_t * time);
#endif
sw_error_t
fal_fdb_entry_getnext_byindex(a_uint32_t dev_id, a_uint32_t * iterator, fal_fdb_entry_t * entry);
sw_error_t
fal_fdb_entry_extend_getnext(a_uint32_t dev_id, fal_fdb_op_t * option,
fal_fdb_entry_t * entry);
sw_error_t
fal_fdb_entry_extend_getfirst(a_uint32_t dev_id, fal_fdb_op_t * option,
fal_fdb_entry_t * entry);
#ifndef IN_FDB_MINI
sw_error_t
fal_fdb_entry_update_byport(a_uint32_t dev_id, fal_port_t old_port, fal_port_t new_port,
a_uint32_t fid, fal_fdb_op_t * option);
sw_error_t
fal_port_fdb_learn_limit_set(a_uint32_t dev_id, fal_port_t port_id,
a_bool_t enable, a_uint32_t cnt);
sw_error_t
fal_port_fdb_learn_limit_get(a_uint32_t dev_id, fal_port_t port_id,
a_bool_t * enable, a_uint32_t * cnt);
sw_error_t
fal_port_fdb_learn_exceed_cmd_set(a_uint32_t dev_id, fal_port_t port_id,
fal_fwd_cmd_t cmd);
sw_error_t
fal_port_fdb_learn_exceed_cmd_get(a_uint32_t dev_id, fal_port_t port_id,
fal_fwd_cmd_t * cmd);
sw_error_t
fal_fdb_port_learned_mac_counter_get(a_uint32_t dev_id, fal_port_t port_id,
a_uint32_t * cnt);
sw_error_t
fal_fdb_learn_limit_set(a_uint32_t dev_id, a_bool_t enable, a_uint32_t cnt);
sw_error_t
fal_fdb_learn_limit_get(a_uint32_t dev_id, a_bool_t * enable, a_uint32_t * cnt);
sw_error_t
fal_fdb_learn_exceed_cmd_set(a_uint32_t dev_id, fal_fwd_cmd_t cmd);
sw_error_t
fal_fdb_learn_exceed_cmd_get(a_uint32_t dev_id, fal_fwd_cmd_t * cmd);
sw_error_t
fal_fdb_resv_add(a_uint32_t dev_id, fal_fdb_entry_t * entry);
sw_error_t
fal_fdb_resv_del(a_uint32_t dev_id, fal_fdb_entry_t * entry);
sw_error_t
fal_fdb_resv_find(a_uint32_t dev_id, fal_fdb_entry_t * entry);
sw_error_t
fal_fdb_resv_iterate(a_uint32_t dev_id, a_uint32_t * iterator, fal_fdb_entry_t * entry);
sw_error_t
fal_fdb_port_learn_static_set(a_uint32_t dev_id, fal_port_t port_id, a_bool_t enable);
sw_error_t
fal_fdb_port_learn_static_get(a_uint32_t dev_id, fal_port_t port_id,
a_bool_t * enable);
sw_error_t
fal_fdb_port_add(a_uint32_t dev_id, a_uint32_t fid, fal_mac_addr_t * addr, fal_port_t port_id);
sw_error_t
fal_fdb_port_del(a_uint32_t dev_id, a_uint32_t fid, fal_mac_addr_t * addr, fal_port_t port_id);
sw_error_t
fal_fdb_port_maclimit_ctrl_set(a_uint32_t dev_id, fal_port_t port_id, fal_maclimit_ctrl_t * maclimit_ctrl);
sw_error_t
fal_fdb_port_maclimit_ctrl_get(a_uint32_t dev_id, fal_port_t port_id, fal_maclimit_ctrl_t * maclimit_ctrl);
#endif
sw_error_t
fal_fdb_entry_del_byfid(a_uint32_t dev_id, a_uint16_t fid, a_uint32_t flag);
#define fal_fdb_add fal_fdb_entry_add
#define fal_fdb_del_all fal_fdb_entry_flush
#define fal_fdb_del_by_port fal_fdb_entry_del_byport
#define fal_fdb_del_by_mac fal_fdb_entry_del_bymac
#define fal_fdb_first fal_fdb_entry_getfirst
#define fal_fdb_next fal_fdb_entry_getnext
#define fal_fdb_find fal_fdb_entry_search
#define fal_fdb_age_ctrl_set fal_fdb_aging_ctrl_set
#define fal_fdb_age_ctrl_get fal_fdb_aging_ctrl_get
#define fal_fdb_age_time_set fal_fdb_aging_time_set
#define fal_fdb_age_time_get fal_fdb_aging_time_get
#define fal_fdb_iterate fal_fdb_entry_getnext_byindex
#define fal_fdb_extend_next fal_fdb_entry_extend_getnext
#define fal_fdb_extend_first fal_fdb_entry_extend_getfirst
#define fal_fdb_transfer fal_fdb_entry_update_byport
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* _FAL_FDB_H_ */
/**
* @}
*/