void change_igmp_snooping_control(u32 igmp_snooping_enabled) { if (igmp_snooping_enabled) igmp_snooping_enabled = 1; if (g_igmp_snooping_enabled != igmp_snooping_enabled) { printk("%s - IGMP/MLD snooping: %d\n", RTL8367_DEVNAME, igmp_snooping_enabled); g_igmp_snooping_enabled = igmp_snooping_enabled; if (!igmp_snooping_enabled) { del_timer_sync(&g_membership_expired_timer); spin_lock_bh(&g_lut_lock); asic_enum_mcast_table(1); spin_unlock_bh(&g_lut_lock); spin_lock_bh(&g_mtb_lock); mcast_table_clear(); spin_unlock_bh(&g_mtb_lock); } else { /* set expired timer at least group_expired time */ mod_timer(&g_membership_expired_timer, jiffies + (MCAST_GROUP_MEMBERSHIP_EXPIRED + 10 * HZ)); } } }
void dump_mcast_table(void) { printk("%s - dump multicast LUT table:\n", RTL8367_DEVNAME); spin_lock_bh(&g_lut_lock); asic_enum_mcast_table(0); spin_unlock_bh(&g_lut_lock); }
void igmp_sn_dump_mcast_table(void) { printk("%s - dump multicast LUT table:\n", RTL8367_DEVNAME); mutex_lock(&g_lut_lock); asic_enum_mcast_table(0); mutex_unlock(&g_lut_lock); }
static void mcast_reset_table_and_cancel(void) { del_timer_sync(&g_membership_expired_timer); cancel_work_sync(&g_membership_expired_work); mutex_lock(&g_lut_lock); asic_enum_mcast_table(1); mutex_unlock(&g_lut_lock); mutex_lock(&g_mtb_lock); mcast_table_clear(); mutex_unlock(&g_mtb_lock); }
void reset_igmp_snooping_table(void) { if (!g_igmp_snooping_enabled) return; del_timer_sync(&g_membership_expired_timer); spin_lock_bh(&g_lut_lock); asic_enum_mcast_table(1); spin_unlock_bh(&g_lut_lock); spin_lock_bh(&g_mtb_lock); mcast_table_clear(); spin_unlock_bh(&g_mtb_lock); /* set expired timer at least group_expired time */ mod_timer(&g_membership_expired_timer, jiffies + (MCAST_GROUP_MEMBERSHIP_EXPIRED + 10 * HZ)); printk("%s - reset IGMP/MLD table and static LUT entries\n", RTL8367_DEVNAME); }