📄 igmp.h
字号:
#ifndef _INCLUDE_IGMP_H_
#define _INCLUDE_IGMP_H_
/*#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "memwatch.h"
*/
#include "semLib.h"
#include "msgQLib.h"
#include "inetLib.h"
#include "taskLib.h"
#include "tickLib.h"
#include <cli.h>
#include "igmp_interface.h"
#include "ipuplink.h"
#include "../../epon02_cli/Manage/public/public.h"
/*add for test memleak by aibin 2005-05-27*/
#define ROUTER_MODULE_PORT 0 /*属于router模块的端口,下行方向 */
#define HOST_MODULE_PORT 1 /*属于HOST模块的端口,上行方向 */
#ifndef OK
#define OK 0
#endif
#ifndef ERROR
#define ERROR -1
#endif
#ifndef NULL
#define NULL 0
#endif
typedef unsigned char mac_addr_t[8];
typedef unsigned char bcm_mac_t[6];
typedef unsigned short bcm_vlan_t;
typedef int bcm_cos_t;
typedef struct _shr_pbmp
{
unsigned int pbits[1];
} _shr_pbmp_t;
typedef _shr_pbmp_t bcm_pbmp_t;
struct ether_header
{
u_char ether_dhost[6];
u_char ether_shost[6];
u_short ether_type;
};
/*以groupmac为索引的组信息存放*/
struct IS_GROUP_MAC
{
unsigned char groupmac[6];
char reserve[2];
int gid;
int membercount; /* 组中的成员个数 */
int existcount; /* 组的生存期 */
int portnum; /*多播数据报文接收端口号 add by hengxuemeng 2002/5/4 */
int vid; /*多播数据报文接收报文vid add by hengxuemeng 2002/5/4 */
/*unsigned int portbitmap[32]; */
struct IS_GROUP_MAC *p_next;
};
#ifdef _AN5116_06A_
typedef struct bcm_mcast_addr_s
{
bcm_mac_t mac; /* 802.3 MAC address. */
bcm_vlan_t vid; /* VLAN identifier. */
bcm_cos_t cos_dst; /* COS based on destination address. */
bcm_pbmp_t pbmp; /* Port bitmap. */
bcm_pbmp_t ubmp; /* Untagged port bitmap. */
unsigned int l2mc_index; /* XGS: L2MC index. */
unsigned int flags; /* See BCM_MCAST_XXX flag definitions. */
int distribution_class; /* Fabric Distribution Class. */
} bcm_mcast_addr_t;
#else
typedef struct bcm_mcast_addr_s
{
bcm_mac_t mac; /* 802.3 MAC address */
bcm_vlan_t vid; /* VLAN identifier */
bcm_cos_t cos_dst; /* COS based on dst addr */
bcm_pbmp_t pbmp; /* Port bitmap */
bcm_pbmp_t ubmp; /* Untag port bitmap */
unsigned int l2mc_index; /* XGS: l2mc index */
} bcm_mcast_addr_t;
#endif
extern SEM_ID semIgmpDelete;
extern SEM_ID semIgmpReceive;
extern SEM_ID sempreview;
extern SEM_ID semPreJoin;
extern SEM_ID semSwitch;
extern int nIGMPTaskId;
extern MSG_Q_ID IGMPMsgQId;
extern BOOL bIgmpDebug;
extern BOOL bUpLinkPortEnable; /*上联口使能,为0不能级联 */
#define RandMax 0x7FFF
#define TIMER_RATE 2
extern int timetick1;
extern int timetick2;
extern int timetick3;
extern int timetick4;
extern int timetick5;
extern int turbo;
#define tenGE1 25
#define tenGE2 26
#define MaxOnuPort 24
#define MAXPortNum2 64
#define usMaxPreJoin 255
#ifdef _AN5116_06A_
#define MIN_UPLINK_PORT 17
#define MAX_UPLINK_PORT 26
#define MAX_DOWN_SLOT 4
#define MaxOnu 254
#define MaxGroup 1024 /*最大组播组数 */
#define usMaxPort 26
#else
#define MIN_UPLINK_PORT 18
#define MAX_UPLINK_PORT 24
#define MAX_DOWN_SLOT 16
#define MaxOnu 128
#define MaxGroup 255 /*最大组播组数 */
#define usMaxPort 24
#endif
#define usMaxUser (MaxGroup * usMaxPort) /*同时加入组播组的用户数 */
#define usMaxTimer 7 /*系统最大定时器个数 */
#define IGMPMembershipQuery 0x11 /*组播组查询 */
#define IGMPV1MembershipReport 0x12 /*版本1成员报告 */
#define IGMPV2MembershipReport 0x16 /*版本2成员报告 */
#define IGMPLeaveGroup 0x17 /*离开消息 */
#define IGMPV3MembershipReport 0x22 /* RFC3376 */
extern USHORT sMaxIGMPMsgQLength;
extern BOOL gEnableCrossVlan; /*多组播VLAN 标志位1表示开 */
extern BOOL bEnableIGMPAllowList;
extern USHORT usPortMapSessionId[MAX_UPLINK_PORT + 1];
extern BOOL bEnablePortIGMP[MAX_UPLINK_PORT + 1]; /*端口是否允许IGMP */
extern BOOL bHostEnableIGMPV1; /*是否兼容IGMPV1 */
extern BOOL bRouterEnableIGMPV1; /*是否兼容IGMPV1 */
extern BOOL bEnableSecurityOption; /*是否检查IP包安全选项 */
extern BOOL bEnableHostModule; /*是否关闭以太网侧HOST功能 */
extern BOOL bEnableRouterModule; /*是否关闭ATM侧Router功能 */
extern BOOL bEnableQueryElection; /*否进行IGMP V2 查询者选举 */
extern BOOL bEnableInstantLeave; /*是否允许端口开速离开 */
extern BOOL bQuerierFlag; /*查询者标志 */
extern BOOL bV1RouterPresentFlag; /*V1版本路由器存在标志 */
extern UCHAR ucRobustness; /*健壮性变量 */
extern USHORT usQueryInterval; /*通用查询周期 */
extern USHORT usStartupQueryInterval; /*初始查询周期 */
extern UCHAR ucStartupQueryCount; /*初始查询次数 */
extern USHORT usQueryResponseInterval; /*最大响应时间 */
extern USHORT usGroupMembershipInterval; /*V2成员存在周期 */
extern USHORT usLastMemberQueryInterval; /*最后成员查询周期 */
extern UCHAR ucLastMemberQueryCount; /*最后成员查询次数 */
extern USHORT usUnsolicitedReportInterval; /*主动报告发送周期 */
extern USHORT usV1RouterPresentTimeout; /*V1版本路由器存在超时 */
extern USHORT usOtherQuerierPresentInterval; /*其他查询者存在周期 */
extern UINT tIgmpMembershipTimer;
extern UINT tStartupQueryTimer; /*初始查询定时器 */
extern UINT tV1RouterPresentTimer; /*V1版本路由器存在定时器 */
extern UINT tOtherQuerierPresentTimer; /*其他查询者存在定时器 */
extern UINT tGeneralQueryTimer; /*通用查询定时器 */
extern UINT unGeneralQueryTimerCount;
extern ULONG ulEtherReceiveIgmpPkt; /*统计Ethernet收到的IGMP包总数 */
extern ULONG ulEtherReceiveIgmpV1Query; /*统计Ethernet收到的IGMP V1 Query包数 */
extern ULONG ulEtherReceiveIgmpV2Query; /*统计Ethernet收到的IGMP V2 Query包数 */
extern ULONG ulEtherReceiveIgmpV1MembershipReport; /*统计Ethernet收到的IGMP V1 Report包数 */
extern ULONG ulEtherReceiveIgmpV2MembershipReport; /*统计Ethernet收到的IGMP V2 Report包数 */
extern ULONG ulEtherReceiveIgmpV3MembershipReport;
extern ULONG ulEtherReceiveIgmpLeaveGroup; /*统计Ethernet收到的IGMP Leave包数 */
extern ULONG ulEtherReceiveIgmpBad; /*统计Ethernet收到的错误包数 */
extern ULONG ulEtherReceiveIgmpUnknown; /*统计Ethernet收到的无法识别的包数 */
extern ULONG ulATMReceiveIgmpPkt; /*统计ATM收到的IGMP包总数 */
extern ULONG ulATMReceiveIgmpV1Query; /*统计ATM收到的IGMP V1 Query包数 */
extern ULONG ulATMReceiveIgmpV2Query; /*统计ATM收到的IGMP V2 Query包数 */
extern ULONG ulATMReceiveIgmpV1MembershipReport; /*统计ATM收到的IGMP V1 Report包数 */
extern ULONG ulATMReceiveIgmpV2MembershipReport; /*统计ATM收到的IGMP V2 Report包数 */
extern ULONG ulATMReceiveIgmpV3MembershipReport;
extern ULONG ulATMReceiveIgmpLeaveGroup; /*统计ATM收到的IGMP Leave包数 */
extern ULONG ulATMReceiveIgmpBad; /*统计ATM收到的错误包数 */
extern ULONG ulATMReceiveIgmpUnknown; /*统计ATM收到的无法识别的包数 */
extern ULONG ulIGMPReceivePktAll; /*统计接收模块总共收到的包数 */
extern ULONG ulIGMPSendToQueueAll; /*统计接收模块发送进消息队列的包数 */
extern ULONG ulIGMPReceiveBadPktAll; /*统计接收模块收到的错误包数 */
extern ULONG ulIGMPDropPktAll; /*统计接收模块丢弃的包总数 */
extern ULONG ulIGMPMembershipQuerySent; /*统计发送查询包的总数 */
extern ULONG ulIGMPMembershipGeneralQuerySent; /*统计发送通用查询包的总数 */
extern ULONG ulIGMPMembershipSpecificQuerySent; /*统计发送特定查询包的总数 */
extern ULONG ulIGMPMembershipV1QuerySent; /*统计发送V1查询包的总数 */
extern ULONG ulIGMPMembershipV2QuerySent; /*统计发送V2查询包的总数 */
extern ULONG ulIGMPV1MembershipReportSent; /*统计发送版本1报告的总数 */
extern ULONG ulIGMPV2MembershipReportSent; /*统计发送版本2报告的总数 */
extern ULONG ulIGMPLeaveGroupSent; /*统计发送离开包的总数 */
extern ULONG ulIGMPEtherSent; /*统计Ether发送的包总数 */
extern ULONG ulGeneralQueryTimeOutTimes;
extern ULONG ulHostReportDelayTimeOutTimes;
extern ULONG ulGroupPortV2MembershipTimeOutTimes;
extern ULONG ulGroupPortLastMemberQueryTimeOutTimes;
extern ULONG ulGroupV1HostPresentTimeOutTimes;
extern ULONG ulGroupPortV1HostTimeOutTimes;
extern ULONG ulStartupQueryTimeOutTimes;
extern ULONG ulV1RouterPresentTimeOutTimes;
extern ULONG ulOtherQuerierPresentTimeOutTimes;
extern USHORT usCurrentMsgQLength;
extern USHORT usRealMaxMsgQLength;
extern USHORT usCurrentUser; /*当前组播用户数 */
extern USHORT usCurrentGroup; /*当前频道数 */
extern USHORT usCurrentTimer; /*当前定时器个数 */
extern UCHAR ucCurrentStartupQueryCount;
extern ULONG ulCustomMemoryUsed;
extern USHORT usCurrentPreJoinNode;
extern int Guserlimit; /*move全局用户限制数量 */
extern int Ggrouplimit;
extern int previewtime1; /*预览时间 */
extern int previewinterval1; /*预览间隔 */
extern int fpreviewflag;
extern int figmpportflag; /* igmp port swich, 0:disble, 1:enalbe */
extern int fgroupauthflag; /* group auth flag, 0:disable, 1:enable */
extern int fsourcecon;
extern int global_vlan;
extern int gEc2IGMPProxyEnable; /*ec2 igmp proxy 使能 */
extern USHORT testcount;
extern UINT tIgmpTestTimer; /*IGMP处理包测试定时器 */
extern int testReceieveJoin; /*测试收到并处理的加入报文 */
extern int testReceiveLeave; /*测试收到并处理的离开报文 */
extern UINT tIgmpPreviewTimer;
extern struct igmp_group_auth *GroupAuthlist;
extern struct preview_node *previewlist;
extern struct ethernet_information gEtherInfo; /*aibin */
extern char slot_module[MAX_UPLINK_PORT + 1]; /*槽位所属于的模块,0表示router模块端口,1表示host模块(上联口)端口 */
extern struct GroupAdd GZ_add[11];
extern int gz_ctc_test;
/*节目源与山联口对应的结构*/
typedef struct Source_Group
{
struct Source_Group *pNext;
UINT groupaddress;
UCHAR upslot;
} SourceGroup;
struct UplinkPort
{
UINT range1[2]; /*地址范围1 */
UINT range2[2];
UINT range3[2];
};
typedef struct
{
#ifdef __LITTLE_ENDIAN_BITFIELD
UCHAR headerlength:4, version:4;
#else
UCHAR version:4, headerlength:4;
#endif
UCHAR tos;
USHORT total_len;
USHORT id;
USHORT frag_off;
UCHAR ttl;
UCHAR protocol;
USHORT checksum;
UINT saddr;
UINT daddr;
/*The options start here. */
}
ipheader;
typedef struct
{
#ifdef __LITTLE_ENDIAN_BITFIELD
UCHAR headerlength:4, version:4;
#else
UCHAR version:4, headerlength:4;
#endif
UCHAR tos;
USHORT total_len;
USHORT id;
USHORT frag_off;
UCHAR ttl;
UCHAR protocol;
USHORT checksum;
UINT saddr;
UINT daddr;
UINT option;
}
ipheaderwithoption;
typedef struct
{
UCHAR ucType;
UCHAR ucMaxRespTime;
USHORT usChecksum;
UINT unGroupAddress;
}
igmpheader;
typedef struct
{
USHORT TagProtocolType;
/*USHORT UserPriority:3, TunnelType:1, VlanID:12; */
USHORT VlanID;
}
vlantag;
typedef enum
{
NonMember = 0,
DelayingMember = 1,
IdleMember = 2
}
HostStatus;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -