#ifndef _IGMP_H_
#define _IGMP_H_
#define AllSystems "224.0.0.1"
#define AllRouters "224.0.0.2"
#define AllIGMPv3Routers "224.0.0.22"
#define DEFAULT_ROBUSTNESS 2
#define MIN_ROBUSTNESS 1
#define MAX_ROBUSTNESS 4
#define DEFAULT_QUERY_INTERVAL 125
#define MIN_QUERY_INTERVAL 1
#define MAX_QUERY_INTERVAL 65535
#define DEFAULT_QUERY_RESP_INTERVAL 100
#define MIN_QUERY_RESP_INTERVAL 1
#define MAX_QUERY_RESP_INTERVAL 65535
#define DEFAULT_STARTUP_QUERY_INTERVAL DEFAULT_QUERY_INTERVAL / 4
#define MIN_STARTUP_QUERY_INTERVAL MIN_QUERY_INTERVAL
#define MAX_STARTUP_QUERY_INTERVAL MAX_QUERY_INTERVAL
#define DEFAULT_STARTUP_QUERY_CNT DEFAULT_ROBUSTNESS
#define MIN_STARTUP_QUERY_CNT MIN_ROBUSTNESS
#define MAX_STARTUP_QUERY_CNT MAX_ROBUSTNESS
#define DEFAULT_LAST_MEMBER_QUERY_INTERVAL 10
#define MIN_LAST_MEMBER_QUERY_INTERVAL 1
#define MAX_LAST_MEMBER_QUERY_INTERVAL 65535
#define DEFAULT_LAST_MEMBER_QUERY_CNT DEFAULT_ROBUSTNESS
#define MIN_LAST_MEMBER_QUERY_CNT 1
#define MAX_LAST_MEMBER_QUERY_CNT 255
#define PKT_TYPE_MEMBER_QUERY 0x11
#define PKT_TYPE_MEMBER_REPORTv1 0x12
#define PKT_TYPE_MEMBER_REPORTv2 0x16
#define PKT_TYPE_LEAVE_GROUPv2 0x17
#define PKT_TYPE_MEMBER_REPORTv3 0x22
#define DEFAULT_IGMP_VERSION 2
#define MIN_IGMP_VERSION 1
#define MAX_IGMP_VERSION 2
struct igmp_hdr {
u_int8_t type;
u_int8_t max_resp_time;
u_int16_t chksum;
u_int32_t grp_addr;
};
#define GRP_STA_NO_MEMB_PRSNT 0x01
#define GRP_STA_MEMB_PRSNT 0x02
#define GRP_STA_V1_MEMB_PRSNT 0x04
#define GRP_STA_CHECK_MEMB 0x08
#define GRP_STA_ANY 0x0e
enum group_event {
GRP_EVT_V2_REPORT_RCVD,
GRP_EVT_V1_REPORT_RCVD,
GRP_EVT_LEAVE_RCVD,
GRP_EVT_TMR_EXPIRED,
GRP_EVT_RETRANS_TMR_EXP,
GRP_EVT_V1_HOST_TMR_EXP,
GRP_EVT_REPORT_RCVD,
GRP_EVT_QUERY_RCVD,
GRP_EVT_NOTHING
};
enum group_action {
GRP_ACT_END,
GRP_ACT_START_TMR,
GRP_ACT_START_TMR_ALL,
GRP_ACT_START_RETRANS_TMR,
GRP_ACT_START_V1_HOST_TMR,
GRP_ACT_SEND_GRP_QUERY,
GRP_ACT_ADD_GROUP,
GRP_ACT_DEL_GROUP,
GRP_ACT_CLR_RETRANS_TMR,
GRP_ACT_NOTHING
};
#endif