1193323Sed/* $OpenBSD: igmp.h,v 1.2 2009/03/06 18:39:13 michele Exp $ */ 2193323Sed 3193323Sed/* 4193323Sed * Copyright (c) 2005, 2006 Esben Norby <norby@openbsd.org> 5193323Sed * 6193323Sed * Permission to use, copy, modify, and distribute this software for any 7193323Sed * purpose with or without fee is hereby granted, provided that the above 8193323Sed * copyright notice and this permission notice appear in all copies. 9193323Sed * 10193323Sed * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 11193323Sed * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 12193323Sed * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 13193323Sed * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 14193323Sed * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 15193323Sed * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 16193323Sed * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 17193323Sed */ 18193323Sed 19193323Sed/* IGMP protocol definitions */ 20193323Sed 21193323Sed#ifndef _IGMP_H_ 22224145Sdim#define _IGMP_H_ 23224145Sdim 24224145Sdim/* misc */ 25193323Sed#define AllSystems "224.0.0.1" 26193323Sed#define AllRouters "224.0.0.2" 27193323Sed#define AllIGMPv3Routers "224.0.0.22" 28193323Sed 29193323Sed#define DEFAULT_ROBUSTNESS 2 30193323Sed#define MIN_ROBUSTNESS 1 31193323Sed#define MAX_ROBUSTNESS 4 32193323Sed 33193323Sed#define DEFAULT_QUERY_INTERVAL 125 34193323Sed#define MIN_QUERY_INTERVAL 1 35193323Sed#define MAX_QUERY_INTERVAL 65535 36193323Sed 37193323Sed/* must be less than QUERY_INTERVAL */ 38193323Sed#define DEFAULT_QUERY_RESP_INTERVAL 100 /* 10 seconds */ 39193323Sed#define MIN_QUERY_RESP_INTERVAL 1 40193323Sed#define MAX_QUERY_RESP_INTERVAL 65535 41193323Sed 42193323Sed#define DEFAULT_STARTUP_QUERY_INTERVAL DEFAULT_QUERY_INTERVAL / 4 43193323Sed#define MIN_STARTUP_QUERY_INTERVAL MIN_QUERY_INTERVAL 44193323Sed#define MAX_STARTUP_QUERY_INTERVAL MAX_QUERY_INTERVAL 45193323Sed 46193323Sed#define DEFAULT_STARTUP_QUERY_CNT DEFAULT_ROBUSTNESS 47193323Sed#define MIN_STARTUP_QUERY_CNT MIN_ROBUSTNESS /* XXX */ 48193323Sed#define MAX_STARTUP_QUERY_CNT MAX_ROBUSTNESS /* XXX */ 49193323Sed 50193323Sed#define DEFAULT_LAST_MEMBER_QUERY_INTERVAL 10 /* 1 second */ 51193323Sed#define MIN_LAST_MEMBER_QUERY_INTERVAL 1 52193323Sed#define MAX_LAST_MEMBER_QUERY_INTERVAL 65535 53193323Sed 54193323Sed#define DEFAULT_LAST_MEMBER_QUERY_CNT DEFAULT_ROBUSTNESS 55193323Sed#define MIN_LAST_MEMBER_QUERY_CNT 1 56193323Sed#define MAX_LAST_MEMBER_QUERY_CNT 255 57193323Sed 58193323Sed/* IGMP packet types */ 59193323Sed#define PKT_TYPE_MEMBER_QUERY 0x11 60221345Sdim#define PKT_TYPE_MEMBER_REPORTv1 0x12 61193323Sed#define PKT_TYPE_MEMBER_REPORTv2 0x16 62193323Sed#define PKT_TYPE_LEAVE_GROUPv2 0x17 63221345Sdim#define PKT_TYPE_MEMBER_REPORTv3 0x22 64193323Sed 65193323Sed#define DEFAULT_IGMP_VERSION 2 66193323Sed#define MIN_IGMP_VERSION 1 67226633Sdim#define MAX_IGMP_VERSION 2 68193323Sed 69221345Sdim/* IGMP header */ 70198090Srdivackystruct igmp_hdr { 71198090Srdivacky u_int8_t type; 72198090Srdivacky u_int8_t max_resp_time; 73198090Srdivacky u_int16_t chksum; 74198090Srdivacky u_int32_t grp_addr; 75198090Srdivacky}; 76198090Srdivacky 77198090Srdivacky/* group states */ 78198090Srdivacky#define GRP_STA_NO_MEMB_PRSNT 0x01 79198090Srdivacky#define GRP_STA_MEMB_PRSNT 0x02 80198090Srdivacky#define GRP_STA_V1_MEMB_PRSNT 0x04 81198090Srdivacky#define GRP_STA_CHECK_MEMB 0x08 82198090Srdivacky#define GRP_STA_ANY 0x0e 83198090Srdivacky 84198090Srdivacky/* group events */ 85198090Srdivackyenum group_event { 86198090Srdivacky GRP_EVT_V2_REPORT_RCVD, 87198090Srdivacky GRP_EVT_V1_REPORT_RCVD, 88198090Srdivacky GRP_EVT_LEAVE_RCVD, 89198090Srdivacky GRP_EVT_TMR_EXPIRED, 90198090Srdivacky GRP_EVT_RETRANS_TMR_EXP, 91198090Srdivacky GRP_EVT_V1_HOST_TMR_EXP, 92198090Srdivacky GRP_EVT_REPORT_RCVD, 93198090Srdivacky GRP_EVT_QUERY_RCVD, 94198090Srdivacky GRP_EVT_NOTHING 95198090Srdivacky}; 96210299Sed 97198090Srdivacky/* group actions */ 98198090Srdivackyenum group_action { 99198090Srdivacky GRP_ACT_END, 100198090Srdivacky GRP_ACT_START_TMR, 101198090Srdivacky GRP_ACT_START_TMR_ALL, 102221345Sdim GRP_ACT_START_RETRANS_TMR, 103193323Sed GRP_ACT_START_V1_HOST_TMR, 104193323Sed GRP_ACT_SEND_GRP_QUERY, 105193323Sed GRP_ACT_ADD_GROUP, 106193323Sed GRP_ACT_DEL_GROUP, 107193323Sed GRP_ACT_CLR_RETRANS_TMR, 108193323Sed GRP_ACT_NOTHING 109193323Sed}; 110193323Sed 111193323Sed#endif /* _IGMP_H_ */ 112193323Sed