⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 igmp.h

📁 igmp for switch in vxworks
💻 H
📖 第 1 页 / 共 2 页
字号:
#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 + -