diff options
| author | Donatas Abraitis <donatas@opensourcerouting.org> | 2022-03-14 09:26:22 +0200 | 
|---|---|---|
| committer | Donatas Abraitis <donatas@opensourcerouting.org> | 2022-03-14 10:50:28 +0200 | 
| commit | 278912eabf991b593ff67202eb4f5a93b4a0b469 (patch) | |
| tree | 775a8db29ee1b80ba32411ae423b62a6a297bd50 /pimd/pim_igmp.c | |
| parent | 7665a2e1cdb2bfd898921c13226879c69eb2b4fb (diff) | |
pimd: Add additional IGMP stats (generic/group specific queries sent)
```
exit1-debian-11# sh ip igmp statistics
IGMP statistics
Interface            : global
V1 query             : 0
V2 query             : 0
V3 query             : 6
V2 leave             : 0
V1 report            : 0
V2 report            : 0
V3 report            : 14
mtrace response      : 0
mtrace request       : 0
unsupported          : 0
joins failed         : 0
joins sent           : 16
general queries sent : 6
group queries sent   : 4
total groups         : 5
total source groups  : 1
exit1-debian-11# sh ip igmp statistics json
{
  "global":{
    "name":"global",
    "queryV1":0,
    "queryV2":0,
    "queryV3":6,
    "leaveV2":0,
    "reportV1":0,
    "reportV2":0,
    "reportV3":18,
    "mtraceResponse":0,
    "mtraceRequest":0,
    "unsupported":0,
    "totalGroups":5,
    "totalSourceGroups":1,
    "joinsFailed":0,
    "joinsSent":16,
    "generalQueriesSent":6,
    "groupQueriesSent":4
  }
}
```
Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
Diffstat (limited to 'pimd/pim_igmp.c')
| -rw-r--r-- | pimd/pim_igmp.c | 54 | 
1 files changed, 27 insertions, 27 deletions
diff --git a/pimd/pim_igmp.c b/pimd/pim_igmp.c index fcb335a5b3..cfab9265fd 100644 --- a/pimd/pim_igmp.c +++ b/pimd/pim_igmp.c @@ -909,13 +909,10 @@ static void pim_igmp_general_query(struct thread *t)  			   querier_str, dst_str, igmp->interface->name);  	} -	igmp_send_query(pim_ifp->igmp_version, 0 /* igmp_group */, igmp->fd, -			igmp->interface->name, query_buf, sizeof(query_buf), -			0 /* num_sources */, dst_addr, group_addr, -			pim_ifp->gm_query_max_response_time_dsec, -			1 /* s_flag: always set for general queries */, -			igmp->querier_robustness_variable, -			igmp->querier_query_interval); +	igmp_send_query(pim_ifp->igmp_version, 0 /* igmp_group */, query_buf, +			sizeof(query_buf), 0 /* num_sources */, dst_addr, +			group_addr, pim_ifp->gm_query_max_response_time_dsec, +			1 /* s_flag: always set for general queries */, igmp);  	pim_igmp_general_query_on(igmp);  } @@ -1454,23 +1451,29 @@ struct gm_group *igmp_add_group_by_addr(struct gm_sock *igmp,  	return group;  } -void igmp_send_query(int igmp_version, struct gm_group *group, int fd, -		     const char *ifname, char *query_buf, int query_buf_size, -		     int num_sources, struct in_addr dst_addr, -		     struct in_addr group_addr, +void igmp_send_query(int igmp_version, struct gm_group *group, char *query_buf, +		     int query_buf_size, int num_sources, +		     struct in_addr dst_addr, struct in_addr group_addr,  		     int query_max_response_time_dsec, uint8_t s_flag, -		     uint8_t querier_robustness_variable, -		     uint16_t querier_query_interval) +		     struct gm_sock *igmp)  { +	if (pim_addr_is_any(group_addr) && +	    ntohl(dst_addr.s_addr) == INADDR_ALLHOSTS_GROUP) +		igmp->igmp_stats.general_queries_sent++; +	else if (group) +		igmp->igmp_stats.group_queries_sent++; +  	if (igmp_version == 3) { -		igmp_v3_send_query(group, fd, ifname, query_buf, query_buf_size, -				   num_sources, dst_addr, group_addr, +		igmp_v3_send_query(group, igmp->fd, igmp->interface->name, +				   query_buf, query_buf_size, num_sources, +				   dst_addr, group_addr,  				   query_max_response_time_dsec, s_flag, -				   querier_robustness_variable, -				   querier_query_interval); +				   igmp->querier_robustness_variable, +				   igmp->querier_query_interval);  	} else if (igmp_version == 2) { -		igmp_v2_send_query(group, fd, ifname, query_buf, dst_addr, -				   group_addr, query_max_response_time_dsec); +		igmp_v2_send_query(group, igmp->fd, igmp->interface->name, +				   query_buf, dst_addr, group_addr, +				   query_max_response_time_dsec);  	}  } @@ -1501,13 +1504,10 @@ void igmp_send_query_on_intf(struct interface *ifp, int igmp_ver)  		char query_buf[query_buf_size]; -		igmp_send_query(igmp_ver, 0 /* igmp_group */, igmp->fd, -				igmp->interface->name, query_buf, -				sizeof(query_buf), 0 /* num_sources */, -				dst_addr, group_addr, -				pim_ifp->gm_query_max_response_time_dsec, -				1 /* s_flag: always set for general queries */, -				igmp->querier_robustness_variable, -				igmp->querier_query_interval); +		igmp_send_query( +			igmp_ver, 0 /* igmp_group */, query_buf, +			sizeof(query_buf), 0 /* num_sources */, dst_addr, +			group_addr, pim_ifp->gm_query_max_response_time_dsec, +			1 /* s_flag: always set for general queries */, igmp);  	}  }  | 
