linux-headers (unknown)

(root)/
include/
linux/
igmp.h
       1  /* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
       2  /*
       3   *	Linux NET3:	Internet Group Management Protocol  [IGMP]
       4   *
       5   *	Authors:
       6   *		Alan Cox <alan@lxorguk.ukuu.org.uk>
       7   *
       8   *	Extended to talk the BSD extended IGMP protocol of mrouted 3.6
       9   *
      10   *
      11   *	This program is free software; you can redistribute it and/or
      12   *	modify it under the terms of the GNU General Public License
      13   *	as published by the Free Software Foundation; either version
      14   *	2 of the License, or (at your option) any later version.
      15   */
      16  
      17  #ifndef _LINUX_IGMP_H
      18  #define _LINUX_IGMP_H
      19  
      20  #include <linux/types.h>
      21  #include <asm/byteorder.h>
      22  
      23  /*
      24   *	IGMP protocol structures
      25   */
      26  
      27  /*
      28   *	Header in on cable format
      29   */
      30  
      31  struct igmphdr {
      32  	__u8 type;
      33  	__u8 code;		/* For newer IGMP */
      34  	__sum16 csum;
      35  	__be32 group;
      36  };
      37  
      38  /* V3 group record types [grec_type] */
      39  #define IGMPV3_MODE_IS_INCLUDE		1
      40  #define IGMPV3_MODE_IS_EXCLUDE		2
      41  #define IGMPV3_CHANGE_TO_INCLUDE	3
      42  #define IGMPV3_CHANGE_TO_EXCLUDE	4
      43  #define IGMPV3_ALLOW_NEW_SOURCES	5
      44  #define IGMPV3_BLOCK_OLD_SOURCES	6
      45  
      46  struct igmpv3_grec {
      47  	__u8	grec_type;
      48  	__u8	grec_auxwords;
      49  	__be16	grec_nsrcs;
      50  	__be32	grec_mca;
      51  	__be32	grec_src[];
      52  };
      53  
      54  struct igmpv3_report {
      55  	__u8 type;
      56  	__u8 resv1;
      57  	__sum16 csum;
      58  	__be16 resv2;
      59  	__be16 ngrec;
      60  	struct igmpv3_grec grec[];
      61  };
      62  
      63  struct igmpv3_query {
      64  	__u8 type;
      65  	__u8 code;
      66  	__sum16 csum;
      67  	__be32 group;
      68  #if defined(__LITTLE_ENDIAN_BITFIELD)
      69  	__u8 qrv:3,
      70  	     suppress:1,
      71  	     resv:4;
      72  #elif defined(__BIG_ENDIAN_BITFIELD)
      73  	__u8 resv:4,
      74  	     suppress:1,
      75  	     qrv:3;
      76  #else
      77  #error "Please fix <asm/byteorder.h>"
      78  #endif
      79  	__u8 qqic;
      80  	__be16 nsrcs;
      81  	__be32 srcs[];
      82  };
      83  
      84  #define IGMP_HOST_MEMBERSHIP_QUERY	0x11	/* From RFC1112 */
      85  #define IGMP_HOST_MEMBERSHIP_REPORT	0x12	/* Ditto */
      86  #define IGMP_DVMRP			0x13	/* DVMRP routing */
      87  #define IGMP_PIM			0x14	/* PIM routing */
      88  #define IGMP_TRACE			0x15
      89  #define IGMPV2_HOST_MEMBERSHIP_REPORT	0x16	/* V2 version of 0x12 */
      90  #define IGMP_HOST_LEAVE_MESSAGE 	0x17
      91  #define IGMPV3_HOST_MEMBERSHIP_REPORT	0x22	/* V3 version of 0x12 */
      92  
      93  #define IGMP_MTRACE_RESP		0x1e
      94  #define IGMP_MTRACE			0x1f
      95  
      96  #define IGMP_MRDISC_ADV			0x30	/* From RFC4286 */
      97  
      98  /*
      99   *	Use the BSD names for these for compatibility
     100   */
     101  
     102  #define IGMP_DELAYING_MEMBER		0x01
     103  #define IGMP_IDLE_MEMBER		0x02
     104  #define IGMP_LAZY_MEMBER		0x03
     105  #define IGMP_SLEEPING_MEMBER		0x04
     106  #define IGMP_AWAKENING_MEMBER		0x05
     107  
     108  #define IGMP_MINLEN			8
     109  
     110  #define IGMP_MAX_HOST_REPORT_DELAY	10	/* max delay for response to */
     111  						/* query (in seconds)	*/
     112  
     113  #define IGMP_TIMER_SCALE		10	/* denotes that the igmphdr->timer field */
     114  						/* specifies time in 10th of seconds	 */
     115  
     116  #define IGMP_AGE_THRESHOLD		400	/* If this host don't hear any IGMP V1	*/
     117  						/* message in this period of time,	*/
     118  						/* revert to IGMP v2 router.		*/
     119  
     120  #define IGMP_ALL_HOSTS		htonl(0xE0000001L)
     121  #define IGMP_ALL_ROUTER 	htonl(0xE0000002L)
     122  #define IGMPV3_ALL_MCR	 	htonl(0xE0000016L)
     123  #define IGMP_LOCAL_GROUP	htonl(0xE0000000L)
     124  #define IGMP_LOCAL_GROUP_MASK	htonl(0xFFFFFF00L)
     125  
     126  /*
     127   * struct for keeping the multicast list in
     128   */
     129  
     130  #endif /* _LINUX_IGMP_H */