summaryrefslogtreecommitdiff
path: root/cesar/cp/sta/action/src/drv.c
diff options
context:
space:
mode:
Diffstat (limited to 'cesar/cp/sta/action/src/drv.c')
-rw-r--r--cesar/cp/sta/action/src/drv.c30
1 files changed, 12 insertions, 18 deletions
diff --git a/cesar/cp/sta/action/src/drv.c b/cesar/cp/sta/action/src/drv.c
index 837399018d..58a0984931 100644
--- a/cesar/cp/sta/action/src/drv.c
+++ b/cesar/cp/sta/action/src/drv.c
@@ -550,35 +550,29 @@ cp_sta_action_drv__drv_mcast_set_list_req (cp_t *ctx, cp_mme_rx_t *mme)
dbg_assert (mme);
cp_msg_drv_result_t result = CP_MSG_DRV_RESULT_SUCCESS;
+ igmp_groups_t *igmp_groups = NULL;
- mac_t groups[MCAST_GROUP_MAX_NB];
- int nb_groups;
- int nb_members[MCAST_GROUP_MAX_NB];
- mac_t members[MCAST_GROUP_MAX_NB][MCAST_MEMBER_MAX_NB];
+ igmp_groups = cl_get_igmp_groups (ctx->cl);
- if (cp_msg_drv_mcast_set_list_req_receive (ctx, mme, &nb_groups, groups,
- nb_members, members))
+ if (cp_msg_drv_mcast_set_list_req_receive (ctx, mme, &igmp_groups->nb,
+ igmp_groups->group_mac,
+ igmp_groups->nb_total_members,
+ igmp_groups->member_mac))
{
/* Create a new table. */
cl_mactotei_blk_t *new_table = cl_mactotei_new ();
/* Copy entries except the groups entries. */
- cl_mactotei_copy_except_tag (ctx->cl, new_table, MAC_TEI_BCAST);
+ cl_mactotei_copy_except_tei (ctx->cl, new_table, MAC_TEI_BCAST);
/* Add new entries. */
- int group;
- for (group = 0; group < nb_groups; group++)
+ uint g;
+ for (g = 0; g < igmp_groups->nb; g++)
{
- dbg_assert (nb_members[group] == 1);
- /* Get the tei from the mactotei table. */
- cp_tei_t tei = cl_mactotei_table_find_tei_from_mac (
- ctx->cl, members[group][0]);
-
- /* Add bridged destination address. */
- if (MAC_TEI_IS_STA(tei))
- cl_mactotei_addr_add (new_table, groups[group], tei,
- MAC_TEI_BCAST);
+ cl_mactotei_addr_add (new_table, igmp_groups->group_mac[g],
+ MAC_TEI_BCAST, g);
}
/* Use new MAC to TEI table. */
cl_mactotei_use_table (ctx->cl, new_table);
+ cl_update_igmp_groups (ctx->cl);
}
else
result = CP_MSG_DRV_RESULT_FAILURE;