summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Lamparter <equinox@opensourcerouting.org>2012-11-27 01:10:29 +0000
committerDavid Lamparter <equinox@opensourcerouting.org>2012-12-12 15:38:07 +0100
commit318c8040abc1b8a737c941382e8aca82e546da09 (patch)
tree3eb37c0549c27b1db1a08aadab6166728b663348
parentf818c8f3fb9c98490df29e99aa9cddde8e0296d5 (diff)
isisd: always join all IS-IS multicast groups
The socket is only created once when an interface is brought up, and the multicast groups were joined according to configuration at that point. This breaks when later switching an interface to another IS-IS level. Since, for a separate conformance issue (ANVL ISIS-6.4), we should be inspecting the destination address anyway, the simplest fix here is to just join all groups unconditionally. There shouldn't be much traffic on these anyway, worst case we might be picking up some unrelated multicast groups due to NIC filter aliasing though... Signed-off-by: David Lamparter <equinox@opensourcerouting.org> Tested-by: Martin Winter <mwinter@opensourcerouting.org>
-rw-r--r--isisd/isis_dlpi.c10
-rw-r--r--isisd/isis_pfpacket.c12
2 files changed, 8 insertions, 14 deletions
diff --git a/isisd/isis_dlpi.c b/isisd/isis_dlpi.c
index 73b6d3e7..0a82718d 100644
--- a/isisd/isis_dlpi.c
+++ b/isisd/isis_dlpi.c
@@ -442,13 +442,9 @@ open_dlpi_dev (struct isis_circuit *circuit)
* 8.4.2 - Broadcast subnetwork IIH PDUs
*/
retval = 0;
- if (circuit->is_type & IS_LEVEL_1)
- {
- retval |= dlpimcast (fd, ALL_L1_ISS);
- retval |= dlpimcast (fd, ALL_ISS);
- }
- if (circuit->is_type & IS_LEVEL_2)
- retval |= dlpimcast (fd, ALL_L2_ISS);
+ retval |= dlpimcast (fd, ALL_L1_ISS);
+ retval |= dlpimcast (fd, ALL_ISS);
+ retval |= dlpimcast (fd, ALL_L2_ISS);
if (retval != 0)
{
diff --git a/isisd/isis_pfpacket.c b/isisd/isis_pfpacket.c
index 42947b22..e5589aea 100644
--- a/isisd/isis_pfpacket.c
+++ b/isisd/isis_pfpacket.c
@@ -142,16 +142,14 @@ open_packet_socket (struct isis_circuit *circuit)
* 8.4.2 - Broadcast subnetwork IIH PDUs
* FIXME: is there a case only one will fail??
*/
- if (circuit->is_type & IS_LEVEL_1)
- /* joining ALL_L1_ISS */
- retval = isis_multicast_join (circuit->fd, 1,
+ /* joining ALL_L1_ISS */
+ retval |= isis_multicast_join (circuit->fd, 1,
circuit->interface->ifindex);
- if (circuit->is_type & IS_LEVEL_2)
- /* joining ALL_L2_ISS */
- retval = isis_multicast_join (circuit->fd, 2,
+ /* joining ALL_L2_ISS */
+ retval |= isis_multicast_join (circuit->fd, 2,
circuit->interface->ifindex);
/* joining ALL_ISS (used in RFC 5309 p2p-over-lan as well) */
- retval = isis_multicast_join (circuit->fd, 3,
+ retval |= isis_multicast_join (circuit->fd, 3,
circuit->interface->ifindex);
}
else