1 /******************************************************************************/
2 /*                                                                            */
3 /*   Copyright (c) International Business Machines  Corp., 2006               */
4 /*                                                                            */
5 /*   This program is free software;  you can redistribute it and/or modify    */
6 /*   it under the terms of the GNU General Public License as published by     */
7 /*   the Free Software Foundation; either version 2 of the License, or        */
8 /*   (at your option) any later version.                                      */
9 /*                                                                            */
10 /*   This program is distributed in the hope that it will be useful,          */
11 /*   but WITHOUT ANY WARRANTY;  without even the implied warranty of          */
12 /*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See                */
13 /*   the GNU General Public License for more details.                         */
14 /*                                                                            */
15 /*   You should have received a copy of the GNU General Public License        */
16 /*   along with this program;  if not, write to the Free Software             */
17 /*   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA  */
18 /*                                                                            */
19 /******************************************************************************/
20 
21 
22 /*
23  * File:
24  *	ns-mcast.h
25  *
26  * Description:
27  *	Header file for multicast test.
28  *	This file specifies structures and macors if missing
29  *
30  * Author:
31  *	Mitsuru Chinen <mitch@jp.ibm.com>
32  *
33  * History:
34  *	Apr 21 2006 - Created (Mitsuru Chinen)
35  *---------------------------------------------------------------------------*/
36 
37 #ifndef _NS_MCAST_H
38 #define _NS_MCAST_H 1
39 
40 #include <netinet/in.h>
41 #include <endian.h>
42 
43 
44 #ifndef MLD_LISTENER_QUERY
45 #  define MLD_LISTENER_QUERY          130
46 #endif
47 
48 
49 /* group_req */
50 #ifndef MCAST_JOIN_GROUP
51 # define MCAST_JOIN_GROUP		42
52 # define MCAST_BLOCK_SOURCE		43
53 # define MCAST_UNBLOCK_SOURCE		44
54 # define MCAST_LEAVE_GROUP		45
55 
56 struct group_req
57 {
58     uint32_t gr_interface;
59     struct sockaddr_storage gr_group;
60 };
61 
62 #endif	/* MCAST_JOIN_GROUP */
63 
64 
65 /* group_filter */
66 #ifndef MCAST_MSFILTER
67 # define MCAST_MSFILTER			48
68 # define MCAST_EXCLUDE	0
69 # define MCAST_INCLUDE	1
70 
71 struct group_filter
72 {
73     uint32_t gf_interface;
74     struct sockaddr_storage gf_group;
75     uint32_t gf_fmode;
76     uint32_t gf_numsrc;
77     struct sockaddr_storage gf_slist[1];
78 };
79 
80 #define GROUP_FILTER_SIZE(numsrc) \
81 	(sizeof(struct group_filter) - sizeof(struct sockaddr_storage) \
82 	+ (numsrc) * sizeof(struct sockaddr_storage))
83 
84 #endif	/* MCAST_MSFILTER */
85 
86 #ifndef IGMP_ALL_HOSTS
87 # define IGMP_ALL_HOSTS		htonl(0xE0000001L)
88 #endif
89 
90 #ifndef IGMPV3_HOST_MEMBERSHIP_REPORT
91 struct igmpv3_query {
92     uint8_t type;
93     uint8_t code;
94     uint16_t csum;
95     uint32_t group;
96 # if __BYTE_ORDER == __LITTLE_ENDIAN
97     uint8_t qrv:3;
98     uint8_t suppress:1;
99     uint8_t resv:4;
100 # elif __BYTE_ORDER == __BIG_ENDIAN
101      uint8_t resv:4;
102      uint8_t suppress:1;
103      uint8_t qrv:3;
104 # else
105 #  error "Failed to detect endian"
106 #endif
107     uint8_t qqic;
108     uint16_t nsrcs;
109     uint32_t srcs[0];
110 };
111 #endif	/* IGMPV3_HOST_MEMBERSHIP_REPORT */
112 
113 #endif	/* _NS_MCAST_H */
114