summaryrefslogtreecommitdiff
path: root/gpxe/src/include/igmp.h
diff options
context:
space:
mode:
Diffstat (limited to 'gpxe/src/include/igmp.h')
-rw-r--r--gpxe/src/include/igmp.h42
1 files changed, 42 insertions, 0 deletions
diff --git a/gpxe/src/include/igmp.h b/gpxe/src/include/igmp.h
new file mode 100644
index 00000000..8b3292f2
--- /dev/null
+++ b/gpxe/src/include/igmp.h
@@ -0,0 +1,42 @@
+#ifndef IGMP_H
+#define IGMP_H
+
+#include "stdint.h"
+#include <gpxe/in.h>
+
+#define IGMP_QUERY 0x11
+#define IGMPv1_REPORT 0x12
+#define IGMPv2_REPORT 0x16
+#define IGMP_LEAVE 0x17
+#define GROUP_ALL_HOSTS 0xe0000001 /* 224.0.0.1 Host byte order */
+
+#define MULTICAST_MASK 0xf0000000
+#define MULTICAST_NETWORK 0xe0000000
+
+enum {
+ IGMP_SERVER,
+ MAX_IGMP
+};
+
+struct igmp {
+ uint8_t type;
+ uint8_t response_time;
+ uint16_t chksum;
+ struct in_addr group;
+} PACKED;
+
+struct igmp_ip_t { /* Format of an igmp ip packet */
+ struct iphdr ip;
+ uint8_t router_alert[4]; /* Router alert option */
+ struct igmp igmp;
+} PACKED;
+
+struct igmptable_t {
+ struct in_addr group;
+ unsigned long time;
+} PACKED;
+
+extern void join_group ( int slot, unsigned long group );
+extern void leave_group ( int slot );
+
+#endif /* IGMP_H */