xref: /csrg-svn/sys/netinet/igmp_var.h (revision 63907)
154820Ssklower /*
254820Ssklower  * Copyright (c) 1988 Stephen Deering.
3*63907Sbostic  * Copyright (c) 1992, 1993
4*63907Sbostic  *	The Regents of the University of California.  All rights reserved.
554820Ssklower  *
654820Ssklower  * This code is derived from software contributed to Berkeley by
754820Ssklower  * Stephen Deering of Stanford University.
854820Ssklower  *
954820Ssklower  * %sccs.include.redist.c%
1054820Ssklower  *
11*63907Sbostic  *	@(#)igmp_var.h	8.1 (Berkeley) 07/19/93
1254820Ssklower  */
1354820Ssklower 
1454820Ssklower /*
1554820Ssklower  * Internet Group Management Protocol (IGMP),
1654820Ssklower  * implementation-specific definitions.
1754820Ssklower  *
1854820Ssklower  * Written by Steve Deering, Stanford, May 1988.
1954820Ssklower  *
2054820Ssklower  * MULTICAST 1.1
2154820Ssklower  */
2254820Ssklower 
2354820Ssklower struct igmpstat {
2457433Sandrew 	u_long	igps_rcv_total;		/* total IGMP messages received */
2557433Sandrew 	u_long	igps_rcv_tooshort;	/* received with too few bytes */
2657433Sandrew 	u_long	igps_rcv_badsum;	/* received with bad checksum */
2757433Sandrew 	u_long	igps_rcv_queries;	/* received membership queries */
2857433Sandrew 	u_long	igps_rcv_badqueries;	/* received invalid queries */
2957433Sandrew 	u_long	igps_rcv_reports;	/* received membership reports */
3057433Sandrew 	u_long	igps_rcv_badreports;	/* received invalid reports */
3157433Sandrew 	u_long	igps_rcv_ourreports;	/* received reports for our groups */
3257433Sandrew 	u_long	igps_snd_reports;	/* sent membership reports */
3354820Ssklower };
3454820Ssklower 
3554820Ssklower #ifdef KERNEL
3654820Ssklower struct igmpstat igmpstat;
3754820Ssklower 
3854820Ssklower /*
3954820Ssklower  * Macro to compute a random timer value between 1 and (IGMP_MAX_REPORTING_
4054820Ssklower  * DELAY * countdown frequency).  We generate a "random" number by adding
4154820Ssklower  * the total number of IP packets received, our primary IP address, and the
4254820Ssklower  * multicast address being timed-out.  The 4.3 random() routine really
4354820Ssklower  * ought to be available in the kernel!
4454820Ssklower  */
4554820Ssklower #define IGMP_RANDOM_DELAY(multiaddr) \
4654820Ssklower 	/* struct in_addr multiaddr; */ \
4754820Ssklower 	( (ipstat.ips_total + \
4854820Ssklower 	   ntohl(IA_SIN(in_ifaddr)->sin_addr.s_addr) + \
4954820Ssklower 	   ntohl((multiaddr).s_addr) \
5054820Ssklower 	  ) \
5154820Ssklower 	  % (IGMP_MAX_HOST_REPORT_DELAY * PR_FASTHZ) + 1 \
5254820Ssklower 	)
5354820Ssklower 
5454820Ssklower void	igmp_init __P(());
5563906Smckusick void	igmp_input __P((struct mbuf *, int));
5654820Ssklower void	igmp_joingroup __P((struct in_multi *));
5754820Ssklower void	igmp_leavegroup __P((struct in_multi *));
5854820Ssklower void	igmp_fasttimo __P(());
5954820Ssklower #endif
60