| #ifndef IGMP_H |
| #define IGMP_H |
| |
| #include "stdint.h" |
| #include "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 */ |