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