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