1/***************************************************************************** 2 * Include file : IGMP.h 3 ***************************************************************************** 4 * Contains the differents structures and constants for the IGMP-router 5 * Auteur: Lahmadi.Abdelkader@loria.fr 6 * MAJ: 7 Aout 2001 7 ****************************************************************************/ 8 9#include <linux/igmp.h> 10 11#define IGMP_FMODE_INCLUDE 1 12#define IGMP_FMODE_EXCLUDE 0 13 14#define IGMP_MAX_HOST_REPORT_DELAY 10 /* max delay for response to query (in seconds) */ 15#define IGMP_TIMER_SCALE 10 16#define IGMP_DEF_QI 125 17#define IGMP_DEF_QRI 10 18 19#define IGMP_DEF_RV 2 20#define IGMP_OQPI ((IGMP_DEF_RV * IGMP_DEF_QI) + IGMP_DEF_QRI/2) 21#define IGMP_GMI ((IGMP_DEF_RV * IGMP_DEF_QI) + IGMP_DEF_QRI) 22#define IGMP_WAN_VERSION_TIMER 150 //IGMP_DEF_QI * 2 /* Foxconn add by aspen Bai, 01/08/2008 */ 23 24#define IGMP_MEMBERSHIP_QUERY 0x11 25#define IGMP_V1_MEMBERSHIP_REPORT 0x12 26#define IGMP_V2_MEMBERSHIP_REPORT 0x16 27#define IGMP_V2_LEAVE_GROUP 0x17 /* Foxconn add by aspen Bai, 12/18/2007 */ 28#define IGMP_V3_MEMBERSHIP_REPORT 0x22 29 30/* Foxconn add start by aspen Bai, 01/07/2008 */ 31#define MODE_IS_INCLUDE 1 32#define MODE_IS_EXCLUDE 2 33#define CHANGE_TO_INCLUDE 3 34#define CHANGE_TO_EXCLUDE 4 35#define ALLOW_NEW_SOURCES 5 36#define BLOCK_OLD_SOURCES 6 37/* Foxconn add end by aspen Bai, 01/07/2008 */ 38 39/* Foxconn add start by aspen Bai, 01/07/2008 */ 40#define GROUP_INIT 0 41#define FIRST_JOIN_GROUP 1 42#define LAST_LEAVE_GROUP 2 43#define FIRST_JOIN_GROUP_HAD_SEND 3 44#define LAST_LEAVE_GROUP_HAD_SEND 4 45/* Foxconn add end by aspen Bai, 01/07/2008 */ 46 47#define IGMP_VERSION_1 0x12 48#define IGMP_VERSION_2 0x16 49#define IGMP_VERSION_3 0x22 50 51#define IGMP_MINLEN 8 52 53#define IGMP_ALL_ROUTERS "224.0.0.2" 54#define IGMP_ALL_ROUTERS_V3 "224.0.0.22" 55 56 57#define IGMP_SRSP(x) ((x)->igmpq_misc & (0x08)) 58 59#ifndef INADDR_ALLRTRS_IGMPV3_GROUP 60#define INADDR_ALLRTRS_IGMPV3_GROUP 0xe0000016U 61#endif 62 63/* IGMP source filter type */ 64typedef struct _igmp_src_t { 65 struct in_addr igmps_source; 66 int igmps_timer; 67 /* add a flag to indicate the forwarding state*/ 68 int igmps_fstate; 69 struct _igmp_src_t *igmps_next; 70} igmp_src_t; 71 72/* IGMP member type */ 73typedef struct _igmp_rep_t { 74 struct in_addr igmpr_addr; 75 struct _igmp_rep_t *igmpr_next; 76}igmp_rep_t; 77 78/* IGMP group type */ 79typedef struct _igmp_group_t { 80 struct in_addr igmpg_addr; 81 int igmpg_timer; 82 int igmpg_fmode; 83 int igmpg_flags; /* Foxconn add by aspen Bai, 01/07/2008 */ 84 int igmpg_type; /* Foxconn add by aspen Bai, 01/07/2008 */ 85 int igmpg_version; 86 igmp_rep_t* igmpg_members; 87 igmp_src_t* igmpg_sources; 88 struct _igmp_group_t* igmpg_next; 89} igmp_group_t; 90 91/* Scheduled group specifiq query type*/ 92typedef struct _sch_query_t { 93 struct in_addr gp_addr; 94 int igmp_retnum; 95 int numsrc; 96 struct in_addr sources[1]; 97 struct _sch_query_t *sch_next; 98 99} sch_query_t; 100/* IGMP query format */ 101typedef struct _igmpv3q_t { 102 u_char igmpq_type; /* version & type of IGMP message */ 103 u_char igmpq_code; /* subtype for routing msgs */ 104 u_short igmpq_cksum; /* IP-style checksum */ 105 struct in_addr igmpq_group; /* group address being reported */ 106 u_char igmpq_misc; /* reserved, supress and robustness */ 107 u_char igmpq_qqi; /* querier's query interval */ 108 u_short igmpq_numsrc; /* number of sources */ 109 struct in_addr igmpq_sources[1]; /* source addresses */ 110} igmpv3q_t; 111 112/* IGMPv1/IGMPv2 report format */ 113typedef struct _igmpr_t { 114 u_char igmpr_type; /* version & type */ 115 u_char igmpr_code; /* unused */ 116 u_short igmpr_cksum; /* IP-style checksum */ 117 struct in_addr igmpr_group; /* group address being reported */ 118} igmpr_t; 119 120/* IGMPv3 group record format */ 121typedef struct _igmp_grouprec_t { 122 u_char igmpg_type; /* record type */ 123 u_char igmpg_datalen; /* amount of aux data */ 124 u_short igmpg_numsrc; /* number of sources */ 125 struct in_addr igmpg_group; /* the group being reported */ 126 /* struct in_addr igmpg_sources[1]; source addresses */ 127} igmp_grouprec_t; 128 129/* IGMPv3 report format */ 130typedef struct _igmp_report_t { 131 u_char igmpr_type; /* version & type of IGMP message */ 132 u_char igmpr_code; /* subtype for routing msgs */ 133 u_short igmpr_cksum; /* IP-style checksum */ 134 u_short igmpr_rsv; /* reserved */ 135 u_short igmpr_numgrps; /* number of groups*/ 136 igmp_grouprec_t igmpr_group[1]; /* group records */ 137} igmp_report_t; 138 139/* multicast source set */ 140typedef struct _igmp_mulsrc_t 141{ 142 struct in_addr igmps_addr; 143 struct igmp_mulsrc_t* igmps_next; 144} igmp_mulsrc_t; 145