qcacmn: Add AST type to distinquish bss on STA
When a BSS peer gets associated with vap configured in sta mode, the ast type associated with that entry should be different from that of regular static entries, The reason being bridge on root AP can pick up the mac address of AP VAP. Change-Id: Ie322a015d883e2712f41623f71ccbc255b99baf3
This commit is contained in:

committed by
nshrivas

parent
8a339e8a87
commit
273407908f
@@ -312,6 +312,7 @@ enum cdp_txrx_ast_entry_type {
|
|||||||
CDP_TXRX_AST_TYPE_WDS, /* WDS peer ast entry type*/
|
CDP_TXRX_AST_TYPE_WDS, /* WDS peer ast entry type*/
|
||||||
CDP_TXRX_AST_TYPE_MEC, /* Multicast echo ast entry type */
|
CDP_TXRX_AST_TYPE_MEC, /* Multicast echo ast entry type */
|
||||||
CDP_TXRX_AST_TYPE_WDS_HM, /* HM WDS entry */
|
CDP_TXRX_AST_TYPE_WDS_HM, /* HM WDS entry */
|
||||||
|
CDP_TXRX_AST_TYPE_STA_BSS, /* BSS entry(STA mode) */
|
||||||
CDP_TXRX_AST_TYPE_MAX
|
CDP_TXRX_AST_TYPE_MAX
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -517,7 +517,8 @@ static void dp_wds_reset_ast_wifi3(struct cdp_soc_t *soc_hdl,
|
|||||||
|
|
||||||
if (ast_entry) {
|
if (ast_entry) {
|
||||||
if ((ast_entry->type != CDP_TXRX_AST_TYPE_STATIC) &&
|
if ((ast_entry->type != CDP_TXRX_AST_TYPE_STATIC) &&
|
||||||
(ast_entry->type != CDP_TXRX_AST_TYPE_SELF)) {
|
(ast_entry->type != CDP_TXRX_AST_TYPE_SELF) &&
|
||||||
|
(ast_entry->type != CDP_TXRX_AST_TYPE_STA_BSS)) {
|
||||||
ast_entry->is_active = TRUE;
|
ast_entry->is_active = TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -552,7 +553,9 @@ static void dp_wds_reset_ast_table_wifi3(struct cdp_soc_t *soc_hdl,
|
|||||||
if ((ase->type ==
|
if ((ase->type ==
|
||||||
CDP_TXRX_AST_TYPE_STATIC) ||
|
CDP_TXRX_AST_TYPE_STATIC) ||
|
||||||
(ase->type ==
|
(ase->type ==
|
||||||
CDP_TXRX_AST_TYPE_SELF))
|
CDP_TXRX_AST_TYPE_SELF) ||
|
||||||
|
(ase->type ==
|
||||||
|
CDP_TXRX_AST_TYPE_STA_BSS))
|
||||||
continue;
|
continue;
|
||||||
ase->is_active = TRUE;
|
ase->is_active = TRUE;
|
||||||
}
|
}
|
||||||
@@ -590,7 +593,9 @@ static void dp_wds_flush_ast_table_wifi3(struct cdp_soc_t *soc_hdl)
|
|||||||
if ((ase->type ==
|
if ((ase->type ==
|
||||||
CDP_TXRX_AST_TYPE_STATIC) ||
|
CDP_TXRX_AST_TYPE_STATIC) ||
|
||||||
(ase->type ==
|
(ase->type ==
|
||||||
CDP_TXRX_AST_TYPE_SELF))
|
CDP_TXRX_AST_TYPE_SELF) ||
|
||||||
|
(ase->type ==
|
||||||
|
CDP_TXRX_AST_TYPE_STA_BSS))
|
||||||
continue;
|
continue;
|
||||||
dp_peer_del_ast(soc, ase);
|
dp_peer_del_ast(soc, ase);
|
||||||
}
|
}
|
||||||
@@ -867,7 +872,7 @@ static void dp_print_ast_stats(struct dp_soc *soc)
|
|||||||
struct dp_peer *peer;
|
struct dp_peer *peer;
|
||||||
struct dp_ast_entry *ase, *tmp_ase;
|
struct dp_ast_entry *ase, *tmp_ase;
|
||||||
char type[CDP_TXRX_AST_TYPE_MAX][10] = {
|
char type[CDP_TXRX_AST_TYPE_MAX][10] = {
|
||||||
"NONE", "STATIC", "SELF", "WDS", "MEC", "HMWDS"};
|
"NONE", "STATIC", "SELF", "WDS", "MEC", "HMWDS", "BSS"};
|
||||||
|
|
||||||
DP_PRINT_STATS("AST Stats:");
|
DP_PRINT_STATS("AST Stats:");
|
||||||
DP_PRINT_STATS(" Entries Added = %d", soc->stats.ast.added);
|
DP_PRINT_STATS(" Entries Added = %d", soc->stats.ast.added);
|
||||||
|
@@ -515,6 +515,8 @@ int dp_peer_add_ast(struct dp_soc *soc,
|
|||||||
case CDP_TXRX_AST_TYPE_STATIC:
|
case CDP_TXRX_AST_TYPE_STATIC:
|
||||||
peer->self_ast_entry = ast_entry;
|
peer->self_ast_entry = ast_entry;
|
||||||
ast_entry->type = CDP_TXRX_AST_TYPE_STATIC;
|
ast_entry->type = CDP_TXRX_AST_TYPE_STATIC;
|
||||||
|
if (peer->vdev->opmode == wlan_op_mode_sta)
|
||||||
|
ast_entry->type = CDP_TXRX_AST_TYPE_STA_BSS;
|
||||||
break;
|
break;
|
||||||
case CDP_TXRX_AST_TYPE_SELF:
|
case CDP_TXRX_AST_TYPE_SELF:
|
||||||
peer->self_ast_entry = ast_entry;
|
peer->self_ast_entry = ast_entry;
|
||||||
@@ -549,7 +551,8 @@ int dp_peer_add_ast(struct dp_soc *soc,
|
|||||||
qdf_mem_copy(next_node_mac, peer->mac_addr.raw, 6);
|
qdf_mem_copy(next_node_mac, peer->mac_addr.raw, 6);
|
||||||
|
|
||||||
if ((ast_entry->type != CDP_TXRX_AST_TYPE_STATIC) &&
|
if ((ast_entry->type != CDP_TXRX_AST_TYPE_STATIC) &&
|
||||||
(ast_entry->type != CDP_TXRX_AST_TYPE_SELF)) {
|
(ast_entry->type != CDP_TXRX_AST_TYPE_SELF) &&
|
||||||
|
(ast_entry->type != CDP_TXRX_AST_TYPE_STA_BSS)) {
|
||||||
if (QDF_STATUS_SUCCESS ==
|
if (QDF_STATUS_SUCCESS ==
|
||||||
soc->cdp_soc.ol_ops->peer_add_wds_entry(
|
soc->cdp_soc.ol_ops->peer_add_wds_entry(
|
||||||
peer->vdev->osif_vdev,
|
peer->vdev->osif_vdev,
|
||||||
@@ -630,7 +633,8 @@ int dp_peer_update_ast(struct dp_soc *soc, struct dp_peer *peer,
|
|||||||
struct dp_peer *old_peer;
|
struct dp_peer *old_peer;
|
||||||
|
|
||||||
if ((ast_entry->type == CDP_TXRX_AST_TYPE_STATIC) ||
|
if ((ast_entry->type == CDP_TXRX_AST_TYPE_STATIC) ||
|
||||||
(ast_entry->type == CDP_TXRX_AST_TYPE_SELF))
|
(ast_entry->type == CDP_TXRX_AST_TYPE_SELF) ||
|
||||||
|
(ast_entry->type == CDP_TXRX_AST_TYPE_STA_BSS))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
old_peer = ast_entry->peer;
|
old_peer = ast_entry->peer;
|
||||||
|
@@ -464,7 +464,8 @@ dp_rx_wds_srcport_learn(struct dp_soc *soc,
|
|||||||
sa_peer = ast->peer;
|
sa_peer = ast->peer;
|
||||||
|
|
||||||
if ((ast->type != CDP_TXRX_AST_TYPE_STATIC) &&
|
if ((ast->type != CDP_TXRX_AST_TYPE_STATIC) &&
|
||||||
(ast->type != CDP_TXRX_AST_TYPE_SELF)) {
|
(ast->type != CDP_TXRX_AST_TYPE_SELF) &&
|
||||||
|
(ast->type != CDP_TXRX_AST_TYPE_STA_BSS)) {
|
||||||
if (ast->pdev_id != ta_peer->vdev->pdev->pdev_id) {
|
if (ast->pdev_id != ta_peer->vdev->pdev->pdev_id) {
|
||||||
ret = dp_peer_add_ast(soc,
|
ret = dp_peer_add_ast(soc,
|
||||||
ta_peer, wds_src_mac,
|
ta_peer, wds_src_mac,
|
||||||
|
Reference in New Issue
Block a user