1*63b350beSmichele /* $OpenBSD: igmp.h,v 1.2 2009/03/06 18:39:13 michele Exp $ */ 2978e5cffSnorby 3978e5cffSnorby /* 4978e5cffSnorby * Copyright (c) 2005, 2006 Esben Norby <norby@openbsd.org> 5978e5cffSnorby * 6978e5cffSnorby * Permission to use, copy, modify, and distribute this software for any 7978e5cffSnorby * purpose with or without fee is hereby granted, provided that the above 8978e5cffSnorby * copyright notice and this permission notice appear in all copies. 9978e5cffSnorby * 10978e5cffSnorby * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 11978e5cffSnorby * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 12978e5cffSnorby * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 13978e5cffSnorby * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 14978e5cffSnorby * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 15978e5cffSnorby * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 16978e5cffSnorby * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 17978e5cffSnorby */ 18978e5cffSnorby 19978e5cffSnorby /* IGMP protocol definitions */ 20978e5cffSnorby 21978e5cffSnorby #ifndef _IGMP_H_ 22978e5cffSnorby #define _IGMP_H_ 23978e5cffSnorby 24978e5cffSnorby /* misc */ 25978e5cffSnorby #define AllSystems "224.0.0.1" 26978e5cffSnorby #define AllRouters "224.0.0.2" 27978e5cffSnorby #define AllIGMPv3Routers "224.0.0.22" 28978e5cffSnorby 29978e5cffSnorby #define DEFAULT_ROBUSTNESS 2 30978e5cffSnorby #define MIN_ROBUSTNESS 1 31978e5cffSnorby #define MAX_ROBUSTNESS 4 32978e5cffSnorby 33978e5cffSnorby #define DEFAULT_QUERY_INTERVAL 125 34978e5cffSnorby #define MIN_QUERY_INTERVAL 1 35978e5cffSnorby #define MAX_QUERY_INTERVAL 65535 36978e5cffSnorby 37978e5cffSnorby /* must be less than QUERY_INTERVAL */ 38978e5cffSnorby #define DEFAULT_QUERY_RESP_INTERVAL 100 /* 10 seconds */ 39978e5cffSnorby #define MIN_QUERY_RESP_INTERVAL 1 40978e5cffSnorby #define MAX_QUERY_RESP_INTERVAL 65535 41978e5cffSnorby 42978e5cffSnorby #define DEFAULT_STARTUP_QUERY_INTERVAL DEFAULT_QUERY_INTERVAL / 4 43978e5cffSnorby #define MIN_STARTUP_QUERY_INTERVAL MIN_QUERY_INTERVAL 44978e5cffSnorby #define MAX_STARTUP_QUERY_INTERVAL MAX_QUERY_INTERVAL 45978e5cffSnorby 46978e5cffSnorby #define DEFAULT_STARTUP_QUERY_CNT DEFAULT_ROBUSTNESS 47978e5cffSnorby #define MIN_STARTUP_QUERY_CNT MIN_ROBUSTNESS /* XXX */ 48978e5cffSnorby #define MAX_STARTUP_QUERY_CNT MAX_ROBUSTNESS /* XXX */ 49978e5cffSnorby 50978e5cffSnorby #define DEFAULT_LAST_MEMBER_QUERY_INTERVAL 10 /* 1 second */ 51978e5cffSnorby #define MIN_LAST_MEMBER_QUERY_INTERVAL 1 52978e5cffSnorby #define MAX_LAST_MEMBER_QUERY_INTERVAL 65535 53978e5cffSnorby 54978e5cffSnorby #define DEFAULT_LAST_MEMBER_QUERY_CNT DEFAULT_ROBUSTNESS 55978e5cffSnorby #define MIN_LAST_MEMBER_QUERY_CNT 1 56978e5cffSnorby #define MAX_LAST_MEMBER_QUERY_CNT 255 57978e5cffSnorby 58978e5cffSnorby /* IGMP packet types */ 59978e5cffSnorby #define PKT_TYPE_MEMBER_QUERY 0x11 60978e5cffSnorby #define PKT_TYPE_MEMBER_REPORTv1 0x12 61978e5cffSnorby #define PKT_TYPE_MEMBER_REPORTv2 0x16 62978e5cffSnorby #define PKT_TYPE_LEAVE_GROUPv2 0x17 63978e5cffSnorby #define PKT_TYPE_MEMBER_REPORTv3 0x22 64978e5cffSnorby 65978e5cffSnorby #define DEFAULT_IGMP_VERSION 2 66978e5cffSnorby #define MIN_IGMP_VERSION 1 67978e5cffSnorby #define MAX_IGMP_VERSION 2 68978e5cffSnorby 69978e5cffSnorby /* IGMP header */ 70978e5cffSnorby struct igmp_hdr { 71978e5cffSnorby u_int8_t type; 72978e5cffSnorby u_int8_t max_resp_time; 73978e5cffSnorby u_int16_t chksum; 74978e5cffSnorby u_int32_t grp_addr; 75978e5cffSnorby }; 76978e5cffSnorby 77978e5cffSnorby /* group states */ 78978e5cffSnorby #define GRP_STA_NO_MEMB_PRSNT 0x01 79978e5cffSnorby #define GRP_STA_MEMB_PRSNT 0x02 80978e5cffSnorby #define GRP_STA_V1_MEMB_PRSNT 0x04 81978e5cffSnorby #define GRP_STA_CHECK_MEMB 0x08 82978e5cffSnorby #define GRP_STA_ANY 0x0e 83978e5cffSnorby 84978e5cffSnorby /* group events */ 85978e5cffSnorby enum group_event { 86978e5cffSnorby GRP_EVT_V2_REPORT_RCVD, 87978e5cffSnorby GRP_EVT_V1_REPORT_RCVD, 88978e5cffSnorby GRP_EVT_LEAVE_RCVD, 89978e5cffSnorby GRP_EVT_TMR_EXPIRED, 90978e5cffSnorby GRP_EVT_RETRANS_TMR_EXP, 91978e5cffSnorby GRP_EVT_V1_HOST_TMR_EXP, 92978e5cffSnorby GRP_EVT_REPORT_RCVD, 93978e5cffSnorby GRP_EVT_QUERY_RCVD, 94978e5cffSnorby GRP_EVT_NOTHING 95978e5cffSnorby }; 96978e5cffSnorby 97978e5cffSnorby /* group actions */ 98978e5cffSnorby enum group_action { 99978e5cffSnorby GRP_ACT_END, 100978e5cffSnorby GRP_ACT_START_TMR, 101978e5cffSnorby GRP_ACT_START_TMR_ALL, 102978e5cffSnorby GRP_ACT_START_RETRANS_TMR, 103978e5cffSnorby GRP_ACT_START_V1_HOST_TMR, 104978e5cffSnorby GRP_ACT_SEND_GRP_QUERY, 105*63b350beSmichele GRP_ACT_ADD_GROUP, 106*63b350beSmichele GRP_ACT_DEL_GROUP, 107978e5cffSnorby GRP_ACT_CLR_RETRANS_TMR, 108978e5cffSnorby GRP_ACT_NOTHING 109978e5cffSnorby }; 110978e5cffSnorby 111978e5cffSnorby #endif /* _IGMP_H_ */ 112