xref: /original-bsd/sys/netinet/igmp_var.h (revision 562686c3)
1 /*
2  * Copyright (c) 1988 Stephen Deering.
3  * Copyright (c) 1992 Regents of the University of California.
4  * All rights reserved.
5  *
6  * This code is derived from software contributed to Berkeley by
7  * Stephen Deering of Stanford University.
8  *
9  * %sccs.include.redist.c%
10  *
11  *	@(#)igmp_var.h	7.2 (Berkeley) 01/08/93
12  */
13 
14 /*
15  * Internet Group Management Protocol (IGMP),
16  * implementation-specific definitions.
17  *
18  * Written by Steve Deering, Stanford, May 1988.
19  *
20  * MULTICAST 1.1
21  */
22 
23 struct igmpstat {
24 	u_long	igps_rcv_total;		/* total IGMP messages received */
25 	u_long	igps_rcv_tooshort;	/* received with too few bytes */
26 	u_long	igps_rcv_badsum;	/* received with bad checksum */
27 	u_long	igps_rcv_queries;	/* received membership queries */
28 	u_long	igps_rcv_badqueries;	/* received invalid queries */
29 	u_long	igps_rcv_reports;	/* received membership reports */
30 	u_long	igps_rcv_badreports;	/* received invalid reports */
31 	u_long	igps_rcv_ourreports;	/* received reports for our groups */
32 	u_long	igps_snd_reports;	/* sent membership reports */
33 };
34 
35 #ifdef KERNEL
36 struct igmpstat igmpstat;
37 
38 /*
39  * Macro to compute a random timer value between 1 and (IGMP_MAX_REPORTING_
40  * DELAY * countdown frequency).  We generate a "random" number by adding
41  * the total number of IP packets received, our primary IP address, and the
42  * multicast address being timed-out.  The 4.3 random() routine really
43  * ought to be available in the kernel!
44  */
45 #define IGMP_RANDOM_DELAY(multiaddr) \
46 	/* struct in_addr multiaddr; */ \
47 	( (ipstat.ips_total + \
48 	   ntohl(IA_SIN(in_ifaddr)->sin_addr.s_addr) + \
49 	   ntohl((multiaddr).s_addr) \
50 	  ) \
51 	  % (IGMP_MAX_HOST_REPORT_DELAY * PR_FASTHZ) + 1 \
52 	)
53 
54 void	igmp_init __P(());
55 void	igmp_input __P((struct mbuf *, struct ifnet *));
56 void	igmp_joingroup __P((struct in_multi *));
57 void	igmp_leavegroup __P((struct in_multi *));
58 void	igmp_fasttimo __P(());
59 #endif
60