130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* 230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Linux NET3: Internet Group Management Protocol [IGMP] 330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Authors: 530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Alan Cox <alan@lxorguk.ukuu.org.uk> 630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Extended to talk the BSD extended IGMP protocol of mrouted 3.6 830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 1030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * This program is free software; you can redistribute it and/or 1130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * modify it under the terms of the GNU General Public License 1230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * as published by the Free Software Foundation; either version 1330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 2 of the License, or (at your option) any later version. 1430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 1530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 1630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#ifndef _UAPI_LINUX_IGMP_H 1730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define _UAPI_LINUX_IGMP_H 1830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 1930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#include <linux/types.h> 2030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#include <asm/byteorder.h> 2130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 2230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* 2330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * IGMP protocol structures 2430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 2530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 2630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* 2730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Header in on cable format 2830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 2930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 3030692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct igmphdr { 3130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u8 type; 3230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u8 code; /* For newer IGMP */ 3330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __sum16 csum; 3430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __be32 group; 3530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 3630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 3730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* V3 group record types [grec_type] */ 3830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IGMPV3_MODE_IS_INCLUDE 1 3930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IGMPV3_MODE_IS_EXCLUDE 2 4030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IGMPV3_CHANGE_TO_INCLUDE 3 4130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IGMPV3_CHANGE_TO_EXCLUDE 4 4230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IGMPV3_ALLOW_NEW_SOURCES 5 4330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IGMPV3_BLOCK_OLD_SOURCES 6 4430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 4530692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct igmpv3_grec { 4630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u8 grec_type; 4730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u8 grec_auxwords; 4830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __be16 grec_nsrcs; 4930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __be32 grec_mca; 5030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __be32 grec_src[0]; 5130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 5230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 5330692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct igmpv3_report { 5430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u8 type; 5530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u8 resv1; 5630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __be16 csum; 5730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __be16 resv2; 5830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __be16 ngrec; 5930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng struct igmpv3_grec grec[0]; 6030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 6130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 6230692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct igmpv3_query { 6330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u8 type; 6430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u8 code; 6530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __be16 csum; 6630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __be32 group; 6730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#if defined(__LITTLE_ENDIAN_BITFIELD) 6830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u8 qrv:3, 6930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng suppress:1, 7030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng resv:4; 7130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#elif defined(__BIG_ENDIAN_BITFIELD) 7230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u8 resv:4, 7330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng suppress:1, 7430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng qrv:3; 7530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#else 7630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#error "Please fix <asm/byteorder.h>" 7730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#endif 7830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u8 qqic; 7930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __be16 nsrcs; 8030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __be32 srcs[0]; 8130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 8230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 8330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IGMP_HOST_MEMBERSHIP_QUERY 0x11 /* From RFC1112 */ 8430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IGMP_HOST_MEMBERSHIP_REPORT 0x12 /* Ditto */ 8530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IGMP_DVMRP 0x13 /* DVMRP routing */ 8630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IGMP_PIM 0x14 /* PIM routing */ 8730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IGMP_TRACE 0x15 8830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IGMPV2_HOST_MEMBERSHIP_REPORT 0x16 /* V2 version of 0x12 */ 8930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IGMP_HOST_LEAVE_MESSAGE 0x17 9030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IGMPV3_HOST_MEMBERSHIP_REPORT 0x22 /* V3 version of 0x12 */ 9130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 9230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IGMP_MTRACE_RESP 0x1e 9330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IGMP_MTRACE 0x1f 9430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 9530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 9630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* 9730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Use the BSD names for these for compatibility 9830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 9930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 10030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IGMP_DELAYING_MEMBER 0x01 10130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IGMP_IDLE_MEMBER 0x02 10230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IGMP_LAZY_MEMBER 0x03 10330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IGMP_SLEEPING_MEMBER 0x04 10430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IGMP_AWAKENING_MEMBER 0x05 10530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 10630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IGMP_MINLEN 8 10730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 10830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IGMP_MAX_HOST_REPORT_DELAY 10 /* max delay for response to */ 10930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng /* query (in seconds) */ 11030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 11130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IGMP_TIMER_SCALE 10 /* denotes that the igmphdr->timer field */ 11230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng /* specifies time in 10th of seconds */ 11330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 11430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IGMP_AGE_THRESHOLD 400 /* If this host don't hear any IGMP V1 */ 11530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng /* message in this period of time, */ 11630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng /* revert to IGMP v2 router. */ 11730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 11830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IGMP_ALL_HOSTS htonl(0xE0000001L) 11930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IGMP_ALL_ROUTER htonl(0xE0000002L) 12030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IGMPV3_ALL_MCR htonl(0xE0000016L) 12130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IGMP_LOCAL_GROUP htonl(0xE0000000L) 12230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define IGMP_LOCAL_GROUP_MASK htonl(0xFFFFFF00L) 12330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 12430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* 12530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * struct for keeping the multicast list in 12630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 12730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 12830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#endif /* _UAPI_LINUX_IGMP_H */ 129