48753eab5c9c6705d2a21ed653b8cb834281ce0d
[gpxe.git] / src / include / igmp.h
1 #ifndef IGMP_H
2 #define IGMP_H
3
4 #include "stdint.h"
5 #include "in.h"
6
7 #define IGMP_QUERY      0x11
8 #define IGMPv1_REPORT   0x12
9 #define IGMPv2_REPORT   0x16
10 #define IGMP_LEAVE      0x17
11 #define GROUP_ALL_HOSTS 0xe0000001 /* 224.0.0.1 Host byte order */
12
13 #define MULTICAST_MASK    0xf0000000
14 #define MULTICAST_NETWORK 0xe0000000
15
16 enum {
17         IGMP_SERVER,
18         MAX_IGMP
19 };
20
21 struct igmp {
22         uint8_t         type;
23         uint8_t         response_time;
24         uint16_t        chksum;
25         struct in_addr  group;
26 } PACKED;
27
28 struct igmp_ip_t { /* Format of an igmp ip packet */
29         struct iphdr ip;
30         uint8_t router_alert[4]; /* Router alert option */
31         struct igmp igmp;
32 } PACKED;
33
34 struct igmptable_t {
35         struct in_addr group;
36         unsigned long time;
37 } PACKED;
38
39 extern void join_group ( int slot, unsigned long group );
40 extern void leave_group ( int slot );
41
42 #endif  /* IGMP_H */