From: Donald Sharp Date: Fri, 2 Dec 2016 17:48:06 +0000 (-0500) Subject: pimd: With igmpv2 turned on don't accept 224.0.0.0/24 groups X-Git-Tag: frr-3.0-branchpoint~64^2~10^2~41 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=06d1c450f355efa63dfe0cbe835db6d58ebb2672;p=matthieu%2Ffrr.git pimd: With igmpv2 turned on don't accept 224.0.0.0/24 groups When a group is in the 224.0.0.0/24 range and we have igmp v2 turned on do not allow it to be considered for inclusion as a mroute. Ticket: CM-13855 Signed-off-by: Donald Sharp Reviewed-by: --- diff --git a/pimd/pim_igmp.c b/pimd/pim_igmp.c index 1ca79a5a54..456b9ad742 100644 --- a/pimd/pim_igmp.c +++ b/pimd/pim_igmp.c @@ -1057,6 +1057,12 @@ struct igmp_group *igmp_add_group_by_addr(struct igmp_sock *igmp, return NULL; } + if (pim_is_group_224_0_0_0_24 (group_addr)) + { + zlog_warn("%s: Group specified is part of 224.0.0.0/24", + __PRETTY_FUNCTION__); + return NULL; + } /* Non-existant group is created as INCLUDE {empty}: diff --git a/pimd/pim_util.c b/pimd/pim_util.c index 087101e1a2..1b1b5ef8f3 100644 --- a/pimd/pim_util.c +++ b/pimd/pim_util.c @@ -106,6 +106,26 @@ void pim_pkt_dump(const char *label, const uint8_t *buf, int size) zlog_hexdump(buf, size); } +int +pim_is_group_224_0_0_0_24 (struct in_addr group_addr) +{ + static int first = 1; + static struct prefix group_224; + struct prefix group; + + if (first) + { + str2prefix ("224.0.0.0/24", &group_224); + first = 0; + } + + group.family = AF_INET; + group.u.prefix4 = group_addr; + group.prefixlen = 32; + + return prefix_match (&group_224, &group); +} + int pim_is_group_224_4 (struct in_addr group_addr) { diff --git a/pimd/pim_util.h b/pimd/pim_util.h index a948f81ce8..3a7844b402 100644 --- a/pimd/pim_util.h +++ b/pimd/pim_util.h @@ -33,5 +33,6 @@ uint16_t igmp_msg_decode8to16(uint8_t code); void pim_pkt_dump(const char *label, const uint8_t *buf, int size); +int pim_is_group_224_0_0_0_24 (struct in_addr group_addr); int pim_is_group_224_4 (struct in_addr group_addr); #endif /* PIM_UTIL_H */