2  * Copyright (c) 2000 Apple Computer, Inc. All rights reserved. 
   4  * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ 
   6  * This file contains Original Code and/or Modifications of Original Code 
   7  * as defined in and that are subject to the Apple Public Source License 
   8  * Version 2.0 (the 'License'). You may not use this file except in 
   9  * compliance with the License. The rights granted to you under the License 
  10  * may not be used to create, or enable the creation or redistribution of, 
  11  * unlawful or unlicensed copies of an Apple operating system, or to 
  12  * circumvent, violate, or enable the circumvention or violation of, any 
  13  * terms of an Apple operating system software license agreement. 
  15  * Please obtain a copy of the License at 
  16  * http://www.opensource.apple.com/apsl/ and read it before using this file. 
  18  * The Original Code and all software distributed under the License are 
  19  * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 
  20  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 
  21  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 
  22  * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 
  23  * Please see the License for the specific language governing rights and 
  24  * limitations under the License. 
  26  * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ 
  29  * Copyright (c) 1988 Stephen Deering. 
  30  * Copyright (c) 1992, 1993 
  31  *      The Regents of the University of California.  All rights reserved. 
  33  * This code is derived from software contributed to Berkeley by 
  34  * Stephen Deering of Stanford University. 
  36  * Redistribution and use in source and binary forms, with or without 
  37  * modification, are permitted provided that the following conditions 
  39  * 1. Redistributions of source code must retain the above copyright 
  40  *    notice, this list of conditions and the following disclaimer. 
  41  * 2. Redistributions in binary form must reproduce the above copyright 
  42  *    notice, this list of conditions and the following disclaimer in the 
  43  *    documentation and/or other materials provided with the distribution. 
  44  * 3. All advertising materials mentioning features or use of this software 
  45  *    must display the following acknowledgement: 
  46  *      This product includes software developed by the University of 
  47  *      California, Berkeley and its contributors. 
  48  * 4. Neither the name of the University nor the names of its contributors 
  49  *    may be used to endorse or promote products derived from this software 
  50  *    without specific prior written permission. 
  52  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 
  53  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
  54  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
  55  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 
  56  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 
  57  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 
  58  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
  59  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
  60  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 
  61  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 
  64  *      from: @(#)igmp_var.h    8.1 (Berkeley) 7/19/93 
  67 #ifndef _NETINET_IGMP_VAR_H_ 
  68 #define _NETINET_IGMP_VAR_H_ 
  69 #include <sys/appleapiopts.h> 
  73  * Internet Group Management Protocol (IGMP), 
  74  * implementation-specific definitions. 
  76  * Written by Steve Deering, Stanford, May 1988. 
  78  * MULTICAST Revision: 3.5.1.3 
  82         u_int   igps_rcv_total
;         /* total IGMP messages received */ 
  83         u_int   igps_rcv_tooshort
;      /* received with too few bytes */ 
  84         u_int   igps_rcv_badsum
;        /* received with bad checksum */ 
  85         u_int   igps_rcv_queries
;       /* received membership queries */ 
  86         u_int   igps_rcv_badqueries
;    /* received invalid queries */ 
  87         u_int   igps_rcv_reports
;       /* received membership reports */ 
  88         u_int   igps_rcv_badreports
;    /* received invalid reports */ 
  89         u_int   igps_rcv_ourreports
;    /* received reports for our groups */ 
  90         u_int   igps_snd_reports
;       /* sent membership reports */ 
  95 #define IGMP_RANDOM_DELAY(X) (random() % (X) + 1) 
  98  * States for IGMPv2's leave processing 
 100 #define IGMP_OTHERMEMBER                        0 
 101 #define IGMP_IREPORTEDLAST                      1 
 104  * We must remember what version the subnet's querier is. 
 105  * We conveniently use the IGMP message type for the proper 
 106  * membership report to keep this state. 
 108 #define IGMP_V1_ROUTER                          IGMP_V1_MEMBERSHIP_REPORT 
 109 #define IGMP_V2_ROUTER                          IGMP_V2_MEMBERSHIP_REPORT 
 112  * Revert to new router if we haven't heard from an old router in 
 113  * this amount of time. 
 115 #define IGMP_AGE_THRESHOLD                      540 
 117 void    igmp_init(void) __attribute__((section("__TEXT, initcode"))); 
 118 void    igmp_input(struct mbuf 
*, int); 
 119 int             igmp_joingroup(struct in_multi 
*); 
 120 void    igmp_leavegroup(struct in_multi 
*); 
 121 void    igmp_fasttimo(void); 
 122 void    igmp_slowtimo(void); 
 124 SYSCTL_DECL(_net_inet_igmp
); 
 127 #endif /* KERNEL_PRIVATE */ 
 130  * Names for IGMP sysctl objects 
 132 #define IGMPCTL_STATS           1       /* statistics (read-only) */ 
 133 #define IGMPCTL_MAXID           2 
 135 #ifdef KERNEL_PRIVATE 
 136 #define IGMPCTL_NAMES { \ 
 138         { "stats", CTLTYPE_STRUCT }, \ 
 141 #endif /* KERNEL_PRIVATE */