uint16_t recv_checksum;
uint16_t checksum;
+ if (igmp->mtrace_only)
+ return 0;
+
memcpy(&group_addr, igmp_msg + 4, sizeof(struct in_addr));
ifp = igmp->interface;
on_trace(__PRETTY_FUNCTION__, igmp->interface, from);
+ if (igmp->mtrace_only)
+ return 0;
+
if (igmp_msg_len != IGMP_V12_MSG_SIZE) {
zlog_warn(
"Recv IGMP report v1 from %s on %s: size=%d other than correct=%d",
return igmp_mtrace_recv_response(igmp, ip_hdr, ip_hdr->ip_src,
from_str, igmp_msg,
igmp_msg_len);
- break;
case PIM_IGMP_MTRACE_QUERY_REQUEST:
return igmp_mtrace_recv_qry_req(igmp, ip_hdr, ip_hdr->ip_src,
from_str, igmp_msg,
}
static struct igmp_sock *igmp_sock_new(int fd, struct in_addr ifaddr,
- struct interface *ifp)
+ struct interface *ifp, int mtrace_only)
{
struct pim_interface *pim_ifp;
struct igmp_sock *igmp;
pim_ifp->igmp_default_robustness_variable;
igmp->sock_creation = pim_time_monotonic_sec();
+ if (mtrace_only) {
+ igmp->mtrace_only = mtrace_only;
+ return igmp;
+ }
+
+ igmp->mtrace_only = false;
+
/*
igmp_startup_mode_on() will reset QQI:
struct igmp_sock *pim_igmp_sock_add(struct list *igmp_sock_list,
struct in_addr ifaddr,
- struct interface *ifp)
+ struct interface *ifp,
+ bool mtrace_only)
{
struct pim_interface *pim_ifp;
struct igmp_sock *igmp;
return 0;
}
- igmp = igmp_sock_new(fd, ifaddr, ifp);
+ igmp = igmp_sock_new(fd, ifaddr, ifp, mtrace_only);
if (!igmp) {
zlog_err("%s %s: igmp_sock_new() failure", __FILE__,
__PRETTY_FUNCTION__);