Line data Source code
1 : /* $OpenBSD: igmp_var.h,v 1.13 2017/04/14 20:46:31 bluhm Exp $ */
2 : /* $NetBSD: igmp_var.h,v 1.9 1996/02/13 23:41:31 christos Exp $ */
3 :
4 : /*
5 : * Copyright (c) 1988 Stephen Deering.
6 : * Copyright (c) 1992, 1993
7 : * The Regents of the University of California. All rights reserved.
8 : *
9 : * This code is derived from software contributed to Berkeley by
10 : * Stephen Deering of Stanford University.
11 : *
12 : * Redistribution and use in source and binary forms, with or without
13 : * modification, are permitted provided that the following conditions
14 : * are met:
15 : * 1. Redistributions of source code must retain the above copyright
16 : * notice, this list of conditions and the following disclaimer.
17 : * 2. Redistributions in binary form must reproduce the above copyright
18 : * notice, this list of conditions and the following disclaimer in the
19 : * documentation and/or other materials provided with the distribution.
20 : * 3. Neither the name of the University nor the names of its contributors
21 : * may be used to endorse or promote products derived from this software
22 : * without specific prior written permission.
23 : *
24 : * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
25 : * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26 : * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27 : * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
28 : * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
29 : * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
30 : * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
31 : * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32 : * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
33 : * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34 : * SUCH DAMAGE.
35 : *
36 : * @(#)igmp_var.h 8.1 (Berkeley) 7/19/93
37 : */
38 :
39 : #ifndef _NETINET_IGMP_VAR_H_
40 : #define _NETINET_IGMP_VAR_H_
41 :
42 : /*
43 : * Internet Group Management Protocol (IGMP),
44 : * implementation-specific definitions.
45 : *
46 : * Written by Steve Deering, Stanford, May 1988.
47 : * Modified by Rosen Sharma, Stanford, Aug 1994.
48 : * Modified by Bill Fenner, Xerox PARC, Feb 1995.
49 : *
50 : * MULTICAST 1.3
51 : */
52 :
53 : struct igmpstat {
54 : u_long igps_rcv_total; /* total IGMP messages received */
55 : u_long igps_rcv_tooshort; /* received with too few bytes */
56 : u_long igps_rcv_badsum; /* received with bad checksum */
57 : u_long igps_rcv_queries; /* received membership queries */
58 : u_long igps_rcv_badqueries; /* received invalid queries */
59 : u_long igps_rcv_reports; /* received membership reports */
60 : u_long igps_rcv_badreports; /* received invalid reports */
61 : u_long igps_rcv_ourreports; /* received reports for our groups */
62 : u_long igps_snd_reports; /* sent membership reports */
63 : };
64 :
65 : /*
66 : * Names for IGMP sysctl objects
67 : */
68 : #define IGMPCTL_STATS 1 /* IGMP statistics */
69 : #define IGMPCTL_MAXID 2
70 :
71 : #define IGMPCTL_NAMES { \
72 : { 0, 0 }, \
73 : { "stats", CTLTYPE_STRUCT } \
74 : }
75 :
76 : #define IGMPCTL_VARS { \
77 : NULL \
78 : }
79 :
80 : #ifdef _KERNEL
81 :
82 : #include <sys/percpu.h>
83 :
84 : enum igmpstat_counters {
85 : igps_rcv_total, /* total IGMP messages received */
86 : igps_rcv_tooshort, /* received with too few bytes */
87 : igps_rcv_badsum, /* received with bad checksum */
88 : igps_rcv_queries, /* received membership queries */
89 : igps_rcv_badqueries, /* received invalid queries */
90 : igps_rcv_reports, /* received membership reports */
91 : igps_rcv_badreports, /* received invalid reports */
92 : igps_rcv_ourreports, /* received reports for our groups */
93 : igps_snd_reports, /* sent membership reports */
94 : igps_ncounters
95 : };
96 :
97 : extern struct cpumem *igmpcounters;
98 :
99 : static inline void
100 0 : igmpstat_inc(enum igmpstat_counters c)
101 : {
102 0 : counters_inc(igmpcounters, c);
103 0 : }
104 :
105 : /*
106 : * Macro to compute a random timer value between 1 and (IGMP_MAX_REPORTING_
107 : * DELAY * countdown frequency). We assume that the routine random()
108 : * is defined somewhere (and that it returns a positive number).
109 : */
110 : #define IGMP_RANDOM_DELAY(X) (arc4random_uniform(X) + 1)
111 :
112 : void igmp_init(void);
113 : int igmp_input(struct mbuf **, int *, int, int);
114 : void igmp_joingroup(struct in_multi *);
115 : void igmp_leavegroup(struct in_multi *);
116 : void igmp_fasttimo(void);
117 : void igmp_slowtimo(void);
118 : int igmp_sysctl(int *, u_int, void *, size_t *, void *, size_t);
119 : #endif /* _KERNEL */
120 : #endif /* _NETINET_IGMP_VAR_H_ */
|