diff options
Diffstat (limited to 'pimd')
-rw-r--r-- | pimd/pim_igmp.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/pimd/pim_igmp.c b/pimd/pim_igmp.c index 176470e20..2d1dea69a 100644 --- a/pimd/pim_igmp.c +++ b/pimd/pim_igmp.c @@ -717,6 +717,19 @@ int pim_igmp_packet(struct igmp_sock *igmp, char *buf, size_t len) from_str, to_str, igmp->interface->name, len, ip_hlen, ip_hdr->ip_p); } + /* + * When pim starts up we are joining the 224.0.0.13 and 224.0.0.22 multicast + * groups. This is causing the kernel to create a igmp packet that pim + * turns around and receives. Therefor if we are the originator + * of the igmp packet then we can probably just ignore it. + */ + if (ip_hdr->ip_src.s_addr == igmp->ifaddr.s_addr) + { + if (PIM_DEBUG_IGMP_PACKETS) + zlog_debug ("Received IGMP packet from myself, ignoring"); + return -1; + } + if (ip_hdr->ip_p != PIM_IP_PROTO_IGMP) { zlog_warn("IP packet protocol=%d is not IGMP=%d", ip_hdr->ip_p, PIM_IP_PROTO_IGMP); |