summaryrefslogtreecommitdiff
path: root/ospfd/ospf_ism.c
diff options
context:
space:
mode:
Diffstat (limited to 'ospfd/ospf_ism.c')
-rw-r--r--ospfd/ospf_ism.c14
1 files changed, 3 insertions, 11 deletions
diff --git a/ospfd/ospf_ism.c b/ospfd/ospf_ism.c
index 17ec9b5a..dd0f0669 100644
--- a/ospfd/ospf_ism.c
+++ b/ospfd/ospf_ism.c
@@ -254,17 +254,6 @@ ospf_dr_election (struct ospf_interface *oi)
!IPV4_ADDR_SAME (&old_bdr, &BDR (oi)))
ospf_dr_change (oi->ospf, oi->nbrs);
- if (oi->type == OSPF_IFTYPE_BROADCAST || oi->type == OSPF_IFTYPE_POINTOPOINT)
- {
- /* Multicast group change. */
- if ((old_state != ISM_DR && old_state != ISM_Backup) &&
- (new_state == ISM_DR || new_state == ISM_Backup))
- ospf_if_add_alldrouters (oi->ospf, oi->address, oi->ifp->ifindex);
- else if ((old_state == ISM_DR || old_state == ISM_Backup) &&
- (new_state != ISM_DR && new_state != ISM_Backup))
- ospf_if_drop_alldrouters (oi->ospf, oi->address, oi->ifp->ifindex);
- }
-
return new_state;
}
@@ -581,6 +570,9 @@ ism_change_state (struct ospf_interface *oi, int state)
oi->state = state;
oi->state_change++;
+ /* Set multicast memberships appropriately for new state. */
+ ospf_if_set_multicast(oi);
+
if (old_state == ISM_Down || state == ISM_Down)
ospf_check_abr_status (oi->ospf);