
/************************************************************************/
/* Title:     omc_public.h											*/
/* Desc:      Public variables def for PACS OMC Project.            */
/* Author:    Meng Xiaozhen											*/
/* CrtDate:  2000-08-16												*/
/* AltDate:   2001-06-21											*/
/* CVS:       $Id: omc_public.h,v 1.1 2000/08/03 01:09:33 mengxz Exp $	*/
/************************************************************************/
#ifndef OMC_PUBLIC__H
#define OMC_PUBLIC__H

#ifndef	PUBLIC__H
	#include "public.h"
#endif

#ifndef	IPTRANS__H
	#include "iptrans.h"
#endif	

#define	 DEBUG 1

/***************************************************/
/*	Macro define for Server's system number	  */
#define GRP_NUM   		32	

#define TS_NUM   		32	
#define TS_SUB   		16	
#define TS_E1   		8	

#define PW_NUM   		32	
#define PW_SUB   		3	

#define ETH_NUM   		32	
#define ETH_SUB   		16	

#define RDEV_NUM   		32	
#define RDEV_SUB   		8	
#define RDEV_E1   		1	

#define BSS_NUM   		48	

#define BSC_NUM   		12	
#define BSC_SUB   		9	
#define BSC_E1   		2	

#define BTS_NUM   		24	//BTS system include 12 BTS subsystem
#define BTSSITE_NUM		48	//BTS site   include 6  BTS subsystem
#define BTS_SUB   		12	
#define BTS_E1   		2	

#define SVR_NUM  		36	

#define CONN_NUM  		128	
#define CLIENT_NUM		50	
#define BTN_NUM			66	

#define ALARM_NUM		20	
#define CACHE_BUF		512	
/***************************************************/

/***************************************************/
/*	Macro definition of start ID for applet's button used by system device */
#define		TS_START_BTN  0
#define		RDEV_START_BTN 18
#define		SVR_START_BTN 34
#define		BSC_START_BTN 54
/***************************************************/


/***************************************************/
/*	Macro define for Server's IP Address	   */
#define OMC_0   		"172.18.128.1"
#define OMC_1   		"172.18.129.1"
#define HLR_0   		"172.18.132.1"
#define HLR_1   		"172.18.133.1"
#define PPS_0   	    "172.18.136.1"
#define PPS_1   	    "172.18.137.1"
#define CDR_0   		"172.18.160.1"
#define CDR_1   		"172.18.161.1"
/***************************************************/

/***************************************************/
/*	Macro define for Mysql Database		   */
#define HOST_NAME			"localhost"
#define	DB_NAME1			"mysql"
#define DB_PORT_NUM			0
#define SOCKET_NAME			NULL
#define FLAGS				0
#define USER_NAME			"root"
#define	PASSWORD			"rootaa"
/***************************************************/

/***************************************************/
/*	Macro def for (UDP)Communication port used by OMC 		   */
#define PORT_OUT 				4951	//for sending message to ts		
#define PORT_BASE				4951	
#define	PORT_REALSTAT			3		/* 4951 + 3 = 4954 */
#define PORT_CSTA				4		/* 4951 + 4 = 4955 */
#define PORT_COMM				5		/* 4951 + 5 = 4956 */
#define PORT_HEARTBEAT			6		/* 4951 + 6 = 4957 */
#define PORT_CLUSTER			27		/* 4951 + 27 =4978 */
#define BROADCAST_IP			"172.18.255.255"	
#define CLUSTER_IP				"239.255.10.1"	
#define BROADCAST 				0 		//if broadcast message

/***************************************************/
/*	Macro def for shm key and sem key used by OMC   */
#define  COMM_FLAG_SHM_KEY		0x6a000000 		
#define  COMM_FLAG_SHM_PERM		0666 		
#define  COMM_FLAG_SEM_KEY		300
#define  COMM_FLAG_SEM_PERM		0666		
#define  COMM_FLAG_SEM_NUM		1		
#define  COMM_FLAG_SIZE  		1024	

#define  COMM_LIST_SHM_KEY 		0x6a100000 		
#define  COMM_LIST_SHM_PERM		0666 		
#define  COMM_LIST_SEM_KEY		310 		
#define  COMM_LIST_SEM_PERM		0666 		
#define  COMM_LIST_SEM_NUM		1 		

#define  STATUS_SHM_KEY 		0x6a200000 		
#define  STATUS_SHM_PERM 		0666 		
#define  STATUS_SEM_KEY 		320 			
#define  STATUS_SEM_PERM 		0666
#define  STATUS_SEM_NUM 		1

#define  CACHE_SHM_KEY 			0x6a400000 		
#define  CACHE_SHM_PERM 		0666 		
#define  CACHE_SEM_KEY 			340 		
#define  CACHE_SEM_PERM 		0666
#define  CACHE_SEM_NUM 			1

#define  BSS_SHM_KEY 			0x6a600000 		
#define  BSS_SHM_PERM 			0666 		
#define  BSS_SEM_KEY 			360 		
#define  BSS_SEM_PERM 			0666
#define  BSS_SEM_NUM 			1

#define  LED_SHM_KEY 			0x6a800000 		
#define  LED_SHM_PERM 			0666 		
#define  LED_SEM_KEY 			380 		
#define  LED_SEM_PERM 			0666
#define  LED_SEM_NUM 			1

#define  CLUSTER_SHM_KEY 		0x6a900000 		
#define  CLUSTER_SHM_PERM 		0666 		
#define  CLUSTER_SEM_KEY 		390 		
#define  CLUSTER_SEM_PERM 		0666
#define  CLUSTER_SEM_NUM 		1
/***************************************************/

/*############################################################################
 * shm  structure 
 *   between heartbeat transceiver and heartbeat processor
 * &
 *  between  heartbeat transceiver and svr cluster processor
 *###########################################################################*/
 typedef struct cache_list{
	long 	msgSrcIP;
	u_short	msgLength;
	BYTE	msgContent[CACHE_BUF];
 }cache_list;
 
 typedef struct status_cahce{
 	//int		send_flag; 
	/*this flag is only for server cluster funciton 
	 *0/1/2=ignore cluster FSM  influence,directly send heartbeat/cluster permit     *to send heartbeat/can't send heartbeat,waiting cluster's info
	 */
	u_short msgReadSub;
	u_short msgWriteSub;
	cache_list msgcache[CACHE_BUF];
 }status_cache;

/*############################################################################
 * shm  structure between real status processor and heartbeat processor
 *###########################################################################*/

typedef struct clientinfo {
	BYTE			used_flag;		// 0/1=not used/used
	BYTE			grp_id;			// group which is requested by client now
	BYTE			is_responsed;	// 0/1/2=not response/responsing/responsed
	long 			ip;
	unsigned int	waittime;		//if waittime>60seconds,timeout
	BYTE			updatetime[16];	//last time when client request info
} client_info;

typedef struct conninfo {
	BYTE		avail_flag;		// 0/1=unavailable/available
	BYTE		disp_name;		// 0/1=not display/display
	char		name[16];	
	char		remark[44];	
	BYTE		lsys_type;// local device system type
	BYTE		lsys_id;  //local device system id	
	BYTE		lsub_id;  //local device subsystem id	
	BYTE		rsys_type;  //remote device system type	
	BYTE		rsys_id;  //remote device system id	
	BYTE		rsub_id;  //remote device subsystem id	
} conn_info;

typedef struct btninfo {
	BYTE		used_flag;		// 0/1=not use/used
	BYTE		sys_type;		// device system type
	BYTE		sys_id;  		// device system id	
	BYTE		sub_id;  	// device subsystem id	
} btn_info;

typedef struct grp_simple_stat {
	btn_info		btn[BTN_NUM];  	// relationship between button and device
	unsigned int	coord[2];  // X,Y coord for group icon
	int				critical;  	// critical  counter 
	int				alarm;  		// alarm	 counter 
	BYTE			isinstalled;	// 0/1=not install/install
	BYTE			ts_id[2];  		// Transit switch id(default=99,no ts)
	BYTE			disp_name;		// 0/1=not display/display
	BYTE			grp_name[17];	// Group name	
	BYTE			grp_remark[45]; // remark about group
	BYTE			stat_amount;  	// number of status for group icon
	BYTE			stat_direct;  	// direction of display status (0/1=h/v) 
	BYTE			ischanged;
		/* 0/1=N/Y,process will send message to client if status is changed
		 */
	BYTE			status;
		/*0=critical ; 1=normal ; 2=alarm ; 3= uninstalled  
		 */
}grpsimple_stat;

typedef struct subts_detail_stat {
	BYTE	subtype;    //subsystem status		
	BYTE	timeout;	//if the subsystem is timeout(0/1=timeout/not)	
	BYTE	substat0[8];// simple status of this subsystem
		/* substat0[0] -- if subsys is installed(0/1=not/yes)
	 	 * substat0[1] -- if subsys is normal(0/1=abnormal/normal)
	 	 * substat0[2] -- if subsys send master clock(0/1=not/sending)
	 	 * substat0[3] -- locking clock(0-7:2=normal,7=idle,other=abnormal)
	 	 */
	BYTE	substat1[8];	// performance or status data of subsystem
		/* substat1[0-1] -- CPU Load ('00'-'45')
	 	 * substat1[2-4] -- Clock frequency('000'-'255')
		 */
		
	BYTE	e1stat0[TS_E1][8];						//simple status of all E1
		/* e1[i][0] -- e1[i] installed/not installed         (0/1=not/yes) 
	 	 * e1[i][1] -- e1[i] layer 2 installed/not installed (0/1=not/yes)
	 	 * e1[i][2] -- e1[i] layer 1 connected/disconnected  (0/1=not/yes)
	 	 * e1[i][3] -- e1[i] layer 2 connected/disconnected  (0/1=not/yes)
	 	 * e1[i][4] -- e1[i] without/with ECHO 	CANCELLER    (0/1=not/yes)
	 	 */
	BYTE 	e1stat1[TS_E1][8];	// performance or status data of all E1
		/* e1[i][0-1] -- e1[i] idle channels('00'/'30')
	 	 */
		 
	long	lock_alarmtime;	
		/*last time inserting alarm log into db	 because of clock locking error
		 */
	long	e1_alarmtime[TS_E1][2];	
		/*last time inserting alarm log into db	 because of e1 1,2th error
		 */
	BYTE	version_info[16];
		/*version information for the application
		 */
	BYTE	updatetime[16];		//last time refreshing subsystem status	
}subtsdetail_stat;
 
typedef struct subpw_detail_stat {
	BYTE	timeout;	//if the subsystem is timeout(0/1=timeout/not)	
	BYTE	substat[2];	//  status of this subsystem(0/1=abnomal/normal)
		/* substat[0] -- if subsys is installed(0/1=not/yes)
	 	 * substat[1] -- if subsys is normal(0/1=abnormal/normal)
		 */
		 
	long	pcard_alarmtime;	
		/*last time inserting alarm log into db	 because of power card error
		 */
	BYTE	updatetime[16];		//last time refreshing subsystem status	
}subpwdetail_stat;
 
typedef struct ts_detail_stat {
	BYTE				grp_id;
	BYTE				clock_status;//if master clock is normal(0/1=N/Y)
	long				clock_alarmtime;//master clock status
	/*last time inserting alarm log into db because of master clock error
	 */
	subtsdetail_stat	sub_detail[TS_SUB];
	subpwdetail_stat	subpw_detail[PW_SUB];
}tsdetail_stat;

typedef struct subts_simple_stat {
	BYTE	isinstalled;
	BYTE	ischanged;
		/* 0/1=N/Y,process will send message to client if status is changed
		 */
	BYTE	status;
		/*0=critical ; 1=normal ; 2=alarm ; 3=uninstalled 
		 */
	int		critical;  	// critical  counter 
	int		alarm;  // alarm	 counter 
	int		waittime; // if TS subsystem is timeout 
	BYTE	issent ;  // if sending get request to timeout ts subsystem
} subtssimple_stat;


typedef struct ts_simple_stat {
	BYTE	isinstalled; // 0/1=N/Y
	BYTE	location;	 //  0/1=local/remote
	BYTE	ischanged;
		/* 0/1=N/Y,process will send message to client if status is changed
		 */
	BYTE	status;
		/*0=critical ; 1=normal ; 2=alarm ; 3=uninstalled 
		 */
	int		critical;  	// critical  counter 
	int		alarm;  // alarm	 counter 
	BYTE	grp_id;
	BYTE	disp_name;		// 0/1=not display/display
	BYTE	name[16];
	BYTE	remark[44];
	int		coord[2];
	BYTE	stat_amount;  	// number of status for ts icon
	BYTE	stat_direct;  	// direction of display status (0/1=h/v) 
	subtssimple_stat	sub_simple[TS_SUB];
	subtssimple_stat	subpw_simple[PW_SUB];
} tssimple_stat;

typedef struct subeth_detail_stat {
	BYTE	timeout;		//if the subsystem is timeout(0/1=timeout/not)	
	long 	self_ip; 		//ip address of LAN Module self
	BYTE 	mac[6]; 		//physical address of LAN Module 
	
	BYTE	substat[6];
		/* substat[0] -- if LAN Module is installed(0/1)
	 	 * substat[1] -- if LAN Module is normal(0/1)
	 	 * substat[2] -- if there is unreachable ip(0/1)
	 	 * substat[3] -- if LAN Module upload program to csu(0/1)
	 	 * substat[4] -- if csu is availabe (0/1)
	 	 */
	 
	BYTE 	cpu_load[2];		//CPU load of LAN module(hex value) 
	BYTE 	unreachable_ip[4];	//ip Can't be found by LAN Module (hex value)
	long	unreach_time;
	
	long	alarmtime[2];
		/*CSU Upload program status 
	 	 *alarmtime[0] -- can't reach target ip address 
	 	 *alarmtime[1] -- uploading program 
		 */ 
	BYTE	version_info[16];
		/*version information for the application
		 */
	char	updatetime[16];
}subethdetail_stat;

typedef struct eth_detail_stat {
	BYTE				grp_id;
	subethdetail_stat	sub_detail[ETH_SUB];
}ethdetail_stat;

typedef struct subeth_simple_stat {
	BYTE	isinstalled;
	BYTE	ischanged;
		/* 0/1=N/Y,process will send message to client if status is changed
		 */
	BYTE	status;
		/*0=critical ; 1=normal ; 2=alarm ; 3=uninstalled 
		 */
	int		critical;  	// critical  counter 
	int		alarm;  // alarm	 counter 
	int		waittime; // if TS subsystem is timeout 
	BYTE	issent ;  // if sending get request to timeout ts subsystem
} subethsimple_stat;

typedef struct eth_simple_stat {
	BYTE	isinstalled; // 0/1=N/Y
	BYTE	ischanged;
		/* 0/1=N/Y,process will send message to client if status is changed
		 */
	BYTE	status;
		/*0=critical ; 1=normal ; 2=alarm ; 3=uninstalled 
		 */
	int		critical;  	// critical  counter 
	int		alarm;  // alarm	 counter 
	BYTE	grp_id;
	subethsimple_stat	sub_simple[ETH_SUB];
} ethsimple_stat;

typedef struct subrdev_detail_stat {
	BYTE 	subtype;	//0-4
	
	BYTE	timeout;		//if the subsystem is timeout(0/1=timeout/not)	
	BYTE	substat0[6];
		/* substat[0] -- if subsys is installed(0/1=N/Y)
	 	 * substat[1] -- if subsys is normal(0/1=N/Y)
	 	 * sysstat[2] -- if send master clock(0/1=N/Y)
	 	 */
	BYTE	substat1[6];
	 	/* substat[0-1] -- used CPU(00/30)
	 	 */
		 
	BYTE	e1stat0[RDEV_E1][8];
		/* e1[0] -- e1 installed/not installed (0/1=N/Y) 
	 	 * e1[1] -- e1 layer 1 connected/disconnected (0/1=N/Y)
	 	 * e1[2] -- e1 layer 2 connected/disconnected (0/1=N/Y)
	 	 */
	BYTE	e1stat1[RDEV_E1][8];
	 	/* e1[i][0-1] -- e1 idle channels('00'--'30')
		 */
		 
	long	e1_alarmtime[RDEV_E1][2];
	/* alarmtime[i][0] -- e1[i] layer 1 
	 * alarmtime[i][1] -- e1[i] layer 2 
	*/ 
	BYTE	version_info[16];
		/*version information for the application
		 */
	char	updatetime[16];
}subrdevdetail_stat;

typedef struct rdev_detail_stat {
	BYTE				grp_id;
	BYTE 				systype; 		//05=VPS;06=PCR
	BYTE				clock_status;//if master clock is normal(0/1=N/Y)
	long				clock_alarmtime;//master clock status
	/*last time inserting alarm log into db because of master clock error
	 */
	subrdevdetail_stat	sub_detail[RDEV_SUB];
}rdevdetail_stat;

typedef struct subrdev_simple_stat {
	BYTE	isinstalled;
	BYTE	ischanged;
		/* 0/1=N/Y,process will send message to client if status is changed
		 */
	BYTE	status;
		/*0=critical ; 1=normal ; 2=alarm ; 3=uninstalled 
		 */
	int		critical;  	// critical  counter 
	int		alarm;  // alarm	 counter 
	int		waittime; // if Rdev subsystem is timeout 
	BYTE	issent ;  // if sending get request to timeout ts subsystem
} subrdevsimple_stat;

typedef struct rdev_simple_stat {
	BYTE	isinstalled; // 0/1=N/Y
	BYTE	location;	 //  0/1=local/remote
	BYTE	ischanged;
		/* 0/1=N/Y,process will send message to client if status is changed
		 */
	BYTE	status;
		/*0=critical ; 1=normal ; 2=alarm ; 3=uninstalled 
		 */
	int		critical;  	// critical  counter 
	int		alarm;  // alarm	 counter 
	BYTE	grp_id;
	BYTE	disp_name;		// 0/1=not display/display
	BYTE	name[16];
	BYTE	remark[44];
	int		coord[2];
	BYTE	stat_amount;  	// number of status for rdev icon
	BYTE	stat_direct;  	// direction of display status (0/1=h/v) 
	subrdevsimple_stat	sub_simple[RDEV_SUB];
} rdevsimple_stat;

typedef struct bts_simple_stat {
	BYTE	isinstalled;	 //  0/1=not/installed
	BYTE	bts_site_id; 
	BYTE	bts_link_id; 
	BYTE	location;	 //  0/1=local/remote
	BYTE	ischanged;
		/* 0/1=N/Y,process will send message to client if status is changed
		 */
	BYTE	status;
		/*0=critical ; 1=normal ; 2=alarm ; 3=uninstalled 
		 */
	int		critical;  	// critical  counter 
	int		alarm;  // alarm	 counter 
	BYTE	grp_id;
	BYTE	disp_name;		// 0/1=not display/display
	BYTE	name[16];
	BYTE	remark[44];
	int		coord[2];
	BYTE	stat_amount;  	// number of status for bts site icon
	BYTE	stat_direct;  	// direction of display status (0/1=h/v) 
} btssimple_stat;

typedef struct bsc_simple_stat {
	BYTE	isinstalled;	 //  0/1=not/installed
	BYTE	location;	 	 //  0/1=local/remote
	BYTE	timeout;	 	 //  0/1=timeout/not timeout
	BYTE	ischanged;
		/* 0/1=N/Y,process will send message to client if status is changed
		 */
	BYTE	status;
		/*0=critical ; 1=normal ; 2=alarm ; 3=uninstalled 
		 */
	int		critical;  	// critical  counter 
	int		alarm;  	// alarm	 counter 
	BYTE	grp_id;
	BYTE	disp_name;		// 0/1=not display/display
	BYTE	name[16];
	BYTE	remark[44];
	int		coord[2];
	BYTE	stat_amount;  	// number of status for bsc icon
	BYTE	stat_direct;  	// direction of display status (0/1=h/v) 
} bscsimple_stat;


/* structure for server detail status in heartbeat processor
 ************************************/
typedef struct svr_detail_stat {
	BYTE	timeout;		//if the subsystem is timeout(0/1=not/timeout)	
	BYTE	grp_id;
	BYTE 	systype;
	BYTE 	sys_id;
	int 	cpuused;
	int 	viravail;
	int 	virfree;
	int		memavail;
	int 	memfree;
	int 	hdavail;
	int 	hdfree;
	BYTE 	init_progress[3];
	BYTE	proc_id[16];
	BYTE	proc_status[16];
	BYTE	subproc_num[16];
	BYTE	sysstat[16]; 		// 0/1=abnormal/normal
		/*
		 * 0=Normal,1=abnormal
		 *sysstat[0]: system status
	 	 * sysstat[1]:cpu status   sysstat[2]:swap status
	 	 * sysstat[3]:memory status  sysstat[4]:disk status 
	 	 * sysstat[5]:proc_status  sysstat[6]:server working status
	 	 * sysstat[7]:database status
	 	 */
	long	alarmtime[6];

	BYTE	version_info[16];
		/*version information for the application
		 */
	BYTE	updatetime[16];		
} svrdetail_stat;

typedef struct svr_simple_stat {
	BYTE	grp_id;
	BYTE	location;
	BYTE	isinstalled;
	int		waittime;
	BYTE	ischanged;
		/* 0/1=N/Y,process will send message to client if status is changed
		 */
	BYTE	status;
		/*0=critical ; 1=normal ; 2=alarm ; 3=uninstalled 
		 */
	int		critical;  	// critical  counter 
	int		alarm;  // alarm	 counter 
	BYTE	disp_name;		// 0/1=not display/display
	BYTE	name[16];
	BYTE	remark[44];
	int		coord[2];
	BYTE	stat_amount;  	// number of status for bts site icon
	BYTE	stat_direct;  	// direction of display status (0/1=h/v) 
} svrsimple_stat;

struct	alarm_log {
	BYTE	systype;
	BYTE	sys_id;
	BYTE	sub_id;
	BYTE	e1no;
	BYTE	alarmnum;
	BYTE	occurtime[16];
};

typedef struct ts_alarm_log {
	int	readSub;
	int	writeSub;
	struct alarm_log alrlist[ALARM_NUM];
} tsalarm_log;

typedef struct ask_alarm_log {
	long	client_ip;	//ip address where the request is sent from
	int		init_Req_Flag;
	int		readSub;
	int		writeSub;
	struct alarm_log alrlist[ALARM_NUM];
} askalarm_log;

/*
 * shared memory structure 
 *************************/
typedef struct  shm_ts_stat {
	BYTE			init_flag;
	BYTE 			sys_struct;//0/1=single/double plane system structure
	grpsimple_stat	grp_simple[GRP_NUM];
	tsdetail_stat	ts_detail[TS_NUM];
	tssimple_stat	ts_simple[TS_NUM];
	ethdetail_stat	eth_detail[ETH_NUM];
	ethsimple_stat	eth_simple[ETH_NUM];
	rdevdetail_stat	vps_detail[RDEV_NUM];
	rdevsimple_stat	vps_simple[RDEV_NUM];
	rdevdetail_stat	pcr_detail[RDEV_NUM];
	rdevsimple_stat	pcr_simple[RDEV_NUM];
	svrdetail_stat	svr_detail[SVR_NUM];
	svrsimple_stat	svr_simple[SVR_NUM];
	/*
		sysnum=systype*2+sys_id
		svr_simple[0]=OMC-0
		svr_simple[1]=OMC-1
		svr_simple[2]=HLR-0
		svr_simple[3]=HLR-1
		svr_simple[4]=PRP-0
		svr_simple[5]=PRP-1
		svr_simple[6]=CDR-0
		svr_simple[7]=CDR-1
	*/
	bscsimple_stat bsc_simple[BSC_NUM];

	BYTE global_status[ETH_NUM];		
	conn_info connection[CONN_NUM];		
	client_info client[CLIENT_NUM];		
	/*global_status[0]= if normal ;global_status[1]= if  changed*/
	tsalarm_log	alarmlog;
} shm_stat;

/*****************************************************************************/
/*	Lan Module's global status*/
typedef struct global_status{
	BYTE eth_mac[ETH_NUM][ETH_SUB][7];
	long update_time[ETH_NUM][ETH_SUB];
	long alarm_time[ETH_NUM][ETH_SUB];
}eth_global;
/***************************************************/

/*****************************************************************************/
/* structure for BSS simple status in heartbeat processor
 ************************************/
typedef struct bss_simple_stat {
	BYTE	isinstalled[BSS_NUM];	
	BYTE	ischanged[BSS_NUM];
	BYTE	isnormal[BSS_NUM];
	unsigned int	waittime[BSS_NUM];
} bsssimple_stat;
/***************************************************/

#endif   /*OMC_PUBLIC__H */
